@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.
- package/background/KoniTypes.d.ts +10 -0
- package/cjs/core/logic-validation/request.js +1 -1
- package/cjs/koni/background/handlers/Extension.js +32 -4
- package/cjs/koni/background/utils.js +64 -29
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/process.js +1 -5
- package/cjs/services/balance-service/index.js +20 -1
- package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +91 -175
- package/cjs/services/balance-service/transfer/xcm/index.js +7 -6
- package/cjs/services/price-service/coingecko.js +22 -15
- package/cjs/services/price-service/index.js +12 -0
- package/cjs/services/request-service/handler/EvmRequestHandler.js +4 -1
- package/cjs/services/swap-service/handler/kyber-handler.js +355 -0
- package/cjs/services/swap-service/handler/uniswap-handler.js +223 -41
- package/cjs/services/swap-service/index.js +34 -2
- package/cjs/services/swap-service/utils.js +4 -1
- package/cjs/services/transaction-service/index.js +297 -52
- package/cjs/types/swap/index.js +2 -1
- package/core/logic-validation/request.js +1 -1
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +32 -4
- package/koni/background/utils.d.ts +3 -5
- package/koni/background/utils.js +64 -29
- package/package.json +11 -6
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/process.d.ts +2 -2
- package/services/balance-service/helpers/process.js +1 -5
- package/services/balance-service/index.js +21 -2
- package/services/balance-service/transfer/xcm/acrossBridge/index.d.ts +9 -8
- package/services/balance-service/transfer/xcm/acrossBridge/index.js +91 -174
- package/services/balance-service/transfer/xcm/index.js +7 -6
- package/services/event-service/types.d.ts +6 -6
- package/services/price-service/coingecko.d.ts +1 -1
- package/services/price-service/coingecko.js +22 -16
- package/services/price-service/index.d.ts +1 -0
- package/services/price-service/index.js +12 -0
- package/services/request-service/handler/EvmRequestHandler.js +4 -1
- package/services/swap-service/handler/kyber-handler.d.ts +28 -0
- package/services/swap-service/handler/kyber-handler.js +346 -0
- package/services/swap-service/handler/uniswap-handler.d.ts +48 -0
- package/services/swap-service/handler/uniswap-handler.js +224 -42
- package/services/swap-service/index.js +34 -2
- package/services/swap-service/utils.js +4 -1
- package/services/transaction-service/helpers/index.d.ts +5 -5
- package/services/transaction-service/index.d.ts +10 -5
- package/services/transaction-service/index.js +279 -36
- package/services/transaction-service/types.d.ts +23 -10
- package/types/swap/index.d.ts +4 -1
- package/types/swap/index.js +2 -1
package/koni/background/utils.js
CHANGED
|
@@ -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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
|
53
|
-
if (!
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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.
|
|
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.
|
|
2709
|
-
"@subwallet/extension-chains": "^1.3.
|
|
2710
|
-
"@subwallet/extension-dapp": "^1.3.
|
|
2711
|
-
"@subwallet/extension-inject": "^1.3.
|
|
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.
|
|
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.
|
|
10
|
+
version: '1.3.36-0'
|
|
11
11
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ChainAsset
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
213
|
-
throw new Error('Failed to
|
|
42
|
+
if (!data) {
|
|
43
|
+
throw new Error('Failed to fetch Across Bridge Data. Please try again later');
|
|
214
44
|
}
|
|
215
|
-
return data
|
|
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
|
-
|
|
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
|
|
189
|
-
to: data
|
|
190
|
-
value: data
|
|
191
|
-
data: data
|
|
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 {
|
|
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': [
|
|
31
|
-
'transaction.failed': [
|
|
32
|
-
'transaction.timeout': [
|
|
30
|
+
'transaction.done': [SWTransactionBase];
|
|
31
|
+
'transaction.failed': [SWTransactionBase | undefined];
|
|
32
|
+
'transaction.timeout': [SWTransactionBase | undefined];
|
|
33
33
|
'transaction.submitStaking': [string];
|
|
34
|
-
'transaction.transferNft': [
|
|
34
|
+
'transaction.transferNft': [SWTransactionBase | undefined];
|
|
35
35
|
'mantaPay.initSync': [string | undefined];
|
|
36
|
-
'mantaPay.submitTransaction': [
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
|
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) {
|