Solidity
ERC20,如何計算眾籌的代幣數量?
如果你看這篇文章,眾籌的總代幣是 100 個代幣,在程式碼中定義為
uint256 public maxTokens = 100000000000000000000;
為什麼 100000000000000000000 變成 100 個代幣?
因為 Solidity 只支持整數,所以沒有自然的方式來表示像“半個令牌”(0.5 個令牌)這樣的值。為了解決這個問題,ERC20 代幣使用了乘數。對於美元,您可以使用 100 或 10^2 的乘數來保留 2 個小數位。在程式碼中,您將儲存便士的數量而不是美元的數量。所以 $ 1 becomes 100 pennies, and $ 100 變成 10,000 便士。現在,半塊錢才50塊。
ERC20 代幣有一個名為的值
decimals
,它表示你應該乘以/除以 10 的冪。您正在查看的 ERC20 代幣,與大多數代幣一樣,使用decimals = 18
,因此所有內容都乘以 10^18(1 後面有 18 個零)。因此,要表示 100 個標記,您使用值 100 * 10^18 == 10^20 == a 1 後面有 20 個零,這就是您看到的數字。UI (例如 Etherscan、MetaMask 和 MyEtherWallet 等工具)的職責是根據需要
decimals
考慮並乘除值。因此,如果您的小數點後 18 位 ERC20 代幣的餘額為 1000000000000000000,Etherscan 會告訴您有 1 個代幣。如果您要求 MyEtherWallet 轉移 0.5 個代幣,它將轉移金額 500000000000000000。