如何编写调用Solidity提现函数的Node.js函数?
解决Solidity提现函数的JavaScript调用问题
你的问题出在调用方法的选择上:call()是只读调用,只会在本地节点模拟执行函数,不会向区块链发送实际交易,所以无法触发提现操作。要执行修改链上状态的合约函数(比如提现),必须使用send()方法。
修正后的JavaScript代码如下:
const withdrawFunds = async () => { try { // 使用send()发送交易,而非call() const tx = await Contractoftickets.methods.withdrawFunds().send({ from: address, // 无需指定value,提现是合约转资金给owner,不是用户转资金给合约 }); // 等待交易被区块确认(可选,确保交易生效) await tx.wait(); setSuccessMsg(`Funds withdrawn! 交易哈希: ${tx.hash}`); } catch (error) { // 捕获错误,比如非owner调用、gas不足等情况 console.error("提现失败:", error.message); // 可在此设置错误提示信息 } };
关键要点:
call():仅用于读取合约数据(比如查询余额、变量值),不消耗Gas,不改变链上状态send():用于发送修改链上状态的交易,需要用户签名,消耗Gas,交易上链后才会执行合约逻辑- 确保调用
send()的address是合约中定义的owner地址,否则会触发Solidity里的require校验报错
内容的提问来源于stack exchange,提问作者Zero
相关产品推荐
相关产品推荐

