私有链部署Storage合约后,Geth中调用函数报错求解决方案
Geth调用私有链部署的Storage合约报错解决方法
你的Storage合约代码本身无语法或逻辑问题,报错大概率源于Geth调用方式错误或节点配置问题,以下是针对性解决步骤:
区分view函数与写函数的调用方式
retrieve()是只读view函数,无需发送交易,直接调用即可:contract.retrieve()set()是修改链上状态的写函数,必须以交易形式调用,需指定发起账户和gas限额:contract.set(10, {from: eth.accounts[0], gas: 200000})
直接执行
contract.set(10)会因缺少交易参数报错。解锁发起交易的账户
调用写函数前必须解锁对应账户,避免权限报错:personal.unlockAccount(eth.accounts[0])输入账户密码完成解锁后再执行交易调用。
确保私有链节点正常出块
如果是PoW机制的私有链,需启动挖矿让交易上链确认:miner.start()等待至少一个区块挖出后,再调用
retrieve()就能看到更新后的value值。验证合约实例化参数正确性
确认实例化合约时使用的ABI和部署后的合约地址完全正确,示例代码:// 对应你合约的ABI const abi = [{"inputs":[],"name":"retrieve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]; // 替换为你的实际合约部署地址 const contract = eth.contract(abi).at("0xYourContractAddress");
内容的提问来源于stack exchange,提问作者SpaceNinja
相关产品推荐
相关产品推荐

