欢迎光临散文网 会员登陆 & 注册

马蹄链智能合约开发详细丨马蹄链智能合约系统开发逻辑及方案丨马蹄链智能合约系统源码

2023-03-09 10:37 作者:bili_33032327742  | 我要投稿

  一个智能合约被编译后就是一段EVM字节码,将它部署在以太坊的区块链时,会根据部署者的地址和该地址的nonce分配一个合约地址


合约地址和账户地址的格式是没有区别的,但合约地址没有私钥,也就没有人能直接操作该地址的合约数据。要调用合约,唯一的方法是调用合约的公共函数。


  这也是合约的一个限制:合约不能主动执行,它只能被外部账户发起调用。如果一个合约要定期执行,那只能由线下服务器定期发起合约调用。


  mint函数,进行代币增发,注意它是internal函数,所以外部是无法调用的


  function _mint(address to,uint256 value)internal{


  totalSupply=totalSupply.add(value);


  balanceOf[to]=balanceOf[to].add(value);


  emit Transfer(address(0),to,value);


  }


  _burn函数,进行代币燃烧,同样它也是internal函数


  function _burn(address from,uint256 value)internal{


  balanceOf[from]=balanceOf[from].sub(value);


  totalSupply=totalSupply.sub(value);


  emit Transfer(from,address(0),value);


  }开发案例I59源码2OO7详细3O69


  _approve函数,进行授权操作,注意它是private函数,意味着只能在本合约内直接调用。不过,在子合约中可以通过一个内部或者公共的函数进行间接调用。


  function _approve(


  address owner,


  address spender,


  uint256 value


  )private{


  allowance[owner][spender]=value;


  emit Approval(owner,spender,value);


  }


  _transfer函数,转移代币操作,注意也是一个private函数


  function _transfer(


  address from,


  address to,


  uint256 value


  )private{


  balanceOf[from]=balanceOf[from].sub(value);


  balanceOf[to]=balanceOf[to].add(value);


  emit Transfer(from,to,value);


  }开发逻辑:yy625019


  approve函数,注意它是external(外部)函数,用户通常进行授权操作的外部调用接口。


  function approve(address spender,uint256 value)external returns(bool){


  _approve(msg.sender,spender,value);


  return true;


  }


  transfer函数,同上,用户转移代币操作的外部调用接口。


  function transfer(address to,uint256 value)external returns(bool){


  _transfer(msg.sender,to,value);


  return true;


  }


  transferFrom代币授权转移函数,它是一个外部函数,主要是由第三方合约来调用。注意它的实现中(UniswapV2的实现)作了一个假定,如果你的授权额度为最大值(几乎用不完,相当于永久授权),为了减小操作步数和gas,调用时授权余额是不扣除相应的转移代币数量的。这里如果没有授权(授权额度为0),那么会怎样呢?库函数.sub(value)调用时无法通过SafeMath的require检查,会导致整个交易会被重置。所以如果没有授权,第三方合约是无法转移你的代币的,你不用担心你的资产被别的合约随便偷走。


  function transferFrom(


  address from,


  address to,


  uint256 value


  )external returns(bool){


  if(allowance[from][msg.sender]!=uint256(-1)){


  allowance[from][msg.sender]=allowance[from][msg.sender].sub(


  value


  );


  }


  _transfer(from,to,value);


  return true;


  }


马蹄链智能合约开发详细丨马蹄链智能合约系统开发逻辑及方案丨马蹄链智能合约系统源码的评论 (共 条)

分享到微博请遵守国家法律