Skip to content

Commit 142720b

Browse files
committed
hf test go advanced: implement validation for fork config
1 parent 15d6484 commit 142720b

File tree

5 files changed

+18
-16
lines changed

5 files changed

+18
-16
lines changed

src/app/hardfork_test/src/internal/config/config.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package config
22

33
import (
44
"fmt"
5+
"math"
56
"os"
67
"time"
78
)
@@ -143,6 +144,11 @@ func (c *Config) Validate() error {
143144

144145
return nil
145146
}
147+
func (c *Config) HfSlotDelta() int {
148+
149+
forkDelayDuration := time.Duration(c.ForkDelay) * time.Minute
150+
return int(math.Ceil(forkDelayDuration.Seconds() / float64(c.MainSlot)))
151+
}
146152

147153
// FormatTimestamp formats a UNIX timestamp into the format used by the shell script
148154
func FormatTimestamp(unixTs int64) string {

src/app/hardfork_test/src/internal/hardfork/config_validation.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ type LegacyPostpatchForkConfigView struct {
174174
} `json:"ledger"`
175175
}
176176

177-
func (t *HardforkTest) ValidateLegacyPostpatchForkConfig(latestNonEmptyBlock client.BlockData, forkConfigBytes []byte, forkGenesisTs, mainGenesisTs int64) error {
177+
func (t *HardforkTest) ValidateFinalForkConfig(latestNonEmptyBlock client.BlockData, forkConfigBytes []byte, forkGenesisTs, mainGenesisTs int64) error {
178178

179179
t.Logger.Info("Validating legacy postpatch fork config")
180180
// Calculate expected genesis slot

src/app/hardfork_test/src/internal/hardfork/network.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package hardfork
22

33
import (
44
"fmt"
5-
"math"
65
"math/rand"
76
"os"
87
"os/exec"
@@ -105,9 +104,7 @@ func (t *HardforkTest) RunMainNetwork(mainGenesisTs int64) (*exec.Cmd, error) {
105104

106105
switch t.Config.ForkMethod {
107106
case config.Advanced:
108-
forkDelay := time.Duration(t.Config.ForkDelay) * time.Minute
109-
hardforkGenesisDelta := int(math.Ceil(forkDelay.Seconds() / float64(t.Config.MainSlot)))
110-
args = append(args, "--hardfork-genesis-slot-delta", strconv.Itoa(hardforkGenesisDelta))
107+
args = append(args, "--hardfork-genesis-slot-delta", strconv.Itoa(t.Config.HfSlotDelta()))
111108
case config.Legacy:
112109
// Do nothing as we'll patch the slot at the end of main network
113110
}

src/app/hardfork_test/src/internal/hardfork/phases.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package hardfork
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"os"
76
"time"
@@ -153,7 +152,7 @@ func (t *HardforkTest) LegacyForkPhase(analysis *BlockAnalysisResult, forkConfig
153152
if err != nil {
154153
return nil, err
155154
}
156-
err = t.ValidateLegacyPostpatchForkConfig(analysis.LatestNonEmptyBlock, patchedConfigBytes, forkGenesisTs, mainGenesisTs)
155+
err = t.ValidateFinalForkConfig(analysis.LatestNonEmptyBlock, patchedConfigBytes, forkGenesisTs, mainGenesisTs)
157156
if err != nil {
158157
return nil, err
159158
}
@@ -163,7 +162,7 @@ func (t *HardforkTest) LegacyForkPhase(analysis *BlockAnalysisResult, forkConfig
163162
}
164163

165164
// Uses `mina advanced generate-hardfork-config CLI`
166-
func (t *HardforkTest) AdvancedForkPhase(analysis *BlockAnalysisResult) (*ForkData, error) {
165+
func (t *HardforkTest) AdvancedForkPhase(analysis *BlockAnalysisResult, mainGenesisTs int64) (*ForkData, error) {
167166

168167
cwd := ""
169168
var err error = nil
@@ -177,21 +176,21 @@ func (t *HardforkTest) AdvancedForkPhase(analysis *BlockAnalysisResult) (*ForkDa
177176
return nil, err
178177
}
179178

180-
configToPatch := fmt.Sprintf("%s/daemon.json", forkDataPath)
179+
forkConfig := fmt.Sprintf("%s/daemon.json", forkDataPath)
181180

182-
configJsonString, err := os.ReadFile(configToPatch)
181+
forkConfigBytes, err := os.ReadFile(forkConfig)
183182
if err != nil {
184183
return nil, err
185184
}
186185

187-
// TODO: validate fork config here instead of using a generic map to read it.
188-
var configRaw map[string]map[string]string
189-
json.Unmarshal(configJsonString, &configRaw)
186+
forkGenesisSlot := t.Config.SlotChainEnd + t.Config.HfSlotDelta()
187+
forkGenesisTs := mainGenesisTs + int64(forkGenesisSlot*t.Config.MainSlot)
190188

191-
forkGenesisTs, err := time.Parse(time.RFC3339Nano, configRaw["genesis"]["genesis_state_timestamp"])
189+
err = t.ValidateFinalForkConfig(analysis.LatestNonEmptyBlock, forkConfigBytes, forkGenesisTs, mainGenesisTs)
192190
if err != nil {
193191
return nil, err
194192
}
193+
195194
forkLedgersDir := fmt.Sprintf("%s/genesis", forkDataPath)
196-
return &ForkData{config: configToPatch, ledgersDir: forkLedgersDir, genesis: forkGenesisTs.Unix()}, nil
195+
return &ForkData{config: forkConfig, ledgersDir: forkLedgersDir, genesis: forkGenesisTs}, nil
197196
}

src/app/hardfork_test/src/internal/hardfork/test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ func (t *HardforkTest) Run() error {
147147
beforeShutdown = func(t *HardforkTest, analysis *BlockAnalysisResult) error {
148148
t.Logger.Info("Phase 2: Forking with `mina advanced generate-hardfork-config`...")
149149

150-
forkData, err := t.AdvancedForkPhase(analysis)
150+
forkData, err := t.AdvancedForkPhase(analysis, mainGenesisTs)
151151
if err != nil {
152152
return err
153153
}

0 commit comments

Comments
 (0)