@subwallet/extension-base 1.3.66-0 → 1.3.68-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 +12 -1
- package/cjs/constants/environment.js +1 -3
- package/cjs/constants/index.js +4 -1
- package/cjs/core/substrate/system-pallet.js +4 -0
- package/cjs/core/substrate/xcm-parser.js +0 -176
- package/cjs/koni/api/nft/rari/index.js +1 -1
- package/cjs/koni/background/cron.js +16 -0
- package/cjs/koni/background/handlers/Extension.js +166 -90
- package/cjs/koni/background/handlers/State.js +25 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/group.js +31 -2
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +51 -13
- package/cjs/services/balance-service/helpers/subscribe/substrate/utils.js +69 -0
- package/cjs/services/balance-service/index.js +36 -11
- package/cjs/services/balance-service/transfer/smart-contract.js +56 -23
- package/cjs/services/balance-service/transfer/xcm/index.js +30 -44
- package/cjs/services/balance-service/transfer/xcm/utils.js +53 -18
- package/cjs/services/chain-service/constants.js +8 -46
- package/cjs/services/chain-service/handler/EvmChainHandler.js +6 -3
- package/cjs/services/earning-service/handlers/base.js +7 -1
- package/cjs/services/nft-service/index.js +173 -0
- package/cjs/services/swap-service/handler/base-handler.js +18 -21
- package/cjs/services/transaction-service/index.js +1 -1
- package/cjs/types/balance/index.js +26 -1
- package/cjs/utils/fee/transfer.js +5 -2
- package/cjs/utils/index.js +25 -2
- package/cjs/utils/setup-api-sdk.js +0 -5
- package/constants/environment.d.ts +0 -1
- package/constants/environment.js +0 -1
- package/constants/index.d.ts +1 -0
- package/constants/index.js +1 -0
- package/core/substrate/system-pallet.d.ts +1 -0
- package/core/substrate/system-pallet.js +3 -0
- package/core/substrate/types.d.ts +14 -0
- package/core/substrate/xcm-parser.d.ts +1 -49
- package/core/substrate/xcm-parser.js +1 -173
- package/koni/api/nft/rari/index.js +1 -1
- package/koni/background/cron.d.ts +1 -0
- package/koni/background/cron.js +17 -1
- package/koni/background/handlers/Extension.d.ts +3 -0
- package/koni/background/handlers/Extension.js +88 -14
- package/koni/background/handlers/State.d.ts +4 -0
- package/koni/background/handlers/State.js +25 -0
- package/package.json +16 -21
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/group.js +31 -2
- package/services/balance-service/helpers/subscribe/substrate/index.js +51 -13
- package/services/balance-service/helpers/subscribe/substrate/utils.d.ts +7 -0
- package/services/balance-service/helpers/subscribe/substrate/utils.js +58 -0
- package/services/balance-service/index.d.ts +4 -2
- package/services/balance-service/index.js +26 -6
- package/services/balance-service/transfer/smart-contract.d.ts +4 -0
- package/services/balance-service/transfer/smart-contract.js +54 -23
- package/services/balance-service/transfer/xcm/index.d.ts +2 -2
- package/services/balance-service/transfer/xcm/index.js +18 -32
- package/services/balance-service/transfer/xcm/utils.d.ts +1 -2
- package/services/balance-service/transfer/xcm/utils.js +51 -15
- package/services/chain-service/constants.d.ts +5 -24
- package/services/chain-service/constants.js +6 -35
- package/services/chain-service/handler/EvmChainHandler.js +6 -3
- package/services/earning-service/handlers/base.js +7 -1
- package/services/nft-service/index.d.ts +9 -0
- package/services/nft-service/index.js +165 -0
- package/services/swap-service/handler/base-handler.d.ts +0 -1
- package/services/swap-service/handler/base-handler.js +19 -22
- package/services/transaction-service/index.js +1 -1
- package/services/transaction-service/types.d.ts +2 -1
- package/types/balance/index.d.ts +14 -0
- package/types/balance/index.js +21 -1
- package/utils/fee/transfer.js +6 -3
- package/utils/index.js +25 -2
- package/utils/setup-api-sdk.js +1 -6
- package/cjs/services/balance-service/transfer/xcm/polkadotXcm.js +0 -30
- package/cjs/services/balance-service/transfer/xcm/xTokens.js +0 -32
- package/cjs/services/balance-service/transfer/xcm/xcmPallet.js +0 -23
- package/services/balance-service/transfer/xcm/polkadotXcm.d.ts +0 -3
- package/services/balance-service/transfer/xcm/polkadotXcm.js +0 -24
- package/services/balance-service/transfer/xcm/xTokens.d.ts +0 -3
- package/services/balance-service/transfer/xcm/xTokens.js +0 -26
- package/services/balance-service/transfer/xcm/xcmPallet.d.ts +0 -3
- package/services/balance-service/transfer/xcm/xcmPallet.js +0 -17
|
@@ -4,18 +4,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.getXcmOriginFee = exports.dryRunXcmExtrinsicV2 = exports.createXcmExtrinsicV2 = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = exports.createAcrossBridgeExtrinsic = void 0;
|
|
8
8
|
var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
|
|
9
9
|
var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
|
|
10
|
-
var _polkadotXcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polkadotXcm");
|
|
11
10
|
var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
|
|
12
11
|
var _snowBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/snowBridge");
|
|
13
12
|
var _utils = require("@subwallet/extension-base/services/balance-service/transfer/xcm/utils");
|
|
14
|
-
var
|
|
15
|
-
var _xTokens = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xTokens");
|
|
16
|
-
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
17
|
-
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
18
|
-
var _utils3 = require("@subwallet/extension-base/utils");
|
|
13
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
19
14
|
var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
|
|
20
15
|
var _posBridge = require("./posBridge");
|
|
21
16
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
@@ -46,34 +41,8 @@ const createSnowBridgeExtrinsic = async _ref => {
|
|
|
46
41
|
}
|
|
47
42
|
return (0, _snowBridge.getSnowBridgeEvmTransfer)(originTokenInfo, originChain, destinationChain, sender, recipient, sendingValue, evmApi, feeInfo, feeCustom, feeOption);
|
|
48
43
|
};
|
|
49
|
-
|
|
50
|
-
// deprecated
|
|
51
44
|
exports.createSnowBridgeExtrinsic = createSnowBridgeExtrinsic;
|
|
52
|
-
const
|
|
53
|
-
let {
|
|
54
|
-
destinationChain,
|
|
55
|
-
originChain,
|
|
56
|
-
originTokenInfo,
|
|
57
|
-
recipient,
|
|
58
|
-
sendingValue,
|
|
59
|
-
substrateApi
|
|
60
|
-
} = _ref2;
|
|
61
|
-
if (!substrateApi) {
|
|
62
|
-
throw Error('Substrate API is not available');
|
|
63
|
-
}
|
|
64
|
-
const chainApi = await substrateApi.isReady;
|
|
65
|
-
const api = chainApi.api;
|
|
66
|
-
const polkadotXcmSpecialCases = _constants._XCM_CHAIN_GROUP.polkadotXcmSpecialCases.includes(originChain.slug) && (0, _utils2._isNativeToken)(originTokenInfo);
|
|
67
|
-
if (_constants._XCM_CHAIN_GROUP.polkadotXcm.includes(originTokenInfo.originChain) || polkadotXcmSpecialCases) {
|
|
68
|
-
return (0, _polkadotXcm.getExtrinsicByPolkadotXcmPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
|
|
69
|
-
}
|
|
70
|
-
if (_constants._XCM_CHAIN_GROUP.xcmPallet.includes(originTokenInfo.originChain)) {
|
|
71
|
-
return (0, _xcmPallet.getExtrinsicByXcmPalletPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
|
|
72
|
-
}
|
|
73
|
-
return (0, _xTokens.getExtrinsicByXtokensPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
|
|
74
|
-
};
|
|
75
|
-
exports.createXcmExtrinsic = createXcmExtrinsic;
|
|
76
|
-
const createAvailBridgeTxFromEth = _ref3 => {
|
|
45
|
+
const createAvailBridgeTxFromEth = _ref2 => {
|
|
77
46
|
let {
|
|
78
47
|
evmApi,
|
|
79
48
|
feeCustom,
|
|
@@ -83,7 +52,7 @@ const createAvailBridgeTxFromEth = _ref3 => {
|
|
|
83
52
|
recipient,
|
|
84
53
|
sender,
|
|
85
54
|
sendingValue
|
|
86
|
-
} =
|
|
55
|
+
} = _ref2;
|
|
87
56
|
if (!evmApi) {
|
|
88
57
|
throw Error('Evm API is not available');
|
|
89
58
|
}
|
|
@@ -93,19 +62,19 @@ const createAvailBridgeTxFromEth = _ref3 => {
|
|
|
93
62
|
return (0, _availBridge.getAvailBridgeTxFromEth)(originChain, sender, recipient, sendingValue, evmApi, feeInfo, feeCustom, feeOption);
|
|
94
63
|
};
|
|
95
64
|
exports.createAvailBridgeTxFromEth = createAvailBridgeTxFromEth;
|
|
96
|
-
const createAvailBridgeExtrinsicFromAvail = async
|
|
65
|
+
const createAvailBridgeExtrinsicFromAvail = async _ref3 => {
|
|
97
66
|
let {
|
|
98
67
|
recipient,
|
|
99
68
|
sendingValue,
|
|
100
69
|
substrateApi
|
|
101
|
-
} =
|
|
70
|
+
} = _ref3;
|
|
102
71
|
if (!substrateApi) {
|
|
103
72
|
throw Error('Substrate API is not available');
|
|
104
73
|
}
|
|
105
74
|
return await (0, _availBridge.getAvailBridgeExtrinsicFromAvail)(recipient, sendingValue, substrateApi);
|
|
106
75
|
};
|
|
107
76
|
exports.createAvailBridgeExtrinsicFromAvail = createAvailBridgeExtrinsicFromAvail;
|
|
108
|
-
const createPolygonBridgeExtrinsic = async
|
|
77
|
+
const createPolygonBridgeExtrinsic = async _ref4 => {
|
|
109
78
|
let {
|
|
110
79
|
destinationChain,
|
|
111
80
|
evmApi,
|
|
@@ -117,7 +86,7 @@ const createPolygonBridgeExtrinsic = async _ref5 => {
|
|
|
117
86
|
recipient,
|
|
118
87
|
sender,
|
|
119
88
|
sendingValue
|
|
120
|
-
} =
|
|
89
|
+
} = _ref4;
|
|
121
90
|
const isPolygonBridgeXcm = (0, _xcmParser._isPolygonBridgeXcm)(originChain, destinationChain);
|
|
122
91
|
const isValidBridge = isPolygonBridgeXcm || (0, _xcmParser._isPosBridgeXcm)(originChain, destinationChain);
|
|
123
92
|
if (!isValidBridge) {
|
|
@@ -143,9 +112,10 @@ const createXcmExtrinsicV2 = async request => {
|
|
|
143
112
|
}
|
|
144
113
|
};
|
|
145
114
|
exports.createXcmExtrinsicV2 = createXcmExtrinsicV2;
|
|
146
|
-
const dryRunXcmExtrinsicV2 = async request
|
|
115
|
+
const dryRunXcmExtrinsicV2 = async function (request) {
|
|
116
|
+
let isPreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
147
117
|
try {
|
|
148
|
-
const dryRunResult = await (0, _utils.dryRunXcm)(request);
|
|
118
|
+
const dryRunResult = isPreview ? await (0, _utils.dryRunPreviewXcm)(request) : await (0, _utils.dryRunXcm)(request);
|
|
149
119
|
const originDryRunRs = dryRunResult.origin;
|
|
150
120
|
if (originDryRunRs.success) {
|
|
151
121
|
const {
|
|
@@ -176,7 +146,23 @@ const dryRunXcmExtrinsicV2 = async request => {
|
|
|
176
146
|
}
|
|
177
147
|
};
|
|
178
148
|
exports.dryRunXcmExtrinsicV2 = dryRunXcmExtrinsicV2;
|
|
179
|
-
const
|
|
149
|
+
const getXcmOriginFee = async request => {
|
|
150
|
+
try {
|
|
151
|
+
const xcmFeeInfo = await (0, _utils.estimateXcmFee)({
|
|
152
|
+
fromChainInfo: request.originChain,
|
|
153
|
+
fromTokenInfo: request.originTokenInfo,
|
|
154
|
+
toChainInfo: request.destinationChain,
|
|
155
|
+
recipient: request.recipient,
|
|
156
|
+
sender: request.sender,
|
|
157
|
+
value: request.sendingValue
|
|
158
|
+
});
|
|
159
|
+
return xcmFeeInfo === null || xcmFeeInfo === void 0 ? void 0 : xcmFeeInfo.origin.fee;
|
|
160
|
+
} catch (e) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
exports.getXcmOriginFee = getXcmOriginFee;
|
|
165
|
+
const createAcrossBridgeExtrinsic = async _ref5 => {
|
|
180
166
|
let {
|
|
181
167
|
destinationChain,
|
|
182
168
|
destinationTokenInfo,
|
|
@@ -189,7 +175,7 @@ const createAcrossBridgeExtrinsic = async _ref6 => {
|
|
|
189
175
|
recipient,
|
|
190
176
|
sender,
|
|
191
177
|
sendingValue
|
|
192
|
-
} =
|
|
178
|
+
} = _ref5;
|
|
193
179
|
const isAcrossBridgeXcm = (0, _xcmParser._isAcrossBridgeXcm)(originChain, destinationChain);
|
|
194
180
|
if (!isAcrossBridgeXcm) {
|
|
195
181
|
throw new Error('This is not a valid AcrossBridge transfer');
|
|
@@ -209,7 +195,7 @@ const createAcrossBridgeExtrinsic = async _ref6 => {
|
|
|
209
195
|
value: sendingValue
|
|
210
196
|
});
|
|
211
197
|
const _feeCustom = feeCustom;
|
|
212
|
-
const feeCombine = (0,
|
|
198
|
+
const feeCombine = (0, _utils2.combineEthFee)(feeInfo, feeOption, _feeCustom);
|
|
213
199
|
if (!data) {
|
|
214
200
|
throw new Error('Failed to fetch Across Bridge Data. Please try again later');
|
|
215
201
|
}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
|
-
exports.STABLE_XCM_VERSION = void 0;
|
|
7
7
|
exports.buildXcm = buildXcm;
|
|
8
|
+
exports.dryRunPreviewXcm = dryRunPreviewXcm;
|
|
8
9
|
exports.dryRunXcm = dryRunXcm;
|
|
9
10
|
exports.estimateXcmFee = estimateXcmFee;
|
|
10
11
|
exports.isChainNotSupportDryRun = isChainNotSupportDryRun;
|
|
11
12
|
exports.isChainNotSupportPolkadotApi = isChainNotSupportPolkadotApi;
|
|
12
|
-
exports.isUseTeleportProtocol = isUseTeleportProtocol;
|
|
13
13
|
var _paraspellChainMap = require("@subwallet/extension-base/constants/paraspell-chain-map");
|
|
14
14
|
var _environment = require("@subwallet/extension-base/types/environment");
|
|
15
15
|
var _utils = require("@subwallet/extension-base/utils");
|
|
16
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
16
17
|
var _util = require("@polkadot/util");
|
|
17
18
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
18
19
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -20,8 +21,9 @@ var _util = require("@polkadot/util");
|
|
|
20
21
|
const version = '/v4';
|
|
21
22
|
const paraSpellApi = {
|
|
22
23
|
buildXcm: `${version}/x-transfer`,
|
|
24
|
+
feeXcm: `${version}/xcm-fee`,
|
|
23
25
|
dryRunXcm: `${version}/dry-run`,
|
|
24
|
-
|
|
26
|
+
dryRunPreviewXcm: `${version}/dry-run-preview`
|
|
25
27
|
};
|
|
26
28
|
function txHexToSubmittableExtrinsic(api, hex) {
|
|
27
29
|
try {
|
|
@@ -163,6 +165,51 @@ async function dryRunXcm(request) {
|
|
|
163
165
|
}
|
|
164
166
|
return await response.json();
|
|
165
167
|
}
|
|
168
|
+
async function dryRunPreviewXcm(request) {
|
|
169
|
+
var _originTokenInfo$meta3;
|
|
170
|
+
const {
|
|
171
|
+
destinationChain,
|
|
172
|
+
originChain,
|
|
173
|
+
originTokenInfo,
|
|
174
|
+
recipient,
|
|
175
|
+
sender,
|
|
176
|
+
sendingValue
|
|
177
|
+
} = request;
|
|
178
|
+
const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
|
|
179
|
+
const paraSpellIdentifyV4 = (_originTokenInfo$meta3 = originTokenInfo.metadata) === null || _originTokenInfo$meta3 === void 0 ? void 0 : _originTokenInfo$meta3.paraSpellIdentifyV4;
|
|
180
|
+
if (!paraSpellIdentifyV4) {
|
|
181
|
+
throw new Error('Token is not support XCM at this time');
|
|
182
|
+
}
|
|
183
|
+
const bodyData = {
|
|
184
|
+
senderAddress: sender,
|
|
185
|
+
address: recipient,
|
|
186
|
+
from: paraSpellChainMap[originChain.slug],
|
|
187
|
+
to: paraSpellChainMap[destinationChain.slug],
|
|
188
|
+
currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
|
|
189
|
+
options: {
|
|
190
|
+
abstractDecimals: false,
|
|
191
|
+
mintFeeAssets: true
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunPreviewXcm, {
|
|
195
|
+
method: 'POST',
|
|
196
|
+
body: JSON.stringify(bodyData),
|
|
197
|
+
headers: {
|
|
198
|
+
'Content-Type': 'application/json',
|
|
199
|
+
Accept: 'application/json'
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
if (!response.ok) {
|
|
203
|
+
const error = await response.json();
|
|
204
|
+
return {
|
|
205
|
+
origin: {
|
|
206
|
+
success: false,
|
|
207
|
+
failureReason: error.message
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
return await response.json();
|
|
212
|
+
}
|
|
166
213
|
async function estimateXcmFee(request) {
|
|
167
214
|
var _fromTokenInfo$metada;
|
|
168
215
|
const {
|
|
@@ -175,6 +222,8 @@ async function estimateXcmFee(request) {
|
|
|
175
222
|
} = request;
|
|
176
223
|
const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
|
|
177
224
|
const paraSpellIdentifyV4 = (_fromTokenInfo$metada = fromTokenInfo.metadata) === null || _fromTokenInfo$metada === void 0 ? void 0 : _fromTokenInfo$metada.paraSpellIdentifyV4;
|
|
225
|
+
const requestValue = (0, _bignumber.default)(value).gt(0) ? value : '1'; // avoid bug in-case estimate fee sendingValue <= 0;
|
|
226
|
+
|
|
178
227
|
if (!paraSpellIdentifyV4) {
|
|
179
228
|
console.error('Lack of paraspell metadata');
|
|
180
229
|
return undefined;
|
|
@@ -184,7 +233,7 @@ async function estimateXcmFee(request) {
|
|
|
184
233
|
address: recipient,
|
|
185
234
|
from: paraSpellChainMap[fromChainInfo.slug],
|
|
186
235
|
to: paraSpellChainMap[toChainInfo.slug],
|
|
187
|
-
currency: createParaSpellCurrency(paraSpellIdentifyV4,
|
|
236
|
+
currency: createParaSpellCurrency(paraSpellIdentifyV4, requestValue),
|
|
188
237
|
options: {
|
|
189
238
|
abstractDecimals: false
|
|
190
239
|
}
|
|
@@ -204,8 +253,6 @@ async function estimateXcmFee(request) {
|
|
|
204
253
|
return await response.json();
|
|
205
254
|
}
|
|
206
255
|
function createParaSpellCurrency(paraSpellIdentifyV4, amount) {
|
|
207
|
-
// todo: handle complex conditions for asset has same symbol in a chain: Id, Multi-location, ...
|
|
208
|
-
// todo: or update all asset to use multi-location
|
|
209
256
|
return {
|
|
210
257
|
...paraSpellIdentifyV4,
|
|
211
258
|
amount
|
|
@@ -220,16 +267,4 @@ function isChainNotSupportDryRun(str) {
|
|
|
220
267
|
const regex = /(?=.*DryRunApi)(?=.*not available).*/i; // Example: DryRunApi is not available on node Acala
|
|
221
268
|
|
|
222
269
|
return regex.test(str);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// todo: remove
|
|
226
|
-
const STABLE_XCM_VERSION = 3;
|
|
227
|
-
|
|
228
|
-
// todo: remove
|
|
229
|
-
exports.STABLE_XCM_VERSION = STABLE_XCM_VERSION;
|
|
230
|
-
function isUseTeleportProtocol(originChainInfo, destChainInfo, tokenSlug) {
|
|
231
|
-
const relayChainToSystemChain = ['polkadot'].includes(originChainInfo.slug) && ['statemint'].includes(destChainInfo.slug) || ['kusama'].includes(originChainInfo.slug) && ['statemine'].includes(destChainInfo.slug) || ['rococo'].includes(originChainInfo.slug) && ['rococo_assethub'].includes(destChainInfo.slug) || ['westend'].includes(originChainInfo.slug) && ['westend_assethub'].includes(destChainInfo.slug);
|
|
232
|
-
const systemChainToRelayChain = ['polkadot'].includes(destChainInfo.slug) && ['statemint'].includes(originChainInfo.slug) || ['kusama'].includes(destChainInfo.slug) && ['statemine'].includes(originChainInfo.slug) || ['rococo'].includes(destChainInfo.slug) && ['rococo_assethub'].includes(originChainInfo.slug) || ['westend'].includes(destChainInfo.slug) && ['westend_assethub'].includes(originChainInfo.slug);
|
|
233
|
-
const isXcmMythos = originChainInfo.slug === 'mythos' && destChainInfo.slug === 'statemint' && tokenSlug === 'mythos-NATIVE-MYTH' || originChainInfo.slug === 'statemint' && destChainInfo.slug === 'mythos' && tokenSlug === 'statemint-LOCAL-MYTH';
|
|
234
|
-
return relayChainToSystemChain || systemChainToRelayChain || isXcmMythos;
|
|
235
270
|
}
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports._ZK_ASSET_PREFIX = exports.
|
|
6
|
+
exports._ZK_ASSET_PREFIX = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._BTC_SERVICE_TOKEN = exports._BITCOIN_TESTNET_NAME = exports._BITCOIN_TESTNET_CHAIN_SLUG = exports._BITCOIN_NAME = exports._BITCOIN_CHAIN_SLUG = exports._BALANCE_LOCKED_ID_GROUP = exports._BALANCE_CHAIN_GROUP = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
|
|
7
7
|
var _chainList = require("@subwallet/chain-list");
|
|
8
|
-
var _types = require("@subwallet/chain-list/types");
|
|
9
8
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
9
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
11
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -14,8 +13,6 @@ const API_AUTO_CONNECT_MS = 3000;
|
|
|
14
13
|
exports.API_AUTO_CONNECT_MS = API_AUTO_CONNECT_MS;
|
|
15
14
|
const API_CONNECT_TIMEOUT = 30000;
|
|
16
15
|
exports.API_CONNECT_TIMEOUT = API_CONNECT_TIMEOUT;
|
|
17
|
-
const API_MAX_RETRY = 2;
|
|
18
|
-
exports.API_MAX_RETRY = API_MAX_RETRY;
|
|
19
16
|
const _API_OPTIONS_CHAIN_GROUP = {
|
|
20
17
|
acala: ['acala', 'karura', 'origintrail', 'kintsugi'],
|
|
21
18
|
turing: ['turingStaging', 'turing'],
|
|
@@ -47,14 +44,16 @@ const _BALANCE_CHAIN_GROUP = {
|
|
|
47
44
|
centrifuge: ['centrifuge'],
|
|
48
45
|
supportBridged: ['rococo_assethub', 'statemint', 'statemine', 'polimec'],
|
|
49
46
|
bittensor: ['bittensor', 'bittensor_testnet'],
|
|
50
|
-
moonbeam: ['moonbeam', 'moonriver', 'moonbase']
|
|
47
|
+
moonbeam: ['moonbeam', 'moonriver', 'moonbase'],
|
|
48
|
+
notSupportGetBalanceByType: ['vara_network', 'vara_testnet', 'availTuringTest', 'avail_mainnet']
|
|
51
49
|
};
|
|
52
50
|
exports._BALANCE_CHAIN_GROUP = _BALANCE_CHAIN_GROUP;
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
const _BALANCE_LOCKED_ID_GROUP = {
|
|
52
|
+
staking: ['staking', 'delegatedStaking', 'pooledStaking', 'stkngdel', 'stk_stks', 'dappStaking', 'parachainStaking', 'appstakeappstake', 'collatorStaking'],
|
|
53
|
+
gov: ['pyconvot'],
|
|
54
|
+
democracy: ['democrac']
|
|
56
55
|
};
|
|
57
|
-
exports.
|
|
56
|
+
exports._BALANCE_LOCKED_ID_GROUP = _BALANCE_LOCKED_ID_GROUP;
|
|
58
57
|
const _NFT_CHAIN_GROUP = {
|
|
59
58
|
acala: ['acala'],
|
|
60
59
|
karura: ['karura'],
|
|
@@ -291,13 +290,10 @@ const _KNOWN_CHAIN_INFLATION_PARAMS = {
|
|
|
291
290
|
|
|
292
291
|
// Send fund------------------------------------------------------------------------------------------------------------
|
|
293
292
|
exports._KNOWN_CHAIN_INFLATION_PARAMS = _KNOWN_CHAIN_INFLATION_PARAMS;
|
|
294
|
-
const _TRANSFER_NOT_SUPPORTED_CHAINS = ['subspace_gemini_3a', 'kulupu', 'joystream', 'equilibrium_parachain', 'genshiro_testnet', 'genshiro'];
|
|
295
|
-
exports._TRANSFER_NOT_SUPPORTED_CHAINS = _TRANSFER_NOT_SUPPORTED_CHAINS;
|
|
296
293
|
const _TRANSFER_CHAIN_GROUP = {
|
|
297
294
|
acala: ['karura', 'acala', 'acala_testnet'],
|
|
298
295
|
kintsugi: ['kintsugi', 'kintsugi_test', 'interlay', 'mangatax_para'],
|
|
299
296
|
genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
|
|
300
|
-
// crab: ['crab', 'pangolin'],
|
|
301
297
|
bitcountry: ['pioneer', 'bitcountry'],
|
|
302
298
|
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub', 'chainflip_assethub', 'origintrail', 'xode', 'paseo_assethub'],
|
|
303
299
|
riochain: ['riochain'],
|
|
@@ -309,10 +305,6 @@ const _TRANSFER_CHAIN_GROUP = {
|
|
|
309
305
|
truth: ['truth_network']
|
|
310
306
|
};
|
|
311
307
|
exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
|
|
312
|
-
const _BALANCE_PARSING_CHAIN_GROUP = {
|
|
313
|
-
bobabeam: ['bobabeam', 'bobabase']
|
|
314
|
-
};
|
|
315
|
-
exports._BALANCE_PARSING_CHAIN_GROUP = _BALANCE_PARSING_CHAIN_GROUP;
|
|
316
308
|
const _MANTA_ZK_CHAIN_GROUP = ['calamari'];
|
|
317
309
|
exports._MANTA_ZK_CHAIN_GROUP = _MANTA_ZK_CHAIN_GROUP;
|
|
318
310
|
const _ZK_ASSET_PREFIX = 'zk';
|
|
@@ -321,21 +313,6 @@ const _DEFAULT_MANTA_ZK_CHAIN = 'calamari';
|
|
|
321
313
|
|
|
322
314
|
// XCM------------------------------------------------------------------------------------------------------------------
|
|
323
315
|
exports._DEFAULT_MANTA_ZK_CHAIN = _DEFAULT_MANTA_ZK_CHAIN;
|
|
324
|
-
const _XCM_CHAIN_GROUP = {
|
|
325
|
-
polkadotXcm: ['statemine', 'statemint', 'equilibrium_parachain', 'rococo_assethub', 'mythos', 'westend_assethub'],
|
|
326
|
-
polkadotXcmSpecialCases: ['astar', 'shiden'],
|
|
327
|
-
xcmPallet: ['polkadot', 'kusama', 'rococo', 'westend']
|
|
328
|
-
// default is xTokens pallet
|
|
329
|
-
};
|
|
330
|
-
exports._XCM_CHAIN_GROUP = _XCM_CHAIN_GROUP;
|
|
331
|
-
const _XCM_TYPE = {
|
|
332
|
-
RP: `${_types._SubstrateChainType.RELAYCHAIN}-${_types._SubstrateChainType.PARACHAIN}`,
|
|
333
|
-
// DMP
|
|
334
|
-
PP: `${_types._SubstrateChainType.PARACHAIN}-${_types._SubstrateChainType.PARACHAIN}`,
|
|
335
|
-
// HRMP
|
|
336
|
-
PR: `${_types._SubstrateChainType.PARACHAIN}-${_types._SubstrateChainType.RELAYCHAIN}` // UMP
|
|
337
|
-
};
|
|
338
|
-
exports._XCM_TYPE = _XCM_TYPE;
|
|
339
316
|
const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS, 'vara_network', 'ton'];
|
|
340
317
|
exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
|
|
341
318
|
const EVM_PASS_CONNECT_STATUS = {
|
|
@@ -351,10 +328,7 @@ const EVM_REFORMAT_DECIMALS = {
|
|
|
351
328
|
};
|
|
352
329
|
exports.EVM_REFORMAT_DECIMALS = EVM_REFORMAT_DECIMALS;
|
|
353
330
|
const LATEST_CHAIN_DATA_FETCHING_INTERVAL = 120000;
|
|
354
|
-
|
|
355
|
-
// TODO: review
|
|
356
331
|
exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = LATEST_CHAIN_DATA_FETCHING_INTERVAL;
|
|
357
|
-
const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
|
|
358
332
|
const _BITCOIN_CHAIN_SLUG = 'bitcoin';
|
|
359
333
|
exports._BITCOIN_CHAIN_SLUG = _BITCOIN_CHAIN_SLUG;
|
|
360
334
|
const _BITCOIN_TESTNET_CHAIN_SLUG = 'bitcoinTestnet';
|
|
@@ -363,17 +337,5 @@ const _BITCOIN_NAME = 'Bitcoin';
|
|
|
363
337
|
exports._BITCOIN_NAME = _BITCOIN_NAME;
|
|
364
338
|
const _BITCOIN_TESTNET_NAME = 'Bitcoin Testnet';
|
|
365
339
|
exports._BITCOIN_TESTNET_NAME = _BITCOIN_TESTNET_NAME;
|
|
366
|
-
const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
|
|
367
|
-
exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
|
|
368
|
-
const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
|
|
369
|
-
exports._CHAIN_ASSET_SRC = _CHAIN_ASSET_SRC;
|
|
370
|
-
const _ASSET_REF_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
|
|
371
|
-
exports._ASSET_REF_SRC = _ASSET_REF_SRC;
|
|
372
|
-
const _MULTI_CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/MultiChainAsset.json`;
|
|
373
|
-
exports._MULTI_CHAIN_ASSET_SRC = _MULTI_CHAIN_ASSET_SRC;
|
|
374
|
-
const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
|
|
375
|
-
exports._CHAIN_LOGO_MAP_SRC = _CHAIN_LOGO_MAP_SRC;
|
|
376
|
-
const _ASSET_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetLogoMap.json`;
|
|
377
|
-
exports._ASSET_LOGO_MAP_SRC = _ASSET_LOGO_MAP_SRC;
|
|
378
340
|
const _BTC_SERVICE_TOKEN = process.env.BTC_SERVICE_TOKEN || '';
|
|
379
341
|
exports._BTC_SERVICE_TOKEN = _BTC_SERVICE_TOKEN;
|
|
@@ -126,6 +126,9 @@ class EvmChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
126
126
|
tokenContract.methods.symbol().call()]);
|
|
127
127
|
name = _name;
|
|
128
128
|
symbol = _symbol;
|
|
129
|
+
if (name === '') {
|
|
130
|
+
contractError = true;
|
|
131
|
+
}
|
|
129
132
|
} else {
|
|
130
133
|
tokenContract = new evmApi.api.eth.Contract(_utils._ERC20_ABI, contractAddress);
|
|
131
134
|
const [_decimals, _symbol, _name] = await Promise.all([
|
|
@@ -138,9 +141,9 @@ class EvmChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
138
141
|
name = _name;
|
|
139
142
|
decimals = new _bignumber.default(_decimals).toNumber();
|
|
140
143
|
symbol = _symbol;
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
+
if (name === '' || symbol === '') {
|
|
145
|
+
contractError = true;
|
|
146
|
+
}
|
|
144
147
|
}
|
|
145
148
|
return {
|
|
146
149
|
name,
|
|
@@ -8,6 +8,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
|
8
8
|
var _constants = require("@subwallet/extension-base/constants");
|
|
9
9
|
var _constants2 = require("@subwallet/extension-base/services/earning-service/constants");
|
|
10
10
|
var _utils = require("@subwallet/extension-base/services/inapp-notification-service/utils");
|
|
11
|
+
var _types = require("@subwallet/extension-base/types");
|
|
11
12
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
12
13
|
var _util = require("@polkadot/util");
|
|
13
14
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
@@ -162,7 +163,12 @@ class BasePoolHandler {
|
|
|
162
163
|
}
|
|
163
164
|
const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(this.chain);
|
|
164
165
|
// Use TRANSFER_BALANCE extrinsic in order to get transferable balanace without minus ED
|
|
165
|
-
|
|
166
|
+
let nativeTokenBalance;
|
|
167
|
+
if ([_types.YieldPoolType.NATIVE_STAKING, _types.YieldPoolType.NOMINATION_POOL].includes(poolInfo.type)) {
|
|
168
|
+
nativeTokenBalance = await this.state.balanceService.getBalanceByType(request.address, this.chain, undefined, _types.BalanceType.TOTAL_MINUS_RESERVED, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
|
|
169
|
+
} else {
|
|
170
|
+
nativeTokenBalance = await this.state.balanceService.getTransferableBalance(request.address, this.chain, undefined, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
|
|
171
|
+
}
|
|
166
172
|
const bnNativeTokenBalance = new _util.BN(nativeTokenBalance.value);
|
|
167
173
|
const bnMinBalanceToJoin = new _util.BN(((_poolInfo$statistic2 = poolInfo.statistic) === null || _poolInfo$statistic2 === void 0 ? void 0 : (_poolInfo$statistic2$ = _poolInfo$statistic2.earningThreshold) === null || _poolInfo$statistic2$ === void 0 ? void 0 : _poolInfo$statistic2$.join) || '0').add(new _util.BN(poolInfo.metadata.maintainBalance));
|
|
168
174
|
if (bnNativeTokenBalance.lte(bnMinBalanceToJoin)) {
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _types = require("@subwallet/chain-list/types");
|
|
9
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
10
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
11
|
+
var _keyring = require("@subwallet/keyring");
|
|
12
|
+
var _types2 = require("@subwallet/keyring/types");
|
|
13
|
+
var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
|
|
14
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
15
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
|
|
17
|
+
function mapSdkToNftItem(rawInstance, chain, collectionId, owner) {
|
|
18
|
+
var _rawInstance$token_ty, _rawInstance$token_ty2, _rawInstance$id;
|
|
19
|
+
const metadata = rawInstance.metadata || {};
|
|
20
|
+
const image = metadata.image || rawInstance.image_url || rawInstance.media_url || '';
|
|
21
|
+
const attributes = Array.isArray(metadata.attributes) ? metadata.attributes : [];
|
|
22
|
+
let rarity;
|
|
23
|
+
const properties = {};
|
|
24
|
+
for (const attr of attributes) {
|
|
25
|
+
try {
|
|
26
|
+
var _attr$trait_type;
|
|
27
|
+
const key = (_attr$trait_type = attr.trait_type) === null || _attr$trait_type === void 0 ? void 0 : _attr$trait_type.trim();
|
|
28
|
+
if (!key) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
let value = attr.value;
|
|
32
|
+
if (typeof value === 'string') {
|
|
33
|
+
const lower = value.toLowerCase();
|
|
34
|
+
if (lower === 'true') {
|
|
35
|
+
value = true;
|
|
36
|
+
} else if (lower === 'false') {
|
|
37
|
+
value = false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
properties[key] = value;
|
|
41
|
+
if (key.toLowerCase() === 'rarity') {
|
|
42
|
+
rarity = String(value);
|
|
43
|
+
}
|
|
44
|
+
} catch {}
|
|
45
|
+
}
|
|
46
|
+
const hasProperties = Object.keys(properties).length > 0;
|
|
47
|
+
const normalizedType = (_rawInstance$token_ty = rawInstance.token_type) === null || _rawInstance$token_ty === void 0 ? void 0 : (_rawInstance$token_ty2 = _rawInstance$token_ty.replace('-', '')) === null || _rawInstance$token_ty2 === void 0 ? void 0 : _rawInstance$token_ty2.toUpperCase();
|
|
48
|
+
|
|
49
|
+
// Only support ERC721
|
|
50
|
+
if (normalizedType !== 'ERC721') {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
id: (_rawInstance$id = rawInstance.id) === null || _rawInstance$id === void 0 ? void 0 : _rawInstance$id.toString(),
|
|
55
|
+
chain,
|
|
56
|
+
collectionId,
|
|
57
|
+
owner: rawInstance.owner || owner,
|
|
58
|
+
originAsset: undefined,
|
|
59
|
+
name: metadata.name || `#${rawInstance.id}`,
|
|
60
|
+
image: (0, _utils2.baseParseIPFSUrl)(image),
|
|
61
|
+
externalUrl: rawInstance.external_app_url || undefined,
|
|
62
|
+
rarity,
|
|
63
|
+
description: metadata.description || undefined,
|
|
64
|
+
properties: hasProperties ? properties : null,
|
|
65
|
+
type: normalizedType === 'ERC721' ? _types._AssetType.ERC721 : _types._AssetType.ERC721,
|
|
66
|
+
// currently only support ERC721
|
|
67
|
+
rmrk_ver: undefined,
|
|
68
|
+
onChainOption: undefined,
|
|
69
|
+
assetHubType: undefined
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function mapSdkToCollection(raw, chain) {
|
|
73
|
+
var _raw$token_instances;
|
|
74
|
+
const token = raw.token || {};
|
|
75
|
+
return {
|
|
76
|
+
// must-have
|
|
77
|
+
collectionId: token.address_hash,
|
|
78
|
+
chain,
|
|
79
|
+
originAsset: undefined,
|
|
80
|
+
// optional
|
|
81
|
+
collectionName: token.name || token.symbol || 'Unknown Collection',
|
|
82
|
+
image: token.icon_url || undefined,
|
|
83
|
+
itemCount: Number(raw.amount) || ((_raw$token_instances = raw.token_instances) === null || _raw$token_instances === void 0 ? void 0 : _raw$token_instances.length) || 0,
|
|
84
|
+
externalUrl: undefined
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
class NftService {
|
|
88
|
+
inProgress = new Set();
|
|
89
|
+
constructor(state) {
|
|
90
|
+
this.state = state;
|
|
91
|
+
}
|
|
92
|
+
async fetchEvmCollectionsWithPreview(addresses) {
|
|
93
|
+
for (const address of addresses) {
|
|
94
|
+
const type = (0, _keyring.getKeypairTypeByAddress)(address);
|
|
95
|
+
const typeValid = [..._types2.EthereumKeypairTypes].includes(type);
|
|
96
|
+
if (typeValid) {
|
|
97
|
+
if (this.inProgress.has(address)) {
|
|
98
|
+
console.log(`[NftService] ${address} already running`);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
this.inProgress.add(address);
|
|
102
|
+
try {
|
|
103
|
+
const nftDetectionApi = _subwalletServicesSdk.default.nftDetectionApi;
|
|
104
|
+
if (!(nftDetectionApi !== null && nftDetectionApi !== void 0 && nftDetectionApi.getEvmNftCollectionsByAddress)) {
|
|
105
|
+
console.warn('[NftService] NftDetectionApi not available');
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const rawData = await nftDetectionApi.getEvmNftCollectionsByAddress(address);
|
|
109
|
+
const allItems = [];
|
|
110
|
+
const allCollections = [];
|
|
111
|
+
for (const [chain, collections] of Object.entries(rawData)) {
|
|
112
|
+
if (!Array.isArray(collections)) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
for (const col of collections) {
|
|
116
|
+
const mappedCollection = mapSdkToCollection(col, chain);
|
|
117
|
+
allCollections.push(mappedCollection);
|
|
118
|
+
if (Array.isArray(col.token_instances)) {
|
|
119
|
+
const items = col.token_instances.map(inst => mapSdkToNftItem(inst, chain, mappedCollection.collectionId, address)).filter(i => Boolean(i));
|
|
120
|
+
allItems.push(...items);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
await this.state.handleDetectedNftCollections(allCollections);
|
|
125
|
+
await this.state.handleDetectedNfts(address, allItems);
|
|
126
|
+
} catch (err) {
|
|
127
|
+
console.warn(`[NftService] detect error for ${address}`, err);
|
|
128
|
+
} finally {
|
|
129
|
+
this.inProgress.delete(address);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async getFullNftInstancesByCollection(request) {
|
|
135
|
+
const {
|
|
136
|
+
chainInfo,
|
|
137
|
+
contractAddress,
|
|
138
|
+
owners
|
|
139
|
+
} = request;
|
|
140
|
+
const chainId = (0, _utils._getEvmChainId)(chainInfo);
|
|
141
|
+
if (!contractAddress || !owners || !chainId) {
|
|
142
|
+
console.warn('[NftService] missing params for getFullNftInstancesByCollection');
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
const nftDetectionApi = _subwalletServicesSdk.default.nftDetectionApi;
|
|
147
|
+
if (!(nftDetectionApi !== null && nftDetectionApi !== void 0 && nftDetectionApi.getAllNftInstances)) {
|
|
148
|
+
console.warn('[NftService] getAllNftInstances not available');
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
const ownerList = Array.isArray(owners) ? owners : [owners];
|
|
152
|
+
for (const eachOwner of ownerList) {
|
|
153
|
+
try {
|
|
154
|
+
const instances = await nftDetectionApi.getAllNftInstances(contractAddress, eachOwner, chainId.toString());
|
|
155
|
+
if (!Array.isArray(instances)) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
console.log('FOR TESTER (before)', instances);
|
|
159
|
+
const nftList = instances.map(inst => mapSdkToNftItem(inst, chainInfo.slug, contractAddress, eachOwner)).filter(i => Boolean(i));
|
|
160
|
+
console.log('FOR TESTER (after)', nftList);
|
|
161
|
+
await this.state.handleDetectedNfts(eachOwner, nftList);
|
|
162
|
+
} catch (innerErr) {
|
|
163
|
+
console.warn(`[NftService] getAllNftInstances failed for ${eachOwner}`, innerErr);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return true;
|
|
167
|
+
} catch (err) {
|
|
168
|
+
console.error(`[NftDetectionService] getFullNftInstancesByCollection error for ${contractAddress}`, err);
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.default = NftService;
|