core/vm: define cancun + enable 1153 (tstore/tload) in cancun (#27663)

This commit is contained in:
Martin Holst Swende 2023-07-10 14:40:31 -04:00 committed by GitHub
parent c2db667c8f
commit af8b138c1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 3 deletions

View File

@ -83,6 +83,7 @@ func validate(jt JumpTable) JumpTable {
func newCancunInstructionSet() JumpTable { func newCancunInstructionSet() JumpTable {
instructionSet := newShanghaiInstructionSet() instructionSet := newShanghaiInstructionSet()
enable4844(&instructionSet) // BLOBHASH opcode enable4844(&instructionSet) // BLOBHASH opcode
enable1153(&instructionSet) // EIP-1153 "Transient Storage"
return validate(instructionSet) return validate(instructionSet)
} }

View File

@ -27,11 +27,11 @@ import (
func LookupInstructionSet(rules params.Rules) (JumpTable, error) { func LookupInstructionSet(rules params.Rules) (JumpTable, error) {
switch { switch {
case rules.IsVerkle: case rules.IsVerkle:
return newShanghaiInstructionSet(), errors.New("verkle-fork not defined yet") return newCancunInstructionSet(), errors.New("verkle-fork not defined yet")
case rules.IsPrague: case rules.IsPrague:
return newShanghaiInstructionSet(), errors.New("prague-fork not defined yet") return newCancunInstructionSet(), errors.New("prague-fork not defined yet")
case rules.IsCancun: case rules.IsCancun:
return newShanghaiInstructionSet(), errors.New("cancun-fork not defined yet") return newCancunInstructionSet(), nil
case rules.IsShanghai: case rules.IsShanghai:
return newShanghaiInstructionSet(), nil return newShanghaiInstructionSet(), nil
case rules.IsMerge: case rules.IsMerge:

View File

@ -299,6 +299,25 @@ var Forks = map[string]*params.ChainConfig{
TerminalTotalDifficulty: big.NewInt(0), TerminalTotalDifficulty: big.NewInt(0),
ShanghaiTime: u64(15_000), ShanghaiTime: u64(15_000),
}, },
"Cancun": {
ChainID: big.NewInt(1),
HomesteadBlock: big.NewInt(0),
EIP150Block: big.NewInt(0),
EIP155Block: big.NewInt(0),
EIP158Block: big.NewInt(0),
ByzantiumBlock: big.NewInt(0),
ConstantinopleBlock: big.NewInt(0),
PetersburgBlock: big.NewInt(0),
IstanbulBlock: big.NewInt(0),
MuirGlacierBlock: big.NewInt(0),
BerlinBlock: big.NewInt(0),
LondonBlock: big.NewInt(0),
ArrowGlacierBlock: big.NewInt(0),
MergeNetsplitBlock: big.NewInt(0),
TerminalTotalDifficulty: big.NewInt(0),
ShanghaiTime: u64(0),
CancunTime: u64(0),
},
} }
// AvailableForks returns the set of defined fork names // AvailableForks returns the set of defined fork names