mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-12 23:13:45 +00:00
* Add Upgrade #4 fork configuration * bump version * chore: auto version bump [bot] * trigger ci --------- Co-authored-by: Péter Garamvölgyi <peter@scroll.io> Co-authored-by: Thegaram <Thegaram@users.noreply.github.com>
This commit is contained in:
parent
ecca1069d3
commit
005db0370e
6 changed files with 35 additions and 7 deletions
|
|
@ -58,6 +58,7 @@ func TestStateProcessorErrors(t *testing.T) {
|
||||||
ShanghaiBlock: big.NewInt(0),
|
ShanghaiBlock: big.NewInt(0),
|
||||||
BernoulliBlock: big.NewInt(0),
|
BernoulliBlock: big.NewInt(0),
|
||||||
CurieBlock: big.NewInt(0),
|
CurieBlock: big.NewInt(0),
|
||||||
|
DescartesBlock: big.NewInt(0),
|
||||||
Ethash: new(params.EthashConfig),
|
Ethash: new(params.EthashConfig),
|
||||||
}
|
}
|
||||||
signer = types.LatestSigner(config)
|
signer = types.LatestSigner(config)
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,8 @@ func NewEVMInterpreter(evm *EVM, cfg Config) *EVMInterpreter {
|
||||||
if cfg.JumpTable[STOP] == nil {
|
if cfg.JumpTable[STOP] == nil {
|
||||||
var jt JumpTable
|
var jt JumpTable
|
||||||
switch {
|
switch {
|
||||||
|
case evm.chainRules.IsDescartes:
|
||||||
|
jt = descartesInstructionSet
|
||||||
case evm.chainRules.IsCurie:
|
case evm.chainRules.IsCurie:
|
||||||
jt = curieInstructionSet
|
jt = curieInstructionSet
|
||||||
case evm.chainRules.IsShanghai:
|
case evm.chainRules.IsShanghai:
|
||||||
|
|
|
||||||
|
|
@ -60,11 +60,20 @@ var (
|
||||||
londonInstructionSet = newLondonInstructionSet()
|
londonInstructionSet = newLondonInstructionSet()
|
||||||
shanghaiInstructionSet = newShanghaiInstructionSet()
|
shanghaiInstructionSet = newShanghaiInstructionSet()
|
||||||
curieInstructionSet = newCurieInstructionSet()
|
curieInstructionSet = newCurieInstructionSet()
|
||||||
|
descartesInstructionSet = newDescartesInstructionSet()
|
||||||
)
|
)
|
||||||
|
|
||||||
// JumpTable contains the EVM opcodes supported at a given fork.
|
// JumpTable contains the EVM opcodes supported at a given fork.
|
||||||
type JumpTable [256]*operation
|
type JumpTable [256]*operation
|
||||||
|
|
||||||
|
// newDescartesInstructionSet returns the frontier, homestead, byzantium,
|
||||||
|
// contantinople, istanbul, petersburg, berlin, london, shanghai, curie, and descartes instructions.
|
||||||
|
func newDescartesInstructionSet() JumpTable {
|
||||||
|
instructionSet := newCurieInstructionSet()
|
||||||
|
|
||||||
|
return instructionSet
|
||||||
|
}
|
||||||
|
|
||||||
// newCurieInstructionSet returns the frontier, homestead, byzantium,
|
// newCurieInstructionSet returns the frontier, homestead, byzantium,
|
||||||
// contantinople, istanbul, petersburg, berlin, london, shanghai, and curie instructions.
|
// contantinople, istanbul, petersburg, berlin, london, shanghai, and curie instructions.
|
||||||
func newCurieInstructionSet() JumpTable {
|
func newCurieInstructionSet() JumpTable {
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ func setDefaults(cfg *Config) {
|
||||||
ShanghaiBlock: new(big.Int),
|
ShanghaiBlock: new(big.Int),
|
||||||
BernoulliBlock: new(big.Int),
|
BernoulliBlock: new(big.Int),
|
||||||
CurieBlock: new(big.Int),
|
CurieBlock: new(big.Int),
|
||||||
|
DescartesBlock: new(big.Int),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -281,6 +281,7 @@ var (
|
||||||
ShanghaiBlock: nil,
|
ShanghaiBlock: nil,
|
||||||
BernoulliBlock: nil,
|
BernoulliBlock: nil,
|
||||||
CurieBlock: nil,
|
CurieBlock: nil,
|
||||||
|
DescartesBlock: nil,
|
||||||
Clique: &CliqueConfig{
|
Clique: &CliqueConfig{
|
||||||
Period: 3,
|
Period: 3,
|
||||||
Epoch: 30000,
|
Epoch: 30000,
|
||||||
|
|
@ -319,6 +320,7 @@ var (
|
||||||
ShanghaiBlock: big.NewInt(0),
|
ShanghaiBlock: big.NewInt(0),
|
||||||
BernoulliBlock: big.NewInt(3747132),
|
BernoulliBlock: big.NewInt(3747132),
|
||||||
CurieBlock: nil,
|
CurieBlock: nil,
|
||||||
|
DescartesBlock: nil,
|
||||||
Clique: &CliqueConfig{
|
Clique: &CliqueConfig{
|
||||||
Period: 3,
|
Period: 3,
|
||||||
Epoch: 30000,
|
Epoch: 30000,
|
||||||
|
|
@ -357,6 +359,7 @@ var (
|
||||||
ShanghaiBlock: big.NewInt(0),
|
ShanghaiBlock: big.NewInt(0),
|
||||||
BernoulliBlock: big.NewInt(5220340),
|
BernoulliBlock: big.NewInt(5220340),
|
||||||
CurieBlock: nil,
|
CurieBlock: nil,
|
||||||
|
DescartesBlock: nil,
|
||||||
Clique: &CliqueConfig{
|
Clique: &CliqueConfig{
|
||||||
Period: 3,
|
Period: 3,
|
||||||
Epoch: 30000,
|
Epoch: 30000,
|
||||||
|
|
@ -380,7 +383,7 @@ var (
|
||||||
//
|
//
|
||||||
// This configuration is intentionally not using keyed fields to force anyone
|
// This configuration is intentionally not using keyed fields to force anyone
|
||||||
// adding flags to the config to also have to set these fields.
|
// adding flags to the config to also have to set these fields.
|
||||||
AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil,
|
AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil,
|
||||||
ScrollConfig{
|
ScrollConfig{
|
||||||
UseZktrie: false,
|
UseZktrie: false,
|
||||||
FeeVaultAddress: nil,
|
FeeVaultAddress: nil,
|
||||||
|
|
@ -394,7 +397,7 @@ var (
|
||||||
//
|
//
|
||||||
// This configuration is intentionally not using keyed fields to force anyone
|
// This configuration is intentionally not using keyed fields to force anyone
|
||||||
// adding flags to the config to also have to set these fields.
|
// adding flags to the config to also have to set these fields.
|
||||||
AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, &CliqueConfig{Period: 0, Epoch: 30000},
|
AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, &CliqueConfig{Period: 0, Epoch: 30000},
|
||||||
ScrollConfig{
|
ScrollConfig{
|
||||||
UseZktrie: false,
|
UseZktrie: false,
|
||||||
FeeVaultAddress: nil,
|
FeeVaultAddress: nil,
|
||||||
|
|
@ -403,7 +406,7 @@ var (
|
||||||
L1Config: &L1Config{5, common.HexToAddress("0x0000000000000000000000000000000000000000"), 0, common.HexToAddress("0x0000000000000000000000000000000000000000")},
|
L1Config: &L1Config{5, common.HexToAddress("0x0000000000000000000000000000000000000000"), 0, common.HexToAddress("0x0000000000000000000000000000000000000000")},
|
||||||
}}
|
}}
|
||||||
|
|
||||||
TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil,
|
TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil,
|
||||||
ScrollConfig{
|
ScrollConfig{
|
||||||
UseZktrie: false,
|
UseZktrie: false,
|
||||||
FeeVaultAddress: &common.Address{123},
|
FeeVaultAddress: &common.Address{123},
|
||||||
|
|
@ -413,7 +416,7 @@ var (
|
||||||
}}
|
}}
|
||||||
TestRules = TestChainConfig.Rules(new(big.Int))
|
TestRules = TestChainConfig.Rules(new(big.Int))
|
||||||
|
|
||||||
TestNoL1DataFeeChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil,
|
TestNoL1DataFeeChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil,
|
||||||
ScrollConfig{
|
ScrollConfig{
|
||||||
UseZktrie: false,
|
UseZktrie: false,
|
||||||
FeeVaultAddress: nil,
|
FeeVaultAddress: nil,
|
||||||
|
|
@ -503,6 +506,7 @@ type ChainConfig struct {
|
||||||
ShanghaiBlock *big.Int `json:"shanghaiBlock,omitempty"` // Shanghai switch block (nil = no fork, 0 = already on shanghai)
|
ShanghaiBlock *big.Int `json:"shanghaiBlock,omitempty"` // Shanghai switch block (nil = no fork, 0 = already on shanghai)
|
||||||
BernoulliBlock *big.Int `json:"bernoulliBlock,omitempty"` // Bernoulli switch block (nil = no fork, 0 = already on bernoulli)
|
BernoulliBlock *big.Int `json:"bernoulliBlock,omitempty"` // Bernoulli switch block (nil = no fork, 0 = already on bernoulli)
|
||||||
CurieBlock *big.Int `json:"curieBlock,omitempty"` // Curie switch block (nil = no fork, 0 = already on curie)
|
CurieBlock *big.Int `json:"curieBlock,omitempty"` // Curie switch block (nil = no fork, 0 = already on curie)
|
||||||
|
DescartesBlock *big.Int `json:"descartesBlock,omitempty"` // Descartes switch block (nil = no fork, 0 = already on descartes)
|
||||||
|
|
||||||
// TerminalTotalDifficulty is the amount of total difficulty reached by
|
// TerminalTotalDifficulty is the amount of total difficulty reached by
|
||||||
// the network that triggers the consensus upgrade.
|
// the network that triggers the consensus upgrade.
|
||||||
|
|
@ -618,7 +622,7 @@ func (c *ChainConfig) String() string {
|
||||||
default:
|
default:
|
||||||
engine = "unknown"
|
engine = "unknown"
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Berlin: %v, London: %v, Arrow Glacier: %v, Archimedes: %v, Shanghai: %v, Bernoulli: %v, Curie: %v, Engine: %v, Scroll config: %v}",
|
return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Berlin: %v, London: %v, Arrow Glacier: %v, Archimedes: %v, Shanghai: %v, Bernoulli: %v, Curie: %v, Descartes: %v, Engine: %v, Scroll config: %v}",
|
||||||
c.ChainID,
|
c.ChainID,
|
||||||
c.HomesteadBlock,
|
c.HomesteadBlock,
|
||||||
c.DAOForkBlock,
|
c.DAOForkBlock,
|
||||||
|
|
@ -638,6 +642,7 @@ func (c *ChainConfig) String() string {
|
||||||
c.ShanghaiBlock,
|
c.ShanghaiBlock,
|
||||||
c.BernoulliBlock,
|
c.BernoulliBlock,
|
||||||
c.CurieBlock,
|
c.CurieBlock,
|
||||||
|
c.DescartesBlock,
|
||||||
engine,
|
engine,
|
||||||
c.Scroll,
|
c.Scroll,
|
||||||
)
|
)
|
||||||
|
|
@ -730,6 +735,11 @@ func (c *ChainConfig) IsCurie(num *big.Int) bool {
|
||||||
return isForked(c.CurieBlock, num)
|
return isForked(c.CurieBlock, num)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsDescartes returns whether num is either equal to the Descartes fork block or greater.
|
||||||
|
func (c *ChainConfig) IsDescartes(num *big.Int) bool {
|
||||||
|
return isForked(c.DescartesBlock, num)
|
||||||
|
}
|
||||||
|
|
||||||
// IsTerminalPoWBlock returns whether the given block is the last block of PoW stage.
|
// IsTerminalPoWBlock returns whether the given block is the last block of PoW stage.
|
||||||
func (c *ChainConfig) IsTerminalPoWBlock(parentTotalDiff *big.Int, totalDiff *big.Int) bool {
|
func (c *ChainConfig) IsTerminalPoWBlock(parentTotalDiff *big.Int, totalDiff *big.Int) bool {
|
||||||
if c.TerminalTotalDifficulty == nil {
|
if c.TerminalTotalDifficulty == nil {
|
||||||
|
|
@ -783,6 +793,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error {
|
||||||
{name: "shanghaiBlock", block: c.ShanghaiBlock, optional: true},
|
{name: "shanghaiBlock", block: c.ShanghaiBlock, optional: true},
|
||||||
{name: "bernoulliBlock", block: c.BernoulliBlock, optional: true},
|
{name: "bernoulliBlock", block: c.BernoulliBlock, optional: true},
|
||||||
{name: "curieBlock", block: c.CurieBlock, optional: true},
|
{name: "curieBlock", block: c.CurieBlock, optional: true},
|
||||||
|
{name: "descartesBlock", block: c.DescartesBlock, optional: true},
|
||||||
} {
|
} {
|
||||||
if lastFork.name != "" {
|
if lastFork.name != "" {
|
||||||
// Next one must be higher number
|
// Next one must be higher number
|
||||||
|
|
@ -867,6 +878,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi
|
||||||
if isForkIncompatible(c.CurieBlock, newcfg.CurieBlock, head) {
|
if isForkIncompatible(c.CurieBlock, newcfg.CurieBlock, head) {
|
||||||
return newCompatError("Curie fork block", c.CurieBlock, newcfg.CurieBlock)
|
return newCompatError("Curie fork block", c.CurieBlock, newcfg.CurieBlock)
|
||||||
}
|
}
|
||||||
|
if isForkIncompatible(c.DescartesBlock, newcfg.DescartesBlock, head) {
|
||||||
|
return newCompatError("Descartes fork block", c.DescartesBlock, newcfg.DescartesBlock)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -935,7 +949,7 @@ type Rules struct {
|
||||||
IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool
|
IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool
|
||||||
IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool
|
IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool
|
||||||
IsBerlin, IsLondon, IsArchimedes, IsShanghai bool
|
IsBerlin, IsLondon, IsArchimedes, IsShanghai bool
|
||||||
IsBernoulli, IsCurie bool
|
IsBernoulli, IsCurie, IsDescartes bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rules ensures c's ChainID is not nil.
|
// Rules ensures c's ChainID is not nil.
|
||||||
|
|
@ -960,5 +974,6 @@ func (c *ChainConfig) Rules(num *big.Int) Rules {
|
||||||
IsShanghai: c.IsShanghai(num),
|
IsShanghai: c.IsShanghai(num),
|
||||||
IsBernoulli: c.IsBernoulli(num),
|
IsBernoulli: c.IsBernoulli(num),
|
||||||
IsCurie: c.IsCurie(num),
|
IsCurie: c.IsCurie(num),
|
||||||
|
IsDescartes: c.IsDescartes(num),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ import (
|
||||||
const (
|
const (
|
||||||
VersionMajor = 5 // Major version component of the current release
|
VersionMajor = 5 // Major version component of the current release
|
||||||
VersionMinor = 3 // Minor version component of the current release
|
VersionMinor = 3 // Minor version component of the current release
|
||||||
VersionPatch = 4 // Patch version component of the current release
|
VersionPatch = 5 // Patch version component of the current release
|
||||||
VersionMeta = "mainnet" // Version metadata to append to the version string
|
VersionMeta = "mainnet" // Version metadata to append to the version string
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue