@@ -10,12 +10,9 @@ import (
10
10
"github.com/spf13/cobra"
11
11
"golang.org/x/exp/maps"
12
12
13
- "github.com/cosmos/cosmos-sdk/client"
14
13
"github.com/cosmos/cosmos-sdk/codec"
15
14
sdk "github.com/cosmos/cosmos-sdk/types"
16
15
"github.com/cosmos/cosmos-sdk/version"
17
-
18
- "github.com/cosmos/interchain-security/v6/x/ccv/types"
19
16
)
20
17
21
18
// The genesis state of the blockchain is represented here as a map of raw json
@@ -60,52 +57,44 @@ func removeParameterFromParams(params json.RawMessage, param string) (json.RawMe
60
57
// Transformation of consumer genesis content as it is exported by provider version >= v6.2.x
61
58
// to a format supported by consumer chains version with either SDK v0.47 and ICS < v4.5.0 or SDK v0.50 and ICS < v6.2.0
62
59
// This transformation removes the 'consumer_id' parameter from the 'params' field introduced in ICS v6.2.x
63
- func removeConsumerID (jsonRaw []byte , ctx client.Context ) (json.RawMessage , error ) {
64
- srcConGen := types.ConsumerGenesisState {}
65
- err := ctx .Codec .UnmarshalJSON (jsonRaw , & srcConGen )
66
- if err != nil {
67
- return nil , fmt .Errorf ("reading consumer genesis data failed: %s" , err )
68
- }
69
-
60
+ func removeConsumerID (genState map [string ]json.RawMessage ) (map [string ]json.RawMessage , error ) {
70
61
// Remove 'consumer_id' from 'params'
71
- params , err := ctx . Codec . MarshalJSON ( & srcConGen . Params )
62
+ params , err := removeParameterFromParams ( genState [ "params" ], "consumer_id" )
72
63
if err != nil {
73
64
return nil , err
74
65
}
75
66
76
- params , err = removeParameterFromParams (params , "consumer_id" )
77
- if err != nil {
78
- return nil , err
79
- }
80
-
81
- // Marshal GenesisState and patch 'params' value
82
- result , err := ctx .Codec .MarshalJSON (& srcConGen )
83
- if err != nil {
84
- return nil , err
85
- }
86
- genState := map [string ]json.RawMessage {}
87
- if err := json .Unmarshal (result , & genState ); err != nil {
88
- return nil , fmt .Errorf ("unmarshalling 'GenesisState' failed: %v" , err )
89
- }
90
67
genState ["params" ] = params
91
68
92
- result , err = json .Marshal (genState )
93
- if err != nil {
94
- return nil , fmt .Errorf ("marshalling transformation result failed: %v" , err )
69
+ return genState , nil
70
+ }
71
+
72
+ func removeFieldsFromGenesisState (genState map [string ]json.RawMessage , keysToRemove []string ) (map [string ]json.RawMessage , error ) {
73
+ for _ , key := range keysToRemove {
74
+ delete (genState , key ) // Remove the key from the map if it exists
95
75
}
96
- return result , nil
76
+ return genState , nil
97
77
}
98
78
99
79
// transformGenesis transforms ccv consumer genesis data to the specified target version
100
80
// Returns the transformed data or an error in case the transformation failed or the format is not supported by current implementation
101
- func transformGenesis (ctx client.Context , targetVersion IcsVersion , jsonRaw []byte ) (json.RawMessage , error ) {
102
- var newConsumerGenesis json.RawMessage = nil
81
+ func transformGenesis (targetVersion IcsVersion , jsonRaw []byte ) (json.RawMessage , error ) {
103
82
var err error
83
+ // Unmarshal genesis state from raw msg
84
+ genState := map [string ]json.RawMessage {}
85
+ if err := json .Unmarshal (jsonRaw , & genState ); err != nil {
86
+ return nil , fmt .Errorf ("unmarshalling 'GenesisState' failed: %v" , err )
87
+ }
104
88
105
89
switch targetVersion {
106
90
case v4_x_x , v5_x_x :
107
- newConsumerGenesis , err = removeConsumerID (jsonRaw , ctx )
108
- // TODO: in addition, remove both `connection_id` and `preCCV` fields if target is v4_5_x or v6_x_x
91
+ genState , err = removeConsumerID (genState )
92
+ if err != nil {
93
+ break
94
+ }
95
+ genState , err = removeFieldsFromGenesisState (genState , []string {"preCCV" , "connection_id" })
96
+ case v4_5_x , v6_x_x :
97
+ genState , err = removeFieldsFromGenesisState (genState , []string {"preCCV" , "connection_id" })
109
98
default :
110
99
err = fmt .Errorf ("unsupported target version '%s'. Run %s --help" ,
111
100
targetVersion , version .AppName )
@@ -114,6 +103,13 @@ func transformGenesis(ctx client.Context, targetVersion IcsVersion, jsonRaw []by
114
103
if err != nil {
115
104
return nil , fmt .Errorf ("transformation failed: %v" , err )
116
105
}
106
+
107
+ // Marshal genesis state to raw msg
108
+ newConsumerGenesis , err := json .Marshal (genState )
109
+ if err != nil {
110
+ return nil , fmt .Errorf ("marshalling transformation result failed: %v" , err )
111
+ }
112
+
117
113
return newConsumerGenesis , err
118
114
}
119
115
@@ -130,7 +126,6 @@ func TransformConsumerGenesis(cmd *cobra.Command, args []string) error {
130
126
return err
131
127
}
132
128
133
- clientCtx := client .GetClientContextFromCmd (cmd )
134
129
version , err := cmd .Flags ().GetString ("to" )
135
130
if err != nil {
136
131
return fmt .Errorf ("error getting targetVersion %v" , err )
@@ -141,7 +136,7 @@ func TransformConsumerGenesis(cmd *cobra.Command, args []string) error {
141
136
}
142
137
143
138
// try to transform data to target format
144
- newConsumerGenesis , err := transformGenesis (clientCtx , targetVersion , jsonRaw )
139
+ newConsumerGenesis , err := transformGenesis (targetVersion , jsonRaw )
145
140
if err != nil {
146
141
return err
147
142
}
0 commit comments