Contract-Development
打開 Zeppelin 起始平衡
我相信 openzeppelin 項目已經更新了他們的 StandardToken 智能合約,現在稱為ERC20.sol。
我遇到的一個問題是,新的智能合約缺少一些我們以前擁有的功能。過去,當您將 StandardToken 導入智能合約時,您可以像這樣初始化您的 Token:
pragma solidity ^0.4.19; import "http://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol"; import "http://github.com/OpenZeppelin/openzeppelin-solidity/contracts/ownership/Ownable.sol"; /** * @title ExampleToken is a basic ERC20 */ contract ExampleToken is ERC20, Ownable { uint256 public totalSupply; string public name; string public symbol; uint32 public decimals; /** * @dev assign totalSupply to owner of contract */ constructor() public { symbol = "EXM"; name = "ExampleCoin"; decimals = 4; totalSupply = 10000000000; owner = msg.sender; balances[msg.sender] = totalSupply; emit Transfer(0x0, msg.sender, totalSupply); } }
因為我正在使用新的智能合約,所以我不能再這樣做了:
balances[msg.sender] = totalSupply;
因為我收到了錯誤,因為 openzeppelin 沒有實現它:
DeclarationError: 未聲明的標識符。您指的是 “balanceOf” 嗎?
balanceOf 顯然不適合,因為這是一個返回給定地址餘額的函式。
初始化餘額的最合適方法是什麼?
將其發送到所有者的地址還是將其留在智能合約中更好?將餘額留在智能合約中是否存在風險?這個程序是否被廣泛使用?
如果我不應該將其留在智能合約中,那麼將總供應量提供給合約創建者的最佳方式是什麼?
或者,當 StandardToken 存在時,是否可以導入以前的 openzeppelin 智能合約?
正如 Rob 所建議的,我應該使用薄荷作為初始供應。我使用 ERC20Detailedtoken 而不是 ER20Capped。
首先,導入我建議檢查的ERC20Detailedtoken 。從前面的程式碼,我的實現如下:
pragma solidity ^0.4.19; import "http://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol"; import "http://github.com/OpenZeppelin/openzeppelin-solidity/contracts/ownership/Ownable.sol"; import "http://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol"; /** * @title ExampleToken is basic ERC20 Token */ contract ExampleToken is ERC20, ERC20Detailed, Ownable{ uint256 public initialSupply = 100000000000; string public name; string public symbol; uint32 public decimals; /** * @dev assign totalSupply to account creating this contract */ constructor() public ERC20Detailed("ExampleCoin", "EXM", 4) { _mint(msg.sender, initialSupply); }}
如果我沒記錯的話,您將使用
ERC20Capped.sol
和mint()
令牌作為遷移/部署過程的第二步。這對我來說似乎是明智的,因為可鑄造代幣可以做不可鑄造代幣可以做的所有事情。“上限”變體對鑄造供應進行了限制,並且似乎替代了在建構子中初始化供應和鑄造餘額的舊樣式。
希望能幫助到你。