From 015a81975924578a8cc620e3d2a792d6fa492a8d Mon Sep 17 00:00:00 2001 From: Amar Singh Date: Thu, 16 Jul 2020 03:09:03 -0400 Subject: [PATCH] event subscription example (#140) * added example * fmt --- examples/transfer_subscribe.rs | 54 ++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 examples/transfer_subscribe.rs diff --git a/examples/transfer_subscribe.rs b/examples/transfer_subscribe.rs new file mode 100644 index 0000000000000..706d3fdc6f391 --- /dev/null +++ b/examples/transfer_subscribe.rs @@ -0,0 +1,54 @@ +// Copyright 2019-2020 Parity Technologies (UK) Ltd. +// This file is part of substrate-subxt. +// +// subxt is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// subxt is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with substrate-subxt. If not, see . + +use sp_keyring::AccountKeyring; +use substrate_subxt::{ + balances::{ + BalancesEventsDecoder, + TransferCallExt, + TransferEvent, + }, + sp_core::Decode, + ClientBuilder, + DefaultNodeRuntime, + EventSubscription, + EventsDecoder, + PairSigner, +}; + +#[async_std::main] +async fn main() -> Result<(), Box> { + env_logger::init(); + + let signer = PairSigner::new(AccountKeyring::Alice.pair()); + let dest = AccountKeyring::Bob.to_account_id().into(); + + let client = ClientBuilder::::new().build().await?; + let sub = client.subscribe_events().await?; + let mut decoder = EventsDecoder::::new(client.metadata().clone()); + decoder.with_balances(); + let mut sub = EventSubscription::::new(sub, decoder); + sub.filter_event::>(); + client.transfer(&signer, &dest, 10_000).await?; + let raw = sub.next().await.unwrap().unwrap(); + let event = TransferEvent::::decode(&mut &raw.data[..]); + if let Ok(e) = event { + println!("Balance transfer success: value: {:?}", e.amount); + } else { + println!("Failed to subscribe to Balances::Transfer Event"); + } + Ok(()) +}