mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-25 11:47:56 +00:00
d7124b56f7
* WIP backend trait * WIP converting higher level stuff to using Backend impl * more implementing new backend trait, mainly storage focused * Get core code compiling with new backend bits * subxt crate checks passing * fix tests * cargo fmt * clippy/fixes * merging and other fixes * fix test * fix lightclient code * Fix some broken doc links * another book link fix * fix broken test when moving default_rpc_client * fix dry_run test * fix more tests; lightclient and wasm * fix wasm tests * fix some doc examples * use next() instead of next_item() * missing next_item() -> next()s * move legacy RPc methods to LegacyRpcMethods type to host generic param instead of RpcClient * standardise on all RpcClient types prefixed with Rpc, and 'raw' trait types prefixed with RawRpc so it's less ocnfusing which is which * rename fixes * doc fixes * Add back system_dryRun RPC method and rename tx.dry_run() to tx.validate(), to signal that the calls are different * Add a test that we return the correct extrinsic hash from submit() * add TransactionValid details back, and protect against out of range bytes * add test for decoding transaction validation from empty bytes * fix clippy warning
56 lines
1.8 KiB
Rust
56 lines
1.8 KiB
Rust
use subxt::{OnlineClient, PolkadotConfig};
|
|
|
|
#[subxt::subxt(runtime_metadata_path = "../artifacts/polkadot_metadata_small.scale")]
|
|
pub mod polkadot {}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
// Create a client to use:
|
|
let api = OnlineClient::<PolkadotConfig>::new().await?;
|
|
|
|
// Subscribe to all finalized blocks:
|
|
let mut blocks_sub = api.blocks().subscribe_finalized().await?;
|
|
|
|
// For each block, print a bunch of information about it:
|
|
while let Some(block) = blocks_sub.next().await {
|
|
let block = block?;
|
|
|
|
let block_number = block.header().number;
|
|
let block_hash = block.hash();
|
|
|
|
println!("Block #{block_number}:");
|
|
println!(" Hash: {block_hash}");
|
|
println!(" Extrinsics:");
|
|
|
|
// Log each of the extrinsic with it's associated events:
|
|
let extrinsics = block.extrinsics().await?;
|
|
for ext in extrinsics.iter() {
|
|
let ext = ext?;
|
|
let idx = ext.index();
|
|
let events = ext.events().await?;
|
|
let bytes_hex = format!("0x{}", hex::encode(ext.bytes()));
|
|
|
|
// See the API docs for more ways to decode extrinsics:
|
|
let decoded_ext = ext.as_root_extrinsic::<polkadot::Call>();
|
|
|
|
println!(" Extrinsic #{idx}:");
|
|
println!(" Bytes: {bytes_hex}");
|
|
println!(" Decoded: {decoded_ext:?}");
|
|
println!(" Events:");
|
|
|
|
for evt in events.iter() {
|
|
let evt = evt?;
|
|
|
|
let pallet_name = evt.pallet_name();
|
|
let event_name = evt.variant_name();
|
|
let event_values = evt.field_values()?;
|
|
|
|
println!(" {pallet_name}_{event_name}");
|
|
println!(" {}", event_values);
|
|
}
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|