Contract-Invocation

返回值的應付函式:這個例子什麼時候實用?

  • January 20, 2020

引用一本書的例子:

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) 在限制此處允許的呼叫者類型方面也發揮了作用。

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