Solidity

當呼叫solidity函式時,如何從web3js中的事務ID獲取從solidity函式返回的數據?

  • July 8, 2018

我想在 web3js 中獲取用solidity 函式編寫的返回數據。我正在使用web3.min.jstruffle pet-shop 包中的作為 web3 庫。呼叫函式時一切正常,它返回了我用來web3.eth.getTransactionReciept獲取詳細資訊的交易數據,並且還使用了 gas。現在我想要返回我的solidity方法的數據

function helloworld() public returns (string) {
       return "helloworld";
   }

js部分

<script>

   if (typeof web3 !== 'undefined') {
   web3 = new Web3(web3.currentProvider);
   } else {
   web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));
   }
   web3.eth.defaultAccount = web3.eth.accounts[0];
   console.log('web3.eth.accounts :', web3.eth.accounts);
   var walletContractJSONabiGlobal;
   $.getJSON('./contracts/Wallet.json',async function(walletContractJSONabi) {
       walletContractJSONabiGlobal = walletContractJSONabi;
       var walletContract = web3.eth.contract(walletContractJSONabi.abi);
       var walletInstance = walletContract.at('0xc74c8d941494495a4f65c42bebc556398e1f028d');
       walletInstance.helloworld((err,data)=>{
           if (err) {
               console.log('err :', err);
           } else {
               console.log('data :', data);
           }
       })

   })

</script>

我在控制台中獲取數據

數據:0x988d4bd3169a4d752f6e4ac230d01840f2f7b4cc8e87d768a8e41b6fe867740d

我做了,web3.toAscii(this transaction is)但它沒有得到預期的正確結果,因為這不是十六進制值

當輸出web3.eth.getTransactionReciept

blockHash:“0x552a93b0035571b93e4a1a89daa445663b0ddb29974078cdf9a250b7f873ca96”blockNumber:10 contractAddress:空累積GasUsed:21899 gasUsed:21899日誌:

$$ $$logsBloom:“0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000”狀態:“0×01”transactionHash:“0x988d4bd3169a4d752f6e4ac230d01840f2f7b4cc8e87d768a8e41b6fe867740d”transactionIndex:0

請幫忙謝謝

這可能被標記為重複,所以只是為了幫助你。你不能。

返回值僅適用於其他合約。作為軟體客戶端簽署和發送交易,您得到交易回執,然後等待交易被探勘後,您可以只讀方式檢查檢查其他功能的日誌(合約功能是viewpure,或您使用 JavaScript 方法呼叫它.call())以發現合約狀態中的新內容。狀態改變函式的返回值是遙不可及的。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/52913