From 5c6e3a7d1d5f9b478bdb6c184cfeda732f0f8dce Mon Sep 17 00:00:00 2001 From: BZO95 Date: Wed, 4 Mar 2026 09:58:17 +0800 Subject: [PATCH] core/vm: use amsterdam jump table in lookup --- core/vm/jump_table_export.go | 2 ++ core/vm/jump_table_test.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/core/vm/jump_table_export.go b/core/vm/jump_table_export.go index 89a2ebf6f4..fdf814d64c 100644 --- a/core/vm/jump_table_export.go +++ b/core/vm/jump_table_export.go @@ -28,6 +28,8 @@ func LookupInstructionSet(rules params.Rules) (JumpTable, error) { switch { case rules.IsVerkle: return newCancunInstructionSet(), errors.New("verkle-fork not defined yet") + case rules.IsAmsterdam: + return newAmsterdamInstructionSet(), nil case rules.IsOsaka: return newOsakaInstructionSet(), nil case rules.IsPrague: diff --git a/core/vm/jump_table_test.go b/core/vm/jump_table_test.go index a4f9759ed2..d9ba67c787 100644 --- a/core/vm/jump_table_test.go +++ b/core/vm/jump_table_test.go @@ -19,6 +19,7 @@ package vm import ( "testing" + "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" ) @@ -33,3 +34,35 @@ func TestJumpTableCopy(t *testing.T) { require.Equal(t, uint64(100), deepCopy[SLOAD].constantGas) require.Equal(t, uint64(0), tbl[SLOAD].constantGas) } + +func TestLookupInstructionSetAmsterdam(t *testing.T) { + jt, err := LookupInstructionSet(params.Rules{ + IsMerge: true, + IsShanghai: true, + IsCancun: true, + IsPrague: true, + IsOsaka: true, + IsAmsterdam: true, + }) + require.NoError(t, err) + + require.True(t, jt[SLOTNUM].HasCost()) + require.True(t, jt[DUPN].HasCost()) + require.True(t, jt[SWAPN].HasCost()) + require.True(t, jt[EXCHANGE].HasCost()) +} + +func TestAmsterdamOpcodeActivation(t *testing.T) { + amsterdam := newAmsterdamInstructionSet() + osaka := newOsakaInstructionSet() + + require.True(t, amsterdam[SLOTNUM].HasCost()) + require.True(t, amsterdam[DUPN].HasCost()) + require.True(t, amsterdam[SWAPN].HasCost()) + require.True(t, amsterdam[EXCHANGE].HasCost()) + + require.False(t, osaka[SLOTNUM].HasCost()) + require.False(t, osaka[DUPN].HasCost()) + require.False(t, osaka[SWAPN].HasCost()) + require.False(t, osaka[EXCHANGE].HasCost()) +}