From 089e7d2e0f7fcd60c591ff0d1e5e56a7d7ae93dd Mon Sep 17 00:00:00 2001 From: Diana Carvalho Date: Thu, 30 Jan 2025 15:01:53 +0000 Subject: [PATCH] feat: Add ChainId model Remove to_chain_id helper method --- don't change below this line --- ENG-4081 Took 28 minutes --- src/encoding/evm/approvals/permit2.rs | 9 +++++---- src/encoding/evm/mod.rs | 1 + src/encoding/evm/models.rs | 20 ++++++++++++++++++++ src/encoding/evm/utils.rs | 9 +-------- 4 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 src/encoding/evm/models.rs diff --git a/src/encoding/evm/approvals/permit2.rs b/src/encoding/evm/approvals/permit2.rs index 900d4cb..aca2c0c 100644 --- a/src/encoding/evm/approvals/permit2.rs +++ b/src/encoding/evm/approvals/permit2.rs @@ -1,7 +1,7 @@ use std::{str::FromStr, sync::Arc}; use alloy::{ - primitives::{aliases::U48, Address, Bytes as AlloyBytes, ChainId, TxKind, U160, U256}, + primitives::{aliases::U48, Address, Bytes as AlloyBytes, TxKind, U160, U256}, providers::{Provider, RootProvider}, rpc::types::{TransactionInput, TransactionRequest}, signers::{local::PrivateKeySigner, SignerSync}, @@ -20,7 +20,8 @@ use crate::encoding::{ errors::EncodingError, evm::{ approvals::protocol_approvals_manager::get_client, - utils::{biguint_to_u256, bytes_to_address, encode_input, to_chain_id}, + models::ChainId, + utils::{biguint_to_u256, bytes_to_address, encode_input}, }, }; @@ -62,7 +63,7 @@ sol! { #[allow(dead_code)] impl Permit2 { pub fn new(signer_pk: String, chain: Chain) -> Result { - let chain_id = to_chain_id(chain)?; + let chain_id = ChainId::from(chain); let runtime = Runtime::new() .map_err(|_| EncodingError::FatalError("Failed to create runtime".to_string()))?; let client = runtime.block_on(get_client())?; @@ -145,7 +146,7 @@ impl Permit2 { let domain = eip712_domain! { name: "Permit2", - chain_id: self.chain_id, + chain_id: self.chain_id.id(), verifying_contract: self.address, }; let hash = permit_single.eip712_signing_hash(&domain); diff --git a/src/encoding/evm/mod.rs b/src/encoding/evm/mod.rs index d2abfd8..031dbc4 100644 --- a/src/encoding/evm/mod.rs +++ b/src/encoding/evm/mod.rs @@ -1,4 +1,5 @@ pub mod approvals; +mod models; mod router_encoder; mod strategy_encoder; mod swap_encoder; diff --git a/src/encoding/evm/models.rs b/src/encoding/evm/models.rs new file mode 100644 index 0000000..68121bf --- /dev/null +++ b/src/encoding/evm/models.rs @@ -0,0 +1,20 @@ +use tycho_core::models::Chain; + +pub struct ChainId(u64); + +impl ChainId { + pub fn id(&self) -> u64 { + self.0 + } +} + +impl From for ChainId { + fn from(chain: Chain) -> Self { + match chain { + Chain::Ethereum => ChainId(1), + Chain::ZkSync => ChainId(324), + Chain::Arbitrum => ChainId(42161), + Chain::Starknet => ChainId(0), + } + } +} diff --git a/src/encoding/evm/utils.rs b/src/encoding/evm/utils.rs index 3925d44..0afe763 100644 --- a/src/encoding/evm/utils.rs +++ b/src/encoding/evm/utils.rs @@ -1,7 +1,7 @@ use alloy_primitives::{aliases::U24, Address, Keccak256, U256}; use alloy_sol_types::SolValue; use num_bigint::BigUint; -use tycho_core::{models::Chain, Bytes}; +use tycho_core::Bytes; use crate::encoding::errors::EncodingError; @@ -65,10 +65,3 @@ pub fn percentage_to_uint24(percentage: f64) -> U24 { let scaled = (percentage / 100.0) * (MAX_UINT24 as f64); U24::from(scaled.round()) } - -pub fn to_chain_id(chain: Chain) -> Result { - match chain { - Chain::Ethereum => Ok(1), - _ => Err(EncodingError::FatalError("Unsupported chain".to_string())), - } -}