Solidity
ERC20 代幣餘額始終為零
我正在編寫一個預先創建的 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 個零)。