区块链交易所系统开发:探究源码案例分析

Technical Blog1years go (2023)发布 Dexnav
0

BlockchainTrading所系统开发:探究源码案例分析:量化交易的主要特点在于其利用定量模型来决定买卖,而不是由人们的主观判断。通过建立数学模型来设定交易的触发条件,程序系统会按照严格的数学模型或市场交易条件自动实现买卖的操作。

电报学习交流:DexDao

以下是一段 Solidity 语言编写的Smart Contracts代码。它是一个名为 kongTou 的合约,该合约的主要功能是实现对以太币和 ERC20, ,ERC721, ,ERC1155 标准的代币进行Transfer操作。该合约提供了转账代币的方法,包括 transferEths()、transferTokens() 和 transferTokenOne() 等,用于将以太币或代币从合约地址转移到指定的地址。除此之外,该合约还提供了销毁合约、检查余额等功能。此外,该合约还包括了限定合约操作人的 onlyOwner 修饰符,以及对地址的非零校验的 notAddress 修饰符。此合约中使用了 OpenZeppelin 中的 ERC20、ERC721、ERC1155 标准代币合约,以及 Solidity 的一些关键字,如 modifier 和 constructor 等。

 //SPDX-License-Identifier:MIT;

  pragma solidity^0.8;

  import"openzeppelin/contracts/token/ERC721/IERC721.sol";

  import"openzeppelin/contracts/token/ERC20/IERC20.sol";

  import"openzeppelin/contracts/token/ERC1155/IERC1155.sol";

  contract kongTou{
  address owner;

  modifier onlyOwner(){

  require(msg.sender==owner,"only owner can call this");

  _;

  }

  modifier notAddress(address _useAdd){

  require(_useAdd!=address(0),"address is error");

  _;

  }
  event Received(address,uint);

  constructor()payable{

  owner=msg.sender;

  }

  receive()external payable{

  emit Received(msg.sender,msg.value);

  }

  function pay()public payable{

  }

  function transferEthsAvg(address[]memory _tos)

  payable

  public

  onlyOwner

  returns(bool){

  require(_tos.length>0);

  uint oneValue=address(this).balance/_tos.length;

  for(uint i=0;i<_tos.length;i++){

  require(_tos<i>!=address(0));

  payable(_tos<i>).transfer(oneValue);

  }

  return true;

  }

  function transferEths(address[]memory _tos,uint256[]memory _values)

  payable

  public

  onlyOwner

  returns(bool){

  require(_tos.length>0);

  require(_tos.length==_values.length);

  for(uint32 i=0;i<_tos.length;i++){

  require(_tos<i>!=address(0));

  require(_values<i>>0);

  payable(_tos<i>).transfer(_values<i>);

  }

  return true;

  }

  function transferEth(address _to)

  payable

  public

  onlyOwner

  returns(bool){

  require(_to!=address(0));

  require(msg.value>0);

  payable(_to).transfer(msg.value);

  return true;

  }

  function checkBalance()

  public

  view

  returns(uint){

  return address(this).balance;

  }

  function destroy()

  public

  onlyOwner

  {

  selfdestruct(payable(msg.sender));

  }

  function transferTokensAvg(address from,address _constractAdd,address[]memory _tos,uint _v)

  public

  onlyOwner

  notAddress(from)

  notAddress(_constractAdd)

  returns(bool){

  require(_tos.length>0);

  require(_v>0);

  IERC20 _token=IERC20(_constractAdd);

  //要调用的方法id进行编码

  //bytes4 methodId=bytes4(keccak256("transferFrom(address,address,uint256)"));

  for(uint i=0;i<_tos.length;i++){

  require(_tos<i>!=address(0));

  require(_token.transferFrom(from,_tos<i>,_v));

  //_constractAdd.call(abi.encodeWithSignature("transferFrom(address,address,uint256)",from,_tos<i>,_v));

  //_constractAdd.call(methodId,from,_tos<i>,_v);

  }

  return true;

  }

  function transferTokens(address from,address _constractAdd,address[]memory _tos,uint[]memory _values)

  public

  onlyOwner

  notAddress(from)

  returns(bool){

  require(_tos.length>0);

  require(_values.length>0);

  require(_values.length==_tos.length);

  bool status;

  bytes memory msgs;

  //要调用的方法id进行编码

  //bytes4 methodId=bytes4(keccak256("transferFrom(address,address,uint256)"));

  for(uint i=0;i<_tos.length;i++){

  require(_tos<i>!=address(0));

  require(_values<i>>0);

  (status,msgs)=_constractAdd.call(abi.encodeWithSignature("transferFrom(address,address,uint256)",from,_tos<i>,_values<i>));

  require(status==true);

  //require(_constractAdd.call(methodId,from,_tos<i>,_values<i>));

  }

  return true;

  }

  function transferTokenOne(address _from,address _constractAdd,address _to,uint _tokenId)

  public

  notAddress(_from)

  notAddress(_constractAdd)

  notAddress(_to)

  onlyOwner

  returns(bool){

  IERC721 _token=IERC721(_constractAdd);

  _token.safeTransferFrom(_from,_to,_tokenId);

  return true;

  }

  function transferToken1155(address _from,address _contractAdd,address _to,uint _tokenId,uint _num)

  public

  notAddress(_from)

  notAddress(_contractAdd)

  notAddress(_to)

  returns(bool){

  IERC1155 _token=IERC1155(_contractAdd);

  _token.safeTransferFrom(_from,_to,_tokenId,_num,"");

  return true;

  }

  function transferTokenBatch1155(address _from,address _contractAdd,address _to,uint[]memory _tokenIds,uint[]memory _nums)

  public

  notAddress(_from)

  notAddress(_contractAdd)

  notAddress(_to)

  returns(bool){

  IERC1155 _token=IERC1155(_contractAdd);

  _token.safeBatchTransferFrom(_from,_to,_tokenIds,_nums,"");

  return true;

  }

  }

 

© 版权声明

Related posts

No comments

No comments...