Add ABI crate

Call and Event are both from the pallets, which are AGPL licensed. Accordingly,
they make serai-client AGPL licensed when serai-client must end up MIT
licensed. This creates a MIT-licensed variant of Calls and Events such that
they can be used by serai-client, enabling transitioning it to MIT.

Relevant to https://github.com/serai-dex/serai/issues/337.
This commit is contained in:
Luke Parker
2023-12-06 09:53:48 -05:00
parent 7768ea90ad
commit 6416e0079b
14 changed files with 539 additions and 105 deletions

77
substrate/abi/src/dex.rs Normal file
View File

@@ -0,0 +1,77 @@
use sp_runtime::BoundedVec;
use serai_primitives::*;
type PoolId = Coin;
type PoolCoinId = Coin;
type MaxSwapPathLength = sp_core::ConstU32<3>;
#[derive(Clone, PartialEq, Eq, Debug, scale::Encode, scale::Decode)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Call {
add_liquidity {
coin: Coin,
coin_desired: SubstrateAmount,
sri_desired: SubstrateAmount,
coin_min: SubstrateAmount,
sri_min: SubstrateAmount,
mint_to: SeraiAddress,
},
remove_liquidity {
coin: Coin,
lp_token_burn: SubstrateAmount,
coin_min_receive: SubstrateAmount,
sri_min_receive: SubstrateAmount,
withdraw_to: SeraiAddress,
},
swap_exact_tokens_for_tokens {
path: BoundedVec<Coin, MaxSwapPathLength>,
amount_in: SubstrateAmount,
amount_out_min: SubstrateAmount,
send_to: SeraiAddress,
},
swap_tokens_for_exact_tokens {
path: BoundedVec<Coin, MaxSwapPathLength>,
amount_out: SubstrateAmount,
amount_in_max: SubstrateAmount,
send_to: SeraiAddress,
},
}
#[derive(Clone, PartialEq, Eq, Debug, scale::Encode, scale::Decode)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Event {
PoolCreated {
pool_id: PoolId,
pool_account: SeraiAddress,
lp_token: PoolCoinId,
},
LiquidityAdded {
who: SeraiAddress,
mint_to: SeraiAddress,
pool_id: PoolId,
coin_amount: SubstrateAmount,
sri_amount: SubstrateAmount,
lp_token: PoolCoinId,
lp_token_minted: SubstrateAmount,
},
LiquidityRemoved {
who: SeraiAddress,
withdraw_to: SeraiAddress,
pool_id: PoolId,
coin_amount: SubstrateAmount,
sri_amount: SubstrateAmount,
lp_token: PoolCoinId,
lp_token_burned: SubstrateAmount,
},
SwapExecuted {
who: SeraiAddress,
send_to: SeraiAddress,
path: BoundedVec<Coin, MaxSwapPathLength>,
amount_in: SubstrateAmount,
amount_out: SubstrateAmount,
},
}