core/vm: use amsterdam jump table in lookup

This commit is contained in:
BZO95 2026-03-04 09:58:17 +08:00
parent 856e4d55d8
commit 5c6e3a7d1d
2 changed files with 35 additions and 0 deletions

View file

@ -28,6 +28,8 @@ func LookupInstructionSet(rules params.Rules) (JumpTable, error) {
switch { switch {
case rules.IsVerkle: case rules.IsVerkle:
return newCancunInstructionSet(), errors.New("verkle-fork not defined yet") return newCancunInstructionSet(), errors.New("verkle-fork not defined yet")
case rules.IsAmsterdam:
return newAmsterdamInstructionSet(), nil
case rules.IsOsaka: case rules.IsOsaka:
return newOsakaInstructionSet(), nil return newOsakaInstructionSet(), nil
case rules.IsPrague: case rules.IsPrague:

View file

@ -19,6 +19,7 @@ package vm
import ( import (
"testing" "testing"
"github.com/ethereum/go-ethereum/params"
"github.com/stretchr/testify/require" "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(100), deepCopy[SLOAD].constantGas)
require.Equal(t, uint64(0), tbl[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())
}