@@ -7,6 +7,7 @@ use derive_builder::Builder;
77use light_client:: LightClient ;
88use near_primitives:: hash:: CryptoHash ;
99use near_primitives:: types:: AccountId ;
10+ use omni_types:: mpc_types:: MpcFinality ;
1011use utxo_bridge_client:: error:: UtxoClientError ;
1112use utxo_utils:: address:: { Network , UTXOAddress } ;
1213
@@ -34,6 +35,7 @@ use solana_bridge_client::{
3435use solana_sdk:: pubkey:: Pubkey ;
3536use solana_sdk:: signature:: { Keypair , Signature } ;
3637use starknet_bridge_client:: { StarknetBridgeClient , StarknetInitTransferEvent } ;
38+ use std:: collections:: HashMap ;
3739use std:: str:: FromStr ;
3840use utxo_bridge_client:: {
3941 types:: { Bitcoin , Zcash } ,
@@ -64,6 +66,7 @@ pub struct OmniConnector {
6466 btc_light_client : Option < LightClient > ,
6567 zcash_light_client : Option < LightClient > ,
6668 enable_orchard : Option < bool > ,
69+ mpc_finalities : Option < HashMap < ChainKind , MpcFinality > > ,
6770}
6871
6972macro_rules! forward_common_utxo_method {
@@ -1124,9 +1127,8 @@ impl OmniConnector {
11241127 proof_kind : ProofKind ,
11251128 ) -> Result < Vec < u8 > > {
11261129 use mpc_contract_interface:: types:: {
1127- EvmExtractedValue , EvmExtractor , EvmFinality , EvmLog , EvmRpcRequest , EvmTxId ,
1128- ExtractedValue , ForeignChainRpcRequest , ForeignTxSignPayload , ForeignTxSignPayloadV1 ,
1129- Hash160 , Hash256 ,
1130+ EvmExtractedValue , EvmExtractor , EvmLog , EvmRpcRequest , EvmTxId , ExtractedValue ,
1131+ ForeignChainRpcRequest , ForeignTxSignPayload , ForeignTxSignPayloadV1 , Hash160 , Hash256 ,
11301132 } ;
11311133
11321134 let evm_client = self . evm_bridge_client ( ChainKind :: Abs ) ?;
@@ -1177,9 +1179,11 @@ impl OmniConnector {
11771179 topics : rpc_log. topics ( ) . iter ( ) . map ( |t| Hash256 ( t. 0 ) ) . collect ( ) ,
11781180 } ;
11791181
1180- let finality = match self . network ( ) ? {
1181- Network :: Mainnet => EvmFinality :: Safe ,
1182- Network :: Testnet => EvmFinality :: Latest ,
1182+ let mpc_finalities = self . get_mpc_finalities ( ) ?;
1183+ let Some ( MpcFinality :: Evm ( finality) ) = mpc_finalities. get ( & ChainKind :: Abs ) . cloned ( ) else {
1184+ return Err ( BridgeSdkError :: ConfigError (
1185+ "No mpc finality provided for Abs" . to_string ( ) ,
1186+ ) ) ;
11831187 } ;
11841188
11851189 let sign_payload = ForeignTxSignPayload :: V1 ( ForeignTxSignPayloadV1 {
@@ -1210,7 +1214,7 @@ impl OmniConnector {
12101214 ) -> Result < Vec < u8 > > {
12111215 use mpc_contract_interface:: types:: {
12121216 ExtractedValue , ForeignChainRpcRequest , ForeignTxSignPayload , ForeignTxSignPayloadV1 ,
1213- StarknetExtractedValue , StarknetExtractor , StarknetFelt , StarknetFinality , StarknetLog ,
1217+ StarknetExtractedValue , StarknetExtractor , StarknetFelt , StarknetLog ,
12141218 StarknetRpcRequest , StarknetTxId ,
12151219 } ;
12161220
@@ -1242,10 +1246,18 @@ impl OmniConnector {
12421246 . collect ( ) ,
12431247 } ;
12441248
1249+ let mpc_finalities = self . get_mpc_finalities ( ) ?;
1250+ let Some ( MpcFinality :: Starknet ( finality) ) = mpc_finalities. get ( & ChainKind :: Strk ) . cloned ( )
1251+ else {
1252+ return Err ( BridgeSdkError :: ConfigError (
1253+ "No mpc finality provided for Abs" . to_string ( ) ,
1254+ ) ) ;
1255+ } ;
1256+
12451257 let sign_payload = ForeignTxSignPayload :: V1 ( ForeignTxSignPayloadV1 {
12461258 request : ForeignChainRpcRequest :: Starknet ( StarknetRpcRequest {
12471259 tx_id : StarknetTxId ( StarknetFelt ( tx_hash. to_bytes_be ( ) ) ) ,
1248- finality : StarknetFinality :: AcceptedOnL2 ,
1260+ finality,
12491261 extractors : vec ! [ StarknetExtractor :: Log {
12501262 log_index: log. log_index,
12511263 } ] ,
@@ -2492,6 +2504,12 @@ impl OmniConnector {
24922504 Ok ( enable_orchard)
24932505 }
24942506
2507+ pub fn get_mpc_finalities ( & self ) -> Result < HashMap < ChainKind , MpcFinality > > {
2508+ self . mpc_finalities . clone ( ) . ok_or_else ( || {
2509+ BridgeSdkError :: ConfigError ( "MPC finalities are not configured" . to_string ( ) )
2510+ } )
2511+ }
2512+
24952513 pub fn denormalize_amount ( & self , decimals : & Decimals , amount : u128 ) -> Result < u128 > {
24962514 amount
24972515 . checked_mul ( 10_u128 . pow ( ( decimals. origin_decimals - decimals. decimals ) . into ( ) ) )
0 commit comments