From 47911a5dea5a655ed6325860abf1856685c730b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CEnchanterme=E2=80=9D?= <“encountermehere@gmail.com”> Date: Sun, 27 Sep 2026 20:36:00 +0100 Subject: [PATCH] refactor: use shared require_treasury/get_fee_bps helpers at all call sites MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace every inline env.storage().instance().get(&DataKey::Treasury) and .get(&DataKey::FeeBps) read across escrow, milestones, and maintenance-pool with the mergefi_common::require_treasury and mergefi_common::get_fee_bps helpers that already exist for this purpose. The TreasuryKey/FeeBpsKey traits were already implemented for all three contracts' DataKey enums, so the helpers work identically — this resolves the triplication #162/#163 identified at the call sites themselves. --- contracts/escrow/src/lib.rs | 22 +++++----------------- contracts/maintenance-pool/src/lib.rs | 17 ++++------------- contracts/milestones/src/lib.rs | 22 +++++----------------- 3 files changed, 14 insertions(+), 47 deletions(-) diff --git a/contracts/escrow/src/lib.rs b/contracts/escrow/src/lib.rs index 4ffec73..1e4d8ba 100644 --- a/contracts/escrow/src/lib.rs +++ b/contracts/escrow/src/lib.rs @@ -309,14 +309,11 @@ impl EscrowContract { EscrowStatus::Funded => {} } - let fee_bps: u32 = env - .storage() - .instance() - .get(&DataKey::FeeBps) + let fee_bps: u32 = mergefi_common::get_fee_bps::(&env) .ok_or(Error::NotInitialized)?; let payouts = mergefi_common::compute_split(&env, escrow.amount, fee_bps, &recipients) .map_err(|_| Error::InvalidSplit)?; - let treasury: Address = env.storage().instance().get(&DataKey::Treasury).unwrap(); + let treasury: Address = mergefi_common::require_treasury::(&env).unwrap(); let token_client = token::Client::new(&env, &escrow.token); let contract_address = env.current_contract_address(); @@ -667,17 +664,11 @@ impl EscrowContract { } pub fn get_treasury(env: Env) -> Result { - env.storage() - .instance() - .get(&DataKey::Treasury) - .ok_or(Error::NotInitialized) + mergefi_common::require_treasury::(&env).ok_or(Error::NotInitialized) } pub fn get_fee_bps(env: Env) -> Result { - env.storage() - .instance() - .get(&DataKey::FeeBps) - .ok_or(Error::NotInitialized) + mergefi_common::get_fee_bps::(&env).ok_or(Error::NotInitialized) } pub fn set_treasury(env: Env, new_treasury: Address) -> Result<(), Error> { @@ -715,10 +706,7 @@ impl EscrowContract { pub fn set_fee_bps(env: Env, new_fee_bps: u32) -> Result<(), Error> { require_admin(&env)?.require_auth(); - let current_fee: u32 = env - .storage() - .instance() - .get(&DataKey::FeeBps) + let current_fee: u32 = mergefi_common::get_fee_bps::(&env) .ok_or(Error::NotInitialized)?; mergefi_common::validate_fee_change(current_fee, new_fee_bps) diff --git a/contracts/maintenance-pool/src/lib.rs b/contracts/maintenance-pool/src/lib.rs index 9809790..efe727b 100644 --- a/contracts/maintenance-pool/src/lib.rs +++ b/contracts/maintenance-pool/src/lib.rs @@ -177,15 +177,12 @@ impl MaintenancePoolContract { return Err(Error::InsufficientBalance); } - let fee_bps: u32 = env - .storage() - .instance() - .get(&DataKey::FeeBps) + let fee_bps: u32 = mergefi_common::get_fee_bps::(&env) .ok_or(Error::NotInitialized)?; let fee = amount * (fee_bps as i128) / BPS_DENOMINATOR; let payout = amount - fee; - let treasury: Address = env.storage().instance().get(&DataKey::Treasury).unwrap(); + let treasury: Address = mergefi_common::require_treasury::(&env).unwrap(); let token_client = token::Client::new(&env, &pool.token); let contract_address = env.current_contract_address(); @@ -429,10 +426,7 @@ impl MaintenancePoolContract { } pub fn get_treasury(env: Env) -> Result { - env.storage() - .instance() - .get(&DataKey::Treasury) - .ok_or(Error::NotInitialized) + mergefi_common::require_treasury::(&env).ok_or(Error::NotInitialized) } pub fn get_oracle(env: Env) -> Result { @@ -443,10 +437,7 @@ impl MaintenancePoolContract { } pub fn get_fee_bps(env: Env) -> Result { - env.storage() - .instance() - .get(&DataKey::FeeBps) - .ok_or(Error::NotInitialized) + mergefi_common::get_fee_bps::(&env).ok_or(Error::NotInitialized) } pub fn get_version(env: Env) -> u32 { diff --git a/contracts/milestones/src/lib.rs b/contracts/milestones/src/lib.rs index 72ee385..673f4cf 100644 --- a/contracts/milestones/src/lib.rs +++ b/contracts/milestones/src/lib.rs @@ -381,14 +381,11 @@ impl MilestonesContract { .get(issue_id) .ok_or(Error::IssueNotAllocated)?; - let fee_bps: u32 = env - .storage() - .instance() - .get(&DataKey::FeeBps) + let fee_bps: u32 = mergefi_common::get_fee_bps::(&env) .ok_or(Error::NotInitialized)?; let payouts = mergefi_common::compute_split(&env, amount, fee_bps, &recipients) .map_err(|_| Error::InvalidSplit)?; - let treasury: Address = env.storage().instance().get(&DataKey::Treasury).unwrap(); + let treasury: Address = mergefi_common::require_treasury::(&env).unwrap(); let token_client = token::Client::new(&env, &milestone.token); let contract_address = env.current_contract_address(); @@ -643,10 +640,7 @@ impl MilestonesContract { } pub fn get_treasury(env: Env) -> Result { - env.storage() - .instance() - .get(&DataKey::Treasury) - .ok_or(Error::NotInitialized) + mergefi_common::require_treasury::(&env).ok_or(Error::NotInitialized) } pub fn get_oracle(env: Env) -> Result { @@ -758,10 +752,7 @@ impl MilestonesContract { } pub fn get_fee_bps(env: Env) -> Result { - env.storage() - .instance() - .get(&DataKey::FeeBps) - .ok_or(Error::NotInitialized) + mergefi_common::get_fee_bps::(&env).ok_or(Error::NotInitialized) } pub fn get_max_sponsors(env: Env) -> Result { @@ -781,10 +772,7 @@ impl MilestonesContract { pub fn set_fee_bps(env: Env, new_fee_bps: u32) -> Result<(), Error> { require_admin(&env)?.require_auth(); - let current_fee: u32 = env - .storage() - .instance() - .get(&DataKey::FeeBps) + let current_fee: u32 = mergefi_common::get_fee_bps::(&env) .ok_or(Error::NotInitialized)?; mergefi_common::validate_fee_change(current_fee, new_fee_bps)