【问题标题】:Solidity - Add Total SupplySolidity - 添加总供应量
【发布时间】:2021-07-21 08:31:51
【问题描述】:

我正在remix 上学习稳固性 我还引用了这个open source api 来创建令牌。

是的 here 他们提供了一个 _totalSupply() 函数,我想将它连接到我的智能合约,以便它显示我为什么部署它的代币总量。

这里做错了什么?

pragma solidity ^0.8.0;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";

contract Foobar is ERC20 {
    constructor(uint256 initialSupply) public ERC20("Foobar", "FOO") {
        _mint(msg.sender, initialSupply);
       // add totalSupply here
        _totalSupply(uint256 5000000000000000000000000000000000000000);
    }
}

【问题讨论】:

    标签: ethereum solidity erc20


    【解决方案1】:

    OpenZeppelin ERC20 _totalSupply 是私有属性,这意味着您无法从派生合约(在您的情况下为 Foobar)访问它。

    你的语法也不正确。如果属性至少为internal,则可以将其值设置为

    _totalSupply = 5000000000000000000000000000000000000000;
    

    或者以更易读的方式

    _totalSupply = 5 * 1e39;
    

    如果您想更改其可见性,您需要将(父)ERC20 合同复制到您的 IDE 并更改导入语句以反映新的(本地)位置。然后,您将能够在本地合同副本中更新属性可见性。

    请注意,OpenZeppelin ERC20 包含相对导入路径(例如 import "./IERC20.sol";)。您还需要在本地副本中重写这些,以便它们指向 GitHub 位置。否则,编译器会尝试导入不存在的本地文件。

    【讨论】:

    • 谢谢@Petr Hejda - 这解释了为什么我不能在 BSC 上编译我的代码,所以它可以在他们的合同选项卡下看到。它不识别导入。
    【解决方案2】:

    当您使用mintburn 代币时,OpenZeppelin 合约会自动更新totalSupply。他们还会自动将其公开为您可以读取的变量。你不需要,也不应该,也不能手动设置totalSupply,因为那样分发的代币数量与总供应量不匹配。

    【讨论】:

    • 谢谢 - 所以根据这个定义,我只需要上面的 mint 函数,其他一切(总供应)都会在后台发生?
    • 为了验证,我也建议阅读你继承的合约的源代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2021-10-03
    • 1970-01-01
    相关资源
    最近更新 更多