[英]Getting mined blocks instead of the supposed returned values
我剛剛使用以太坊錢包部署了一份智能合約。 我收到了智能合約地址,我從混音中復制了它的ABI並在以太坊錢包上驗證了它,它是活躍的,我可以看到它的所有方法。
然后我試着從我的nodejs服務器調用它。我做到了,我沒有得到任何錯誤......但是沒有經典的響應,比如下面方法的返回值,我得到了開采的塊....這是我覺得很奇怪...我怎么能得到方法輸出(返回)?
之后我嘗試部署另一個合同,這次是一個非常簡單的方法,具有相同的方法名稱,智能合約名稱,參數但方法內部沒有代碼只有一個基本的硬編碼返回。當我部署此合同時我也得到了同樣開采的智能合約地址......在我看來這很奇怪......
我一直在使用1.0.0-beta.46,nodejs,expressjs當我說eth錢包我的意思是...那個網站是用puppeth生成的,在/#wallet頁面上
這是我第二次嘗試部署的基本智能合約。結果與第一份智能合約相同。
pragma solidity> = 0.4.22 <0.6.0;
合同BasicContract {
function function1(uint16 a,uint16 b,uint16 c,uint16 d) external payable returns(uint256){
//a,b,c,d doesn't matter
return 68;
}
//buy a ticket
function function2(uint128 a,uint16 b) external payable returns(uint128){
//a,b doesn't matter
return 94;
}
function function3(uint128 a) external payable returns(bool){
//a doesn't matter
return false;
}
}
有兩種方法可以在智能合約中調用功能:通過發送到網絡的事務或通過本地call
。
事務沒有返回值。 從用於進行事務的庫中獲取的內容通常是事務哈希。 您調用的函數的任何返回值都將被丟棄。
本地call
不涉及到網絡的事務,因此不能改變任何狀態。 但它確實給你一個回報值。
默認情況下,大多數庫選擇哪種方法取決於函數是否處於狀態更改狀態。 如果將函數標記為view
或pure
函數,它會告訴庫這些函數不會更改狀態,然后可以安全地在本地call
ed以獲取返回值。 因此,上述代碼的簡單“修復”就是使這些函數變得pure
。 對於確實改變狀態的函數,您將需要從使用return
值切換到發出事件,這可以在事務挖掘后讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.