difftreelog
add force methods for collection in `Unique` , add events Stake, Unstake, SetAdmin
in: master
8 files changed
Cargo.lockdiffbeforeafterboth647364736474[[package]]6474[[package]]6475name = "pallet-unique"6475name = "pallet-unique"6476version = "0.1.3"6476version = "0.1.4"6477dependencies = [6477dependencies = [6478 "ethereum",6478 "ethereum",6479 "evm-coder",6479 "evm-coder",pallets/app-promotion/src/benchmarking.rsdiffbeforeafterboth545455 payout_stakers{55 payout_stakers{56 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);56 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);57 let share = Perbill::from_rational(1u32, 10);57 let share = Perbill::from_rational(1u32, 100);58 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;58 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;59 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());59 let _ = <T as Config>::Currency::make_free_balance_be(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());60 let staker: T::AccountId = account("caller", 0, SEED);60 let staker: T::AccountId = account("caller", 0, SEED);pallets/app-promotion/src/lib.rsdiffbeforeafterboth75type BalanceOf<T> =76type BalanceOf<T> =76 <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance;77 <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance;7778// const SECONDS_TO_BLOCK: u32 = 6;79// const DAY: u32 = 60 * 60 * 24 / SECONDS_TO_BLOCK;80// const WEEK: u32 = 7 * DAY;81// const TWO_WEEK: u32 = 2 * WEEK;82// const YEAR: u32 = DAY * 365;837884#[frame_support::pallet]79#[frame_support::pallet]85pub mod pallet {80pub mod pallet {115 #[pallet::constant]110 #[pallet::constant]116 type PendingInterval: Get<Self::BlockNumber>;111 type PendingInterval: Get<Self::BlockNumber>;117112118 /// In chain blocks.113 // /// In chain blocks.119 #[pallet::constant]114 // #[pallet::constant]120 type Day: Get<Self::BlockNumber>; // useless115 // type Day: Get<Self::BlockNumber>; // useless121116122 #[pallet::constant]117 #[pallet::constant]123 type Nominal: Get<BalanceOf<Self>>;118 type Nominal: Get<BalanceOf<Self>>;150 /// Amount of accrued interest145 /// Amount of accrued interest151 BalanceOf<T>,146 BalanceOf<T>,152 ),147 ),148 Stake(T::AccountId, BalanceOf<T>),149 Unstake(T::AccountId, BalanceOf<T>),150 SetAdmin(T::AccountId),153 }151 }154152155 #[pallet::error]153 #[pallet::error]205 ValueQuery,203 ValueQuery,206 >;204 >;207205208 /// A block when app-promotion has started .I think this is redundant, because we only need `NextInterestBlock`.206 // /// A block when app-promotion has started .I think this is redundant, because we only need `NextInterestBlock`.209 #[pallet::storage]207 // #[pallet::storage]210 pub type StartBlock<T: Config> = StorageValue<Value = T::BlockNumber, QueryKind = ValueQuery>;208 // pub type StartBlock<T: Config> = StorageValue<Value = T::BlockNumber, QueryKind = ValueQuery>;211209212 // /// Next target block when interest is recalculated210 // /// Next target block when interest is recalculated213 // #[pallet::storage]211 // #[pallet::storage]258260 <Admin<T>>::set(Some(admin.as_sub().to_owned()));259 <Admin<T>>::set(Some(admin.as_sub().to_owned()));260261 Self::deposit_event(Event::SetAdmin(admin.as_sub().to_owned()));261262262 Ok(())263 Ok(())263 }264 }264265 // #[pallet::weight(T::WeightInfo::start_app_promotion())]266 // pub fn start_app_promotion(267 // origin: OriginFor<T>,268 // promotion_start_relay_block: Option<T::BlockNumber>,269 // ) -> DispatchResult270 // where271 // <T as frame_system::Config>::BlockNumber: From<u32>,272 // {273 // ensure_root(origin)?;274275 // // Start app-promotion mechanics if it has not been yet initialized276 // if <StartBlock<T>>::get() == 0u32.into() {277 // let start_block = promotion_start_relay_block278 // .unwrap_or(T::RelayBlockNumberProvider::current_block_number());279280 // // Set promotion global start block281 // <StartBlock<T>>::set(start_block);282283 // <NextInterestBlock<T>>::set(start_block + T::RecalculationInterval::get());284 // }285286 // Ok(())287 // }288289 // #[pallet::weight(T::WeightInfo::stop_app_promotion())]290 // pub fn stop_app_promotion(origin: OriginFor<T>) -> DispatchResult291 // where292 // <T as frame_system::Config>::BlockNumber: From<u32>,293 // {294 // ensure_root(origin)?;295296 // if <StartBlock<T>>::get() != 0u32.into() {297 // <StartBlock<T>>::set(T::BlockNumber::default());298 // <NextInterestBlock<T>>::set(T::BlockNumber::default());299 // }300301 // Ok(())302 // }303265304 #[pallet::weight(T::WeightInfo::stake())]266 #[pallet::weight(T::WeightInfo::stake())]305 pub fn stake(staker: OriginFor<T>, amount: BalanceOf<T>) -> DispatchResult {267 pub fn stake(staker: OriginFor<T>, amount: BalanceOf<T>) -> DispatchResult {351313352 StakesPerAccount::<T>::mutate(&staker_id, |stakes| *stakes += 1);314 StakesPerAccount::<T>::mutate(&staker_id, |stakes| *stakes += 1);315316 Self::deposit_event(Event::Stake(staker_id, amount));317353 Ok(())318 Ok(())354 }319 }392357393 StakesPerAccount::<T>::remove(&staker_id);358 StakesPerAccount::<T>::remove(&staker_id);359360 Self::deposit_event(Event::Unstake(staker_id, total_staked));394361395 Ok(None.into())362 Ok(None.into())396 }363 }pallets/app-promotion/src/types.rsdiffbeforeafterboth556use pallet_balances::{BalanceLock, Config as BalancesConfig, Pallet as PalletBalances};6use pallet_balances::{BalanceLock, Config as BalancesConfig, Pallet as PalletBalances};7use pallet_common::CollectionHandle;7use pallet_common::CollectionHandle;8use pallet_unique::{Event as UniqueEvent, Error as UniqueError};89use sp_runtime::DispatchError;9use sp_runtime::DispatchError;10use up_data_structs::{CollectionId, SponsorshipState};10use up_data_structs::{CollectionId, SponsorshipState};11use sp_std::borrow::ToOwned;11use sp_std::borrow::ToOwned;53 sponsor_id: Self::AccountId,53 sponsor_id: Self::AccountId,54 collection_id: Self::CollectionId,54 collection_id: Self::CollectionId,55 ) -> DispatchResult {55 ) -> DispatchResult {56 let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;57 target_collection.check_is_internal()?;58 target_collection.set_sponsor(sponsor_id.clone())?;5960 Self::deposit_event(UniqueEvent::<T>::CollectionSponsorSet(61 collection_id,62 sponsor_id.clone(),63 ));6465 ensure!(66 target_collection.confirm_sponsorship(&sponsor_id)?,67 UniqueError::<T>::ConfirmUnsetSponsorFail68 );6970 Self::deposit_event(UniqueEvent::<T>::SponsorshipConfirmed(56 Self::force_set_sponsor(sponsor_id, collection_id)71 collection_id,72 sponsor_id,73 ));7475 target_collection.save()76 }57 }775878 fn remove_collection_sponsor(collection_id: Self::CollectionId) -> DispatchResult {59 fn remove_collection_sponsor(collection_id: Self::CollectionId) -> DispatchResult {79 let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;80 target_collection.check_is_internal()?;81 target_collection.sponsorship = SponsorshipState::Disabled;8283 Self::deposit_event(UniqueEvent::<T>::CollectionSponsorRemoved(collection_id));60 Self::force_remove_collection_sponsor(collection_id)8485 target_collection.save()86 }61 }876288 fn get_sponsor(63 fn get_sponsor(pallets/unique/CHANGELOG.mddiffbeforeafterboth3All notable changes to this project will be documented in this file.3All notable changes to this project will be documented in this file.445<!-- bureaucrate goes here -->5<!-- bureaucrate goes here -->67## [v0.1.4] 2022-09-589### Added106## [v0.1.3] 2022-08-1611## [v0.1.3] 2022-08-167128### Other changes13### Other changes91410- build: Upgrade polkadot to v0.9.27 2c498572636f2b34d53b1c51b7283a761a7dc90a15- build: Upgrade polkadot to v0.9.27 2c498572636f2b34d53b1c51b7283a761a7dc90a111612- build: Upgrade polkadot to v0.9.26 85515e54c4ca1b82a2630034e55dcc804c643bf817- build: Upgrade polkadot to v0.9.26 85515e54c4ca1b82a2630034e55dcc804c643bf8131814- refactor: Remove `#[transactional]` from extrinsics 7fd36cea2f6e00c02c67ccc1de9649ae404efd3119- refactor: Remove `#[transactional]` from extrinsics 7fd36cea2f6e00c02c67ccc1de9649ae404efd31152016Every extrinsic now runs in transaction implicitly, and21Every extrinsic now runs in transaction implicitly, and17`#[transactional]` on pallet dispatchable is now meaningless22`#[transactional]` on pallet dispatchable is now meaningless182319Upstream-Change: https://github.com/paritytech/substrate/issues/1080624Upstream-Change: https://github.com/paritytech/substrate/issues/10806202521- refactor: Switch to new prefix removal methods 26734e9567589d75cdd99e404eabf11d5a97d97526- refactor: Switch to new prefix removal methods 26734e9567589d75cdd99e404eabf11d5a97d975222723New methods allows to call `remove_prefix` with limit multiple times28New methods allows to call `remove_prefix` with limit multiple times24in the same block29in the same block273228Upstream-Change: https://github.com/paritytech/substrate/pull/1149033Upstream-Change: https://github.com/paritytech/substrate/pull/11490293430- build: Upgrade polkadot to v0.9.25 cdfb9bdc7b205ff1b5134f034ef9973d769e5e6b35- build: Upgrade polkadot to v0.9.25 cdfb9bdc7b205ff1b5134f034ef9973d769e5e6b313632## [v0.1.1] - 2022-07-2537## [v0.1.1] - 2022-07-253833### Added39### Added4034- Method for creating `ERC721Metadata` compatible NFT collection.41- Method for creating `ERC721Metadata` compatible NFT collection.35- Method for creating `ERC721Metadata` compatible ReFungible collection.42- Method for creating `ERC721Metadata` compatible ReFungible collection.36- Method for creating ReFungible collection.43- Method for creating ReFungible collection.3744pallets/unique/Cargo.tomldiffbeforeafterboth9license = 'GPLv3'9license = 'GPLv3'10name = 'pallet-unique'10name = 'pallet-unique'11repository = 'https://github.com/UniqueNetwork/unique-chain'11repository = 'https://github.com/UniqueNetwork/unique-chain'12version = "0.1.3"12version = "0.1.4"131314[package.metadata.docs.rs]14[package.metadata.docs.rs]15targets = ['x86_64-unknown-linux-gnu']15targets = ['x86_64-unknown-linux-gnu']pallets/unique/src/lib.rsdiffbeforeafterboth1104 }1104 }1105}1105}11061107impl<T: Config> Pallet<T> {1108 pub fn force_set_sponsor(sponsor: T::AccountId, collection_id: CollectionId) -> DispatchResult {1109 let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;1110 target_collection.check_is_internal()?;1111 target_collection.set_sponsor(sponsor.clone())?;11121113 Self::deposit_event(Event::<T>::CollectionSponsorSet(1114 collection_id,1115 sponsor.clone(),1116 ));11171118 ensure!(1119 target_collection.confirm_sponsorship(&sponsor)?,1120 Error::<T>::ConfirmUnsetSponsorFail1121 );11221123 Self::deposit_event(Event::<T>::SponsorshipConfirmed(collection_id, sponsor));11241125 target_collection.save()1126 }11271128 pub fn force_remove_collection_sponsor(collection_id: CollectionId) -> DispatchResult {1129 let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;1130 target_collection.check_is_internal()?;1131 target_collection.sponsorship = SponsorshipState::Disabled;11321133 Self::deposit_event(Event::<T>::CollectionSponsorRemoved(collection_id));11341135 target_collection.save()1136 }1137}11061138runtime/common/config/pallets/app_promotion.rsdiffbeforeafterboth22use frame_support::{parameter_types, PalletId};22use frame_support::{parameter_types, PalletId};23use sp_arithmetic::Perbill;23use sp_arithmetic::Perbill;24use up_common::{24use up_common::{25 constants::{DAYS, UNIQUE, RELAY_DAYS},25 constants::{ UNIQUE, RELAY_DAYS},26 types::Balance,26 types::Balance,27};27};282832 pub const RecalculationInterval: BlockNumber = 20;32 pub const RecalculationInterval: BlockNumber = 20;33 pub const PendingInterval: BlockNumber = 10;33 pub const PendingInterval: BlockNumber = 10;34 pub const Nominal: Balance = UNIQUE;34 pub const Nominal: Balance = UNIQUE;35 pub const Day: BlockNumber = DAYS;35 // pub const Day: BlockNumber = DAYS;36 pub IntervalIncome: Perbill = Perbill::from_rational(RecalculationInterval::get(), RELAY_DAYS) * Perbill::from_rational(5u32, 10_000);36 pub IntervalIncome: Perbill = Perbill::from_rational(RecalculationInterval::get(), RELAY_DAYS) * Perbill::from_rational(5u32, 10_000);37}37}383842 pub const RecalculationInterval: BlockNumber = RELAY_DAYS;42 pub const RecalculationInterval: BlockNumber = RELAY_DAYS;43 pub const PendingInterval: BlockNumber = 7 * RELAY_DAYS;43 pub const PendingInterval: BlockNumber = 7 * RELAY_DAYS;44 pub const Nominal: Balance = UNIQUE;44 pub const Nominal: Balance = UNIQUE;45 pub const Day: BlockNumber = RELAY_DAYS;45 // pub const Day: BlockNumber = RELAY_DAYS;46 pub IntervalIncome: Perbill = Perbill::from_rational(5u32, 10_000);46 pub IntervalIncome: Perbill = Perbill::from_rational(5u32, 10_000);47}47}484856 type RelayBlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;56 type RelayBlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;57 type RecalculationInterval = RecalculationInterval;57 type RecalculationInterval = RecalculationInterval;58 type PendingInterval = PendingInterval;58 type PendingInterval = PendingInterval;59 type Day = Day;59 // type Day = Day;60 type Nominal = Nominal;60 type Nominal = Nominal;61 type IntervalIncome = IntervalIncome;61 type IntervalIncome = IntervalIncome;62 type Event = Event;62 type Event = Event;