Solidity

Solidity - 智能合約交易的返回值

  • September 5, 2019

為什麼 Solidity 交易函式不返回任何值?

這是一個簡單的例子。我在remix和 web3 中對其進行了測試。


pragma solidity ^0.4.25;
contract SimpleStorage {

   uint public storedData;

   constructor(uint initVal) public {
       storedData = initVal;
   }

   function set(uint x) public returns (uint retVal) {
       storedData = x;
       return storedData;
   }

   function get() view public returns (uint retVal) {
       return storedData;
   }

}

我想呼叫該合約的SET 函式並立即返回最近分配的值**,而不呼叫 GET**。

因此,我返回我剛剛發送的值。但是,這似乎不起作用。

我得到的是:

返回值

注意解碼輸出的值為空。

有沒有辦法讓SET-Function輸出它剛剛分配的值?

你可以嘗試事件,看看這個:https ://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html?highlight=events#events

該值實際上是返回的,但我們還沒有辦法通過 web3 庫來獲取它。想一想:如果您的客戶不知道交易何時或是否包含在一個塊中,它如何獲得返回值。

幸運的是,有一個解決方案。它被稱為“事件”,請查看:https ://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html?highlight=events#events

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