Erc-20

Ethers.js - 錯誤:無效的 BigNumber 字元串

  • January 23, 2022

我正在嘗試批准更多的 erc-20 代幣(它有 18 位小數)。

await token.connect(signer).approve(contractAddress, BigNumber.from((1000*(tenToPowerOf18Digits)).toString())) :

如果我嘗試批准超過 999 個令牌,它會給我這個錯誤

Uncaught (in promise) Error: invalid BigNumber string (argument="value", value="1e+21", code=INVALID_ARGUMENT, version=bignumber/5.5.0)

誰能幫我解決這個問題?如何批准超過 999 個令牌?

問題是toString數字的 將其轉換為 BigNumber 無法解釋的科學表示。

解決這個問題的最簡單方法是在添加小數時使用 BigNumber:

const decimals = 18;
const input = 999;
const amount = BigNumber.from(input).mul(BigNumber.from(10).pow(decimals));

另一種方法是使用 ethers 來解析這個:

const decimals = 18;
const input = "999"; // Note: this is a string, e.g. user input
const amount = ethers.utils.parseUnits(input, decimals)

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