Skip to content

Commit 6447da1

Browse files
ceyonurqdm12
andauthored
add fortuna default as nil (#1498)
Signed-off-by: Ceyhun Onur <[email protected]> Co-authored-by: Quentin McGaw <[email protected]>
1 parent 12c6990 commit 6447da1

File tree

3 files changed

+108
-55
lines changed

3 files changed

+108
-55
lines changed

RELEASES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* - IMPORTANT: `eth_getProof` calls for historical state will be rejected by default.
66
- On archive nodes (`"pruning-enabled": false`): queries for historical proofs for state older than approximately 24 hours preceding the last accepted block will be rejected by default. This can be adjusted with the new option `historical-proof-query-window` which defines the number of blocks before the last accepted block which should be accepted for state proof queries, or set to `0` to accept any block number state query (previous behavior).
77
- On `pruning` nodes: queries for proofs past the tip buffer (32 blocks) will be rejected. This is in support of moving to a path based storage scheme, which does not support historical state proofs.
8+
* Added `Fortuna` upgrade as optional and defaulting to a `nil` timestamp.
89

910
## [v0.7.2](https://github.com/ava-labs/subnet-evm/releases/tag/v0.7.2)
1011

params/network_upgrades.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ var errCannotBeNil = fmt.Errorf("timestamp cannot be nil")
1515

1616
// NetworkUpgrades contains timestamps that enable network upgrades.
1717
// Avalanche specific network upgrades are also included here.
18+
// (nil = no fork, 0 = already activated)
1819
type NetworkUpgrades struct {
1920
// SubnetEVMTimestamp is a placeholder that activates Avalanche Upgrades prior to ApricotPhase6
2021
SubnetEVMTimestamp *uint64 `json:"subnetEVMTimestamp,omitempty"`
@@ -24,8 +25,7 @@ type NetworkUpgrades struct {
2425
DurangoTimestamp *uint64 `json:"durangoTimestamp,omitempty"`
2526
// Placeholder for EtnaTimestamp
2627
EtnaTimestamp *uint64 `json:"etnaTimestamp,omitempty"`
27-
// Fortuna is a placeholder for the next upgrade.
28-
// (nil = no fork, 0 = already activated)
28+
// Fortuna has no effect on Subnet-EVM by itself, but is included for completeness.
2929
FortunaTimestamp *uint64 `json:"fortunaTimestamp,omitempty"`
3030
}
3131

@@ -55,7 +55,7 @@ func (n *NetworkUpgrades) forkOrder() []fork {
5555
{name: "subnetEVMTimestamp", timestamp: n.SubnetEVMTimestamp},
5656
{name: "durangoTimestamp", timestamp: n.DurangoTimestamp},
5757
{name: "etnaTimestamp", timestamp: n.EtnaTimestamp},
58-
{name: "fortunaTimestamp", timestamp: n.FortunaTimestamp},
58+
{name: "fortunaTimestamp", timestamp: n.FortunaTimestamp, optional: true},
5959
}
6060
}
6161

@@ -77,6 +77,9 @@ func (n *NetworkUpgrades) setDefaults(agoUpgrades upgrade.Config) {
7777
if n.EtnaTimestamp == nil || *n.EtnaTimestamp == 0 {
7878
n.EtnaTimestamp = defaults.EtnaTimestamp
7979
}
80+
if n.FortunaTimestamp == nil || *n.FortunaTimestamp == 0 {
81+
n.FortunaTimestamp = defaults.FortunaTimestamp
82+
}
8083
}
8184

8285
// verifyNetworkUpgrades checks that the network upgrades are well formed.
@@ -91,6 +94,9 @@ func (n *NetworkUpgrades) verifyNetworkUpgrades(agoUpgrades upgrade.Config) erro
9194
if err := verifyWithDefault(n.EtnaTimestamp, defaults.EtnaTimestamp); err != nil {
9295
return fmt.Errorf("Etna fork block timestamp is invalid: %w", err)
9396
}
97+
if err := verifyWithDefault(n.FortunaTimestamp, defaults.FortunaTimestamp); err != nil {
98+
return fmt.Errorf("Fortuna fork block timestamp is invalid: %w", err)
99+
}
94100
return nil
95101
}
96102

@@ -104,6 +110,9 @@ func (n *NetworkUpgrades) Override(o *NetworkUpgrades) {
104110
if o.EtnaTimestamp != nil {
105111
n.EtnaTimestamp = o.EtnaTimestamp
106112
}
113+
if o.FortunaTimestamp != nil {
114+
n.FortunaTimestamp = o.FortunaTimestamp
115+
}
107116
}
108117

109118
// IsSubnetEVM returns whether [time] represents a block
@@ -134,8 +143,8 @@ func (n *NetworkUpgrades) Description() string {
134143
var banner string
135144
banner += fmt.Sprintf(" - SubnetEVM Timestamp: @%-10v (https://github.com/ava-labs/avalanchego/releases/tag/v1.10.0)\n", ptrToString(n.SubnetEVMTimestamp))
136145
banner += fmt.Sprintf(" - Durango Timestamp: @%-10v (https://github.com/ava-labs/avalanchego/releases/tag/v1.11.0)\n", ptrToString(n.DurangoTimestamp))
137-
banner += fmt.Sprintf(" - Etna Timestamp: @%-10v (https://github.com/ava-labs/avalanchego/releases/tag/v1.12.0)\n", ptrToString(n.EtnaTimestamp))
138-
banner += fmt.Sprintf(" - Fortuna Timestamp: @%-10v (Unscheduled)\n", ptrToString(n.FortunaTimestamp))
146+
banner += fmt.Sprintf(" - Etna Timestamp: @%-10v (https://github.com/ava-labs/avalanchego/releases/tag/v1.12.0)\n", ptrToString(n.EtnaTimestamp))
147+
banner += fmt.Sprintf(" - Fortuna Timestamp: @%-10v (https://github.com/ava-labs/avalanchego/releases/tag/v1.13.0)\n", ptrToString(n.FortunaTimestamp))
139148
return banner
140149
}
141150

@@ -156,18 +165,22 @@ func (n *NetworkUpgrades) GetAvalancheRules(time uint64) AvalancheRules {
156165
}
157166

158167
// getDefaultNetworkUpgrades returns the network upgrades for the specified avalanchego upgrades.
159-
// These should not return nil values.
168+
// Nil values are used to indicate optional upgrades.
160169
func getDefaultNetworkUpgrades(agoUpgrade upgrade.Config) NetworkUpgrades {
161170
return NetworkUpgrades{
162171
SubnetEVMTimestamp: utils.NewUint64(0),
163172
DurangoTimestamp: utils.TimeToNewUint64(agoUpgrade.DurangoTime),
164173
EtnaTimestamp: utils.TimeToNewUint64(agoUpgrade.EtnaTime),
165-
FortunaTimestamp: utils.TimeToNewUint64(agoUpgrade.FortunaTime),
174+
FortunaTimestamp: nil, // Fortuna is optional and has no effect on Subnet-EVM
166175
}
167176
}
168177

169178
// verifyWithDefault checks that the provided timestamp is greater than or equal to the default timestamp.
170179
func verifyWithDefault(configTimestamp *uint64, defaultTimestamp *uint64) error {
180+
if defaultTimestamp == nil {
181+
return nil
182+
}
183+
171184
if configTimestamp == nil {
172185
return errCannotBeNil
173186
}

params/network_upgrades_test.go

Lines changed: 87 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,10 @@ func TestCheckNetworkUpgradesCompatible(t *testing.T) {
7979
upgrades1 *NetworkUpgrades
8080
upgrades2 *NetworkUpgrades
8181
time uint64
82-
expected bool
82+
valid bool
8383
}{
8484
{
85-
name: "Compatible same NetworkUpgrades",
85+
name: "Compatible_same_NetworkUpgrades",
8686
upgrades1: &NetworkUpgrades{
8787
SubnetEVMTimestamp: utils.NewUint64(1),
8888
DurangoTimestamp: utils.NewUint64(2),
@@ -91,11 +91,11 @@ func TestCheckNetworkUpgradesCompatible(t *testing.T) {
9191
SubnetEVMTimestamp: utils.NewUint64(1),
9292
DurangoTimestamp: utils.NewUint64(2),
9393
},
94-
time: 1,
95-
expected: true,
94+
time: 1,
95+
valid: true,
9696
},
9797
{
98-
name: "Compatible different NetworkUpgrades",
98+
name: "Compatible_different_NetworkUpgrades",
9999
upgrades1: &NetworkUpgrades{
100100
SubnetEVMTimestamp: utils.NewUint64(1),
101101
DurangoTimestamp: utils.NewUint64(2),
@@ -104,11 +104,11 @@ func TestCheckNetworkUpgradesCompatible(t *testing.T) {
104104
SubnetEVMTimestamp: utils.NewUint64(1),
105105
DurangoTimestamp: utils.NewUint64(3),
106106
},
107-
time: 1,
108-
expected: true,
107+
time: 1,
108+
valid: true,
109109
},
110110
{
111-
name: "Compatible nil NetworkUpgrades",
111+
name: "Compatible_nil_NetworkUpgrades",
112112
upgrades1: &NetworkUpgrades{
113113
SubnetEVMTimestamp: utils.NewUint64(1),
114114
DurangoTimestamp: utils.NewUint64(2),
@@ -117,11 +117,11 @@ func TestCheckNetworkUpgradesCompatible(t *testing.T) {
117117
SubnetEVMTimestamp: utils.NewUint64(1),
118118
DurangoTimestamp: nil,
119119
},
120-
time: 1,
121-
expected: true,
120+
time: 1,
121+
valid: true,
122122
},
123123
{
124-
name: "Incompatible rewinded NetworkUpgrades",
124+
name: "Incompatible_rewinded_NetworkUpgrades",
125125
upgrades1: &NetworkUpgrades{
126126
SubnetEVMTimestamp: utils.NewUint64(1),
127127
DurangoTimestamp: utils.NewUint64(2),
@@ -130,11 +130,11 @@ func TestCheckNetworkUpgradesCompatible(t *testing.T) {
130130
SubnetEVMTimestamp: utils.NewUint64(1),
131131
DurangoTimestamp: utils.NewUint64(1),
132132
},
133-
time: 1,
134-
expected: false,
133+
time: 1,
134+
valid: false,
135135
},
136136
{
137-
name: "Incompatible fastforward NetworkUpgrades",
137+
name: "Incompatible_fastforward_NetworkUpgrades",
138138
upgrades1: &NetworkUpgrades{
139139
SubnetEVMTimestamp: utils.NewUint64(1),
140140
DurangoTimestamp: utils.NewUint64(2),
@@ -143,11 +143,11 @@ func TestCheckNetworkUpgradesCompatible(t *testing.T) {
143143
SubnetEVMTimestamp: utils.NewUint64(1),
144144
DurangoTimestamp: utils.NewUint64(3),
145145
},
146-
time: 4,
147-
expected: false,
146+
time: 4,
147+
valid: false,
148148
},
149149
{
150-
name: "Incompatible nil NetworkUpgrades",
150+
name: "Incompatible_nil_NetworkUpgrades",
151151
upgrades1: &NetworkUpgrades{
152152
SubnetEVMTimestamp: utils.NewUint64(1),
153153
DurangoTimestamp: utils.NewUint64(2),
@@ -156,14 +156,42 @@ func TestCheckNetworkUpgradesCompatible(t *testing.T) {
156156
SubnetEVMTimestamp: utils.NewUint64(1),
157157
DurangoTimestamp: nil,
158158
},
159-
time: 2,
160-
expected: false,
159+
time: 2,
160+
valid: false,
161+
},
162+
{
163+
name: "Incompatible_fastforward_nil_NetworkUpgrades",
164+
upgrades1: func() *NetworkUpgrades {
165+
upgrades := getDefaultNetworkUpgrades(upgrade.Fuji)
166+
return &upgrades
167+
}(),
168+
upgrades2: func() *NetworkUpgrades {
169+
upgrades := getDefaultNetworkUpgrades(upgrade.Fuji)
170+
upgrades.EtnaTimestamp = nil
171+
return &upgrades
172+
}(),
173+
time: uint64(upgrade.Fuji.EtnaTime.Unix()),
174+
valid: false,
175+
},
176+
{
177+
name: "Compatible_Fortuna_fastforward_nil_NetworkUpgrades",
178+
upgrades1: func() *NetworkUpgrades {
179+
upgrades := getDefaultNetworkUpgrades(upgrade.Fuji)
180+
return &upgrades
181+
}(),
182+
upgrades2: func() *NetworkUpgrades {
183+
upgrades := getDefaultNetworkUpgrades(upgrade.Fuji)
184+
upgrades.FortunaTimestamp = nil
185+
return &upgrades
186+
}(),
187+
time: uint64(upgrade.Fuji.FortunaTime.Unix()),
188+
valid: true,
161189
},
162190
}
163191
for _, test := range testcases {
164192
t.Run(test.name, func(t *testing.T) {
165193
err := test.upgrades1.CheckNetworkUpgradesCompatible(test.upgrades2, test.time)
166-
if test.expected {
194+
if test.valid {
167195
require.Nil(t, err)
168196
} else {
169197
require.NotNil(t, err)
@@ -177,88 +205,99 @@ func TestVerifyNetworkUpgrades(t *testing.T) {
177205
name string
178206
upgrades *NetworkUpgrades
179207
avagoUpgrades upgrade.Config
180-
expected bool
208+
valid bool
181209
}{
182210
{
183-
name: "ValidNetworkUpgrades for latest network",
211+
name: "ValidNetworkUpgrades_for_latest_network",
184212
upgrades: &NetworkUpgrades{
185213
SubnetEVMTimestamp: utils.NewUint64(0),
186214
DurangoTimestamp: utils.NewUint64(1607144400),
187215
EtnaTimestamp: utils.NewUint64(1607144400),
188216
},
189217
avagoUpgrades: upgradetest.GetConfig(upgradetest.Latest),
190-
expected: true,
218+
valid: true,
191219
},
192220
{
193-
name: "Invalid Durango nil upgrade",
221+
name: "Invalid_Durango_nil_upgrade",
194222
upgrades: &NetworkUpgrades{
195223
SubnetEVMTimestamp: utils.NewUint64(1),
196224
DurangoTimestamp: nil,
197225
},
198-
avagoUpgrades: upgrade.GetConfig(constants.MainnetID),
199-
expected: false,
226+
avagoUpgrades: upgrade.Mainnet,
227+
valid: false,
200228
},
201229
{
202-
name: "Invalid Subnet-EVM non-zero",
230+
name: "Invalid_Subnet-EVM_non-zero",
203231
upgrades: &NetworkUpgrades{
204232
SubnetEVMTimestamp: utils.NewUint64(1),
205233
DurangoTimestamp: utils.NewUint64(2),
206234
},
207-
avagoUpgrades: upgrade.GetConfig(constants.MainnetID),
208-
expected: false,
235+
avagoUpgrades: upgrade.Mainnet,
236+
valid: false,
209237
},
210238
{
211-
name: "Invalid Durango before default upgrade",
239+
name: "Invalid_Durango_before_default_upgrade",
212240
upgrades: &NetworkUpgrades{
213241
SubnetEVMTimestamp: utils.NewUint64(0),
214242
DurangoTimestamp: utils.NewUint64(1),
215243
},
216-
avagoUpgrades: upgrade.GetConfig(constants.MainnetID),
217-
expected: false,
244+
avagoUpgrades: upgrade.Mainnet,
245+
valid: false,
218246
},
219247
{
220-
name: "Invalid Mainnet Durango reconfigured to Fuji",
248+
name: "Invalid_Mainnet_Durango_reconfigured_to_Fuji",
221249
upgrades: &NetworkUpgrades{
222250
SubnetEVMTimestamp: utils.NewUint64(0),
223251
DurangoTimestamp: utils.TimeToNewUint64(upgrade.GetConfig(constants.FujiID).DurangoTime),
224252
},
225-
avagoUpgrades: upgrade.GetConfig(constants.MainnetID),
226-
expected: false,
253+
avagoUpgrades: upgrade.Mainnet,
254+
valid: false,
227255
},
228256
{
229-
name: "Valid Fuji Durango reconfigured to Mainnet",
257+
name: "Valid_Fuji_Durango_reconfigured_to_Mainnet",
230258
upgrades: &NetworkUpgrades{
231259
SubnetEVMTimestamp: utils.NewUint64(0),
232260
DurangoTimestamp: utils.TimeToNewUint64(upgrade.GetConfig(constants.MainnetID).DurangoTime),
233261
},
234-
avagoUpgrades: upgrade.GetConfig(constants.FujiID),
235-
expected: false,
262+
avagoUpgrades: upgrade.Fuji,
263+
valid: false,
236264
},
237265
{
238-
name: "Invalid Etna nil",
266+
name: "Invalid_Etna_nil",
239267
upgrades: &NetworkUpgrades{
240268
SubnetEVMTimestamp: utils.NewUint64(0),
241-
DurangoTimestamp: utils.NewUint64(2),
269+
DurangoTimestamp: utils.TimeToNewUint64(upgrade.Mainnet.DurangoTime),
242270
EtnaTimestamp: nil,
243271
},
244-
avagoUpgrades: upgrade.GetConfig(constants.MainnetID),
245-
expected: false,
272+
avagoUpgrades: upgrade.Mainnet,
273+
valid: false,
246274
},
247275
{
248-
name: "Invalid Etna before Durango",
276+
name: "Invalid_Etna_before_Durango",
249277
upgrades: &NetworkUpgrades{
250278
SubnetEVMTimestamp: utils.NewUint64(0),
251-
DurangoTimestamp: utils.NewUint64(2),
252-
EtnaTimestamp: utils.NewUint64(1),
279+
DurangoTimestamp: utils.TimeToNewUint64(upgrade.Mainnet.DurangoTime),
280+
EtnaTimestamp: utils.TimeToNewUint64(upgrade.Mainnet.DurangoTime.Add(-1)),
281+
},
282+
avagoUpgrades: upgrade.Mainnet,
283+
valid: false,
284+
},
285+
{
286+
name: "Valid_Fortuna_nil",
287+
upgrades: &NetworkUpgrades{
288+
SubnetEVMTimestamp: utils.NewUint64(0),
289+
DurangoTimestamp: utils.TimeToNewUint64(upgrade.Fuji.DurangoTime),
290+
EtnaTimestamp: utils.TimeToNewUint64(upgrade.Fuji.EtnaTime),
291+
FortunaTimestamp: nil,
253292
},
254-
avagoUpgrades: upgrade.GetConfig(constants.MainnetID),
255-
expected: false,
293+
avagoUpgrades: upgrade.Fuji,
294+
valid: true,
256295
},
257296
}
258297
for _, test := range testcases {
259298
t.Run(test.name, func(t *testing.T) {
260299
err := test.upgrades.verifyNetworkUpgrades(test.avagoUpgrades)
261-
if test.expected {
300+
if test.valid {
262301
require.Nil(t, err)
263302
} else {
264303
require.NotNil(t, err)

0 commit comments

Comments
 (0)