api.dart 4.3 KB

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