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
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ pub(crate) fn event_to_action(
rollup_asset_denom: asset::Denom,
asset_withdrawal_divisor: u128,
bridge_address: Address,
sequencer_address_prefix: &str,
) -> eyre::Result<Action> {
let action = match event_with_metadata.event {
WithdrawalEvent::Sequencer(event) => event_to_bridge_unlock(
Expand All @@ -76,7 +75,6 @@ pub(crate) fn event_to_action(
rollup_asset_denom,
asset_withdrawal_divisor,
bridge_address,
sequencer_address_prefix,
)
.wrap_err("failed to convert ics20 withdrawal event to action")?,
};
Expand Down Expand Up @@ -128,12 +126,10 @@ fn event_to_ics20_withdrawal(
rollup_asset_denom: asset::Denom,
asset_withdrawal_divisor: u128,
bridge_address: Address,
sequencer_address_prefix: &str,
) -> eyre::Result<Action> {
// TODO: make this configurable
const ICS20_WITHDRAWAL_TIMEOUT: Duration = Duration::from_secs(300);

let sender = event.sender.to_fixed_bytes();
let denom = rollup_asset_denom.clone();

let channel = denom
Expand All @@ -143,23 +139,15 @@ fn event_to_ics20_withdrawal(

let memo = Ics20WithdrawalFromRollupMemo {
memo: event.memo,
bridge_address,
block_number: block_number.as_u64(),
rollup_return_address: event.sender.to_string(),
transaction_hash: transaction_hash.into(),
};

let action = Ics20Withdrawal {
denom: rollup_asset_denom,
destination_chain_address: event.destination_chain_address,
// note: this is actually a rollup address; we expect failed ics20 withdrawals to be
// returned to the rollup.
// this is only ok for now because addresses on the sequencer and the rollup are both 20
// bytes, but this won't work otherwise.
return_address: Address::builder()
.array(sender)
.prefix(sequencer_address_prefix)
.try_build()
.wrap_err("failed to construct return address")?,
return_address: bridge_address,
amount: event
.amount
.as_u128()
Expand Down Expand Up @@ -221,7 +209,6 @@ mod tests {
denom.clone(),
1,
bridge_address,
crate::ASTRIA_ADDRESS_PREFIX,
)
.unwrap();
let Action::BridgeUnlock(action) = action else {
Expand Down Expand Up @@ -263,7 +250,6 @@ mod tests {
denom.clone(),
divisor,
bridge_address,
crate::ASTRIA_ADDRESS_PREFIX,
)
.unwrap();
let Action::BridgeUnlock(action) = action else {
Expand Down Expand Up @@ -307,7 +293,6 @@ mod tests {
denom.clone(),
1,
bridge_address,
crate::ASTRIA_ADDRESS_PREFIX,
)
.unwrap();
let Action::Ics20Withdrawal(mut action) = action else {
Expand All @@ -321,12 +306,12 @@ mod tests {
let expected_action = Ics20Withdrawal {
denom: denom.clone(),
destination_chain_address,
return_address: crate::astria_address([0u8; 20]),
return_address: bridge_address,
amount: 99,
memo: serde_json::to_string(&Ics20WithdrawalFromRollupMemo {
memo: "hello".to_string(),
bridge_address,
block_number: 1u64,
rollup_return_address: ethers::types::Address::from([0u8; 20]).to_string(),
transaction_hash: [2u8; 32],
})
.unwrap(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ pub(crate) struct Builder {
pub(crate) rollup_asset_denom: Denom,
pub(crate) bridge_address: Address,
pub(crate) submitter_handle: submitter::Handle,
pub(crate) sequencer_address_prefix: String,
}

impl Builder {
Expand All @@ -89,7 +88,6 @@ impl Builder {
rollup_asset_denom,
bridge_address,
submitter_handle,
sequencer_address_prefix,
} = self;

let contract_address = address_from_string(&ethereum_contract_address)
Expand All @@ -114,7 +112,6 @@ impl Builder {
shutdown_token: shutdown_token.clone(),
startup_handle,
submitter_handle,
sequencer_address_prefix,
})
}
}
Expand All @@ -129,7 +126,6 @@ pub(crate) struct Watcher {
rollup_asset_denom: Denom,
bridge_address: Address,
state: Arc<State>,
sequencer_address_prefix: String,
}

impl Watcher {
Expand All @@ -145,7 +141,6 @@ impl Watcher {
state,
shutdown_token,
submitter_handle,
sequencer_address_prefix,
..
} = self;

Expand All @@ -154,7 +149,6 @@ impl Watcher {
rollup_asset_denom,
bridge_address,
asset_withdrawal_divisor,
sequencer_address_prefix,
};

state.set_watcher_ready();
Expand Down Expand Up @@ -497,7 +491,6 @@ struct EventToActionConvertConfig {
rollup_asset_denom: Denom,
bridge_address: Address,
asset_withdrawal_divisor: u128,
sequencer_address_prefix: String,
}

impl EventToActionConvertConfig {
Expand All @@ -508,7 +501,6 @@ impl EventToActionConvertConfig {
self.rollup_asset_denom.clone(),
self.asset_withdrawal_divisor,
self.bridge_address,
&self.sequencer_address_prefix,
)
}
}
Expand Down Expand Up @@ -670,7 +662,6 @@ mod tests {
state: Arc::new(State::new()),
rollup_asset_denom: denom.clone(),
bridge_address,
sequencer_address_prefix: crate::ASTRIA_ADDRESS_PREFIX.into(),
}
.build()
.unwrap();
Expand All @@ -686,15 +677,8 @@ mod tests {
block_number: receipt.block_number.unwrap(),
transaction_hash: receipt.transaction_hash,
};
let expected_action = event_to_action(
expected_event,
denom.clone(),
denom,
1,
bridge_address,
crate::ASTRIA_ADDRESS_PREFIX,
)
.unwrap();
let expected_action =
event_to_action(expected_event, denom.clone(), denom, 1, bridge_address).unwrap();
let Action::BridgeUnlock(expected_action) = expected_action else {
panic!("expected action to be BridgeUnlock, got {expected_action:?}");
};
Expand Down Expand Up @@ -743,7 +727,6 @@ mod tests {
denom.clone(),
1,
bridge_address,
crate::ASTRIA_ADDRESS_PREFIX,
)
.unwrap();
let Action::BridgeUnlock(expected_action) = expected_action else {
Expand All @@ -768,7 +751,6 @@ mod tests {
rollup_asset_denom: denom.clone(),
bridge_address,
submitter_handle: submitter::Handle::new(batch_tx),
sequencer_address_prefix: crate::ASTRIA_ADDRESS_PREFIX.into(),
}
.build()
.unwrap();
Expand Down Expand Up @@ -849,7 +831,6 @@ mod tests {
rollup_asset_denom: denom.clone(),
bridge_address,
submitter_handle: submitter::Handle::new(batch_tx),
sequencer_address_prefix: crate::ASTRIA_ADDRESS_PREFIX.into(),
}
.build()
.unwrap();
Expand All @@ -874,7 +855,6 @@ mod tests {
denom.clone(),
1,
bridge_address,
crate::ASTRIA_ADDRESS_PREFIX,
)
.unwrap() else {
panic!("expected action to be Ics20Withdrawal");
Expand Down Expand Up @@ -976,7 +956,6 @@ mod tests {
rollup_asset_denom: denom.clone(),
bridge_address,
submitter_handle: submitter::Handle::new(batch_tx),
sequencer_address_prefix: crate::ASTRIA_ADDRESS_PREFIX.into(),
}
.build()
.unwrap();
Expand All @@ -999,7 +978,6 @@ mod tests {
denom.clone(),
1,
bridge_address,
crate::ASTRIA_ADDRESS_PREFIX,
)
.unwrap();
let Action::BridgeUnlock(expected_action) = expected_action else {
Expand Down Expand Up @@ -1078,7 +1056,6 @@ mod tests {
rollup_asset_denom: denom.clone(),
bridge_address,
submitter_handle: submitter::Handle::new(batch_tx),
sequencer_address_prefix: crate::ASTRIA_ADDRESS_PREFIX.into(),
}
.build()
.unwrap();
Expand Down Expand Up @@ -1107,7 +1084,6 @@ mod tests {
denom.clone(),
1,
bridge_address,
crate::ASTRIA_ADDRESS_PREFIX,
)
.unwrap() else {
panic!("expected action to be Ics20Withdrawal");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ impl BridgeWithdrawer {
.wrap_err("failed to parse ROLLUP_ASSET_DENOMINATION as Denom")?,
bridge_address: sequencer_bridge_address,
submitter_handle,
sequencer_address_prefix: sequencer_address_prefix.clone(),
}
.build()
.wrap_err("failed to build ethereum watcher")?;
Expand Down Expand Up @@ -410,16 +409,14 @@ pub(crate) fn flatten_result<T>(res: Result<eyre::Result<T>, JoinError>) -> eyre
}

#[cfg(test)]
pub(crate) const ASTRIA_ADDRESS_PREFIX: &str = "astria";

/// Constructs an [`Address`] prefixed by `"astria"`.
#[cfg(test)]
pub(crate) fn astria_address(
array: [u8; astria_core::primitive::v1::ADDRESS_LEN],
) -> astria_core::primitive::v1::Address {
astria_core::primitive::v1::Address::builder()
.array(array)
.prefix(ASTRIA_ADDRESS_PREFIX)
.prefix("astria")
.try_build()
.unwrap()
}
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,8 @@ fn make_ics20_withdrawal_action() -> Action {
amount: 99,
memo: serde_json::to_string(&Ics20WithdrawalFromRollupMemo {
memo: "hello".to_string(),
bridge_address: crate::astria_address([0u8; 20]),
block_number: DEFAULT_LAST_ROLLUP_HEIGHT,
rollup_return_address: ethers::types::Address::from([0u8; 20]).to_string(),
transaction_hash: [2u8; 32],
})
.unwrap(),
Expand Down
7 changes: 2 additions & 5 deletions crates/astria-bridge-withdrawer/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@ mod build_info;
pub(crate) mod config;
pub(crate) mod metrics;

pub use bridge_withdrawer::BridgeWithdrawer;
#[cfg(test)]
pub(crate) use bridge_withdrawer::{
astria_address,
ASTRIA_ADDRESS_PREFIX,
};
pub(crate) use bridge_withdrawer::astria_address;
pub use bridge_withdrawer::BridgeWithdrawer;
pub use build_info::BUILD_INFO;
pub use config::Config;
16 changes: 6 additions & 10 deletions crates/astria-core/src/bridge.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
use crate::primitive::v1::Address;

#[derive(Clone, Debug)]
#[cfg_attr(
feature = "serde",
derive(serde::Serialize),
derive(serde::Deserialize)
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
pub struct UnlockMemo {
pub block_number: u64,
Expand All @@ -24,12 +23,13 @@ pub struct UnlockMemo {
#[cfg_attr(
feature = "serde",
derive(serde::Serialize),
derive(serde::Deserialize)
derive(serde::Deserialize),
serde(rename_all = "camelCase", deny_unknown_fields)
)]
pub struct Ics20WithdrawalFromRollupMemo {
pub memo: String,
pub bridge_address: Address,
pub block_number: u64,
pub rollup_return_address: String,
#[cfg_attr(
feature = "serde",
serde(
Expand Down Expand Up @@ -72,12 +72,8 @@ mod test {
fn ics20_withdrawal_from_rollup_memo_snapshot() {
let memo = Ics20WithdrawalFromRollupMemo {
memo: "hello".to_string(),
bridge_address: Address::builder()
.array([99; 20])
.prefix("astria")
.try_build()
.unwrap(),
block_number: 1,
rollup_return_address: "rollup-defined".to_string(),
transaction_hash: [88; 32],
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ source: crates/astria-core/src/bridge.rs
expression: memo
---
{
"block_number": 42,
"transaction_hash": "WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg="
"blockNumber": 42,
"transactionHash": "WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg="
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ expression: memo
---
{
"memo": "hello",
"bridge_address": {
"bech32m": "astria1vd3kxcmrvd3kxcmrvd3kxcmrvd3kxcmrj6p6kl"
},
"block_number": 1,
"transaction_hash": "WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg="
"blockNumber": 1,
"rollupReturnAddress": "rollup-defined",
"transactionHash": "WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg="
}
Loading