EIP-3860: Limit and meter initcode

This is the discussion topic for

1 Like

This has been implemented in Geth (core/vm: implement EIP-3860: Limit and meter initcode by gumb0 · Pull Request #23847 · ethereum/go-ethereum · GitHub) and state tests have been created (Tests for EIP-3860: Limit and meter initcode by gumb0 · Pull Request #990 · ethereum/tests · GitHub).

If a contract uses a CREATE/CREATE2 opcode and the resulting initcode_size exceeds the maximum, then there is an exceptional abort. But, in what context does it abort? Does it fail in the CREATE frame or does it fail in the context of the contract which calls the CREATE opcode? So the quesiton here is, if there is an exceptional abort, does the 0 address get put on the stack after executing CREATE/CREATE2, or does the contract which calls CREATE/CREATE2 go OOG?

What do you think about non-charging 32k or gas when returned deployment code is empty?

Assuming the reasoning here would be to use creation transactions as a “poor man’s” batched transactions?

This is also safe way to have create2 factory of proxies for delegatecalls. No need to care of proxy selfdestruction if it was not even deployed.

PEEPanEIP-3860: Limit and meter initcode with @axic @chfast