ERC20合约安全

ERC20 contract security

我尝试通过外部创建一个撤回函数调用,但我对 erc20 有疑问,当你查看 stoler 函数时,我想象有人与现有 ERC20 的构造函数创建合同并且在他可以接受每一个合同的令牌没有?我希望不会,但是当我尝试这个时,每个地址都可以使用 Mytoken

Mytoken yourToken;

  constructor(address tokenAddress) {
    yourToken = Mytoken(tokenAddress);
  }

  function stoler() public{
    yourToken.transfer(msg.sender, 1);
  }

是的,没错。 如果您不希望用户可以从合同中提取金额,使用 modifier 很有用。 修饰符可以让你限制函数只在特定地址执行。在这种情况下,您有两种可能性:

• 导入'Ownable' 合约并使用onlyOwner() 修饰符:这样,只有在Web3 中部署了智能合约的用户才能调用该函数。 如果你想使用这个功能,你必须这样导入合约:

import "@openzeppelin/contracts/access/Ownable.sol";

并且您必须在此模式下更新 stoler() 功能:

function stoler() public onlyOwner {
    yourToken.transfer(msg.sender, 1);
 }

• 创建一个新的修改器,允许特定地址调用 stolen() 函数并从智能合约中检索其令牌。在这种情况下,您必须以这种方式定义修饰符:

modifier [NAMEMODIFIER] {
    // your logic
    _;
}

然后您必须在此模式下更新 stolen() 功能:

function stoler() public [NAMEMODIFIER] {
        yourToken.transfer(msg.sender, 1);
     }