我正在尝试执行从`坚固性教程获得的以下代码
pragma solidity 0.5.4;
contract ERC20Token {
string name;
mapping(address => uint256) public balances;
function mint() payable public {
balances[msg.sender] += msg.value;//use tx.origin,
}
}
contract MyContract {
address public token;
address payable wallet;
constructor(address payable _wallet, address _token) public {
wallet = _wallet;
token = _token;
}
function() external payable{
buyToken();
}
function buyToken() public payable {
ERC20Token _token = ERC20Token(address(token));
_token.mint();
wallet.transfer(msg.value);
}
}教程说我必须使用tx.origin而不是msg.sender,但是tx.origin是一个漏洞。请有人指导我如何解决这个问题。
发布于 2020-01-23 21:30:17
你是正确的,msg.sender是被建议的而不是tx.origin。这不起作用的原因是您没有用mint()调用发送任何ETH,所以它是0,令牌余额也没有增加。很难理解预期的结果,但是您可能希望mint只能由MyContract调用,让mint接受一个参数并调用为_token.mint(msg.value),然后使用该参数作为令牌的数量。
https://ethereum.stackexchange.com/questions/79279
复制相似问题