Skip to content

Commit 5a1af29

Browse files
committed
Rewrote configs
I misunderstood how the OptionalNetworkUpgrades configuration was supposed to be read. The list of upgrades are stored in the code, just the timestamp is being read from the config (they can be nullable). They are identical to mandatory upgrades, in terms of configurations.
1 parent 665d206 commit 5a1af29

File tree

4 files changed

+49
-19
lines changed

4 files changed

+49
-19
lines changed

params/config.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -444,17 +444,17 @@ func (c *ChainConfig) Verify() error {
444444
return nil
445445
}
446446

447-
type Fork struct {
448-
name string `serialize:"true"`
449-
block *big.Int `serialize:"true"` // some go-ethereum forks use block numbers
450-
timestamp *uint64 `serialize:"true"` // Avalanche forks use timestamps
451-
optional bool `serialize:"true"` // if true, the fork may be nil and next fork is still allowed
447+
type fork struct {
448+
name string
449+
block *big.Int // some go-ethereum forks use block numbers
450+
timestamp *uint64 // Avalanche forks use timestamps
451+
optional bool // if true, the fork may be nil and next fork is still allowed
452452
}
453453

454454
// CheckConfigForkOrder checks that we don't "skip" any forks, geth isn't pluggable enough
455455
// to guarantee that forks can be implemented in a different order than on official networks
456456
func (c *ChainConfig) CheckConfigForkOrder() error {
457-
ethForks := []Fork{
457+
ethForks := []fork{
458458
{name: "homesteadBlock", block: c.HomesteadBlock},
459459
{name: "eip150Block", block: c.EIP150Block},
460460
{name: "eip155Block", block: c.EIP155Block},
@@ -493,8 +493,8 @@ func (c *ChainConfig) CheckConfigForkOrder() error {
493493

494494
// checkForks checks that forks are enabled in order and returns an error if not
495495
// [blockFork] is true if the fork is a block number fork, false if it is a timestamp fork
496-
func checkForks(forks []Fork, blockFork bool) error {
497-
lastFork := Fork{}
496+
func checkForks(forks []fork, blockFork bool) error {
497+
lastFork := fork{}
498498
for _, cur := range forks {
499499
if blockFork && cur.block != nil && common.Big0.Cmp(cur.block) != 0 {
500500
return errNonGenesisForkByHeight

params/network_upgrades.go

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
package params
55

66
import (
7+
"math/big"
8+
79
"github.com/ava-labs/subnet-evm/utils"
810
)
911

@@ -50,21 +52,44 @@ func (m *MandatoryNetworkUpgrades) CheckMandatoryCompatible(newcfg *MandatoryNet
5052
return nil
5153
}
5254

53-
func (m *MandatoryNetworkUpgrades) mandatoryForkOrder() []Fork {
54-
return []Fork{
55+
func (m *MandatoryNetworkUpgrades) mandatoryForkOrder() []fork {
56+
return []fork{
5557
{name: "subnetEVMTimestamp", timestamp: m.SubnetEVMTimestamp},
5658
{name: "dUpgradeTimestamp", timestamp: m.DUpgradeTimestamp},
5759
}
5860
}
5961

62+
type OptionalFork struct {
63+
name string `serialize:"true"`
64+
block big.Int `serialize:"true"`
65+
timestamp uint64 `serialize:"true"`
66+
}
67+
6068
type OptionalNetworkUpgrades struct {
61-
Updates []Fork `json:"serialize,omitempty" serialize:"true"`
69+
Forks []OptionalFork `serialize:"true"`
6270
}
6371

6472
func (n *OptionalNetworkUpgrades) CheckOptionalCompatible(newcfg *OptionalNetworkUpgrades, time uint64) *ConfigCompatError {
6573
return nil
6674
}
6775

68-
func (n *OptionalNetworkUpgrades) optionalForkOrder() []Fork {
69-
return n.Updates
76+
func (n *OptionalNetworkUpgrades) optionalForkOrder() []fork {
77+
forks := make([]fork, len(n.Forks))
78+
for i, n := range n.Forks {
79+
var block *big.Int
80+
var timestamp *uint64
81+
if n.block.BitLen() > 0 {
82+
block = &n.block
83+
}
84+
if n.timestamp != 0 {
85+
timestamp = &n.timestamp
86+
}
87+
forks[i] = fork{
88+
name: n.name,
89+
block: block,
90+
timestamp: timestamp,
91+
optional: true,
92+
}
93+
}
94+
return []fork{}
7095
}

plugin/evm/message/handshake/upgrade_config.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type rawPrecompileUpgrade struct {
1515
}
1616

1717
type networkUpgradeConfigMessage struct {
18-
OptionalNetworkUpgrades []params.Fork `serialize:"true"`
18+
OptionalNetworkUpgrades params.OptionalNetworkUpgrades `serialize:"true"`
1919

2020
// Config for modifying state as a network upgrade.
2121
StateUpgrades []params.StateUpgrade `serialize:"true"`
@@ -64,7 +64,7 @@ func ParseUpgradeConfigMessage(bytes []byte) (*params.UpgradeConfig, error) {
6464
}
6565

6666
return &params.UpgradeConfig{
67-
OptionalNetworkUpgrades: &params.OptionalNetworkUpgrades{Updates: config.OptionalNetworkUpgrades},
67+
OptionalNetworkUpgrades: &config.OptionalNetworkUpgrades,
6868
StateUpgrades: config.StateUpgrades,
6969
PrecompileUpgrades: PrecompileUpgrades,
7070
}, nil
@@ -92,16 +92,17 @@ func UpgradeConfigToNetworkMessage(config *params.UpgradeConfig) (*UpgradeConfig
9292
})
9393
}
9494

95-
optionalNetworkUpgrades := make([]params.Fork, 0)
96-
if config.OptionalNetworkUpgrades != nil {
97-
optionalNetworkUpgrades = config.OptionalNetworkUpgrades.Updates
95+
optionalNetworkUpgrades := config.OptionalNetworkUpgrades
96+
if optionalNetworkUpgrades == nil {
97+
optionalNetworkUpgrades = &params.OptionalNetworkUpgrades{}
9898
}
9999

100100
wrappedConfig := networkUpgradeConfigMessage{
101-
OptionalNetworkUpgrades: optionalNetworkUpgrades,
101+
OptionalNetworkUpgrades: *optionalNetworkUpgrades,
102102
StateUpgrades: config.StateUpgrades,
103103
PrecompileUpgrades: PrecompileUpgrades,
104104
}
105+
105106
bytes, err := Codec.Marshal(Version, wrappedConfig)
106107
if err != nil {
107108
return nil, err

plugin/evm/message/handshake/upgrade_config_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ func TestSerialize(t *testing.T) {
3535
config3, err := ParseUpgradeConfigMessage(message2.Bytes)
3636
require.NoError(t, err)
3737

38+
message3, err := UpgradeConfigToNetworkMessage(config3)
39+
require.NoError(t, err)
40+
3841
require.Equal(t, config, config3)
3942
require.Equal(t, message.Hash, message2.Hash)
43+
require.Equal(t, message2.Hash, message3.Hash)
4044
}

0 commit comments

Comments
 (0)