@subwallet/extension-base 1.3.21-0 → 1.3.23-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/background/KoniTypes.d.ts +75 -2
  2. package/background/KoniTypes.js +2 -0
  3. package/cjs/background/KoniTypes.js +2 -0
  4. package/cjs/constants/environment.js +4 -2
  5. package/cjs/constants/signing.js +6 -2
  6. package/cjs/core/logic-validation/recipientAddress.js +9 -1
  7. package/cjs/core/logic-validation/transfer.js +35 -29
  8. package/cjs/core/types.js +1 -0
  9. package/cjs/core/utils.js +12 -1
  10. package/cjs/defaults.js +1 -1
  11. package/cjs/koni/api/dotsama/crowdloan.js +1 -1
  12. package/cjs/koni/api/nft/index.js +9 -16
  13. package/cjs/koni/api/staking/index.js +3 -4
  14. package/cjs/koni/background/handlers/Extension.js +234 -96
  15. package/cjs/koni/background/handlers/State.js +15 -0
  16. package/cjs/packageInfo.js +1 -1
  17. package/cjs/services/balance-service/helpers/subscribe/cardano/consts.js +11 -0
  18. package/cjs/services/balance-service/helpers/subscribe/cardano/index.js +63 -0
  19. package/cjs/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
  20. package/cjs/services/balance-service/helpers/subscribe/cardano/utils.js +74 -0
  21. package/cjs/services/balance-service/helpers/subscribe/index.js +21 -7
  22. package/cjs/services/balance-service/helpers/subscribe/ton/utils.js +2 -2
  23. package/cjs/services/balance-service/index.js +4 -2
  24. package/cjs/services/balance-service/transfer/cardano-transfer.js +122 -0
  25. package/cjs/services/balance-service/transfer/token.js +4 -4
  26. package/cjs/services/chain-service/constants.js +8 -3
  27. package/cjs/services/chain-service/handler/CardanoApi.js +176 -0
  28. package/cjs/services/chain-service/handler/CardanoChainHandler.js +83 -0
  29. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +3 -2
  30. package/cjs/services/chain-service/handler/TonApi.js +2 -5
  31. package/cjs/services/chain-service/index.js +38 -7
  32. package/cjs/services/chain-service/utils/index.js +40 -11
  33. package/cjs/services/chain-service/utils/patch.js +1 -1
  34. package/cjs/services/earning-service/constants/chains.js +2 -1
  35. package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
  36. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
  37. package/cjs/services/earning-service/handlers/native-staking/mythos.js +337 -0
  38. package/cjs/services/earning-service/service.js +10 -12
  39. package/cjs/services/earning-service/utils/index.js +2 -0
  40. package/cjs/services/fee-service/service.js +19 -8
  41. package/cjs/services/history-service/index.js +4 -6
  42. package/cjs/services/inapp-notification-service/index.js +12 -4
  43. package/cjs/services/keyring-service/context/account-context.js +17 -2
  44. package/cjs/services/keyring-service/context/handlers/Derive.js +10 -7
  45. package/cjs/services/keyring-service/context/handlers/Migration.js +268 -0
  46. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +2 -2
  47. package/cjs/services/keyring-service/context/handlers/Secret.js +1 -1
  48. package/cjs/services/keyring-service/utils.js +18 -0
  49. package/cjs/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
  50. package/cjs/services/migration-service/scripts/databases/ClearMetadataForChains.js +40 -0
  51. package/cjs/services/migration-service/scripts/databases/ClearMetadataForMythos.js +15 -0
  52. package/cjs/services/migration-service/scripts/index.js +6 -2
  53. package/cjs/services/request-service/handler/CardanoRequestHandler.js +172 -0
  54. package/cjs/services/request-service/handler/EvmRequestHandler.js +1 -1
  55. package/cjs/services/request-service/index.js +20 -2
  56. package/cjs/services/setting-service/constants.js +10 -1
  57. package/cjs/services/storage-service/DatabaseService.js +6 -0
  58. package/cjs/services/storage-service/db-stores/InappNotification.js +6 -0
  59. package/cjs/services/storage-service/db-stores/Metadata.js +3 -0
  60. package/cjs/services/storage-service/db-stores/Migration.js +6 -1
  61. package/cjs/services/swap-service/handler/asset-hub/handler.js +0 -59
  62. package/cjs/services/swap-service/handler/chainflip-handler.js +33 -281
  63. package/cjs/services/swap-service/handler/hydradx-handler.js +23 -190
  64. package/cjs/services/swap-service/handler/simpleswap-handler.js +1 -222
  65. package/cjs/services/swap-service/handler/uniswap-handler.js +331 -0
  66. package/cjs/services/swap-service/index.js +31 -22
  67. package/cjs/services/swap-service/utils.js +21 -38
  68. package/cjs/services/transaction-service/helpers/index.js +6 -1
  69. package/cjs/services/transaction-service/index.js +278 -21
  70. package/cjs/services/transaction-service/utils.js +5 -1
  71. package/cjs/types/account/info/keyring.js +12 -1
  72. package/cjs/types/fee/cardano.js +1 -0
  73. package/cjs/types/swap/index.js +7 -2
  74. package/cjs/utils/account/analyze.js +2 -1
  75. package/cjs/utils/account/common.js +29 -20
  76. package/cjs/utils/account/derive/info/solo.js +9 -4
  77. package/cjs/utils/account/derive/validate.js +36 -2
  78. package/cjs/utils/account/transform.js +38 -13
  79. package/cjs/utils/fee/transfer.js +40 -7
  80. package/cjs/utils/index.js +2 -2
  81. package/cjs/utils/staticData/index.js +7 -2
  82. package/constants/environment.d.ts +1 -0
  83. package/constants/environment.js +2 -1
  84. package/constants/signing.js +6 -2
  85. package/core/logic-validation/recipientAddress.js +11 -3
  86. package/core/logic-validation/transfer.js +9 -3
  87. package/core/substrate/xcm-parser.d.ts +1 -1
  88. package/core/types.d.ts +1 -0
  89. package/core/types.js +1 -0
  90. package/core/utils.d.ts +1 -0
  91. package/core/utils.js +13 -3
  92. package/defaults.d.ts +1 -1
  93. package/defaults.js +1 -1
  94. package/koni/api/dotsama/crowdloan.js +3 -3
  95. package/koni/api/nft/index.js +10 -16
  96. package/koni/api/nft/story_odyssey_nft/index.d.ts +1 -1
  97. package/koni/api/staking/index.js +4 -5
  98. package/koni/background/handlers/Extension.d.ts +9 -0
  99. package/koni/background/handlers/Extension.js +144 -8
  100. package/koni/background/handlers/State.d.ts +5 -1
  101. package/koni/background/handlers/State.js +16 -1
  102. package/package.json +102 -25
  103. package/packageInfo.js +1 -1
  104. package/services/balance-service/helpers/subscribe/cardano/consts.d.ts +1 -0
  105. package/services/balance-service/helpers/subscribe/cardano/consts.js +4 -0
  106. package/services/balance-service/helpers/subscribe/cardano/index.d.ts +2 -0
  107. package/services/balance-service/helpers/subscribe/cardano/index.js +57 -0
  108. package/services/balance-service/helpers/subscribe/cardano/types.d.ts +34 -0
  109. package/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
  110. package/services/balance-service/helpers/subscribe/cardano/utils.d.ts +15 -0
  111. package/services/balance-service/helpers/subscribe/cardano/utils.js +62 -0
  112. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  113. package/services/balance-service/helpers/subscribe/index.js +23 -9
  114. package/services/balance-service/helpers/subscribe/ton/utils.d.ts +1 -1
  115. package/services/balance-service/helpers/subscribe/ton/utils.js +1 -1
  116. package/services/balance-service/index.js +4 -2
  117. package/services/balance-service/transfer/cardano-transfer.d.ts +24 -0
  118. package/services/balance-service/transfer/cardano-transfer.js +114 -0
  119. package/services/balance-service/transfer/token.d.ts +1 -1
  120. package/services/balance-service/transfer/token.js +2 -2
  121. package/services/chain-service/constants.js +8 -3
  122. package/services/chain-service/handler/CardanoApi.d.ts +38 -0
  123. package/services/chain-service/handler/CardanoApi.js +167 -0
  124. package/services/chain-service/handler/CardanoChainHandler.d.ts +17 -0
  125. package/services/chain-service/handler/CardanoChainHandler.js +75 -0
  126. package/services/chain-service/handler/SubstrateChainHandler.js +3 -2
  127. package/services/chain-service/handler/TonApi.js +3 -6
  128. package/services/chain-service/handler/types.d.ts +1 -0
  129. package/services/chain-service/index.d.ts +4 -1
  130. package/services/chain-service/index.js +38 -7
  131. package/services/chain-service/types.d.ts +9 -1
  132. package/services/chain-service/utils/index.d.ts +4 -0
  133. package/services/chain-service/utils/index.js +32 -11
  134. package/services/chain-service/utils/patch.js +1 -1
  135. package/services/earning-service/constants/chains.d.ts +1 -0
  136. package/services/earning-service/constants/chains.js +2 -1
  137. package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
  138. package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
  139. package/services/earning-service/handlers/native-staking/mythos.d.ts +35 -0
  140. package/services/earning-service/handlers/native-staking/mythos.js +329 -0
  141. package/services/earning-service/service.js +12 -14
  142. package/services/earning-service/utils/index.js +2 -0
  143. package/services/fee-service/service.js +19 -8
  144. package/services/history-service/index.js +6 -8
  145. package/services/inapp-notification-service/index.d.ts +3 -4
  146. package/services/inapp-notification-service/index.js +14 -6
  147. package/services/keyring-service/context/account-context.d.ts +6 -2
  148. package/services/keyring-service/context/account-context.js +17 -2
  149. package/services/keyring-service/context/handlers/Derive.d.ts +1 -1
  150. package/services/keyring-service/context/handlers/Derive.js +10 -8
  151. package/services/keyring-service/context/handlers/Migration.d.ts +17 -0
  152. package/services/keyring-service/context/handlers/Migration.js +258 -0
  153. package/services/keyring-service/context/handlers/Mnemonic.js +2 -2
  154. package/services/keyring-service/context/handlers/Secret.js +2 -2
  155. package/services/keyring-service/utils.d.ts +2 -0
  156. package/services/keyring-service/utils.js +11 -0
  157. package/services/migration-service/scripts/databases/ClearMetadataDatabase.d.ts +3 -3
  158. package/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
  159. package/services/migration-service/scripts/databases/ClearMetadataForChains.d.ts +5 -0
  160. package/services/migration-service/scripts/databases/ClearMetadataForChains.js +32 -0
  161. package/services/migration-service/scripts/databases/ClearMetadataForMythos.d.ts +4 -0
  162. package/services/migration-service/scripts/databases/ClearMetadataForMythos.js +7 -0
  163. package/services/migration-service/scripts/index.d.ts +1 -0
  164. package/services/migration-service/scripts/index.js +4 -1
  165. package/services/request-service/handler/CardanoRequestHandler.d.ts +16 -0
  166. package/services/request-service/handler/CardanoRequestHandler.js +163 -0
  167. package/services/request-service/handler/EvmRequestHandler.js +1 -1
  168. package/services/request-service/index.d.ts +6 -3
  169. package/services/request-service/index.js +19 -5
  170. package/services/setting-service/constants.d.ts +3 -0
  171. package/services/setting-service/constants.js +6 -0
  172. package/services/storage-service/DatabaseService.d.ts +2 -0
  173. package/services/storage-service/DatabaseService.js +6 -0
  174. package/services/storage-service/db-stores/InappNotification.d.ts +1 -0
  175. package/services/storage-service/db-stores/InappNotification.js +6 -0
  176. package/services/storage-service/db-stores/Metadata.d.ts +1 -0
  177. package/services/storage-service/db-stores/Metadata.js +3 -0
  178. package/services/storage-service/db-stores/Migration.d.ts +1 -0
  179. package/services/storage-service/db-stores/Migration.js +6 -1
  180. package/services/swap-service/handler/asset-hub/handler.d.ts +1 -4
  181. package/services/swap-service/handler/asset-hub/handler.js +2 -61
  182. package/services/swap-service/handler/base-handler.d.ts +1 -4
  183. package/services/swap-service/handler/chainflip-handler.d.ts +2 -9
  184. package/services/swap-service/handler/chainflip-handler.js +31 -280
  185. package/services/swap-service/handler/hydradx-handler.d.ts +1 -6
  186. package/services/swap-service/handler/hydradx-handler.js +13 -180
  187. package/services/swap-service/handler/simpleswap-handler.d.ts +1 -4
  188. package/services/swap-service/handler/simpleswap-handler.js +5 -226
  189. package/services/swap-service/handler/uniswap-handler.d.ts +41 -0
  190. package/services/swap-service/handler/uniswap-handler.js +323 -0
  191. package/services/swap-service/index.js +30 -22
  192. package/services/swap-service/utils.d.ts +1 -5
  193. package/services/swap-service/utils.js +7 -21
  194. package/services/transaction-service/helpers/index.d.ts +2 -0
  195. package/services/transaction-service/helpers/index.js +4 -0
  196. package/services/transaction-service/index.d.ts +8 -2
  197. package/services/transaction-service/index.js +263 -10
  198. package/services/transaction-service/types.d.ts +7 -0
  199. package/services/transaction-service/utils.js +7 -2
  200. package/types/account/info/keyring.d.ts +4 -1
  201. package/types/account/info/keyring.js +9 -0
  202. package/types/account/info/proxy.d.ts +2 -0
  203. package/types/balance/index.d.ts +4 -1
  204. package/types/fee/base.d.ts +1 -1
  205. package/types/fee/cardano.d.ts +18 -0
  206. package/types/fee/cardano.js +1 -0
  207. package/types/fee/subscription.d.ts +4 -3
  208. package/types/swap/index.d.ts +11 -3
  209. package/types/swap/index.js +7 -2
  210. package/utils/account/analyze.js +2 -1
  211. package/utils/account/common.d.ts +11 -6
  212. package/utils/account/common.js +28 -19
  213. package/utils/account/derive/info/solo.js +10 -5
  214. package/utils/account/derive/validate.d.ts +1 -0
  215. package/utils/account/derive/validate.js +34 -1
  216. package/utils/account/transform.d.ts +2 -1
  217. package/utils/account/transform.js +37 -13
  218. package/utils/fee/transfer.d.ts +2 -1
  219. package/utils/fee/transfer.js +44 -11
  220. package/utils/index.js +4 -4
  221. package/utils/staticData/index.d.ts +4 -1
  222. package/utils/staticData/index.js +5 -1
  223. package/utils/staticData/oldChainPrefix.json +1 -0
@@ -43,6 +43,7 @@ var _storage = require("@subwallet/extension-base/storage");
43
43
  var _types2 = require("@subwallet/extension-base/types");
44
44
  var _utils3 = require("@subwallet/extension-base/utils");
45
45
  var _promise = require("@subwallet/extension-base/utils/promise");
46
+ var _subwalletApiSdk = _interopRequireDefault(require("@subwallet/subwallet-api-sdk"));
46
47
  var _uiKeyring = require("@subwallet/ui-keyring");
47
48
  var _bn = _interopRequireDefault(require("bn.js"));
48
49
  var _i18next = require("i18next");
@@ -90,6 +91,8 @@ class KoniState {
90
91
  waitStarting = null;
91
92
  constructor() {
92
93
  let providers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
94
+ // Init subwallet api sdk
95
+ _subwalletApiSdk.default.init(_constants.BACKEND_API_URL);
93
96
  this.providers = providers;
94
97
  this.eventService = new _eventService.EventService();
95
98
  this.dbService = new _DatabaseService.default(this.eventService);
@@ -731,6 +734,12 @@ class KoniState {
731
734
  getTonApi(networkKey) {
732
735
  return this.chainService.getTonApi(networkKey);
733
736
  }
737
+ getCardanoApiMap() {
738
+ return this.chainService.getCardanoApiMap();
739
+ }
740
+ getCardanoApi(networkKey) {
741
+ return this.chainService.getCardanoApi(networkKey);
742
+ }
734
743
  getApiMap() {
735
744
  return {
736
745
  substrate: this.chainService.getSubstrateApiMap(),
@@ -1017,12 +1026,18 @@ class KoniState {
1017
1026
  getConfirmationsQueueSubjectTon() {
1018
1027
  return this.requestService.confirmationsQueueSubjectTon;
1019
1028
  }
1029
+ getConfirmationsQueueSubjectCardano() {
1030
+ return this.requestService.confirmationsQueueSubjectCardano;
1031
+ }
1020
1032
  async completeConfirmation(request) {
1021
1033
  return await this.requestService.completeConfirmation(request);
1022
1034
  }
1023
1035
  async completeConfirmationTon(request) {
1024
1036
  return await this.requestService.completeConfirmationTon(request);
1025
1037
  }
1038
+ async completeConfirmationCardano(request) {
1039
+ return await this.requestService.completeConfirmationCardano(request);
1040
+ }
1026
1041
  async onMV3Update() {
1027
1042
  const migrationStatus = await _storage.SWStorage.instance.getItem('mv3_migration');
1028
1043
  if (!migrationStatus || migrationStatus !== 'done') {
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.3.21-0'
16
+ version: '1.3.23-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DEFAULT_CARDANO_TTL_OFFSET = void 0;
7
+ // Copyright 2019-2022 @subwallet/extension-base
8
+ // SPDX-License-Identifier: Apache-2.0
9
+
10
+ const DEFAULT_CARDANO_TTL_OFFSET = 2 * 60 * 60 * 1000; // 2 hours
11
+ exports.DEFAULT_CARDANO_TTL_OFFSET = DEFAULT_CARDANO_TTL_OFFSET;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.subscribeCardanoBalance = subscribeCardanoBalance;
7
+ var _types = require("@subwallet/chain-list/types");
8
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
+ var _constants = require("@subwallet/extension-base/constants");
10
+ var _utils = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/utils");
11
+ var _utils2 = require("@subwallet/extension-base/utils");
12
+ // Copyright 2019-2022 @subwallet/extension-base
13
+ // SPDX-License-Identifier: Apache-2.0
14
+
15
+ async function getBalanceMap(addresses, cardanoApi, isTestnet) {
16
+ const addressBalanceMap = {};
17
+ for (const address of addresses) {
18
+ addressBalanceMap[address] = await cardanoApi.getBalanceMap(isTestnet ? (0, _utils2.reformatAddress)(address, 0) : address);
19
+ }
20
+ return addressBalanceMap;
21
+ }
22
+ function subscribeCardanoBalance(params) {
23
+ const {
24
+ addresses,
25
+ assetMap,
26
+ callback,
27
+ cardanoApi,
28
+ chainInfo
29
+ } = params;
30
+ const chain = chainInfo.slug;
31
+ const isTestnet = chainInfo.isTestnet;
32
+ const tokens = (0, _utils2.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.NATIVE, _types._AssetType.CIP26]);
33
+ function getBalance() {
34
+ getBalanceMap(addresses, cardanoApi, isTestnet).then(addressBalanceMap => {
35
+ Object.values(tokens).forEach(tokenInfo => {
36
+ const id = (0, _utils.getCardanoAssetId)(tokenInfo);
37
+ const balances = addresses.map(address => {
38
+ var _addressBalanceMap$ad;
39
+ if (!addressBalanceMap[address]) {
40
+ return '0';
41
+ }
42
+ return ((_addressBalanceMap$ad = addressBalanceMap[address].find(asset => asset.unit === id)) === null || _addressBalanceMap$ad === void 0 ? void 0 : _addressBalanceMap$ad.quantity) || '0';
43
+ });
44
+ const items = balances.map((balance, index) => {
45
+ return {
46
+ address: addresses[index],
47
+ tokenSlug: tokenInfo.slug,
48
+ free: balance,
49
+ locked: '0',
50
+ // todo: research cardano lock balance
51
+ state: _KoniTypes.APIItemState.READY
52
+ };
53
+ });
54
+ callback(items);
55
+ });
56
+ }).catch(e => console.error('Error while fetching cardano balance', e));
57
+ }
58
+ const interval = setInterval(getBalance, _constants.ASTAR_REFRESH_BALANCE_INTERVAL);
59
+ getBalance();
60
+ return () => {
61
+ clearInterval(interval);
62
+ };
63
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cborToBytes = void 0;
7
+ exports.getAdaBelongUtxo = getAdaBelongUtxo;
8
+ exports.getCardanoAssetId = getCardanoAssetId;
9
+ exports.getCardanoTxFee = getCardanoTxFee;
10
+ exports.retryCardanoTxStatus = retryCardanoTxStatus;
11
+ exports.splitCardanoId = splitCardanoId;
12
+ var _cardanoSerializationLibNodejs = require("@emurgo/cardano-serialization-lib-nodejs");
13
+ // Copyright 2019-2022 @subwallet/extension-base
14
+ // SPDX-License-Identifier: Apache-2.0
15
+
16
+ function getCardanoAssetId(chainAsset) {
17
+ var _chainAsset$metadata;
18
+ return (_chainAsset$metadata = chainAsset.metadata) === null || _chainAsset$metadata === void 0 ? void 0 : _chainAsset$metadata.cardanoId;
19
+ }
20
+ function getCardanoTxFee(payload) {
21
+ return BigInt(_cardanoSerializationLibNodejs.Transaction.from_hex(payload).body().fee().to_str());
22
+ }
23
+ function getAdaBelongUtxo(payload, receiverAddress) {
24
+ const txOutputsRaw = _cardanoSerializationLibNodejs.Transaction.from_hex(payload).body().outputs().to_json();
25
+ const txOutputs = JSON.parse(txOutputsRaw);
26
+ const receiverUtxo = txOutputs.find(utxo => utxo.address === receiverAddress); // must has utxo to receiver
27
+
28
+ // @ts-ignore
29
+ return BigInt(receiverUtxo.amount.coin);
30
+ }
31
+ const cborToBytes = hex => {
32
+ if (hex.length % 2 === 0 && /^[0-9A-F]*$/i.test(hex)) {
33
+ return Buffer.from(hex, 'hex');
34
+ }
35
+ return Buffer.from(hex, 'utf-8');
36
+ };
37
+ exports.cborToBytes = cborToBytes;
38
+ async function retryCardanoTxStatus(fn, options) {
39
+ let lastError;
40
+ for (let i = 0; i < options.retries; i++) {
41
+ try {
42
+ return await fn();
43
+ } catch (e) {
44
+ if (e instanceof Error) {
45
+ lastError = e;
46
+ }
47
+
48
+ // todo: improve the timeout tx
49
+ await new Promise(resolve => setTimeout(resolve, options.delay)); // wait for delay period, then recall the fn()
50
+ }
51
+ }
52
+
53
+ console.error('Cardano transaction timeout', lastError); // throw only last error, in case no successful result from fn()
54
+
55
+ return false;
56
+ }
57
+ function splitCardanoId(id) {
58
+ if (id === 'lovelace') {
59
+ return {
60
+ cardanoId: id,
61
+ policyId: '',
62
+ nameHex: ''
63
+ };
64
+ }
65
+ if (!id || id.length < 56) {
66
+ throw new Error('The cardano native asset policy id must has 28 bytes in length.');
67
+ } else {
68
+ return {
69
+ cardanoId: id,
70
+ policyId: id.slice(0, 56),
71
+ nameHex: id.slice(56)
72
+ };
73
+ }
74
+ }
@@ -8,6 +8,7 @@ exports.getAccountJsonByAddress = void 0;
8
8
  exports.subscribeBalance = subscribeBalance;
9
9
  var _types = require("@subwallet/chain-list/types");
10
10
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
+ var _cardano = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano");
11
12
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
12
13
  var _utils2 = require("@subwallet/extension-base/utils");
13
14
  var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
@@ -45,16 +46,19 @@ exports.getAccountJsonByAddress = getAccountJsonByAddress;
45
46
  const filterAddress = (addresses, chainInfo) => {
46
47
  const {
47
48
  bitcoin,
49
+ cardano,
48
50
  evm,
49
51
  substrate,
50
52
  ton
51
- } = (0, _utils2.categoryAddresses)(addresses);
53
+ } = (0, _utils2.getAddressesByChainTypeMap)(addresses);
52
54
  if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
53
- return [evm, [...bitcoin, ...substrate, ...ton]];
55
+ return [evm, [...bitcoin, ...substrate, ...ton, ...cardano]];
54
56
  } else if ((0, _utils._isChainBitcoinCompatible)(chainInfo)) {
55
- return [bitcoin, [...evm, ...substrate, ...ton]];
57
+ return [bitcoin, [...evm, ...substrate, ...ton, ...cardano]];
56
58
  } else if ((0, _utils._isChainTonCompatible)(chainInfo)) {
57
- return [ton, [...bitcoin, ...evm, ...substrate]];
59
+ return [ton, [...bitcoin, ...evm, ...substrate, ...cardano]];
60
+ } else if ((0, _utils._isChainCardanoCompatible)(chainInfo)) {
61
+ return [cardano, [...bitcoin, ...evm, ...substrate, ...ton]];
58
62
  } else {
59
63
  const fetchList = [];
60
64
  const unfetchList = [];
@@ -80,11 +84,11 @@ const filterAddress = (addresses, chainInfo) => {
80
84
  fetchList.push(address);
81
85
  }
82
86
  });
83
- return [fetchList, [...unfetchList, ...bitcoin, ...evm, ...ton]];
87
+ return [fetchList, [...unfetchList, ...bitcoin, ...evm, ...ton, ...cardano]];
84
88
  }
85
89
  };
86
90
  const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap, state, callback) => {
87
- const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20, _types._AssetType.VFT]);
91
+ const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20, _types._AssetType.VFT, _types._AssetType.TEP74, _types._AssetType.CIP26]);
88
92
  const now = new Date().getTime();
89
93
  Object.values(tokens).forEach(token => {
90
94
  const items = addresses.map(address => ({
@@ -100,7 +104,7 @@ const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap
100
104
  };
101
105
 
102
106
  // main subscription, use for multiple chains, multiple addresses and multiple tokens
103
- function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, callback, extrinsicType) {
107
+ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, callback, extrinsicType) {
104
108
  // Filter chain and token
105
109
  const chainAssetMap = Object.fromEntries(Object.entries(_chainAssetMap).filter(_ref => {
106
110
  let [token] = _ref;
@@ -138,6 +142,16 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
138
142
  tonApi
139
143
  });
140
144
  }
145
+ const cardanoApi = cardanoApiMap[chainSlug];
146
+ if ((0, _utils._isPureCardanoChain)(chainInfo)) {
147
+ return (0, _cardano.subscribeCardanoBalance)({
148
+ addresses: useAddresses,
149
+ assetMap: chainAssetMap,
150
+ callback,
151
+ chainInfo,
152
+ cardanoApi
153
+ });
154
+ }
141
155
 
142
156
  // If the chain is not ready, return pending state
143
157
  if (!substrateApiMap[chainSlug].isApiReady) {
@@ -18,7 +18,7 @@ exports.getTransferCellPromise = getTransferCellPromise;
18
18
  exports.getWalletQueryId = getWalletQueryId;
19
19
  exports.isBounceableAddress = isBounceableAddress;
20
20
  exports.messageRelaxedToCell = messageRelaxedToCell;
21
- exports.retry = retry;
21
+ exports.retryTonTxStatus = retryTonTxStatus;
22
22
  exports.tonAddressInfo = tonAddressInfo;
23
23
  var _consts = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/ton/consts");
24
24
  var _core = require("@ton/core");
@@ -45,7 +45,7 @@ function externalMessage(contract, seqno, body) {
45
45
  body: body
46
46
  }))).endCell();
47
47
  }
48
- async function retry(fn, options) {
48
+ async function retryTonTxStatus(fn, options) {
49
49
  let lastError;
50
50
  for (let i = 0; i < options.retries; i++) {
51
51
  try {
@@ -200,8 +200,9 @@ class BalanceService {
200
200
  const evmApiMap = this.state.chainService.getEvmApiMap();
201
201
  const substrateApiMap = this.state.chainService.getSubstrateApiMap();
202
202
  const tonApiMap = this.state.chainService.getTonApiMap();
203
+ const cardanoApiMap = this.state.chainService.getCardanoApiMap();
203
204
  let unsub = _util.noop;
204
- unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, result => {
205
+ unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, result => {
205
206
  const rs = result[0];
206
207
  let value;
207
208
  switch (balanceType) {
@@ -371,13 +372,14 @@ class BalanceService {
371
372
  const evmApiMap = this.state.chainService.getEvmApiMap();
372
373
  const substrateApiMap = this.state.chainService.getSubstrateApiMap();
373
374
  const tonApiMap = this.state.chainService.getTonApiMap();
375
+ const cardanoApiMap = this.state.chainService.getCardanoApiMap();
374
376
  const activeChainSlugs = Object.keys(this.state.getActiveChainInfoMap());
375
377
  const assetState = this.state.chainService.subscribeAssetSettings().value;
376
378
  const assets = Object.values(assetMap).filter(asset => {
377
379
  var _assetState$asset$slu;
378
380
  return activeChainSlugs.includes(asset.originChain) && ((_assetState$asset$slu = assetState[asset.slug]) === null || _assetState$asset$slu === void 0 ? void 0 : _assetState$asset$slu.visible);
379
381
  }).map(asset => asset.slug);
380
- const unsub = (0, _helpers.subscribeBalance)(addresses, activeChainSlugs, assets, assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, result => {
382
+ const unsub = (0, _helpers.subscribeBalance)(addresses, activeChainSlugs, assets, assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, result => {
381
383
  !cancel && this.setBalanceItem(result);
382
384
  }, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
383
385
  const unsub2 = this.state.subscribeMantaPayBalance();
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createCardanoTransaction = createCardanoTransaction;
7
+ var csl = _interopRequireWildcard(require("@emurgo/cardano-serialization-lib-nodejs"));
8
+ var _types = require("@subwallet/chain-list/types");
9
+ var _utils = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/utils");
10
+ var _subwalletApiSdk = require("@subwallet/subwallet-api-sdk");
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ // Copyright 2019-2022 @subwallet/extension-base
14
+ // SPDX-License-Identifier: Apache-2.0
15
+
16
+ async function createCardanoTransaction(params) {
17
+ var _tokenInfo$metadata;
18
+ const {
19
+ cardanoTtlOffset,
20
+ from,
21
+ networkKey,
22
+ to,
23
+ tokenInfo,
24
+ transferAll,
25
+ value
26
+ } = params;
27
+ const cardanoId = (_tokenInfo$metadata = tokenInfo.metadata) === null || _tokenInfo$metadata === void 0 ? void 0 : _tokenInfo$metadata.cardanoId;
28
+ const isNativeTransfer = tokenInfo.assetType === _types._AssetType.NATIVE;
29
+ const isSelfTransfer = from === to;
30
+ if (!cardanoId) {
31
+ throw new Error('Missing token policy id metadata');
32
+ }
33
+ const payload = await _subwalletApiSdk.subwalletApiSdk.fetchUnsignedPayload({
34
+ tokenDecimals: params.tokenInfo.decimals || 0,
35
+ nativeTokenSymbol: params.nativeTokenInfo.symbol,
36
+ cardanoId,
37
+ from: params.from,
38
+ to: params.to,
39
+ value: params.value,
40
+ cardanoTtlOffset: params.cardanoTtlOffset
41
+ });
42
+ console.log('Build cardano payload successfully!', payload);
43
+ validatePayload(payload, params);
44
+ const fee = (0, _utils.getCardanoTxFee)(payload);
45
+ const adaBelongToCnaUtxo = isNativeTransfer || isSelfTransfer ? BigInt(0) : (0, _utils.getAdaBelongUtxo)(payload, to);
46
+ const tx = {
47
+ from,
48
+ to,
49
+ networkKey,
50
+ value,
51
+ transferAll,
52
+ cardanoTtlOffset,
53
+ estimateCardanoFee: (fee + adaBelongToCnaUtxo).toString(),
54
+ cardanoPayload: payload
55
+ };
56
+ return [tx, value];
57
+ }
58
+ function validatePayload(payload, params) {
59
+ var _params$tokenInfo$met;
60
+ const txInfo = JSON.parse(csl.Transaction.from_hex(payload).to_json());
61
+ const outputs = txInfo.body.outputs;
62
+ const cardanoId = (_params$tokenInfo$met = params.tokenInfo.metadata) === null || _params$tokenInfo$met === void 0 ? void 0 : _params$tokenInfo$met.cardanoId;
63
+ const assetType = params.tokenInfo.assetType;
64
+ const isSendSameAddress = params.from === params.to;
65
+ if (!cardanoId) {
66
+ throw new Error('Missing cardano id metadata');
67
+ }
68
+ const cardanoAssetMetadata = (0, _utils.splitCardanoId)(cardanoId);
69
+ if (isSendSameAddress) {
70
+ validateAllOutputsBelongToAddress(params.from, outputs);
71
+ validateExistOutputWithAmountSend(params.value, outputs, assetType, cardanoAssetMetadata);
72
+ } else {
73
+ const [outputsBelongToReceiver, outputsNotBelongToReceiver] = [outputs.filter(output => output.address === params.to), outputs.filter(output => output.address !== params.to)];
74
+ validateReceiverOutputsWithAmountSend(params.value, outputsBelongToReceiver, assetType, cardanoAssetMetadata);
75
+ validateAllOutputsBelongToAddress(params.from, outputsNotBelongToReceiver);
76
+ }
77
+ }
78
+ function validateAllOutputsBelongToAddress(address, outputs) {
79
+ const found = outputs.find(output => output.address !== address);
80
+ if (found) {
81
+ throw new Error('Transaction has invalid address information');
82
+ }
83
+ }
84
+ function validateExistOutputWithAmountSend(amount, outputs, assetType, cardanoAssetMetadata) {
85
+ if (assetType === _types._AssetType.NATIVE) {
86
+ const found = outputs.find(output => output.amount.coin === amount);
87
+ if (found) {
88
+ return;
89
+ }
90
+ throw new Error('Transaction has invalid transfer amount information');
91
+ }
92
+ if (assetType === _types._AssetType.CIP26) {
93
+ const found = outputs.find(output => {
94
+ var _output$amount$multia;
95
+ return amount === ((_output$amount$multia = output.amount.multiasset[cardanoAssetMetadata.policyId]) === null || _output$amount$multia === void 0 ? void 0 : _output$amount$multia[cardanoAssetMetadata.nameHex]);
96
+ });
97
+ if (found) {
98
+ return;
99
+ }
100
+ throw new Error('Transaction has invalid transfer amount information');
101
+ }
102
+ throw new Error('Invalid asset type!');
103
+ }
104
+ function validateReceiverOutputsWithAmountSend(amount, outputs, assetType, cardanoAssetMetadata) {
105
+ if (outputs.length !== 1) {
106
+ throw new Error('Transaction has invalid transfer amount information');
107
+ }
108
+ const receiverOutput = outputs[0];
109
+ if (assetType === _types._AssetType.NATIVE) {
110
+ if (receiverOutput.amount.coin === amount) {
111
+ return;
112
+ }
113
+ throw new Error('Transaction has invalid transfer amount information');
114
+ }
115
+ if (assetType === _types._AssetType.CIP26) {
116
+ if (receiverOutput.amount.multiasset[cardanoAssetMetadata.policyId][cardanoAssetMetadata.nameHex] === amount) {
117
+ return;
118
+ }
119
+ throw new Error('Transaction has invalid transfer amount information');
120
+ }
121
+ throw new Error('Invalid asset type!');
122
+ }
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getTransferMockTxFee = exports.createTransferExtrinsic = void 0;
7
+ exports.getTransferMockTxFee = exports.createSubstrateExtrinsic = void 0;
8
8
  var _api = require("@gear-js/api");
9
9
  var _types = require("@subwallet/chain-list/types");
10
10
  var _wasm = require("@subwallet/extension-base/koni/api/contract-handler/wasm");
@@ -23,7 +23,7 @@ var _utilCrypto = require("@polkadot/util-crypto");
23
23
  // Copyright 2019-2022 @subwallet/extension-base
24
24
  // SPDX-License-Identifier: Apache-2.0
25
25
 
26
- const createTransferExtrinsic = async _ref => {
26
+ const createSubstrateExtrinsic = async _ref => {
27
27
  var _tokenInfo$metadata;
28
28
  let {
29
29
  from,
@@ -119,7 +119,7 @@ const createTransferExtrinsic = async _ref => {
119
119
  }
120
120
  return [transfer, transferAmount || value];
121
121
  };
122
- exports.createTransferExtrinsic = createTransferExtrinsic;
122
+ exports.createSubstrateExtrinsic = createSubstrateExtrinsic;
123
123
  const getTransferMockTxFee = async (address, chainInfo, tokenInfo, api) => {
124
124
  try {
125
125
  let estimatedFee;
@@ -157,7 +157,7 @@ const getTransferMockTxFee = async (address, chainInfo, tokenInfo, api) => {
157
157
  var _paymentInfo$partialF;
158
158
  const substrateApi = api;
159
159
  const chainApi = await substrateApi.isReady;
160
- const [mockTx] = await createTransferExtrinsic({
160
+ const [mockTx] = await createSubstrateExtrinsic({
161
161
  from: address,
162
162
  networkKey: chainInfo.slug,
163
163
  substrateApi: chainApi,
@@ -115,7 +115,10 @@ const _STAKING_ERA_LENGTH_MAP = {
115
115
  polkadex: 24,
116
116
  avail_mainnet: 24,
117
117
  cere: 24,
118
- analog_timechain: 12
118
+ analog_timechain: 12,
119
+ muse_testnet: 25 * 6 / 60 / 60,
120
+ // 25 blocks per session
121
+ mythos: 24
119
122
  };
120
123
  exports._STAKING_ERA_LENGTH_MAP = _STAKING_ERA_LENGTH_MAP;
121
124
  const _EXPECTED_BLOCK_TIME = {
@@ -149,7 +152,9 @@ const _EXPECTED_BLOCK_TIME = {
149
152
  enjin_relaychain: 6,
150
153
  availTuringTest: 20,
151
154
  avail_mainnet: 20,
152
- dentnet: 3
155
+ dentnet: 3,
156
+ muse_testnet: 6,
157
+ mythos: 6
153
158
  };
154
159
  exports._EXPECTED_BLOCK_TIME = _EXPECTED_BLOCK_TIME;
155
160
  const _PARACHAIN_INFLATION_DISTRIBUTION = {
@@ -266,7 +271,7 @@ const _TRANSFER_CHAIN_GROUP = {
266
271
  genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
267
272
  // crab: ['crab', 'pangolin'],
268
273
  bitcountry: ['pioneer', 'bitcountry'],
269
- statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain'],
274
+ statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub'],
270
275
  riochain: ['riochain'],
271
276
  sora_substrate: ['sora_substrate'],
272
277
  avail: ['kate', 'goldberg_testnet'],