diff --git a/deny.toml b/deny.toml index b10772ef6..6f4c9d918 100644 --- a/deny.toml +++ b/deny.toml @@ -55,6 +55,8 @@ exceptions = [ { allow = ["AGPL-3.0"], name = "serai-genesis-liquidity-pallet" }, { allow = ["AGPL-3.0"], name = "serai-emissions-pallet" }, + + { allow = ["AGPL-3.0"], name = "serai-economic-security-pallet" }, { allow = ["AGPL-3.0"], name = "serai-in-instructions-pallet" }, diff --git a/substrate/client/src/serai/genesis_liquidity.rs b/substrate/client/src/serai/genesis_liquidity.rs index 00a369c8c..187844bef 100644 --- a/substrate/client/src/serai/genesis_liquidity.rs +++ b/substrate/client/src/serai/genesis_liquidity.rs @@ -63,8 +63,7 @@ impl<'a> SeraiGenesisLiquidity<'a> { Ok(self.0.storage(PALLET, "Supply", coin).await?.unwrap_or(LiquidityAmount::zero())) } - pub async fn genesis_complete(&self) -> Result { - let result: Option<()> = self.0.storage(PALLET, "GenesisComplete", ()).await?; - Ok(result.is_some()) + pub async fn genesis_complete_block(&self) -> Result, SeraiError> { + self.0.storage(PALLET, "GenesisCompleteBlock", ()).await } } diff --git a/substrate/client/tests/emissions.rs b/substrate/client/tests/emissions.rs index 62ff043ea..f510d4862 100644 --- a/substrate/client/tests/emissions.rs +++ b/substrate/client/tests/emissions.rs @@ -54,18 +54,18 @@ async fn test_emissions(serai: Serai) { let (_, mut batch_ids) = set_up_genesis(&serai, &coins, &values).await; // wait until genesis is complete - while !serai - .as_of_latest_finalized_block() - .await - .unwrap() - .genesis_liquidity() - .genesis_complete() - .await - .unwrap() - { + let mut genesis_complete_block = None; + while genesis_complete_block.is_none() { tokio::time::sleep(Duration::from_secs(1)).await; + genesis_complete_block = serai + .as_of_latest_finalized_block() + .await + .unwrap() + .genesis_liquidity() + .genesis_complete_block() + .await + .unwrap(); } - let genesis_complete_block = serai.latest_finalized_block().await.unwrap().number(); for _ in 0 .. 3 { // get current stakes @@ -99,7 +99,7 @@ async fn test_emissions(serai: Serai) { // calculate how much reward in this session let reward_this_epoch = - if change_block_number < (genesis_complete_block + FAST_EPOCH_INITIAL_PERIOD) { + if change_block_number < (genesis_complete_block.unwrap() + FAST_EPOCH_INITIAL_PERIOD) { block_count * INITIAL_REWARD_PER_BLOCK } else { let blocks_until = SECURE_BY - change_block_number; diff --git a/substrate/client/tests/genesis_liquidity.rs b/substrate/client/tests/genesis_liquidity.rs index 867763e13..8b2b8d8f9 100644 --- a/substrate/client/tests/genesis_liquidity.rs +++ b/substrate/client/tests/genesis_liquidity.rs @@ -24,14 +24,15 @@ pub async fn test_genesis_liquidity(serai: Serai) { let (accounts, _) = set_up_genesis(&serai, &coins, &values).await; // wait until genesis is complete - while !serai + while serai .as_of_latest_finalized_block() .await .unwrap() .genesis_liquidity() - .genesis_complete() + .genesis_complete_block() .await .unwrap() + .is_none() { tokio::time::sleep(Duration::from_secs(1)).await; } diff --git a/substrate/emissions/pallet/Cargo.toml b/substrate/emissions/pallet/Cargo.toml index 39def7fc6..a56bcee48 100644 --- a/substrate/emissions/pallet/Cargo.toml +++ b/substrate/emissions/pallet/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" description = "Emissions pallet for Serai" license = "AGPL-3.0-only" repository = "https://github.com/serai-dex/serai/tree/develop/substrate/emissions/pallet" -authors = ["Akil Demir "] +authors = ["Akil Demir "] edition = "2021" rust-version = "1.77" diff --git a/substrate/emissions/pallet/src/lib.rs b/substrate/emissions/pallet/src/lib.rs index 1d517079b..ff9d5d496 100644 --- a/substrate/emissions/pallet/src/lib.rs +++ b/substrate/emissions/pallet/src/lib.rs @@ -79,10 +79,6 @@ pub mod pallet { #[pallet::getter(fn session)] pub type CurrentSession = StorageMap<_, Identity, NetworkId, u32, ValueQuery>; - // TODO: Find a better place for this - #[pallet::storage] - pub(crate) type GenesisCompleteBlock = StorageValue<_, u64, OptionQuery>; - #[pallet::storage] pub(crate) type LastSwapVolume = StorageMap<_, Identity, Coin, u64, OptionQuery>; @@ -103,12 +99,7 @@ pub mod pallet { #[pallet::hooks] impl Hooks> for Pallet { fn on_initialize(n: BlockNumberFor) -> Weight { - if GenesisCompleteBlock::::get().is_none() && - GenesisLiquidity::::genesis_complete().is_some() - { - GenesisCompleteBlock::::set(Some(n.saturated_into::())); - } - let genesis_ended = GenesisLiquidity::::genesis_complete().is_some(); + let genesis_ended = GenesisLiquidity::::genesis_complete_block().is_some(); // check if we got a new session let mut session_changed = false; @@ -297,7 +288,7 @@ pub mod pallet { // TODO: we have the past session participants here in the emissions pallet so that we can // distribute rewards to them in the next session. Ideally we should be able to fetch this - // information from valiadtor sets pallet. + // information from validator sets pallet. Self::update_participants(); Weight::zero() // TODO } @@ -316,7 +307,7 @@ pub mod pallet { #[cfg(not(feature = "fast-epoch"))] let initial_period_duration = 2 * MONTHS; - let genesis_complete_block = GenesisCompleteBlock::::get(); + let genesis_complete_block = GenesisLiquidity::::genesis_complete_block(); genesis_complete_block.is_some() && (n.saturated_into::() < (genesis_complete_block.unwrap() + initial_period_duration)) } diff --git a/substrate/emissions/primitives/Cargo.toml b/substrate/emissions/primitives/Cargo.toml index db3d38e0b..15ecbe25f 100644 --- a/substrate/emissions/primitives/Cargo.toml +++ b/substrate/emissions/primitives/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" description = "Serai emissions primitives" license = "MIT" repository = "https://github.com/serai-dex/serai/tree/develop/substrate/emissions/primitives" -authors = ["Akil Demir "] +authors = ["Akil Demir "] edition = "2021" rust-version = "1.77" diff --git a/substrate/genesis-liquidity/pallet/src/lib.rs b/substrate/genesis-liquidity/pallet/src/lib.rs index 0b530eb2b..b6d39bc3d 100644 --- a/substrate/genesis-liquidity/pallet/src/lib.rs +++ b/substrate/genesis-liquidity/pallet/src/lib.rs @@ -70,8 +70,8 @@ pub mod pallet { pub(crate) type Oracle = StorageMap<_, Identity, Coin, u64, OptionQuery>; #[pallet::storage] - #[pallet::getter(fn genesis_complete)] - pub(crate) type GenesisComplete = StorageValue<_, (), OptionQuery>; + #[pallet::getter(fn genesis_complete_block)] + pub(crate) type GenesisCompleteBlock = StorageValue<_, u64, OptionQuery>; #[pallet::hooks] impl Hooks> for Pallet { @@ -85,7 +85,7 @@ pub mod pallet { // Distribute the genesis sri to pools after a month if (n.saturated_into::() >= final_block) && Self::oraclization_is_done() && - GenesisComplete::::get().is_none() + GenesisCompleteBlock::::get().is_none() { // mint the SRI Coins::::mint( @@ -165,7 +165,7 @@ pub mod pallet { assert_eq!(Coins::::balance(GENESIS_LIQUIDITY_ACCOUNT.into(), coin), Amount(0)); } - GenesisComplete::::set(Some(())); + GenesisCompleteBlock::::set(Some(n.saturated_into::())); } Weight::zero() // TODO