mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 03:31:10 +00:00
Add hooks to register event types for decoding (#227)
* Global registration of type segmenters for event decoding * Perform type sizes check when building client * Introduce EventTypeRegistry for global runtime type sizes * Fmt * Register runtime type sizes on creation of EventTypeRegistry * Register more default dispatch types * Add missing type sizes * fmt * Fix up register_type_size builder method * Update doc comments * Make register_default_type_sizes public * Don't allow duplicate registered types * Remove call to supertraits type registration, done manually in Runtime * Fix tests and warnings * Fix duplicate type registration * Fmt * review: use is_empty() Co-authored-by: Niklas Adolfsson <niklasadolfsson1@gmail.com> * Add panic docs Co-authored-by: Niklas Adolfsson <niklasadolfsson1@gmail.com>
This commit is contained in:
+133
-5
@@ -147,13 +147,30 @@ use crate::{
|
||||
balances::{
|
||||
AccountData,
|
||||
Balances,
|
||||
BalancesEventTypeRegistry,
|
||||
},
|
||||
contracts::{
|
||||
Contracts,
|
||||
ContractsEventTypeRegistry,
|
||||
},
|
||||
session::{
|
||||
Session,
|
||||
SessionEventTypeRegistry,
|
||||
},
|
||||
staking::{
|
||||
Staking,
|
||||
StakingEventTypeRegistry,
|
||||
},
|
||||
sudo::{
|
||||
Sudo,
|
||||
SudoEventTypeRegistry,
|
||||
},
|
||||
system::{
|
||||
System,
|
||||
SystemEventTypeRegistry,
|
||||
},
|
||||
contracts::Contracts,
|
||||
session::Session,
|
||||
staking::Staking,
|
||||
sudo::Sudo,
|
||||
system::System,
|
||||
},
|
||||
EventTypeRegistry,
|
||||
};
|
||||
|
||||
/// Runtime trait.
|
||||
@@ -162,6 +179,9 @@ pub trait Runtime: System + Sized + Send + Sync + 'static {
|
||||
type Signature: Verify + Encode + Send + Sync + 'static;
|
||||
/// Transaction extras.
|
||||
type Extra: SignedExtra<Self> + Send + Sync + 'static;
|
||||
|
||||
/// Register type sizes for this runtime
|
||||
fn register_type_sizes(event_type_registry: &mut EventTypeRegistry<Self>);
|
||||
}
|
||||
|
||||
/// Concrete type definitions compatible with those in the default substrate `node_runtime`
|
||||
@@ -178,6 +198,15 @@ impl Staking for DefaultNodeRuntime {}
|
||||
impl Runtime for DefaultNodeRuntime {
|
||||
type Signature = MultiSignature;
|
||||
type Extra = DefaultExtra<Self>;
|
||||
|
||||
fn register_type_sizes(event_type_registry: &mut EventTypeRegistry<Self>) {
|
||||
event_type_registry.with_system();
|
||||
event_type_registry.with_balances();
|
||||
event_type_registry.with_session();
|
||||
event_type_registry.with_contracts();
|
||||
event_type_registry.with_sudo();
|
||||
register_default_type_sizes(event_type_registry);
|
||||
}
|
||||
}
|
||||
|
||||
impl System for DefaultNodeRuntime {
|
||||
@@ -217,6 +246,14 @@ pub struct NodeTemplateRuntime;
|
||||
impl Runtime for NodeTemplateRuntime {
|
||||
type Signature = MultiSignature;
|
||||
type Extra = DefaultExtra<Self>;
|
||||
|
||||
fn register_type_sizes(event_type_registry: &mut EventTypeRegistry<Self>) {
|
||||
event_type_registry.with_system();
|
||||
event_type_registry.with_balances();
|
||||
event_type_registry.with_session();
|
||||
event_type_registry.with_sudo();
|
||||
register_default_type_sizes(event_type_registry);
|
||||
}
|
||||
}
|
||||
|
||||
impl System for NodeTemplateRuntime {
|
||||
@@ -253,6 +290,14 @@ pub struct ContractsTemplateRuntime;
|
||||
impl Runtime for ContractsTemplateRuntime {
|
||||
type Signature = <NodeTemplateRuntime as Runtime>::Signature;
|
||||
type Extra = DefaultExtra<Self>;
|
||||
|
||||
fn register_type_sizes(event_type_registry: &mut EventTypeRegistry<Self>) {
|
||||
event_type_registry.with_system();
|
||||
event_type_registry.with_balances();
|
||||
event_type_registry.with_contracts();
|
||||
event_type_registry.with_sudo();
|
||||
register_default_type_sizes(event_type_registry);
|
||||
}
|
||||
}
|
||||
|
||||
impl System for ContractsTemplateRuntime {
|
||||
@@ -287,6 +332,14 @@ pub struct KusamaRuntime;
|
||||
impl Runtime for KusamaRuntime {
|
||||
type Signature = MultiSignature;
|
||||
type Extra = DefaultExtra<Self>;
|
||||
|
||||
fn register_type_sizes(event_type_registry: &mut EventTypeRegistry<Self>) {
|
||||
event_type_registry.with_system();
|
||||
event_type_registry.with_balances();
|
||||
event_type_registry.with_session();
|
||||
event_type_registry.with_staking();
|
||||
register_default_type_sizes(event_type_registry);
|
||||
}
|
||||
}
|
||||
|
||||
impl System for KusamaRuntime {
|
||||
@@ -311,3 +364,78 @@ impl Staking for KusamaRuntime {}
|
||||
impl Balances for KusamaRuntime {
|
||||
type Balance = u128;
|
||||
}
|
||||
|
||||
/// Identity of a Grandpa authority.
|
||||
pub type AuthorityId = crate::runtimes::app::grandpa::Public;
|
||||
/// The weight of an authority.
|
||||
pub type AuthorityWeight = u64;
|
||||
/// A list of Grandpa authorities with associated weights.
|
||||
pub type AuthorityList = Vec<(AuthorityId, AuthorityWeight)>;
|
||||
|
||||
/// Register default common runtime type sizes
|
||||
pub fn register_default_type_sizes<T: Runtime>(
|
||||
event_type_registry: &mut EventTypeRegistry<T>,
|
||||
) {
|
||||
// primitives
|
||||
event_type_registry.register_type_size::<bool>("bool");
|
||||
event_type_registry.register_type_size::<u8>("u8");
|
||||
event_type_registry.register_type_size::<u32>("u32");
|
||||
event_type_registry.register_type_size::<u64>("u64");
|
||||
event_type_registry.register_type_size::<u128>("u128");
|
||||
|
||||
event_type_registry.register_type_size::<()>("PhantomData");
|
||||
|
||||
// frame_support types
|
||||
event_type_registry
|
||||
.register_type_size::<frame_support::dispatch::DispatchInfo>("DispatchInfo");
|
||||
event_type_registry
|
||||
.register_type_size::<frame_support::dispatch::DispatchResult>("DispatchResult");
|
||||
event_type_registry
|
||||
.register_type_size::<frame_support::dispatch::DispatchError>("DispatchError");
|
||||
event_type_registry
|
||||
.register_type_size::<frame_support::traits::BalanceStatus>("Status");
|
||||
|
||||
// aliases etc.
|
||||
event_type_registry.register_type_size::<u32>("ReferendumIndex");
|
||||
event_type_registry.register_type_size::<[u8; 16]>("Kind");
|
||||
|
||||
event_type_registry.register_type_size::<u32>("AccountIndex");
|
||||
event_type_registry.register_type_size::<u32>("PropIndex");
|
||||
event_type_registry.register_type_size::<u32>("ProposalIndex");
|
||||
event_type_registry.register_type_size::<u32>("AuthorityIndex");
|
||||
event_type_registry.register_type_size::<u32>("MemberCount");
|
||||
|
||||
event_type_registry.register_type_size::<u8>("VoteThreshold");
|
||||
event_type_registry
|
||||
.register_type_size::<(T::BlockNumber, u32)>("TaskAddress<BlockNumber>");
|
||||
|
||||
event_type_registry.register_type_size::<AuthorityId>("AuthorityId");
|
||||
event_type_registry.register_type_size::<AuthorityWeight>("AuthorityWeight");
|
||||
event_type_registry
|
||||
.register_type_size::<Vec<(AuthorityId, AuthorityWeight)>>("AuthorityList");
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn can_register_default_runtime_type_sizes() {
|
||||
EventTypeRegistry::<DefaultNodeRuntime>::new();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn can_register_node_template_runtime_type_sizes() {
|
||||
EventTypeRegistry::<NodeTemplateRuntime>::new();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn can_register_contracts_template_runtime_type_sizes() {
|
||||
EventTypeRegistry::<ContractsTemplateRuntime>::new();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn can_register_kusama_runtime_type_sizes() {
|
||||
EventTypeRegistry::<KusamaRuntime>::new();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user