[英]Solidity contract for other non eth erc-20 token transfer operations
我使用官方代码创建了代币合同,然后又创建了新合同。 现在,我希望使用此新合同来调用令牌合同,将令牌从A帐户转移到B帐户,并遇到无法转让配额的问题。
pragma solidity ^0.4.17;
interface Token {
function approve(address spender, uint256 value) public returns (bool);
function transferFrom(address from, address to, uint256 value) public returns (bool);
}
/**
* The TrxCoin contract does this and that...
*/
contract TrxCoin {
Token token = Token(0xAc08fe3C9F442990C52904dE997D9972499bD3E6);
function getContractAddr() view public returns (address) {
return this;
}
function approve(address spender, uint256 value) public {
require(token.approve(spender, value));
}
function transfer(address _to, uint value) public payable {
require(token.transferFrom(msg.sender, _to, value));
}
}
当我使用令牌合同直接调用approve方法时,可以通过新合同进行转移,但是不能通过使用新合同调用approve方法来直接分配配额。
为什么是这样? 谢谢您的回答!
之所以遇到此问题,是因为您试图批准从合同(而不是实际所有者的地址)中转移令牌。
ERC20 approve
方法将其写入状态,即请求者正在授予允许支出者执行交易的状态。 它使用诸如allowed[msg.sender][_spender] = _value;
。
从帐户(A)调用令牌合约(C)时, msg.sender
设置为address(A)
。 但是,当您从TrxCoin调用令牌合约时,您现在已经引入了一个新合约(B)作为中间人。 现在,链为A-> B-> C。 在这种情况下,C收到的msg.sender
现在是地址(B)。 此时,代币合约状态仍设置为不允许A拥有的任何代币转让给spender
。
没有理由通过TrxCoin
合同委派批准。 只需直接调用令牌合约即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.