Contract-Invocation
返回值的應付函式:這個例子什麼時候實用?
引用一本書的例子:
contract StockPriceOracle { uint quoteFee = 500; mapping (string => uint) private stockPrices; //... function getStockPrice(string _stockTicker) payable returns (uint _stockPrice) { if (msg.value == quoteFee) { //... _stockPrice = stockPrices[_stockTicker]; } else { revert(); } } }
有一個
payable
返回值的函式。如果我錯了,請糾正我,但據我了解,這個例子沒有任何實際意義。為了使呼叫者能夠檢索所需的資訊(股票價格),該函式必鬚髮出一個事件。或者是否存在上面的程式碼實際上是實用的情況?
為了使呼叫者能夠檢索所需的資訊(股票價格),該函式必鬚髮出一個事件。
對於鏈下呼叫者來說確實如此,例如:
- Web3.js 腳本
- Web3.py 腳本
- 我的乙太錢包
- 混音
或者是否存在上面的程式碼實際上是實用的情況?
是的,它(返回值)對於鏈上呼叫者是實用的,例如:
- 同一個合約中的一個函式
- 其他合約中的函式
請注意,函式的訪問級別 (
public
/private
/external
/internal
) 在限制此處允許的呼叫者類型方面也發揮了作用。