Solidity - 增加总供应量

问题描述

我正在 remix 上学习 solidity 我也在参考这个 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);
    }
}

解决方法

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

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

_totalSupply = 5000000000000000000000000000000000000000;

或者以更易读的方式

_totalSupply = 5 * 1e39;

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

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

,

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