-
Notifications
You must be signed in to change notification settings - Fork 134
Expand file tree
/
Copy pathrialto_parachain.rs
More file actions
65 lines (54 loc) · 2.3 KB
/
Copy pathrialto_parachain.rs
File metadata and controls
65 lines (54 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// 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/>.
//! Rialto parachain specification for CLI.
use crate::cli::{encode_message::CliEncodeMessage, CliChain};
use bp_runtime::{ChainId, EncodedOrDecodedCall, MILLAU_CHAIN_ID};
use bridge_runtime_common::CustomNetworkId;
use relay_rialto_parachain_client::RialtoParachain;
use relay_substrate_client::SimpleRuntimeVersion;
use xcm_executor::traits::ExportXcm;
impl CliEncodeMessage for RialtoParachain {
fn encode_wire_message(
target: ChainId,
at_target_xcm: xcm::v3::Xcm<()>,
) -> anyhow::Result<Vec<u8>> {
let target = match target {
MILLAU_CHAIN_ID => CustomNetworkId::Millau.as_network_id(),
_ => return Err(anyhow::format_err!("Unsupported target chain: {:?}", target)),
};
Ok(rialto_parachain_runtime::millau_messages::ToMillauBlobExporter::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
.0)
}
fn encode_execute_xcm(
message: xcm::VersionedXcm<Self::Call>,
) -> anyhow::Result<EncodedOrDecodedCall<Self::Call>> {
type RuntimeCall = relay_rialto_parachain_client::RuntimeCall;
type XcmCall = relay_rialto_parachain_client::runtime_types::pallet_xcm::pallet::Call;
let xcm_call = XcmCall::execute {
message: Box::new(unsafe { std::mem::transmute(message) }),
max_weight: Self::estimate_execute_xcm_weight(),
};
Ok(RuntimeCall::PolkadotXcm(xcm_call).into())
}
}
impl CliChain for RialtoParachain {
const RUNTIME_VERSION: Option<SimpleRuntimeVersion> = None;
}