我一直试图在本地块链(Foundry的Anvil)上编写合同,但是运行write()函数(在提交表单write?.()之后运行它)不起作用。
尝试禁用disabled={!write}表单中的submit按钮,等待了几分钟,它仍然无法工作。双重检查的ABI和令牌地址,他们似乎是正确的。
这是页面的代码
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。
谢谢!
发布于 2022-11-01 16:59:19
在usePrepareContractWrite()中,我写了contractInterface: abi,它应该是abi: abi
https://ethereum.stackexchange.com/questions/138515
复制相似问题