Web3js

格式與合約小數的轉移值

  • April 22, 2022

我有從 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 包是對等依賴項。

引用自:https://ethereum.stackexchange.com/questions/98641