diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6d24f2195..0d8761f7a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,12 +6,14 @@ on: - stable - alpha - op-erigon + - tip/canyon pull_request: branches: - main - stable - alpha - op-erigon + - tip/canyon env: CGO_ENABLED: "1" CGO_CXXFLAGS: "-g -O2 -std=c++17" diff --git a/chain/chain_config.go b/chain/chain_config.go index 239e7aee8..f4ea9deab 100644 --- a/chain/chain_config.go +++ b/chain/chain_config.go @@ -69,6 +69,7 @@ type Config struct { BedrockBlock *big.Int `json:"bedrockBlock,omitempty"` // Bedrock switch block (nil = no fork, 0 = already on optimism bedrock) RegolithTime *big.Int `json:"regolithTime,omitempty"` // Regolith switch time (nil = no fork, 0 = already on optimism regolith) + CanyonTime *big.Int `json:"canyonTime,omitempty"` // Canyon switch time (nil = no fork, 0 = already on optimism canyon) Eip1559FeeCollector *common.Address `json:"eip1559FeeCollector,omitempty"` // (Optional) Address where burnt EIP-1559 fees go to Eip1559FeeCollectorTransition *big.Int `json:"eip1559FeeCollectorTransition,omitempty"` // (Optional) Block from which burnt EIP-1559 fees go to the Eip1559FeeCollector @@ -85,8 +86,9 @@ type Config struct { // OptimismConfig is the optimism config. type OptimismConfig struct { - EIP1559Elasticity uint64 `json:"eip1559Elasticity"` - EIP1559Denominator uint64 `json:"eip1559Denominator"` + EIP1559Elasticity uint64 `json:"eip1559Elasticity"` + EIP1559Denominator uint64 `json:"eip1559Denominator"` + EIP1559DenominatorCanyon uint64 `json:"eip1559DenominatorCanyon"` } // String implements the stringer interface, returning the optimism fee config details. @@ -231,6 +233,10 @@ func (c *Config) IsRegolith(time uint64) bool { return isForked(c.RegolithTime, time) } +func (c *Config) IsCanyon(time uint64) bool { + return isForked(c.CanyonTime, time) +} + // IsOptimism returns whether the node is an optimism node or not. func (c *Config) IsOptimism() bool { return c.Optimism != nil @@ -245,14 +251,21 @@ func (c *Config) IsOptimismRegolith(time uint64) bool { return c.IsOptimism() && c.IsRegolith(time) } +func (c *Config) IsOptimismCanyon(time uint64) bool { + return c.IsOptimism() && c.IsCanyon(time) +} + // IsOptimismPreBedrock returns true iff this is an optimism node & bedrock is not yet active func (c *Config) IsOptimismPreBedrock(num uint64) bool { return c.IsOptimism() && !c.IsBedrock(num) } // BaseFeeChangeDenominator bounds the amount the base fee can change between blocks. -func (c *Config) BaseFeeChangeDenominator(defaultParam int) uint64 { +func (c *Config) BaseFeeChangeDenominator(defaultParam, time uint64) uint64 { if c.IsOptimism() { + if c.IsCanyon(time) { + return c.Optimism.EIP1559DenominatorCanyon + } return c.Optimism.EIP1559Denominator } return uint64(defaultParam) @@ -572,6 +585,7 @@ type Rules struct { IsBerlin, IsLondon, IsShanghai, IsCancun, IsPrague bool IsEip1559FeeCollector, IsAura bool IsOptimismBedrock, IsOptimismRegolith bool + IsOptimismCanyon bool } // Rules ensures c's ChainID is not nil and returns a new Rules instance @@ -599,6 +613,7 @@ func (c *Config) Rules(num uint64, time uint64) *Rules { IsAura: c.Aura != nil, IsOptimismBedrock: c.IsOptimismBedrock(num), IsOptimismRegolith: c.IsOptimismRegolith(time), + IsOptimismCanyon: c.IsOptimismCanyon(time), } } diff --git a/txpool/txpoolcfg/txpoolcfg.go b/txpool/txpoolcfg/txpoolcfg.go index cac39da24..1570e5663 100644 --- a/txpool/txpoolcfg/txpoolcfg.go +++ b/txpool/txpoolcfg/txpoolcfg.go @@ -12,19 +12,20 @@ import ( ) type Config struct { - DBDir string - TracedSenders []string // List of senders for which tx pool should print out debugging info - SyncToNewPeersEvery time.Duration - ProcessRemoteTxsEvery time.Duration - CommitEvery time.Duration - LogEvery time.Duration - PendingSubPoolLimit int - BaseFeeSubPoolLimit int - QueuedSubPoolLimit int - MinFeeCap uint64 - AccountSlots uint64 // Number of executable transaction slots guaranteed per account - PriceBump uint64 // Price bump percentage to replace an already existing transaction - OverrideShanghaiTime *big.Int + DBDir string + TracedSenders []string // List of senders for which tx pool should print out debugging info + SyncToNewPeersEvery time.Duration + ProcessRemoteTxsEvery time.Duration + CommitEvery time.Duration + LogEvery time.Duration + PendingSubPoolLimit int + BaseFeeSubPoolLimit int + QueuedSubPoolLimit int + MinFeeCap uint64 + AccountSlots uint64 // Number of executable transaction slots guaranteed per account + PriceBump uint64 // Price bump percentage to replace an already existing transaction + OverrideShanghaiTime *big.Int + OverrideOptimismCanyonTime *big.Int Optimism bool NoTxGossip bool