web3调用call()方法获取不到返回值
一.web3的call()获取不到返回值问题和解决方法
- 在彩票小合约中,遇到一个问题:合约中 有两个方法
第一个返回一个账户地址,没有使用到当前方法调用者信息;
第二个使用到了当前方法调用者信息
在web3中使用call()来调用这两个方法,第二个 总是得不到值 - 原因:第二个方法因为使用到了方法调用者的信息(msg.sender),所以 web3 在call调用合约这个方法时,需要将调用者的地址设置给 参数from,当然也可以通过直接设置 web3.eth.defaultAccount 来代替
- 补充: web调用合约另一个要注意的类型:合约中的 resetData() 方法因为修改了合约的全局变量(也叫状态变量),需要花费,所以在 web3 中调用时使用 send()调用,并传入 from 和 gas。同理,合约中的 kill()方法因为要销毁合约,也需要通过 send() 调用并 传入 from 和 gas。
【完整 以太坊彩票合约案例源码:https://www.jianshu.com/p/6a0492cfb59a】