mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-03 18:07:24 +00:00
edd81bf6a5
* TODOs * Add auctions.rs, comment on changes needed. * Remove cruft from slots * Remove more from auctions.rs * More logic drafting in slots. * More logic in slots.rs * patch some errors * more fixes * last nit * Cleanups in slots.rs * Cleanups in slots.rs * patches * make build * crowdloan to new api * auction compile * Use ParaId instead of FundIndex in Crowdloan (#2303) * use paraid instead of fundindex * Update crowdloan.rs * check caller is manager * Auction tests and fix build warnings. * Configurable origin for initiating auctions * Remove on_finalize * #2303 (manual merge) * Tests for Slots * some registrar tests * Apply suggestions from code review Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Update runtime/common/src/slots.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Slots uses Registrar for CurrentChains * swap works test * on swap impl * traitify parachain cleanup * explicit lifecycle tracking for paras * initial implementation of lifecycles and upgrades * clean up a bit * Update runtime/common/src/slots.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * fix doc comment * more rigid lifecycle checks * include paras which are transitioning, and lifecycle query * format guide * update api * update guide * explicit outgoing state, fix genesis * handle outgoing with transitioning paras * Revert "explicit lifecycle tracking for paras" This reverts commit 4177af7ba473bbd9c26bccd861793f25265b6657. * remove lifecycle tracking from registrar * do not include transitioning paras in identifier * Update paras_registrar.rs * final patches to registrar * Fix test * use noop in test * clean up pending swap on deregistration * finish registrar tests * Update roadmap/implementers-guide/src/runtime/paras.md * Update roadmap/implementers-guide/src/runtime/paras.md * Update roadmap/implementers-guide/src/runtime/paras.md * Apply suggestions from code review * Use matches macro * Correct terms * Apply suggestions from code review * Remove direct need for Slots and Registrar from Crowdloan * Rejig things slightly * actions queue * Revert "actions queue" This reverts commit b2e9011ec8937d6c73e99292416c9692aeb30f73. * Traitify Auction interface. * Mockups and initial code for Crowdloan testing * One test... * collapse onboarding state * fix some crowdloan tests * one more * start benchmarks for auctions * benchmark bid * fix more crowdloan tests * onboard and begin retirement no longer exist * Revert "onboard and begin retirement no longer exist" This reverts commit 2e100fd94e3540bff5f172328b5d917896f1c6fc. * Simplify crowdloan and make it work. * Fixes * fix some * finish merge fixes * fix refund bug in auctions * Add traits to Registrar for tests and benchmarks * fix more auction benchmarks * Fix TestAuctioneer * finish crowdloan benchmarks * start setting up full integration tests * expand integration tests * finish basic integration test * add more integration tests * begin slots benchmarks * start paras registrar benchmarks * fix merge * fix tests * clean up paras registrar * remove println * remove outdated cleanup config * update benchmarks * Add WeightInfo * enable runtime-benchmarks feature flag * complete swap benchmark * add parachains and onboarding into westend * add benchmarks and genesis * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=slots --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * fix benchmark execution * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=paras_registrar --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * Use `new_raise_len` in crowdloan on_initialize * Update paras_registrar.rs * fix westend merge * impl on_swap for crowdloan * Check fund exists before create * update for crowdloan sig * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * slots on_initialize * use integration tests environment for benchmarks * fix hrmp event * auction on_initialize * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * fix storage name in auctions * add auction_index to winning data * winning data takes into account current auction index * remove println * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=slots --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * Revert "add auction_index to winning data" * PastRandomness. * Fixes * Use new randomness * fix use of randomness in auctions and runtime config * expose consts * fix auction test * add deposit per byte for para registration * basic swap integration test * make swap test more comprehensive * Add WinningVec for easier retrieval in the front-end. * clean up `WinningVec` at the end * Add event for when a new best bid comes in * Fix propagation of winners in ending period * fix benchmarks, refund weight in dissolve * fix unused * remove some TODOs * setup opaque keys for paras in westend * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * remove unused * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/ * back to regular runtime config * use saturating math where user input can be * better first slot check * Update runtime/common/src/claims.rs * update westend onswap impl Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> Co-authored-by: Parity Benchmarking Bot <admin@parity.io>
183 lines
6.7 KiB
Rust
183 lines
6.7 KiB
Rust
// Copyright 2020 Parity Technologies (UK) Ltd.
|
|
// This file is part of Polkadot.
|
|
|
|
// Polkadot is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Polkadot is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//! Traits used across pallets for Polkadot.
|
|
|
|
use sp_std::vec::*;
|
|
use primitives::v1::{HeadData, ValidationCode, Id as ParaId};
|
|
use frame_support::{
|
|
dispatch::DispatchResult,
|
|
traits::{Currency, ReservableCurrency},
|
|
};
|
|
|
|
/// Parachain registration API.
|
|
pub trait Registrar {
|
|
/// The account ID type that encodes a parachain manager ID.
|
|
type AccountId;
|
|
|
|
/// Report the manager (permissioned owner) of a parachain, if there is one.
|
|
fn manager_of(id: ParaId) -> Option<Self::AccountId>;
|
|
|
|
/// All parachains. Ordered ascending by ParaId. Parathreads are not included.
|
|
fn parachains() -> Vec<ParaId>;
|
|
|
|
/// Return if a ParaId is a Parachain.
|
|
fn is_parachain(id: ParaId) -> bool {
|
|
Self::parachains().binary_search(&id).is_ok()
|
|
}
|
|
|
|
/// Return if a ParaId is a Parathread.
|
|
fn is_parathread(id: ParaId) -> bool;
|
|
|
|
/// Return if a ParaId is registered in the system.
|
|
fn is_registered(id: ParaId) -> bool {
|
|
Self::is_parathread(id) || Self::is_parachain(id)
|
|
}
|
|
|
|
// Register a Para ID under control of `who`.
|
|
fn register(
|
|
who: Self::AccountId,
|
|
id: ParaId,
|
|
genesis_head: HeadData,
|
|
validation_code: ValidationCode,
|
|
) -> DispatchResult;
|
|
|
|
// Deregister a Para ID, free any data, and return any deposits.
|
|
fn deregister(id: ParaId) -> DispatchResult;
|
|
|
|
/// Elevate a para to parachain status.
|
|
fn make_parachain(id: ParaId) -> DispatchResult;
|
|
|
|
/// Lower a para back to normal from parachain status.
|
|
fn make_parathread(id: ParaId) -> DispatchResult;
|
|
|
|
#[cfg(any(feature = "runtime-benchmarks", test))]
|
|
fn worst_head_data() -> HeadData;
|
|
|
|
#[cfg(any(feature = "runtime-benchmarks", test))]
|
|
fn worst_validation_code() -> ValidationCode;
|
|
|
|
#[cfg(any(feature = "runtime-benchmarks", test))]
|
|
fn execute_pending_transitions();
|
|
}
|
|
|
|
/// Error type for something that went wrong with leasing.
|
|
pub enum LeaseError {
|
|
/// Unable to reserve the funds in the leaser's account.
|
|
ReserveFailed,
|
|
/// There is already a lease on at least one period for the given para.
|
|
AlreadyLeased,
|
|
/// The period to be leased has already ended.
|
|
AlreadyEnded,
|
|
}
|
|
|
|
/// Lease manager. Used by the auction module to handle parachain slot leases.
|
|
pub trait Leaser {
|
|
/// An account identifier for a leaser.
|
|
type AccountId;
|
|
|
|
/// The measurement type for counting lease periods (generally just a `BlockNumber`).
|
|
type LeasePeriod;
|
|
|
|
/// The currency type in which the lease is taken.
|
|
type Currency: ReservableCurrency<Self::AccountId>;
|
|
|
|
/// Lease a new parachain slot for `para`.
|
|
///
|
|
/// `leaser` shall have a total of `amount` balance reserved by the implementor of this trait.
|
|
///
|
|
/// Note: The implementor of the trait (the leasing system) is expected to do all reserve/unreserve calls. The
|
|
/// caller of this trait *SHOULD NOT* pre-reserve the deposit (though should ensure that it is reservable).
|
|
///
|
|
/// The lease will last from `period_begin` for `period_count` lease periods. It is undefined if the `para`
|
|
/// already has a slot leased during those periods.
|
|
///
|
|
/// Returns `Err` in the case of an error, and in which case nothing is changed.
|
|
fn lease_out(
|
|
para: ParaId,
|
|
leaser: &Self::AccountId,
|
|
amount: <Self::Currency as Currency<Self::AccountId>>::Balance,
|
|
period_begin: Self::LeasePeriod,
|
|
period_count: Self::LeasePeriod,
|
|
) -> Result<(), LeaseError>;
|
|
|
|
/// Return the amount of balance currently held in reserve on `leaser`'s account for leasing `para`. This won't
|
|
/// go down outside of a lease period.
|
|
fn deposit_held(para: ParaId, leaser: &Self::AccountId) -> <Self::Currency as Currency<Self::AccountId>>::Balance;
|
|
|
|
/// The lease period. This is constant, but can't be a `const` due to it being a runtime configurable quantity.
|
|
fn lease_period() -> Self::LeasePeriod;
|
|
|
|
/// Returns the current lease period.
|
|
fn lease_period_index() -> Self::LeasePeriod;
|
|
}
|
|
|
|
pub trait Auctioneer {
|
|
/// An account identifier for a leaser.
|
|
type AccountId;
|
|
|
|
/// The measurement type for counting blocks.
|
|
type BlockNumber;
|
|
|
|
/// The measurement type for counting lease periods (generally the same as `BlockNumber`).
|
|
type LeasePeriod;
|
|
|
|
/// The currency type in which the lease is taken.
|
|
type Currency: ReservableCurrency<Self::AccountId>;
|
|
|
|
/// Create a new auction.
|
|
///
|
|
/// This can only happen when there isn't already an auction in progress. Accepts the `duration`
|
|
/// of this auction and the `lease_period_index` of the initial lease period of the four that
|
|
/// are to be auctioned.
|
|
fn new_auction(duration: Self::BlockNumber, lease_period_index: Self::LeasePeriod) -> DispatchResult;
|
|
|
|
/// Returns `Some(n)` if the `now` block is part of the ending period of an auction, where `n`
|
|
/// represents how far into the ending period this block is. Otherwise, returns `None`.
|
|
fn is_ending(now: Self::BlockNumber) -> Option<Self::BlockNumber>;
|
|
|
|
/// Place a bid in the current auction.
|
|
///
|
|
/// - `bidder`: The account that will be funding this bid.
|
|
/// - `para`: The para to bid for.
|
|
/// - `first_slot`: The first lease period index of the range to be bid on.
|
|
/// - `last_slot`: The last lease period index of the range to be bid on (inclusive).
|
|
/// - `amount`: The total amount to be the bid for deposit over the range.
|
|
///
|
|
/// The account `Bidder` must have at least `amount` available as a free balance in `Currency`. The
|
|
/// implementation *MUST* remove or reserve `amount` funds from `bidder` and those funds should be returned
|
|
/// or freed once the bid is rejected or lease has ended.
|
|
fn place_bid(
|
|
bidder: Self::AccountId,
|
|
para: ParaId,
|
|
first_slot: Self::LeasePeriod,
|
|
last_slot: Self::LeasePeriod,
|
|
amount: <Self::Currency as Currency<Self::AccountId>>::Balance,
|
|
) -> DispatchResult;
|
|
|
|
/// Returns the current lease period.
|
|
fn lease_period_index() -> Self::LeasePeriod;
|
|
}
|
|
|
|
/// Runtime hook for when we swap a parachain and parathread.
|
|
#[impl_trait_for_tuples::impl_for_tuples(30)]
|
|
pub trait OnSwap {
|
|
/// Updates any needed state/references to enact a logical swap of two parachains. Identity,
|
|
/// code and `head_data` remain equivalent for all parachains/threads, however other properties
|
|
/// such as leases, deposits held and thread/chain nature are swapped.
|
|
fn on_swap(one: ParaId, other: ParaId);
|
|
}
|