EIP 214 introduces a new opcode to the EVM named staticcall. It is a variant of the call operation with an added security property: It allows your contract to call another contract while disallowing state changes. If the called contract does attempt to perform a state changing operation (such as modifying storage), an exception is thrown.

The staticcall operation is safer to use than call, because it guarantees that there won’t be any side-effects from calling another contract. This can be used to prevent reentrant attacks, in which a user tricks your contract into re-calling itself. The unexpected state it ends up in is then used to perform a nefarious action (i.e. withdraw more funds than should be allowed).

I’m excited to see this get rolled out. I think it will help developers write safer contracts.

EIP 214