Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion charts/evm-rollup/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.20.1
version: 0.20.2

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
Expand Down
1 change: 1 addition & 0 deletions charts/evm-rollup/templates/configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ data:
{{- if not .Values.global.dev }}
{{- else }}
ASTRIA_COMPOSER_SEQUENCER_ADDRESS_PREFIX: "{{ .Values.config.sequencer.addressPrefixes.base }}"
ASTRIA_COMPOSER_FEE_ASSET: "{{ .Values.config.sequencer.nativeAssetBaseDenomination }}"
{{- end }}
---
{{- if .Values.config.faucet.enabled }}
Expand Down
1 change: 1 addition & 0 deletions charts/evm-rollup/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ config:
sequencer:
addressPrefixes:
base: "astria"
nativeAssetBaseDenomination: nria
chainId: ""
# Block height to start syncing rollup from
initialBlockHeight: "2"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ use astria_core::{
asset::{
self,
denom::TracePrefixed,
Denom,
},
Address,
},
Expand Down Expand Up @@ -55,8 +54,8 @@ pub(crate) struct EventWithMetadata {

pub(crate) fn event_to_action(
event_with_metadata: EventWithMetadata,
fee_asset_id: asset::Id,
rollup_asset_denom: Denom,
fee_asset: asset::Denom,
rollup_asset_denom: asset::Denom,
asset_withdrawal_divisor: u128,
bridge_address: Address,
sequencer_address_prefix: &str,
Expand All @@ -66,15 +65,15 @@ pub(crate) fn event_to_action(
&event,
event_with_metadata.block_number,
event_with_metadata.transaction_hash,
fee_asset_id,
fee_asset,
asset_withdrawal_divisor,
)
.wrap_err("failed to convert sequencer withdrawal event to action")?,
WithdrawalEvent::Ics20(event) => event_to_ics20_withdrawal(
event,
event_with_metadata.block_number,
event_with_metadata.transaction_hash,
fee_asset_id,
fee_asset,
rollup_asset_denom,
asset_withdrawal_divisor,
bridge_address,
Expand All @@ -95,7 +94,7 @@ fn event_to_bridge_unlock(
event: &SequencerWithdrawalFilter,
block_number: U64,
transaction_hash: TxHash,
fee_asset_id: asset::Id,
fee_asset: asset::Denom,
asset_withdrawal_divisor: u128,
) -> eyre::Result<Action> {
let memo = BridgeUnlockMemo {
Expand All @@ -115,7 +114,7 @@ fn event_to_bridge_unlock(
"failed to divide amount by asset withdrawal multiplier"
))?,
memo: serde_json::to_vec(&memo).wrap_err("failed to serialize memo to json")?,
fee_asset_id,
fee_asset,
bridge_address: None,
};

Expand All @@ -128,8 +127,8 @@ fn event_to_ics20_withdrawal(
event: Ics20WithdrawalFilter,
block_number: U64,
transaction_hash: TxHash,
fee_asset_id: asset::Id,
rollup_asset_denom: Denom,
fee_asset: asset::Denom,
rollup_asset_denom: asset::Denom,
asset_withdrawal_divisor: u128,
bridge_address: Address,
sequencer_address_prefix: &str,
Expand Down Expand Up @@ -172,7 +171,7 @@ fn event_to_ics20_withdrawal(
"failed to divide amount by asset withdrawal multiplier"
))?,
memo: serde_json::to_string(&memo).wrap_err("failed to serialize memo to json")?,
fee_asset_id,
fee_asset,
// note: this refers to the timeout on the destination chain, which we are unaware of.
// thus, we set it to the maximum possible value.
timeout_height: IbcHeight::new(u64::MAX, u64::MAX)
Expand All @@ -198,11 +197,13 @@ fn calculate_packet_timeout_time(timeout_delta: Duration) -> eyre::Result<u64> {

#[cfg(test)]
mod tests {
use asset::default_native_asset;

use super::*;
use crate::bridge_withdrawer::ethereum::astria_withdrawer_interface::SequencerWithdrawalFilter;

fn default_native_asset() -> asset::Denom {
"nria".parse().unwrap()
}

#[test]
fn event_to_bridge_unlock() {
let denom = default_native_asset();
Expand All @@ -217,7 +218,7 @@ mod tests {
};
let action = event_to_action(
event_with_meta,
denom.id(),
denom.clone(),
denom.clone(),
1,
crate::astria_address([99u8; 20]),
Expand All @@ -236,7 +237,7 @@ mod tests {
transaction_hash: [2u8; 32].into(),
})
.unwrap(),
fee_asset_id: denom.id(),
fee_asset: denom,
bridge_address: None,
};

Expand All @@ -258,7 +259,7 @@ mod tests {
let divisor = 10;
let action = event_to_action(
event_with_meta,
denom.id(),
denom.clone(),
denom.clone(),
divisor,
crate::astria_address([99u8; 20]),
Expand All @@ -277,7 +278,7 @@ mod tests {
transaction_hash: [2u8; 32].into(),
})
.unwrap(),
fee_asset_id: denom.id(),
fee_asset: denom,
bridge_address: None,
};

Expand All @@ -286,7 +287,7 @@ mod tests {

#[test]
fn event_to_ics20_withdrawal() {
let denom = "transfer/channel-0/utia".parse::<Denom>().unwrap();
let denom = "transfer/channel-0/utia".parse::<asset::Denom>().unwrap();
let destination_chain_address = crate::astria_address([1u8; 20]).to_string();
let event_with_meta = EventWithMetadata {
event: WithdrawalEvent::Ics20(Ics20WithdrawalFilter {
Expand All @@ -302,7 +303,7 @@ mod tests {
let bridge_address = crate::astria_address([99u8; 20]);
let action = event_to_action(
event_with_meta,
denom.id(),
denom.clone(),
denom.clone(),
1,
bridge_address,
Expand All @@ -329,7 +330,7 @@ mod tests {
transaction_hash: [2u8; 32],
})
.unwrap(),
fee_asset_id: denom.id(),
fee_asset: denom,
timeout_height: IbcHeight::new(u64::MAX, u64::MAX).unwrap(),
timeout_time: 0, // zero this for testing
source_channel: "channel-0".parse().unwrap(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ pub(crate) struct Watcher {

impl Watcher {
pub(crate) async fn run(mut self) -> Result<()> {
let (provider, contract, fee_asset_id, asset_withdrawal_divisor, next_rollup_block_height) =
let (provider, contract, fee_asset, asset_withdrawal_divisor, next_rollup_block_height) =
self.startup()
.await
.wrap_err("watcher failed to start up")?;
Expand All @@ -144,7 +144,7 @@ impl Watcher {
provider,
submitter_handle,
shutdown_token: shutdown_token.clone(),
fee_asset_id,
fee_asset,
rollup_asset_denom,
bridge_address,
asset_withdrawal_divisor,
Expand Down Expand Up @@ -197,13 +197,13 @@ impl Watcher {
) -> eyre::Result<(
Arc<Provider<Ws>>,
IAstriaWithdrawer<Provider<Ws>>,
asset::Id,
asset::Denom,
u128,
u64,
)> {
// wait for submitter to be ready
let SequencerStartupInfo {
fee_asset_id,
fee_asset,
next_batch_rollup_height,
} = self
.submitter_handle
Expand Down Expand Up @@ -262,7 +262,7 @@ impl Watcher {
Ok((
provider.clone(),
contract,
fee_asset_id,
fee_asset,
asset_withdrawal_divisor,
next_batch_rollup_height,
))
Expand Down Expand Up @@ -334,7 +334,7 @@ struct Batcher {
provider: Arc<Provider<Ws>>,
submitter_handle: submitter::Handle,
shutdown_token: CancellationToken,
fee_asset_id: asset::Id,
fee_asset: asset::Denom,
rollup_asset_denom: Denom,
bridge_address: Address,
asset_withdrawal_divisor: u128,
Expand Down Expand Up @@ -394,7 +394,7 @@ impl Batcher {
};
let action = event_to_action(
event_with_metadata,
self.fee_asset_id,
self.fee_asset.clone(),
self.rollup_asset_denom.clone(),
self.asset_withdrawal_divisor,
self.bridge_address,
Expand Down Expand Up @@ -445,9 +445,11 @@ fn address_from_string(s: &str) -> Result<ethers::types::Address> {

#[cfg(test)]
mod tests {
use asset::default_native_asset;
use astria_core::{
primitive::v1::Address,
primitive::v1::{
asset,
Address,
},
protocol::transaction::v1alpha1::Action,
};
use ethers::{
Expand Down Expand Up @@ -477,6 +479,10 @@ mod tests {
},
};

fn default_native_asset() -> asset::Denom {
"nria".parse().unwrap()
}

#[test]
fn address_from_string_prefix() {
let address = address_from_string("0x1234567890123456789012345678901234567890").unwrap();
Expand Down Expand Up @@ -567,7 +573,7 @@ mod tests {
let denom = default_native_asset();
let expected_action = event_to_action(
expected_event,
denom.id(),
denom.clone(),
denom.clone(),
1,
bridge_address,
Expand All @@ -583,7 +589,7 @@ mod tests {
let submitter_handle = submitter::Handle::new(startup_rx, batch_tx);
startup_tx
.send(SequencerStartupInfo {
fee_asset_id: denom.id(),
fee_asset: denom.clone(),
next_batch_rollup_height: 0,
})
.unwrap();
Expand Down Expand Up @@ -666,7 +672,7 @@ mod tests {
let denom = "transfer/channel-0/utia".parse::<Denom>().unwrap();
let Action::Ics20Withdrawal(mut expected_action) = event_to_action(
expected_event,
denom.id(),
denom.clone(),
denom.clone(),
1,
bridge_address,
Expand All @@ -682,7 +688,7 @@ mod tests {
let submitter_handle = submitter::Handle::new(startup_rx, batch_tx);
startup_tx
.send(SequencerStartupInfo {
fee_asset_id: denom.id(),
fee_asset: denom.clone(),
next_batch_rollup_height: 0,
})
.unwrap();
Expand All @@ -693,7 +699,7 @@ mod tests {
submitter_handle,
shutdown_token: CancellationToken::new(),
state: Arc::new(State::new()),
rollup_asset_denom: denom,
rollup_asset_denom: denom.clone(),
bridge_address,
sequencer_address_prefix: crate::ASTRIA_ADDRESS_PREFIX.into(),
}
Expand Down Expand Up @@ -792,7 +798,7 @@ mod tests {
let bridge_address = crate::astria_address([1u8; 20]);
let expected_action = event_to_action(
expected_event,
denom.id(),
denom.clone(),
denom.clone(),
1,
bridge_address,
Expand All @@ -808,7 +814,7 @@ mod tests {
let submitter_handle = submitter::Handle::new(startup_rx, batch_tx);
startup_tx
.send(SequencerStartupInfo {
fee_asset_id: denom.id(),
fee_asset: denom.clone(),
next_batch_rollup_height: 0,
})
.unwrap();
Expand All @@ -819,7 +825,7 @@ mod tests {
submitter_handle,
shutdown_token: CancellationToken::new(),
state: Arc::new(State::new()),
rollup_asset_denom: denom,
rollup_asset_denom: denom.clone(),
bridge_address,
sequencer_address_prefix: crate::ASTRIA_ADDRESS_PREFIX.into(),
}
Expand Down Expand Up @@ -901,7 +907,7 @@ mod tests {
let bridge_address = crate::astria_address([1u8; 20]);
let Action::Ics20Withdrawal(mut expected_action) = event_to_action(
expected_event,
denom.id(),
denom.clone(),
denom.clone(),
1,
bridge_address,
Expand All @@ -917,7 +923,7 @@ mod tests {
let submitter_handle = submitter::Handle::new(startup_rx, batch_tx);
startup_tx
.send(SequencerStartupInfo {
fee_asset_id: asset::Id::from_str_unchecked("transfer/channel-0/utia"),
fee_asset: "transfer/channel-0/utia".parse().unwrap(),
next_batch_rollup_height: 0,
})
.unwrap();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ impl BridgeWithdrawer {
sequencer_key_path,
sequencer_address_prefix: sequencer_address_prefix.clone(),
state: state.clone(),
expected_fee_asset_id: asset::Id::from_str_unchecked(&fee_asset_denomination),
expected_fee_asset: fee_asset_denomination,
min_expected_fee_asset_balance: u128::from(min_expected_fee_asset_balance),
metrics,
}
Expand Down Expand Up @@ -202,7 +202,7 @@ impl BridgeWithdrawer {

#[derive(Debug)]
pub struct SequencerStartupInfo {
pub fee_asset_id: asset::Id,
pub fee_asset: asset::Denom,
pub next_batch_rollup_height: u64,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ pub(crate) struct Builder {
pub(crate) sequencer_chain_id: String,
pub(crate) sequencer_cometbft_endpoint: String,
pub(crate) state: Arc<State>,
pub(crate) expected_fee_asset_id: asset::Id,
pub(crate) expected_fee_asset: asset::Denom,
pub(crate) min_expected_fee_asset_balance: u128,
pub(crate) metrics: &'static Metrics,
}
Expand All @@ -77,7 +77,7 @@ impl Builder {
sequencer_chain_id,
sequencer_cometbft_endpoint,
state,
expected_fee_asset_id,
expected_fee_asset,
min_expected_fee_asset_balance,
metrics,
} = self;
Expand Down Expand Up @@ -106,7 +106,7 @@ impl Builder {
signer,
sequencer_chain_id,
startup_tx,
expected_fee_asset_id,
expected_fee_asset,
min_expected_fee_asset_balance,
metrics,
},
Expand Down
Loading