Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
379285e
Migrate quote DTO to alloy
jmg-duarte Nov 7, 2025
a360fb3
Migrate the native price estimation endpoint and trait to alloy
jmg-duarte Nov 7, 2025
1cf04a3
Clippy
jmg-duarte Nov 7, 2025
cffad67
Merge branch 'jmgd/alloy/quote-dto' into jmgd/alloy/native-price
jmg-duarte Nov 7, 2025
09209ba
Migrate get_orders_by_tx endpoint to alloy
jmg-duarte Nov 7, 2025
2873159
Merge branch 'main' into jmgd/alloy/quote-dto
jmg-duarte Nov 7, 2025
7b2c90e
Merge branch 'jmgd/alloy/quote-dto' into jmgd/alloy/native-price
jmg-duarte Nov 7, 2025
0c8d469
fix compilation error
jmg-duarte Nov 7, 2025
dd25d86
Merge branch 'jmgd/alloy/native-price' into jmgd/alloy/get_orders_by_tx
jmg-duarte Nov 7, 2025
cd115d9
Migrate solver competition endpoint to alloy
jmg-duarte Nov 7, 2025
93293d7
Migrate get_token_metadata endpoint to alloy
jmg-duarte Nov 7, 2025
38f47fb
Migrate get_total_surplus_endpoint to alloy
jmg-duarte Nov 7, 2025
e5b1671
Migrate get_trades endpoint to alloy
jmg-duarte Nov 7, 2025
f5018ab
Migrate get_user_orders endpoint to alloy
jmg-duarte Nov 7, 2025
7e4b069
Migrate orderbook::database::auction_prices to alloy
jmg-duarte Nov 7, 2025
8b15cd9
Migrate orderbook::database::solver_competition to alloy
jmg-duarte Nov 10, 2025
d104971
Migrate orderbook::database::solver_competition_v2 into alloy
jmg-duarte Nov 10, 2025
cb99ac4
compilation fix
jmg-duarte Nov 10, 2025
f10166b
Migrate OrderMetadata and OnchainOrderData models to alloy
jmg-duarte Nov 10, 2025
3b939f0
Merge branch 'main' into jmgd/alloy/models_order_data
jmg-duarte Nov 20, 2025
9e23e12
compilation fixes
jmg-duarte Nov 20, 2025
9543cc4
Migrate orderbook::orderbook to alloy
jmg-duarte Nov 20, 2025
e2b30b3
Migrate orderbook::quoter into alloy
jmg-duarte Nov 24, 2025
ee05631
force uint sizes through types
jmg-duarte Nov 24, 2025
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 crates/autopilot/src/boundary/order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ pub fn to_domain(
.receiver
.map(IntoLegacy::into_legacy)
.map(Into::into),
owner: order.metadata.owner.into(),
owner: order.metadata.owner.into_legacy().into(),
partially_fillable: order.data.partially_fillable,
executed: remaining_order.executed_amount.into(),
pre_interactions: if order_is_untouched {
Expand Down
2 changes: 1 addition & 1 deletion crates/autopilot/src/domain/fee/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ impl ProtocolFees {
let partner_fee =
Self::get_partner_fee(&order, &reference_quote, self.max_partner_fee.into());

if surplus_capturing_jit_order_owners.contains(&order.metadata.owner.into()) {
if surplus_capturing_jit_order_owners.contains(&order.metadata.owner.into_legacy().into()) {
return boundary::order::to_domain(order, partner_fee, quote);
}

Expand Down
12 changes: 7 additions & 5 deletions crates/autopilot/src/solvable_orders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -453,14 +453,16 @@ impl SolvableOrdersCache {
/// users.
async fn find_banned_user_orders(orders: &[Order], banned_users: &banned::Users) -> Vec<OrderUid> {
let banned = banned_users
.banned(orders.iter().flat_map(|order| {
std::iter::once(order.metadata.owner.into_alloy()).chain(order.data.receiver)
}))
.banned(
orders
.iter()
.flat_map(|order| std::iter::once(order.metadata.owner).chain(order.data.receiver)),
)
.await;
orders
.iter()
.filter_map(|order| {
std::iter::once(order.metadata.owner.into_alloy())
std::iter::once(order.metadata.owner)
.chain(order.data.receiver)
.any(|addr| banned.contains(&addr))
.then_some(order.metadata.uid)
Expand Down Expand Up @@ -1206,7 +1208,7 @@ mod tests {
.enumerate()
.map(|(i, owner)| Order {
metadata: OrderMetadata {
owner,
owner: owner.into_alloy(),
uid: OrderUid([i as u8; 56]),
..Default::default()
},
Expand Down
7 changes: 2 additions & 5 deletions crates/e2e/tests/e2e/ethflow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -596,10 +596,7 @@ async fn test_order_parameters(
) {
// Expected values from actual EIP1271 order instead of eth-flow order
assert_eq!(response.data.valid_to, u32::MAX);
assert_eq!(
response.metadata.owner,
ethflow_contract.address().into_legacy()
);
assert_eq!(response.metadata.owner, *ethflow_contract.address());
assert_eq!(response.data.sell_token, *contracts.weth.address());

// Specific parameters return the missing values
Expand All @@ -613,7 +610,7 @@ async fn test_order_parameters(
assert_eq!(
response.metadata.onchain_order_data,
Some(OnchainOrderData {
sender: *owner,
sender: owner.into_alloy(),
placement_error: None,
})
);
Expand Down
22 changes: 11 additions & 11 deletions crates/model/src/order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ impl OrderBuilder {
domain: &DomainSeparator,
key: SecretKeyRef,
) -> Self {
self.0.metadata.owner = key.address();
self.0.metadata.owner = Address::new(key.address().0);
self.0.metadata.uid = self.0.data.uid(domain, &key.address());
self.0.signature =
EcdsaSignature::sign(signing_scheme, domain, &self.0.data.hash_struct(), key)
Expand All @@ -170,13 +170,13 @@ impl OrderBuilder {
}

pub fn with_eip1271(mut self, owner: H160, signature: Vec<u8>) -> Self {
self.0.metadata.owner = owner;
self.0.metadata.owner = Address::new(owner.0);
self.0.signature = Signature::Eip1271(signature);
self
}

pub fn with_presign(mut self, owner: H160) -> Self {
self.0.metadata.owner = owner;
self.0.metadata.owner = Address::new(owner.0);
self.0.signature = Signature::PreSign;
self
}
Expand Down Expand Up @@ -707,7 +707,7 @@ pub enum OnchainOrderPlacementError {
#[derive(Eq, PartialEq, Clone, Default, Deserialize, Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct OnchainOrderData {
pub sender: H160,
pub sender: Address,
pub placement_error: Option<OnchainOrderPlacementError>,
}

Expand All @@ -717,7 +717,7 @@ pub struct OnchainOrderData {
#[serde(rename_all = "camelCase")]
pub struct OrderMetadata {
pub creation_date: DateTime<Utc>,
pub owner: H160,
pub owner: Address,
pub uid: OrderUid,
/// deprecated, always set to null
#[serde_as(as = "Option<HexOrDecimalU256>")]
Expand All @@ -734,18 +734,18 @@ pub struct OrderMetadata {
pub executed_fee_amount: U256,
#[serde_as(as = "HexOrDecimalU256")]
pub executed_fee: U256,
pub executed_fee_token: H160,
pub executed_fee_token: Address,
pub invalidated: bool,
pub status: OrderStatus,
#[serde(flatten)]
pub class: OrderClass,
pub settlement_contract: H160,
pub settlement_contract: Address,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ethflow_data: Option<EthflowData>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub onchain_order_data: Option<OnchainOrderData>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub onchain_user: Option<H160>,
pub onchain_user: Option<Address>,
pub is_liquidity_order: bool,
/// Full app data that `OrderData::app_data` is a hash of. Can be None if
/// the backend doesn't know about the full app data.
Expand Down Expand Up @@ -1139,18 +1139,18 @@ mod tests {
metadata: OrderMetadata {
creation_date: Utc.timestamp_millis_opt(3_000).unwrap(),
class: OrderClass::Limit,
owner: H160::from_low_u64_be(1),
owner: Address::with_last_byte(1),
uid: OrderUid([17u8; 56]),
available_balance: None,
executed_buy_amount: BigUint::from_bytes_be(&[3]),
executed_sell_amount: BigUint::from_bytes_be(&[5]),
executed_sell_amount_before_fees: 4.into(),
executed_fee_amount: 1.into(),
executed_fee: 1.into(),
executed_fee_token: H160::from_low_u64_be(10),
executed_fee_token: Address::with_last_byte(10),
invalidated: true,
status: OrderStatus::Open,
settlement_contract: H160::from_low_u64_be(2),
settlement_contract: Address::with_last_byte(2),
full_app_data: Some("123".to_string()),
..Default::default()
},
Expand Down
23 changes: 12 additions & 11 deletions crates/orderbook/src/database/orders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ async fn insert_order(order: &Order, ex: &mut PgConnection) -> Result<(), Insert

let db_order = database::orders::Order {
uid: order_uid,
owner: ByteArray(order.metadata.owner.0),
owner: ByteArray(order.metadata.owner.0.0),
creation_timestamp: order.metadata.creation_date,
sell_token: ByteArray(order.data.sell_token.0.0),
buy_token: ByteArray(order.data.buy_token.0.0),
Expand All @@ -180,7 +180,7 @@ async fn insert_order(order: &Order, ex: &mut PgConnection) -> Result<(), Insert
partially_fillable: order.data.partially_fillable,
signature: order.signature.to_bytes(),
signing_scheme: signing_scheme_into(order.signature.scheme()),
settlement_contract: ByteArray(order.metadata.settlement_contract.0),
settlement_contract: ByteArray(order.metadata.settlement_contract.0.0),
sell_token_balance: sell_token_source_into(order.data.sell_token_balance),
buy_token_balance: buy_token_destination_into(order.data.buy_token_balance),
cancellation_timestamp: None,
Expand Down Expand Up @@ -543,7 +543,9 @@ fn full_order_with_quote_into_model_order(
} else {
None
};
let onchain_user = order.onchain_user.map(|onchain_user| H160(onchain_user.0));
let onchain_user = order
.onchain_user
.map(|onchain_user| Address::new(onchain_user.0));
let class = order_class_from(&order);
let onchain_placement_error = onchain_order_placement_error_from(&order);
let onchain_order_data = onchain_user.map(|onchain_user| OnchainOrderData {
Expand All @@ -553,7 +555,7 @@ fn full_order_with_quote_into_model_order(

let metadata = OrderMetadata {
creation_date: order.creation_timestamp,
owner: H160(order.owner.0),
owner: Address::new(order.owner.0),
uid: OrderUid(order.uid.0),
available_balance: Default::default(),
executed_buy_amount: big_decimal_to_big_uint(&order.sum_buy)
Expand All @@ -571,12 +573,12 @@ fn full_order_with_quote_into_model_order(
.context("executed fee amount is not a valid u256")?,
executed_fee: big_decimal_to_u256(&order.executed_fee)
.context("executed fee is not a valid u256")?,
executed_fee_token: H160(order.executed_fee_token.0),
executed_fee_token: Address::new(order.executed_fee_token.0),
invalidated: order.invalidated,
status,
is_liquidity_order: class == OrderClass::Liquidity,
class,
settlement_contract: H160(order.settlement_contract.0),
settlement_contract: Address::new(order.settlement_contract.0),
ethflow_data,
onchain_user,
onchain_order_data,
Expand Down Expand Up @@ -652,7 +654,6 @@ mod tests {
SigningScheme as DbSigningScheme,
},
},
ethrpc::alloy::conversions::IntoAlloy,
model::{
interaction::InteractionData,
order::{Order, OrderData, OrderMetadata, OrderStatus, OrderUid},
Expand Down Expand Up @@ -879,7 +880,7 @@ mod tests {
#[tokio::test]
#[ignore]
async fn postgres_replace_order() {
let owner = H160([0x77; 20]);
let owner = Address::repeat_byte(0x77);

let db = Postgres::try_new("postgresql://").unwrap();
database::clear_DANGER(&db.pool).await.unwrap();
Expand Down Expand Up @@ -916,7 +917,7 @@ mod tests {
.unwrap();

let order_statuses = db
.user_orders(&owner.into_alloy(), 0, None)
.user_orders(&owner, 0, None)
.await
.unwrap()
.iter()
Expand Down Expand Up @@ -945,7 +946,7 @@ mod tests {
#[tokio::test]
#[ignore]
async fn postgres_replace_order_no_cancellation_on_error() {
let owner = H160([0x77; 20]);
let owner = Address::repeat_byte(0x77);

let db = Postgres::try_new("postgresql://").unwrap();
database::clear_DANGER(&db.pool).await.unwrap();
Expand Down Expand Up @@ -1020,7 +1021,7 @@ mod tests {
let insert_presignature = |signed: bool| {
let db = db.clone();
let block_number = &block_number;
let owner = order.metadata.owner.as_bytes();
let owner = order.metadata.owner.as_slice();
async move {
sqlx::query(
"INSERT INTO presignature_events (block_number, log_index, owner, order_uid, \
Expand Down
31 changes: 17 additions & 14 deletions crates/orderbook/src/orderbook.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use {
bigdecimal::ToPrimitive,
chrono::Utc,
database::order_events::OrderEventLabel,
ethrpc::alloy::conversions::IntoLegacy,
ethrpc::alloy::conversions::{IntoAlloy, IntoLegacy},
model::{
DomainSeparator,
order::{
Expand All @@ -29,7 +29,6 @@ use {
solver_competition::{self, SolverCompetitionAPI},
},
observe::metrics::LivenessChecking,
primitive_types::H160,
shared::{
fee::FeeParameters,
order_quoting::Quote,
Expand Down Expand Up @@ -217,21 +216,21 @@ pub enum OrderReplacementError {
#[derive(Debug)]
pub struct QuoteMetadata {
pub id: Option<QuoteId>,
pub solver: H160,
pub solver: Address,
}

impl From<&Quote> for QuoteMetadata {
fn from(value: &Quote) -> Self {
Self {
id: value.id,
solver: value.data.solver,
solver: value.data.solver.into_alloy(),
}
}
}

pub struct Orderbook {
domain_separator: DomainSeparator,
settlement_contract: H160,
settlement_contract: Address,
database: crate::database::Postgres,
database_replica: crate::database::Postgres,
order_validator: Arc<dyn OrderValidating>,
Expand All @@ -242,7 +241,7 @@ pub struct Orderbook {
impl Orderbook {
pub fn new(
domain_separator: DomainSeparator,
settlement_contract: H160,
settlement_contract: Address,
database: crate::database::Postgres,
database_replica: crate::database::Postgres,
order_validator: Arc<dyn OrderValidating>,
Expand Down Expand Up @@ -287,7 +286,7 @@ impl Orderbook {
.validate_and_construct_order(
payload,
&self.domain_separator,
self.settlement_contract,
self.settlement_contract.into_legacy(),
full_app_data_override,
)
.await?;
Expand Down Expand Up @@ -349,7 +348,10 @@ impl Orderbook {
let signer = cancellation
.validate(&self.domain_separator)
.map_err(|_| OrderCancellationError::InvalidSignature)?;
if orders.iter().any(|order| signer != order.metadata.owner) {
if orders
.iter()
.any(|order| signer != order.metadata.owner.into_legacy())
{
return Err(OrderCancellationError::WrongOwner);
};

Expand Down Expand Up @@ -379,7 +381,7 @@ impl Orderbook {
let signer = cancellation
.validate(&self.domain_separator)
.map_err(|_| OrderCancellationError::InvalidSignature)?;
if signer != order.metadata.owner {
if signer != order.metadata.owner.into_legacy() {
return Err(OrderCancellationError::WrongOwner);
};

Expand Down Expand Up @@ -633,6 +635,7 @@ mod tests {
super::*,
crate::database::orders::MockOrderStoring,
ethcontract::H160,
ethrpc::alloy::conversions::{IntoAlloy, IntoLegacy},
mockall::predicate::eq,
model::{
order::{OrderData, OrderMetadata},
Expand All @@ -647,7 +650,7 @@ mod tests {
let old_order = Order {
metadata: OrderMetadata {
uid: OrderUid([1; 56]),
owner: H160([1; 20]),
owner: Address::new([1; 20]),
..Default::default()
},
data: OrderData {
Expand Down Expand Up @@ -675,7 +678,7 @@ mod tests {
Ok((
Order {
metadata: OrderMetadata {
owner: creation.from.unwrap(),
owner: creation.from.unwrap().into_alloy(),
uid: new_order_uid,
..Default::default()
},
Expand All @@ -702,7 +705,7 @@ mod tests {
database_replica,
order_validator: Arc::new(order_validator),
domain_separator: Default::default(),
settlement_contract: H160([0xba; 20]),
settlement_contract: Address::repeat_byte(0xba),
app_data,
active_order_competition_threshold: Default::default(),
};
Expand Down Expand Up @@ -751,7 +754,7 @@ mod tests {
assert!(matches!(
orderbook
.add_order(OrderCreation {
from: Some(old_order.metadata.owner),
from: Some(old_order.metadata.owner.into_legacy()),
signature: Signature::PreSign,
app_data: OrderCreationAppData::Full {
full: format!(
Expand All @@ -770,7 +773,7 @@ mod tests {
// Stars align...
let (order_id, _) = orderbook
.add_order(OrderCreation {
from: Some(old_order.metadata.owner),
from: Some(old_order.metadata.owner.into_legacy()),
signature: Signature::Eip712(Default::default()),
app_data: OrderCreationAppData::Full {
full: format!(
Expand Down
Loading
Loading