Web3js

如何將 USDC 餘額的 wei 值轉換為正確的數字?

  • May 4, 2022

我正在使用這個簡單的程式碼來獲取 USDC 的錢包餘額。我不確定如何將 wei 值轉換為適當的值。假設我的錢包裡有 1,076.235541 USDC。下面的程式碼顯示 1076235541 和 0.000000001076235541。但我需要從中獲得價值 1076。

   const minABI = [
     // balanceOf
     {
       constant: true,
       inputs: [{ name: "_owner", type: "address" }],
       name: "balanceOf",
       outputs: [{ name: "balance", type: "uint256" }],
       type: "function",
     },
   ];
   const tokenAddress = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
   const walletAddress = MY_WALLET_ADDRESS;

   const contract = new Web3Client.eth.Contract(minABI, tokenAddress);

   async function getBalance() {
     const result = await contract.methods.balanceOf(walletAddress).call();
     const format = Web3Client.utils.fromWei(result); 
     console.log(result);
     console.log(format);
   }

一個 ETH 是 10"18 wei。

因此,當您轉移 1ETH 時,您實際上轉移了 10"18 wei。這一切都是因為一個 ETH 有 18 位小數。

另一方面,USDC 有 6 位小數。(與今天的銀行一樣,將貨幣計算到第 6 位)

因此,要轉移 1USDC,您實際上轉移了 1 000 000 其代幣的 wei 等值。

(如果你在這裡給我的數字沒問題的話)。

fromWei函式從 轉換weiether,這意味著它將數字除以 1e18。

ERC20 代幣允許自定義小數點精度,USDC 專門使用 6 位小數精度。因此,您只需將結果除以 1e6 -

const balance = parseInt(result) / 6;

但理想情況下,要支持任何 ERC20 代幣,請從合約中讀取小數位數並使用它;還最好使用知道如何處理大數的庫,因為 JS 在大/實數方面存在問題。

async function getBalance() {
  const result = await contract.methods.balanceOf(walletAddress).call();
  const decimals = await contract.methods.decimals().call();
  const balance = new BigNumber(result).div(10 ** decimals);
  return balance;
}

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