Skip to content

Commit 89c4559

Browse files
committed
feat: made mpc finalities configurable
1 parent 87bce2f commit 89c4559

File tree

5 files changed

+47
-10
lines changed

5 files changed

+47
-10
lines changed

Cargo.lock

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] }
4949
base64 = "0.22"
5050
near-token = "0.3"
5151
near-contract-standards = "5.5"
52-
omni-types = { git = "https://github.com/near-one/omni-bridge", package = "omni-types", rev = "5677f0db5e9799ba503ee85eeef8fd6f977f4d36", features = ["abi", "__abi-generate"] }
52+
omni-types = { git = "https://github.com/near-one/omni-bridge", package = "omni-types", rev = "9e02ab5bcff3901bc68492623f8915b798fc0fc0", features = ["abi", "__abi-generate"] }
5353
starknet = "0.17.0"
5454
serde_with = { version = "3.12.0", features = ["schemars_0_8"] }
5555
solana-sdk = "2.0.13"

bridge-cli/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@ utxo-bridge-client = { path = "../bridge-sdk/bridge-clients/utxo-bridge-client"
2929
starknet-bridge-client = { path = "../bridge-sdk/bridge-clients/starknet-bridge-client" }
3030
utxo-utils = { path = "../bridge-sdk/utxo-utils" }
3131
near-sdk.workspace = true
32+
mpc-contract-interface.workspace = true

bridge-cli/src/omni_connector_command.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use clap::Subcommand;
22
use core::panic;
3+
use mpc_contract_interface::types::{EvmFinality, StarknetFinality};
4+
use omni_types::mpc_types::MpcFinality;
35
use std::collections::HashMap;
46
use std::{path::Path, str::FromStr};
57

@@ -1586,6 +1588,20 @@ fn omni_connector(network: Network, cli_config: CliConfig) -> OmniConnector {
15861588
.build()
15871589
.unwrap();
15881590

1591+
let mut mpc_finalities = HashMap::new();
1592+
match network {
1593+
Network::Mainnet => {
1594+
mpc_finalities.insert(ChainKind::Abs, MpcFinality::Evm(EvmFinality::Safe));
1595+
}
1596+
Network::Testnet | Network::Devnet => {
1597+
mpc_finalities.insert(ChainKind::Abs, MpcFinality::Evm(EvmFinality::Latest));
1598+
}
1599+
}
1600+
mpc_finalities.insert(
1601+
ChainKind::Strk,
1602+
MpcFinality::Starknet(StarknetFinality::AcceptedOnL2),
1603+
);
1604+
15891605
OmniConnectorBuilder::default()
15901606
.network(Some(network.into()))
15911607
.near_bridge_client(Some(near_bridge_client))
@@ -1605,6 +1621,7 @@ fn omni_connector(network: Network, cli_config: CliConfig) -> OmniConnector {
16051621
.btc_light_client(Some(btc_light_client))
16061622
.zcash_light_client(Some(zcash_light_client))
16071623
.enable_orchard(combined_config.enable_orchard)
1624+
.mpc_finalities(Some(mpc_finalities))
16081625
.build()
16091626
.unwrap()
16101627
}

bridge-sdk/connectors/omni-connector/src/omni_connector.rs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use derive_builder::Builder;
77
use light_client::LightClient;
88
use near_primitives::hash::CryptoHash;
99
use near_primitives::types::AccountId;
10+
use omni_types::mpc_types::MpcFinality;
1011
use utxo_bridge_client::error::UtxoClientError;
1112
use utxo_utils::address::{Network, UTXOAddress};
1213

@@ -34,6 +35,7 @@ use solana_bridge_client::{
3435
use solana_sdk::pubkey::Pubkey;
3536
use solana_sdk::signature::{Keypair, Signature};
3637
use starknet_bridge_client::{StarknetBridgeClient, StarknetInitTransferEvent};
38+
use std::collections::HashMap;
3739
use std::str::FromStr;
3840
use 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

6972
macro_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

Comments
 (0)