#![cfg_attr(feature = "runtime-benchmarks", recursion_limit = "256")]
#![cfg_attr(not(feature = "std"), no_std)]
pub mod assigner_coretime;
pub mod configuration;
pub mod coretime;
pub mod disputes;
pub mod dmp;
pub mod hrmp;
pub mod inclusion;
pub mod initializer;
pub mod metrics;
pub mod on_demand;
pub mod origin;
pub mod paras;
pub mod paras_inherent;
pub mod reward_points;
pub mod scheduler;
pub mod session_info;
pub mod shared;
pub mod runtime_api_impl;
mod util;
#[cfg(any(feature = "runtime-benchmarks", test))]
mod builder;
#[cfg(test)]
mod mock;
#[cfg(test)]
mod ump_tests;
extern crate alloc;
pub use origin::{ensure_teyrchain, Origin};
pub use paras::{ParaLifecycle, UpgradeStrategy};
use pezkuwi_primitives::{HeadData, Id as ParaId, ValidationCode};
use pezsp_arithmetic::traits::Saturating;
use pezsp_runtime::{traits::Get, DispatchResult, FixedU128};
pub trait FeeTracker {
type Id: Copy;
const MIN_FEE_FACTOR: FixedU128 = FixedU128::from_u32(1);
const EXPONENTIAL_FEE_BASE: FixedU128 = FixedU128::from_rational(105, 100); const MESSAGE_SIZE_FEE_BASE: FixedU128 = FixedU128::from_rational(1, 1000);
fn get_fee_factor(id: Self::Id) -> FixedU128;
fn set_fee_factor(id: Self::Id, val: FixedU128);
fn do_increase_fee_factor(fee_factor: &mut FixedU128, message_size: u128) {
let message_size_factor = FixedU128::from(message_size.saturating_div(1024))
.saturating_mul(Self::MESSAGE_SIZE_FEE_BASE);
*fee_factor = fee_factor
.saturating_mul(Self::EXPONENTIAL_FEE_BASE.saturating_add(message_size_factor));
}
fn increase_fee_factor(id: Self::Id, message_size: u128) {
let mut fee_factor = Self::get_fee_factor(id);
Self::do_increase_fee_factor(&mut fee_factor, message_size);
Self::set_fee_factor(id, fee_factor);
}
fn do_decrease_fee_factor(fee_factor: &mut FixedU128) -> bool {
const { assert!(Self::EXPONENTIAL_FEE_BASE.into_inner() >= FixedU128::from_u32(1).into_inner()) }
if *fee_factor == Self::MIN_FEE_FACTOR {
return false;
}
*fee_factor = Self::MIN_FEE_FACTOR.max(*fee_factor / Self::EXPONENTIAL_FEE_BASE);
true
}
fn decrease_fee_factor(id: Self::Id) -> bool {
let mut fee_factor = Self::get_fee_factor(id);
let res = Self::do_decrease_fee_factor(&mut fee_factor);
Self::set_fee_factor(id, fee_factor);
res
}
}
pub struct GetMinFeeFactor<T>(core::marker::PhantomData<T>);
impl<T: FeeTracker> Get<FixedU128> for GetMinFeeFactor<T> {
fn get() -> FixedU128 {
T::MIN_FEE_FACTOR
}
}
pub fn schedule_para_initialize<T: paras::Config>(
id: ParaId,
genesis: paras::ParaGenesisArgs,
) -> Result<(), ()> {
paras::Pezpallet::<T>::schedule_para_initialize(id, genesis).map_err(|_| ())
}
pub fn schedule_para_cleanup<T: paras::Config>(id: pezkuwi_primitives::Id) -> Result<(), ()> {
paras::Pezpallet::<T>::schedule_para_cleanup(id).map_err(|_| ())
}
pub fn schedule_parathread_upgrade<T: paras::Config>(id: ParaId) -> Result<(), ()> {
paras::Pezpallet::<T>::schedule_parathread_upgrade(id).map_err(|_| ())
}
pub fn schedule_teyrchain_downgrade<T: paras::Config>(id: ParaId) -> Result<(), ()> {
paras::Pezpallet::<T>::schedule_teyrchain_downgrade(id).map_err(|_| ())
}
pub fn schedule_code_upgrade<T: paras::Config>(
id: ParaId,
new_code: ValidationCode,
set_go_ahead: UpgradeStrategy,
) -> DispatchResult {
paras::Pezpallet::<T>::schedule_code_upgrade_external(id, new_code, set_go_ahead)
}
pub fn set_current_head<T: paras::Config>(id: ParaId, new_head: HeadData) {
paras::Pezpallet::<T>::set_current_head(id, new_head)
}
#[cfg(feature = "runtime-benchmarks")]
pub trait EnsureForTeyrchain {
fn ensure(para_id: ParaId);
}
#[cfg(feature = "runtime-benchmarks")]
#[impl_trait_for_tuples::impl_for_tuples(30)]
impl EnsureForTeyrchain for Tuple {
fn ensure(para: ParaId) {
for_tuples!( #(
Tuple::ensure(para);
)* );
}
}