1. 使用pure或者view函數,直接拿到返回值,但不是所有的函數都能聲明成pure/view。
2. 使用event包裝返回值,但是在emit之前返回的函數是沒有event的,如果需要每條path都返回有意義的return value,可能需要定義很多個event。(不考慮require throw的情況下)
3. 使用web3.eth.Contract.call,需要ABI和deployed address,這個用法有個缺點是將函數變成了constant的,即和1一樣無法改變合約內部狀態,只能說在特定的場景下有用。
4. EIP-758(https://eips.ethereum.org/EIPS/eip-758),返回returnData在subscribe的通道上,但是看目前的狀態還是draft。