diff --git a/crates/astria-core/src/protocol/genesis/v1.rs b/crates/astria-core/src/protocol/genesis/v1.rs index 960741a53..42d9ddf6d 100644 --- a/crates/astria-core/src/protocol/genesis/v1.rs +++ b/crates/astria-core/src/protocol/genesis/v1.rs @@ -560,20 +560,20 @@ impl From for IBCParameters { #[derive(Clone, Debug)] pub struct GenesisFees { - pub rollup_data_submission: RollupDataSubmissionFeeComponents, - pub transfer: TransferFeeComponents, - pub ics20_withdrawal: Ics20WithdrawalFeeComponents, - pub init_bridge_account: InitBridgeAccountFeeComponents, - pub bridge_lock: BridgeLockFeeComponents, - pub bridge_unlock: BridgeUnlockFeeComponents, - pub bridge_sudo_change: BridgeSudoChangeFeeComponents, - pub ibc_relay: IbcRelayFeeComponents, - pub validator_update: ValidatorUpdateFeeComponents, - pub fee_asset_change: FeeAssetChangeFeeComponents, + pub rollup_data_submission: Option, + pub transfer: Option, + pub ics20_withdrawal: Option, + pub init_bridge_account: Option, + pub bridge_lock: Option, + pub bridge_unlock: Option, + pub bridge_sudo_change: Option, + pub ibc_relay: Option, + pub validator_update: Option, + pub fee_asset_change: Option, pub fee_change: FeeChangeFeeComponents, - pub ibc_relayer_change: IbcRelayerChangeFeeComponents, - pub sudo_address_change: SudoAddressChangeFeeComponents, - pub ibc_sudo_change: IbcSudoChangeFeeComponents, + pub ibc_relayer_change: Option, + pub sudo_address_change: Option, + pub ibc_sudo_change: Option, } impl Protobuf for GenesisFees { @@ -601,90 +601,90 @@ impl Protobuf for GenesisFees { sudo_address_change, ibc_sudo_change, } = raw; - let rollup_data_submission = RollupDataSubmissionFeeComponents::try_from_raw( - rollup_data_submission - .clone() - .ok_or_else(|| Self::Error::field_not_set("sequence"))?, - ) - .map_err(|e| FeesError::fee_components("sequence", e))?; - let transfer = TransferFeeComponents::try_from_raw( - transfer - .clone() - .ok_or_else(|| Self::Error::field_not_set("transfer"))?, - ) - .map_err(|e| FeesError::fee_components("transfer", e))?; - let ics20_withdrawal = Ics20WithdrawalFeeComponents::try_from_raw( - ics20_withdrawal - .clone() - .ok_or_else(|| Self::Error::field_not_set("ics20_withdrawal"))?, - ) - .map_err(|e| FeesError::fee_components("ics20_withdrawal", e))?; - let init_bridge_account = InitBridgeAccountFeeComponents::try_from_raw( - init_bridge_account - .clone() - .ok_or_else(|| Self::Error::field_not_set("init_bridge_account"))?, - ) - .map_err(|e| FeesError::fee_components("init_bridge_account", e))?; - let bridge_lock = BridgeLockFeeComponents::try_from_raw( - bridge_lock - .clone() - .ok_or_else(|| Self::Error::field_not_set("bridge_lock"))?, - ) - .map_err(|e| FeesError::fee_components("bridge_lock", e))?; - let bridge_unlock = BridgeUnlockFeeComponents::try_from_raw( - bridge_unlock - .clone() - .ok_or_else(|| Self::Error::field_not_set("bridge_unlock"))?, - ) - .map_err(|e| FeesError::fee_components("bridge_unlock", e))?; - let bridge_sudo_change = BridgeSudoChangeFeeComponents::try_from_raw( - bridge_sudo_change - .clone() - .ok_or_else(|| Self::Error::field_not_set("bridge_sudo_change"))?, - ) - .map_err(|e| FeesError::fee_components("bridge_sudo_change", e))?; - let ibc_relay = IbcRelayFeeComponents::try_from_raw( - ibc_relay - .clone() - .ok_or_else(|| Self::Error::field_not_set("ibc_relay"))?, - ) - .map_err(|e| FeesError::fee_components("ibc_relay", e))?; - let validator_update = ValidatorUpdateFeeComponents::try_from_raw( - validator_update - .clone() - .ok_or_else(|| Self::Error::field_not_set("validator_update"))?, - ) - .map_err(|e| FeesError::fee_components("validator_update", e))?; - let fee_asset_change = FeeAssetChangeFeeComponents::try_from_raw( - fee_asset_change - .clone() - .ok_or_else(|| Self::Error::field_not_set("fee_asset_change"))?, - ) - .map_err(|e| FeesError::fee_components("fee_asset_change", e))?; + let rollup_data_submission = rollup_data_submission + .clone() + .map(RollupDataSubmissionFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("rollup_data_submission", e))?; + + let transfer = transfer + .clone() + .map(TransferFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("transfer", e))?; + + let ics20_withdrawal = ics20_withdrawal + .clone() + .map(Ics20WithdrawalFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("ics20_withdrawal", e))?; + + let init_bridge_account = init_bridge_account + .clone() + .map(InitBridgeAccountFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("init_bridge_account", e))?; + + let bridge_lock = bridge_lock + .clone() + .map(BridgeLockFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("bridge_lock", e))?; + + let bridge_unlock = bridge_unlock + .clone() + .map(BridgeUnlockFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("bridge_unlock", e))?; + + let bridge_sudo_change = bridge_sudo_change + .clone() + .map(BridgeSudoChangeFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("bridge_sudo_change", e))?; + + let ibc_relay = ibc_relay + .clone() + .map(IbcRelayFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("ibc_relay", e))?; + + let validator_update = validator_update + .clone() + .map(ValidatorUpdateFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("validator_update", e))?; + + let fee_asset_change = fee_asset_change + .clone() + .map(FeeAssetChangeFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("fee_asset_change", e))?; + let fee_change = FeeChangeFeeComponents::try_from_raw( fee_change .clone() .ok_or_else(|| Self::Error::field_not_set("fee_change"))?, ) .map_err(|e| FeesError::fee_components("fee_change", e))?; - let ibc_relayer_change = IbcRelayerChangeFeeComponents::try_from_raw( - ibc_relayer_change - .clone() - .ok_or_else(|| Self::Error::field_not_set("ibc_relayer_change"))?, - ) - .map_err(|e| FeesError::fee_components("ibc_relayer_change", e))?; - let sudo_address_change = SudoAddressChangeFeeComponents::try_from_raw( - sudo_address_change - .clone() - .ok_or_else(|| Self::Error::field_not_set("sudo_address_change"))?, - ) - .map_err(|e| FeesError::fee_components("sudo_address_change", e))?; - let ibc_sudo_change = IbcSudoChangeFeeComponents::try_from_raw( - ibc_sudo_change - .clone() - .ok_or_else(|| Self::Error::field_not_set("ibc_sudo_change"))?, - ) - .map_err(|e| FeesError::fee_components("ibc_sudo_change", e))?; + + let ibc_relayer_change = ibc_relayer_change + .clone() + .map(IbcRelayerChangeFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("ibc_relayer_change", e))?; + + let sudo_address_change = sudo_address_change + .clone() + .map(SudoAddressChangeFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("sudo_address_change", e))?; + + let ibc_sudo_change = ibc_sudo_change + .clone() + .map(IbcSudoChangeFeeComponents::try_from_raw) + .transpose() + .map_err(|e| FeesError::fee_components("ibc_sudo_change", e))?; Ok(Self { rollup_data_submission, @@ -722,20 +722,27 @@ impl Protobuf for GenesisFees { ibc_sudo_change, } = self; Self::Raw { - rollup_data_submission: Some(rollup_data_submission.to_raw()), - transfer: Some(transfer.to_raw()), - ics20_withdrawal: Some(ics20_withdrawal.to_raw()), - init_bridge_account: Some(init_bridge_account.to_raw()), - bridge_lock: Some(bridge_lock.to_raw()), - bridge_unlock: Some(bridge_unlock.to_raw()), - bridge_sudo_change: Some(bridge_sudo_change.to_raw()), - ibc_relay: Some(ibc_relay.to_raw()), - validator_update: Some(validator_update.to_raw()), - fee_asset_change: Some(fee_asset_change.to_raw()), + transfer: transfer.map(|act| TransferFeeComponents::to_raw(&act)), + rollup_data_submission: rollup_data_submission + .map(|act| RollupDataSubmissionFeeComponents::to_raw(&act)), + ics20_withdrawal: ics20_withdrawal + .map(|act| Ics20WithdrawalFeeComponents::to_raw(&act)), + init_bridge_account: init_bridge_account + .map(|act| InitBridgeAccountFeeComponents::to_raw(&act)), + bridge_lock: bridge_lock.map(|act| BridgeLockFeeComponents::to_raw(&act)), + bridge_unlock: bridge_unlock.map(|act| BridgeUnlockFeeComponents::to_raw(&act)), + bridge_sudo_change: bridge_sudo_change + .map(|act| BridgeSudoChangeFeeComponents::to_raw(&act)), + ibc_relay: ibc_relay.map(|act| IbcRelayFeeComponents::to_raw(&act)), + validator_update: validator_update + .map(|act| ValidatorUpdateFeeComponents::to_raw(&act)), + fee_asset_change: fee_asset_change.map(|act| FeeAssetChangeFeeComponents::to_raw(&act)), fee_change: Some(fee_change.to_raw()), - ibc_relayer_change: Some(ibc_relayer_change.to_raw()), - sudo_address_change: Some(sudo_address_change.to_raw()), - ibc_sudo_change: Some(ibc_sudo_change.to_raw()), + ibc_relayer_change: ibc_relayer_change + .map(|act| IbcRelayerChangeFeeComponents::to_raw(&act)), + sudo_address_change: sudo_address_change + .map(|act| SudoAddressChangeFeeComponents::to_raw(&act)), + ibc_sudo_change: ibc_sudo_change.map(|act| IbcSudoChangeFeeComponents::to_raw(&act)), } } } diff --git a/crates/astria-sequencer/src/app/test_utils.rs b/crates/astria-sequencer/src/app/test_utils.rs index 9bde70017..8faa1f5d4 100644 --- a/crates/astria-sequencer/src/app/test_utils.rs +++ b/crates/astria-sequencer/src/app/test_utils.rs @@ -182,62 +182,62 @@ pub(crate) fn default_genesis_accounts() -> Vec { #[cfg_attr(feature = "benchmark", allow(dead_code))] pub(crate) fn default_fees() -> astria_core::protocol::genesis::v1::GenesisFees { astria_core::protocol::genesis::v1::GenesisFees { - transfer: TransferFeeComponents { + transfer: Some(TransferFeeComponents { base: 12, multiplier: 0, - }, - rollup_data_submission: RollupDataSubmissionFeeComponents { + }), + rollup_data_submission: Some(RollupDataSubmissionFeeComponents { base: 32, multiplier: 1, - }, - init_bridge_account: InitBridgeAccountFeeComponents { + }), + init_bridge_account: Some(InitBridgeAccountFeeComponents { base: 48, multiplier: 0, - }, - bridge_lock: BridgeLockFeeComponents { + }), + bridge_lock: Some(BridgeLockFeeComponents { base: 12, // should reflect transfer fee multiplier: 1, - }, - bridge_sudo_change: BridgeSudoChangeFeeComponents { + }), + bridge_sudo_change: Some(BridgeSudoChangeFeeComponents { base: 24, multiplier: 0, - }, - ics20_withdrawal: Ics20WithdrawalFeeComponents { + }), + ics20_withdrawal: Some(Ics20WithdrawalFeeComponents { base: 24, multiplier: 0, - }, - bridge_unlock: BridgeUnlockFeeComponents { + }), + bridge_unlock: Some(BridgeUnlockFeeComponents { base: 12, // should reflect transfer fee multiplier: 0, - }, - ibc_relay: IbcRelayFeeComponents { + }), + ibc_relay: Some(IbcRelayFeeComponents { base: 0, multiplier: 0, - }, - validator_update: ValidatorUpdateFeeComponents { + }), + validator_update: Some(ValidatorUpdateFeeComponents { base: 0, multiplier: 0, - }, - fee_asset_change: FeeAssetChangeFeeComponents { + }), + fee_asset_change: Some(FeeAssetChangeFeeComponents { base: 0, multiplier: 0, - }, + }), fee_change: FeeChangeFeeComponents { base: 0, multiplier: 0, }, - ibc_relayer_change: IbcRelayerChangeFeeComponents { + ibc_relayer_change: Some(IbcRelayerChangeFeeComponents { base: 0, multiplier: 0, - }, - sudo_address_change: SudoAddressChangeFeeComponents { + }), + sudo_address_change: Some(SudoAddressChangeFeeComponents { base: 0, multiplier: 0, - }, - ibc_sudo_change: IbcSudoChangeFeeComponents { + }), + ibc_sudo_change: Some(IbcSudoChangeFeeComponents { base: 0, multiplier: 0, - }, + }), } } diff --git a/crates/astria-sequencer/src/fees/component.rs b/crates/astria-sequencer/src/fees/component.rs index 0e1ea34dd..15f476cd2 100644 --- a/crates/astria-sequencer/src/fees/component.rs +++ b/crates/astria-sequencer/src/fees/component.rs @@ -29,54 +29,74 @@ impl Component for FeesComponent { S: fees::StateWriteExt + fees::StateReadExt, { let transfer_fees = app_state.fees().transfer; - state - .put_transfer_fees(transfer_fees) - .wrap_err("failed to store transfer fee components")?; + if let Some(transfer_fees) = transfer_fees { + state + .put_transfer_fees(transfer_fees) + .wrap_err("failed to store transfer fee components")?; + } let rollup_data_submission_fees = app_state.fees().rollup_data_submission; - state - .put_rollup_data_submission_fees(rollup_data_submission_fees) - .wrap_err("failed to store rollup data submission action fee components")?; + if let Some(rollup_data_submission_fees) = rollup_data_submission_fees { + state + .put_rollup_data_submission_fees(rollup_data_submission_fees) + .wrap_err("failed to store rollup data submission fee components")?; + } let ics20_withdrawal_fees = app_state.fees().ics20_withdrawal; - state - .put_ics20_withdrawal_fees(ics20_withdrawal_fees) - .wrap_err("failed to store ics20 withdrawal fee components")?; + if let Some(ics20_withdrawal_fees) = ics20_withdrawal_fees { + state + .put_ics20_withdrawal_fees(ics20_withdrawal_fees) + .wrap_err("failed to store ics20 withdrawal fee components")?; + } let init_bridge_account_fees = app_state.fees().init_bridge_account; - state - .put_init_bridge_account_fees(init_bridge_account_fees) - .wrap_err("failed to store init bridge account fee components")?; + if let Some(init_bridge_account_fees) = init_bridge_account_fees { + state + .put_init_bridge_account_fees(init_bridge_account_fees) + .wrap_err("failed to store init bridge account fee components")?; + } let bridge_lock_fees = app_state.fees().bridge_lock; - state - .put_bridge_lock_fees(bridge_lock_fees) - .wrap_err("failed to store bridge lock fee components")?; + if let Some(bridge_lock_fees) = bridge_lock_fees { + state + .put_bridge_lock_fees(bridge_lock_fees) + .wrap_err("failed to store bridge lock fee components")?; + } let bridge_unlock_fees = app_state.fees().bridge_unlock; - state - .put_bridge_unlock_fees(bridge_unlock_fees) - .wrap_err("failed to store bridge unlock fee components")?; + if let Some(bridge_unlock_fees) = bridge_unlock_fees { + state + .put_bridge_unlock_fees(bridge_unlock_fees) + .wrap_err("failed to store bridge unlock fee components")?; + } let bridge_sudo_change_fees = app_state.fees().bridge_sudo_change; - state - .put_bridge_sudo_change_fees(bridge_sudo_change_fees) - .wrap_err("failed to store bridge sudo change fee components")?; + if let Some(bridge_sudo_change_fees) = bridge_sudo_change_fees { + state + .put_bridge_sudo_change_fees(bridge_sudo_change_fees) + .wrap_err("failed to store bridge sudo change fee components")?; + } let ibc_relay_fees = app_state.fees().ibc_relay; - state - .put_ibc_relay_fees(ibc_relay_fees) - .wrap_err("failed to store ibc relay fee components")?; + if let Some(ibc_relay_fees) = ibc_relay_fees { + state + .put_ibc_relay_fees(ibc_relay_fees) + .wrap_err("failed to store ibc relay fee components")?; + } let validator_update_fees = app_state.fees().validator_update; - state - .put_validator_update_fees(validator_update_fees) - .wrap_err("failed to store validator update fee components")?; + if let Some(validator_update_fees) = validator_update_fees { + state + .put_validator_update_fees(validator_update_fees) + .wrap_err("failed to store validator update fee components")?; + } let fee_asset_change_fees = app_state.fees().fee_asset_change; - state - .put_fee_asset_change_fees(fee_asset_change_fees) - .wrap_err("failed to store fee asset change fee components")?; + if let Some(fee_asset_change_fees) = fee_asset_change_fees { + state + .put_fee_asset_change_fees(fee_asset_change_fees) + .wrap_err("failed to store fee asset change fee components")?; + } let fee_change_fees = app_state.fees().fee_change; state @@ -84,19 +104,25 @@ impl Component for FeesComponent { .wrap_err("failed to store fee change fee components")?; let ibc_relayer_change_fees = app_state.fees().ibc_relayer_change; - state - .put_ibc_relayer_change_fees(ibc_relayer_change_fees) - .wrap_err("failed to store ibc relayer change fee components")?; + if let Some(ibc_relayer_change_fees) = ibc_relayer_change_fees { + state + .put_ibc_relayer_change_fees(ibc_relayer_change_fees) + .wrap_err("failed to store ibc relayer change fee components")?; + } let sudo_address_change_fees = app_state.fees().sudo_address_change; - state - .put_sudo_address_change_fees(sudo_address_change_fees) - .wrap_err("failed to store sudo address change fee components")?; + if let Some(sudo_address_change_fees) = sudo_address_change_fees { + state + .put_sudo_address_change_fees(sudo_address_change_fees) + .wrap_err("failed to store sudo address change fee components")?; + } let ibc_sudo_change_fees = app_state.fees().ibc_sudo_change; - state - .put_ibc_sudo_change_fees(ibc_sudo_change_fees) - .wrap_err("failed to store ibc sudo change fee components")?; + if let Some(ibc_sudo_change_fees) = ibc_sudo_change_fees { + state + .put_ibc_sudo_change_fees(ibc_sudo_change_fees) + .wrap_err("failed to store ibc sudo change fee components")?; + } Ok(()) }