僅供教育參考,不構成投資或安全建議。小數位數不能證明代幣的身分、價值、儲備或安全性。
直接答案
對 ERC-20 代幣而言,decimals() 是選用的中繼資料,用來告訴介面如何顯示整數形式的代幣單位。如果傳回 d,慣用的顯示金額是 raw / 10^d。它不會改變合約運算,也不能驗證代幣身分。信任結果前,應核對鏈、確切合約地址、程式碼或代理實作以及區塊。
透過獨立 RPC 在指定區塊直接讀取 decimals(),依 ABI 將傳回值解碼為 uint8,再與發行方官方合約名錄和可信區塊瀏覽器比較。接著用原始 balanceOf、轉帳、授權、收據與事件值檢驗比例。呼叫不存在、回退、傳回畸形資料或與其他證據衝突時,不要默認為 18。
運作方式
ERC-20 儲存和移轉的是無號整數金額。顯示層負責插入小數點,合約接收的仍是整數。轉換使用者輸入時應使用十進位字串或任意精度整數運算,絕不能使用二進位浮點數。只有乘以 10^d 後得到整數的數量才可表示。
因為 decimals() 是選用項目,合規代幣可以不實作它。自訂或可升級實作也可能傳回意外值,或在升級後改變行為。對 ERC-1967 代理,應檢查代理地址、實作或信標、管理員和升級事件;代幣狀態要在代理地址讀取,並將所有比較固定在同一區塊。
授權額度和 ERC-2612 permit 的值也是原始整數。轉帳顯示正確,不能證明授權、路由器最低金額、跨鏈金額或會計資料庫採用相同比例。跨鏈橋兩端合約可能使用不同小數位,應依橋的書面換算與捨入規則,分別比較兩端的人類可讀價值和原始單位。
依下列流程核對:
- 固定鏈 ID 或域、代幣合約、區塊號、RPC 端點和觀察時間。
- 透過發行方官方名錄確認地址;名稱、符號、圖示和搜尋結果均非權威證據。
- 檢查已部署程式碼以及地址是否為代理;記錄實作或信標、管理員和近期升級。
- 呼叫
decimals()並依 ABI 解碼uint8;如實記錄成功、回退、空值或畸形輸出,不要填入預設值。 - 在相容區塊讀取原始
balanceOf、totalSupply、授權額、交易 calldata、收據和事件,再按觀察到的比例格式化。 - 用整數運算重算轉帳、授權、報價和跨鏈金額,並計入費用、捨入、零頭、變基或轉帳稅。
- 先模擬並傳送小額交易,再核對交易前後的原始餘額;介面、RPC、事件或餘額只要有一處不一致就停止。
範例
- 同一原始值,兩種比例。 當
raw = 123456789時,d = 6顯示為123.456789;d = 18則顯示為0.000000000123456789,兩者相差10^12倍。 - 必須考慮可表示性。 當
d = 6時,1.25個代幣換算為1250000個原始單位。0.0000001個代幣小於一個原始單位,必須拒絕,或依明確規則捨入。 - 授權比例不符。 當
d = 6時,100個代幣的授權額是100000000。若按d = 18編碼,會得到100000000000000000000,比預期大10^12倍。 - 跨鏈重新縮放。 若書面規定的
1:1路由把d = 6的來源代幣轉換為d = 18的目的表示,來源原始值2500000表示2.5個代幣,目的端原始值2500000000000000000也表示2.5。費用、上限、零頭和實際入帳餘額仍須核對。
風險
- 在錯誤的鏈上查詢了正確地址。
- 複製的名稱、符號或圖示掩蓋了另一個合約。
- 代理實作或信標在先前檢查後發生變化。
- RPC 或瀏覽器提供過時、未最終確認或互相矛盾的狀態。
- 缺失或畸形中繼資料被默默替換為
18。 - 二進位浮點換算對大額或高精度金額產生捨入。
- 錢包正確格式化轉帳,卻錯誤格式化授權或 permit。
- 資料庫混用了原始單位和人類可讀金額。
- 跨鏈橋假定兩端小數位相同,或未揭露零頭捨入。
- 轉帳扣費、變基、鑄造、銷毀、暫停或凍結行為破壞簡單對帳。
- 交易 calldata、事件、收據和實際餘額變化不一致。
- 將小數位核對誤當成發行方、儲備、流動性或安全性的證明。
常見誤解
- 所有 ERC-20 代幣都有
18位小數。 該中繼資料是選用的,實作可以傳回其他值。 - 小數位是 EVM 使用的精度位元。 它是十進位顯示慣例;代幣運算仍是整數運算。
- 瀏覽器格式化的餘額是獨立確認。 它可能依賴同一次中繼資料呼叫,因而共享同一錯誤。
- 相同符號和小數位可確定同一資產。 還必須核對正確鏈、確切合約和發行方證據。
- 小額轉帳成功就驗證了所有整合。 授權、路由器、跨鏈橋、交易所和會計系統可能分別縮放金額。
相關主題
來源
- ERC-20:代幣標準 - Ethereum Improvement Proposals(存取日期:2026-08-21)
- ERC-20 - OpenZeppelin Docs(存取日期:2026-08-21)
- JSON-RPC API - ethereum.org(存取日期:2026-08-21)
- ERC-1967:代理儲存槽 - Ethereum Improvement Proposals(存取日期:2026-08-21)
- ERC-2612:EIP-20 簽章授權的 Permit 擴充 - Ethereum Improvement Proposals(存取日期:2026-08-21)