Web3js
如何將 USDC 餘額的 wei 值轉換為正確的數字?
我正在使用這個簡單的程式碼來獲取 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
函式從 轉換wei
為ether
,這意味著它將數字除以 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; }