Erc-20

傳輸中的 ERC20 小數

  • October 31, 2021

我明白了為什麼我們需要在 ERC20 中使用小數。但我不明白的是:當我們使用 transfer() 方法時,我們應該將金額寫入 wei(用於 ERC20 的小數計數)還是整數。例如:

如果我們有一個帶有 3 位小數的令牌。我用 mint(msg.sender, 100 * 10 ** 3) 鑄造了 100 個該令牌。轉移 5 個代幣:

  1. 轉移(_to,5)
  2. 轉移(_to,5 * 10 ** 3)

哪一個是真的?

第二個是真的。

您可以在此處查看 OpenZeppelin 實現。

 * For example, if `decimals` equals `2`, a balance of `505` tokens should
 * be displayed to a user as `5.05` (`505 / 10 ** 2`).

所有計算都是在表示值 * 10 ** n_decimals 的整數上完成的。這是為了避免使用浮點數、舍入誤差等…

所以用 3 位小數:

要轉移 5 個(顯示的)代幣,您需要在內部轉移 5 * 10 ** 3 個代幣。把它想像成在你的智能合約中使用美分、千分之一或更多。

就像您要轉移 1 個 ETH 一樣,您實際上會轉移 1000000000000000000 (Wei) 的值,或 10 ** 18 Wei,因為 ETH 有 18 位小數。

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