Contract-Development

打開 Zeppelin 起始平衡

  • January 12, 2019

我相信 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.solmint()令牌作為遷移/部署過程的第二步。

這對我來說似乎是明智的,因為可鑄造代幣可以做不可鑄造代幣可以做的所有事情。“上限”變體對鑄造供應進行了限制,並且似乎替代了在建構子中初始化供應和鑄造餘額的舊樣式。

https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/token/ERC20/ERC20Capped.sol

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/65396