transferFrom 功能需要所有者批准。因为使用此功能,您允许第三方帐户从您的帐户转移给某人。
假设我想将令牌从您的帐户转移到我兄弟的帐户。为此,您必须先授予权限,并且此权限存储在映射中。如果您允许我从您的帐户中转出特定金额,您首先将我的帐户添加到此映射中
// my address is allowed to transfer token to other address
mapping(address=>mapping(address=>uint256)) allowed;
带有approve 功能。
function approve(address _spender, uint256 _value) public override returns (bool success){
// you are calling this. so you are the msg.sender
// first we are checking if you have enough token to be transferred
require(tokenBalances[msg.sender]>=_value,"insufficient token");
// then you register my account with the _value
allowed[msg.sender][_spender]=_value;
// if in the future there is a dispute, we can check those events for verification
emit Approval(msg.sender,_spender,_value);
return true;
}
这是使用所有者批准的地方。如果您想将资金从您的帐户转移到另一个帐户,请使用transfer 函数:
function transfer(address _to, uint256 _value) public override returns (bool success){
require(tokenBalances[msg.sender]>=_value,"you do not have enough tokens");
tokenBalances[msg.sender]-=_value;
tokenBalances[_to]+=_value;
emit Transfer(msg.sender,_to,_value);
return true;
}