Solidity
視圖中的無限循環
乙太坊網路如何防止視圖中的無限循環?在正常的交易中,你必須支付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 似乎是這種不受保護的實現之一。