Skip to content

Listen to balances

Knowing the balance of a wallet is a fundamental operation in any blockchain application. You can query the balance of each wallet on-demand, but it is more efficient to listen to balance changes in real-time.

The example below shows how to retrieve and subscribe to balance updates.

Get balance using generated code

import 'package:demo/generated/polkadot/polkadot.dart';
import 'package:polkadart/polkadart.dart';
import 'package:ss58/ss58.dart';
Future<void> main(List<String> arguments) async {
final provider = Provider.fromUri(Uri.parse('wss://rpc.polkadot.io'));
final polkadot = Polkadot(provider);
// Account from SS58 address
final account = Address.decode('19t9Q2ay58hMDaeg6eeBhqmHsRnc2jDMV3cYYw9zbc59HLj');
// Retrieve Account Balance
final accountInfo = await polkadot.query.system.account(account.pubkey);
print('Balance: ${accountInfo.data.free}');
// Output: Balance: 20109379543332
}

Listen to balance changes

import 'package:demo/generated/polkadot/polkadot.dart';
import 'package:demo/generated/polkadot/types/frame_system/account_info.dart';
import 'package:polkadart/polkadart.dart';
import 'package:polkadart/scale_codec.dart';
import 'package:ss58/ss58.dart';
Future<void> main(List<String arguments) async {
final provider = Provider.fromUri(Uri.parse('wss://rpc.polkadot.io'));
final polkadot = Polkadot(provider);
final account = Address.decode('5HHJX1Nq3f6QH8HGxnCemyBQ4eAcpUwmKoLMw5AvboavPfrh');
final storageKey = polkadot.query.system.accountKey(account.pubkey);
polkadot.rpc.state.subscribeStorage([storageKey], (storage) {
final accountInfo = AccountInfo.decode(Input.fromBytes(storage.changes[0].value!));
print('Account Info: ${accountInfo.toJson()}');
});
// Output: Account Info: {nonce: 28, consumers: 1, providers: 1, sufficients: 0, data: {free: 1010064392159, reserved: 50611660000000, frozen: 0, flags: 170141183460469231731687303715884105728}}