Skip to content

Commit f10166b

Browse files
committed
Migrate OrderMetadata and OnchainOrderData models to alloy
1 parent cb99ac4 commit f10166b

File tree

11 files changed

+59
-50
lines changed

11 files changed

+59
-50
lines changed

crates/autopilot/src/boundary/order.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use {
2-
crate::{domain, domain::eth},
2+
crate::domain::{self, eth},
3+
ethrpc::alloy::conversions::IntoLegacy,
34
shared::remaining_amounts,
45
};
56

@@ -26,7 +27,7 @@ pub fn to_domain(
2627
valid_to: order.data.valid_to,
2728
side: order.data.kind.into(),
2829
receiver: order.data.receiver.map(Into::into),
29-
owner: order.metadata.owner.into(),
30+
owner: order.metadata.owner.into_legacy().into(),
3031
partially_fillable: order.data.partially_fillable,
3132
executed: remaining_order.executed_amount.into(),
3233
pre_interactions: if order_is_untouched {

crates/autopilot/src/domain/fee/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ impl ProtocolFees {
217217
let partner_fee =
218218
Self::get_partner_fee(&order, &reference_quote, self.max_partner_fee.into());
219219

220-
if surplus_capturing_jit_order_owners.contains(&order.metadata.owner.into()) {
220+
if surplus_capturing_jit_order_owners.contains(&order.metadata.owner.into_legacy().into()) {
221221
return boundary::order::to_domain(order, partner_fee, quote);
222222
}
223223

crates/autopilot/src/solvable_orders.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -444,16 +444,14 @@ async fn find_banned_user_orders(orders: &[Order], banned_users: &banned::Users)
444444
let banned = banned_users
445445
.banned(orders.iter().flat_map(|order| {
446446
std::iter::once(order.metadata.owner)
447-
.chain(order.data.receiver)
448-
.map(IntoAlloy::into_alloy)
447+
.chain(order.data.receiver.map(IntoAlloy::into_alloy))
449448
}))
450449
.await;
451450
orders
452451
.iter()
453452
.filter_map(|order| {
454453
std::iter::once(order.metadata.owner)
455-
.chain(order.data.receiver)
456-
.map(IntoAlloy::into_alloy)
454+
.chain(order.data.receiver.map(IntoAlloy::into_alloy))
457455
.any(|addr| banned.contains(&addr))
458456
.then_some(order.metadata.uid)
459457
})
@@ -1173,7 +1171,7 @@ mod tests {
11731171
.enumerate()
11741172
.map(|(i, owner)| Order {
11751173
metadata: OrderMetadata {
1176-
owner,
1174+
owner: owner.into_alloy(),
11771175
uid: OrderUid([i as u8; 56]),
11781176
..Default::default()
11791177
},

crates/e2e/tests/e2e/ethflow.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -596,10 +596,7 @@ async fn test_order_parameters(
596596
) {
597597
// Expected values from actual EIP1271 order instead of eth-flow order
598598
assert_eq!(response.data.valid_to, u32::MAX);
599-
assert_eq!(
600-
response.metadata.owner,
601-
ethflow_contract.address().into_legacy()
602-
);
599+
assert_eq!(response.metadata.owner, *ethflow_contract.address());
603600
assert_eq!(
604601
response.data.sell_token,
605602
contracts.weth.address().into_legacy()
@@ -616,7 +613,7 @@ async fn test_order_parameters(
616613
assert_eq!(
617614
response.metadata.onchain_order_data,
618615
Some(OnchainOrderData {
619-
sender: *owner,
616+
sender: owner.into_alloy(),
620617
placement_error: None,
621618
})
622619
);

crates/model/src/order.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ impl OrderBuilder {
161161
domain: &DomainSeparator,
162162
key: SecretKeyRef,
163163
) -> Self {
164-
self.0.metadata.owner = key.address();
164+
self.0.metadata.owner = Address::new(key.address().0);
165165
self.0.metadata.uid = self.0.data.uid(domain, &key.address());
166166
self.0.signature =
167167
EcdsaSignature::sign(signing_scheme, domain, &self.0.data.hash_struct(), key)
@@ -170,13 +170,13 @@ impl OrderBuilder {
170170
}
171171

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

178178
pub fn with_presign(mut self, owner: H160) -> Self {
179-
self.0.metadata.owner = owner;
179+
self.0.metadata.owner = Address::new(owner.0);
180180
self.0.signature = Signature::PreSign;
181181
self
182182
}
@@ -687,7 +687,7 @@ pub enum OnchainOrderPlacementError {
687687
#[derive(Eq, PartialEq, Clone, Default, Deserialize, Serialize, Debug)]
688688
#[serde(rename_all = "camelCase")]
689689
pub struct OnchainOrderData {
690-
pub sender: H160,
690+
pub sender: Address,
691691
pub placement_error: Option<OnchainOrderPlacementError>,
692692
}
693693

@@ -697,7 +697,7 @@ pub struct OnchainOrderData {
697697
#[serde(rename_all = "camelCase")]
698698
pub struct OrderMetadata {
699699
pub creation_date: DateTime<Utc>,
700-
pub owner: H160,
700+
pub owner: Address,
701701
pub uid: OrderUid,
702702
/// deprecated, always set to null
703703
#[serde_as(as = "Option<HexOrDecimalU256>")]
@@ -714,18 +714,18 @@ pub struct OrderMetadata {
714714
pub executed_fee_amount: U256,
715715
#[serde_as(as = "HexOrDecimalU256")]
716716
pub executed_fee: U256,
717-
pub executed_fee_token: H160,
717+
pub executed_fee_token: Address,
718718
pub invalidated: bool,
719719
pub status: OrderStatus,
720720
#[serde(flatten)]
721721
pub class: OrderClass,
722-
pub settlement_contract: H160,
722+
pub settlement_contract: Address,
723723
#[serde(default, skip_serializing_if = "Option::is_none")]
724724
pub ethflow_data: Option<EthflowData>,
725725
#[serde(default, skip_serializing_if = "Option::is_none")]
726726
pub onchain_order_data: Option<OnchainOrderData>,
727727
#[serde(default, skip_serializing_if = "Option::is_none")]
728-
pub onchain_user: Option<H160>,
728+
pub onchain_user: Option<Address>,
729729
pub is_liquidity_order: bool,
730730
/// Full app data that `OrderData::app_data` is a hash of. Can be None if
731731
/// the backend doesn't know about the full app data.
@@ -1119,18 +1119,18 @@ mod tests {
11191119
metadata: OrderMetadata {
11201120
creation_date: Utc.timestamp_millis_opt(3_000).unwrap(),
11211121
class: OrderClass::Limit,
1122-
owner: H160::from_low_u64_be(1),
1122+
owner: Address::with_last_byte(1),
11231123
uid: OrderUid([17u8; 56]),
11241124
available_balance: None,
11251125
executed_buy_amount: BigUint::from_bytes_be(&[3]),
11261126
executed_sell_amount: BigUint::from_bytes_be(&[5]),
11271127
executed_sell_amount_before_fees: 4.into(),
11281128
executed_fee_amount: 1.into(),
11291129
executed_fee: 1.into(),
1130-
executed_fee_token: H160::from_low_u64_be(10),
1130+
executed_fee_token: Address::with_last_byte(10),
11311131
invalidated: true,
11321132
status: OrderStatus::Open,
1133-
settlement_contract: H160::from_low_u64_be(2),
1133+
settlement_contract: Address::with_last_byte(2),
11341134
full_app_data: Some("123".to_string()),
11351135
..Default::default()
11361136
},

crates/orderbook/src/database/orders.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ async fn insert_order(order: &Order, ex: &mut PgConnection) -> Result<(), Insert
157157

158158
let db_order = database::orders::Order {
159159
uid: order_uid,
160-
owner: ByteArray(order.metadata.owner.0),
160+
owner: ByteArray(order.metadata.owner.0.0),
161161
creation_timestamp: order.metadata.creation_date,
162162
sell_token: ByteArray(order.data.sell_token.0),
163163
buy_token: ByteArray(order.data.buy_token.0),
@@ -172,7 +172,7 @@ async fn insert_order(order: &Order, ex: &mut PgConnection) -> Result<(), Insert
172172
partially_fillable: order.data.partially_fillable,
173173
signature: order.signature.to_bytes(),
174174
signing_scheme: signing_scheme_into(order.signature.scheme()),
175-
settlement_contract: ByteArray(order.metadata.settlement_contract.0),
175+
settlement_contract: ByteArray(order.metadata.settlement_contract.0.0),
176176
sell_token_balance: sell_token_source_into(order.data.sell_token_balance),
177177
buy_token_balance: buy_token_destination_into(order.data.buy_token_balance),
178178
cancellation_timestamp: None,
@@ -535,7 +535,9 @@ fn full_order_with_quote_into_model_order(
535535
} else {
536536
None
537537
};
538-
let onchain_user = order.onchain_user.map(|onchain_user| H160(onchain_user.0));
538+
let onchain_user = order
539+
.onchain_user
540+
.map(|onchain_user| Address::new(onchain_user.0));
539541
let class = order_class_from(&order);
540542
let onchain_placement_error = onchain_order_placement_error_from(&order);
541543
let onchain_order_data = onchain_user.map(|onchain_user| OnchainOrderData {
@@ -545,7 +547,7 @@ fn full_order_with_quote_into_model_order(
545547

546548
let metadata = OrderMetadata {
547549
creation_date: order.creation_timestamp,
548-
owner: H160(order.owner.0),
550+
owner: Address::new(order.owner.0),
549551
uid: OrderUid(order.uid.0),
550552
available_balance: Default::default(),
551553
executed_buy_amount: big_decimal_to_big_uint(&order.sum_buy)
@@ -563,12 +565,12 @@ fn full_order_with_quote_into_model_order(
563565
.context("executed fee amount is not a valid u256")?,
564566
executed_fee: big_decimal_to_u256(&order.executed_fee)
565567
.context("executed fee is not a valid u256")?,
566-
executed_fee_token: H160(order.executed_fee_token.0),
568+
executed_fee_token: Address::new(order.executed_fee_token.0),
567569
invalidated: order.invalidated,
568570
status,
569571
is_liquidity_order: class == OrderClass::Liquidity,
570572
class,
571-
settlement_contract: H160(order.settlement_contract.0),
573+
settlement_contract: Address::new(order.settlement_contract.0),
572574
ethflow_data,
573575
onchain_user,
574576
onchain_order_data,
@@ -641,7 +643,6 @@ mod tests {
641643
SigningScheme as DbSigningScheme,
642644
},
643645
},
644-
ethrpc::alloy::conversions::IntoAlloy,
645646
model::{
646647
interaction::InteractionData,
647648
order::{Order, OrderData, OrderMetadata, OrderStatus, OrderUid},
@@ -868,7 +869,7 @@ mod tests {
868869
#[tokio::test]
869870
#[ignore]
870871
async fn postgres_replace_order() {
871-
let owner = H160([0x77; 20]);
872+
let owner = Address::repeat_byte(0x77);
872873

873874
let db = Postgres::try_new("postgresql://").unwrap();
874875
database::clear_DANGER(&db.pool).await.unwrap();
@@ -905,7 +906,7 @@ mod tests {
905906
.unwrap();
906907

907908
let order_statuses = db
908-
.user_orders(&owner.into_alloy(), 0, None)
909+
.user_orders(&owner, 0, None)
909910
.await
910911
.unwrap()
911912
.iter()
@@ -934,7 +935,7 @@ mod tests {
934935
#[tokio::test]
935936
#[ignore]
936937
async fn postgres_replace_order_no_cancellation_on_error() {
937-
let owner = H160([0x77; 20]);
938+
let owner = Address::repeat_byte(0x77);
938939

939940
let db = Postgres::try_new("postgresql://").unwrap();
940941
database::clear_DANGER(&db.pool).await.unwrap();
@@ -1009,7 +1010,7 @@ mod tests {
10091010
let insert_presignature = |signed: bool| {
10101011
let db = db.clone();
10111012
let block_number = &block_number;
1012-
let owner = order.metadata.owner.as_bytes();
1013+
let owner = order.metadata.owner.as_slice();
10131014
async move {
10141015
sqlx::query(
10151016
"INSERT INTO presignature_events (block_number, log_index, owner, order_uid, \

crates/orderbook/src/orderbook.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use {
1313
bigdecimal::ToPrimitive,
1414
chrono::Utc,
1515
database::order_events::OrderEventLabel,
16+
ethrpc::alloy::conversions::IntoLegacy,
1617
model::{
1718
DomainSeparator,
1819
order::{
@@ -348,7 +349,10 @@ impl Orderbook {
348349
let signer = cancellation
349350
.validate(&self.domain_separator)
350351
.map_err(|_| OrderCancellationError::InvalidSignature)?;
351-
if orders.iter().any(|order| signer != order.metadata.owner) {
352+
if orders
353+
.iter()
354+
.any(|order| signer != order.metadata.owner.into_legacy())
355+
{
352356
return Err(OrderCancellationError::WrongOwner);
353357
};
354358

@@ -378,7 +382,7 @@ impl Orderbook {
378382
let signer = cancellation
379383
.validate(&self.domain_separator)
380384
.map_err(|_| OrderCancellationError::InvalidSignature)?;
381-
if signer != order.metadata.owner {
385+
if signer != order.metadata.owner.into_legacy() {
382386
return Err(OrderCancellationError::WrongOwner);
383387
};
384388

@@ -632,6 +636,7 @@ mod tests {
632636
super::*,
633637
crate::database::orders::MockOrderStoring,
634638
ethcontract::H160,
639+
ethrpc::alloy::conversions::{IntoAlloy, IntoLegacy},
635640
mockall::predicate::eq,
636641
model::{
637642
order::{OrderData, OrderMetadata},
@@ -646,7 +651,7 @@ mod tests {
646651
let old_order = Order {
647652
metadata: OrderMetadata {
648653
uid: OrderUid([1; 56]),
649-
owner: H160([1; 20]),
654+
owner: Address::new([1; 20]),
650655
..Default::default()
651656
},
652657
data: OrderData {
@@ -674,7 +679,7 @@ mod tests {
674679
Ok((
675680
Order {
676681
metadata: OrderMetadata {
677-
owner: creation.from.unwrap(),
682+
owner: creation.from.unwrap().into_alloy(),
678683
uid: new_order_uid,
679684
..Default::default()
680685
},
@@ -750,7 +755,7 @@ mod tests {
750755
assert!(matches!(
751756
orderbook
752757
.add_order(OrderCreation {
753-
from: Some(old_order.metadata.owner),
758+
from: Some(old_order.metadata.owner.into_legacy()),
754759
signature: Signature::PreSign,
755760
app_data: OrderCreationAppData::Full {
756761
full: format!(
@@ -769,7 +774,7 @@ mod tests {
769774
// Stars align...
770775
let (order_id, _) = orderbook
771776
.add_order(OrderCreation {
772-
from: Some(old_order.metadata.owner),
777+
from: Some(old_order.metadata.owner.into_legacy()),
773778
signature: Signature::Eip712(Default::default()),
774779
app_data: OrderCreationAppData::Full {
775780
full: format!(

crates/shared/src/account_balances/mod.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ use {
66
alloy::sol_types::{SolCall, SolType, sol_data},
77
contracts::alloy::{GPv2Settlement, support::Balances},
88
ethcontract::state_overrides::StateOverrides,
9-
ethrpc::{Web3, alloy::conversions::IntoAlloy, block_stream::CurrentBlockWatcher},
9+
ethrpc::{
10+
Web3,
11+
alloy::conversions::{IntoAlloy, IntoLegacy},
12+
block_stream::CurrentBlockWatcher,
13+
},
1014
model::{
1115
interaction::InteractionData,
1216
order::{Order, SellTokenSource},
@@ -31,7 +35,7 @@ pub struct Query {
3135
impl Query {
3236
pub fn from_order(o: &Order) -> Self {
3337
Self {
34-
owner: o.metadata.owner,
38+
owner: o.metadata.owner.into_legacy(),
3539
token: o.data.sell_token,
3640
source: o.data.sell_token_balance,
3741
interactions: o.interactions.pre.clone(),

crates/shared/src/db_order_conversions.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ pub fn full_order_into_model_order(order: database::orders::FullOrder) -> Result
5757
} else {
5858
None
5959
};
60-
let onchain_user = order.onchain_user.map(|onchain_user| H160(onchain_user.0));
60+
let onchain_user = order
61+
.onchain_user
62+
.map(|onchain_user| Address::new(onchain_user.0));
6163
let class = order_class_from(&order);
6264
let onchain_placement_error = onchain_order_placement_error_from(&order);
6365
let onchain_order_data = onchain_user.map(|onchain_user| OnchainOrderData {
@@ -68,7 +70,7 @@ pub fn full_order_into_model_order(order: database::orders::FullOrder) -> Result
6870

6971
let metadata = OrderMetadata {
7072
creation_date: order.creation_timestamp,
71-
owner: H160(order.owner.0),
73+
owner: Address::new(order.owner.0),
7274
uid: OrderUid(order.uid.0),
7375
available_balance: Default::default(),
7476
executed_buy_amount: big_decimal_to_big_uint(&order.sum_buy)
@@ -86,12 +88,12 @@ pub fn full_order_into_model_order(order: database::orders::FullOrder) -> Result
8688
.context("executed fee amount is not a valid u256")?,
8789
executed_fee: big_decimal_to_u256(&order.executed_fee)
8890
.context("executed fee is not a valid u256")?,
89-
executed_fee_token: H160(order.executed_fee_token.0),
91+
executed_fee_token: Address::new(order.executed_fee_token.0),
9092
invalidated: order.invalidated,
9193
status,
9294
is_liquidity_order: class == OrderClass::Liquidity,
9395
class,
94-
settlement_contract: H160(order.settlement_contract.0),
96+
settlement_contract: Address::new(order.settlement_contract.0),
9597
ethflow_data,
9698
onchain_user,
9799
onchain_order_data,

0 commit comments

Comments
 (0)