Go-Ethereum

乙太坊代幣和小數

  • November 19, 2018

創建貨幣時處理小數的最佳方法是什麼?

讓我們舉個例子。我有 KARLCOIN (KARL),我有 1,000,000 個,代幣有 6 個小數位。該代幣還將有一個眾籌,其中 100 KARL = 1 ETH (0.01 ETH / KARL)。

創建此契約時,我應該執行以下操作:

// Constructor
function token() {
   owner = msg.sender;
  totalSupply = 1000000;
 balances[owner] = totalSupply;
 decimals = 6;
 symbol = "KARL";
 }    

然後那個token也有轉賬的功能。

現在,我如何計算、轉移和顯示這些金額?例如,1,000,000 KARL 是我硬幣的最小單位的 1,000,000,000,000。我們稱它為 microKarl 或 mk。

這是否意味著我的建構子中的 totalSupply 實際上應該是 1,000,000,000,000?當我將金額轉給他人時,我是否將其轉入 mK?基本上是多少 Karl * 1,000,000 才能將它變成 microKarl 形式?MyEtherWallet 和 MetMask 等如何知道如何顯示正確的金額?

如果我使用 web3 來顯示它,我可以自己計算並顯示它。獲取以 mK 為單位的金額,乘以 0.000001,然後上路。對?還是我在這裡偏離軌道?

我做了一個代幣並做了這樣的事情(這是一個漫長的夜晚)並將代幣發送給自己,在 MetaMask 中它顯示了正確的數量。在 Etherscan 上它沒有,它顯示的數量要小得多,並且當 MetaMask 僅通過粘貼合約地址將它們抓取為 6 時,它還顯示小數是“18”。

我只是對令牌的十進制化有點困惑,並且覺得我沒有我正在做的調試的基礎。任何清晰度將不勝感激。

如果您的代幣遵循 ERC20 標準(如果您希望它由錢包或客戶端應用程序處理,則應該這樣做),您可以包含(這不是強制性的,但由大多數客戶端處理)小數資訊。

因此,您的契約應包含以下內容:

uint8 public constant decimals = 6;

並且您的程式碼應該假設金額是最小的可能單位。

按如下方式使用它:

uint256 public constant decimals = 6;
uint256 public constant totalSupply = 1000000*10**decimals;

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