@@ -6,8 +6,14 @@ import (
6
6
"strconv"
7
7
8
8
kvexecutor "github.com/evstack/ev-node/apps/testapp/kv"
9
+ "github.com/evstack/ev-node/node"
9
10
rollcmd "github.com/evstack/ev-node/pkg/cmd"
10
11
"github.com/evstack/ev-node/pkg/store"
12
+ "github.com/evstack/ev-node/types"
13
+
14
+ goheaderstore "github.com/celestiaorg/go-header/store"
15
+ ds "github.com/ipfs/go-datastore"
16
+ kt "github.com/ipfs/go-datastore/keytransform"
11
17
"github.com/spf13/cobra"
12
18
)
13
19
@@ -28,13 +34,48 @@ var RollbackCmd = &cobra.Command{
28
34
if err != nil {
29
35
return err
30
36
}
31
- storeWrapper := store .New (datastore )
37
+
38
+ // prefixed evolve db
39
+ evolveDB := kt .Wrap (datastore , & kt.PrefixTransform {
40
+ Prefix : ds .NewKey (node .EvPrefix ),
41
+ })
42
+
43
+ storeWrapper := store .New (evolveDB )
32
44
33
45
executor , err := kvexecutor .NewKVExecutor (nodeConfig .RootDir , nodeConfig .DBPath )
34
46
if err != nil {
35
47
return err
36
48
}
37
49
50
+ // rollback ev-node goheader state
51
+ headerStore , err := goheaderstore .NewStore [* types.SignedHeader ](
52
+ evolveDB ,
53
+ goheaderstore .WithStorePrefix ("headerSync" ),
54
+ goheaderstore .WithMetrics (),
55
+ )
56
+ if err != nil {
57
+ return err
58
+ }
59
+
60
+ dataStore , err := goheaderstore .NewStore [* types.Data ](
61
+ evolveDB ,
62
+ goheaderstore .WithStorePrefix ("dataSync" ),
63
+ goheaderstore .WithMetrics (),
64
+ )
65
+ if err != nil {
66
+ return err
67
+ }
68
+
69
+ if err := headerStore .Start (ctx ); err != nil {
70
+ return err
71
+ }
72
+ defer headerStore .Stop (ctx )
73
+
74
+ if err := dataStore .Start (ctx ); err != nil {
75
+ return err
76
+ }
77
+ defer dataStore .Stop (ctx )
78
+
38
79
cmd .Println ("Starting rollback operation" )
39
80
currentHeight , err := storeWrapper .Height (ctx )
40
81
if err != nil {
@@ -54,6 +95,15 @@ var RollbackCmd = &cobra.Command{
54
95
return fmt .Errorf ("rollback failed: %w" , err )
55
96
}
56
97
98
+ // rollback sync services
99
+ if err := headerStore .DeleteTo (ctx , targetHeight ); err != nil {
100
+ return fmt .Errorf ("failed to rollback header sync service state: %w" , err )
101
+ }
102
+
103
+ if err := dataStore .DeleteTo (ctx , targetHeight ); err != nil {
104
+ return fmt .Errorf ("failed to rollback data sync service state: %w" , err )
105
+ }
106
+
57
107
// rollback execution store
58
108
if err := executor .Rollback (ctx , targetHeight ); err != nil {
59
109
return fmt .Errorf ("rollback failed: %w" , err )
0 commit comments