Created
September 2, 2022 16:49
-
-
Save hugo-dc/d69fa1978417f25293a207e8daadd0e5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# CREATE opcode with EOF1 initcode or/and code (EIP-3541, EIP-3540, EIP-3670) | |
CREATE_EOF1Temporal: | |
env: | |
currentCoinbase: 2adc25665018aa1fe0e6bc666dac8fc2697ff9ba | |
currentDifficulty: '0x020000' | |
currentGasLimit: '89128960' | |
currentBaseFee: '10' | |
currentNumber: '1' | |
currentTimestamp: '1000' | |
previousHash: 5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6 | |
pre: | |
a94f5374fce5edbc8e2a8697c15331677e6ebf0b: | |
balance: 200000000 | |
code: '' | |
nonce: 0 | |
storage: {} | |
b94f5374fce5edbc8e2a8697c15331677e6ebf0b: | |
balance: 0 | |
code: | | |
:yul | |
{ | |
let push_generator := 0xc01f5374fce5edbc8e2a8697c15331677e6ebf0b | |
let eof_generator := 0xd01f5374fce5edbc8e2a8697c15331677e6ebf0b | |
let icode_generator := 0xe01f5374fce5edbc8e2a8697c15331677e6ebf0b | |
let evm_offset := 32 | |
let eof_offset := 96 | |
let icode_offset:= 160 | |
for { let push_size := 1 } lt(push_size, 33) { push_size := add(push_size, 1) } | |
{ | |
mstore8(0, push_size) | |
// Generate PUSH | |
let code_len := add(push_size, 1) | |
pop(call(100000, push_generator, 0, 0, 1, evm_offset, code_len)) | |
code_len := add(code_len, 1) // Add extra byte 00 (STOP) | |
// sstore(1, mload(evm_offset)) | |
// Generate EOF Code | |
let eof_len := add(7, code_len) | |
pop(call(100000, eof_generator, 0, evm_offset, code_len, eof_offset, eof_len)) | |
// Generate Init code | |
let icode_len := 41 | |
if gt(eof_len, 32) { | |
icode_len := 77 | |
} | |
pop(call(100000, icode_generator, 0, eof_offset, eof_len, icode_offset, icode_len)) | |
if iszero(create(0, icode_offset, icode_len)) { sstore(1, 1) } | |
} | |
} | |
nonce: 0 | |
storage: {} | |
c01f5374fce5edbc8e2a8697c15331677e6ebf0b: # PUSH opcode generator | |
balance: 0 | |
code: | | |
:yul | |
{ | |
// data: | |
mstore(0, 0xfff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3) | |
let data_off := 0 | |
let input_off := 32 | |
let code_off := 64 | |
// read push length | |
calldatacopy(input_off, 0, 1) | |
let push_length := shr(248, mload(input_off)) | |
if gt(push_length, 32) { | |
revert(0, 0) | |
} | |
let push_op := add(95, push_length) | |
mstore8(code_off, push_op) | |
let next_off := add(code_off, 1) | |
let shift_bits := sub(256, mul(push_length, 8)) | |
let push_data := shl(shift_bits, shr(shift_bits, mload(data_off))) | |
mstore(next_off, push_data) | |
let code_len := add(1, push_length) | |
return(code_off, code_len) | |
} | |
nonce: 0 | |
storage: {} | |
d01f5374fce5edbc8e2a8697c15331677e6ebf0b: # EOF code generator | |
nonce: 0 | |
balance: 0 | |
code : | | |
:yul | |
{ | |
let eof_code_off := 0 | |
let evm_code_off := add(eof_code_off, 7) | |
let evm_size_off := add(eof_code_off, 5) | |
mstore(eof_code_off, 0xef00010100000000000000000000000000000000000000000000000000000000) | |
let code_len := calldatasize() | |
mstore8(evm_size_off, code_len) | |
calldatacopy(evm_code_off, 0, code_len) | |
let eof_len := add(7, code_len) | |
return(eof_code_off, eof_len) | |
} | |
storage: {} | |
e01f5374fce5edbc8e2a8697c15331677e6ebf0b: # Init code generator | |
nonce: 0 | |
balance: 0 | |
code: | | |
:yul | |
{ | |
let eof_len := calldatasize() | |
let init_offset := 0 | |
let eof_offset := 128 | |
calldatacopy(eof_offset, 0, eof_len) | |
let next_offset := init_offset | |
let next_eof_offset := eof_offset | |
if gt(eof_len, 32) { | |
mstore8(next_offset, 0x7f) // PUSH32 | |
next_offset := add(next_offset, 1) | |
mstore(next_offset, mload(eof_offset)) // eof[:32] | |
next_offset := add(next_offset, 32) | |
next_eof_offset := add(eof_offset, 32) | |
mstore8(next_offset, 0x60) // PUSH1 00 | |
next_offset := add(next_offset, 2) | |
mstore8(next_offset, 0x52) // MSTORE | |
next_offset := add(next_offset, 1) | |
} | |
mstore8(next_offset, 0x7f) // PUSH32 | |
next_offset := add(next_offset, 1) | |
mstore(next_offset, mload(next_eof_offset)) // Remaining EOF | |
next_offset := add(next_offset, 32) | |
mstore8(next_offset, 0x60) // PUSH1 | |
next_offset := add(next_offset, 1) | |
mstore8(next_offset, 0) // 00 | |
if gt(eof_len, 32) { | |
mstore8(next_offset, 32) // 32 | |
} | |
next_offset := add(next_offset, 1) | |
mstore8(next_offset, 0x52) // MSTORE | |
next_offset := add(next_offset, 1) | |
mstore8(next_offset, 0x60) // PUSH1 | |
next_offset := add(next_offset, 1) | |
mstore8(next_offset, eof_len) // <eof_len> | |
next_offset := add(next_offset, 1) | |
mstore8(next_offset, 0x60) // PUSH1 00 | |
next_offset := add(next_offset, 2) | |
mstore8(next_offset, 0xf3) // RETURN | |
next_offset := add(next_offset, 1) // Init code length | |
return(init_offset, next_offset) | |
} | |
storage: {} | |
transaction: | |
data: | |
- '' | |
gasLimit: | |
- 15000000 | |
gasPrice: 10 | |
nonce: 0 | |
secretKey: 45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8 | |
to: 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b' | |
to: '' | |
value: | |
- 0 | |
expect: | |
- indexes: | |
data: '' | |
network: | |
- 'London+3540+3670' | |
result: | |
a94f5374fce5edbc8e2a8697c15331677e6ebf0b: | |
nonce: 1 | |
b94f5374fce5edbc8e2a8697c15331677e6ebf0b: | |
nonce: 32 | |
storage: {} | |
F1eCF98489FA9ed60A664fc4998DB699cfA39d40: # PUSH1 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100030060ff00' | |
30c7cC0d18123b445C2636fF9069ef28C0DC32b5: # PUSH2 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100040061fff300' | |
Ff151c621cd011e353fA1BE2AF3ff0256e6a500D: # PUSH3 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100050062fff3fd00' | |
c1398Fda3E8242AbB1E84c1a93DE86C35E45736d: # PUSH4 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100060063fff3fdfe00' | |
9a324DA36eb69026fd6911a66dF8B901574585ae: # PUSH5 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100070064fff3fdfeff00' | |
bD445A8094e09Ee91c67CdFcB94183FfD7CB3601: # PUSH6 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100080065fff3fdfeff0000' | |
454024aD7A106D201f72b86A51683Dcb06fCC5Cd: # PUSH7 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100090066fff3fdfeff00f300' | |
C28376675400C2f7562ace8ba2c4c4d3a155b650: # PUSH8 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101000a0067fff3fdfeff00f3fd00' | |
12dF7028C8694f7eea168Fd542E93B10efb065D4: # PUSH9 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101000b0068fff3fdfeff00f3fdfe00' | |
476Db73376Fcb2493EEF1Ae3eEa76d743CB27292: # PUSH10 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101000c0069fff3fdfeff00f3fdfeff00' | |
F08C2232b191ecfD8e930c3e71DCC3bBB006be2e: # PUSH11 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101000d006afff3fdfeff00f3fdfeff0000' | |
8A3F75817f0eB7406815ca27AFF2d5D19659C7Bb: # PUSH12 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101000e006bfff3fdfeff00f3fdfeff00f300' | |
d3Db3bc147Af48cdb5639C404D67672a86d1E712: # PUSH13 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101000f006cfff3fdfeff00f3fdfeff00f3fd00' | |
6C9716b2A219cb917035b29565B3703700A7840B: # PUSH14 | |
nonce: 1 | |
storage: {} | |
code: '0xef0001010010006dfff3fdfeff00f3fdfeff00f3fdfe00' | |
001Da4cd7B01eadE876A2063c301FC098D0DEF82: # PUSH15 | |
nonce: 1 | |
storage: {} | |
code: '0xef0001010011006efff3fdfeff00f3fdfeff00f3fdfeff00' | |
fCE78bC7281bC69378b6b094F74da871F19b7F70: # PUSH16 | |
nonce: 1 | |
storage: {} | |
code: '0xef0001010012006ffff3fdfeff00f3fdfeff00f3fdfeff0000' | |
48B9D339d041F6078Fc488D1cEBFE4CaFa1bf730: # PUSH17 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100130070fff3fdfeff00f3fdfeff00f3fdfeff00f300' | |
C519e8cB77C7D31Fa90D2E0f0789fCa6d7906d9e: # PUSH18 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100140071fff3fdfeff00f3fdfeff00f3fdfeff00f3fd00' | |
0a48E404E0E25E85A30d5c82007120eDAF00F75F: # PUSH19 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100150072fff3fdfeff00f3fdfeff00f3fdfeff00f3fdfe00' | |
B07C369b776A2434Caf91326899d6e6b85BDd439: # PUSH20 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100160073fff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00' | |
85A48C00c5F1d6f71753383f21B427cE6a21A175: # PUSH21 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100170074fff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff0000' | |
7B78c9C54C8880004954dA8d94a969318056947C: # PUSH22 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100180075fff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f300' | |
e4435e11BBC0788863B952A6c8c31e3c9b594663: # PUSH23 | |
nonce: 1 | |
storage: {} | |
code: '0xef00010100190076fff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fd00' | |
a5d98AAf2B7Fc3d9D3C85F2Da525C7dFd3B5e11b: # PUSH24 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101001a0077fff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfe00' | |
b411BD3E0F163d10A06166969A5C057b636f600f: # PUSH25 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101001b0078fff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00' | |
F8d399d09cdeDA13cb3957cA29c7b3Eb0B16a704: # PUSH26 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101001c0079fff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff0000' | |
78c619367806ad2d5328bb8713D4AC6290416F75: # PUSH27 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101001d007afff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f300' | |
2A2314682Fe0E348467E55A98745fD5550C1fd46: # PUSH28 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101001e007bfff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fd00' | |
00Dd562525f9392Eaf97f4910a52b3F01ADc5A1B: # PUSH29 | |
nonce: 1 | |
storage: {} | |
code: '0xef000101001f007cfff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfe00' | |
CA0ad56ed5EC0395be0eafdd103af7Ab792CbdA3: # PUSH30 | |
nonce: 1 | |
storage: {} | |
code: '0xef0001010020007dfff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00' | |
c6a085dB07954d6958f681D4Ba712767F14CC377: # PUSH31 | |
nonce: 1 | |
storage: {} | |
code: '0xef0001010021007efff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff0000' | |
37D8be3d21fF5c91288f9AfB8f098420945CedBA: # PUSH32 | |
nonce: 1 | |
storage: {} | |
code: '0xef0001010022007ffff3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f3fdfeff00f300' | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment