xcm_primitives/
transactor_traits.rs1use cumulus_primitives_core::{
17 relay_chain::{self, HrmpChannelId},
18 ParaId,
19};
20use sp_std::vec::Vec;
21use xcm::latest::{Error as XcmError, Location};
22
23#[derive(Debug, PartialEq, Eq)]
26pub enum UtilityAvailableCalls {
27 AsDerivative(u16, Vec<u8>),
28}
29
30#[derive(Debug, PartialEq, Eq)]
33pub enum HrmpAvailableCalls {
34 InitOpenChannel(ParaId, u32, u32),
35 AcceptOpenChannel(ParaId),
36 CloseChannel(HrmpChannelId),
37 CancelOpenRequest(HrmpChannelId, u32),
38}
39
40pub trait UtilityEncodeCall {
46 fn encode_call<Transactor: XcmTransact>(
47 transactor: Transactor,
48 call: UtilityAvailableCalls,
49 ) -> Vec<u8>;
50}
51
52pub trait HrmpEncodeCall {
56 fn hrmp_encode_call(call: HrmpAvailableCalls) -> Result<Vec<u8>, XcmError>;
57}
58
59impl HrmpEncodeCall for () {
60 fn hrmp_encode_call(_call: HrmpAvailableCalls) -> Result<Vec<u8>, XcmError> {
61 Err(XcmError::Unimplemented)
62 }
63}
64
65pub trait XcmTransact {
68 fn destination(self) -> Location;
70
71 fn utility_pallet_index(&self) -> u8;
72
73 fn staking_pallet_index(&self) -> u8;
74}
75
76pub enum AvailableStakeCalls {
77 Bond(
78 relay_chain::Balance,
79 pallet_staking::RewardDestination<relay_chain::AccountId>,
80 ),
81 BondExtra(relay_chain::Balance),
82 Unbond(relay_chain::Balance),
83 WithdrawUnbonded(u32),
84 Validate(pallet_staking::ValidatorPrefs),
85 Nominate(Vec<relay_chain::AccountId>),
86 Chill,
87 SetPayee(pallet_staking::RewardDestination<relay_chain::AccountId>),
88 SetController,
89 Rebond(relay_chain::Balance),
90}
91
92pub trait StakeEncodeCall {
93 fn encode_call<Transactor: XcmTransact>(
95 transactor: Transactor,
96 call: AvailableStakeCalls,
97 ) -> Vec<u8>;
98}