Skip to content

Instantly share code, notes, and snippets.

@hugo-dc
Created September 2, 2022 16:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hugo-dc/d69fa1978417f25293a207e8daadd0e5 to your computer and use it in GitHub Desktop.
Save hugo-dc/d69fa1978417f25293a207e8daadd0e5 to your computer and use it in GitHub Desktop.
# 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