diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 12e44ee073e0..5c0d4dbc2524 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -903,7 +903,12 @@ func makeLog(size int) executionFunc { } func opPaygas(pc *uint64, interpreter *EVMInterpreter, callContext *callCtx) ([]byte, error) { - interpreter.evm.snapshots[len(interpreter.evm.snapshots)-1] = interpreter.evm.StateDB.Snapshot() + + // TODO: Store the popped value + if interpreter.paygasMode != PaygasNoOp { + interpreter.evm.snapshots[len(interpreter.evm.snapshots)-1] = interpreter.evm.StateDB.Snapshot() + interpreter.paygasMode = PaygasNoOp + } interpreter.intPool.put(callContext.stack.pop()) return nil, nil } diff --git a/core/vm/interpreter.go b/core/vm/interpreter.go index 8b8705a2ac17..aae3e7859ce0 100644 --- a/core/vm/interpreter.go +++ b/core/vm/interpreter.go @@ -106,7 +106,7 @@ func NewEVMInterpreter(evm *EVM, cfg Config) *EVMInterpreter { var jt JumpTable switch { case evm.chainRules.IsAccountAbstraction: - jt = accountAbstractionInstructionSet + jt = newAccountAbstractionInstructionSet(cfg.PaygasMode) case evm.chainRules.IsIstanbul: jt = istanbulInstructionSet case evm.chainRules.IsConstantinople: @@ -232,6 +232,9 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( if !operation.valid { return nil, &ErrInvalidOpCode{opcode: op} } + if in.paygasMode != PaygasNoOp && operation.internal { + return nil, &ErrInvalidOpCode{opcode: op} + } // Validate stack if sLen := stack.len(); sLen < operation.minStack { return nil, &ErrStackUnderflow{stackLen: sLen, required: operation.minStack} diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index a58a91088557..7af1e4d7756a 100644 --- a/core/vm/jump_table.go +++ b/core/vm/jump_table.go @@ -41,12 +41,13 @@ type operation struct { // memorySize returns the memory size required for the operation memorySize memorySizeFunc - halts bool // indicates whether the operation should halt further execution - jumps bool // indicates whether the program counter should not increment - writes bool // determines whether this a state modifying operation - valid bool // indication whether the retrieved operation is valid and known - reverts bool // determines whether the operation reverts state (implicitly halts) - returns bool // determines whether the operations sets the return data content + halts bool // indicates whether the operation should halt further execution + jumps bool // indicates whether the program counter should not increment + writes bool // determines whether this a state modifying operation + valid bool // indication whether the retrieved operation is valid and known + reverts bool // determines whether the operation reverts state (implicitly halts) + returns bool // determines whether the operations sets the return data content + internal bool // indicates that the operation is safe to call before paygas } var ( @@ -57,7 +58,6 @@ var ( byzantiumInstructionSet = newByzantiumInstructionSet() constantinopleInstructionSet = newConstantinopleInstructionSet() istanbulInstructionSet = newIstanbulInstructionSet() - accountAbstractionInstructionSet = newAccountAbstractionInstructionSet() ) // JumpTable contains the EVM opcodes supported at a given fork. @@ -74,7 +74,7 @@ const ( PaygasContinue ) -func newAccountAbstractionInstructionSet() JumpTable { +func newAccountAbstractionInstructionSet(paygasMode PaygasMode) JumpTable { instructionSet := newIstanbulInstructionSet() instructionSet[PAYGAS] = operation{ @@ -83,6 +83,8 @@ func newAccountAbstractionInstructionSet() JumpTable { minStack: minStack(1, 0), maxStack: maxStack(1, 0), valid: true, + internal: true, + halts: paygasMode == PaygasHalt, } return instructionSet @@ -110,6 +112,7 @@ func newConstantinopleInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, } instructionSet[SHR] = operation{ execute: opSHR, @@ -117,6 +120,7 @@ func newConstantinopleInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, } instructionSet[SAR] = operation{ execute: opSAR, @@ -124,6 +128,7 @@ func newConstantinopleInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, } instructionSet[EXTCODEHASH] = operation{ execute: opExtCodeHash, @@ -166,6 +171,7 @@ func newByzantiumInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, } instructionSet[RETURNDATACOPY] = operation{ execute: opReturnDataCopy, @@ -175,6 +181,7 @@ func newByzantiumInstructionSet() JumpTable { maxStack: maxStack(3, 0), memorySize: memoryReturnDataCopy, valid: true, + internal: true, } instructionSet[REVERT] = operation{ execute: opRevert, @@ -185,6 +192,7 @@ func newByzantiumInstructionSet() JumpTable { valid: true, reverts: true, returns: true, + internal: true, } return instructionSet } @@ -238,6 +246,7 @@ func newFrontierInstructionSet() JumpTable { maxStack: maxStack(0, 0), halts: true, valid: true, + internal: true, }, ADD: { execute: opAdd, @@ -245,6 +254,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, MUL: { execute: opMul, @@ -252,6 +262,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, SUB: { execute: opSub, @@ -259,6 +270,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, DIV: { execute: opDiv, @@ -266,6 +278,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, SDIV: { execute: opSdiv, @@ -273,6 +286,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, MOD: { execute: opMod, @@ -280,6 +294,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, SMOD: { execute: opSmod, @@ -287,6 +302,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, ADDMOD: { execute: opAddmod, @@ -294,6 +310,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(3, 1), maxStack: maxStack(3, 1), valid: true, + internal: true, }, MULMOD: { execute: opMulmod, @@ -301,6 +318,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(3, 1), maxStack: maxStack(3, 1), valid: true, + internal: true, }, EXP: { execute: opExp, @@ -308,6 +326,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, SIGNEXTEND: { execute: opSignExtend, @@ -315,6 +334,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, LT: { execute: opLt, @@ -322,6 +342,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, GT: { execute: opGt, @@ -329,6 +350,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, SLT: { execute: opSlt, @@ -336,6 +358,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, SGT: { execute: opSgt, @@ -343,6 +366,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, EQ: { execute: opEq, @@ -350,6 +374,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, ISZERO: { execute: opIszero, @@ -357,6 +382,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(1, 1), maxStack: maxStack(1, 1), valid: true, + internal: true, }, AND: { execute: opAnd, @@ -364,6 +390,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, XOR: { execute: opXor, @@ -371,6 +398,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, OR: { execute: opOr, @@ -378,6 +406,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, NOT: { execute: opNot, @@ -385,6 +414,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(1, 1), maxStack: maxStack(1, 1), valid: true, + internal: true, }, BYTE: { execute: opByte, @@ -392,6 +422,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(2, 1), maxStack: maxStack(2, 1), valid: true, + internal: true, }, SHA3: { execute: opSha3, @@ -401,6 +432,7 @@ func newFrontierInstructionSet() JumpTable { maxStack: maxStack(2, 1), memorySize: memorySha3, valid: true, + internal: true, }, ADDRESS: { execute: opAddress, @@ -408,6 +440,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, BALANCE: { execute: opBalance, @@ -422,6 +455,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, CALLER: { execute: opCaller, @@ -429,6 +463,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, CALLVALUE: { execute: opCallValue, @@ -436,6 +471,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, CALLDATALOAD: { execute: opCallDataLoad, @@ -443,6 +479,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(1, 1), maxStack: maxStack(1, 1), valid: true, + internal: true, }, CALLDATASIZE: { execute: opCallDataSize, @@ -450,6 +487,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, CALLDATACOPY: { execute: opCallDataCopy, @@ -459,6 +497,7 @@ func newFrontierInstructionSet() JumpTable { maxStack: maxStack(3, 0), memorySize: memoryCallDataCopy, valid: true, + internal: true, }, CODESIZE: { execute: opCodeSize, @@ -466,6 +505,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, CODECOPY: { execute: opCodeCopy, @@ -475,6 +515,7 @@ func newFrontierInstructionSet() JumpTable { maxStack: maxStack(3, 0), memorySize: memoryCodeCopy, valid: true, + internal: true, }, GASPRICE: { execute: opGasprice, @@ -482,6 +523,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, EXTCODESIZE: { execute: opExtCodeSize, @@ -547,6 +589,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(1, 0), maxStack: maxStack(1, 0), valid: true, + internal: true, }, MLOAD: { execute: opMload, @@ -556,6 +599,7 @@ func newFrontierInstructionSet() JumpTable { maxStack: maxStack(1, 1), memorySize: memoryMLoad, valid: true, + internal: true, }, MSTORE: { execute: opMstore, @@ -565,6 +609,7 @@ func newFrontierInstructionSet() JumpTable { maxStack: maxStack(2, 0), memorySize: memoryMStore, valid: true, + internal: true, }, MSTORE8: { execute: opMstore8, @@ -573,8 +618,8 @@ func newFrontierInstructionSet() JumpTable { memorySize: memoryMStore8, minStack: minStack(2, 0), maxStack: maxStack(2, 0), - - valid: true, + valid: true, + internal: true, }, SLOAD: { execute: opSload, @@ -582,6 +627,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(1, 1), maxStack: maxStack(1, 1), valid: true, + internal: true, }, SSTORE: { execute: opSstore, @@ -590,6 +636,7 @@ func newFrontierInstructionSet() JumpTable { maxStack: maxStack(2, 0), valid: true, writes: true, + internal: true, }, JUMP: { execute: opJump, @@ -598,6 +645,7 @@ func newFrontierInstructionSet() JumpTable { maxStack: maxStack(1, 0), jumps: true, valid: true, + internal: true, }, JUMPI: { execute: opJumpi, @@ -606,6 +654,7 @@ func newFrontierInstructionSet() JumpTable { maxStack: maxStack(2, 0), jumps: true, valid: true, + internal: true, }, PC: { execute: opPc, @@ -613,6 +662,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, MSIZE: { execute: opMsize, @@ -620,6 +670,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, GAS: { execute: opGas, @@ -627,6 +678,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, JUMPDEST: { execute: opJumpdest, @@ -634,6 +686,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 0), maxStack: maxStack(0, 0), valid: true, + internal: true, }, PUSH1: { execute: opPush1, @@ -641,6 +694,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH2: { execute: makePush(2, 2), @@ -648,6 +702,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH3: { execute: makePush(3, 3), @@ -655,6 +710,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH4: { execute: makePush(4, 4), @@ -662,6 +718,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH5: { execute: makePush(5, 5), @@ -669,6 +726,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH6: { execute: makePush(6, 6), @@ -676,6 +734,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH7: { execute: makePush(7, 7), @@ -683,6 +742,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH8: { execute: makePush(8, 8), @@ -690,6 +750,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH9: { execute: makePush(9, 9), @@ -697,6 +758,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH10: { execute: makePush(10, 10), @@ -704,6 +766,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH11: { execute: makePush(11, 11), @@ -711,6 +774,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH12: { execute: makePush(12, 12), @@ -718,6 +782,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH13: { execute: makePush(13, 13), @@ -725,6 +790,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH14: { execute: makePush(14, 14), @@ -732,6 +798,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH15: { execute: makePush(15, 15), @@ -739,6 +806,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH16: { execute: makePush(16, 16), @@ -746,6 +814,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH17: { execute: makePush(17, 17), @@ -753,6 +822,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH18: { execute: makePush(18, 18), @@ -760,6 +830,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH19: { execute: makePush(19, 19), @@ -767,6 +838,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH20: { execute: makePush(20, 20), @@ -774,6 +846,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH21: { execute: makePush(21, 21), @@ -781,6 +854,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH22: { execute: makePush(22, 22), @@ -788,6 +862,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH23: { execute: makePush(23, 23), @@ -795,6 +870,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH24: { execute: makePush(24, 24), @@ -802,6 +878,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH25: { execute: makePush(25, 25), @@ -809,6 +886,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH26: { execute: makePush(26, 26), @@ -816,6 +894,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH27: { execute: makePush(27, 27), @@ -823,6 +902,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH28: { execute: makePush(28, 28), @@ -830,6 +910,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH29: { execute: makePush(29, 29), @@ -837,6 +918,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH30: { execute: makePush(30, 30), @@ -844,6 +926,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH31: { execute: makePush(31, 31), @@ -851,6 +934,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, PUSH32: { execute: makePush(32, 32), @@ -858,6 +942,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minStack(0, 1), maxStack: maxStack(0, 1), valid: true, + internal: true, }, DUP1: { execute: makeDup(1), @@ -865,6 +950,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(1), maxStack: maxDupStack(1), valid: true, + internal: true, }, DUP2: { execute: makeDup(2), @@ -872,6 +958,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(2), maxStack: maxDupStack(2), valid: true, + internal: true, }, DUP3: { execute: makeDup(3), @@ -879,6 +966,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(3), maxStack: maxDupStack(3), valid: true, + internal: true, }, DUP4: { execute: makeDup(4), @@ -886,6 +974,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(4), maxStack: maxDupStack(4), valid: true, + internal: true, }, DUP5: { execute: makeDup(5), @@ -893,6 +982,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(5), maxStack: maxDupStack(5), valid: true, + internal: true, }, DUP6: { execute: makeDup(6), @@ -900,6 +990,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(6), maxStack: maxDupStack(6), valid: true, + internal: true, }, DUP7: { execute: makeDup(7), @@ -907,6 +998,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(7), maxStack: maxDupStack(7), valid: true, + internal: true, }, DUP8: { execute: makeDup(8), @@ -914,6 +1006,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(8), maxStack: maxDupStack(8), valid: true, + internal: true, }, DUP9: { execute: makeDup(9), @@ -921,6 +1014,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(9), maxStack: maxDupStack(9), valid: true, + internal: true, }, DUP10: { execute: makeDup(10), @@ -928,6 +1022,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(10), maxStack: maxDupStack(10), valid: true, + internal: true, }, DUP11: { execute: makeDup(11), @@ -935,6 +1030,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(11), maxStack: maxDupStack(11), valid: true, + internal: true, }, DUP12: { execute: makeDup(12), @@ -942,6 +1038,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(12), maxStack: maxDupStack(12), valid: true, + internal: true, }, DUP13: { execute: makeDup(13), @@ -949,6 +1046,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(13), maxStack: maxDupStack(13), valid: true, + internal: true, }, DUP14: { execute: makeDup(14), @@ -956,6 +1054,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(14), maxStack: maxDupStack(14), valid: true, + internal: true, }, DUP15: { execute: makeDup(15), @@ -963,6 +1062,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(15), maxStack: maxDupStack(15), valid: true, + internal: true, }, DUP16: { execute: makeDup(16), @@ -970,6 +1070,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minDupStack(16), maxStack: maxDupStack(16), valid: true, + internal: true, }, SWAP1: { execute: makeSwap(1), @@ -977,6 +1078,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(2), maxStack: maxSwapStack(2), valid: true, + internal: true, }, SWAP2: { execute: makeSwap(2), @@ -984,6 +1086,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(3), maxStack: maxSwapStack(3), valid: true, + internal: true, }, SWAP3: { execute: makeSwap(3), @@ -991,6 +1094,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(4), maxStack: maxSwapStack(4), valid: true, + internal: true, }, SWAP4: { execute: makeSwap(4), @@ -998,6 +1102,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(5), maxStack: maxSwapStack(5), valid: true, + internal: true, }, SWAP5: { execute: makeSwap(5), @@ -1005,6 +1110,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(6), maxStack: maxSwapStack(6), valid: true, + internal: true, }, SWAP6: { execute: makeSwap(6), @@ -1012,6 +1118,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(7), maxStack: maxSwapStack(7), valid: true, + internal: true, }, SWAP7: { execute: makeSwap(7), @@ -1019,6 +1126,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(8), maxStack: maxSwapStack(8), valid: true, + internal: true, }, SWAP8: { execute: makeSwap(8), @@ -1026,6 +1134,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(9), maxStack: maxSwapStack(9), valid: true, + internal: true, }, SWAP9: { execute: makeSwap(9), @@ -1033,6 +1142,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(10), maxStack: maxSwapStack(10), valid: true, + internal: true, }, SWAP10: { execute: makeSwap(10), @@ -1040,6 +1150,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(11), maxStack: maxSwapStack(11), valid: true, + internal: true, }, SWAP11: { execute: makeSwap(11), @@ -1047,6 +1158,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(12), maxStack: maxSwapStack(12), valid: true, + internal: true, }, SWAP12: { execute: makeSwap(12), @@ -1054,6 +1166,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(13), maxStack: maxSwapStack(13), valid: true, + internal: true, }, SWAP13: { execute: makeSwap(13), @@ -1061,6 +1174,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(14), maxStack: maxSwapStack(14), valid: true, + internal: true, }, SWAP14: { execute: makeSwap(14), @@ -1068,6 +1182,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(15), maxStack: maxSwapStack(15), valid: true, + internal: true, }, SWAP15: { execute: makeSwap(15), @@ -1075,6 +1190,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(16), maxStack: maxSwapStack(16), valid: true, + internal: true, }, SWAP16: { execute: makeSwap(16), @@ -1082,6 +1198,7 @@ func newFrontierInstructionSet() JumpTable { minStack: minSwapStack(17), maxStack: maxSwapStack(17), valid: true, + internal: true, }, LOG0: { execute: makeLog(0), @@ -1091,6 +1208,7 @@ func newFrontierInstructionSet() JumpTable { memorySize: memoryLog, valid: true, writes: true, + internal: true, }, LOG1: { execute: makeLog(1), @@ -1100,6 +1218,7 @@ func newFrontierInstructionSet() JumpTable { memorySize: memoryLog, valid: true, writes: true, + internal: true, }, LOG2: { execute: makeLog(2), @@ -1109,6 +1228,7 @@ func newFrontierInstructionSet() JumpTable { memorySize: memoryLog, valid: true, writes: true, + internal: true, }, LOG3: { execute: makeLog(3), @@ -1118,6 +1238,7 @@ func newFrontierInstructionSet() JumpTable { memorySize: memoryLog, valid: true, writes: true, + internal: true, }, LOG4: { execute: makeLog(4), @@ -1127,6 +1248,7 @@ func newFrontierInstructionSet() JumpTable { memorySize: memoryLog, valid: true, writes: true, + internal: true, }, CREATE: { execute: opCreate, @@ -1167,6 +1289,7 @@ func newFrontierInstructionSet() JumpTable { memorySize: memoryReturn, halts: true, valid: true, + internal: true, }, SELFDESTRUCT: { execute: opSuicide, @@ -1176,6 +1299,7 @@ func newFrontierInstructionSet() JumpTable { halts: true, valid: true, writes: true, + internal: true, }, } }