Contract-Development

以 Openzeppelin 的眾籌合約為基礎,如何將費率設置為十進制數?

  • December 19, 2021

例如,如果 rate = 10,那麼對於每個 wei,買方將獲得 10 個“代幣單位”,每個代幣單位是完整代幣的 1*10^18(因為 erc20 代幣的預設小數點為 18)。

如果我希望預售中的使用者多獲得 15% 的代幣,我如何將費率設置為等於 11.5 的數字,以便每個 wei 收到 11.5 個“代幣單位”?

我正在努力了解如何實現這一點。

謝謝你。

erc20 代幣的預設十進制為 18

不完全是。您可以決定代幣的小數位數。您不必保留這個 18。您可以選擇任何數字。乙太幣有 18 位小數。所以這意味著可以存在 1 wei 的最小值。你永遠不能交易少於 1 wei。

根據您的要求,您可以決定代幣的小數。例如,您可以將小數保留為 8。

因此,如果您定義rate=10,這意味著 1 wei = 1,000,000,000 個令牌並增加到 15%,1 wei = 1.150,000,000

現在即使您使用 18 位小數。當你設置 rate=10 時,如果有人給你轉賬 10 wei,你需要轉賬 10000000000000000000 (10*10^18) 代幣,如果你想多付 15%,當有人給你 10 wei 時,轉賬 11500000000000000000 (11.5 ^10**18) 代幣

您可以使用兩種方法:

  1. 1 將小數位數從 18 位增加到 20 位。我們知道 Eth 不能小於 wei。因為在您的情況下 1 wei 是 115 個單位。

所以最後的語句是 1 wei = (100+(100*0.15))115 個單位

現在讓我們做一些數學運算

1 eth = 18 decimals  //In this case 1 wei is 1 uint of your token. i.e 1eth every thing works fine as per requirement.

現在讓我們假設

 1 wei = 115 that means we need to hold fractional points now lets multiply with 100.

 1eth  = 18 decimal + 2 decimals = 20 decimals

現在讓我們計算餘額圖中的 15+(150.15) = **15115** = 1725 值,交易所將從合約 20 中得到十進制值,然後除以account[balance]/10^20= 17.25 e^18。

結論:將 wei 值乘以 115 並確保小數點為 20。然後您的問題就解決了。

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