From ebc4cdb8a3c4566899e7d3ed37895eae4216a82e Mon Sep 17 00:00:00 2001 From: PraetorP Date: Mon, 05 Sep 2022 10:08:51 +0000 Subject: [PATCH] add force methods for collection in `Unique` , add events Stake, Unstake, SetAdmin --- --- a/Cargo.lock +++ b/Cargo.lock @@ -6473,7 +6473,7 @@ [[package]] name = "pallet-unique" -version = "0.1.3" +version = "0.1.4" dependencies = [ "ethereum", "evm-coder", --- a/pallets/app-promotion/src/benchmarking.rs +++ b/pallets/app-promotion/src/benchmarking.rs @@ -54,7 +54,7 @@ payout_stakers{ let pallet_admin = account::("admin", 0, SEED); - let share = Perbill::from_rational(1u32, 10); + let share = Perbill::from_rational(1u32, 100); PromototionPallet::::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?; let _ = ::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::::max_value()); let staker: T::AccountId = account("caller", 0, SEED); --- a/pallets/app-promotion/src/lib.rs +++ b/pallets/app-promotion/src/lib.rs @@ -70,16 +70,11 @@ }; pub const LOCK_IDENTIFIER: [u8; 8] = *b"appstake"; + const PENDING_LIMIT_PER_BLOCK: u32 = 3; type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; - -// const SECONDS_TO_BLOCK: u32 = 6; -// const DAY: u32 = 60 * 60 * 24 / SECONDS_TO_BLOCK; -// const WEEK: u32 = 7 * DAY; -// const TWO_WEEK: u32 = 2 * WEEK; -// const YEAR: u32 = DAY * 365; #[frame_support::pallet] pub mod pallet { @@ -115,9 +110,9 @@ #[pallet::constant] type PendingInterval: Get; - /// In chain blocks. - #[pallet::constant] - type Day: Get; // useless + // /// In chain blocks. + // #[pallet::constant] + // type Day: Get; // useless #[pallet::constant] type Nominal: Get>; @@ -150,6 +145,9 @@ /// Amount of accrued interest BalanceOf, ), + Stake(T::AccountId, BalanceOf), + Unstake(T::AccountId, BalanceOf), + SetAdmin(T::AccountId), } #[pallet::error] @@ -205,9 +203,9 @@ ValueQuery, >; - /// A block when app-promotion has started .I think this is redundant, because we only need `NextInterestBlock`. - #[pallet::storage] - pub type StartBlock = StorageValue; + // /// A block when app-promotion has started .I think this is redundant, because we only need `NextInterestBlock`. + // #[pallet::storage] + // pub type StartBlock = StorageValue; // /// Next target block when interest is recalculated // #[pallet::storage] @@ -257,50 +255,14 @@ #[pallet::weight(T::WeightInfo::set_admin_address())] pub fn set_admin_address(origin: OriginFor, admin: T::CrossAccountId) -> DispatchResult { ensure_root(origin)?; + >::set(Some(admin.as_sub().to_owned())); + Self::deposit_event(Event::SetAdmin(admin.as_sub().to_owned())); + Ok(()) } - - // #[pallet::weight(T::WeightInfo::start_app_promotion())] - // pub fn start_app_promotion( - // origin: OriginFor, - // promotion_start_relay_block: Option, - // ) -> DispatchResult - // where - // ::BlockNumber: From, - // { - // ensure_root(origin)?; - - // // Start app-promotion mechanics if it has not been yet initialized - // if >::get() == 0u32.into() { - // let start_block = promotion_start_relay_block - // .unwrap_or(T::RelayBlockNumberProvider::current_block_number()); - - // // Set promotion global start block - // >::set(start_block); - - // >::set(start_block + T::RecalculationInterval::get()); - // } - - // Ok(()) - // } - // #[pallet::weight(T::WeightInfo::stop_app_promotion())] - // pub fn stop_app_promotion(origin: OriginFor) -> DispatchResult - // where - // ::BlockNumber: From, - // { - // ensure_root(origin)?; - - // if >::get() != 0u32.into() { - // >::set(T::BlockNumber::default()); - // >::set(T::BlockNumber::default()); - // } - - // Ok(()) - // } - #[pallet::weight(T::WeightInfo::stake())] pub fn stake(staker: OriginFor, amount: BalanceOf) -> DispatchResult { let staker_id = ensure_signed(staker)?; @@ -350,6 +312,9 @@ ); StakesPerAccount::::mutate(&staker_id, |stakes| *stakes += 1); + + Self::deposit_event(Event::Stake(staker_id, amount)); + Ok(()) } @@ -392,6 +357,8 @@ StakesPerAccount::::remove(&staker_id); + Self::deposit_event(Event::Unstake(staker_id, total_staked)); + Ok(None.into()) } @@ -527,13 +494,13 @@ // } // } // } - + { let mut stakers_number = stakers_number.unwrap_or(20); - let last_id = RefCell::new(None); + let last_id = RefCell::new(None); let income_acc = RefCell::new(BalanceOf::::default()); let amount_acc = RefCell::new(BalanceOf::::default()); - + let flush_stake = || -> DispatchResult { if let Some(last_id) = &*last_id.borrow() { if !income_acc.borrow().is_zero() { @@ -573,7 +540,7 @@ }; *last_id.borrow_mut() = Some(current_id.clone()); if current_recalc_block >= next_recalc_block_for_stake { - *amount_acc.borrow_mut() += amount; + *amount_acc.borrow_mut() += amount; Self::recalculate_and_insert_stake( ¤t_id, staked_block, @@ -588,7 +555,6 @@ } flush_stake()?; } - Ok(()) } --- a/pallets/app-promotion/src/types.rs +++ b/pallets/app-promotion/src/types.rs @@ -5,7 +5,7 @@ use pallet_balances::{BalanceLock, Config as BalancesConfig, Pallet as PalletBalances}; use pallet_common::CollectionHandle; -use pallet_unique::{Event as UniqueEvent, Error as UniqueError}; + use sp_runtime::DispatchError; use up_data_structs::{CollectionId, SponsorshipState}; use sp_std::borrow::ToOwned; @@ -53,36 +53,11 @@ sponsor_id: Self::AccountId, collection_id: Self::CollectionId, ) -> DispatchResult { - let mut target_collection = >::try_get(collection_id)?; - target_collection.check_is_internal()?; - target_collection.set_sponsor(sponsor_id.clone())?; - - Self::deposit_event(UniqueEvent::::CollectionSponsorSet( - collection_id, - sponsor_id.clone(), - )); - - ensure!( - target_collection.confirm_sponsorship(&sponsor_id)?, - UniqueError::::ConfirmUnsetSponsorFail - ); - - Self::deposit_event(UniqueEvent::::SponsorshipConfirmed( - collection_id, - sponsor_id, - )); - - target_collection.save() + Self::force_set_sponsor(sponsor_id, collection_id) } fn remove_collection_sponsor(collection_id: Self::CollectionId) -> DispatchResult { - let mut target_collection = >::try_get(collection_id)?; - target_collection.check_is_internal()?; - target_collection.sponsorship = SponsorshipState::Disabled; - - Self::deposit_event(UniqueEvent::::CollectionSponsorRemoved(collection_id)); - - target_collection.save() + Self::force_remove_collection_sponsor(collection_id) } fn get_sponsor( --- a/pallets/unique/CHANGELOG.md +++ b/pallets/unique/CHANGELOG.md @@ -3,22 +3,27 @@ All notable changes to this project will be documented in this file. + +## [v0.1.4] 2022-09-5 + +### Added + ## [v0.1.3] 2022-08-16 ### Other changes -- build: Upgrade polkadot to v0.9.27 2c498572636f2b34d53b1c51b7283a761a7dc90a +- build: Upgrade polkadot to v0.9.27 2c498572636f2b34d53b1c51b7283a761a7dc90a -- build: Upgrade polkadot to v0.9.26 85515e54c4ca1b82a2630034e55dcc804c643bf8 +- build: Upgrade polkadot to v0.9.26 85515e54c4ca1b82a2630034e55dcc804c643bf8 -- refactor: Remove `#[transactional]` from extrinsics 7fd36cea2f6e00c02c67ccc1de9649ae404efd31 +- refactor: Remove `#[transactional]` from extrinsics 7fd36cea2f6e00c02c67ccc1de9649ae404efd31 Every extrinsic now runs in transaction implicitly, and `#[transactional]` on pallet dispatchable is now meaningless Upstream-Change: https://github.com/paritytech/substrate/issues/10806 -- refactor: Switch to new prefix removal methods 26734e9567589d75cdd99e404eabf11d5a97d975 +- refactor: Switch to new prefix removal methods 26734e9567589d75cdd99e404eabf11d5a97d975 New methods allows to call `remove_prefix` with limit multiple times in the same block @@ -27,10 +32,12 @@ Upstream-Change: https://github.com/paritytech/substrate/pull/11490 -- build: Upgrade polkadot to v0.9.25 cdfb9bdc7b205ff1b5134f034ef9973d769e5e6b +- build: Upgrade polkadot to v0.9.25 cdfb9bdc7b205ff1b5134f034ef9973d769e5e6b ## [v0.1.1] - 2022-07-25 + ### Added -- Method for creating `ERC721Metadata` compatible NFT collection. -- Method for creating `ERC721Metadata` compatible ReFungible collection. -- Method for creating ReFungible collection. + +- Method for creating `ERC721Metadata` compatible NFT collection. +- Method for creating `ERC721Metadata` compatible ReFungible collection. +- Method for creating ReFungible collection. --- a/pallets/unique/Cargo.toml +++ b/pallets/unique/Cargo.toml @@ -9,7 +9,7 @@ license = 'GPLv3' name = 'pallet-unique' repository = 'https://github.com/UniqueNetwork/unique-chain' -version = "0.1.3" +version = "0.1.4" [package.metadata.docs.rs] targets = ['x86_64-unknown-linux-gnu'] --- a/pallets/unique/src/lib.rs +++ b/pallets/unique/src/lib.rs @@ -1103,3 +1103,35 @@ } } } + +impl Pallet { + pub fn force_set_sponsor(sponsor: T::AccountId, collection_id: CollectionId) -> DispatchResult { + let mut target_collection = >::try_get(collection_id)?; + target_collection.check_is_internal()?; + target_collection.set_sponsor(sponsor.clone())?; + + Self::deposit_event(Event::::CollectionSponsorSet( + collection_id, + sponsor.clone(), + )); + + ensure!( + target_collection.confirm_sponsorship(&sponsor)?, + Error::::ConfirmUnsetSponsorFail + ); + + Self::deposit_event(Event::::SponsorshipConfirmed(collection_id, sponsor)); + + target_collection.save() + } + + pub fn force_remove_collection_sponsor(collection_id: CollectionId) -> DispatchResult { + let mut target_collection = >::try_get(collection_id)?; + target_collection.check_is_internal()?; + target_collection.sponsorship = SponsorshipState::Disabled; + + Self::deposit_event(Event::::CollectionSponsorRemoved(collection_id)); + + target_collection.save() + } +} --- a/runtime/common/config/pallets/app_promotion.rs +++ b/runtime/common/config/pallets/app_promotion.rs @@ -22,7 +22,7 @@ use frame_support::{parameter_types, PalletId}; use sp_arithmetic::Perbill; use up_common::{ - constants::{DAYS, UNIQUE, RELAY_DAYS}, + constants::{ UNIQUE, RELAY_DAYS}, types::Balance, }; @@ -32,7 +32,7 @@ pub const RecalculationInterval: BlockNumber = 20; pub const PendingInterval: BlockNumber = 10; pub const Nominal: Balance = UNIQUE; - pub const Day: BlockNumber = DAYS; + // pub const Day: BlockNumber = DAYS; pub IntervalIncome: Perbill = Perbill::from_rational(RecalculationInterval::get(), RELAY_DAYS) * Perbill::from_rational(5u32, 10_000); } @@ -42,7 +42,7 @@ pub const RecalculationInterval: BlockNumber = RELAY_DAYS; pub const PendingInterval: BlockNumber = 7 * RELAY_DAYS; pub const Nominal: Balance = UNIQUE; - pub const Day: BlockNumber = RELAY_DAYS; + // pub const Day: BlockNumber = RELAY_DAYS; pub IntervalIncome: Perbill = Perbill::from_rational(5u32, 10_000); } @@ -56,7 +56,7 @@ type RelayBlockNumberProvider = RelayChainBlockNumberProvider; type RecalculationInterval = RecalculationInterval; type PendingInterval = PendingInterval; - type Day = Day; + // type Day = Day; type Nominal = Nominal; type IntervalIncome = IntervalIncome; type Event = Event; -- gitstuff