Metamask

當我使用與 wei 的契約時,Ether.js BigNumber 溢出

  • May 15, 2022

我創建了一個頁面,您可以在其中輸入一定數量的令牌,然後將其交換為另一個令牌。在我使用高於999的數字之前,它一直有效。我的智能合約得到了wei,所以我必須使用下面的函式將正常數字轉換為wei。

const toWei = amount => {
   return amount * Math.pow(10, 18)
}

我得到了巨大的數字,我得到了這個錯誤

Error: invalid BigNumber string (argument="value", value="2e+21", code=INVALID_ARGUMENT, version=bignumber/5.6.0)

我該怎麼做才能使這不會出現並且是最佳做法?

該字元串對該類"2e+21"無效。BigNumber

JavaScript 使用 IEEE 754 數字,這意味著任何高於周圍的值0.009都會遭受精度損失,而乙太坊對數字不是近似值非常挑剔。

您應該對較大的值使用字元串,或者使用為轉換單位提供的便利函式,例如ethers.utils.parseEther("1.0")處理字元串值的函式。

以下是有關為什麼需要 Big Number 的更多資訊:https ://docs.ethers.io/v5/api/utils/bignumber/#BigNumber–notes-safenumbers

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