【问题标题】:There is a way to transfer / mint tokens without ERC20 owner approval method?有没有 ERC20 所有者批准方法来转移/铸造代币的方法?
【发布时间】:2022-08-15 01:29:54
【问题描述】:

我试图了解众筹如何以这种购买代币的方式运作。

将以太币发送到合约的部分是可以的,但代币转移的部分对我来说仍然是黑暗的。

我有一个 ERC20Mintable 令牌,在最新版本的 openzeppelin 中。

我的众筹合同将有成千上万的买家。在大多数教程中,他们教授使用 transferFrom 转移代币,但这需要 ERC20 所有者的批准,对吗?是大多数教程显示的内容。我也可以铸造,可能是因为只有所有者才能铸造代币。 我的问题是:有没有一种方法可以让用户无需 ERC20 所有者的任何操作即可购买代币?

谢谢!

    标签: solidity smartcontracts erc20 openzeppelin


    【解决方案1】:

    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;
        }
    

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 2019-11-30
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多