@subwallet/extension-base 1.2.29-0 → 1.2.31-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 +2 -2
- package/cjs/constants/blocked-actions-list.js +15 -0
- package/cjs/constants/index.js +12 -0
- package/cjs/core/logic-validation/transfer.js +166 -0
- package/cjs/koni/background/handlers/Extension.js +34 -10
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/index.js +2 -2
- package/cjs/services/balance-service/helpers/subscribe/substrate/gear.js +6 -4
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +6 -6
- package/cjs/services/swap-service/handler/chainflip-handler.js +47 -19
- package/cjs/services/swap-service/utils.js +34 -3
- package/cjs/services/transaction-service/index.js +7 -1
- package/cjs/utils/staticData/index.js +7 -2
- package/constants/blocked-actions-list.d.ts +7 -0
- package/constants/blocked-actions-list.js +8 -0
- package/constants/index.d.ts +1 -0
- package/constants/index.js +2 -1
- package/core/logic-validation/transfer.d.ts +2 -0
- package/core/logic-validation/transfer.js +164 -0
- package/koni/background/handlers/Extension.js +35 -11
- package/package.json +16 -10
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/index.js +2 -2
- package/services/balance-service/helpers/subscribe/substrate/gear.js +6 -4
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +6 -6
- package/services/swap-service/handler/chainflip-handler.d.ts +4 -2
- package/services/swap-service/handler/chainflip-handler.js +47 -20
- package/services/swap-service/utils.d.ts +12 -0
- package/services/swap-service/utils.js +32 -3
- package/services/transaction-service/index.js +9 -3
- package/utils/staticData/blockedActionsFeatures.json +39 -0
- package/utils/staticData/index.d.ts +4 -1
- package/utils/staticData/index.js +5 -1
|
@@ -1652,8 +1652,8 @@ export interface KoniRequestSignatures {
|
|
|
1652
1652
|
'pri(accounts.inject.add)': [RequestAddInjectedAccounts, boolean];
|
|
1653
1653
|
'pri(accounts.inject.remove)': [RequestRemoveInjectedAccounts, boolean];
|
|
1654
1654
|
'pri(derivation.createV2)': [RequestDeriveCreateV2, boolean];
|
|
1655
|
-
'pri(json.restoreV2)': [RequestJsonRestoreV2,
|
|
1656
|
-
'pri(json.batchRestoreV2)': [RequestBatchRestoreV2,
|
|
1655
|
+
'pri(json.restoreV2)': [RequestJsonRestoreV2, string[]];
|
|
1656
|
+
'pri(json.batchRestoreV2)': [RequestBatchRestoreV2, string[]];
|
|
1657
1657
|
'pri(accounts.batchExportV2)': [RequestAccountBatchExportV2, ResponseAccountBatchExportV2];
|
|
1658
1658
|
'pri(accounts.exportPrivateKey)': [RequestAccountExportPrivateKey, ResponseAccountExportPrivateKey];
|
|
1659
1659
|
'pri(accounts.subscribeWithCurrentAddress)': [RequestAccountSubscribe, AccountsWithCurrentAddress, AccountsWithCurrentAddress];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.fetchLastestBlockedActionsAndFeatures = void 0;
|
|
7
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
8
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
9
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
10
|
+
|
|
11
|
+
const BLOCKED_ACTIONS_AND_FEATURES_PROMISE = (0, _utils.fetchStaticData)('blocked-actions-features');
|
|
12
|
+
const fetchLastestBlockedActionsAndFeatures = async () => {
|
|
13
|
+
return await BLOCKED_ACTIONS_AND_FEATURES_PROMISE;
|
|
14
|
+
};
|
|
15
|
+
exports.fetchLastestBlockedActionsAndFeatures = fetchLastestBlockedActionsAndFeatures;
|
package/cjs/constants/index.js
CHANGED
|
@@ -62,6 +62,18 @@ Object.keys(_storage).forEach(function (key) {
|
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
64
|
});
|
|
65
|
+
var _blockedActionsList = require("./blocked-actions-list");
|
|
66
|
+
Object.keys(_blockedActionsList).forEach(function (key) {
|
|
67
|
+
if (key === "default" || key === "__esModule") return;
|
|
68
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
69
|
+
if (key in exports && exports[key] === _blockedActionsList[key]) return;
|
|
70
|
+
Object.defineProperty(exports, key, {
|
|
71
|
+
enumerable: true,
|
|
72
|
+
get: function () {
|
|
73
|
+
return _blockedActionsList[key];
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
65
77
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
66
78
|
// SPDX-License-Identifier: Apache-2.0
|
|
67
79
|
|
|
@@ -8,6 +8,8 @@ exports.additionalValidateTransfer = additionalValidateTransfer;
|
|
|
8
8
|
exports.additionalValidateXcmTransfer = additionalValidateXcmTransfer;
|
|
9
9
|
exports.checkBalanceWithTransactionFee = checkBalanceWithTransactionFee;
|
|
10
10
|
exports.checkSigningAccountForTransaction = checkSigningAccountForTransaction;
|
|
11
|
+
exports.checkSupportForAction = checkSupportForAction;
|
|
12
|
+
exports.checkSupportForFeature = checkSupportForFeature;
|
|
11
13
|
exports.checkSupportForTransaction = checkSupportForTransaction;
|
|
12
14
|
exports.estimateFeeForTransaction = estimateFeeForTransaction;
|
|
13
15
|
exports.validateTransferRequest = validateTransferRequest;
|
|
@@ -152,6 +154,170 @@ function additionalValidateXcmTransfer(originTokenInfo, destinationTokenInfo, se
|
|
|
152
154
|
}
|
|
153
155
|
return [warning, error];
|
|
154
156
|
}
|
|
157
|
+
function checkSupportForFeature(validationResponse, blockedFeaturesList, chainInfo) {
|
|
158
|
+
const extrinsicType = validationResponse.extrinsicType;
|
|
159
|
+
const chain = validationResponse.chain;
|
|
160
|
+
const currentFeature = `${extrinsicType}___${chain}`;
|
|
161
|
+
if (blockedFeaturesList.includes(currentFeature)) {
|
|
162
|
+
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.UNSUPPORTED, (0, _i18next.t)(`Feature under maintenance on ${chainInfo.name} network. Try again later`)));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function checkSupportForAction(validationResponse, blockedActionsMap) {
|
|
166
|
+
const extrinsicType = validationResponse.extrinsicType;
|
|
167
|
+
let currentAction = '';
|
|
168
|
+
switch (extrinsicType) {
|
|
169
|
+
case _KoniTypes.ExtrinsicType.TRANSFER_BALANCE:
|
|
170
|
+
|
|
171
|
+
// eslint-disable-next-line no-fallthrough
|
|
172
|
+
case _KoniTypes.ExtrinsicType.TRANSFER_TOKEN:
|
|
173
|
+
{
|
|
174
|
+
const data = validationResponse.data;
|
|
175
|
+
const tokenSlug = data.tokenSlug;
|
|
176
|
+
currentAction = `${extrinsicType}___${tokenSlug}`;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
case _KoniTypes.ExtrinsicType.TRANSFER_XCM:
|
|
180
|
+
{
|
|
181
|
+
const data = validationResponse.data;
|
|
182
|
+
const tokenSlug = data.tokenSlug;
|
|
183
|
+
const destinationNetworkKey = data.destinationNetworkKey;
|
|
184
|
+
currentAction = `${extrinsicType}___${tokenSlug}___${destinationNetworkKey}`;
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
case _KoniTypes.ExtrinsicType.SEND_NFT:
|
|
188
|
+
{
|
|
189
|
+
const data = validationResponse.data;
|
|
190
|
+
const networkKey = data.networkKey;
|
|
191
|
+
const collectionId = data.nftItem.collectionId;
|
|
192
|
+
currentAction = `${extrinsicType}___${networkKey}___${collectionId}`;
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
case _KoniTypes.ExtrinsicType.SWAP:
|
|
196
|
+
{
|
|
197
|
+
const data = validationResponse.data;
|
|
198
|
+
const pairSlug = data.quote.pair.slug;
|
|
199
|
+
const providerId = data.provider.id;
|
|
200
|
+
currentAction = `${extrinsicType}___${pairSlug}___${providerId}`;
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
case _KoniTypes.ExtrinsicType.STAKING_BOND:
|
|
204
|
+
{
|
|
205
|
+
const data = validationResponse.data;
|
|
206
|
+
const chain = data.chain;
|
|
207
|
+
currentAction = `${extrinsicType}___${chain}`;
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
case _KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL:
|
|
211
|
+
{
|
|
212
|
+
const data = validationResponse.data;
|
|
213
|
+
const slug = data.slug;
|
|
214
|
+
currentAction = `${extrinsicType}___${slug}`;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
case _KoniTypes.ExtrinsicType.STAKING_UNBOND:
|
|
218
|
+
{
|
|
219
|
+
const data = validationResponse.data;
|
|
220
|
+
const chain = data.chain;
|
|
221
|
+
currentAction = `${extrinsicType}___${chain}`;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
case _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD:
|
|
225
|
+
{
|
|
226
|
+
const data = validationResponse.data;
|
|
227
|
+
const slug = data.slug;
|
|
228
|
+
currentAction = `${extrinsicType}___${slug}`;
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
case _KoniTypes.ExtrinsicType.STAKING_WITHDRAW:
|
|
232
|
+
{
|
|
233
|
+
const data = validationResponse.data;
|
|
234
|
+
const slug = data.slug;
|
|
235
|
+
currentAction = `${extrinsicType}___${slug}`;
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
case _KoniTypes.ExtrinsicType.STAKING_COMPOUNDING:
|
|
239
|
+
{
|
|
240
|
+
const data = validationResponse.data;
|
|
241
|
+
const networkKey = data.networkKey;
|
|
242
|
+
currentAction = `${extrinsicType}___${networkKey}`;
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
case _KoniTypes.ExtrinsicType.STAKING_CANCEL_COMPOUNDING:
|
|
246
|
+
{
|
|
247
|
+
const data = validationResponse.data;
|
|
248
|
+
const networkKey = data.networkKey;
|
|
249
|
+
currentAction = `${extrinsicType}___${networkKey}`;
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
case _KoniTypes.ExtrinsicType.STAKING_CANCEL_UNSTAKE:
|
|
253
|
+
{
|
|
254
|
+
const data = validationResponse.data;
|
|
255
|
+
const slug = data.slug;
|
|
256
|
+
currentAction = `${extrinsicType}___${slug}`;
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
case _KoniTypes.ExtrinsicType.JOIN_YIELD_POOL:
|
|
260
|
+
{
|
|
261
|
+
const data = validationResponse.data;
|
|
262
|
+
const slug = data.data.slug;
|
|
263
|
+
currentAction = `${extrinsicType}___${slug}`;
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
case _KoniTypes.ExtrinsicType.MINT_VDOT:
|
|
267
|
+
case _KoniTypes.ExtrinsicType.MINT_LDOT:
|
|
268
|
+
case _KoniTypes.ExtrinsicType.MINT_SDOT:
|
|
269
|
+
case _KoniTypes.ExtrinsicType.MINT_QDOT:
|
|
270
|
+
case _KoniTypes.ExtrinsicType.MINT_STDOT:
|
|
271
|
+
|
|
272
|
+
// eslint-disable-next-line no-fallthrough
|
|
273
|
+
case _KoniTypes.ExtrinsicType.MINT_VMANTA:
|
|
274
|
+
{
|
|
275
|
+
const data = validationResponse.data;
|
|
276
|
+
const slug = data.slug;
|
|
277
|
+
currentAction = `${extrinsicType}___${slug}`;
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
case _KoniTypes.ExtrinsicType.REDEEM_VDOT:
|
|
281
|
+
case _KoniTypes.ExtrinsicType.REDEEM_LDOT:
|
|
282
|
+
case _KoniTypes.ExtrinsicType.REDEEM_SDOT:
|
|
283
|
+
case _KoniTypes.ExtrinsicType.REDEEM_QDOT:
|
|
284
|
+
case _KoniTypes.ExtrinsicType.REDEEM_STDOT:
|
|
285
|
+
|
|
286
|
+
// eslint-disable-next-line no-fallthrough
|
|
287
|
+
case _KoniTypes.ExtrinsicType.REDEEM_VMANTA:
|
|
288
|
+
{
|
|
289
|
+
const data = validationResponse.data;
|
|
290
|
+
const slug = data.slug;
|
|
291
|
+
currentAction = `${extrinsicType}___${slug}`;
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
case _KoniTypes.ExtrinsicType.UNSTAKE_VDOT:
|
|
295
|
+
case _KoniTypes.ExtrinsicType.UNSTAKE_LDOT:
|
|
296
|
+
case _KoniTypes.ExtrinsicType.UNSTAKE_SDOT:
|
|
297
|
+
case _KoniTypes.ExtrinsicType.UNSTAKE_QDOT:
|
|
298
|
+
case _KoniTypes.ExtrinsicType.UNSTAKE_STDOT:
|
|
299
|
+
|
|
300
|
+
// eslint-disable-next-line no-fallthrough
|
|
301
|
+
case _KoniTypes.ExtrinsicType.UNSTAKE_VMANTA:
|
|
302
|
+
{
|
|
303
|
+
const data = validationResponse.data;
|
|
304
|
+
const slug = data.slug;
|
|
305
|
+
currentAction = `${extrinsicType}___${slug}`;
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
case _KoniTypes.ExtrinsicType.TOKEN_SPENDING_APPROVAL:
|
|
309
|
+
{
|
|
310
|
+
const data = validationResponse.data;
|
|
311
|
+
const chain = data.chain;
|
|
312
|
+
currentAction = `${extrinsicType}___${chain}`;
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
const blockedActionsList = Object.values(blockedActionsMap).flat();
|
|
317
|
+
if (blockedActionsList.includes(currentAction)) {
|
|
318
|
+
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.UNSUPPORTED, (0, _i18next.t)('Feature under maintenance. Try again later')));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
155
321
|
|
|
156
322
|
// general validations
|
|
157
323
|
function checkSupportForTransaction(validationResponse, transaction) {
|
|
@@ -1431,6 +1431,10 @@ class KoniExtension {
|
|
|
1431
1431
|
withMasterPassword
|
|
1432
1432
|
} = _ref43;
|
|
1433
1433
|
const isPasswordValidated = this.validatePassword(file, password);
|
|
1434
|
+
const {
|
|
1435
|
+
promise,
|
|
1436
|
+
resolve
|
|
1437
|
+
} = (0, _utils4.createPromiseHandler)();
|
|
1434
1438
|
if (isPasswordValidated) {
|
|
1435
1439
|
try {
|
|
1436
1440
|
this._saveCurrentAccountAddress(address, () => {
|
|
@@ -1445,10 +1449,12 @@ class KoniExtension {
|
|
|
1445
1449
|
});
|
|
1446
1450
|
}
|
|
1447
1451
|
this._addAddressToAuthList(address, isAllowed);
|
|
1452
|
+
resolve([address]);
|
|
1448
1453
|
});
|
|
1449
1454
|
if (this.#alwaysLock) {
|
|
1450
1455
|
this.keyringLock();
|
|
1451
1456
|
}
|
|
1457
|
+
return promise;
|
|
1452
1458
|
} catch (error) {
|
|
1453
1459
|
throw new Error(error.message);
|
|
1454
1460
|
}
|
|
@@ -1465,17 +1471,35 @@ class KoniExtension {
|
|
|
1465
1471
|
} = _ref44;
|
|
1466
1472
|
const addressList = accountsInfo.map(acc => acc.address);
|
|
1467
1473
|
const isPasswordValidated = this.validatedAccountsPassword(file, password);
|
|
1474
|
+
const {
|
|
1475
|
+
promise,
|
|
1476
|
+
resolve
|
|
1477
|
+
} = (0, _utils4.createPromiseHandler)();
|
|
1468
1478
|
if (isPasswordValidated) {
|
|
1469
1479
|
try {
|
|
1470
1480
|
this._saveCurrentAccountAddress(_constants.ALL_ACCOUNT_KEY, () => {
|
|
1471
1481
|
_uiKeyring.keyring.restoreAccounts(file, password);
|
|
1472
1482
|
this.#koniState.keyringService.removeNoneHardwareGenesisHash();
|
|
1473
|
-
|
|
1483
|
+
const successAddressList = addressList.reduce((addressList, address) => {
|
|
1484
|
+
try {
|
|
1485
|
+
const account = _uiKeyring.keyring.getPair(address);
|
|
1486
|
+
if (account) {
|
|
1487
|
+
addressList.push(address);
|
|
1488
|
+
}
|
|
1489
|
+
} catch (error) {
|
|
1490
|
+
console.log(error);
|
|
1491
|
+
}
|
|
1492
|
+
return addressList;
|
|
1493
|
+
}, []);
|
|
1494
|
+
this._addAddressesToAuthList(successAddressList, isAllowed);
|
|
1495
|
+
resolve(successAddressList);
|
|
1474
1496
|
});
|
|
1475
1497
|
|
|
1476
1498
|
// if (this.#alwaysLock) {
|
|
1477
1499
|
// this.keyringLock();
|
|
1478
1500
|
// }
|
|
1501
|
+
|
|
1502
|
+
return promise;
|
|
1479
1503
|
} catch (error) {
|
|
1480
1504
|
throw new Error(error.message);
|
|
1481
1505
|
}
|
|
@@ -2003,8 +2027,9 @@ class KoniExtension {
|
|
|
2003
2027
|
const substrateApi = this.#koniState.chainService.getSubstrateApi(originTokenInfo.originChain);
|
|
2004
2028
|
const chainInfoMap = this.#koniState.chainService.getChainInfoMap();
|
|
2005
2029
|
const destinationTokenInfo = this.#koniState.getXcmEqualAssetByChain(destChain, originTokenInfo.slug);
|
|
2030
|
+
const existentialDeposit = originTokenInfo.minAmount || '0';
|
|
2006
2031
|
if (destinationTokenInfo) {
|
|
2007
|
-
const [
|
|
2032
|
+
const [bnMockExecutionFee, {
|
|
2008
2033
|
value
|
|
2009
2034
|
}] = await Promise.all([(0, _xcm.getXcmMockTxFee)(substrateApi, chainInfoMap, originTokenInfo, destinationTokenInfo), this.getAddressTransferableBalance({
|
|
2010
2035
|
extrinsicType: _KoniTypes.ExtrinsicType.TRANSFER_XCM,
|
|
@@ -2013,8 +2038,7 @@ class KoniExtension {
|
|
|
2013
2038
|
token: originTokenInfo.slug
|
|
2014
2039
|
})]);
|
|
2015
2040
|
const bnMaxTransferable = new _bignumber.default(value);
|
|
2016
|
-
const estimatedFee =
|
|
2017
|
-
|
|
2041
|
+
const estimatedFee = bnMockExecutionFee.multipliedBy(_constants.XCM_FEE_RATIO).plus(new _bignumber.default(existentialDeposit));
|
|
2018
2042
|
return bnMaxTransferable.minus(estimatedFee);
|
|
2019
2043
|
}
|
|
2020
2044
|
return new _bignumber.default(0);
|
|
@@ -3051,14 +3075,14 @@ class KoniExtension {
|
|
|
3051
3075
|
} else {
|
|
3052
3076
|
metadata = await this.#koniState.chainService.getMetadataByHash(payload.genesisHash);
|
|
3053
3077
|
if (metadata) {
|
|
3054
|
-
var _chainInfo$substrateI, _chainInfo$substrateI2, _chainInfo$substrateI3;
|
|
3078
|
+
var _chainInfo$substrateI, _chainInfo$substrateI2, _chainInfo$substrateI3, _chainInfo$substrateI4;
|
|
3055
3079
|
registry = new _types3.TypeRegistry();
|
|
3056
3080
|
const _metadata = new _types3.Metadata(registry, metadata.hexValue);
|
|
3057
3081
|
registry.register(metadata.types);
|
|
3058
3082
|
registry.setChainProperties(registry.createType('ChainProperties', {
|
|
3059
|
-
ss58Format: (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$
|
|
3060
|
-
tokenDecimals: chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$
|
|
3061
|
-
tokenSymbol: chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$
|
|
3083
|
+
ss58Format: (_chainInfo$substrateI = chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI2 = chainInfo.substrateInfo) === null || _chainInfo$substrateI2 === void 0 ? void 0 : _chainInfo$substrateI2.addressPrefix) !== null && _chainInfo$substrateI !== void 0 ? _chainInfo$substrateI : 42,
|
|
3084
|
+
tokenDecimals: chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI3 = chainInfo.substrateInfo) === null || _chainInfo$substrateI3 === void 0 ? void 0 : _chainInfo$substrateI3.decimals,
|
|
3085
|
+
tokenSymbol: chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI4 = chainInfo.substrateInfo) === null || _chainInfo$substrateI4 === void 0 ? void 0 : _chainInfo$substrateI4.symbol
|
|
3062
3086
|
}));
|
|
3063
3087
|
registry.setMetadata(_metadata, payload.signedExtensions, metadata.userExtensions);
|
|
3064
3088
|
} else {
|
|
@@ -4409,9 +4433,9 @@ class KoniExtension {
|
|
|
4409
4433
|
case 'pri(accounts.batchExportV2)':
|
|
4410
4434
|
return this.batchExportV2(request);
|
|
4411
4435
|
case 'pri(json.restoreV2)':
|
|
4412
|
-
return this.jsonRestoreV2(request);
|
|
4436
|
+
return await this.jsonRestoreV2(request);
|
|
4413
4437
|
case 'pri(json.batchRestoreV2)':
|
|
4414
|
-
return this.batchRestoreV2(request);
|
|
4438
|
+
return await this.batchRestoreV2(request);
|
|
4415
4439
|
case 'pri(nft.getNft)':
|
|
4416
4440
|
return await this.getNft();
|
|
4417
4441
|
case 'pri(nft.getSubscription)':
|
package/cjs/packageInfo.js
CHANGED
|
@@ -123,10 +123,10 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
|
|
|
123
123
|
evmApi
|
|
124
124
|
});
|
|
125
125
|
}
|
|
126
|
-
|
|
126
|
+
const substrateApi = await substrateApiMap[chainSlug].isReady;
|
|
127
|
+
if (!substrateApi.isApiReady) {
|
|
127
128
|
handleUnsupportedOrPendingAddresses(useAddresses, chainSlug, chainAssetMap, _KoniTypes.APIItemState.PENDING, callback);
|
|
128
129
|
}
|
|
129
|
-
const substrateApi = await substrateApiMap[chainSlug].isReady;
|
|
130
130
|
return (0, _substrate.subscribeSubstrateBalance)(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback, extrinsicType);
|
|
131
131
|
});
|
|
132
132
|
return () => {
|
|
@@ -23,7 +23,8 @@ const subscribeGRC20Balance = _ref => {
|
|
|
23
23
|
chainInfo,
|
|
24
24
|
substrateApi
|
|
25
25
|
} = _ref;
|
|
26
|
-
|
|
26
|
+
const apiPromise = substrateApi.api;
|
|
27
|
+
if (!(apiPromise instanceof _api.GearApi)) {
|
|
27
28
|
console.warn('Cannot subscribe GRC20 balance without GearApi instance');
|
|
28
29
|
return _util.noop;
|
|
29
30
|
}
|
|
@@ -32,7 +33,7 @@ const subscribeGRC20Balance = _ref => {
|
|
|
32
33
|
const tokenList = (0, _utils2.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.GRC20]);
|
|
33
34
|
Object.entries(tokenList).forEach(_ref2 => {
|
|
34
35
|
let [slug, tokenInfo] = _ref2;
|
|
35
|
-
grc20ContractMap[slug] = (0, _utils2.getGRC20ContractPromise)(
|
|
36
|
+
grc20ContractMap[slug] = (0, _utils2.getGRC20ContractPromise)(apiPromise, (0, _utils._getContractAddressOfToken)(tokenInfo));
|
|
36
37
|
});
|
|
37
38
|
const getTokenBalances = () => {
|
|
38
39
|
Object.values(tokenList).map(async tokenInfo => {
|
|
@@ -82,7 +83,8 @@ const subscribeVftBalance = _ref3 => {
|
|
|
82
83
|
chainInfo,
|
|
83
84
|
substrateApi
|
|
84
85
|
} = _ref3;
|
|
85
|
-
|
|
86
|
+
const apiPromise = substrateApi.api;
|
|
87
|
+
if (!(apiPromise instanceof _api.GearApi)) {
|
|
86
88
|
console.warn('Cannot subscribe VFT balance without GearApi instance');
|
|
87
89
|
return _util.noop;
|
|
88
90
|
}
|
|
@@ -91,7 +93,7 @@ const subscribeVftBalance = _ref3 => {
|
|
|
91
93
|
const tokenList = (0, _utils2.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.VFT]);
|
|
92
94
|
Object.entries(tokenList).forEach(_ref4 => {
|
|
93
95
|
let [slug, tokenInfo] = _ref4;
|
|
94
|
-
vftContractMap[slug] = (0, _utils2.getVFTContractPromise)(
|
|
96
|
+
vftContractMap[slug] = (0, _utils2.getVFTContractPromise)(apiPromise, (0, _utils._getContractAddressOfToken)(tokenInfo));
|
|
95
97
|
});
|
|
96
98
|
const getTokenBalances = () => {
|
|
97
99
|
Object.values(tokenList).map(async tokenInfo => {
|
|
@@ -73,16 +73,16 @@ class StellaSwapLiquidStakingPoolHandler extends _base.default {
|
|
|
73
73
|
const tvlCall = stakingContract.methods.fundRaisedBalance();
|
|
74
74
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
75
75
|
const exchangeRateCall = stakingContract.methods.getPooledTokenByShares(sampleTokenShare);
|
|
76
|
-
|
|
77
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
78
|
-
const [aprObject, tvl, equivalentTokenShare] = await Promise.all([aprPromise,
|
|
79
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
80
|
-
tvlCall.call(),
|
|
81
76
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
82
|
-
exchangeRateCall.call()
|
|
77
|
+
const equivalentTokenShare = await exchangeRateCall.call();
|
|
83
78
|
const rate = equivalentTokenShare;
|
|
84
79
|
const exchangeRate = rate / 10 ** (0, _utils._getAssetDecimals)(derivativeTokenInfo);
|
|
85
80
|
this.updateExchangeRate(rate);
|
|
81
|
+
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
83
|
+
const [aprObject, tvl] = await Promise.all([aprPromise,
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
85
|
+
tvlCall.call()]);
|
|
86
86
|
return {
|
|
87
87
|
...this.baseInfo,
|
|
88
88
|
type: this.type,
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.ChainflipSwapHandler = void 0;
|
|
7
|
+
exports.ChainflipSwapHandler = exports.CHAINFLIP_BROKER_API = void 0;
|
|
8
8
|
var _swap = require("@chainflip/sdk/swap");
|
|
9
9
|
var _chainList = require("@subwallet/chain-list");
|
|
10
10
|
var _SwapError = require("@subwallet/extension-base/background/errors/SwapError");
|
|
@@ -26,10 +26,13 @@ var ChainflipFeeType;
|
|
|
26
26
|
ChainflipFeeType["INGRESS"] = "INGRESS";
|
|
27
27
|
ChainflipFeeType["NETWORK"] = "NETWORK";
|
|
28
28
|
ChainflipFeeType["EGRESS"] = "EGRESS";
|
|
29
|
-
ChainflipFeeType["
|
|
29
|
+
ChainflipFeeType["BOOST"] = "BOOST";
|
|
30
|
+
ChainflipFeeType["BROKER"] = "BROKER";
|
|
30
31
|
})(ChainflipFeeType || (ChainflipFeeType = {}));
|
|
31
32
|
const INTERMEDIARY_MAINNET_ASSET_SLUG = _chainList.COMMON_ASSETS.USDC_ETHEREUM;
|
|
32
33
|
const INTERMEDIARY_TESTNET_ASSET_SLUG = _chainList.COMMON_ASSETS.USDC_SEPOLIA;
|
|
34
|
+
const CHAINFLIP_BROKER_API = process.env.CHAINFLIP_BROKER_API || '';
|
|
35
|
+
exports.CHAINFLIP_BROKER_API = CHAINFLIP_BROKER_API;
|
|
33
36
|
var CHAINFLIP_QUOTE_ERROR;
|
|
34
37
|
(function (CHAINFLIP_QUOTE_ERROR) {
|
|
35
38
|
CHAINFLIP_QUOTE_ERROR["InsufficientLiquidity"] = "InsufficientLiquidity";
|
|
@@ -47,9 +50,9 @@ class ChainflipSwapHandler {
|
|
|
47
50
|
});
|
|
48
51
|
this.isTestnet = isTestnet;
|
|
49
52
|
this.providerSlug = isTestnet ? _swap3.SwapProviderId.CHAIN_FLIP_TESTNET : _swap3.SwapProviderId.CHAIN_FLIP_MAINNET;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
|
|
54
|
+
// @ts-ignore
|
|
55
|
+
this.swapSdk = new _swap.SwapSDK((0, _utils2.getChainflipOptions)(isTestnet));
|
|
53
56
|
}
|
|
54
57
|
get chainService() {
|
|
55
58
|
return this.swapBaseHandler.chainService;
|
|
@@ -95,11 +98,12 @@ class ChainflipSwapHandler {
|
|
|
95
98
|
const toAsset = this.chainService.getAssetBySlug(request.pair.to);
|
|
96
99
|
const srcChain = fromAsset.originChain;
|
|
97
100
|
const destChain = toAsset.originChain;
|
|
101
|
+
const isSwapCrossChain = srcChain !== destChain;
|
|
98
102
|
const srcChainInfo = this.chainService.getChainInfoByKey(srcChain);
|
|
99
103
|
const srcChainId = this.chainMapping[srcChain];
|
|
100
104
|
const destChainId = this.chainMapping[destChain];
|
|
101
|
-
const fromAssetId =
|
|
102
|
-
const toAssetId =
|
|
105
|
+
const fromAssetId = (0, _utils._getAssetSymbol)(fromAsset);
|
|
106
|
+
const toAssetId = (0, _utils._getAssetSymbol)(toAsset);
|
|
103
107
|
if (!srcChainId || !destChainId || !fromAssetId || !toAssetId) {
|
|
104
108
|
return {
|
|
105
109
|
error: _swap3.SwapErrorType.ASSET_NOT_SUPPORTED
|
|
@@ -107,9 +111,21 @@ class ChainflipSwapHandler {
|
|
|
107
111
|
}
|
|
108
112
|
const [supportedDestChains, srcAssets, destAssets] = await Promise.all([this.swapSdk.getChains(srcChainId), this.swapSdk.getAssets(srcChainId), this.swapSdk.getAssets(destChainId)]);
|
|
109
113
|
const supportedDestChainId = supportedDestChains.find(c => c.chain === destChainId);
|
|
110
|
-
const srcAssetData = srcAssets.find(a =>
|
|
111
|
-
|
|
112
|
-
|
|
114
|
+
const srcAssetData = srcAssets.find(a => {
|
|
115
|
+
if ((0, _utils._isSmartContractToken)(fromAsset)) {
|
|
116
|
+
var _a$contractAddress;
|
|
117
|
+
return (a === null || a === void 0 ? void 0 : (_a$contractAddress = a.contractAddress) === null || _a$contractAddress === void 0 ? void 0 : _a$contractAddress.toLowerCase()) === (0, _utils._getContractAddressOfToken)(fromAsset).toLowerCase() && a.asset === fromAssetId;
|
|
118
|
+
}
|
|
119
|
+
return a.asset === fromAssetId;
|
|
120
|
+
});
|
|
121
|
+
const destAssetData = destAssets.find(a => {
|
|
122
|
+
if ((0, _utils._isSmartContractToken)(toAsset)) {
|
|
123
|
+
var _a$contractAddress2;
|
|
124
|
+
return (a === null || a === void 0 ? void 0 : (_a$contractAddress2 = a.contractAddress) === null || _a$contractAddress2 === void 0 ? void 0 : _a$contractAddress2.toLowerCase()) === (0, _utils._getContractAddressOfToken)(toAsset).toLowerCase() && a.asset === toAssetId;
|
|
125
|
+
}
|
|
126
|
+
return a.asset === toAssetId;
|
|
127
|
+
});
|
|
128
|
+
if (!destAssetData || !srcAssetData || isSwapCrossChain && !supportedDestChainId) {
|
|
113
129
|
return {
|
|
114
130
|
error: _swap3.SwapErrorType.UNKNOWN
|
|
115
131
|
};
|
|
@@ -205,8 +221,8 @@ class ChainflipSwapHandler {
|
|
|
205
221
|
}
|
|
206
222
|
const srcChainId = this.chainMapping[fromAsset.originChain];
|
|
207
223
|
const destChainId = this.chainMapping[toAsset.originChain];
|
|
208
|
-
const fromAssetId =
|
|
209
|
-
const toAssetId =
|
|
224
|
+
const fromAssetId = (0, _utils._getAssetSymbol)(fromAsset);
|
|
225
|
+
const toAssetId = (0, _utils._getAssetSymbol)(toAsset);
|
|
210
226
|
try {
|
|
211
227
|
var _metadata$maxSwap;
|
|
212
228
|
const quoteResponse = await this.swapSdk.getQuote({
|
|
@@ -220,13 +236,22 @@ class ChainflipSwapHandler {
|
|
|
220
236
|
quoteResponse.quote.includedFees.forEach(fee => {
|
|
221
237
|
switch (fee.type) {
|
|
222
238
|
case ChainflipFeeType.INGRESS:
|
|
239
|
+
{
|
|
240
|
+
console.log('ingress', fee);
|
|
241
|
+
feeComponent.push({
|
|
242
|
+
tokenSlug: fromAsset.slug,
|
|
243
|
+
amount: fee.amount,
|
|
244
|
+
feeType: _swap3.SwapFeeType.NETWORK_FEE
|
|
245
|
+
});
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
223
248
|
|
|
224
249
|
// eslint-disable-next-line no-fallthrough
|
|
225
250
|
case ChainflipFeeType.EGRESS:
|
|
226
251
|
{
|
|
227
|
-
|
|
252
|
+
console.log('egress', fee);
|
|
228
253
|
feeComponent.push({
|
|
229
|
-
tokenSlug,
|
|
254
|
+
tokenSlug: toAsset.slug,
|
|
230
255
|
amount: fee.amount,
|
|
231
256
|
feeType: _swap3.SwapFeeType.NETWORK_FEE
|
|
232
257
|
});
|
|
@@ -235,11 +260,14 @@ class ChainflipSwapHandler {
|
|
|
235
260
|
case ChainflipFeeType.NETWORK:
|
|
236
261
|
|
|
237
262
|
// eslint-disable-next-line no-fallthrough
|
|
238
|
-
case ChainflipFeeType.
|
|
263
|
+
case ChainflipFeeType.BOOST:
|
|
264
|
+
|
|
265
|
+
// eslint-disable-next-line no-fallthrough
|
|
266
|
+
case ChainflipFeeType.BROKER:
|
|
239
267
|
{
|
|
240
|
-
|
|
268
|
+
console.log('broker fee', fee);
|
|
241
269
|
feeComponent.push({
|
|
242
|
-
tokenSlug,
|
|
270
|
+
tokenSlug: this.intermediaryAssetSlug,
|
|
243
271
|
amount: fee.amount,
|
|
244
272
|
feeType: _swap3.SwapFeeType.PLATFORM_FEE
|
|
245
273
|
});
|
|
@@ -324,8 +352,8 @@ class ChainflipSwapHandler {
|
|
|
324
352
|
const receiver = recipient !== null && recipient !== void 0 ? recipient : address;
|
|
325
353
|
const srcChainId = this.chainMapping[fromAsset.originChain];
|
|
326
354
|
const destChainId = this.chainMapping[toAsset.originChain];
|
|
327
|
-
const fromAssetId =
|
|
328
|
-
const toAssetId =
|
|
355
|
+
const fromAssetId = (0, _utils._getAssetSymbol)(fromAsset);
|
|
356
|
+
const toAssetId = (0, _utils._getAssetSymbol)(toAsset);
|
|
329
357
|
const depositAddressResponse = await this.swapSdk.requestDepositAddress({
|
|
330
358
|
srcChain: srcChainId,
|
|
331
359
|
destChain: destChainId,
|
|
@@ -7,11 +7,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports._PROVIDER_TO_SUPPORTED_PAIR_MAP = exports.SWAP_QUOTE_TIMEOUT_MAP = exports.CHAIN_FLIP_TESTNET_EXPLORER = exports.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = exports.CHAIN_FLIP_MAINNET_EXPLORER = void 0;
|
|
8
8
|
exports.calculateSwapRate = calculateSwapRate;
|
|
9
9
|
exports.convertSwapRate = convertSwapRate;
|
|
10
|
+
exports.getChainflipBroker = getChainflipBroker;
|
|
11
|
+
exports.getChainflipOptions = getChainflipOptions;
|
|
10
12
|
exports.getSwapAltToken = getSwapAltToken;
|
|
11
13
|
exports.getSwapAlternativeAsset = getSwapAlternativeAsset;
|
|
12
14
|
var _swap = require("@chainflip/sdk/swap");
|
|
13
15
|
var _chainList = require("@subwallet/chain-list");
|
|
14
16
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
17
|
+
var _chainflipHandler = require("@subwallet/extension-base/services/swap-service/handler/chainflip-handler");
|
|
15
18
|
var _swap2 = require("@subwallet/extension-base/types/swap");
|
|
16
19
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
17
20
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
@@ -23,7 +26,8 @@ const CHAIN_FLIP_MAINNET_EXPLORER = 'https://scan.chainflip.io';
|
|
|
23
26
|
exports.CHAIN_FLIP_MAINNET_EXPLORER = CHAIN_FLIP_MAINNET_EXPLORER;
|
|
24
27
|
const CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = {
|
|
25
28
|
[_chainList.COMMON_CHAIN_SLUGS.POLKADOT]: _swap.Chains.Polkadot,
|
|
26
|
-
[_chainList.COMMON_CHAIN_SLUGS.ETHEREUM]: _swap.Chains.Ethereum
|
|
29
|
+
[_chainList.COMMON_CHAIN_SLUGS.ETHEREUM]: _swap.Chains.Ethereum,
|
|
30
|
+
[_chainList.COMMON_CHAIN_SLUGS.ARBITRUM]: _swap.Chains.Arbitrum
|
|
27
31
|
};
|
|
28
32
|
exports.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING;
|
|
29
33
|
const CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = {
|
|
@@ -34,7 +38,8 @@ exports.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = CHAIN_FLIP_SUPPORTED_TESTNET_MAPP
|
|
|
34
38
|
const CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = {
|
|
35
39
|
[_chainList.COMMON_ASSETS.DOT]: _swap.Assets.DOT,
|
|
36
40
|
[_chainList.COMMON_ASSETS.ETH]: _swap.Assets.ETH,
|
|
37
|
-
[_chainList.COMMON_ASSETS.USDC_ETHEREUM]: _swap.Assets.USDC
|
|
41
|
+
[_chainList.COMMON_ASSETS.USDC_ETHEREUM]: _swap.Assets.USDC,
|
|
42
|
+
[_chainList.COMMON_ASSETS.USDT_ETHEREUM]: _swap.Assets.USDT
|
|
38
43
|
};
|
|
39
44
|
exports.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING;
|
|
40
45
|
const CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = {
|
|
@@ -53,7 +58,7 @@ exports.SWAP_QUOTE_TIMEOUT_MAP = SWAP_QUOTE_TIMEOUT_MAP;
|
|
|
53
58
|
const _PROVIDER_TO_SUPPORTED_PAIR_MAP = {
|
|
54
59
|
[_swap2.SwapProviderId.HYDRADX_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX],
|
|
55
60
|
[_swap2.SwapProviderId.HYDRADX_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX_TESTNET],
|
|
56
|
-
[_swap2.SwapProviderId.CHAIN_FLIP_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM],
|
|
61
|
+
[_swap2.SwapProviderId.CHAIN_FLIP_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM, _chainList.COMMON_CHAIN_SLUGS.ARBITRUM],
|
|
57
62
|
[_swap2.SwapProviderId.CHAIN_FLIP_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.CHAINFLIP_POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA],
|
|
58
63
|
[_swap2.SwapProviderId.POLKADOT_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT_ASSET_HUB],
|
|
59
64
|
[_swap2.SwapProviderId.KUSAMA_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.KUSAMA_ASSET_HUB],
|
|
@@ -79,4 +84,30 @@ function convertSwapRate(rate, fromAsset, toAsset) {
|
|
|
79
84
|
const decimalDiff = (0, _utils._getAssetDecimals)(toAsset) - (0, _utils._getAssetDecimals)(fromAsset);
|
|
80
85
|
const bnRate = new _bignumber.default(rate);
|
|
81
86
|
return bnRate.times(10 ** decimalDiff).pow(-1).toNumber();
|
|
87
|
+
}
|
|
88
|
+
function getChainflipOptions(isTestnet) {
|
|
89
|
+
if (isTestnet) {
|
|
90
|
+
return {
|
|
91
|
+
network: getChainflipNetwork(isTestnet)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
network: getChainflipNetwork(isTestnet),
|
|
96
|
+
broker: getChainflipBroker(isTestnet)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function getChainflipNetwork(isTestnet) {
|
|
100
|
+
return isTestnet ? 'perseverance' : 'mainnet';
|
|
101
|
+
}
|
|
102
|
+
function getChainflipBroker(isTestnet) {
|
|
103
|
+
// noted: currently not use testnet broker
|
|
104
|
+
if (isTestnet) {
|
|
105
|
+
return {
|
|
106
|
+
url: `https://perseverance.chainflip-broker.io/rpc/${_chainflipHandler.CHAINFLIP_BROKER_API}`
|
|
107
|
+
};
|
|
108
|
+
} else {
|
|
109
|
+
return {
|
|
110
|
+
url: `https://chainflip-broker.io/rpc/${_chainflipHandler.CHAINFLIP_BROKER_API}`
|
|
111
|
+
};
|
|
112
|
+
}
|
|
82
113
|
}
|
|
@@ -75,6 +75,13 @@ class TransactionService {
|
|
|
75
75
|
chain,
|
|
76
76
|
extrinsicType
|
|
77
77
|
} = validationResponse;
|
|
78
|
+
const chainInfo = this.state.chainService.getChainInfoByKey(chain);
|
|
79
|
+
const {
|
|
80
|
+
blockedActionsMap,
|
|
81
|
+
blockedFeaturesList
|
|
82
|
+
} = await (0, _constants.fetchLastestBlockedActionsAndFeatures)();
|
|
83
|
+
(0, _transfer.checkSupportForFeature)(validationResponse, blockedFeaturesList, chainInfo);
|
|
84
|
+
(0, _transfer.checkSupportForAction)(validationResponse, blockedActionsMap);
|
|
78
85
|
const transaction = transactionInput.transaction;
|
|
79
86
|
|
|
80
87
|
// Check duplicated transaction
|
|
@@ -82,7 +89,6 @@ class TransactionService {
|
|
|
82
89
|
|
|
83
90
|
// Check support for transaction
|
|
84
91
|
(0, _transfer.checkSupportForTransaction)(validationResponse, transaction);
|
|
85
|
-
const chainInfo = this.state.chainService.getChainInfoByKey(chain);
|
|
86
92
|
if (!chainInfo) {
|
|
87
93
|
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR, (0, _i18next.t)('Cannot find network')));
|
|
88
94
|
}
|