@subwallet/extension-base 1.3.34-0 → 1.3.36-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 (49) hide show
  1. package/background/KoniTypes.d.ts +10 -0
  2. package/cjs/core/logic-validation/request.js +1 -1
  3. package/cjs/koni/background/handlers/Extension.js +32 -4
  4. package/cjs/koni/background/utils.js +64 -29
  5. package/cjs/packageInfo.js +1 -1
  6. package/cjs/services/balance-service/helpers/process.js +1 -5
  7. package/cjs/services/balance-service/index.js +20 -1
  8. package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +91 -175
  9. package/cjs/services/balance-service/transfer/xcm/index.js +7 -6
  10. package/cjs/services/price-service/coingecko.js +22 -15
  11. package/cjs/services/price-service/index.js +12 -0
  12. package/cjs/services/request-service/handler/EvmRequestHandler.js +4 -1
  13. package/cjs/services/swap-service/handler/kyber-handler.js +355 -0
  14. package/cjs/services/swap-service/handler/uniswap-handler.js +223 -41
  15. package/cjs/services/swap-service/index.js +34 -2
  16. package/cjs/services/swap-service/utils.js +4 -1
  17. package/cjs/services/transaction-service/index.js +297 -52
  18. package/cjs/types/swap/index.js +2 -1
  19. package/core/logic-validation/request.js +1 -1
  20. package/koni/background/handlers/Extension.d.ts +1 -0
  21. package/koni/background/handlers/Extension.js +32 -4
  22. package/koni/background/utils.d.ts +3 -5
  23. package/koni/background/utils.js +64 -29
  24. package/package.json +11 -6
  25. package/packageInfo.js +1 -1
  26. package/services/balance-service/helpers/process.d.ts +2 -2
  27. package/services/balance-service/helpers/process.js +1 -5
  28. package/services/balance-service/index.js +21 -2
  29. package/services/balance-service/transfer/xcm/acrossBridge/index.d.ts +9 -8
  30. package/services/balance-service/transfer/xcm/acrossBridge/index.js +91 -174
  31. package/services/balance-service/transfer/xcm/index.js +7 -6
  32. package/services/event-service/types.d.ts +6 -6
  33. package/services/price-service/coingecko.d.ts +1 -1
  34. package/services/price-service/coingecko.js +22 -16
  35. package/services/price-service/index.d.ts +1 -0
  36. package/services/price-service/index.js +12 -0
  37. package/services/request-service/handler/EvmRequestHandler.js +4 -1
  38. package/services/swap-service/handler/kyber-handler.d.ts +28 -0
  39. package/services/swap-service/handler/kyber-handler.js +346 -0
  40. package/services/swap-service/handler/uniswap-handler.d.ts +48 -0
  41. package/services/swap-service/handler/uniswap-handler.js +224 -42
  42. package/services/swap-service/index.js +34 -2
  43. package/services/swap-service/utils.js +4 -1
  44. package/services/transaction-service/helpers/index.d.ts +5 -5
  45. package/services/transaction-service/index.d.ts +10 -5
  46. package/services/transaction-service/index.js +279 -36
  47. package/services/transaction-service/types.d.ts +23 -10
  48. package/types/swap/index.d.ts +4 -1
  49. package/types/swap/index.js +2 -1
@@ -1,6 +1,7 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ import { wait } from '@subwallet/extension-base/utils';
4
5
  import { metadataExpand } from '@subwallet/extension-chains/bundle';
5
6
  import { Metadata, TypeRegistry } from '@polkadot/types';
6
7
  export function getSuitableRegistry(registries, payload) {
@@ -23,41 +24,75 @@ export function getSuitableRegistry(registries, payload) {
23
24
  });
24
25
  return sortedRegistries[0].registry;
25
26
  }
26
- export function setupApiRegistry(chainInfo, koniState) {
27
+ export async function setupApiRegistry(chainInfo, koniState) {
27
28
  if (!chainInfo) {
28
29
  return null;
29
30
  }
30
- const api = koniState.getSubstrateApi(chainInfo.slug).api;
31
- const apiSpecVersion = api === null || api === void 0 ? void 0 : api.runtimeVersion.specVersion.toString();
32
- const registry = api === null || api === void 0 ? void 0 : api.registry;
33
- return {
34
- registry,
35
- specVersion: apiSpecVersion
36
- };
37
- }
38
- export function setupDatabaseRegistry(metadata, chainInfo, payload) {
39
- if (!metadata || !metadata.genesisHash || !chainInfo) {
31
+ try {
32
+ const api = koniState.getSubstrateApi(chainInfo.slug).api;
33
+ if (!api) {
34
+ return null;
35
+ }
36
+
37
+ // Wait for the API to be ready or timeout after 1 second
38
+ await Promise.race([wait(1000).then(() => {
39
+ throw new Error('Timeout waiting for API to be ready');
40
+ }), api.isReady]);
41
+
42
+ // Extract the spec version and registry
43
+ const apiSpecVersion = api.runtimeVersion.specVersion.toString();
44
+ const registry = api.registry;
45
+ return {
46
+ registry,
47
+ specVersion: apiSpecVersion
48
+ };
49
+ } catch (e) {
50
+ console.error('Error in setupApiRegistry:', e);
40
51
  return null;
41
52
  }
42
- const registry = new TypeRegistry();
43
- const _metadata = new Metadata(registry, metadata.hexValue);
44
- registry.register(metadata.types);
45
- registry.setChainProperties(registry.createType('ChainProperties', metadata.tokenInfo));
46
- registry.setMetadata(_metadata, payload.signedExtensions, metadata.userExtensions);
47
- return {
48
- registry,
49
- specVersion: metadata.specVersion
50
- };
51
53
  }
52
- export function setupDappRegistry(metadata, payload) {
53
- if (!metadata || !metadata.genesisHash) {
54
+ export async function setupDatabaseRegistry(chainInfo, payload, koniState) {
55
+ if (!chainInfo) {
56
+ console.warn('setupDatabaseRegistry: Missing chainInfo');
57
+ return null;
58
+ }
59
+ try {
60
+ const metadata = await koniState.chainService.getMetadataByHash(payload.genesisHash);
61
+ if (!(metadata !== null && metadata !== void 0 && metadata.genesisHash)) {
62
+ console.warn('setupDatabaseRegistry: Metadata not found or invalid for genesisHash:', payload.genesisHash);
63
+ return null;
64
+ }
65
+ const registry = new TypeRegistry();
66
+ const _metadata = new Metadata(registry, metadata.hexValue);
67
+ registry.register(metadata.types);
68
+ registry.setChainProperties(registry.createType('ChainProperties', metadata.tokenInfo));
69
+ registry.setMetadata(_metadata, payload.signedExtensions, metadata.userExtensions);
70
+ return {
71
+ registry,
72
+ specVersion: metadata.specVersion
73
+ };
74
+ } catch (e) {
75
+ console.error('setupDatabaseRegistry: Error setting up database registry:', e);
54
76
  return null;
55
77
  }
56
- const expanded = metadataExpand(metadata, false);
57
- const registry = expanded.registry;
58
- registry.setSignedExtensions(payload.signedExtensions, expanded.definition.userExtensions);
59
- return {
60
- registry,
61
- specVersion: metadata.specVersion
62
- };
78
+ }
79
+ export function setupDappRegistry(payload, koniState) {
80
+ return new Promise(resolve => {
81
+ const metadata = koniState.knownMetadata.find(meta => meta.genesisHash === payload.genesisHash);
82
+ if (!(metadata !== null && metadata !== void 0 && metadata.genesisHash)) {
83
+ return resolve(null);
84
+ }
85
+ try {
86
+ const expanded = metadataExpand(metadata, false);
87
+ const registry = expanded.registry;
88
+ registry.setSignedExtensions(payload.signedExtensions, expanded.definition.userExtensions);
89
+ resolve({
90
+ registry,
91
+ specVersion: metadata.specVersion
92
+ });
93
+ } catch (e) {
94
+ console.error('setupDappRegistry: Error setting up DApp registry:', e);
95
+ resolve(null);
96
+ }
97
+ });
63
98
  }
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.3.34-0",
20
+ "version": "1.3.36-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -1911,6 +1911,11 @@
1911
1911
  "require": "./cjs/services/swap-service/handler/hydradx-handler.js",
1912
1912
  "default": "./services/swap-service/handler/hydradx-handler.js"
1913
1913
  },
1914
+ "./services/swap-service/handler/kyber-handler": {
1915
+ "types": "./services/swap-service/handler/kyber-handler.d.ts",
1916
+ "require": "./cjs/services/swap-service/handler/kyber-handler.js",
1917
+ "default": "./services/swap-service/handler/kyber-handler.js"
1918
+ },
1914
1919
  "./services/swap-service/handler/simpleswap-handler": {
1915
1920
  "types": "./services/swap-service/handler/simpleswap-handler.d.ts",
1916
1921
  "require": "./cjs/services/swap-service/handler/simpleswap-handler.js",
@@ -2705,12 +2710,12 @@
2705
2710
  "@sora-substrate/type-definitions": "^1.17.7",
2706
2711
  "@substrate/connect": "^0.8.9",
2707
2712
  "@subwallet/chain-list": "0.2.104",
2708
- "@subwallet/extension-base": "^1.3.34-0",
2709
- "@subwallet/extension-chains": "^1.3.34-0",
2710
- "@subwallet/extension-dapp": "^1.3.34-0",
2711
- "@subwallet/extension-inject": "^1.3.34-0",
2713
+ "@subwallet/extension-base": "^1.3.36-0",
2714
+ "@subwallet/extension-chains": "^1.3.36-0",
2715
+ "@subwallet/extension-dapp": "^1.3.36-0",
2716
+ "@subwallet/extension-inject": "^1.3.36-0",
2712
2717
  "@subwallet/keyring": "^0.1.11",
2713
- "@subwallet/subwallet-api-sdk": "^1.3.34-0",
2718
+ "@subwallet/subwallet-api-sdk": "^1.3.36-0",
2714
2719
  "@subwallet/ui-keyring": "^0.1.11",
2715
2720
  "@ton/core": "^0.56.3",
2716
2721
  "@ton/crypto": "^3.2.0",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.3.34-0'
10
+ version: '1.3.36-0'
11
11
  };
@@ -1,4 +1,4 @@
1
- import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
1
+ import { _ChainAsset } from '@subwallet/chain-list/types';
2
2
  import { _Address } from '@subwallet/extension-base/background/KoniTypes';
3
3
  import { _EvmApi } from '@subwallet/extension-base/services/chain-service/types';
4
4
  import { CommonOptimalTransferPath } from '@subwallet/extension-base/types/service-base';
@@ -11,4 +11,4 @@ export interface RequestOptimalTransferProcess {
11
11
  }
12
12
  export declare function getDefaultTransferProcess(): CommonOptimalTransferPath;
13
13
  export declare function getSnowbridgeTransferProcessFromEvm(address: string, evmApi: _EvmApi, tokenInfo: _ChainAsset, amount: string): Promise<CommonOptimalTransferPath>;
14
- export declare function getAcrossbridgeTransferProcessFromEvm(originChainInfo: _ChainInfo): Promise<CommonOptimalTransferPath>;
14
+ export declare function getAcrossbridgeTransferProcessFromEvm(SpokePoolAddress: string): Promise<CommonOptimalTransferPath>;
@@ -3,8 +3,6 @@
3
3
 
4
4
  import { COMMON_CHAIN_SLUGS } from '@subwallet/chain-list';
5
5
  import { CommonStepType, DEFAULT_FIRST_STEP, MOCK_STEP_FEE } from '@subwallet/extension-base/types/service-base';
6
- import { _getEvmChainId } from "../../chain-service/utils/index.js";
7
- import { SpokePoolMapping } from "../transfer/xcm/acrossBridge/index.js";
8
6
  export function getDefaultTransferProcess() {
9
7
  return {
10
8
  totalFee: [MOCK_STEP_FEE, MOCK_STEP_FEE],
@@ -44,9 +42,7 @@ export async function getSnowbridgeTransferProcessFromEvm(address, evmApi, token
44
42
  result.totalFee.push(MOCK_STEP_FEE);
45
43
  return Promise.resolve(result);
46
44
  }
47
- export async function getAcrossbridgeTransferProcessFromEvm(originChainInfo) {
48
- const chainId = _getEvmChainId(originChainInfo);
49
- const SpokePoolAddress = SpokePoolMapping[chainId].SpokePool.address;
45
+ export async function getAcrossbridgeTransferProcessFromEvm(SpokePoolAddress) {
50
46
  const result = {
51
47
  totalFee: [MOCK_STEP_FEE],
52
48
  steps: [DEFAULT_FIRST_STEP]
@@ -18,7 +18,7 @@ import BigN from 'bignumber.js';
18
18
  import { t } from 'i18next';
19
19
  import { BehaviorSubject } from 'rxjs';
20
20
  import { noop } from '@polkadot/util';
21
- import { _isAcrossChainBridge } from "./transfer/xcm/acrossBridge/index.js";
21
+ import { _isAcrossChainBridge, getAcrossQuote } from "./transfer/xcm/acrossBridge/index.js";
22
22
  import { BalanceMapImpl } from "./BalanceMapImpl.js";
23
23
  import { subscribeBalance } from "./helpers/index.js";
24
24
 
@@ -577,7 +577,26 @@ export class BalanceService {
577
577
  if (_isAcrossChainBridge(originChainInfo.slug, destChainInfo.slug)) {
578
578
  const tokenInfo = this.state.chainService.getAssetBySlug(params.tokenSlug);
579
579
  if (!_isNativeToken(tokenInfo)) {
580
- return getAcrossbridgeTransferProcessFromEvm(originChainInfo);
580
+ const chainInfoMap = this.state.getChainInfoMap();
581
+ const originTokenInfo = this.state.getAssetBySlug(params.tokenSlug);
582
+ const destinationTokenInfo = this.state.getXcmEqualAssetByChain(params.destChain, params.tokenSlug);
583
+ if (!destinationTokenInfo) {
584
+ throw new Error('Destination token info not found');
585
+ }
586
+ const inputData = {
587
+ destinationTokenInfo,
588
+ originTokenInfo,
589
+ sendingValue: params.amount,
590
+ sender: params.address,
591
+ recipient: params.address,
592
+ destinationChain: chainInfoMap[destinationTokenInfo.originChain],
593
+ originChain: chainInfoMap[originTokenInfo.originChain]
594
+ };
595
+ const data = await getAcrossQuote(inputData);
596
+ if (!data) {
597
+ throw new Error('Failed to fetch Across Bridge Data. Please try again later');
598
+ }
599
+ return getAcrossbridgeTransferProcessFromEvm(data.to);
581
600
  }
582
601
  }
583
602
  return getDefaultTransferProcess();
@@ -1,19 +1,20 @@
1
1
  import { CreateXcmExtrinsicProps } from '..';
2
2
  export declare function _isAcrossChainBridge(srcChain: string, destChain: string): boolean;
3
3
  export declare function _isAcrossTestnetBridge(srcChain: string): boolean;
4
- export declare const SpokePoolMapping: Record<number, {
5
- SpokePool: {
6
- address: string;
7
- blockNumber: number;
8
- };
9
- }>;
10
4
  export declare const AcrossErrorMsg: {
11
5
  AMOUNT_TOO_LOW: string;
12
6
  AMOUNT_TOO_HIGH: string;
13
7
  };
14
- interface AcrossQuote {
8
+ export interface AcrossQuote {
15
9
  outputAmount: string;
16
10
  rate: string;
17
11
  }
18
- export declare const getAcrossQuote: ({ destinationChain, destinationTokenInfo, originChain, originTokenInfo, recipient, sender, sendingValue }: CreateXcmExtrinsicProps) => Promise<AcrossQuote>;
12
+ interface XcmApiResponse {
13
+ sender: string;
14
+ to: string;
15
+ transferEncodedCall: string;
16
+ value: string;
17
+ metadata?: any;
18
+ }
19
+ export declare const getAcrossQuote: ({ destinationChain, destinationTokenInfo, originChain, originTokenInfo, recipient, sender, sendingValue }: CreateXcmExtrinsicProps) => Promise<XcmApiResponse>;
19
20
  export {};
@@ -15,176 +15,6 @@ export function _isAcrossChainBridge(srcChain, destChain) {
15
15
  export function _isAcrossTestnetBridge(srcChain) {
16
16
  return srcChain === 'base_sepolia' || srcChain === 'arbitrum_sepolia' || srcChain === COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA;
17
17
  }
18
- export const SpokePoolMapping = {
19
- 1: {
20
- SpokePool: {
21
- address: '0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5',
22
- blockNumber: 17117454
23
- }
24
- },
25
- 10: {
26
- SpokePool: {
27
- address: '0x6f26Bf09B1C792e3228e5467807a900A503c0281',
28
- blockNumber: 93903076
29
- }
30
- },
31
- 11155111: {
32
- SpokePool: {
33
- address: '0x5ef6C01E11889d86803e0B23e3cB3F9E9d97B662',
34
- blockNumber: 5288470
35
- }
36
- },
37
- 11155420: {
38
- SpokePool: {
39
- address: '0x4e8E101924eDE233C13e2D8622DC8aED2872d505',
40
- blockNumber: 7762656
41
- }
42
- },
43
- 1135: {
44
- SpokePool: {
45
- address: '0x9552a0a6624A23B848060AE5901659CDDa1f83f8',
46
- blockNumber: 2602337
47
- }
48
- },
49
- 130: {
50
- SpokePool: {
51
- address: '0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64',
52
- blockNumber: 7915488
53
- }
54
- },
55
- 137: {
56
- SpokePool: {
57
- address: '0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096',
58
- blockNumber: 41908657
59
- }
60
- },
61
- 168587773: {
62
- SpokePool: {
63
- address: '0x5545092553Cf5Bf786e87a87192E902D50D8f022',
64
- blockNumber: 7634204
65
- }
66
- },
67
- 1868: {
68
- SpokePool: {
69
- address: '0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96',
70
- blockNumber: 1709997
71
- }
72
- },
73
- 288: {
74
- SpokePool: {
75
- address: '0xBbc6009fEfFc27ce705322832Cb2068F8C1e0A58',
76
- blockNumber: 619993
77
- }
78
- },
79
- 324: {
80
- SpokePool: {
81
- address: '0xE0B015E54d54fc84a6cB9B666099c46adE9335FF',
82
- blockNumber: 10352565
83
- }
84
- },
85
- 34443: {
86
- SpokePool: {
87
- address: '0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96',
88
- blockNumber: 8043187
89
- }
90
- },
91
- 37111: {
92
- SpokePool: {
93
- address: '0x6A0a7f39530923911832Dd60667CE5da5449967B',
94
- blockNumber: 156275
95
- }
96
- },
97
- 41455: {
98
- SpokePool: {
99
- address: '0x13fDac9F9b4777705db45291bbFF3c972c6d1d97',
100
- blockNumber: 4240318
101
- }
102
- },
103
- 4202: {
104
- SpokePool: {
105
- address: '0xeF684C38F94F48775959ECf2012D7E864ffb9dd4',
106
- blockNumber: 7267988
107
- }
108
- },
109
- 42161: {
110
- SpokePool: {
111
- address: '0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A',
112
- blockNumber: 83868041
113
- }
114
- },
115
- 421614: {
116
- SpokePool: {
117
- address: '0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75',
118
- blockNumber: 12411026
119
- }
120
- },
121
- 480: {
122
- SpokePool: {
123
- address: '0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64',
124
- blockNumber: 4524742
125
- }
126
- },
127
- 534352: {
128
- SpokePool: {
129
- address: '0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96',
130
- blockNumber: 7489705
131
- }
132
- },
133
- 57073: {
134
- SpokePool: {
135
- address: '0xeF684C38F94F48775959ECf2012D7E864ffb9dd4',
136
- blockNumber: 1139240
137
- }
138
- },
139
- 59144: {
140
- SpokePool: {
141
- address: '0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75',
142
- blockNumber: 2721169
143
- }
144
- },
145
- 690: {
146
- SpokePool: {
147
- address: '0x13fDac9F9b4777705db45291bbFF3c972c6d1d97',
148
- blockNumber: 5512122
149
- }
150
- },
151
- 7777777: {
152
- SpokePool: {
153
- address: '0x13fDac9F9b4777705db45291bbFF3c972c6d1d97',
154
- blockNumber: 18382867
155
- }
156
- },
157
- 80002: {
158
- SpokePool: {
159
- address: '0xd08baaE74D6d2eAb1F3320B2E1a53eeb391ce8e5',
160
- blockNumber: 7529960
161
- }
162
- },
163
- 81457: {
164
- SpokePool: {
165
- address: '0x2D509190Ed0172ba588407D4c2df918F955Cc6E1',
166
- blockNumber: 5574280
167
- }
168
- },
169
- 8453: {
170
- SpokePool: {
171
- address: '0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64',
172
- blockNumber: 2164878
173
- }
174
- },
175
- 84532: {
176
- SpokePool: {
177
- address: '0x82B564983aE7274c86695917BBf8C99ECb6F0F8F',
178
- blockNumber: 6082004
179
- }
180
- },
181
- 919: {
182
- SpokePool: {
183
- address: '0xbd886FC0725Cc459b55BbFEb3E4278610331f83b',
184
- blockNumber: 13999465
185
- }
186
- }
187
- };
188
18
  export const AcrossErrorMsg = {
189
19
  AMOUNT_TOO_LOW: 'amount too low',
190
20
  AMOUNT_TOO_HIGH: 'amount too high'
@@ -209,11 +39,98 @@ export const getAcrossQuote = async ({
209
39
  try {
210
40
  var _subwalletApiSdk$xcmA;
211
41
  const data = await ((_subwalletApiSdk$xcmA = subwalletApiSdk.xcmApi) === null || _subwalletApiSdk$xcmA === void 0 ? void 0 : _subwalletApiSdk$xcmA.fetchXcmData(sender, originTokenInfo.slug, destinationTokenInfo.slug, recipient, sendingValue));
212
- if (!data || !data.metadata) {
213
- throw new Error('Failed to get AcrossBridge quote');
42
+ if (!data) {
43
+ throw new Error('Failed to fetch Across Bridge Data. Please try again later');
214
44
  }
215
- return data.metadata;
45
+ return data;
216
46
  } catch (error) {
217
47
  return Promise.reject(error);
218
48
  }
219
- };
49
+ };
50
+
51
+ // export const SpokePoolMapping: Record<number, { SpokePool: { address: string; blockNumber: number } }> = {
52
+ // 1: {
53
+ // SpokePool: { address: '0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5', blockNumber: 17117454 }
54
+ // },
55
+ // 10: {
56
+ // SpokePool: { address: '0x6f26Bf09B1C792e3228e5467807a900A503c0281', blockNumber: 93903076 }
57
+ // },
58
+ // 11155111: {
59
+ // SpokePool: { address: '0x5ef6C01E11889d86803e0B23e3cB3F9E9d97B662', blockNumber: 5288470 }
60
+ // },
61
+ // 11155420: {
62
+ // SpokePool: { address: '0x4e8E101924eDE233C13e2D8622DC8aED2872d505', blockNumber: 7762656 }
63
+ // },
64
+ // 1135: {
65
+ // SpokePool: { address: '0x9552a0a6624A23B848060AE5901659CDDa1f83f8', blockNumber: 2602337 }
66
+ // },
67
+ // 130: {
68
+ // SpokePool: { address: '0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64', blockNumber: 7915488 }
69
+ // },
70
+ // 137: {
71
+ // SpokePool: { address: '0x9295ee1d8C5b022Be115A2AD3c30C72E34e7F096', blockNumber: 41908657 }
72
+ // },
73
+ // 168587773: {
74
+ // SpokePool: { address: '0x5545092553Cf5Bf786e87a87192E902D50D8f022', blockNumber: 7634204 }
75
+ // },
76
+ // 1868: {
77
+ // SpokePool: { address: '0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96', blockNumber: 1709997 }
78
+ // },
79
+ // 288: {
80
+ // SpokePool: { address: '0xBbc6009fEfFc27ce705322832Cb2068F8C1e0A58', blockNumber: 619993 }
81
+ // },
82
+ // 324: {
83
+ // SpokePool: { address: '0xE0B015E54d54fc84a6cB9B666099c46adE9335FF', blockNumber: 10352565 }
84
+ // },
85
+ // 34443: {
86
+ // SpokePool: { address: '0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96', blockNumber: 8043187 }
87
+ // },
88
+ // 37111: {
89
+ // SpokePool: { address: '0x6A0a7f39530923911832Dd60667CE5da5449967B', blockNumber: 156275 }
90
+ // },
91
+ // 41455: {
92
+ // SpokePool: { address: '0x13fDac9F9b4777705db45291bbFF3c972c6d1d97', blockNumber: 4240318 }
93
+ // },
94
+ // 4202: {
95
+ // SpokePool: { address: '0xeF684C38F94F48775959ECf2012D7E864ffb9dd4', blockNumber: 7267988 }
96
+ // },
97
+ // 42161: {
98
+ // SpokePool: { address: '0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A', blockNumber: 83868041 }
99
+ // },
100
+ // 421614: {
101
+ // SpokePool: { address: '0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75', blockNumber: 12411026 }
102
+ // },
103
+ // 480: {
104
+ // SpokePool: { address: '0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64', blockNumber: 4524742 }
105
+ // },
106
+ // 534352: {
107
+ // SpokePool: { address: '0x3baD7AD0728f9917d1Bf08af5782dCbD516cDd96', blockNumber: 7489705 }
108
+ // },
109
+ // 57073: {
110
+ // SpokePool: { address: '0xeF684C38F94F48775959ECf2012D7E864ffb9dd4', blockNumber: 1139240 }
111
+ // },
112
+ // 59144: {
113
+ // SpokePool: { address: '0x7E63A5f1a8F0B4d0934B2f2327DAED3F6bb2ee75', blockNumber: 2721169 }
114
+ // },
115
+ // 690: {
116
+ // SpokePool: { address: '0x13fDac9F9b4777705db45291bbFF3c972c6d1d97', blockNumber: 5512122 }
117
+ // },
118
+ // 7777777: {
119
+ // SpokePool: { address: '0x13fDac9F9b4777705db45291bbFF3c972c6d1d97', blockNumber: 18382867 }
120
+ // },
121
+ // 80002: {
122
+ // SpokePool: { address: '0xd08baaE74D6d2eAb1F3320B2E1a53eeb391ce8e5', blockNumber: 7529960 }
123
+ // },
124
+ // 81457: {
125
+ // SpokePool: { address: '0x2D509190Ed0172ba588407D4c2df918F955Cc6E1', blockNumber: 5574280 }
126
+ // },
127
+ // 8453: {
128
+ // SpokePool: { address: '0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64', blockNumber: 2164878 }
129
+ // },
130
+ // 84532: {
131
+ // SpokePool: { address: '0x82B564983aE7274c86695917BBf8C99ECb6F0F8F', blockNumber: 6082004 }
132
+ // },
133
+ // 919: {
134
+ // SpokePool: { address: '0xbd886FC0725Cc459b55BbFEb3E4278610331f83b', blockNumber: 13999465 }
135
+ // }
136
+ // };
@@ -182,13 +182,14 @@ export const createAcrossBridgeExtrinsic = async ({
182
182
  const data = await ((_subwalletApiSdk$xcmA = subwalletApiSdk.xcmApi) === null || _subwalletApiSdk$xcmA === void 0 ? void 0 : _subwalletApiSdk$xcmA.fetchXcmData(sender, originTokenInfo.slug, destinationTokenInfo.slug, recipient, sendingValue));
183
183
  const _feeCustom = feeCustom;
184
184
  const feeCombine = combineEthFee(feeInfo, feeOption, _feeCustom);
185
-
186
- // todo: validate data before sending
185
+ if (!data) {
186
+ throw new Error('Failed to fetch Across Bridge Data. Please try again later');
187
+ }
187
188
  const transactionConfig = {
188
- from: data === null || data === void 0 ? void 0 : data.sender,
189
- to: data === null || data === void 0 ? void 0 : data.to,
190
- value: data === null || data === void 0 ? void 0 : data.value,
191
- data: data === null || data === void 0 ? void 0 : data.transferEncodedCall,
189
+ from: data.sender,
190
+ to: data.to,
191
+ value: data.value,
192
+ data: data.transferEncodedCall,
192
193
  ...feeCombine
193
194
  };
194
195
  const gasLimit = await evmApi.api.eth.estimateGas(transactionConfig).catch(() => 200000);
@@ -1,4 +1,4 @@
1
- import { SWTransaction } from '@subwallet/extension-base/services/transaction-service/types';
1
+ import { SWTransactionBase } from '@subwallet/extension-base/services/transaction-service/types';
2
2
  import { CurrentAccountInfo } from '@subwallet/extension-base/types';
3
3
  export interface EventRegistry {
4
4
  'general.sleep': [boolean];
@@ -27,13 +27,13 @@ export interface EventRegistry {
27
27
  'asset.ready': [boolean];
28
28
  'asset.online.ready': [boolean];
29
29
  'asset.updateState': [string];
30
- 'transaction.done': [SWTransaction];
31
- 'transaction.failed': [SWTransaction | undefined];
32
- 'transaction.timeout': [SWTransaction | undefined];
30
+ 'transaction.done': [SWTransactionBase];
31
+ 'transaction.failed': [SWTransactionBase | undefined];
32
+ 'transaction.timeout': [SWTransactionBase | undefined];
33
33
  'transaction.submitStaking': [string];
34
- 'transaction.transferNft': [SWTransaction | undefined];
34
+ 'transaction.transferNft': [SWTransactionBase | undefined];
35
35
  'mantaPay.initSync': [string | undefined];
36
- 'mantaPay.submitTransaction': [SWTransaction | undefined];
36
+ 'mantaPay.submitTransaction': [SWTransactionBase | undefined];
37
37
  'mantaPay.enable': [string];
38
38
  'migration.done': [boolean];
39
39
  'campaign.ready': [boolean];
@@ -1,4 +1,4 @@
1
1
  import { CurrencyType, ExchangeRateJSON, HistoryTokenPriceJSON, PriceChartTimeframe, PriceJson } from '@subwallet/extension-base/background/KoniTypes';
2
2
  export declare const getExchangeRateMap: () => Promise<Record<CurrencyType, ExchangeRateJSON>>;
3
- export declare const getPriceMap: (priceIds: Set<string>, currency?: CurrencyType) => Promise<Omit<PriceJson, 'exchangeRateMap'>>;
3
+ export declare const getPriceMap: (priceIds: Set<string>, currency?: CurrencyType, skipDerivativePrice?: boolean) => Promise<Omit<PriceJson, 'exchangeRateMap'>>;
4
4
  export declare const getHistoryPrice: (priceId: string, type: PriceChartTimeframe) => Promise<HistoryTokenPriceJSON>;
@@ -51,29 +51,33 @@ const fetchDerivativeTokenSlugs = async () => {
51
51
  return new Set(DERIVATIVE_TOKEN_SLUG_LIST);
52
52
  }
53
53
  };
54
- export const getPriceMap = async (priceIds, currency = 'USD') => {
54
+ export const getPriceMap = async (priceIds, currency = 'USD', skipDerivativePrice) => {
55
55
  const idStr = Array.from(priceIds).join(',');
56
56
  let response;
57
57
  try {
58
58
  var _response3, _response5;
59
59
  const derivativePriceMap = {};
60
+ const lastUpdatedMap = {};
60
61
  let derivativeApiError = false;
61
- try {
62
- const responseDerivativeTokens = await fetch(`${apiCacheDomain}/api/price/derivative-get`);
63
- const generateDerivativePriceRaw = (await (responseDerivativeTokens === null || responseDerivativeTokens === void 0 ? void 0 : responseDerivativeTokens.json())) || [];
64
- if (Array.isArray(generateDerivativePriceRaw)) {
65
- generateDerivativePriceRaw.forEach(token => {
66
- if (token.id) {
67
- derivativePriceMap[token.id] = token.derived_price;
68
- }
69
- });
70
- } else {
71
- console.warn('Invalid data from derivative API:', generateDerivativePriceRaw);
62
+ if (!skipDerivativePrice) {
63
+ try {
64
+ const responseDerivativeTokens = await fetch(`${apiCacheDomain}/api/price/derivative-get`);
65
+ const generateDerivativePriceRaw = (await (responseDerivativeTokens === null || responseDerivativeTokens === void 0 ? void 0 : responseDerivativeTokens.json())) || [];
66
+ if (Array.isArray(generateDerivativePriceRaw)) {
67
+ generateDerivativePriceRaw.forEach(token => {
68
+ if (token.id) {
69
+ derivativePriceMap[token.id] = token.derived_price;
70
+ lastUpdatedMap[token.id] = new Date(token.cached_at || Date.now());
71
+ }
72
+ });
73
+ } else {
74
+ console.warn('Invalid data from derivative API:', generateDerivativePriceRaw);
75
+ derivativeApiError = true;
76
+ }
77
+ } catch (error) {
78
+ console.error('Error fetching derivative API:', error);
72
79
  derivativeApiError = true;
73
80
  }
74
- } catch (error) {
75
- console.error('Error fetching derivative API:', error);
76
- derivativeApiError = true;
77
81
  }
78
82
  if (!useBackupApi) {
79
83
  try {
@@ -102,10 +106,11 @@ export const getPriceMap = async (priceIds, currency = 'USD') => {
102
106
  const currencyData = staticData[StaticKey.CURRENCY_SYMBOL][currency || DEFAULT_CURRENCY];
103
107
  const priceMap = {};
104
108
  const price24hMap = {};
105
- const lastUpdatedMap = {};
109
+ const priceCoinGeckoSupported = [];
106
110
  responseDataPrice.forEach(val => {
107
111
  const currentPrice = val.current_price || 0;
108
112
  const price24h = currentPrice - (val.price_change_24h || 0);
113
+ priceCoinGeckoSupported.push(val.id);
109
114
  priceMap[val.id] = currentPrice;
110
115
  price24hMap[val.id] = price24h;
111
116
  lastUpdatedMap[val.id] = new Date(val.last_updated || val.last_updated_at || Date.now());
@@ -127,6 +132,7 @@ export const getPriceMap = async (priceIds, currency = 'USD') => {
127
132
  currencyData,
128
133
  priceMap,
129
134
  price24hMap,
135
+ priceCoinGeckoSupported,
130
136
  lastUpdatedMap
131
137
  };
132
138
  } catch (e) {