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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
use codec::{Decode, Encode};
use common::Balance;
use sp_runtime::RuntimeDebug;
use crate::bounds::*;
#[derive(Clone, RuntimeDebug, Eq, PartialEq, Encode, Decode, scale_info::TypeInfo)]
pub struct Resource<AssetId, Balance> {
pub asset: AssetId,
pub amount: Bounds<Balance>,
}
#[derive(Clone, RuntimeDebug, Eq, PartialEq, Encode, Decode, scale_info::TypeInfo)]
pub struct ResourcePair<AssetId, Balance>(
pub Resource<AssetId, Balance>,
pub Resource<AssetId, Balance>,
);
#[derive(Clone, RuntimeDebug, Eq, PartialEq, Encode, Decode, scale_info::TypeInfo)]
pub struct PairSwapAction<AssetId, AccountId, TechAccountId> {
pub client_account: Option<AccountId>,
pub receiver_account: Option<AccountId>,
pub pool_account: TechAccountId,
pub source: Resource<AssetId, Balance>,
pub destination: Resource<AssetId, Balance>,
pub fee: Option<Balance>,
pub fee_account: Option<TechAccountId>,
pub get_fee_from_destination: Option<bool>,
}
#[derive(Clone, RuntimeDebug, Eq, PartialEq, Encode, Decode, scale_info::TypeInfo)]
pub struct DepositLiquidityAction<AssetId, AccountId, TechAccountId> {
pub client_account: Option<AccountId>,
pub receiver_account: Option<AccountId>,
pub pool_account: TechAccountId,
pub source: ResourcePair<AssetId, Balance>,
pub pool_tokens: Balance,
pub min_liquidity: Option<Balance>,
}
#[derive(Clone, RuntimeDebug, Eq, PartialEq, Encode, Decode, scale_info::TypeInfo)]
pub struct WithdrawLiquidityAction<AssetId, AccountId, TechAccountId> {
pub client_account: Option<AccountId>,
pub receiver_account_a: Option<AccountId>,
pub receiver_account_b: Option<AccountId>,
pub pool_account: TechAccountId,
pub pool_tokens: Balance,
pub destination: ResourcePair<AssetId, Balance>,
}
#[derive(Clone, RuntimeDebug, Eq, PartialEq, Encode, Decode, scale_info::TypeInfo)]
pub enum PolySwapAction<AssetId, AccountId, TechAccountId> {
PairSwap(PairSwapAction<AssetId, AccountId, TechAccountId>),
DepositLiquidity(DepositLiquidityAction<AssetId, AccountId, TechAccountId>),
WithdrawLiquidity(WithdrawLiquidityAction<AssetId, AccountId, TechAccountId>),
}