Solidity
Solidity 視圖/純函式可以任意複雜嗎?
非常量函式的計算複雜度受到塊氣體限制的限制。我假設但不確定這不適用於
view
/pure
函式。view
/函式是否pure
以任何方式限制了計算複雜性,除了我必須等待很長一段時間直到執行一個長循環?
view
/pure
功能受到提供給它的氣體的限制。他們仍然“使用”天然氣,即使發件人(from
帳戶)沒有為天然氣“收費”。
view
,pure
是Solidity 關鍵字,但目前只是 Javascript web3.js 使用 JSON-RPCeth_call
而不是eth_sendTransaction
.https://github.com/ethereum/wiki/wiki/JavaScript-API#contract-methods
// Automatically determines the use of call or sendTransaction based on the method type (constant keyword exists or not?) myContractInstance.myMethod(param1 [, param2, ...] [, transactionObject] [, defaultBlock] [, callback]); // Explicitly calling this method myContractInstance.myMethod.call(param1 [, param2, ...] [, transactionObject] [, defaultBlock] [, callback]); // Explicitly sending a transaction to this method myContractInstance.myMethod.sendTransaction(param1 [, param2, ...] [, transactionObject] [, callback]);
call 和 sendTransaction 非常相似(在幕後),主要區別在於前者是模擬。但是模擬仍然“使用”氣體,並且可以理解會引起混亂。要在/函式中執行複雜的計算,您可能需要**明確指定大量氣體,**例如:
view``pure``myContractInstance.myMethod.call(param1, {gas:990000000})
例如,Geth“僅”提供5000 萬個 gas:
if msg.gas == nil { msg.gas = big.NewInt(50000000) }
正如@Tjaden 評論的那樣,基本上沒有關於 eth_call 的規範,因此其他客戶端和瀏覽器的可靠性可能與 Geth 不同。