Solidity
ERC20 小數和 gas 成本
這個問題是雙重的:
decimals
ERC20 代幣的標準數量是 18。如果我們降低這個數字,我們是否可以期望在創建/轉移代幣時降低 gas 成本,因為這應該消耗更少的 EVM 記憶體?如果是這樣,為什麼大多數代幣都遵循 18 進制標準?對於大多數案例來說,這個精度級別不必要地大,按數量級計算。
不,您不會在 EVM 中消耗更少的記憶體。
根據ERC20 規範,
decimals
必須是uint8
. 因此,實際的小數變數將始終是相同的成本。此外,通過使用較小的
decimals
. 事實上,儲存較小的值(例如)甚至可能花費更多uint128
。這是因為 EVM 期望看到 auint256
並且如果給它任何不同的東西就必須做更多的工作。從文件:當使用小於 32 字節的元素時,您的合約的 gas 使用量可能會更高。這是因為 EVM 一次執行 32 個字節。因此,如果元素小於這個值,EVM 必須使用更多的操作才能將元素的大小從 32 字節減少到所需的大小。
規範中沒有定義使用 18 位小數,但這是常見的做法。許多 dapp 開發人員已經針對 18 位小數進行了程式,並且在許多情況下少數會導致錯誤。話雖如此,您可以使用任何您想要的數字。