You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NFT价格更新功能报错:invalid decimal value问题求助

错误分析与修复方案

错误原因

你传递给updatePrice函数的newPrice是整个formInput对象({price: "输入的价格"}),而非具体的价格数值。当代码执行newPrice.toString()时,对象会被转为字符串[object Object],导致ethers.utils.parseUnits无法解析这个无效的十进制值,直接抛出INVALID_ARGUMENT错误。

修复步骤

1. 传递正确的价格参数

修改HTML中Button的点击事件,将formInput改为formInput.price,确保传入的是具体的价格值:

<div className='flex flex-col w-full'>
    <Input 
       inputType='number'
       title='Update listing price'
       placeholder='Enter new listing price here ...'
       handleClick={(e) => {setFormInput({...formInput, price: e.target.value})}}
     />
     <Button 
         buttonType='primary'
         innerText='Update price'
         parentStyles='mt-5 rounded-full'
         handleClick={() => handleUpdatePrice(NFT.tokenId, formInput.price)}
      />
</div>

2. 增加参数校验(可选但推荐)

在updatePrice函数中加入基础校验,避免传入空值或非数值类型:

const updatePrice = async (tokenId, newPrice) => {
    // 校验价格有效性
    if (!newPrice || isNaN(Number(newPrice))) {
        console.error("请输入有效的价格数值");
        return;
    }
    
    const web3Modal = new Web3Modal();
    const connection = await web3Modal.connect();
    const provider = new ethers.providers.Web3Provider(connection);
    const signer = provider.getSigner();
    const contract = signerOrProvider(signer);
    
    console.log('New price', newPrice);
    console.log('Token ID', tokenId);
    await contract.updatePrice(tokenId, ethers.utils.parseUnits(newPrice.toString(), 'ether'));
}

3. 优化输入值处理(可选)

确保输入框的值被正确处理,比如去除空格:

// 修改Input的handleClick事件
handleClick={(e) => {setFormInput({...formInput, price: e.target.value.trim()})}}

内容的提问来源于stack exchange,提问作者bela jonas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:05:52