@@ -16,9 +16,9 @@ use crate::{
1616 proposals:: {
1717 multisig:: {
1818 transfer_ownership_from_multisig_to_timelock, upgrade_esp_token_v2_multisig_owner,
19- upgrade_light_client_v2_multisig_owner , upgrade_light_client_v3_multisig_owner ,
20- upgrade_stake_table_v2_multisig_owner , LightClientV2UpgradeParams ,
21- StakeTableV2UpgradeParams , TransferOwnershipParams ,
19+ upgrade_fee_contract_multisig_owner , upgrade_light_client_v2_multisig_owner ,
20+ upgrade_light_client_v3_multisig_owner , upgrade_stake_table_v2_multisig_owner ,
21+ LightClientV2UpgradeParams , StakeTableV2UpgradeParams , TransferOwnershipParams ,
2222 } ,
2323 timelock:: {
2424 cancel_timelock_operation, derive_timelock_address_from_contract_type,
@@ -142,35 +142,61 @@ impl<P: Provider + WalletProvider> DeployerArgs<P> {
142142 let admin = provider. default_signer_address ( ) ;
143143 match target {
144144 Contract :: FeeContractProxy => {
145- let addr = crate :: deploy_fee_contract_proxy ( provider, contracts, admin) . await ?;
146-
147- if let Some ( use_timelock_owner) = self . use_timelock_owner {
148- // FeeContract uses OpsTimelock because:
149- // - It handles critical fee collection and distribution logic
150- // - May require emergency updates for security or functionality
151- // - OpsTimelock provides a shorter delay for critical operations
152- tracing:: info!(
153- "Transferring ownership to OpsTimelock: {:?}" ,
154- use_timelock_owner
155- ) ;
156- // deployer is the timelock owner
157- if use_timelock_owner {
158- let timelock_addr = derive_timelock_address_from_contract_type (
159- OwnableContract :: FeeContractProxy ,
145+ if contracts. address ( Contract :: FeeContractProxy ) . is_some ( ) {
146+ // Upgrade path
147+ let use_multisig = self . use_multisig ;
148+ let dry_run = self . dry_run ;
149+ let rpc_url = self . rpc_url . clone ( ) ;
150+
151+ tracing:: info!( ?dry_run, ?use_multisig, "Upgrading FeeContract to V1.0.1" ) ;
152+ if use_multisig {
153+ upgrade_fee_contract_multisig_owner (
154+ provider,
160155 contracts,
161- ) ?;
156+ rpc_url. to_string ( ) ,
157+ dry_run,
158+ )
159+ . await ?;
160+ } else {
161+ crate :: upgrade_fee_v1 ( provider, contracts) . await ?;
162+ }
163+ } else {
164+ // Deploy path
165+ let addr = crate :: deploy_fee_contract_proxy ( provider, contracts, admin) . await ?;
166+
167+ if let Some ( use_timelock_owner) = self . use_timelock_owner {
168+ // FeeContract uses OpsTimelock because:
169+ // - It handles critical fee collection and distribution logic
170+ // - May require emergency updates for security or functionality
171+ // - OpsTimelock provides a shorter delay for critical operations
172+ tracing:: info!(
173+ "Transferring ownership to OpsTimelock: {:?}" ,
174+ use_timelock_owner
175+ ) ;
176+ // deployer is the timelock owner
177+ if use_timelock_owner {
178+ let timelock_addr = derive_timelock_address_from_contract_type (
179+ OwnableContract :: FeeContractProxy ,
180+ contracts,
181+ ) ?;
182+ crate :: transfer_ownership (
183+ provider,
184+ Contract :: FeeContractProxy ,
185+ addr,
186+ timelock_addr,
187+ )
188+ . await ?;
189+ }
190+ } else if let Some ( multisig) = self . multisig {
191+ tracing:: info!( "Transferring ownership to multisig: {:?}" , multisig) ;
162192 crate :: transfer_ownership (
163193 provider,
164194 Contract :: FeeContractProxy ,
165195 addr,
166- timelock_addr ,
196+ multisig ,
167197 )
168198 . await ?;
169199 }
170- } else if let Some ( multisig) = self . multisig {
171- tracing:: info!( "Transferring ownership to multisig: {:?}" , multisig) ;
172- crate :: transfer_ownership ( provider, Contract :: FeeContractProxy , addr, multisig)
173- . await ?;
174200 }
175201 } ,
176202 Contract :: EspTokenProxy => {
0 commit comments