Solidity - 添加总供应量
Solidity - Add Total Supply
我正在 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);
}
}
OpenZeppelin ERC20 _totalSupply
是私有的 属性,这意味着您无法从派生合约访问它(在您的情况下 Foobar
)。
- GitHub link 到 属性 定义
- Solidity docs 可见度修饰符
另外你的语法不正确。如果 属性 至少为 internal
,您可以将其值设置为
_totalSupply = 5000000000000000000000000000000000000000;
或更易读的方式
_totalSupply = 5 * 1e39;
如果您想更改其可见性,您需要将(父)ERC20
合同复制到您的 IDE 并更改导入语句以反映新的(本地)位置。然后,您将能够更新本地合同副本中的 属性 可见性。
请注意 OpenZeppelin ERC20
包含相对导入路径(例如 import "./IERC20.sol";
)。您还需要在本地副本中重写这些内容,以便它们指向 GitHub 位置。否则,编译器将尝试导入不存在的本地文件。
当您 mint
或 burn
代币时,OpenZeppelin 合约会自动更新 totalSupply
。他们还会自动将其公开为您可以读取的变量。你不需要,你不应该,你不能手动设置 totalSupply
,因为那样分发的代币数量将与总供应量不匹配。
我正在 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);
}
}
OpenZeppelin ERC20 _totalSupply
是私有的 属性,这意味着您无法从派生合约访问它(在您的情况下 Foobar
)。
- GitHub link 到 属性 定义
- Solidity docs 可见度修饰符
另外你的语法不正确。如果 属性 至少为 internal
,您可以将其值设置为
_totalSupply = 5000000000000000000000000000000000000000;
或更易读的方式
_totalSupply = 5 * 1e39;
如果您想更改其可见性,您需要将(父)ERC20
合同复制到您的 IDE 并更改导入语句以反映新的(本地)位置。然后,您将能够更新本地合同副本中的 属性 可见性。
请注意 OpenZeppelin ERC20
包含相对导入路径(例如 import "./IERC20.sol";
)。您还需要在本地副本中重写这些内容,以便它们指向 GitHub 位置。否则,编译器将尝试导入不存在的本地文件。
当您 mint
或 burn
代币时,OpenZeppelin 合约会自动更新 totalSupply
。他们还会自动将其公开为您可以读取的变量。你不需要,你不应该,你不能手动设置 totalSupply
,因为那样分发的代币数量将与总供应量不匹配。