簡體   English   中英

獲取已挖掘的塊而不是假定的返回值

[英]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不涉及到網絡的事務,因此不能改變任何狀態。 但它確實給你一個回報值。

默認情況下,大多數庫選擇哪種方法取決於函數是否處於狀態更改狀態。 如果將函數標記為viewpure函數,它會告訴庫這些函數不會更改狀態,然后可以安全地在本地call ed以獲取返回值。 因此,上述代碼的簡單“修復”就是使這些函數變得pure 對於確實改變狀態的函數,您將需要從使用return值切換到發出事件,這可以在事務挖掘后讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM