Skip to content

Commit

Permalink
[send_tx_dart] use polkadart's author api to send extrinsics
Browse files Browse the repository at this point in the history
  • Loading branch information
clangenb committed Nov 15, 2023
1 parent 53eeac8 commit 409fdd1
Showing 1 changed file with 15 additions and 27 deletions.
42 changes: 15 additions & 27 deletions app/lib/service/tx/lib/src/send_tx_dart.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import 'dart:typed_data';
import 'package:convert/convert.dart';
import 'package:encointer_wallet/service/service.dart';

import 'package:ew_polkadart/ew_polkadart.dart' show Provider, EncointerKusama, BlockHash, SubscriptionResponse;
import 'package:ew_polkadart/ew_polkadart.dart' show AuthorApi, BlockHash, EncointerKusama, ExtrinsicStatus, Provider;
import 'package:ew_polkadart/generated/encointer_kusama/types/frame_system/event_record.dart';
import 'package:ew_polkadart/generated/encointer_kusama/types/frame_system/phase.dart';
import 'package:ew_polkadart/runtime_error.dart';
Expand Down Expand Up @@ -108,40 +108,28 @@ class EWAuthorApi<P extends Provider> {

/// Submit a fully formatted extrinsic and return a subscription
/// which emits txStatus updates.
Future<SubscriptionResponse> submitAndWatchExtrinsic(Extrinsic extrinsic) async {
final params = <String>[extrinsic.hexPrefixed];

final subscription = await _provider.subscribe(
'author_submitAndWatchExtrinsic',
params,
onCancel: (subscription) async {
await _provider.send('author_unsubmitAndWatchExtrinsic', [subscription]);
},
);

return subscription;
Future<StreamSubscription<ExtrinsicStatus>> submitAndWatchExtrinsic(
Extrinsic extrinsic,
dynamic Function(ExtrinsicStatus) onData,
) {
return AuthorApi(_provider).submitAndWatchExtrinsic(extrinsic._encoded, onData);
}

Future<ExtrinsicReport> submitAndWatchExtrinsicWithReport(Extrinsic extrinsic) async {
final hash = extrinsic.hash;

final subResponse = await submitAndWatchExtrinsic(extrinsic);

final completer = Completer<void>();

ExtrinsicReport? report;
final sub = subResponse.stream.listen((event) async {
Log.d('ExtrinsicUpdate: ${event.result}');

if (event.result == 'ready') {
final subResponse = await submitAndWatchExtrinsic(extrinsic, (xtUpdate) async {
Log.d('ExtrinsicUpdate: $xtUpdate');

if (xtUpdate.type == 'ready') {
Log.p('Xt is ready');
// ignore: avoid_dynamic_calls
} else if (event.result['inBlock'] != null) {
Log.p('Xt is in block: ${event.result}');
// ignore: avoid_dynamic_calls
} else if (event.result['finalized'] != null) {
// ignore: avoid_dynamic_calls
final blockHashHex = event.result['finalized'].toString();
} else if (xtUpdate.type == 'inBlock') {
Log.p('Xt is in block: ${xtUpdate.value}');
} else if (xtUpdate.type == 'finalized') {
final blockHashHex = xtUpdate.value.toString();
final blockHash = hexToUint8(blockHashHex);

final kusama = EncointerKusama(_provider);
Expand Down Expand Up @@ -170,7 +158,7 @@ class EWAuthorApi<P extends Provider> {
});

await completer.future;
await sub.cancel();
await subResponse.cancel();
return report!;
}
}
Expand Down

0 comments on commit 409fdd1

Please sign in to comment.