首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WAGMI useContractWrite()钩子没有响应/不工作

WAGMI useContractWrite()钩子没有响应/不工作
EN

Ethereum用户
提问于 2022-11-01 05:00:07
回答 1查看 872关注 0票数 1

我一直试图在本地块链(Foundry的Anvil)上编写合同,但是运行write()函数(在提交表单write?.()之后运行它)不起作用。

尝试禁用disabled={!write}表单中的submit按钮,等待了几分钟,它仍然无法工作。双重检查的ABI和令牌地址,他们似乎是正确的。

这是页面的代码

代码语言:javascript
复制
function TokenForm() {
    const [formData, setFormData] = useState({
        tokenName: '',
        tokenSymbol: '',
        initialMintAmount: '',
    })

    const debouncedFormData = useDebounce(formData, 500)

    const { config } = usePrepareContractWrite({
        address: tokenFactoryAddress,
        contractInterface: abi,
        functionName: 'createToken',
        args: [
            debouncedFormData.tokenName,
            debouncedFormData.tokenSymbol,
            (
                BigInt(debouncedFormData.initialMintAmount) * BigInt(10 ** 18)
            ).toString(),
        ],
    })

    const { isSuccess, write } = useContractWrite(config)

    function handleChange(event) {
        const { name, value } = event.target
        setFormData((prevFormData) => {
            return {
                ...prevFormData,
                [name]: value,
            }
        })
    }

    function handleSubmit(event) {
        event.preventDefault()
        write?.()
        console.log(isSuccess)
    }

    return (
        <div className={styles.container}>
            <form onSubmit={handleSubmit} className={styles.form}>
                <input
                    type="text"
                    placeholder="your token's name"
                    onChange={handleChange}
                    name="tokenName"
                    value={formData.tokenName}
                    className={styles.inputBox}
                />
                <input
                    type="text"
                    placeholder="your token's symbol"
                    onChange={handleChange}
                    name="tokenSymbol"
                    value={formData.tokenSymbol}
                    className={styles.inputBox}
                />

                <input
                    type="number"
                    placeholder="initial tokens to mint"
                    onChange={handleChange}
                    name="initialMintAmount"
                    value={formData.initialMintAmount}
                    className={styles.inputBox}
                />
                {/* disabled={!write} */}
                <button disabled={!write}>Submit</button>
            </form>
        </div>
    )
}

关于更多上下文,函数createToken()接受3个参数-一个字符串name,另一个字符串symbol和一个uint256 initialMintAmount

谢谢!

EN

回答 1

Ethereum用户

发布于 2022-11-01 16:59:19

usePrepareContractWrite()中,我写了contractInterface: abi,它应该是abi: abi

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/138515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档