[英]Issues setting a maximum amount of tokens in ERC20 contract
我一直在嘗試在 rinkeby 網絡中用松露創建一個非常簡單的 ERC20 令牌。 我將以下代碼放入我的 .sol 文件中,但最大供應量似乎不匹配。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract Artytoken is ERC20 {
address public admin;
uint private _totalSupply;
constructor() ERC20('ArtyToken', 'AATK') {
admin = msg.sender;
_totalSupply = 1000000;
_mint(admin, _totalSupply);
}
}
在我的 Metamask 地址中顯示我擁有“0.000000000001”,我在 Etherscan 中看到它顯示最大總供應量為“0.000000000001”。 我做錯了什么? 先感謝您! :)
EVM 不支持十進制數字(以防止與運行在不同架構上的網絡節點相關的舍入錯誤),因此所有數字都是整數。
ERC-20 代幣標准定義了你的合約實現的decimals()
函數,有效地將所有數字移動了聲明的零數以模擬小數。
因此,如果您想鑄造 1 個帶有 18 個小數的令牌,則需要傳遞值1000000000000000000
(18 個零)。 或者在您的情況下,具有 18 個小數的 100 萬個令牌(6 個零)表示為1000000000000000000000000
(24 個零)。 反之亦然,帶有 18 位小數的令牌的 0.5 是500000000000000000
(17 個零)。
您還可以使用下划線(它們實際上什么都不做,只是在視覺上將值分開)和科學記數法來減少人為錯誤,同時使用如此大量的零:
// 6 zeros and 18 zeros => 24 zeros
_totalSupply = 1_000_000 * 1e18;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.