If block.number >= METROPOLIS_FORK_BLKNUM, then opcode 0xfa functions equivalently to a CALL, except it takes 6 arguments not including value, and calls the child with a STATIC flag on. Any calls, static or otherwise, made by an execution instance with a STATIC flag on will also have a STATIC flag on. Any attempts to make state-changing operations inside an execution instance with a STATIC flag on, including nonzero-value calls, creates, and SSTORE, SSTOREBYTES or SUICIDE operations, will instead throw an exception.
Rationale
This allows contracts to make calls that are clearly non-state-changing, reassuring developers and reviewers that re-entrancy bugs or other problems cannot possibly arise from that particular call; it is a pure function that returns an output and does nothing else. This may also make purely functional HLLs easier to implement.
If
block.number >= METROPOLIS_FORK_BLKNUM, then opcode0xfafunctions equivalently to aCALL, except it takes 6 arguments not including value, and calls the child with aSTATICflag on. Any calls, static or otherwise, made by an execution instance with aSTATICflag on will also have aSTATICflag on. Any attempts to make state-changing operations inside an execution instance with aSTATICflag on, including nonzero-value calls, creates, andSSTORE,SSTOREBYTESorSUICIDEoperations, will instead throw an exception.Rationale
This allows contracts to make calls that are clearly non-state-changing, reassuring developers and reviewers that re-entrancy bugs or other problems cannot possibly arise from that particular call; it is a pure function that returns an output and does nothing else. This may also make purely functional HLLs easier to implement.