web3調用call()方法獲取不到返回值

一.web3的call()獲取不到返回值問題和解決方法

  • 在彩票小合約中,遇到一個問題:合約中 有兩個方法
    第一個返回一個賬戶地址,沒有使用到當前方法調用者信息;
    第二個使用到了當前方法調用者信息
    在web3中使用call()來調用這兩個方法,第二個 總是得不到值
  • 原因:第二個方法因爲使用到了方法調用者的信息(msg.sender),所以 web3 在call調用合約這個方法時,需要將調用者的地址設置給 參數from,當然也可以通過直接設置 web3.eth.defaultAccount 來代替

web3調用合約方法call

  • 補充: web調用合約另一個要注意的類型:合約中的 resetData() 方法因爲修改了合約的全局變量(也叫狀態變量),需要花費,所以在 web3 中調用時使用 send()調用,並傳入 from 和 gas。同理,合約中的 kill()方法因爲要銷燬合約,也需要通過 send() 調用並 傳入 from 和 gas。

web3調用合約方法send

【完整 以太坊彩票合約案例源碼:https://www.jianshu.com/p/6a0492cfb59a】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章