Skip to content

Commit 2c8fd83

Browse files
Fee contract upgrade (#3850)
* upgrade to patch fee contract * ad version validation and cache removal to allow re-applying * switch to using builder pattern for upgrade_fee_v1 * only write to stdout if not quiet, ensure fee eoa upgrade verifies owner is not a contract * removed unused imports * if applying patch upgrade, then let the user know to remove previous addr * clippy fix * remove leftover code * optimize version checks using the bindings helper * fix log level, add some more context to some errors
1 parent 2004e89 commit 2c8fd83

File tree

6 files changed

+494
-36
lines changed

6 files changed

+494
-36
lines changed

contracts/rust/adapter/src/bindings/fee_contract.rs

Lines changed: 4 additions & 4 deletions
Large diffs are not rendered by default.

contracts/rust/deployer/src/builder.rs

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)