跳到正文

如何核對代幣的小數位數

從正確的合約和區塊核對 ERC-20 代幣的 decimals,並在不引入浮點誤差的前提下複核原始餘額、轉帳、授權與跨鏈換算。

更新於

僅供教育參考,不構成投資或安全建議。小數位數不能證明代幣的身分、價值、儲備或安全性。

直接答案

對 ERC-20 代幣而言,decimals() 是選用的中繼資料,用來告訴介面如何顯示整數形式的代幣單位。如果傳回 d,慣用的顯示金額是 raw / 10^d。它不會改變合約運算,也不能驗證代幣身分。信任結果前,應核對鏈、確切合約地址、程式碼或代理實作以及區塊。

透過獨立 RPC 在指定區塊直接讀取 decimals(),依 ABI 將傳回值解碼為 uint8,再與發行方官方合約名錄和可信區塊瀏覽器比較。接著用原始 balanceOf、轉帳、授權、收據與事件值檢驗比例。呼叫不存在、回退、傳回畸形資料或與其他證據衝突時,不要默認為 18

運作方式

ERC-20 儲存和移轉的是無號整數金額。顯示層負責插入小數點,合約接收的仍是整數。轉換使用者輸入時應使用十進位字串或任意精度整數運算,絕不能使用二進位浮點數。只有乘以 10^d 後得到整數的數量才可表示。

因為 decimals() 是選用項目,合規代幣可以不實作它。自訂或可升級實作也可能傳回意外值,或在升級後改變行為。對 ERC-1967 代理,應檢查代理地址、實作或信標、管理員和升級事件;代幣狀態要在代理地址讀取,並將所有比較固定在同一區塊。

授權額度和 ERC-2612 permit 的值也是原始整數。轉帳顯示正確,不能證明授權、路由器最低金額、跨鏈金額或會計資料庫採用相同比例。跨鏈橋兩端合約可能使用不同小數位,應依橋的書面換算與捨入規則,分別比較兩端的人類可讀價值和原始單位。

依下列流程核對:

  1. 固定鏈 ID 或域、代幣合約、區塊號、RPC 端點和觀察時間。
  2. 透過發行方官方名錄確認地址;名稱、符號、圖示和搜尋結果均非權威證據。
  3. 檢查已部署程式碼以及地址是否為代理;記錄實作或信標、管理員和近期升級。
  4. 呼叫 decimals() 並依 ABI 解碼 uint8;如實記錄成功、回退、空值或畸形輸出,不要填入預設值。
  5. 在相容區塊讀取原始 balanceOftotalSupply、授權額、交易 calldata、收據和事件,再按觀察到的比例格式化。
  6. 用整數運算重算轉帳、授權、報價和跨鏈金額,並計入費用、捨入、零頭、變基或轉帳稅。
  7. 先模擬並傳送小額交易,再核對交易前後的原始餘額;介面、RPC、事件或餘額只要有一處不一致就停止。

範例

  • 同一原始值,兩種比例。raw = 123456789 時,d = 6 顯示為 123.456789d = 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 使用的精度位元。 它是十進位顯示慣例;代幣運算仍是整數運算。
  • 瀏覽器格式化的餘額是獨立確認。 它可能依賴同一次中繼資料呼叫,因而共享同一錯誤。
  • 相同符號和小數位可確定同一資產。 還必須核對正確鏈、確切合約和發行方證據。
  • 小額轉帳成功就驗證了所有整合。 授權、路由器、跨鏈橋、交易所和會計系統可能分別縮放金額。

相關主題

來源

導覽

搜尋知識庫...