From af4a3b0f9fea88195564e5462a2aa1d2689abed2 Mon Sep 17 00:00:00 2001 From: Daniel Liu Date: Mon, 10 Feb 2025 09:18:25 +0800 Subject: [PATCH] core/vm: implement BLOBBASEFEE opcode 0x4a (#28098) --- core/vm/eips.go | 17 +++++++++++++++++ core/vm/jump_table.go | 1 + core/vm/opcodes.go | 3 +++ 3 files changed, 21 insertions(+) diff --git a/core/vm/eips.go b/core/vm/eips.go index 99b25c5252..c229dd25aa 100644 --- a/core/vm/eips.go +++ b/core/vm/eips.go @@ -256,6 +256,23 @@ func opMcopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]by return nil, nil } +// opBlobBaseFee implements BLOBBASEFEE opcode +func opBlobBaseFee(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { + blobBaseFee := new(uint256.Int) + scope.Stack.push(blobBaseFee) + return nil, nil +} + +// enable7516 applies EIP-7516 (BLOBBASEFEE opcode) +func enable7516(jt *JumpTable) { + jt[BLOBBASEFEE] = &operation{ + execute: opBlobBaseFee, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + } +} + // enable6780 applies EIP-6780 (deactivate SELFDESTRUCT) func enable6780(jt *JumpTable) { jt[SELFDESTRUCT] = &operation{ diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index 3797b01cac..667778e73a 100644 --- a/core/vm/jump_table.go +++ b/core/vm/jump_table.go @@ -82,6 +82,7 @@ func validate(jt JumpTable) JumpTable { func newCancunInstructionSet() JumpTable { instructionSet := newEip1559InstructionSet() + enable7516(&instructionSet) // EIP-7516 (BLOBBASEFEE opcode) enable1153(&instructionSet) // EIP-1153 "Transient Storage" enable5656(&instructionSet) // EIP-5656 (MCOPY opcode) enable6780(&instructionSet) // EIP-6780 SELFDESTRUCT only in same transaction diff --git a/core/vm/opcodes.go b/core/vm/opcodes.go index c2e7bba897..75a0e31d41 100644 --- a/core/vm/opcodes.go +++ b/core/vm/opcodes.go @@ -100,6 +100,7 @@ const ( CHAINID OpCode = 0x46 SELFBALANCE OpCode = 0x47 BASEFEE OpCode = 0x48 + BLOBBASEFEE OpCode = 0x4a ) // 0x50 range - 'storage' and execution. @@ -284,6 +285,7 @@ var opCodeToString = [256]string{ CHAINID: "CHAINID", SELFBALANCE: "SELFBALANCE", BASEFEE: "BASEFEE", + BLOBBASEFEE: "BLOBBASEFEE", // 0x50 range - 'storage' and execution. POP: "POP", @@ -458,6 +460,7 @@ var stringToOp = map[string]OpCode{ "GASLIMIT": GASLIMIT, "SELFBALANCE": SELFBALANCE, "BASEFEE": BASEFEE, + "BLOBBASEFEE": BLOBBASEFEE, "POP": POP, "MLOAD": MLOAD, "MSTORE": MSTORE,