簡體   English   中英

在 ERC20 合約中設置最大代幣數量的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM