Web3js
格式與合約小數的轉移值
我有從 transactionreceipts 日誌數據轉換的轉移令牌的數量。
例如 USDT 我得到的值是 500000000 ,USDT 有 6 位小數。實際轉賬金額僅為 500 USDT,如何使用 web3 或 javascript 將其轉換為使用合約小數並輸出正確的值?
amount / math.pow(10, tokendecimals) 會是正確的方法嗎?
問候
你應該使用像 ethers.js 這樣的庫https://docs.ethers.io/v4/api-utils.html
實用程序。parseUnits ( valueString , decimalsOrUnitName ) => BigNumber 將單位的 valueString 表示解析為 wei 數量的 BigNumber 實例。decimalsOrUnitsName 可以是 3 到 18 之間的小數位數(3 的倍數)或名稱,例如 gwei。
實用程序。formatUnits ( wei , decimalsOrUnitName ) => 字元串
我建構了一個簡單的工具來執行此操作,稱為evm-bn。以下是如何使用它來格式化 500 USDT:
import { BigNumber } from "@ethersproject/bignumber"; import { toBn, fromBn } from "evm-bn"; const decimals : Number = 6; const amount : BigNumber = fromBn("500000000", decimals) // amount = "500" const amount2 = toBn("500", decimals) // amount2.toString() = "500000000"
evm
代表乙太坊虛擬機,而代表bn
“大數字”。第二個參數是可選的;它預設為 18 位小數。請注意,這旨在與@ethersproject/bignumber一起使用。ethers 包是對等依賴項。