api.dart 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import 'dart:convert';
  2. import 'package:polkawallet_sdk/api/apiAccount.dart';
  3. import 'package:polkawallet_sdk/api/apiAssets.dart';
  4. import 'package:polkawallet_sdk/api/apiGov.dart';
  5. import 'package:polkawallet_sdk/api/apiKeyring.dart';
  6. import 'package:polkawallet_sdk/api/apiParachain.dart';
  7. import 'package:polkawallet_sdk/api/apiRecovery.dart';
  8. import 'package:polkawallet_sdk/api/apiSetting.dart';
  9. import 'package:polkawallet_sdk/api/apiStaking.dart';
  10. import 'package:polkawallet_sdk/api/apiTx.dart';
  11. import 'package:polkawallet_sdk/api/apiUOS.dart';
  12. import 'package:polkawallet_sdk/api/apiWalletConnect.dart';
  13. import 'package:polkawallet_sdk/api/subscan.dart';
  14. import 'package:polkawallet_sdk/api/types/networkParams.dart';
  15. import 'package:polkawallet_sdk/service/index.dart';
  16. import 'package:polkawallet_sdk/storage/keyring.dart';
  17. /// The [PolkawalletApi] instance is the wrapper of `polkadot-js/api`.
  18. /// It provides:
  19. /// * [ApiKeyring] of npm package [@polkadot/keyring](https://www.npmjs.com/package/@polkadot/keyring)
  20. /// * [ApiSetting], the [networkConst] and [networkProperties] of `polkadot-js/api`.
  21. /// * [ApiAccount], for querying on-chain data of accounts, like balances or indices.
  22. /// * [ApiTx], sign and send tx.
  23. /// * [ApiStaking] and [ApiGov], the staking and governance module of substrate.
  24. /// * [ApiUOS], provides the offline-signature ability of polkawallet.
  25. /// * [ApiRecovery], the social-recovery module of Kusama network.
  26. class PolkawalletApi {
  27. PolkawalletApi(this.service) {
  28. keyring = ApiKeyring(this, service.keyring);
  29. setting = ApiSetting(this, service.setting);
  30. account = ApiAccount(this, service.account);
  31. tx = ApiTx(this, service.tx);
  32. staking = ApiStaking(this, service.staking);
  33. gov = ApiGov(this, service.gov);
  34. parachain = ApiParachain(this, service.parachain);
  35. assets = ApiAssets(this, service.assets);
  36. uos = ApiUOS(this, service.uos);
  37. recovery = ApiRecovery(this, service.recovery);
  38. walletConnect = ApiWalletConnect(this, service.walletConnect);
  39. }
  40. final SubstrateService service;
  41. NetworkParams? _connectedNode;
  42. late ApiKeyring keyring;
  43. late ApiSetting setting;
  44. late ApiAccount account;
  45. late ApiTx tx;
  46. late ApiStaking staking;
  47. late ApiGov gov;
  48. late ApiParachain parachain;
  49. late ApiAssets assets;
  50. late ApiUOS uos;
  51. late ApiRecovery recovery;
  52. late ApiWalletConnect walletConnect;
  53. final SubScanApi subScan = SubScanApi();
  54. // void init() {
  55. // keyring = ApiKeyring(this, service.keyring);
  56. // setting = ApiSetting(this, service.setting);
  57. // account = ApiAccount(this, service.account);
  58. // tx = ApiTx(this, service.tx);
  59. // staking = ApiStaking(this, service.staking);
  60. // gov = ApiGov(this, service.gov);
  61. // parachain = ApiParachain(this, service.parachain);
  62. // assets = ApiAssets(this, service.assets);
  63. // uos = ApiUOS(this, service.uos);
  64. // recovery = ApiRecovery(this, service.recovery);
  65. // walletConnect = ApiWalletConnect(this, service.walletConnect);
  66. // }
  67. NetworkParams? get connectedNode => _connectedNode;
  68. /// connect to a list of nodes, return null if connect failed.
  69. Future<NetworkParams?> connectNode(
  70. Keyring keyringStorage, List<NetworkParams> nodes) async {
  71. _connectedNode = null;
  72. final NetworkParams? res = await service.webView!.connectNode(nodes);
  73. if (res != null) {
  74. _connectedNode = res;
  75. // update indices of keyPairs after connect
  76. keyring.updateIndicesMap(keyringStorage);
  77. }
  78. return res;
  79. }
  80. /// subscribe message.
  81. Future<void> subscribeMessage(
  82. String JSCall,
  83. List params,
  84. String channel,
  85. Function callback,
  86. ) async {
  87. service.webView!.subscribeMessage(
  88. 'settings.subscribeMessage($JSCall, ${jsonEncode(params)}, "$channel")',
  89. channel,
  90. callback,
  91. );
  92. }
  93. /// unsubscribe message.
  94. void unsubscribeMessage(String channel) {
  95. service.webView!.unsubscribeMessage(channel);
  96. }
  97. }