mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 11:01:01 +00:00
Rococo/Westend Coretime Runtime
New runtimes for the Coretime Chain (a.k.a. "Broker Chain") described in RFC-1. Replaces https://github.com/paritytech/cumulus/pull/2889 - [x] Add Agile Coretime pallet https://github.com/paritytech/substrate/pull/14568 - [x] Generate chain specs for local and testnets - [x] Deploy parachain on Rococo - Done: [rococo-coretime-rpc.polkadot.io](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-coretime-rpc.polkadot.io#/explorer) DevOps issue for Aura keygen: https://github.com/paritytech/devops/issues/2725 Edit (Dónal): This PR is mainly for Rococo, the Westend runtime is a shell with no `Broker` pallet. The Rococo runtime has the broker calls filtered for initial deployment. --------- Co-authored-by: Dónal Murray <donal.murray@parity.io> Co-authored-by: 0xmovses <r.v.melkonian@gmail.com> Co-authored-by: Liam Aharon <liam.aharon@hotmail.com> Co-authored-by: Bastian Köcher <git@kchr.de> Co-authored-by: Marcin S. <marcin@realemail.net> Co-authored-by: Bastian Köcher <info@kchr.de> Co-authored-by: command-bot <> Co-authored-by: Branislav Kontur <bkontur@gmail.com>
This commit is contained in:
@@ -31,7 +31,7 @@ use frame_support::{
|
||||
use frame_system::{Pallet as System, RawOrigin};
|
||||
use sp_arithmetic::{traits::Zero, Perbill};
|
||||
use sp_core::Get;
|
||||
use sp_runtime::Saturating;
|
||||
use sp_runtime::{traits::BlockNumberProvider, Saturating};
|
||||
use sp_std::{vec, vec::Vec};
|
||||
|
||||
const SEED: u32 = 0;
|
||||
@@ -82,6 +82,10 @@ fn setup_leases<T: Config>(n: u32, task: u32, until: u32) {
|
||||
fn advance_to<T: Config>(b: u32) {
|
||||
while System::<T>::block_number() < b.into() {
|
||||
System::<T>::set_block_number(System::<T>::block_number().saturating_add(1u32.into()));
|
||||
|
||||
let block_number: u32 = System::<T>::block_number().try_into().ok().unwrap();
|
||||
|
||||
RCBlockNumberProviderOf::<T::Coretime>::set_block_number(block_number.into());
|
||||
Broker::<T>::on_initialize(System::<T>::block_number());
|
||||
}
|
||||
}
|
||||
@@ -182,7 +186,8 @@ mod benches {
|
||||
|
||||
#[benchmark]
|
||||
fn start_sales(n: Linear<0, { MAX_CORE_COUNT.into() }>) -> Result<(), BenchmarkError> {
|
||||
Configuration::<T>::put(new_config_record::<T>());
|
||||
let config = new_config_record::<T>();
|
||||
Configuration::<T>::put(config.clone());
|
||||
|
||||
// Assume Reservations to be filled for worst case
|
||||
setup_reservations::<T>(T::MaxReservedCores::get());
|
||||
@@ -190,6 +195,8 @@ mod benches {
|
||||
// Assume Leases to be filled for worst case
|
||||
setup_leases::<T>(T::MaxLeasedCores::get(), 1, 10);
|
||||
|
||||
let latest_region_begin = Broker::<T>::latest_timeslice_ready_to_commit(&config);
|
||||
|
||||
let initial_price = 10u32.into();
|
||||
|
||||
let origin =
|
||||
@@ -205,8 +212,8 @@ mod benches {
|
||||
leadin_length: 1u32.into(),
|
||||
start_price: 20u32.into(),
|
||||
regular_price: 10u32.into(),
|
||||
region_begin: 4,
|
||||
region_end: 7,
|
||||
region_begin: latest_region_begin + config.region_length,
|
||||
region_end: latest_region_begin + config.region_length * 2,
|
||||
ideal_cores_sold: 0,
|
||||
cores_offered: n
|
||||
.saturating_sub(T::MaxReservedCores::get())
|
||||
@@ -239,7 +246,11 @@ mod benches {
|
||||
assert_last_event::<T>(
|
||||
Event::Purchased {
|
||||
who: caller,
|
||||
region_id: RegionId { begin: 4, core, mask: CoreMask::complete() },
|
||||
region_id: RegionId {
|
||||
begin: SaleInfo::<T>::get().unwrap().region_begin,
|
||||
core,
|
||||
mask: CoreMask::complete(),
|
||||
},
|
||||
price: 10u32.into(),
|
||||
duration: 3u32.into(),
|
||||
}
|
||||
@@ -252,6 +263,7 @@ mod benches {
|
||||
#[benchmark]
|
||||
fn renew() -> Result<(), BenchmarkError> {
|
||||
setup_and_start_sale::<T>()?;
|
||||
let region_len = Configuration::<T>::get().unwrap().region_length;
|
||||
|
||||
advance_to::<T>(2);
|
||||
|
||||
@@ -267,12 +279,12 @@ mod benches {
|
||||
Broker::<T>::do_assign(region, None, 1001, Final)
|
||||
.map_err(|_| BenchmarkError::Weightless)?;
|
||||
|
||||
advance_to::<T>(6);
|
||||
advance_to::<T>((T::TimeslicePeriod::get() * region_len.into()).try_into().ok().unwrap());
|
||||
|
||||
#[extrinsic_call]
|
||||
_(RawOrigin::Signed(caller), region.core);
|
||||
|
||||
let id = AllowedRenewalId { core: region.core, when: 10 };
|
||||
let id = AllowedRenewalId { core: region.core, when: region.begin + region_len * 2 };
|
||||
assert!(AllowedRenewals::<T>::get(id).is_some());
|
||||
|
||||
Ok(())
|
||||
@@ -331,10 +343,10 @@ mod benches {
|
||||
|
||||
assert_last_event::<T>(
|
||||
Event::Partitioned {
|
||||
old_region_id: RegionId { begin: 4, core, mask: CoreMask::complete() },
|
||||
old_region_id: RegionId { begin: region.begin, core, mask: CoreMask::complete() },
|
||||
new_region_ids: (
|
||||
RegionId { begin: 4, core, mask: CoreMask::complete() },
|
||||
RegionId { begin: 6, core, mask: CoreMask::complete() },
|
||||
RegionId { begin: region.begin, core, mask: CoreMask::complete() },
|
||||
RegionId { begin: region.begin + 2, core, mask: CoreMask::complete() },
|
||||
),
|
||||
}
|
||||
.into(),
|
||||
@@ -363,11 +375,11 @@ mod benches {
|
||||
|
||||
assert_last_event::<T>(
|
||||
Event::Interlaced {
|
||||
old_region_id: RegionId { begin: 4, core, mask: CoreMask::complete() },
|
||||
old_region_id: RegionId { begin: region.begin, core, mask: CoreMask::complete() },
|
||||
new_region_ids: (
|
||||
RegionId { begin: 4, core, mask: 0x00000_fffff_fffff_00000.into() },
|
||||
RegionId { begin: region.begin, core, mask: 0x00000_fffff_fffff_00000.into() },
|
||||
RegionId {
|
||||
begin: 4,
|
||||
begin: region.begin,
|
||||
core,
|
||||
mask: CoreMask::complete() ^ 0x00000_fffff_fffff_00000.into(),
|
||||
},
|
||||
@@ -404,7 +416,7 @@ mod benches {
|
||||
|
||||
assert_last_event::<T>(
|
||||
Event::Assigned {
|
||||
region_id: RegionId { begin: 4, core, mask: CoreMask::complete() },
|
||||
region_id: RegionId { begin: region.begin, core, mask: CoreMask::complete() },
|
||||
task: 1000,
|
||||
duration: 3u32.into(),
|
||||
}
|
||||
@@ -439,7 +451,7 @@ mod benches {
|
||||
|
||||
assert_last_event::<T>(
|
||||
Event::Pooled {
|
||||
region_id: RegionId { begin: 4, core, mask: CoreMask::complete() },
|
||||
region_id: RegionId { begin: region.begin, core, mask: CoreMask::complete() },
|
||||
duration: 3u32.into(),
|
||||
}
|
||||
.into(),
|
||||
@@ -494,7 +506,11 @@ mod benches {
|
||||
who: recipient,
|
||||
amount: 200u32.into(),
|
||||
next: if m < new_config_record::<T>().region_length {
|
||||
Some(RegionId { begin: 4.saturating_add(m), core, mask: CoreMask::complete() })
|
||||
Some(RegionId {
|
||||
begin: region.begin.saturating_add(m),
|
||||
core,
|
||||
mask: CoreMask::complete(),
|
||||
})
|
||||
} else {
|
||||
None
|
||||
},
|
||||
@@ -541,6 +557,7 @@ mod benches {
|
||||
#[benchmark]
|
||||
fn drop_region() -> Result<(), BenchmarkError> {
|
||||
let core = setup_and_start_sale::<T>()?;
|
||||
let region_len = Configuration::<T>::get().unwrap().region_length;
|
||||
|
||||
advance_to::<T>(2);
|
||||
|
||||
@@ -553,14 +570,16 @@ mod benches {
|
||||
let region = Broker::<T>::do_purchase(caller.clone(), 10u32.into())
|
||||
.map_err(|_| BenchmarkError::Weightless)?;
|
||||
|
||||
advance_to::<T>(12);
|
||||
advance_to::<T>(
|
||||
(T::TimeslicePeriod::get() * (region_len * 4).into()).try_into().ok().unwrap(),
|
||||
);
|
||||
|
||||
#[extrinsic_call]
|
||||
_(RawOrigin::Signed(caller), region);
|
||||
|
||||
assert_last_event::<T>(
|
||||
Event::RegionDropped {
|
||||
region_id: RegionId { begin: 4, core, mask: CoreMask::complete() },
|
||||
region_id: RegionId { begin: region.begin, core, mask: CoreMask::complete() },
|
||||
duration: 3u32.into(),
|
||||
}
|
||||
.into(),
|
||||
@@ -572,6 +591,7 @@ mod benches {
|
||||
#[benchmark]
|
||||
fn drop_contribution() -> Result<(), BenchmarkError> {
|
||||
let core = setup_and_start_sale::<T>()?;
|
||||
let region_len = Configuration::<T>::get().unwrap().region_length;
|
||||
|
||||
advance_to::<T>(2);
|
||||
|
||||
@@ -589,14 +609,16 @@ mod benches {
|
||||
Broker::<T>::do_pool(region, None, recipient, Final)
|
||||
.map_err(|_| BenchmarkError::Weightless)?;
|
||||
|
||||
advance_to::<T>(26);
|
||||
advance_to::<T>(
|
||||
(T::TimeslicePeriod::get() * (region_len * 8).into()).try_into().ok().unwrap(),
|
||||
);
|
||||
|
||||
#[extrinsic_call]
|
||||
_(RawOrigin::Signed(caller), region);
|
||||
|
||||
assert_last_event::<T>(
|
||||
Event::ContributionDropped {
|
||||
region_id: RegionId { begin: 4, core, mask: CoreMask::complete() },
|
||||
region_id: RegionId { begin: region.begin, core, mask: CoreMask::complete() },
|
||||
}
|
||||
.into(),
|
||||
);
|
||||
@@ -609,8 +631,11 @@ mod benches {
|
||||
setup_and_start_sale::<T>()?;
|
||||
let when = 5u32.into();
|
||||
let revenue = 10u32.into();
|
||||
let region_len = Configuration::<T>::get().unwrap().region_length;
|
||||
|
||||
advance_to::<T>(25);
|
||||
advance_to::<T>(
|
||||
(T::TimeslicePeriod::get() * (region_len * 8).into()).try_into().ok().unwrap(),
|
||||
);
|
||||
|
||||
let caller: T::AccountId = whitelisted_caller();
|
||||
InstaPoolHistory::<T>::insert(
|
||||
@@ -635,8 +660,11 @@ mod benches {
|
||||
fn drop_renewal() -> Result<(), BenchmarkError> {
|
||||
let core = setup_and_start_sale::<T>()?;
|
||||
let when = 5u32.into();
|
||||
let region_len = Configuration::<T>::get().unwrap().region_length;
|
||||
|
||||
advance_to::<T>(10);
|
||||
advance_to::<T>(
|
||||
(T::TimeslicePeriod::get() * (region_len * 3).into()).try_into().ok().unwrap(),
|
||||
);
|
||||
|
||||
let id = AllowedRenewalId { core, when };
|
||||
let record = AllowedRenewalRecord {
|
||||
@@ -704,10 +732,16 @@ mod benches {
|
||||
);
|
||||
T::Currency::set_balance(&Broker::<T>::account_id(), T::Currency::minimum_balance());
|
||||
|
||||
<T::Coretime as CoretimeInterface>::ensure_notify_revenue_info(10u32.into(), 10u32.into());
|
||||
let timeslice_period: u32 = T::TimeslicePeriod::get().try_into().ok().unwrap();
|
||||
let multiplicator = 5;
|
||||
<T::Coretime as CoretimeInterface>::ensure_notify_revenue_info(
|
||||
(timeslice_period * multiplicator).into(),
|
||||
10u32.into(),
|
||||
);
|
||||
|
||||
let timeslice = multiplicator - 1;
|
||||
InstaPoolHistory::<T>::insert(
|
||||
4u32,
|
||||
timeslice,
|
||||
InstaPoolHistoryRecord {
|
||||
private_contributions: 1u32.into(),
|
||||
system_contributions: 9u32.into(),
|
||||
@@ -722,7 +756,7 @@ mod benches {
|
||||
|
||||
assert_last_event::<T>(
|
||||
Event::ClaimsReady {
|
||||
when: 4u32.into(),
|
||||
when: timeslice.into(),
|
||||
system_payout: 9u32.into(),
|
||||
private_payout: 1u32.into(),
|
||||
}
|
||||
@@ -769,7 +803,7 @@ mod benches {
|
||||
|
||||
#[block]
|
||||
{
|
||||
Broker::<T>::rotate_sale(sale, &config, &status);
|
||||
Broker::<T>::rotate_sale(sale.clone(), &config, &status);
|
||||
}
|
||||
|
||||
assert!(SaleInfo::<T>::get().is_some());
|
||||
@@ -779,8 +813,8 @@ mod benches {
|
||||
leadin_length: 1u32.into(),
|
||||
start_price: 20u32.into(),
|
||||
regular_price: 10u32.into(),
|
||||
region_begin: 4,
|
||||
region_end: 7,
|
||||
region_begin: sale.region_begin + config.region_length,
|
||||
region_end: sale.region_end + config.region_length,
|
||||
ideal_cores_sold: 0,
|
||||
cores_offered: n
|
||||
.saturating_sub(T::MaxReservedCores::get())
|
||||
|
||||
Reference in New Issue
Block a user