@@ -126,44 +126,78 @@ fn main() -> Result<()> {
126
126
let payer =
127
127
read_keypair_file ( & * shellexpand:: tilde ( & keypair) ) . expect ( "Keypair not found" ) ;
128
128
129
- let initialize_instruction = initialize (
130
- wormhole,
131
- payer. pubkey ( ) ,
132
- 0 ,
133
- GUARDIAN_EXPIRATION_TIME ,
134
- & [ hex:: decode ( INITIAL_GUARDIAN ) . unwrap ( ) . try_into ( ) . unwrap ( ) ] ,
135
- )
136
- . unwrap ( ) ;
137
- process_transaction ( & rpc_client, vec ! [ initialize_instruction] , & vec ! [ & payer] ) ?;
138
-
139
- process_upgrade_guardian_set (
140
- & rpc_client,
141
- & hex:: decode ( UPGRADE_GUARDIAN_SET_VAA_1 ) . unwrap ( ) ,
142
- wormhole,
143
- & payer,
144
- true ,
145
- ) ?;
146
- process_upgrade_guardian_set (
147
- & rpc_client,
148
- & hex:: decode ( UPGRADE_GUARDIAN_SET_VAA_2 ) . unwrap ( ) ,
149
- wormhole,
150
- & payer,
151
- false ,
152
- ) ?;
153
- process_upgrade_guardian_set (
154
- & rpc_client,
155
- & hex:: decode ( UPGRADE_GUARDIAN_SET_VAA_3 ) . unwrap ( ) ,
156
- wormhole,
157
- & payer,
158
- false ,
159
- ) ?;
160
- process_upgrade_guardian_set (
161
- & rpc_client,
162
- & hex:: decode ( UPGRADE_GUARDIAN_SET_VAA_4 ) . unwrap ( ) ,
163
- wormhole,
164
- & payer,
165
- false ,
166
- ) ?;
129
+ // Check whether the wormhole config account exists, if it does not exist, initialize the wormhole receiver
130
+ let wormhole_config = BridgeConfig :: key ( & wormhole, ( ) ) ;
131
+
132
+ let wormhole_account_data = rpc_client. get_account_data ( & wormhole_config) ;
133
+
134
+ let mut current_guardian_set_index = match wormhole_account_data {
135
+ Ok ( data) => {
136
+ let config = BridgeConfig :: try_from_slice ( & data) ?;
137
+ println ! ( "Wormhole already initialized. config: {:?}" , config) ;
138
+ config. guardian_set_index
139
+ }
140
+ Err ( _) => {
141
+ println ! ( "Initializing wormhole receiver" ) ;
142
+ let initialize_instruction = initialize (
143
+ wormhole,
144
+ payer. pubkey ( ) ,
145
+ 0 ,
146
+ GUARDIAN_EXPIRATION_TIME ,
147
+ & [ hex:: decode ( INITIAL_GUARDIAN ) . unwrap ( ) . try_into ( ) . unwrap ( ) ] ,
148
+ )
149
+ . expect ( "Failed to create initialize instruction" ) ;
150
+ process_transaction ( & rpc_client, vec ! [ initialize_instruction] , & vec ! [ & payer] ) ?;
151
+ 0
152
+ }
153
+ } ;
154
+
155
+ if current_guardian_set_index == 0 {
156
+ println ! ( "Upgrading guardian set from 0 to 1" ) ;
157
+ process_upgrade_guardian_set (
158
+ & rpc_client,
159
+ & hex:: decode ( UPGRADE_GUARDIAN_SET_VAA_1 ) . unwrap ( ) ,
160
+ wormhole,
161
+ & payer,
162
+ true ,
163
+ ) ?;
164
+ current_guardian_set_index += 1 ;
165
+ }
166
+
167
+ if current_guardian_set_index == 1 {
168
+ println ! ( "Upgrading guardian set from 1 to 2" ) ;
169
+ process_upgrade_guardian_set (
170
+ & rpc_client,
171
+ & hex:: decode ( UPGRADE_GUARDIAN_SET_VAA_2 ) . unwrap ( ) ,
172
+ wormhole,
173
+ & payer,
174
+ false ,
175
+ ) ?;
176
+ current_guardian_set_index += 1 ;
177
+ }
178
+
179
+ if current_guardian_set_index == 2 {
180
+ println ! ( "Upgrading guardian set from 2 to 3" ) ;
181
+ process_upgrade_guardian_set (
182
+ & rpc_client,
183
+ & hex:: decode ( UPGRADE_GUARDIAN_SET_VAA_3 ) . unwrap ( ) ,
184
+ wormhole,
185
+ & payer,
186
+ false ,
187
+ ) ?;
188
+ current_guardian_set_index += 1 ;
189
+ }
190
+
191
+ if current_guardian_set_index == 3 {
192
+ println ! ( "Upgrading guardian set from 3 to 4" ) ;
193
+ process_upgrade_guardian_set (
194
+ & rpc_client,
195
+ & hex:: decode ( UPGRADE_GUARDIAN_SET_VAA_4 ) . unwrap ( ) ,
196
+ wormhole,
197
+ & payer,
198
+ false ,
199
+ ) ?;
200
+ }
167
201
}
168
202
169
203
Action :: InitializePythReceiver {
0 commit comments