diff --git a/EIPS/eip-1014.md b/EIPS/eip-1014.md new file mode 100644 index 00000000..da654104 --- /dev/null +++ b/EIPS/eip-1014.md @@ -0,0 +1,23 @@ +--- +eip: 1014 +title: Skinny CREATE2 +author: Vitalik Buterin (@vbuterin) +category: Core +type: Standards Track +status: Draft +created: 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.