Solidity

ERC20 代幣餘額始終為零

  • May 14, 2019

我正在編寫一個預先創建的 ERC20 代幣合約,該合約源自openzeppelin-solidity

pragma solidity >=0.4.24;

import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol";

contract SampleToken is ERC20Detailed, ERC20 {
 constructor(string memory _name, string memory _symbol, uint8 _decimals, uint _initialSupply)
   ERC20Detailed(_name, _symbol, _decimals) public {
   require(_initialSupply > 0, "INITIAL_SUPPLY has to be greater than 0");
   _mint(msg.sender, _initialSupply);
 }
}

我正在將它部署到 Rinkeby 網路,使用truffle. 我的帳戶有足夠的餘額。

執行後truffle deploy --reset --network rinkeby,我得到:

  Replacing 'SampleToken'
  -----------------------
  > transaction hash:    0x126c13b5fc64dbd90db60dfff754a7a6825add3138e69e1ab27ac90a8fe166bf
  > Blocks: 0            Seconds: 9
  > contract address:    0x557858779C6C5240B05005bCbd60dD06fBcCF479
  > block number:        4377271
  > block timestamp:     1557788535
  > account:             0xceB4c079Dd21494E0bc99DA732EAdf220b727389
  > balance:             7.326879674
  > gas used:            1111289
  > gas price:           20 gwei
  > value sent:          0 ETH
  > total cost:          0.02222578 ETH

  Pausing for 2 confirmations...
  ------------------------------
  > confirmation number: 1 (block: 4377272)
  > confirmation number: 2 (block: 4377273)

  > Saving migration to chain.
  > Saving artifacts
  -------------------------------------
  > Total cost:          0.02222578 ETH

如果我去EtherScan,我可以看到合約已部署,第一個 coinbase 交易的事件已生成:

合約事件

但是,將代幣添加到我的 Metamask 錢包後,它仍然顯示我的餘額為零:

元遮罩


我還嘗試更改 and in 的可見性並直接從我的契約中 _balances分配它們,但我看到的行為仍然相同。_totalSupply``openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

我懷疑這只是一個四捨五入的問題。MetaMask 沒有顯示足夠的小數位。創建令牌的帳戶的餘額為 0.000000000000001。

代幣已創建小數點後 18 位,因此需要 10^18 個代幣單位的餘額才能等於一個代幣。如果你想擁有 1000 個令牌,你需要傳入 1000 * 10^18(一個 1 後面有 21 個零)。

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