Solidity

是否應該在 Wei 中返回 INITIAL_SUPPLY 和 totalSupply?

  • December 7, 2021

我想知道實現 ERC20 的代幣是否應該以 Wei 或 Ether 形式返回值。假設我正在使用100000 代幣供應500 ABC = 1 ETH創建****ABC 代幣

在 ERC20 協議中,對於 INITIAL_SUPPLY 和 totalSupply() 我們應該返回 100000 的 wei 值,即100000e18嗎?此外,部署後,向合約發送 1 個 ETH 會獲得 500e18 個代幣

Wei 中的錢包顯示 - 發送了 1 ETH 多一點

交易所和其他錢包將如何顯示這一點?這是要在程式碼中處理的事情嗎?

任何幫助表示讚賞。

根據 ERC20 標準 totalSupply返回一個uint. 因此,這應該是您的代幣提供的最小單位的代幣數量。這不是 Wei 或任何 Ether 單位,這只是您決定存在的代幣數量(以您的最小單位)。

不過,您的令牌可以指定小數。例如,如果您設置uint8 public constant decimals = 8;,您的令牌將支持 8 位小數。但這只是為了方便,即totalSupply仍然需要以最小單位返回值。

例如,假設您提供 1000 個小數點後 2 位的代幣。因此,totalSupply需要返回100000(即1000 * 100)。

通過價值decimals交換會知道如何顯示你的代幣。例如,如果有人1337以最小單位擁有你的代幣,交易所會將其顯示為13.37代幣。

編輯:請注意,solidity 智能合約中的所有乙太幣值也需要轉換為可用的最小乙太幣單位,即 Wei。因此,如果您為 1 個 ETH 發行 500 個小數點後 2 位的代幣,您的代幣的最小單位價格為:1 ether / (500 * 100) = 1e18 / (500 * 100) = 20000000000000.

請我嘗試獲得 500 萬億(500,000,000,000,000)個代幣的總供應量,但我不知道我做錯了什麼。下面是我的程式碼。_decimals 是 18

enter code here
uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 10**15 * 10**_decimals;
   uint256 public swapThreshold = (rSupply * 10) / 10000;
   uint256 public rebase_count = 0;
   uint256 public rate;
   uint256 public _totalSupply;
   uint256 private constant MAX_UINT256 = ~uint256(0);
   uint256 private constant MAX_SUPPLY = ~uint128(0);
   uint256 private constant rSupply =
       MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);

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