一.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】