【问题标题】:Error: invalid BigNumber value (argument="value", value={"value":"25000000000000000"}, code=INVALID_ARGUMENT, version=bignumber/5.5.0)错误:无效的 BigNumber 值(argument=\"value\",value={\"value\":\"25000000000000000\"},code=INVALID_ARGUMENT,version=bignumber/5.5.0)
【发布时间】:2022-08-14 15:11:40
【问题描述】:

我尝试将值从 0.025 ether 更改为 1 ether,然后它也显示相同的错误。

另外,我尝试过像 1/8 这样的有理数仍然无法工作。

看了一些答案,但他们没有解决错误。

我在其他项目中有相同的代码,它在那里工作。

我收到的错误

Uncaught (in promise) Error: invalid BigNumber value (argument=\"value\", value={\"value\":\"25000000000000000\"}, code=INVALID_ARGUMENT, version=bignumber/5.5.0)

Could not get the stack frames of error: TypeError: Cannot read properties of null (reading \'length\')

错误的图像

这是我的上市价格代码

    uint256 listingPrice = 0.025 ether ; // Here ether is denoting the MATIC

function getListingPrice() public view returns (uint256) {
        return listingPrice;
    }

这是在 UI 中获取值的代码

async function putItem(url) {
    const web3Modal = new Web3Modal();
    const connection = await web3Modal.connect();
    const provider = new ethers.providers.Web3Provider(connection);
    const signer = provider.getSigner();

    const { royalty } = formInput;

    //NFT Contract
    let contract = new ethers.Contract(nftAddress, NFT.abi, signer);
    //minting the certificate
    let transaction = await contract.createToken(url);
    //waiting for the minting transaction to finish

    let tx = await transaction.wait();
    let event = tx.events[0];
    let value = event.args[2];
    let tokenId = value.toNumber(); //Token Id Of the NFT
    console.log(tokenId)

    //NFT Market Contract
    contract = new ethers.Contract(nftMarketAddress, NFTMarket.abi, signer);

    //fetching listing price from the contract
    let listingPrice = await contract.getListingPrice();
    listingPrice = listingPrice.toString();

    //listing the certificate. 
    transaction = await contract.createMarketItem(
      nftAddress,
      tokenId,
      { value: (listingPrice) },
      royalty,
      index
    );
    //waiting for the transaction to complete
    await transaction.wait();
    console.log(\"completed\")

    //navigate back to home page

  }

如果需要更多详细信息,请发表评论。

  • 你有没有深究过这个?我有同样的问题
  • 你好,你溢出了,所以我建议你可以将该数字转换为 javascript 允许的数字,我认为它大约是 9007199254740991,因为可靠性更大,所以你可以检查一下。
  • 我得到了这样的微笑错误,解决方案是什么?

标签: ethereum solidity metamask ethers.js


【解决方案1】:

看起来您正在尝试将对象作为参数 { value: (listingPrice) } 发送

这可能应该写成参数数组或者只是listingPrice

//listing the certificate. 
transaction = await contract.createMarketItem(
  nftAddress,
  tokenId,
  listingPrice,
  royalty,
  index
);

来源:https://docs.ethers.io/v5/api/contract/contract/#contract-functionsSend

【讨论】:

    【解决方案2】:

    我也遇到了这个错误。就我而言,我忘记更新 ABI。

    【讨论】:

      【解决方案3】:

      对于我的情况,我需要在将其传递给合同之前将 .toString() 添加到 BigNumber。

      async changePayoutAmount_ether(amount_ether) {
          let amount_wei = new BigNumber(amount_ether).shiftedBy(18).toString()
          await this.state.pcrContract.methods.setPayoutAmount(amount_wei).send({from: this.state.account}).then(console.log)
      }
      

      同样对于任何故障排除的人,请注意至少有两个 BigNumber 库:我相信此错误来自 this one 但如果您正在阅读来自 the ethers.js one 的文档,请小心,因为构造函数的语法不同。

      【讨论】:

        【解决方案4】:

        您可以使用以下模块:

        import converter form "ethereum-uint-converter"
        

        如果您想了解更多详情,请点击here

        【讨论】:

          【解决方案5】:

          我认为这是问题所在:

          transaction = await contract.createMarketItem(
                nftAddress,
                tokenId,
                { value: (listingPrice) },
                royalty,
                index
              );
          

          { value: (listingPrice) }, 应该是代表您在交易中发送的金额的对象,它应该是函数中的最后一个参数。因为看起来你正在创建一个 NFT 市场项目并且你必须支付上市的价格。

          由于您正在创建一个 nft,因此看起来您有 const { royalty } = formInput 表单。我相信您想发送 nft 价格而不是 { value: (listingPrice) }。所以你的交易应该是这样的

          transaction = await contract.createMarketItem(
                    nftAddress,
                    tokenId,
                    // I assume you want to send the nft price here from form
                    priceFromForm,
                    royalty,
                    index, 
                    // this should be the last parameter
                    { value: (listingPrice) }
          
                  );
          

          【讨论】:

            猜你喜欢
            • 2022-12-04
            • 1970-01-01
            • 2021-12-28
            • 2023-02-15
            • 1970-01-01
            • 2021-07-28
            • 2013-03-23
            • 1970-01-01
            • 2020-12-21
            相关资源
            最近更新 更多