Metamask
當我使用與 wei 的契約時,Ether.js BigNumber 溢出
我創建了一個頁面,您可以在其中輸入一定數量的令牌,然後將其交換為另一個令牌。在我使用高於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