Skip to content
This repository was archived by the owner on Oct 2, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
78752e5
Only client side compile errors
dastanbeksamatov Aug 3, 2023
1a5189c
Upgrade to v1.0.0
dastanbeksamatov Aug 4, 2023
d16b040
Add grandpa bridge to runtime
dastanbeksamatov Aug 4, 2023
e43fdac
Fix clippy and tests
dastanbeksamatov Aug 4, 2023
3414679
Merge branch 'dev' of github-freeverse:freeverseio/laos-ownership-nod…
dastanbeksamatov Aug 4, 2023
ef4e8ae
Merge branch 'dev' into feat/grandpa-bridge
Aug 4, 2023
00262c9
Fix lints
dastanbeksamatov Aug 4, 2023
ade7089
Merge branch 'feat/grandpa-bridge' of github-freeverse:freeverseio/la…
dastanbeksamatov Aug 4, 2023
e02fff8
Fix tests and clippy
dastanbeksamatov Aug 4, 2023
b0bb716
Remove comment
dastanbeksamatov Aug 4, 2023
cc97592
Add ownership chain relayer part
dastanbeksamatov Aug 4, 2023
72b663d
Merge branch 'dev' of github-freeverse:freeverseio/laos-ownership-nod…
dastanbeksamatov Aug 4, 2023
c73309b
Fix tests
dastanbeksamatov Aug 4, 2023
c154b1e
Remove 0x from hex
dastanbeksamatov Aug 4, 2023
1852460
Add bridge relayer
dastanbeksamatov Aug 15, 2023
436593c
Update branch commits
dastanbeksamatov Aug 17, 2023
b69e233
Working state
dastanbeksamatov Aug 22, 2023
8201b0a
Add laos relay
dastanbeksamatov Aug 22, 2023
147051e
Remove unused deps
dastanbeksamatov Aug 22, 2023
9b9b661
Fix lints and prepare for PR
dastanbeksamatov Aug 22, 2023
9926e23
Fix clippy
dastanbeksamatov Aug 22, 2023
1da04d9
Merge branch 'dev' of github-freeverse:freeverseio/laos-ownership-nod…
dastanbeksamatov Aug 22, 2023
68dd5a1
Generate new lock file
dastanbeksamatov Aug 22, 2023
184d0f4
Evochain different branch
dastanbeksamatov Aug 24, 2023
dead57c
Add documentation
dastanbeksamatov Aug 24, 2023
0775b4b
Remove millau related code
dastanbeksamatov Aug 24, 2023
c28b64a
Improve documentation
dastanbeksamatov Aug 24, 2023
a88adf6
Fix lint
dastanbeksamatov Aug 24, 2023
7bad16d
Remove bridge relayer
dastanbeksamatov Aug 25, 2023
e911754
Merge branch 'dev' of github-freeverse:freeverseio/laos-ownership-nod…
dastanbeksamatov Aug 25, 2023
f22143b
Use workspace deps
dastanbeksamatov Aug 25, 2023
0522701
Change crate authors
dastanbeksamatov Aug 25, 2023
4bb12b3
Revert gitignore
dastanbeksamatov Aug 28, 2023
5f60293
Update parity bridges common branch
dastanbeksamatov Aug 29, 2023
3b11c46
Update crate name
dastanbeksamatov Aug 29, 2023
56a4bd8
removed wrong comment
asiniscalchi Aug 29, 2023
147485e
fmt
asiniscalchi Aug 29, 2023
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
Prev Previous commit
Next Next commit
Working state
  • Loading branch information
dastanbeksamatov committed Aug 22, 2023
commit b69e23310935bf2a5412e0e02a339f1edeb30933
682 changes: 369 additions & 313 deletions Cargo.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "r
bp-header-chain = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0", default-features = false }
bp-messages = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0", default-features = false }
bp-evochain = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0", default-features = false }
bp-millau = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0", default-features = false }
bp-relayers = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0", default-features = false }
bp-runtime = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0", default-features = false }
bp-ownership-parachain = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0", default-features = false }
Expand Down
71 changes: 35 additions & 36 deletions bridge/bin-substrate/src/chains/evochain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,45 +22,44 @@ use bridge_runtime_common::CustomNetworkId;
use node_template_runtime as evochain_runtime;
use relay_evochain_client::Evochain;
use relay_substrate_client::SimpleRuntimeVersion;
use xcm_executor::traits::ExportXcm;

impl CliEncodeMessage for Evochain {
fn encode_wire_message(
target: xcm::v3::NetworkId,
at_target_xcm: xcm::v3::Xcm<()>,
) -> anyhow::Result<Vec<u8>> {
anyhow::ensure!(
[
CustomNetworkId::Rococo.as_network_id(),
CustomNetworkId::OwnershipParachain.as_network_id()
]
.contains(&target),
anyhow::format_err!("Unsupported target chain: {:?}", target)
);
// impl CliEncodeMessage for Evochain {
// fn encode_wire_message(
// target: xcm::v3::NetworkId,
// at_target_xcm: xcm::v3::Xcm<()>,
// ) -> anyhow::Result<Vec<u8>> {
// anyhow::ensure!(
// [
// CustomNetworkId::Rococo.as_network_id(),
// CustomNetworkId::OwnershipParachain.as_network_id()
// ]
// .contains(&target),
// anyhow::format_err!("Unsupported target chain: {:?}", target)
// );

Ok(evochain_runtime::xcm_config::ToRialtoOrOwnershipParachainSwitchExporter::validate(
target,
0,
&mut Some(Self::dummy_universal_source()?),
&mut Some(target.into()),
&mut Some(at_target_xcm),
)
.map_err(|e| anyhow::format_err!("Failed to prepare outbound message: {:?}", e))?
.0
.1
.0)
}
// Ok(evochain_runtime::xcm_config::ToRialtoOrOwnershipParachainSwitchExporter::validate(
// target,
// 0,
// &mut Some(Self::dummy_universal_source()?),
// &mut Some(target.into()),
// &mut Some(at_target_xcm),
// )
// .map_err(|e| anyhow::format_err!("Failed to prepare outbound message: {:?}", e))?
// .0
// .1
// .0)
// }

fn encode_execute_xcm(
message: xcm::VersionedXcm<Self::Call>,
) -> anyhow::Result<EncodedOrDecodedCall<Self::Call>> {
Ok(evochain_runtime::RuntimeCall::XcmPallet(evochain_runtime::XcmCall::execute {
message: Box::new(message),
max_weight: Self::estimate_execute_xcm_weight(),
})
.into())
}
}
// fn encode_execute_xcm(
// message: xcm::VersionedXcm<Self::Call>,
// ) -> anyhow::Result<EncodedOrDecodedCall<Self::Call>> {
// Ok(evochain_runtime::RuntimeCall::XcmPallet(evochain_runtime::XcmCall::execute {
// message: Box::new(message),
// max_weight: Self::estimate_execute_xcm_weight(),
// })
// .into())
// }
// }

impl CliChain for Evochain {
const RUNTIME_VERSION: Option<SimpleRuntimeVersion> =
Expand Down
46 changes: 45 additions & 1 deletion bridge/bin-substrate/src/cli/init_bridge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ use crate::{
kusama_headers_to_bridge_hub_polkadot::KusamaToBridgeHubPolkadotCliBridge,
polkadot_headers_to_bridge_hub_kusama::PolkadotToBridgeHubKusamaCliBridge,
},
ownership_parachain_evochain::evochain_headers_to_ownership_parachain::EvochainToOwnershipParachainCliBridge,
ownership_parachain_evochain::{
evochain_headers_to_ownership_parachain::EvochainToOwnershipParachainCliBridge,
millau_headers_to_ownership_parachain::MillauToOwnershipParachainCliBridge,
},
rialto_millau::{
millau_headers_to_rialto::MillauToRialtoCliBridge,
rialto_headers_to_millau::RialtoToMillauCliBridge,
Expand Down Expand Up @@ -74,6 +77,8 @@ pub enum InitBridgeName {
KusamaToBridgeHubPolkadot,
PolkadotToBridgeHubKusama,
EvochainToOwnershipParachain,
MillauToOwnershipParachain,
// EvochainToRialtoParachain,
}

#[async_trait]
Expand Down Expand Up @@ -145,6 +150,22 @@ impl BridgeInitializer for MillauToRialtoParachainCliBridge {
RuntimeCall::Sudo(SudoCall::sudo { call: Box::new(initialize_call) })
}
}
// impl BridgeInitializer for EvochainToRialtoParachainCliBridge {
// type Engine = GrandpaFinalityEngine<Self::Source>;

// fn encode_init_bridge(
// init_data: <Self::Engine as Engine<Self::Source>>::InitializationData,
// ) -> <Self::Target as Chain>::Call {
// type RuntimeCall = relay_rialto_parachain_client::RuntimeCall;
// type BridgeGrandpaCall = relay_rialto_parachain_client::BridgeGrandpaEvochainCall;
// type SudoCall = relay_rialto_parachain_client::SudoCall;

// let initialize_call: relay_rialto_parachain_client::runtime_types::rialto_parachain_runtime::RuntimeCall =
// RuntimeCall::BridgeEvochainGrandpa(BridgeGrandpaCall::initialize { init_data });

// RuntimeCall::Sudo(SudoCall::sudo { call: Box::new(initialize_call) })
// }
// }

impl BridgeInitializer for RialtoToMillauCliBridge {
type Engine = GrandpaFinalityEngine<Self::Source>;
Expand Down Expand Up @@ -251,6 +272,23 @@ impl BridgeInitializer for EvochainToOwnershipParachainCliBridge {
}
}

impl BridgeInitializer for MillauToOwnershipParachainCliBridge {
type Engine = GrandpaFinalityEngine<Self::Source>;

fn encode_init_bridge(
init_data: <Self::Engine as Engine<Self::Source>>::InitializationData,
) -> <Self::Target as Chain>::Call {
type RuntimeCall = relay_ownership_parachain_client::RuntimeCall;
type BridgeGrandpaCall = relay_ownership_parachain_client::BridgeGrandpaCallMillau;
type SudoCall = relay_ownership_parachain_client::SudoCall;

let initialize_call: RuntimeCall =
RuntimeCall::BridgeMillauGrandpa(BridgeGrandpaCall::initialize { init_data });

RuntimeCall::Sudo(SudoCall::sudo { call: Box::new(initialize_call) })
}
}

impl InitBridge {
/// Run the command.
pub async fn run(self) -> anyhow::Result<()> {
Expand All @@ -276,6 +314,12 @@ impl InitBridge {
InitBridgeName::EvochainToOwnershipParachain => {
EvochainToOwnershipParachainCliBridge::init_bridge(self)
},
InitBridgeName::MillauToOwnershipParachain => {
MillauToOwnershipParachainCliBridge::init_bridge(self)
},
// InitBridgeName::EvochainToRialtoParachain => {
// EvochainToRialtoParachainCliBridge::init_bridge(self)
// },
}
.await
}
Expand Down
12 changes: 6 additions & 6 deletions bridge/bin-substrate/src/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,10 @@ impl Command {
use relay_utils::initialize::{initialize_logger, initialize_relay};

match self {
Self::RelayHeaders(_) |
Self::RelayMessages(_) |
Self::RelayHeadersAndMessages(_) |
Self::InitBridge(_) => {
Self::RelayHeaders(_)
| Self::RelayMessages(_)
| Self::RelayHeadersAndMessages(_)
| Self::InitBridge(_) => {
initialize_relay();
},
_ => {
Expand Down Expand Up @@ -137,7 +137,7 @@ impl Command {
Ok(signals) => signals,
Err(e) => {
log::error!(target: LOG_TARGET, "Could not register exit signals: {}", e);
return
return;
},
};
let run = self.do_run().fuse();
Expand Down Expand Up @@ -320,7 +320,7 @@ where

fn from_str(s: &str) -> Result<Self, Self::Err> {
if s.to_lowercase() == "max" {
return Ok(ExplicitOrMaximal::Maximal)
return Ok(ExplicitOrMaximal::Maximal);
}

V::from_str(s)
Expand Down
15 changes: 14 additions & 1 deletion bridge/bin-substrate/src/cli/relay_headers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ use crate::bridges::{
kusama_headers_to_bridge_hub_polkadot::KusamaToBridgeHubPolkadotCliBridge,
polkadot_headers_to_bridge_hub_kusama::PolkadotToBridgeHubKusamaCliBridge,
},
ownership_parachain_evochain::evochain_headers_to_ownership_parachain::EvochainToOwnershipParachainCliBridge,
ownership_parachain_evochain::{
evochain_headers_to_ownership_parachain::EvochainToOwnershipParachainCliBridge,
millau_headers_to_ownership_parachain::MillauToOwnershipParachainCliBridge,
},
rialto_millau::{
millau_headers_to_rialto::MillauToRialtoCliBridge,
rialto_headers_to_millau::RialtoToMillauCliBridge,
Expand Down Expand Up @@ -76,6 +79,8 @@ pub enum RelayHeadersBridge {
KusamaToBridgeHubPolkadot,
PolkadotToBridgeHubKusama,
EvochainToOwnershipParachain,
MillauToOwnershipParachain,
// EvochainToRialtoParachain,
}

#[async_trait]
Expand Down Expand Up @@ -125,6 +130,8 @@ impl HeadersRelayer for WococoToBridgeHubRococoCliBridge {}
impl HeadersRelayer for KusamaToBridgeHubPolkadotCliBridge {}
impl HeadersRelayer for PolkadotToBridgeHubKusamaCliBridge {}
impl HeadersRelayer for EvochainToOwnershipParachainCliBridge {}
impl HeadersRelayer for MillauToOwnershipParachainCliBridge {}
// impl HeadersRelayer for EvochainToRialtoParachainCliBridge {}

impl RelayHeaders {
/// Run the command.
Expand All @@ -151,6 +158,12 @@ impl RelayHeaders {
RelayHeadersBridge::EvochainToOwnershipParachain => {
EvochainToOwnershipParachainCliBridge::relay_headers(self)
},
RelayHeadersBridge::MillauToOwnershipParachain => {
MillauToOwnershipParachainCliBridge::relay_headers(self)
}
// RelayHeadersBridge::EvochainToRialtoParachain => {
// EvochainToRialtoParachainCliBridge::relay_headers(self)
// },
}
.await
}
Expand Down
4 changes: 0 additions & 4 deletions bridge/client-evochain/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,6 @@ impl ChainWithTransactions for Evochain {
frame_system::CheckNonce::<evochain_runtime::Runtime>::from(unsigned.nonce),
frame_system::CheckWeight::<evochain_runtime::Runtime>::new(),
pallet_transaction_payment::ChargeTransactionPayment::<evochain_runtime::Runtime>::from(unsigned.tip),
evochain_runtime::BridgeRejectObsoleteHeadersAndMessages,
evochain_runtime::BridgeRefundOwnershipParachainMessages::default(),
),
(
(),
Expand All @@ -106,8 +104,6 @@ impl ChainWithTransactions for Evochain {
(),
(),
(),
(),
()
),
);
let signature = raw_payload.using_encoded(|payload| param.signer.sign(payload));
Expand Down
2 changes: 1 addition & 1 deletion bridge/client-ownership-parachain/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ bp-messages = { git = "https://github.com/freeverseio/parity-bridges-common.git"
bp-evochain = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bp-polkadot-core = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bp-ownership-parachain = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }

bp-millau = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bridge-runtime-common = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
relay-substrate-client = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }

Expand Down
3,843 changes: 3,821 additions & 22 deletions bridge/client-ownership-parachain/src/codegen_runtime.rs

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions bridge/client-ownership-parachain/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ pub use codegen_runtime::api::runtime_types;
pub type RuntimeCall = runtime_types::laos_runtime::RuntimeCall;
pub type SudoCall = runtime_types::pallet_sudo::pallet::Call;
pub type BridgeGrandpaCall = runtime_types::pallet_bridge_grandpa::pallet::Call;
pub type BridgeGrandpaCallMillau = runtime_types::pallet_bridge_grandpa_millau::pallet::Call;
pub type BridgeMessagesCall = runtime_types::pallet_bridge_messages::pallet::Call;

/// The address format for describing accounts.
Expand Down
70 changes: 70 additions & 0 deletions bridge/light-bridge/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
[package]
name = "laos-relay"
version = "1.0.1"
authors = ["Parity Technologies <[email protected]>"]
edition = "2021"
license = "GPL-3.0-or-later WITH Classpath-exception-2.0"

[dependencies]
anyhow = "1.0"
async-std = "1.9.0"
async-trait = "0.1"
codec = { package = "parity-scale-codec", version = "3.1.5" }
futures = "0.3.28"
hex = "0.4"
log = "0.4.19"
num-format = "0.4"
num-traits = "0.2"
rbtag = "0.3"
rustc-hex = "2.1"
structopt = "0.3"
signal-hook = "0.3.16"
signal-hook-async-std = "0.2.2"
strum = { version = "0.25.0", features = ["derive"] }

# Bridge dependencies
bp-evochain = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bp-header-chain = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bp-messages = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bp-parachains = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bp-millau = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bp-polkadot-core = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bp-runtime = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
bridge-runtime-common = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
millau-runtime = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
pallet-bridge-parachains = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
pallet-bridge-messages = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
parachains-relay = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
relay-millau-client = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
relay-evochain-client = { path = "../client-evochain" }
relay-ownership-parachain-client = { path = "../client-ownership-parachain" }
relay-substrate-client = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
relay-utils = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
# we are not using this runtime to craft call or transactions, but we still need it
# to prepare large XCM messages
rialto-parachain-runtime = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
substrate-relay-helper = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }

node-template-runtime = { git = "https://github.com/freeverseio/laos-evolution-node.git", branch = "feat/relayer-updates" }
laos-runtime = { path = "../../runtime" }

# Substrate Dependencies

frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0" }
sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0" }
sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0" }

# Polkadot Dependencies
polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v1.0.0" }
polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v1.0.0" }
polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot", branch = "release-v1.0.0" }
polkadot-runtime-parachains = { git = "https://github.com/paritytech/polkadot", branch = "release-v1.0.0" }
xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v1.0.0" }
xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v1.0.0" }

[dev-dependencies]
bp-test-utils = { git = "https://github.com/freeverseio/parity-bridges-common.git", branch = "polkadot-v1.0.0" }
hex-literal = "0.4"
sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v1.0.0" }
tempfile = "3.7"
finality-grandpa = { version = "0.16.2" }
19 changes: 19 additions & 0 deletions bridge/light-bridge/src/bridges/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright 2019-2021 Parity Technologies (UK) Ltd.
// This file is part of Parity Bridges Common.

// Parity Bridges Common is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Parity Bridges Common is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Parity Bridges Common. If not, see <http://www.gnu.org/licenses/>.

//! Declaration of all bridges that the relay is able to serve.

pub mod ownership_parachain_evochain;
Loading