1.1 KiB
eip | title | author | category | type | status | created |
---|---|---|---|---|---|---|
1014 | Skinny CREATE2 | Vitalik Buterin (@vbuterin) | Core | Standards Track | Draft | 2018-04-20 |
Specification
Adds a new opcode at 0xf5, which takes 4 stack arguments: endowment, memory_start, memory_length, salt. Behaves identically to CREATE, except using sha3(msg.sender ++ salt ++ init_code)[12:]
instead of the usual sender-and-nonce-hash as the address where the contract is initialized at.
Motivation
Allows interactions to (actually or counterfactually in channels) be made with addresses that do not exist yet on-chain but can be relied on to only possibly eventually contain code that has been created by a particular piece of init code. Important for state-channel use cases that involve counterfactual interactions with contracts.
Option 2
Use sha3(0xff ++ msg.sender ++ salt ++ init_code)[12:]
Rationale: ensures that addresses created with this scheme cannot collide with addresses created using the traditional sha3(rlp([sender, nonce]))
formula, as 0xff can only be a starting byte for RLP for data many petabytes long.