pallet_token_gateway/
types.rs1use alloc::{collections::BTreeMap, vec::Vec};
19use frame_support::{pallet_prelude::*, traits::fungibles};
20use ismp::host::StateMachine;
21use polkadot_sdk::*;
22use primitive_types::H256;
23use sp_core::H160;
24
25use crate::Config;
26
27pub type AssetId<T> =
28 <<T as Config>::Assets as fungibles::Inspect<<T as frame_system::Config>::AccountId>>::AssetId;
29
30pub const BODY_BYTES_SIZE: usize = 160;
33
34pub const BODY_BYTES_SIZE_WITH_DISCRIMINATOR: usize = BODY_BYTES_SIZE + 1;
36
37#[derive(
39 Debug, Clone, Encode, Decode, DecodeWithMemTracking, scale_info::TypeInfo, PartialEq, Eq,
40)]
41pub struct TeleportParams<AssetId, Balance> {
42 pub asset_id: AssetId,
44 pub destination: StateMachine,
46 pub recepient: H256,
48 pub amount: Balance,
50 pub timeout: u64,
52 pub token_gateway: Vec<u8>,
54 pub relayer_fee: Balance,
56 pub call_data: Option<Vec<u8>>,
58 pub redeem: bool,
60}
61
62#[derive(
64 Clone, Encode, Decode, DecodeWithMemTracking, scale_info::TypeInfo, PartialEq, Eq, RuntimeDebug,
65)]
66pub struct AssetRegistration<AssetId> {
67 pub local_id: AssetId,
69 pub reg: token_gateway_primitives::GatewayAssetRegistration,
71 pub native: bool,
73 pub precision: BTreeMap<StateMachine, u8>,
75}
76
77#[derive(
79 Clone, Encode, Decode, DecodeWithMemTracking, scale_info::TypeInfo, PartialEq, Eq, RuntimeDebug,
80)]
81pub struct PrecisionUpdate<AssetId> {
82 pub asset_id: AssetId,
84 pub precisions: BTreeMap<StateMachine, u8>,
86}
87
88alloy_sol_macro::sol! {
89 #![sol(all_derives)]
90 struct Body {
91 uint256 amount;
93 bytes32 asset_id;
95 bool redeem;
97 bytes32 from;
99 bytes32 to;
101 }
102
103 struct BodyWithCall {
104 uint256 amount;
106 bytes32 asset_id;
108 bool redeem;
110 bytes32 from;
112 bytes32 to;
114 bytes data;
116 }
117}
118
119#[derive(Debug, Clone, Encode, Decode, scale_info::TypeInfo, PartialEq, Eq)]
120pub struct SubstrateCalldata {
121 pub signature: Option<Vec<u8>>,
124 pub runtime_call: Vec<u8>,
126}
127
128pub struct RequestBody {
130 pub amount: alloy_primitives::U256,
131 pub asset_id: alloy_primitives::FixedBytes<32>,
132 pub redeem: bool,
133 pub from: alloy_primitives::FixedBytes<32>,
134 pub to: alloy_primitives::FixedBytes<32>,
135 pub data: Option<alloy_primitives::Bytes>,
136}
137
138impl From<Body> for RequestBody {
139 fn from(value: Body) -> Self {
140 RequestBody {
141 amount: value.amount,
142 asset_id: value.asset_id,
143 redeem: value.redeem,
144 from: value.from,
145 to: value.to,
146 data: None,
147 }
148 }
149}
150
151impl From<BodyWithCall> for RequestBody {
152 fn from(value: BodyWithCall) -> Self {
153 RequestBody {
154 amount: value.amount,
155 asset_id: value.asset_id,
156 redeem: value.redeem,
157 from: value.from,
158 to: value.to,
159 data: Some(value.data),
160 }
161 }
162}
163
164pub trait EvmToSubstrate<T: frame_system::Config> {
165 fn convert(addr: H160) -> T::AccountId;
166}
167
168impl<T: frame_system::Config> EvmToSubstrate<T> for ()
169where
170 <T as frame_system::Config>::AccountId: From<[u8; 32]>,
171{
172 fn convert(addr: H160) -> <T as frame_system::Config>::AccountId {
173 let mut account = [0u8; 32];
174 account[12..].copy_from_slice(&addr.0);
175 account.into()
176 }
177}