Solidity

視圖中的無限循環

  • October 18, 2021

乙太坊網路如何防止視圖中的無限循環?在正常的交易中,你必須支付gas費,所以對你來說太貴了,但是呼叫views是免費的。

例如這個:

contract Tester {
   
   function loo() public pure returns(string memory){
       uint i = 1;
       uint c = 0;
       while(i == 1){
           c = c + 1;
       }
       return "good";
   }
}

我試圖在 Remix 中呼叫它,但它崩潰了。

view函式在鏈上執行時,即在探勘交易中,它會消耗氣體,這可以保護節點免受無限循環。當通過 Web3 API 脫鏈執行時,呼叫者仍然能夠為執行指定氣體限制,請參閱文件

如果沒有指定gas limit,那麼如何保護這些東西取決於具體的實現,因為它們只影響執行鏈下交易的過程,而不影響其他節點。一些實現可能是不受保護的,而 REMIX 似乎是這種不受保護的實現之一。

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