diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..a712d47 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,68 @@ +name: Rust + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Rust stable + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + + - name: Install Rust nightly + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + override: false + + - name: Install rustfmt for nightly + run: rustup component add --toolchain nightly rustfmt + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y protobuf-compiler + + - name: Install Rust dependencies + run: cargo fetch + + - name: Build + run: cargo +nightly build --verbose + + - name: Run cargo fmt + run: cargo +nightly fmt -- --check + + - name: Run cargo clippy + run: cargo +nightly clippy -- -D warnings + + - name: Install cargo-tarpaulin + run: cargo install cargo-tarpaulin + + - name: Run cargo tarpaulin + run: cargo +nightly tarpaulin --rustflags="-C opt-level=0" --no-fail-fast --out xml + + - name: Generate Code Coverage Summary + uses: irongut/CodeCoverageSummary@v1.3.0 + with: + filename: cobertura.xml + badge: true + fail_below_min: false + thresholds: '70 85' + output: both + format: markdown + + - name: Export Job Summary + run: echo "$(> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/indexer/Cargo.toml b/indexer/Cargo.toml index 41e67b7..603f076 100644 --- a/indexer/Cargo.toml +++ b/indexer/Cargo.toml @@ -19,4 +19,4 @@ byte-unit = "4.0.19" serde = { version = "1.0.162", features = ["derive"] } zerocopy = "0.7.8" tracing-log = "0.2.0" -acuity-index-substrate = { path = "../../idn-acuity-index-substrate" } +acuity-index-substrate = { git = "https://github.com/ideal-lab5/idn-acuity-index-substrate", version = "=0.6.2" } diff --git a/indexer/src/ideal.rs b/indexer/src/ideal.rs index e75bd19..fbd17fc 100644 --- a/indexer/src/ideal.rs +++ b/indexer/src/ideal.rs @@ -1,10 +1,10 @@ use ideal_network_local_metadata::ideal_network_local_metadata::{ - runtime_types::{ - frame_system::pallet::Event as SystemEvent, - pallet_balances::pallet::Event as BalancesEvent, - // Add other relevant event imports for your ideal network - }, - Event, + runtime_types::{ + frame_system::pallet::Event as SystemEvent, + pallet_balances::pallet::Event as BalancesEvent, + // Add other relevant event imports for your ideal network + }, + Event, }; use crate::*; @@ -14,41 +14,41 @@ use hex_literal::hex; pub struct IdealIndexer; impl acuity_index_substrate::shared::RuntimeIndexer for IdealIndexer { - type RuntimeConfig = subxt::PolkadotConfig; // You might need to adjust this based on your chain's configuration - type ChainKey = ChainKey; - - fn get_name() -> &'static str { - "ideal" - } - - fn get_genesis_hash() -> ::Hash { - // Replace with your chain's genesis hash - hex!["af97825bf72091072a08b9dbff88d6664e2061bcb4e28a90f17bd85572d8f8ae"].into() // Temporary placeholder - } - - fn get_versions() -> &'static [u32] { - &[0] - } - - fn get_default_url() -> &'static str { - "ws://127.0.0.1:1234" // Replace with your actual endpoint - } - - fn process_event( - indexer: &acuity_index_substrate::substrate::Indexer, - block_number: u32, - event_index: u16, - event: subxt::events::EventDetails, - ) -> Result { - Ok(match event.as_root_event::()? { - Event::System(event) => { - index_system_event![SystemEvent, event, indexer, block_number, event_index] - } - Event::Balances(event) => { - index_balances_event![BalancesEvent, event, indexer, block_number, event_index] - } - // Add other event handlers as needed - _ => 0, - }) - } + type RuntimeConfig = subxt::PolkadotConfig; // You might need to adjust this based on your chain's configuration + type ChainKey = ChainKey; + + fn get_name() -> &'static str { + "ideal" + } + + fn get_genesis_hash() -> ::Hash { + // Replace with your chain's genesis hash + hex!["af97825bf72091072a08b9dbff88d6664e2061bcb4e28a90f17bd85572d8f8ae"].into() // Temporary placeholder + } + + fn get_versions() -> &'static [u32] { + &[0] + } + + fn get_default_url() -> &'static str { + "ws://127.0.0.1:1234" // Replace with your actual endpoint + } + + fn process_event( + indexer: &acuity_index_substrate::substrate::Indexer, + block_number: u32, + event_index: u16, + event: subxt::events::EventDetails, + ) -> Result { + Ok(match event.as_root_event::()? { + Event::System(event) => { + index_system_event![SystemEvent, event, indexer, block_number, event_index] + }, + Event::Balances(event) => { + index_balances_event![BalancesEvent, event, indexer, block_number, event_index] + }, + // Add other event handlers as needed + _ => 0, + }) + } } diff --git a/indexer/src/kusama.rs b/indexer/src/kusama.rs index afd0769..f34c38e 100644 --- a/indexer/src/kusama.rs +++ b/indexer/src/kusama.rs @@ -1,35 +1,35 @@ use kusama_metadata::kusama_metadata::{ - runtime_types::{ - frame_system::pallet::Event as SystemEvent, - pallet_bags_list::pallet::Event as BagsListEvent, - pallet_balances::pallet::Event as BalancesEvent, - pallet_bounties::pallet::Event as BountiesEvent, - pallet_child_bounties::pallet::Event as ChildBountiesEvent, - pallet_election_provider_multi_phase::pallet::Event as ElectionProviderMultiPhaseEvent, - pallet_fast_unstake::pallet::Event as FastUnstakeEvent, - pallet_identity::pallet::Event as IdentityEvent, - pallet_indices::pallet::Event as IndicesEvent, - pallet_multisig::pallet::Event as MultisigEvent, - pallet_nomination_pools::pallet::Event as NominationPoolsEvent, - pallet_preimage::pallet::Event as PreimageEvent, - pallet_proxy::pallet::Event as ProxyEvent, - pallet_session::pallet::Event as SessionEvent, - pallet_staking::pallet::pallet::Event as StakingEvent, - pallet_transaction_payment::pallet::Event as TransactionPaymentEvent, - pallet_treasury::pallet::Event as TreasuryEvent, - pallet_vesting::pallet::Event as VestingEvent, - polkadot_runtime_common::{ - auctions::pallet::Event as AuctionsEvent, claims::pallet::Event as ClaimsEvent, - crowdloan::pallet::Event as CrowdloanEvent, - paras_registrar::pallet::Event as ParasRegistrarEvent, - slots::pallet::Event as SlotsEvent, - }, - polkadot_runtime_parachains::{ - disputes::pallet::Event as DisputesEvent, hrmp::pallet::Event as HrmpEvent, - paras::pallet::Event as ParasEvent, - }, - }, - Event, + runtime_types::{ + frame_system::pallet::Event as SystemEvent, + pallet_bags_list::pallet::Event as BagsListEvent, + pallet_balances::pallet::Event as BalancesEvent, + pallet_bounties::pallet::Event as BountiesEvent, + pallet_child_bounties::pallet::Event as ChildBountiesEvent, + pallet_election_provider_multi_phase::pallet::Event as ElectionProviderMultiPhaseEvent, + pallet_fast_unstake::pallet::Event as FastUnstakeEvent, + pallet_identity::pallet::Event as IdentityEvent, + pallet_indices::pallet::Event as IndicesEvent, + pallet_multisig::pallet::Event as MultisigEvent, + pallet_nomination_pools::pallet::Event as NominationPoolsEvent, + pallet_preimage::pallet::Event as PreimageEvent, + pallet_proxy::pallet::Event as ProxyEvent, + pallet_session::pallet::Event as SessionEvent, + pallet_staking::pallet::pallet::Event as StakingEvent, + pallet_transaction_payment::pallet::Event as TransactionPaymentEvent, + pallet_treasury::pallet::Event as TreasuryEvent, + pallet_vesting::pallet::Event as VestingEvent, + polkadot_runtime_common::{ + auctions::pallet::Event as AuctionsEvent, claims::pallet::Event as ClaimsEvent, + crowdloan::pallet::Event as CrowdloanEvent, + paras_registrar::pallet::Event as ParasRegistrarEvent, + slots::pallet::Event as SlotsEvent, + }, + polkadot_runtime_parachains::{ + disputes::pallet::Event as DisputesEvent, hrmp::pallet::Event as HrmpEvent, + paras::pallet::Event as ParasEvent, + }, + }, + Event, }; use crate::*; @@ -40,149 +40,149 @@ use hex_literal::hex; pub struct KusamaIndexer; impl acuity_index_substrate::shared::RuntimeIndexer for KusamaIndexer { - type RuntimeConfig = subxt::PolkadotConfig; - type ChainKey = ChainKey; + type RuntimeConfig = subxt::PolkadotConfig; + type ChainKey = ChainKey; - fn get_name() -> &'static str { - "kusama" - } + fn get_name() -> &'static str { + "kusama" + } - fn get_genesis_hash() -> ::Hash { - hex!["b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe"].into() - } + fn get_genesis_hash() -> ::Hash { + hex!["b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe"].into() + } - fn get_versions() -> &'static [u32] { - &[0] - } + fn get_versions() -> &'static [u32] { + &[0] + } - fn get_default_url() -> &'static str { - "wss://kusama-rpc.polkadot.io:443" - } + fn get_default_url() -> &'static str { + "wss://kusama-rpc.polkadot.io:443" + } - fn process_event( - indexer: &acuity_index_substrate::substrate::Indexer, - block_number: u32, - event_index: u16, - event: subxt::events::EventDetails, - ) -> Result { - Ok(match event.as_root_event::()? { - // Substrate pallets. - Event::System(event) => { - index_system_event![SystemEvent, event, indexer, block_number, event_index] - } - Event::Preimage(event) => { - index_preimage_event![PreimageEvent, event, indexer, block_number, event_index] - } - Event::Indices(event) => { - index_indices_event![IndicesEvent, event, indexer, block_number, event_index] - } - Event::Balances(event) => { - index_balances_event![BalancesEvent, event, indexer, block_number, event_index] - } - Event::TransactionPayment(event) => { - index_transaction_payment_event![ - TransactionPaymentEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::Staking(event) => { - index_staking_event![StakingEvent, event, indexer, block_number, event_index] - } - Event::Session(event) => { - index_session_event![SessionEvent, event, indexer, block_number, event_index] - } - Event::Treasury(event) => { - index_treasury_event![TreasuryEvent, event, indexer, block_number, event_index] - } - Event::Vesting(event) => { - index_vesting_event![VestingEvent, event, indexer, block_number, event_index] - } - Event::Identity(event) => { - index_identity_event![IdentityEvent, event, indexer, block_number, event_index] - } - Event::Proxy(event) => { - index_proxy_event![ProxyEvent, event, indexer, block_number, event_index] - } - Event::Multisig(event) => { - index_multisig_event![MultisigEvent, event, indexer, block_number, event_index] - } - Event::Bounties(event) => { - index_bounties_event![BountiesEvent, event, indexer, block_number, event_index] - } - Event::ChildBounties(event) => { - index_child_bounties_event![ - ChildBountiesEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::ElectionProviderMultiPhase(event) => { - index_election_provider_multi_phase_event![ - ElectionProviderMultiPhaseEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::VoterList(event) => { - index_bags_list_event![BagsListEvent, event, indexer, block_number, event_index] - } - Event::NominationPools(event) => { - index_nomination_pools_event![ - NominationPoolsEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::FastUnstake(event) => { - index_fast_unstake_event![ - FastUnstakeEvent, - event, - indexer, - block_number, - event_index - ] - } - // Polkadot pallets. - Event::Claims(event) => { - index_claims_event![ClaimsEvent, event, indexer, block_number, event_index] - } - Event::Paras(event) => { - index_paras_event![ParasEvent, event, indexer, block_number, event_index] - } - Event::Hrmp(event) => { - index_hrmp_event![HrmpEvent, event, indexer, block_number, event_index] - } - Event::ParasDisputes(event) => { - index_disputes_event![DisputesEvent, event, indexer, block_number, event_index] - } - Event::Registrar(event) => { - index_paras_registrar_event![ - ParasRegistrarEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::Slots(event) => { - index_slots_event![SlotsEvent, event, indexer, block_number, event_index] - } - Event::Auctions(event) => { - index_auctions_event![AuctionsEvent, event, indexer, block_number, event_index] - } - Event::Crowdloan(event) => { - index_crowdloan_event![CrowdloanEvent, event, indexer, block_number, event_index] - } - _ => 0, - }) - } + fn process_event( + indexer: &acuity_index_substrate::substrate::Indexer, + block_number: u32, + event_index: u16, + event: subxt::events::EventDetails, + ) -> Result { + Ok(match event.as_root_event::()? { + // Substrate pallets. + Event::System(event) => { + index_system_event![SystemEvent, event, indexer, block_number, event_index] + }, + Event::Preimage(event) => { + index_preimage_event![PreimageEvent, event, indexer, block_number, event_index] + }, + Event::Indices(event) => { + index_indices_event![IndicesEvent, event, indexer, block_number, event_index] + }, + Event::Balances(event) => { + index_balances_event![BalancesEvent, event, indexer, block_number, event_index] + }, + Event::TransactionPayment(event) => { + index_transaction_payment_event![ + TransactionPaymentEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::Staking(event) => { + index_staking_event![StakingEvent, event, indexer, block_number, event_index] + }, + Event::Session(event) => { + index_session_event![SessionEvent, event, indexer, block_number, event_index] + }, + Event::Treasury(event) => { + index_treasury_event![TreasuryEvent, event, indexer, block_number, event_index] + }, + Event::Vesting(event) => { + index_vesting_event![VestingEvent, event, indexer, block_number, event_index] + }, + Event::Identity(event) => { + index_identity_event![IdentityEvent, event, indexer, block_number, event_index] + }, + Event::Proxy(event) => { + index_proxy_event![ProxyEvent, event, indexer, block_number, event_index] + }, + Event::Multisig(event) => { + index_multisig_event![MultisigEvent, event, indexer, block_number, event_index] + }, + Event::Bounties(event) => { + index_bounties_event![BountiesEvent, event, indexer, block_number, event_index] + }, + Event::ChildBounties(event) => { + index_child_bounties_event![ + ChildBountiesEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::ElectionProviderMultiPhase(event) => { + index_election_provider_multi_phase_event![ + ElectionProviderMultiPhaseEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::VoterList(event) => { + index_bags_list_event![BagsListEvent, event, indexer, block_number, event_index] + }, + Event::NominationPools(event) => { + index_nomination_pools_event![ + NominationPoolsEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::FastUnstake(event) => { + index_fast_unstake_event![ + FastUnstakeEvent, + event, + indexer, + block_number, + event_index + ] + }, + // Polkadot pallets. + Event::Claims(event) => { + index_claims_event![ClaimsEvent, event, indexer, block_number, event_index] + }, + Event::Paras(event) => { + index_paras_event![ParasEvent, event, indexer, block_number, event_index] + }, + Event::Hrmp(event) => { + index_hrmp_event![HrmpEvent, event, indexer, block_number, event_index] + }, + Event::ParasDisputes(event) => { + index_disputes_event![DisputesEvent, event, indexer, block_number, event_index] + }, + Event::Registrar(event) => { + index_paras_registrar_event![ + ParasRegistrarEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::Slots(event) => { + index_slots_event![SlotsEvent, event, indexer, block_number, event_index] + }, + Event::Auctions(event) => { + index_auctions_event![AuctionsEvent, event, indexer, block_number, event_index] + }, + Event::Crowdloan(event) => { + index_crowdloan_event![CrowdloanEvent, event, indexer, block_number, event_index] + }, + _ => 0, + }) + } } diff --git a/indexer/src/main.rs b/indexer/src/main.rs index ec40a0b..ac77188 100644 --- a/indexer/src/main.rs +++ b/indexer/src/main.rs @@ -13,142 +13,128 @@ mod tests; #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)] pub enum Chain { - Polkadot, - Kusama, - Rococo, - Westend, - Ideal, + Polkadot, + Kusama, + Rococo, + Westend, + Ideal, } #[derive(Clone, ValueEnum, Debug)] pub enum DbMode { - LowSpace, - HighThroughput, + LowSpace, + HighThroughput, } impl From for sled::Mode { - fn from(val: DbMode) -> Self { - match val { - DbMode::LowSpace => sled::Mode::LowSpace, - DbMode::HighThroughput => sled::Mode::HighThroughput, - } - } + fn from(val: DbMode) -> Self { + match val { + DbMode::LowSpace => sled::Mode::LowSpace, + DbMode::HighThroughput => sled::Mode::HighThroughput, + } + } } #[derive(Clone, Debug)] pub struct ChainTrees { - pub auction_index: Tree, - pub candidate_hash: Tree, - pub para_id: Tree, + pub auction_index: Tree, + pub candidate_hash: Tree, + pub para_id: Tree, } impl IndexTrees for ChainTrees { - fn open(db: &Db) -> Result { - Ok(ChainTrees { - auction_index: db.open_tree(b"auction_index")?, - candidate_hash: db.open_tree(b"candiate_hash")?, - para_id: db.open_tree(b"para_id")?, - }) - } + fn open(db: &Db) -> Result { + Ok(ChainTrees { + auction_index: db.open_tree(b"auction_index")?, + candidate_hash: db.open_tree(b"candiate_hash")?, + para_id: db.open_tree(b"para_id")?, + }) + } - fn flush(&self) -> Result<(), sled::Error> { - self.auction_index.flush()?; - self.candidate_hash.flush()?; - self.para_id.flush()?; - Ok(()) - } + fn flush(&self) -> Result<(), sled::Error> { + self.auction_index.flush()?; + self.candidate_hash.flush()?; + self.para_id.flush()?; + Ok(()) + } } #[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, Hash)] #[serde(tag = "type", content = "value")] pub enum ChainKey { - AuctionIndex(u32), - CandidateHash(Bytes32), - ParaId(u32), + AuctionIndex(u32), + CandidateHash(Bytes32), + ParaId(u32), } impl IndexKey for ChainKey { - type ChainTrees = ChainTrees; + type ChainTrees = ChainTrees; - fn write_db_key( - &self, - trees: &ChainTrees, - block_number: u32, - event_index: u16, - ) -> Result<(), sled::Error> { - let block_number = block_number.into(); - let event_index = event_index.into(); - match self { - ChainKey::AuctionIndex(auction_index) => { - let key = U32Key { - key: (*auction_index).into(), - block_number, - event_index, - }; - trees.auction_index.insert(key.as_bytes(), &[])? - } - ChainKey::CandidateHash(candidate_hash) => { - let key = Bytes32Key { - key: candidate_hash.0, - block_number, - event_index, - }; - trees.candidate_hash.insert(key.as_bytes(), &[])? - } - ChainKey::ParaId(para_id) => { - let key = U32Key { - key: (*para_id).into(), - block_number, - event_index, - }; - trees.para_id.insert(key.as_bytes(), &[])? - } - }; - Ok(()) - } + fn write_db_key( + &self, + trees: &ChainTrees, + block_number: u32, + event_index: u16, + ) -> Result<(), sled::Error> { + let block_number = block_number.into(); + let event_index = event_index.into(); + match self { + ChainKey::AuctionIndex(auction_index) => { + let key = U32Key { key: (*auction_index).into(), block_number, event_index }; + trees.auction_index.insert(key.as_bytes(), &[])? + }, + ChainKey::CandidateHash(candidate_hash) => { + let key = Bytes32Key { key: candidate_hash.0, block_number, event_index }; + trees.candidate_hash.insert(key.as_bytes(), &[])? + }, + ChainKey::ParaId(para_id) => { + let key = U32Key { key: (*para_id).into(), block_number, event_index }; + trees.para_id.insert(key.as_bytes(), &[])? + }, + }; + Ok(()) + } - fn get_key_events(&self, trees: &ChainTrees) -> Vec { - match self { - ChainKey::AuctionIndex(auction_index) => { - get_events_u32(&trees.auction_index, *auction_index) - } - ChainKey::CandidateHash(candidate_hash) => { - get_events_bytes32(&trees.candidate_hash, candidate_hash) - } - ChainKey::ParaId(para_id) => get_events_u32(&trees.para_id, *para_id), - } - } + fn get_key_events(&self, trees: &ChainTrees) -> Vec { + match self { + ChainKey::AuctionIndex(auction_index) => + get_events_u32(&trees.auction_index, *auction_index), + ChainKey::CandidateHash(candidate_hash) => + get_events_bytes32(&trees.candidate_hash, candidate_hash), + ChainKey::ParaId(para_id) => get_events_u32(&trees.para_id, *para_id), + } + } } #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] pub struct Args { - /// Chain to index - #[arg(short, long, value_enum, default_value_t = Chain::Ideal)] - pub chain: Chain, - /// Database path - #[arg(short, long)] - pub db_path: Option, - /// Database mode - #[arg(long, value_enum, default_value_t = DbMode::LowSpace)] - pub db_mode: DbMode, - /// Maximum size in bytes for the system page cache - #[arg(long, default_value = "1024.00 MiB")] - pub db_cache_capacity: String, - /// URL of Substrate node to connect to - #[arg(short, long)] - pub url: Option, - /// Maximum number of concurrent requests to the chain - #[arg(long, default_value_t = 1)] - pub queue_depth: u8, - /// Index event variants - #[arg(short, long, default_value_t = false)] - pub index_variant: bool, - /// Port to open for WebSocket queries - #[arg(short, long, default_value_t = 8172)] - pub port: u16, - #[command(flatten)] - verbose: Verbosity, + /// Chain to index + #[arg(short, long, value_enum, default_value_t = Chain::Ideal)] + pub chain: Chain, + /// Database path + #[arg(short, long)] + pub db_path: Option, + /// Database mode + #[arg(long, value_enum, default_value_t = DbMode::LowSpace)] + pub db_mode: DbMode, + /// Maximum size in bytes for the system page cache + #[arg(long, default_value = "1024.00 MiB")] + pub db_cache_capacity: String, + /// URL of Substrate node to connect to + #[arg(short, long)] + pub url: Option, + /// Maximum number of concurrent requests to the chain + #[arg(long, default_value_t = 1)] + pub queue_depth: u8, + /// Index event variants + #[arg(short, long, default_value_t = false)] + pub index_variant: bool, + /// Port to open for WebSocket queries + #[arg(short, long, default_value_t = 8172)] + pub port: u16, + #[command(flatten)] + verbose: Verbosity, } mod polkadot; @@ -165,80 +151,72 @@ mod pallets; #[tokio::main] async fn main() { - // Check command line parameters. - let args = Args::parse(); - let db_cache_capacity = Byte::from_str(args.db_cache_capacity) - .unwrap() - .get_bytes() - .try_into() - .unwrap(); - let log_level = args.verbose.log_level_filter().as_trace(); - // Start the indexer. - match args.chain { - Chain::Polkadot => { - acuity_index_substrate::start::( - args.db_path, - args.db_mode.into(), - db_cache_capacity, - args.url, - args.queue_depth, - args.index_variant, - args.port, - log_level, - ) - .await - } - Chain::Kusama => { - acuity_index_substrate::start::( - args.db_path, - args.db_mode.into(), - db_cache_capacity, - args.url, - args.queue_depth, - args.index_variant, - args.port, - log_level, - ) - .await - } - Chain::Rococo => { - acuity_index_substrate::start::( - args.db_path, - args.db_mode.into(), - db_cache_capacity, - args.url, - args.queue_depth, - args.index_variant, - args.port, - log_level, - ) - .await - } - Chain::Westend => { - acuity_index_substrate::start::( - args.db_path, - args.db_mode.into(), - db_cache_capacity, - args.url, - args.queue_depth, - args.index_variant, - args.port, - log_level, - ) - .await - } - Chain::Ideal => { - acuity_index_substrate::start::( - args.db_path, - args.db_mode.into(), - db_cache_capacity, - args.url, - args.queue_depth, - args.index_variant, - args.port, - log_level, - ) - .await - } - }; + // Check command line parameters. + let args = Args::parse(); + let db_cache_capacity = + Byte::from_str(args.db_cache_capacity).unwrap().get_bytes().try_into().unwrap(); + let log_level = args.verbose.log_level_filter().as_trace(); + // Start the indexer. + match args.chain { + Chain::Polkadot => + acuity_index_substrate::start::( + args.db_path, + args.db_mode.into(), + db_cache_capacity, + args.url, + args.queue_depth, + args.index_variant, + args.port, + log_level, + ) + .await, + Chain::Kusama => + acuity_index_substrate::start::( + args.db_path, + args.db_mode.into(), + db_cache_capacity, + args.url, + args.queue_depth, + args.index_variant, + args.port, + log_level, + ) + .await, + Chain::Rococo => + acuity_index_substrate::start::( + args.db_path, + args.db_mode.into(), + db_cache_capacity, + args.url, + args.queue_depth, + args.index_variant, + args.port, + log_level, + ) + .await, + Chain::Westend => + acuity_index_substrate::start::( + args.db_path, + args.db_mode.into(), + db_cache_capacity, + args.url, + args.queue_depth, + args.index_variant, + args.port, + log_level, + ) + .await, + Chain::Ideal => + acuity_index_substrate::start::( + args.db_path, + args.db_mode.into(), + db_cache_capacity, + args.url, + args.queue_depth, + args.index_variant, + args.port, + log_level, + ) + .await, + }; } diff --git a/indexer/src/pallets.rs b/indexer/src/pallets.rs index 5de519c..5a9b8e6 100644 --- a/indexer/src/pallets.rs +++ b/indexer/src/pallets.rs @@ -1,450 +1,436 @@ #[macro_export] macro_rules! index_claims_event { - ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { - match $event { - <$event_enum>::Claimed { who, .. } => { - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), - $block_number, - $event_index, - )?; - 1 - } - } - }; + ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { + match $event { + <$event_enum>::Claimed { who, .. } => { + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), + $block_number, + $event_index, + )?; + 1 + }, + } + }; } #[macro_export] macro_rules! index_paras_event { - ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { - match $event { - <$event_enum>::CurrentCodeUpdated(para_id) => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::CurrentHeadUpdated(para_id) => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::CodeUpgradeScheduled(para_id) => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::NewHeadNoted(para_id) => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::ActionQueued(para_id, session_index) => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Substrate(SubstrateKey::SessionIndex(session_index)), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::PvfCheckStarted(_, para_id) => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::PvfCheckAccepted(_, para_id) => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::PvfCheckRejected(_, para_id) => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - } - }; + ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { + match $event { + <$event_enum>::CurrentCodeUpdated(para_id) => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::CurrentHeadUpdated(para_id) => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::CodeUpgradeScheduled(para_id) => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::NewHeadNoted(para_id) => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::ActionQueued(para_id, session_index) => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Substrate(SubstrateKey::SessionIndex(session_index)), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::PvfCheckStarted(_, para_id) => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::PvfCheckAccepted(_, para_id) => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::PvfCheckRejected(_, para_id) => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + } + }; } #[macro_export] macro_rules! index_hrmp_event { - ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { - match $event { - <$event_enum>::OpenChannelRequested { - sender, recipient, .. - } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(sender.0)), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Chain(ChainKey::ParaId(recipient.0)), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::OpenChannelCanceled { by_parachain, .. } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(by_parachain.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::OpenChannelAccepted { sender, recipient } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(sender.0)), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Chain(ChainKey::ParaId(recipient.0)), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::ChannelClosed { by_parachain, .. } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(by_parachain.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::HrmpChannelForceOpened { - sender, recipient, .. - } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(sender.0)), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Chain(ChainKey::ParaId(recipient.0)), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::HrmpSystemChannelOpened { .. } => 0, - <$event_enum>::OpenChannelDepositsUpdated { .. } => 0, - } - }; + ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { + match $event { + <$event_enum>::OpenChannelRequested { sender, recipient, .. } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(sender.0)), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Chain(ChainKey::ParaId(recipient.0)), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::OpenChannelCanceled { by_parachain, .. } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(by_parachain.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::OpenChannelAccepted { sender, recipient } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(sender.0)), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Chain(ChainKey::ParaId(recipient.0)), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::ChannelClosed { by_parachain, .. } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(by_parachain.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::HrmpChannelForceOpened { sender, recipient, .. } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(sender.0)), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Chain(ChainKey::ParaId(recipient.0)), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::HrmpSystemChannelOpened { .. } => 0, + <$event_enum>::OpenChannelDepositsUpdated { .. } => 0, + } + }; } #[macro_export] macro_rules! index_disputes_event { - ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { - match $event { - <$event_enum>::DisputeInitiated(candidate_hash, ..) => { - $indexer.index_event( - Key::Chain(ChainKey::CandidateHash(Bytes32(candidate_hash.0.into()))), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::DisputeConcluded(candidate_hash, ..) => { - $indexer.index_event( - Key::Chain(ChainKey::CandidateHash(Bytes32(candidate_hash.0.into()))), - $block_number, - $event_index, - )?; - 1 - } - _ => 0, - } - }; + ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { + match $event { + <$event_enum>::DisputeInitiated(candidate_hash, ..) => { + $indexer.index_event( + Key::Chain(ChainKey::CandidateHash(Bytes32(candidate_hash.0.into()))), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::DisputeConcluded(candidate_hash, ..) => { + $indexer.index_event( + Key::Chain(ChainKey::CandidateHash(Bytes32(candidate_hash.0.into()))), + $block_number, + $event_index, + )?; + 1 + }, + _ => 0, + } + }; } #[macro_export] macro_rules! index_paras_registrar_event { - ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { - match $event { - <$event_enum>::Registered { para_id, manager } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(manager.0))), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::Deregistered { para_id } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::Reserved { para_id, who } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::Swapped { para_id, other_id } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Chain(ChainKey::ParaId(other_id.0)), - $block_number, - $event_index, - )?; - 2 - } - } - }; + ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { + match $event { + <$event_enum>::Registered { para_id, manager } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(manager.0))), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::Deregistered { para_id } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::Reserved { para_id, who } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::Swapped { para_id, other_id } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Chain(ChainKey::ParaId(other_id.0)), + $block_number, + $event_index, + )?; + 2 + }, + } + }; } #[macro_export] macro_rules! index_slots_event { - ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { - match $event { - <$event_enum>::Leased { - para_id, leaser, .. - } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(leaser.0))), - $block_number, - $event_index, - )?; - 2 - } - _ => 0, - } - }; + ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { + match $event { + <$event_enum>::Leased { para_id, leaser, .. } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(leaser.0))), + $block_number, + $event_index, + )?; + 2 + }, + _ => 0, + } + }; } #[macro_export] macro_rules! index_auctions_event { - ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { - match $event { - <$event_enum>::AuctionStarted { auction_index, .. } => { - $indexer.index_event( - Key::Chain(ChainKey::AuctionIndex(auction_index)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::AuctionClosed { auction_index } => { - $indexer.index_event( - Key::Chain(ChainKey::AuctionIndex(auction_index)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::Reserved { bidder, .. } => { - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(bidder.0))), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::Unreserved { bidder, .. } => { - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(bidder.0))), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::ReserveConfiscated { - para_id, leaser, .. - } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(leaser.0))), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::BidAccepted { - bidder, para_id, .. - } => { - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(bidder.0))), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::WinningOffset { auction_index, .. } => { - $indexer.index_event( - Key::Chain(ChainKey::AuctionIndex(auction_index)), - $block_number, - $event_index, - )?; - 1 - } - } - }; + ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { + match $event { + <$event_enum>::AuctionStarted { auction_index, .. } => { + $indexer.index_event( + Key::Chain(ChainKey::AuctionIndex(auction_index)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::AuctionClosed { auction_index } => { + $indexer.index_event( + Key::Chain(ChainKey::AuctionIndex(auction_index)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::Reserved { bidder, .. } => { + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(bidder.0))), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::Unreserved { bidder, .. } => { + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(bidder.0))), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::ReserveConfiscated { para_id, leaser, .. } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(leaser.0))), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::BidAccepted { bidder, para_id, .. } => { + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(bidder.0))), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::WinningOffset { auction_index, .. } => { + $indexer.index_event( + Key::Chain(ChainKey::AuctionIndex(auction_index)), + $block_number, + $event_index, + )?; + 1 + }, + } + }; } #[macro_export] macro_rules! index_crowdloan_event { - ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { - match $event { - <$event_enum>::Created { para_id } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::Contributed { - who, fund_index, .. - } => { - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Chain(ChainKey::ParaId(fund_index.0)), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::Withdrew { - who, fund_index, .. - } => { - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Chain(ChainKey::ParaId(fund_index.0)), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::PartiallyRefunded { para_id } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::AllRefunded { para_id } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::Dissolved { para_id } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::HandleBidResult { para_id, .. } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::Edited { para_id } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - <$event_enum>::MemoUpdated { who, para_id, .. } => { - $indexer.index_event( - Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), - $block_number, - $event_index, - )?; - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 2 - } - <$event_enum>::AddedToNewRaise { para_id } => { - $indexer.index_event( - Key::Chain(ChainKey::ParaId(para_id.0)), - $block_number, - $event_index, - )?; - 1 - } - } - }; + ($event_enum: ty, $event: ident, $indexer: ident, $block_number: ident, $event_index: ident) => { + match $event { + <$event_enum>::Created { para_id } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::Contributed { who, fund_index, .. } => { + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Chain(ChainKey::ParaId(fund_index.0)), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::Withdrew { who, fund_index, .. } => { + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Chain(ChainKey::ParaId(fund_index.0)), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::PartiallyRefunded { para_id } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::AllRefunded { para_id } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::Dissolved { para_id } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::HandleBidResult { para_id, .. } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::Edited { para_id } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + <$event_enum>::MemoUpdated { who, para_id, .. } => { + $indexer.index_event( + Key::Substrate(SubstrateKey::AccountId(Bytes32(who.0))), + $block_number, + $event_index, + )?; + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 2 + }, + <$event_enum>::AddedToNewRaise { para_id } => { + $indexer.index_event( + Key::Chain(ChainKey::ParaId(para_id.0)), + $block_number, + $event_index, + )?; + 1 + }, + } + }; } diff --git a/indexer/src/polkadot.rs b/indexer/src/polkadot.rs index c604635..f06f8ea 100644 --- a/indexer/src/polkadot.rs +++ b/indexer/src/polkadot.rs @@ -1,35 +1,35 @@ use polkadot_metadata::polkadot_metadata::{ - runtime_types::{ - frame_system::pallet::Event as SystemEvent, - pallet_bags_list::pallet::Event as BagsListEvent, - pallet_balances::pallet::Event as BalancesEvent, - pallet_bounties::pallet::Event as BountiesEvent, - pallet_child_bounties::pallet::Event as ChildBountiesEvent, - pallet_election_provider_multi_phase::pallet::Event as ElectionProviderMultiPhaseEvent, - pallet_fast_unstake::pallet::Event as FastUnstakeEvent, - pallet_identity::pallet::Event as IdentityEvent, - pallet_indices::pallet::Event as IndicesEvent, - pallet_multisig::pallet::Event as MultisigEvent, - pallet_nomination_pools::pallet::Event as NominationPoolsEvent, - pallet_preimage::pallet::Event as PreimageEvent, - pallet_proxy::pallet::Event as ProxyEvent, - pallet_session::pallet::Event as SessionEvent, - pallet_staking::pallet::pallet::Event as StakingEvent, - pallet_transaction_payment::pallet::Event as TransactionPaymentEvent, - pallet_treasury::pallet::Event as TreasuryEvent, - pallet_vesting::pallet::Event as VestingEvent, - polkadot_runtime_common::{ - auctions::pallet::Event as AuctionsEvent, claims::pallet::Event as ClaimsEvent, - crowdloan::pallet::Event as CrowdloanEvent, - paras_registrar::pallet::Event as ParasRegistrarEvent, - slots::pallet::Event as SlotsEvent, - }, - polkadot_runtime_parachains::{ - disputes::pallet::Event as DisputesEvent, hrmp::pallet::Event as HrmpEvent, - paras::pallet::Event as ParasEvent, - }, - }, - Event, + runtime_types::{ + frame_system::pallet::Event as SystemEvent, + pallet_bags_list::pallet::Event as BagsListEvent, + pallet_balances::pallet::Event as BalancesEvent, + pallet_bounties::pallet::Event as BountiesEvent, + pallet_child_bounties::pallet::Event as ChildBountiesEvent, + pallet_election_provider_multi_phase::pallet::Event as ElectionProviderMultiPhaseEvent, + pallet_fast_unstake::pallet::Event as FastUnstakeEvent, + pallet_identity::pallet::Event as IdentityEvent, + pallet_indices::pallet::Event as IndicesEvent, + pallet_multisig::pallet::Event as MultisigEvent, + pallet_nomination_pools::pallet::Event as NominationPoolsEvent, + pallet_preimage::pallet::Event as PreimageEvent, + pallet_proxy::pallet::Event as ProxyEvent, + pallet_session::pallet::Event as SessionEvent, + pallet_staking::pallet::pallet::Event as StakingEvent, + pallet_transaction_payment::pallet::Event as TransactionPaymentEvent, + pallet_treasury::pallet::Event as TreasuryEvent, + pallet_vesting::pallet::Event as VestingEvent, + polkadot_runtime_common::{ + auctions::pallet::Event as AuctionsEvent, claims::pallet::Event as ClaimsEvent, + crowdloan::pallet::Event as CrowdloanEvent, + paras_registrar::pallet::Event as ParasRegistrarEvent, + slots::pallet::Event as SlotsEvent, + }, + polkadot_runtime_parachains::{ + disputes::pallet::Event as DisputesEvent, hrmp::pallet::Event as HrmpEvent, + paras::pallet::Event as ParasEvent, + }, + }, + Event, }; use crate::*; @@ -40,149 +40,149 @@ use hex_literal::hex; pub struct PolkadotIndexer; impl acuity_index_substrate::shared::RuntimeIndexer for PolkadotIndexer { - type RuntimeConfig = subxt::PolkadotConfig; - type ChainKey = ChainKey; + type RuntimeConfig = subxt::PolkadotConfig; + type ChainKey = ChainKey; - fn get_name() -> &'static str { - "polkadot" - } + fn get_name() -> &'static str { + "polkadot" + } - fn get_genesis_hash() -> ::Hash { - hex!["91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3"].into() - } + fn get_genesis_hash() -> ::Hash { + hex!["91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3"].into() + } - fn get_versions() -> &'static [u32] { - &[0] - } + fn get_versions() -> &'static [u32] { + &[0] + } - fn get_default_url() -> &'static str { - "wss://rpc.polkadot.io:443" - } + fn get_default_url() -> &'static str { + "wss://rpc.polkadot.io:443" + } - fn process_event( - indexer: &acuity_index_substrate::substrate::Indexer, - block_number: u32, - event_index: u16, - event: subxt::events::EventDetails, - ) -> Result { - Ok(match event.as_root_event::()? { - // Substrate pallets. - Event::System(event) => { - index_system_event![SystemEvent, event, indexer, block_number, event_index] - } - Event::Preimage(event) => { - index_preimage_event![PreimageEvent, event, indexer, block_number, event_index] - } - Event::Indices(event) => { - index_indices_event![IndicesEvent, event, indexer, block_number, event_index] - } - Event::Balances(event) => { - index_balances_event![BalancesEvent, event, indexer, block_number, event_index] - } - Event::TransactionPayment(event) => { - index_transaction_payment_event![ - TransactionPaymentEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::Staking(event) => { - index_staking_event![StakingEvent, event, indexer, block_number, event_index] - } - Event::Session(event) => { - index_session_event![SessionEvent, event, indexer, block_number, event_index] - } - Event::Treasury(event) => { - index_treasury_event![TreasuryEvent, event, indexer, block_number, event_index] - } - Event::Vesting(event) => { - index_vesting_event![VestingEvent, event, indexer, block_number, event_index] - } - Event::Identity(event) => { - index_identity_event![IdentityEvent, event, indexer, block_number, event_index] - } - Event::Proxy(event) => { - index_proxy_event![ProxyEvent, event, indexer, block_number, event_index] - } - Event::Multisig(event) => { - index_multisig_event![MultisigEvent, event, indexer, block_number, event_index] - } - Event::Bounties(event) => { - index_bounties_event![BountiesEvent, event, indexer, block_number, event_index] - } - Event::ChildBounties(event) => { - index_child_bounties_event![ - ChildBountiesEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::ElectionProviderMultiPhase(event) => { - index_election_provider_multi_phase_event![ - ElectionProviderMultiPhaseEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::VoterList(event) => { - index_bags_list_event![BagsListEvent, event, indexer, block_number, event_index] - } - Event::NominationPools(event) => { - index_nomination_pools_event![ - NominationPoolsEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::FastUnstake(event) => { - index_fast_unstake_event![ - FastUnstakeEvent, - event, - indexer, - block_number, - event_index - ] - } - // Polkadot pallets. - Event::Claims(event) => { - index_claims_event![ClaimsEvent, event, indexer, block_number, event_index] - } - Event::Paras(event) => { - index_paras_event![ParasEvent, event, indexer, block_number, event_index] - } - Event::Hrmp(event) => { - index_hrmp_event![HrmpEvent, event, indexer, block_number, event_index] - } - Event::ParasDisputes(event) => { - index_disputes_event![DisputesEvent, event, indexer, block_number, event_index] - } - Event::Registrar(event) => { - index_paras_registrar_event![ - ParasRegistrarEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::Slots(event) => { - index_slots_event![SlotsEvent, event, indexer, block_number, event_index] - } - Event::Auctions(event) => { - index_auctions_event![AuctionsEvent, event, indexer, block_number, event_index] - } - Event::Crowdloan(event) => { - index_crowdloan_event![CrowdloanEvent, event, indexer, block_number, event_index] - } - _ => 0, - }) - } + fn process_event( + indexer: &acuity_index_substrate::substrate::Indexer, + block_number: u32, + event_index: u16, + event: subxt::events::EventDetails, + ) -> Result { + Ok(match event.as_root_event::()? { + // Substrate pallets. + Event::System(event) => { + index_system_event![SystemEvent, event, indexer, block_number, event_index] + }, + Event::Preimage(event) => { + index_preimage_event![PreimageEvent, event, indexer, block_number, event_index] + }, + Event::Indices(event) => { + index_indices_event![IndicesEvent, event, indexer, block_number, event_index] + }, + Event::Balances(event) => { + index_balances_event![BalancesEvent, event, indexer, block_number, event_index] + }, + Event::TransactionPayment(event) => { + index_transaction_payment_event![ + TransactionPaymentEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::Staking(event) => { + index_staking_event![StakingEvent, event, indexer, block_number, event_index] + }, + Event::Session(event) => { + index_session_event![SessionEvent, event, indexer, block_number, event_index] + }, + Event::Treasury(event) => { + index_treasury_event![TreasuryEvent, event, indexer, block_number, event_index] + }, + Event::Vesting(event) => { + index_vesting_event![VestingEvent, event, indexer, block_number, event_index] + }, + Event::Identity(event) => { + index_identity_event![IdentityEvent, event, indexer, block_number, event_index] + }, + Event::Proxy(event) => { + index_proxy_event![ProxyEvent, event, indexer, block_number, event_index] + }, + Event::Multisig(event) => { + index_multisig_event![MultisigEvent, event, indexer, block_number, event_index] + }, + Event::Bounties(event) => { + index_bounties_event![BountiesEvent, event, indexer, block_number, event_index] + }, + Event::ChildBounties(event) => { + index_child_bounties_event![ + ChildBountiesEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::ElectionProviderMultiPhase(event) => { + index_election_provider_multi_phase_event![ + ElectionProviderMultiPhaseEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::VoterList(event) => { + index_bags_list_event![BagsListEvent, event, indexer, block_number, event_index] + }, + Event::NominationPools(event) => { + index_nomination_pools_event![ + NominationPoolsEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::FastUnstake(event) => { + index_fast_unstake_event![ + FastUnstakeEvent, + event, + indexer, + block_number, + event_index + ] + }, + // Polkadot pallets. + Event::Claims(event) => { + index_claims_event![ClaimsEvent, event, indexer, block_number, event_index] + }, + Event::Paras(event) => { + index_paras_event![ParasEvent, event, indexer, block_number, event_index] + }, + Event::Hrmp(event) => { + index_hrmp_event![HrmpEvent, event, indexer, block_number, event_index] + }, + Event::ParasDisputes(event) => { + index_disputes_event![DisputesEvent, event, indexer, block_number, event_index] + }, + Event::Registrar(event) => { + index_paras_registrar_event![ + ParasRegistrarEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::Slots(event) => { + index_slots_event![SlotsEvent, event, indexer, block_number, event_index] + }, + Event::Auctions(event) => { + index_auctions_event![AuctionsEvent, event, indexer, block_number, event_index] + }, + Event::Crowdloan(event) => { + index_crowdloan_event![CrowdloanEvent, event, indexer, block_number, event_index] + }, + _ => 0, + }) + } } diff --git a/indexer/src/rococo.rs b/indexer/src/rococo.rs index 409f212..5505ea5 100644 --- a/indexer/src/rococo.rs +++ b/indexer/src/rococo.rs @@ -1,30 +1,30 @@ use rococo_metadata::rococo_metadata::{ - runtime_types::{ - frame_system::pallet::Event as SystemEvent, - pallet_balances::pallet::Event as BalancesEvent, - pallet_bounties::pallet::Event as BountiesEvent, - pallet_child_bounties::pallet::Event as ChildBountiesEvent, - pallet_identity::pallet::Event as IdentityEvent, - pallet_indices::pallet::Event as IndicesEvent, - pallet_multisig::pallet::Event as MultisigEvent, - pallet_preimage::pallet::Event as PreimageEvent, - pallet_proxy::pallet::Event as ProxyEvent, - pallet_session::pallet::Event as SessionEvent, - pallet_transaction_payment::pallet::Event as TransactionPaymentEvent, - pallet_treasury::pallet::Event as TreasuryEvent, - pallet_vesting::pallet::Event as VestingEvent, - polkadot_runtime_common::{ - auctions::pallet::Event as AuctionsEvent, claims::pallet::Event as ClaimsEvent, - crowdloan::pallet::Event as CrowdloanEvent, - paras_registrar::pallet::Event as ParasRegistrarEvent, - slots::pallet::Event as SlotsEvent, - }, - polkadot_runtime_parachains::{ - disputes::pallet::Event as DisputesEvent, hrmp::pallet::Event as HrmpEvent, - paras::pallet::Event as ParasEvent, - }, - }, - Event, + runtime_types::{ + frame_system::pallet::Event as SystemEvent, + pallet_balances::pallet::Event as BalancesEvent, + pallet_bounties::pallet::Event as BountiesEvent, + pallet_child_bounties::pallet::Event as ChildBountiesEvent, + pallet_identity::pallet::Event as IdentityEvent, + pallet_indices::pallet::Event as IndicesEvent, + pallet_multisig::pallet::Event as MultisigEvent, + pallet_preimage::pallet::Event as PreimageEvent, + pallet_proxy::pallet::Event as ProxyEvent, + pallet_session::pallet::Event as SessionEvent, + pallet_transaction_payment::pallet::Event as TransactionPaymentEvent, + pallet_treasury::pallet::Event as TreasuryEvent, + pallet_vesting::pallet::Event as VestingEvent, + polkadot_runtime_common::{ + auctions::pallet::Event as AuctionsEvent, claims::pallet::Event as ClaimsEvent, + crowdloan::pallet::Event as CrowdloanEvent, + paras_registrar::pallet::Event as ParasRegistrarEvent, + slots::pallet::Event as SlotsEvent, + }, + polkadot_runtime_parachains::{ + disputes::pallet::Event as DisputesEvent, hrmp::pallet::Event as HrmpEvent, + paras::pallet::Event as ParasEvent, + }, + }, + Event, }; use crate::*; @@ -35,116 +35,116 @@ use hex_literal::hex; pub struct RococoIndexer; impl acuity_index_substrate::shared::RuntimeIndexer for RococoIndexer { - type RuntimeConfig = subxt::PolkadotConfig; - type ChainKey = ChainKey; + type RuntimeConfig = subxt::PolkadotConfig; + type ChainKey = ChainKey; - fn get_name() -> &'static str { - "rococo" - } + fn get_name() -> &'static str { + "rococo" + } - fn get_genesis_hash() -> ::Hash { - hex!["6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e"].into() - } + fn get_genesis_hash() -> ::Hash { + hex!["6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e"].into() + } - fn get_versions() -> &'static [u32] { - &[0] - } + fn get_versions() -> &'static [u32] { + &[0] + } - fn get_default_url() -> &'static str { - "wss://rococo-rpc.polkadot.io:443" - } + fn get_default_url() -> &'static str { + "wss://rococo-rpc.polkadot.io:443" + } - fn process_event( - indexer: &acuity_index_substrate::substrate::Indexer, - block_number: u32, - event_index: u16, - event: subxt::events::EventDetails, - ) -> Result { - Ok(match event.as_root_event::()? { - // Substrate pallets. - Event::System(event) => { - index_system_event![SystemEvent, event, indexer, block_number, event_index] - } - Event::Preimage(event) => { - index_preimage_event![PreimageEvent, event, indexer, block_number, event_index] - } - Event::Indices(event) => { - index_indices_event![IndicesEvent, event, indexer, block_number, event_index] - } - Event::Balances(event) => { - index_balances_event![BalancesEvent, event, indexer, block_number, event_index] - } - Event::TransactionPayment(event) => { - index_transaction_payment_event![ - TransactionPaymentEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::Session(event) => { - index_session_event![SessionEvent, event, indexer, block_number, event_index] - } - Event::Treasury(event) => { - index_treasury_event![TreasuryEvent, event, indexer, block_number, event_index] - } - Event::Vesting(event) => { - index_vesting_event![VestingEvent, event, indexer, block_number, event_index] - } - Event::Identity(event) => { - index_identity_event![IdentityEvent, event, indexer, block_number, event_index] - } - Event::Proxy(event) => { - index_proxy_event![ProxyEvent, event, indexer, block_number, event_index] - } - Event::Multisig(event) => { - index_multisig_event![MultisigEvent, event, indexer, block_number, event_index] - } - Event::Bounties(event) => { - index_bounties_event![BountiesEvent, event, indexer, block_number, event_index] - } - Event::ChildBounties(event) => { - index_child_bounties_event![ - ChildBountiesEvent, - event, - indexer, - block_number, - event_index - ] - } - // Polkadot pallets. - Event::Claims(event) => { - index_claims_event![ClaimsEvent, event, indexer, block_number, event_index] - } - Event::Paras(event) => { - index_paras_event![ParasEvent, event, indexer, block_number, event_index] - } - Event::Hrmp(event) => { - index_hrmp_event![HrmpEvent, event, indexer, block_number, event_index] - } - Event::ParasDisputes(event) => { - index_disputes_event![DisputesEvent, event, indexer, block_number, event_index] - } - Event::Registrar(event) => { - index_paras_registrar_event![ - ParasRegistrarEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::Slots(event) => { - index_slots_event![SlotsEvent, event, indexer, block_number, event_index] - } - Event::Auctions(event) => { - index_auctions_event![AuctionsEvent, event, indexer, block_number, event_index] - } - Event::Crowdloan(event) => { - index_crowdloan_event![CrowdloanEvent, event, indexer, block_number, event_index] - } - _ => 0, - }) - } + fn process_event( + indexer: &acuity_index_substrate::substrate::Indexer, + block_number: u32, + event_index: u16, + event: subxt::events::EventDetails, + ) -> Result { + Ok(match event.as_root_event::()? { + // Substrate pallets. + Event::System(event) => { + index_system_event![SystemEvent, event, indexer, block_number, event_index] + }, + Event::Preimage(event) => { + index_preimage_event![PreimageEvent, event, indexer, block_number, event_index] + }, + Event::Indices(event) => { + index_indices_event![IndicesEvent, event, indexer, block_number, event_index] + }, + Event::Balances(event) => { + index_balances_event![BalancesEvent, event, indexer, block_number, event_index] + }, + Event::TransactionPayment(event) => { + index_transaction_payment_event![ + TransactionPaymentEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::Session(event) => { + index_session_event![SessionEvent, event, indexer, block_number, event_index] + }, + Event::Treasury(event) => { + index_treasury_event![TreasuryEvent, event, indexer, block_number, event_index] + }, + Event::Vesting(event) => { + index_vesting_event![VestingEvent, event, indexer, block_number, event_index] + }, + Event::Identity(event) => { + index_identity_event![IdentityEvent, event, indexer, block_number, event_index] + }, + Event::Proxy(event) => { + index_proxy_event![ProxyEvent, event, indexer, block_number, event_index] + }, + Event::Multisig(event) => { + index_multisig_event![MultisigEvent, event, indexer, block_number, event_index] + }, + Event::Bounties(event) => { + index_bounties_event![BountiesEvent, event, indexer, block_number, event_index] + }, + Event::ChildBounties(event) => { + index_child_bounties_event![ + ChildBountiesEvent, + event, + indexer, + block_number, + event_index + ] + }, + // Polkadot pallets. + Event::Claims(event) => { + index_claims_event![ClaimsEvent, event, indexer, block_number, event_index] + }, + Event::Paras(event) => { + index_paras_event![ParasEvent, event, indexer, block_number, event_index] + }, + Event::Hrmp(event) => { + index_hrmp_event![HrmpEvent, event, indexer, block_number, event_index] + }, + Event::ParasDisputes(event) => { + index_disputes_event![DisputesEvent, event, indexer, block_number, event_index] + }, + Event::Registrar(event) => { + index_paras_registrar_event![ + ParasRegistrarEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::Slots(event) => { + index_slots_event![SlotsEvent, event, indexer, block_number, event_index] + }, + Event::Auctions(event) => { + index_auctions_event![AuctionsEvent, event, indexer, block_number, event_index] + }, + Event::Crowdloan(event) => { + index_crowdloan_event![CrowdloanEvent, event, indexer, block_number, event_index] + }, + _ => 0, + }) + } } diff --git a/indexer/src/tests.rs b/indexer/src/tests.rs index c83e016..819f9bd 100644 --- a/indexer/src/tests.rs +++ b/indexer/src/tests.rs @@ -1,87 +1,72 @@ -use acuity_index_substrate::shared::*; -use acuity_index_substrate::substrate::*; -use acuity_index_substrate::websockets::*; -use acuity_index_substrate::*; +use acuity_index_substrate::{shared::*, substrate::*, websockets::*, *}; use crate::{ChainKey, PolkadotIndexer}; #[tokio::test] async fn test_process_msg_auction_index() { - let db_config = sled::Config::new().temporary(true); - let trees = open_trees::(db_config).unwrap(); - let indexer = Indexer::::new_test(trees.clone()); - let auction_index = 88; - let key = Key::Chain(ChainKey::AuctionIndex(auction_index)); - indexer.index_event(key.clone(), 4, 5).unwrap(); - indexer.index_event(key.clone(), 8, 5).unwrap(); - indexer.index_event(key.clone(), 10, 5).unwrap(); + let db_config = sled::Config::new().temporary(true); + let trees = open_trees::(db_config).unwrap(); + let indexer = Indexer::::new_test(trees.clone()); + let auction_index = 88; + let key = Key::Chain(ChainKey::AuctionIndex(auction_index)); + indexer.index_event(key.clone(), 4, 5).unwrap(); + indexer.index_event(key.clone(), 8, 5).unwrap(); + indexer.index_event(key.clone(), 10, 5).unwrap(); - let response = process_msg_get_events::(&trees, key.clone()); + let response = process_msg_get_events::(&trees, key.clone()); - let ResponseMessage::Events { - key: response_key, - events, - } = response - else { - panic!("Wrong response message."); - }; - assert_eq!(key, response_key); - assert_eq!(events.len(), 3); - assert_eq!(events[0].block_number, 10); - assert_eq!(events[1].block_number, 8); - assert_eq!(events[2].block_number, 4); + let ResponseMessage::Events { key: response_key, events } = response else { + panic!("Wrong response message."); + }; + assert_eq!(key, response_key); + assert_eq!(events.len(), 3); + assert_eq!(events[0].block_number, 10); + assert_eq!(events[1].block_number, 8); + assert_eq!(events[2].block_number, 4); } #[tokio::test] async fn test_process_msg_candidate_hash() { - let db_config = sled::Config::new().temporary(true); - let trees = open_trees::(db_config).unwrap(); - let indexer = Indexer::::new_test(trees.clone()); - let candidate_hash = Bytes32([8; 32]); - let key = Key::Chain(ChainKey::CandidateHash(candidate_hash)); - indexer.index_event(key.clone(), 4, 5).unwrap(); - indexer.index_event(key.clone(), 8, 5).unwrap(); - indexer.index_event(key.clone(), 10, 5).unwrap(); + let db_config = sled::Config::new().temporary(true); + let trees = open_trees::(db_config).unwrap(); + let indexer = Indexer::::new_test(trees.clone()); + let candidate_hash = Bytes32([8; 32]); + let key = Key::Chain(ChainKey::CandidateHash(candidate_hash)); + indexer.index_event(key.clone(), 4, 5).unwrap(); + indexer.index_event(key.clone(), 8, 5).unwrap(); + indexer.index_event(key.clone(), 10, 5).unwrap(); - let response = process_msg_get_events::(&trees, key.clone()); + let response = process_msg_get_events::(&trees, key.clone()); - let ResponseMessage::Events { - key: response_key, - events, - } = response - else { - panic!("Wrong response message."); - }; - assert_eq!(key, response_key); - assert_eq!(events.len(), 3); - assert_eq!(events[0].block_number, 10); - assert_eq!(events[1].block_number, 8); - assert_eq!(events[2].block_number, 4); + let ResponseMessage::Events { key: response_key, events } = response else { + panic!("Wrong response message."); + }; + assert_eq!(key, response_key); + assert_eq!(events.len(), 3); + assert_eq!(events[0].block_number, 10); + assert_eq!(events[1].block_number, 8); + assert_eq!(events[2].block_number, 4); } #[tokio::test] async fn test_process_msg_para_id() { - let db_config = sled::Config::new().temporary(true); - let trees = open_trees::(db_config).unwrap(); - let indexer = Indexer::::new_test(trees.clone()); - let para_id = 88; - let key = Key::Chain(ChainKey::ParaId(para_id)); - indexer.index_event(key.clone(), 4, 5).unwrap(); - indexer.index_event(key.clone(), 8, 5).unwrap(); - indexer.index_event(key.clone(), 10, 5).unwrap(); + let db_config = sled::Config::new().temporary(true); + let trees = open_trees::(db_config).unwrap(); + let indexer = Indexer::::new_test(trees.clone()); + let para_id = 88; + let key = Key::Chain(ChainKey::ParaId(para_id)); + indexer.index_event(key.clone(), 4, 5).unwrap(); + indexer.index_event(key.clone(), 8, 5).unwrap(); + indexer.index_event(key.clone(), 10, 5).unwrap(); - let response = process_msg_get_events::(&trees, key.clone()); + let response = process_msg_get_events::(&trees, key.clone()); - let ResponseMessage::Events { - key: response_key, - events, - } = response - else { - panic!("Wrong response message."); - }; - assert_eq!(key, response_key); - assert_eq!(events.len(), 3); - assert_eq!(events[0].block_number, 10); - assert_eq!(events[1].block_number, 8); - assert_eq!(events[2].block_number, 4); + let ResponseMessage::Events { key: response_key, events } = response else { + panic!("Wrong response message."); + }; + assert_eq!(key, response_key); + assert_eq!(events.len(), 3); + assert_eq!(events[0].block_number, 10); + assert_eq!(events[1].block_number, 8); + assert_eq!(events[2].block_number, 4); } diff --git a/indexer/src/westend.rs b/indexer/src/westend.rs index d9674f7..3467635 100644 --- a/indexer/src/westend.rs +++ b/indexer/src/westend.rs @@ -1,31 +1,31 @@ use westend_metadata::westend_metadata::{ - runtime_types::{ - frame_system::pallet::Event as SystemEvent, - pallet_bags_list::pallet::Event as BagsListEvent, - pallet_balances::pallet::Event as BalancesEvent, - pallet_election_provider_multi_phase::pallet::Event as ElectionProviderMultiPhaseEvent, - pallet_fast_unstake::pallet::Event as FastUnstakeEvent, - pallet_identity::pallet::Event as IdentityEvent, - pallet_indices::pallet::Event as IndicesEvent, - pallet_multisig::pallet::Event as MultisigEvent, - pallet_nomination_pools::pallet::Event as NominationPoolsEvent, - pallet_preimage::pallet::Event as PreimageEvent, - pallet_proxy::pallet::Event as ProxyEvent, - pallet_session::pallet::Event as SessionEvent, - pallet_staking::pallet::pallet::Event as StakingEvent, - pallet_transaction_payment::pallet::Event as TransactionPaymentEvent, - pallet_vesting::pallet::Event as VestingEvent, - polkadot_runtime_common::{ - auctions::pallet::Event as AuctionsEvent, crowdloan::pallet::Event as CrowdloanEvent, - paras_registrar::pallet::Event as ParasRegistrarEvent, - slots::pallet::Event as SlotsEvent, - }, - polkadot_runtime_parachains::{ - disputes::pallet::Event as DisputesEvent, hrmp::pallet::Event as HrmpEvent, - paras::pallet::Event as ParasEvent, - }, - }, - Event, + runtime_types::{ + frame_system::pallet::Event as SystemEvent, + pallet_bags_list::pallet::Event as BagsListEvent, + pallet_balances::pallet::Event as BalancesEvent, + pallet_election_provider_multi_phase::pallet::Event as ElectionProviderMultiPhaseEvent, + pallet_fast_unstake::pallet::Event as FastUnstakeEvent, + pallet_identity::pallet::Event as IdentityEvent, + pallet_indices::pallet::Event as IndicesEvent, + pallet_multisig::pallet::Event as MultisigEvent, + pallet_nomination_pools::pallet::Event as NominationPoolsEvent, + pallet_preimage::pallet::Event as PreimageEvent, + pallet_proxy::pallet::Event as ProxyEvent, + pallet_session::pallet::Event as SessionEvent, + pallet_staking::pallet::pallet::Event as StakingEvent, + pallet_transaction_payment::pallet::Event as TransactionPaymentEvent, + pallet_vesting::pallet::Event as VestingEvent, + polkadot_runtime_common::{ + auctions::pallet::Event as AuctionsEvent, crowdloan::pallet::Event as CrowdloanEvent, + paras_registrar::pallet::Event as ParasRegistrarEvent, + slots::pallet::Event as SlotsEvent, + }, + polkadot_runtime_parachains::{ + disputes::pallet::Event as DisputesEvent, hrmp::pallet::Event as HrmpEvent, + paras::pallet::Event as ParasEvent, + }, + }, + Event, }; use crate::*; @@ -36,131 +36,131 @@ use hex_literal::hex; pub struct WestendIndexer; impl acuity_index_substrate::shared::RuntimeIndexer for WestendIndexer { - type RuntimeConfig = subxt::PolkadotConfig; - type ChainKey = ChainKey; + type RuntimeConfig = subxt::PolkadotConfig; + type ChainKey = ChainKey; - fn get_name() -> &'static str { - "westend" - } + fn get_name() -> &'static str { + "westend" + } - fn get_genesis_hash() -> ::Hash { - hex!["e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e"].into() - } + fn get_genesis_hash() -> ::Hash { + hex!["e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e"].into() + } - fn get_versions() -> &'static [u32] { - &[0] - } + fn get_versions() -> &'static [u32] { + &[0] + } - fn get_default_url() -> &'static str { - "wss://westend-rpc.polkadot.io:443" - } + fn get_default_url() -> &'static str { + "wss://westend-rpc.polkadot.io:443" + } - fn process_event( - indexer: &acuity_index_substrate::substrate::Indexer, - block_number: u32, - event_index: u16, - event: subxt::events::EventDetails, - ) -> Result { - Ok(match event.as_root_event::()? { - // Substrate pallets. - Event::System(event) => { - index_system_event![SystemEvent, event, indexer, block_number, event_index] - } - Event::Preimage(event) => { - index_preimage_event![PreimageEvent, event, indexer, block_number, event_index] - } - Event::Indices(event) => { - index_indices_event![IndicesEvent, event, indexer, block_number, event_index] - } - Event::Balances(event) => { - index_balances_event![BalancesEvent, event, indexer, block_number, event_index] - } - Event::TransactionPayment(event) => { - index_transaction_payment_event![ - TransactionPaymentEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::Staking(event) => { - index_staking_event![StakingEvent, event, indexer, block_number, event_index] - } - Event::Session(event) => { - index_session_event![SessionEvent, event, indexer, block_number, event_index] - } - Event::Vesting(event) => { - index_vesting_event![VestingEvent, event, indexer, block_number, event_index] - } - Event::Identity(event) => { - index_identity_event![IdentityEvent, event, indexer, block_number, event_index] - } - Event::Proxy(event) => { - index_proxy_event![ProxyEvent, event, indexer, block_number, event_index] - } - Event::Multisig(event) => { - index_multisig_event![MultisigEvent, event, indexer, block_number, event_index] - } - Event::ElectionProviderMultiPhase(event) => { - index_election_provider_multi_phase_event![ - ElectionProviderMultiPhaseEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::VoterList(event) => { - index_bags_list_event![BagsListEvent, event, indexer, block_number, event_index] - } - Event::NominationPools(event) => { - index_nomination_pools_event![ - NominationPoolsEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::FastUnstake(event) => { - index_fast_unstake_event![ - FastUnstakeEvent, - event, - indexer, - block_number, - event_index - ] - } - // Polkadot pallets. - Event::Paras(event) => { - index_paras_event![ParasEvent, event, indexer, block_number, event_index] - } - Event::Hrmp(event) => { - index_hrmp_event![HrmpEvent, event, indexer, block_number, event_index] - } - Event::ParasDisputes(event) => { - index_disputes_event![DisputesEvent, event, indexer, block_number, event_index] - } - Event::Registrar(event) => { - index_paras_registrar_event![ - ParasRegistrarEvent, - event, - indexer, - block_number, - event_index - ] - } - Event::Slots(event) => { - index_slots_event![SlotsEvent, event, indexer, block_number, event_index] - } - Event::Auctions(event) => { - index_auctions_event![AuctionsEvent, event, indexer, block_number, event_index] - } - Event::Crowdloan(event) => { - index_crowdloan_event![CrowdloanEvent, event, indexer, block_number, event_index] - } - _ => 0, - }) - } + fn process_event( + indexer: &acuity_index_substrate::substrate::Indexer, + block_number: u32, + event_index: u16, + event: subxt::events::EventDetails, + ) -> Result { + Ok(match event.as_root_event::()? { + // Substrate pallets. + Event::System(event) => { + index_system_event![SystemEvent, event, indexer, block_number, event_index] + }, + Event::Preimage(event) => { + index_preimage_event![PreimageEvent, event, indexer, block_number, event_index] + }, + Event::Indices(event) => { + index_indices_event![IndicesEvent, event, indexer, block_number, event_index] + }, + Event::Balances(event) => { + index_balances_event![BalancesEvent, event, indexer, block_number, event_index] + }, + Event::TransactionPayment(event) => { + index_transaction_payment_event![ + TransactionPaymentEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::Staking(event) => { + index_staking_event![StakingEvent, event, indexer, block_number, event_index] + }, + Event::Session(event) => { + index_session_event![SessionEvent, event, indexer, block_number, event_index] + }, + Event::Vesting(event) => { + index_vesting_event![VestingEvent, event, indexer, block_number, event_index] + }, + Event::Identity(event) => { + index_identity_event![IdentityEvent, event, indexer, block_number, event_index] + }, + Event::Proxy(event) => { + index_proxy_event![ProxyEvent, event, indexer, block_number, event_index] + }, + Event::Multisig(event) => { + index_multisig_event![MultisigEvent, event, indexer, block_number, event_index] + }, + Event::ElectionProviderMultiPhase(event) => { + index_election_provider_multi_phase_event![ + ElectionProviderMultiPhaseEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::VoterList(event) => { + index_bags_list_event![BagsListEvent, event, indexer, block_number, event_index] + }, + Event::NominationPools(event) => { + index_nomination_pools_event![ + NominationPoolsEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::FastUnstake(event) => { + index_fast_unstake_event![ + FastUnstakeEvent, + event, + indexer, + block_number, + event_index + ] + }, + // Polkadot pallets. + Event::Paras(event) => { + index_paras_event![ParasEvent, event, indexer, block_number, event_index] + }, + Event::Hrmp(event) => { + index_hrmp_event![HrmpEvent, event, indexer, block_number, event_index] + }, + Event::ParasDisputes(event) => { + index_disputes_event![DisputesEvent, event, indexer, block_number, event_index] + }, + Event::Registrar(event) => { + index_paras_registrar_event![ + ParasRegistrarEvent, + event, + indexer, + block_number, + event_index + ] + }, + Event::Slots(event) => { + index_slots_event![SlotsEvent, event, indexer, block_number, event_index] + }, + Event::Auctions(event) => { + index_auctions_event![AuctionsEvent, event, indexer, block_number, event_index] + }, + Event::Crowdloan(event) => { + index_crowdloan_event![CrowdloanEvent, event, indexer, block_number, event_index] + }, + _ => 0, + }) + } } diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..441913f --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,23 @@ +# Basic +hard_tabs = true +max_width = 100 +use_small_heuristics = "Max" +# Imports +imports_granularity = "Crate" +reorder_imports = true +# Consistency +newline_style = "Unix" +# Format comments +comment_width = 100 +wrap_comments = true +# Misc +chain_width = 80 +spaces_around_ranges = false +binop_separator = "Back" +reorder_impl_items = false +match_arm_leading_pipes = "Preserve" +match_arm_blocks = false +match_block_trailing_comma = true +trailing_comma = "Vertical" +trailing_semicolon = false +use_field_init_shorthand = true