use avail_rust_client::prelude::*;
use avail_rust_core::rpc::EventFilter;
#[tokio::main]
pub async fn main() -> Result<(), Error> {
let client = Client::new(MAINNET_ENDPOINT).await?;
let block = client.block(2042845);
println!("Extrinsic 0 events: ");
let extrinsic_events = block.events().extrinsic(0).await?;
let is_success_present = extrinsic_events.is_extrinsic_success_present();
let is_failed_present = extrinsic_events.is_extrinsic_failed_present();
let multisig_executed = extrinsic_events.multisig_executed_successfully();
let proxy_executed = extrinsic_events.proxy_executed_successfully();
let is_deposit_present = extrinsic_events.is_present::<avail::balances::events::Deposit>();
println!(
"Extrinsic Success present: {}, Extrinsic Failed present: {}, Multisig Executed present: {:?}, Proxy Executed present: {:?}, Balances Deposit present: {}",
is_success_present, is_failed_present, multisig_executed, proxy_executed, is_deposit_present
);
let success_count = extrinsic_events.count::<avail::system::events::ExtrinsicSuccess>();
let deposit_count = extrinsic_events.count::<avail::balances::events::Deposit>();
println!(
"Total count: {}, Success count: {}, Deposit Count: {}",
extrinsic_events.events.len(),
success_count,
deposit_count
);
println!("");
println!("Extrinsic 1 events: ");
let extrinsic_events = block.events().extrinsic(1).await?;
let is_success_present = extrinsic_events.is_extrinsic_success_present();
let is_failed_present = extrinsic_events.is_extrinsic_failed_present();
let multisig_executed = extrinsic_events.multisig_executed_successfully();
let proxy_executed = extrinsic_events.proxy_executed_successfully();
let is_deposit_present = extrinsic_events.is_present::<avail::balances::events::Deposit>();
println!(
"Extrinsic Success present: {}, Extrinsic Failed present: {}, Multisig Executed present: {:?}, Proxy Executed present: {:?}, Balances Deposit present: {}",
is_success_present, is_failed_present, multisig_executed, proxy_executed, is_deposit_present
);
let success_count = extrinsic_events.count::<avail::system::events::ExtrinsicSuccess>();
let deposit_count = extrinsic_events.count::<avail::balances::events::Deposit>();
println!(
"Total count: {}, Success count: {}, Deposit Count: {}",
extrinsic_events.events.len(),
success_count,
deposit_count
);
println!("");
let extrinsic_events = block.events().extrinsic(1).await?;
let first = extrinsic_events
.first::<avail::balances::events::Withdraw>()
.expect("Should be decodable");
let last = extrinsic_events
.first::<avail::system::events::ExtrinsicSuccess>()
.expect("Should be decodable");
let all = extrinsic_events.all::<avail::balances::events::Deposit>()?;
println!(
"Withdraw Amount: {}, Extrinsic Weight: {}, Deposits Count: {}",
first.amount,
last.dispatch_info.weight.ref_time,
all.len()
);
let extrinsic_0_events = block.events().extrinsic(0).await?;
let extrinsic_1_events = block.events().extrinsic(1).await?;
let event_0 = extrinsic_0_events
.first::<avail::system::events::ExtrinsicSuccess>()
.expect("Should be decodable");
let event_1 = extrinsic_1_events
.first::<avail::system::events::ExtrinsicSuccess>()
.expect("Should be decodable");
println!(
"1. Timestamp::Set Weight: {}, DataAvailability::SubmitData Weight: {}",
event_0.dispatch_info.weight.ref_time, event_1.dispatch_info.weight.ref_time,
);
println!("Displaying all Balances::Deposit events");
let extrinsic_events = block.events().extrinsic(1).await?;
let deposits = extrinsic_events.all::<avail::balances::events::Deposit>()?;
for deposit in deposits {
println!("2. Account ID: {}, Amount: {}", deposit.who, deposit.amount)
}
println!("");
println!("Displaying DataAvailability::DataSubmitted event");
let extrinsic_events = block.events().extrinsic(1).await?;
let event = extrinsic_events
.first::<avail::data_availability::events::DataSubmitted>()
.expect("Should be decodable");
println!("3. Who: {}, Data Hash: {:?}", event.who, event.data_hash);
println!("");
println!("Displaying TransactionPayment::TransactionFeePaid event");
let extrinsic_events = block.events().extrinsic(1).await?;
let event = extrinsic_events
.first::<avail::transaction_payment::events::TransactionFeePaid>()
.expect("Should be decodable");
println!("4. Who: {}, Actual Fee: {}, Tip: {}", event.who, event.actual_fee, event.tip);
println!("");
println!("Displaying block system event");
let system_events = block.events().system().await?;
let event = system_events
.first::<avail::treasury::events::UpdatedInactive>()
.expect("Should be decodable");
println!("5. Reactivated: {}, Deactivated: {}", event.reactivated, event.deactivated);
println!("");
println!("Iterating over all extrinsic index 0 events");
let events = block.events().extrinsic(0).await?;
for event in events.events {
println!(
" Index: {}, Pallet ID: {}, Variant ID: {}, Data Length: {}, Phase: {:?}",
event.index,
event.pallet_id,
event.variant_id,
event.data.len(),
event.phase,
);
if (event.pallet_id, event.variant_id) == avail::balances::events::Withdraw::HEADER_INDEX {
let withdraw = avail::balances::events::Withdraw::from_event(event.data).expect("Should be decodable");
println!(" 6. Who: {}, amount: {}", withdraw.who, withdraw.amount);
}
}
println!("Iterating over all block system events");
let events = block.events().system().await?;
for event in events.events {
println!(
" Index: {}, Pallet ID: {}, Variant ID: {}, Data Length: {}, Phase: {:?}",
event.index,
event.pallet_id,
event.variant_id,
event.data.len(),
event.phase,
);
if (event.pallet_id, event.variant_id) == avail::balances::events::Withdraw::HEADER_INDEX {
let withdraw = avail::balances::events::Withdraw::from_event(event.data).expect("Should be decodable");
println!(" 6. Who: {}, amount: {}", withdraw.who, withdraw.amount);
}
}
println!("Iterating over all events (both extrinsic and system events)");
let events = block.events().all(EventFilter::All).await?;
for event in events {
println!(
" Index: {}, Pallet ID: {}, Variant ID: {}, Data Length: {}, Phase: {:?}",
event.index,
event.pallet_id,
event.variant_id,
event.data.len(),
event.phase,
);
if (event.pallet_id, event.variant_id) == avail::balances::events::Withdraw::HEADER_INDEX {
let withdraw = avail::balances::events::Withdraw::from_event(event.data).expect("Should be decodable");
println!(" 6. Who: {}, amount: {}", withdraw.who, withdraw.amount);
}
}
Ok(())
}