From 971b93b43dd803d1610e4f97f1cf9b89b830f704 Mon Sep 17 00:00:00 2001 From: akildemir Date: Fri, 10 May 2024 12:14:07 +0300 Subject: [PATCH] only create the pool when adding liquidity first time --- substrate/dex/pallet/src/lib.rs | 42 ++++++-------------------------- substrate/node/src/chain_spec.rs | 14 ++--------- 2 files changed, 10 insertions(+), 46 deletions(-) diff --git a/substrate/dex/pallet/src/lib.rs b/substrate/dex/pallet/src/lib.rs index b4cdf28d..84e8bdd3 100644 --- a/substrate/dex/pallet/src/lib.rs +++ b/substrate/dex/pallet/src/lib.rs @@ -378,31 +378,6 @@ pub mod pallet { }, } - #[pallet::genesis_config] - #[derive(Clone, PartialEq, Eq, Debug, Encode, Decode)] - pub struct GenesisConfig { - /// Pools to create at launch. - pub pools: Vec, - /// field just to have T. - pub _ignore: PhantomData, - } - - impl Default for GenesisConfig { - fn default() -> Self { - GenesisConfig { pools: Default::default(), _ignore: Default::default() } - } - } - - #[pallet::genesis_build] - impl BuildGenesisConfig for GenesisConfig { - fn build(&self) { - // create the pools - for coin in &self.pools { - Pallet::::create_pool(*coin).unwrap(); - } - } - } - #[pallet::error] pub enum Error { /// Provided coins are equal. @@ -515,19 +490,15 @@ pub mod pallet { /// /// Once a pool is created, someone may [`Pallet::add_liquidity`] to it. pub(crate) fn create_pool(coin: Coin) -> DispatchResult { - ensure!(coin != Coin::Serai, Error::::EqualCoins); - - // prepare pool_id - let pool_id = Self::get_pool_id(coin, Coin::Serai).unwrap(); + // get pool_id + let pool_id = Self::get_pool_id(coin, Coin::Serai)?; ensure!(!Pools::::contains_key(pool_id), Error::::PoolExists); let pool_account = Self::get_pool_account(pool_id); frame_system::Pallet::::inc_providers(&pool_account); Pools::::insert(pool_id, ()); - Self::deposit_event(Event::PoolCreated { pool_id, pool_account }); - Ok(()) } @@ -566,11 +537,14 @@ pub mod pallet { ) -> DispatchResult { let sender = ensure_signed(origin)?; ensure!((sri_desired > 0) && (coin_desired > 0), Error::::WrongDesiredAmount); - ensure!(coin != Coin::Serai, Error::::EqualCoins); - let pool_id = Self::get_pool_id(coin, Coin::Serai).unwrap(); + let pool_id = Self::get_pool_id(coin, Coin::Serai)?; - Pools::::get(pool_id).as_ref().ok_or(Error::::PoolNotFound)?; + // create the pool if it doesn't exist. We can just attempt to do that because our checks + // far enough to allow that. + if Pools::::get(pool_id).is_none() { + Self::create_pool(coin)?; + } let pool_account = Self::get_pool_account(pool_id); let sri_reserve = Self::get_balance(&pool_account, Coin::Serai); diff --git a/substrate/node/src/chain_spec.rs b/substrate/node/src/chain_spec.rs index 73bcbbc1..03b574ae 100644 --- a/substrate/node/src/chain_spec.rs +++ b/substrate/node/src/chain_spec.rs @@ -7,8 +7,8 @@ use sc_service::ChainType; use serai_runtime::{ primitives::*, WASM_BINARY, BABE_GENESIS_EPOCH_CONFIG, RuntimeGenesisConfig, SystemConfig, - CoinsConfig, DexConfig, ValidatorSetsConfig, SignalsConfig, BabeConfig, GrandpaConfig, - EmissionsConfig, GenesisLiquidityConfig, + CoinsConfig, ValidatorSetsConfig, SignalsConfig, BabeConfig, GrandpaConfig, EmissionsConfig, + GenesisLiquidityConfig, }; pub type ChainSpec = sc_service::GenericChainSpec; @@ -44,11 +44,6 @@ fn devnet_genesis( _ignore: Default::default(), }, - dex: DexConfig { - pools: vec![Coin::Bitcoin, Coin::Ether, Coin::Dai, Coin::Monero], - _ignore: Default::default(), - }, - validator_sets: ValidatorSetsConfig { networks: serai_runtime::primitives::NETWORKS .iter() @@ -100,11 +95,6 @@ fn testnet_genesis(wasm_binary: &[u8], validators: Vec<&'static str>) -> Runtime _ignore: Default::default(), }, - dex: DexConfig { - pools: vec![Coin::Bitcoin, Coin::Ether, Coin::Dai, Coin::Monero], - _ignore: Default::default(), - }, - validator_sets: ValidatorSetsConfig { networks: serai_runtime::primitives::NETWORKS .iter()