以 Openzeppelin 的眾籌合約為基礎,如何將費率設置為十進制數?
例如,如果 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 將小數位數從 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。然後您的問題就解決了。