@subwallet/extension-base 1.3.16-0 → 1.3.18-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 -2
- package/cjs/constants/index.js +6 -3
- package/cjs/core/logic-validation/request.js +26 -19
- package/cjs/core/logic-validation/transfer.js +18 -17
- package/cjs/koni/api/contract-handler/evm/web3.js +3 -3
- package/cjs/koni/api/staking/bonding/utils.js +1 -1
- package/cjs/koni/background/handlers/Extension.js +289 -124
- package/cjs/koni/background/handlers/State.js +1 -8
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +14 -2
- package/cjs/services/balance-service/index.js +13 -0
- package/cjs/services/balance-service/transfer/smart-contract.js +47 -33
- package/cjs/services/balance-service/transfer/token.js +5 -4
- package/cjs/services/balance-service/transfer/xcm/availBridge.js +14 -18
- package/cjs/services/balance-service/transfer/xcm/index.js +30 -61
- package/cjs/services/balance-service/transfer/xcm/polygonBridge.js +13 -17
- package/cjs/services/balance-service/transfer/xcm/posBridge.js +20 -21
- package/cjs/services/balance-service/transfer/xcm/snowBridge.js +7 -7
- package/cjs/services/balance-service/transfer/xcm/utils.js +2 -2
- package/cjs/services/chain-service/constants.js +3 -3
- package/cjs/services/chain-service/index.js +22 -0
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +7 -12
- package/cjs/services/earning-service/handlers/native-staking/tao.js +121 -30
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +1 -1
- package/cjs/services/earning-service/handlers/special.js +34 -14
- package/cjs/services/fee-service/interfaces.js +1 -0
- package/cjs/services/fee-service/service.js +111 -0
- package/cjs/services/fee-service/utils/index.js +99 -113
- package/cjs/services/storage-service/db-stores/Balance.js +3 -0
- package/cjs/services/swap-service/handler/asset-hub/handler.js +21 -6
- package/cjs/services/swap-service/handler/asset-hub/router.js +1 -1
- package/cjs/services/swap-service/handler/asset-hub/utils.js +4 -4
- package/cjs/services/swap-service/handler/base-handler.js +2 -0
- package/cjs/services/swap-service/handler/chainflip-handler.js +25 -4
- package/cjs/services/swap-service/handler/hydradx-handler.js +20 -6
- package/cjs/services/swap-service/handler/simpleswap-handler.js +23 -3
- package/cjs/services/swap-service/index.js +8 -8
- package/cjs/services/transaction-service/index.js +23 -3
- package/cjs/types/balance/transfer.js +1 -0
- package/cjs/types/fee/base.js +1 -0
- package/cjs/types/fee/evm.js +16 -1
- package/cjs/types/fee/index.js +37 -4
- package/cjs/types/fee/option.js +1 -0
- package/cjs/types/fee/subscription.js +1 -0
- package/cjs/types/fee/substrate.js +1 -0
- package/cjs/types/fee/ton.js +1 -0
- package/cjs/utils/fee/combine.js +50 -0
- package/cjs/utils/fee/index.js +27 -0
- package/cjs/utils/fee/transfer.js +374 -0
- package/cjs/utils/index.js +12 -0
- package/constants/index.d.ts +1 -0
- package/constants/index.js +1 -0
- package/core/logic-validation/request.js +17 -10
- package/core/logic-validation/transfer.d.ts +5 -5
- package/core/logic-validation/transfer.js +20 -19
- package/core/substrate/xcm-parser.d.ts +1 -1
- package/koni/api/contract-handler/evm/web3.js +3 -3
- package/koni/api/staking/bonding/utils.js +1 -1
- package/koni/background/handlers/Extension.d.ts +4 -3
- package/koni/background/handlers/Extension.js +273 -108
- package/koni/background/handlers/State.js +1 -8
- package/package.json +55 -5
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +14 -2
- package/services/balance-service/index.d.ts +1 -0
- package/services/balance-service/index.js +13 -0
- package/services/balance-service/transfer/smart-contract.d.ts +24 -4
- package/services/balance-service/transfer/smart-contract.js +45 -33
- package/services/balance-service/transfer/token.js +6 -5
- package/services/balance-service/transfer/xcm/availBridge.d.ts +3 -2
- package/services/balance-service/transfer/xcm/availBridge.js +11 -15
- package/services/balance-service/transfer/xcm/index.d.ts +12 -11
- package/services/balance-service/transfer/xcm/index.js +29 -58
- package/services/balance-service/transfer/xcm/polygonBridge.d.ts +4 -3
- package/services/balance-service/transfer/xcm/polygonBridge.js +13 -17
- package/services/balance-service/transfer/xcm/posBridge.d.ts +4 -3
- package/services/balance-service/transfer/xcm/posBridge.js +18 -19
- package/services/balance-service/transfer/xcm/snowBridge.d.ts +2 -1
- package/services/balance-service/transfer/xcm/snowBridge.js +7 -7
- package/services/balance-service/transfer/xcm/utils.js +2 -2
- package/services/chain-service/constants.js +3 -3
- package/services/chain-service/index.d.ts +6 -1
- package/services/chain-service/index.js +22 -0
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +7 -12
- package/services/earning-service/handlers/native-staking/tao.d.ts +7 -2
- package/services/earning-service/handlers/native-staking/tao.js +119 -29
- package/services/earning-service/handlers/nomination-pool/index.js +1 -1
- package/services/earning-service/handlers/special.js +36 -16
- package/services/fee-service/interfaces.d.ts +5 -0
- package/services/fee-service/interfaces.js +1 -0
- package/services/fee-service/service.d.ts +4 -1
- package/services/fee-service/service.js +111 -0
- package/services/fee-service/utils/index.d.ts +8 -2
- package/services/fee-service/utils/index.js +92 -108
- package/services/storage-service/db-stores/Balance.d.ts +1 -0
- package/services/storage-service/db-stores/Balance.js +3 -0
- package/services/swap-service/handler/asset-hub/handler.d.ts +2 -1
- package/services/swap-service/handler/asset-hub/handler.js +21 -6
- package/services/swap-service/handler/asset-hub/router.js +2 -2
- package/services/swap-service/handler/asset-hub/utils.d.ts +1 -1
- package/services/swap-service/handler/asset-hub/utils.js +2 -2
- package/services/swap-service/handler/base-handler.d.ts +4 -1
- package/services/swap-service/handler/base-handler.js +2 -0
- package/services/swap-service/handler/chainflip-handler.d.ts +2 -1
- package/services/swap-service/handler/chainflip-handler.js +24 -3
- package/services/swap-service/handler/hydradx-handler.d.ts +2 -1
- package/services/swap-service/handler/hydradx-handler.js +19 -5
- package/services/swap-service/handler/simpleswap-handler.d.ts +2 -1
- package/services/swap-service/handler/simpleswap-handler.js +23 -3
- package/services/swap-service/index.js +8 -8
- package/services/transaction-service/index.js +23 -3
- package/services/transaction-service/types.d.ts +5 -4
- package/types/balance/transfer.d.ts +25 -0
- package/types/balance/transfer.js +1 -0
- package/types/fee/base.d.ts +8 -0
- package/types/fee/base.js +1 -0
- package/types/fee/evm.d.ts +46 -16
- package/types/fee/evm.js +10 -1
- package/types/fee/index.d.ts +4 -1
- package/types/fee/index.js +4 -1
- package/types/fee/option.d.ts +8 -0
- package/types/fee/option.js +1 -0
- package/types/fee/subscription.d.ts +12 -0
- package/types/fee/subscription.js +1 -0
- package/types/fee/substrate.d.ts +15 -0
- package/types/fee/substrate.js +1 -0
- package/types/fee/ton.d.ts +18 -0
- package/types/fee/ton.js +1 -0
- package/types/transaction/request.d.ts +13 -3
- package/utils/fee/combine.d.ts +12 -0
- package/utils/fee/combine.js +42 -0
- package/utils/fee/index.d.ts +2 -0
- package/utils/fee/index.js +5 -0
- package/utils/fee/transfer.d.ts +22 -0
- package/utils/fee/transfer.js +363 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
|
@@ -23,6 +23,7 @@ class SwapBaseHandler {
|
|
|
23
23
|
let {
|
|
24
24
|
balanceService,
|
|
25
25
|
chainService,
|
|
26
|
+
feeService,
|
|
26
27
|
providerName,
|
|
27
28
|
providerSlug
|
|
28
29
|
} = _ref;
|
|
@@ -30,6 +31,7 @@ class SwapBaseHandler {
|
|
|
30
31
|
this.providerSlug = providerSlug;
|
|
31
32
|
this.chainService = chainService;
|
|
32
33
|
this.balanceService = balanceService;
|
|
34
|
+
this.feeService = feeService;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
// public abstract getSwapQuote(request: SwapRequest): Promise<SwapQuote | SwapError>;
|
|
@@ -19,6 +19,7 @@ var _utils2 = require("@subwallet/extension-base/services/swap-service/utils");
|
|
|
19
19
|
var _types = require("@subwallet/extension-base/types");
|
|
20
20
|
var _serviceBase = require("@subwallet/extension-base/types/service-base");
|
|
21
21
|
var _swap3 = require("@subwallet/extension-base/types/swap");
|
|
22
|
+
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
22
23
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
23
24
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
24
25
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -41,11 +42,12 @@ var CHAINFLIP_QUOTE_ERROR;
|
|
|
41
42
|
CHAINFLIP_QUOTE_ERROR["InsufficientIngress"] = "amount is lower than estimated ingress fee";
|
|
42
43
|
})(CHAINFLIP_QUOTE_ERROR || (CHAINFLIP_QUOTE_ERROR = {}));
|
|
43
44
|
class ChainflipSwapHandler {
|
|
44
|
-
constructor(chainService, balanceService) {
|
|
45
|
-
let isTestnet = arguments.length >
|
|
45
|
+
constructor(chainService, balanceService, feeService) {
|
|
46
|
+
let isTestnet = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
46
47
|
this.swapBaseHandler = new _baseHandler.SwapBaseHandler({
|
|
47
48
|
chainService,
|
|
48
49
|
balanceService,
|
|
50
|
+
feeService,
|
|
49
51
|
providerName: isTestnet ? 'Chainflip Testnet' : 'Chainflip',
|
|
50
52
|
providerSlug: isTestnet ? _swap3.SwapProviderId.CHAIN_FLIP_TESTNET : _swap3.SwapProviderId.CHAIN_FLIP_MAINNET
|
|
51
53
|
});
|
|
@@ -396,11 +398,30 @@ class ChainflipSwapHandler {
|
|
|
396
398
|
});
|
|
397
399
|
extrinsic = submittableExtrinsic;
|
|
398
400
|
} else {
|
|
401
|
+
const id = (0, _getId.getId)();
|
|
402
|
+
const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee(id, chainInfo.slug, 'evm');
|
|
399
403
|
if ((0, _utils._isNativeToken)(fromAsset)) {
|
|
400
|
-
const [transactionConfig] = await (0, _smartContract.getEVMTransactionObject)(
|
|
404
|
+
const [transactionConfig] = await (0, _smartContract.getEVMTransactionObject)({
|
|
405
|
+
chain: chainInfo.slug,
|
|
406
|
+
evmApi: this.chainService.getEvmApi(chainInfo.slug),
|
|
407
|
+
from: address,
|
|
408
|
+
to: depositAddressResponse.depositAddress,
|
|
409
|
+
value: quote.fromAmount,
|
|
410
|
+
feeInfo,
|
|
411
|
+
transferAll: false
|
|
412
|
+
});
|
|
401
413
|
extrinsic = transactionConfig;
|
|
402
414
|
} else {
|
|
403
|
-
const [transactionConfig] = await (0, _smartContract.getERC20TransactionObject)(
|
|
415
|
+
const [transactionConfig] = await (0, _smartContract.getERC20TransactionObject)({
|
|
416
|
+
assetAddress: (0, _utils._getContractAddressOfToken)(fromAsset),
|
|
417
|
+
chain: chainInfo.slug,
|
|
418
|
+
evmApi: this.chainService.getEvmApi(chainInfo.slug),
|
|
419
|
+
from: address,
|
|
420
|
+
to: depositAddressResponse.depositAddress,
|
|
421
|
+
value: quote.fromAmount,
|
|
422
|
+
feeInfo,
|
|
423
|
+
transferAll: false
|
|
424
|
+
});
|
|
404
425
|
extrinsic = transactionConfig;
|
|
405
426
|
}
|
|
406
427
|
}
|
|
@@ -19,6 +19,7 @@ var _utils2 = require("@subwallet/extension-base/services/swap-service/utils");
|
|
|
19
19
|
var _types2 = require("@subwallet/extension-base/types");
|
|
20
20
|
var _serviceBase = require("@subwallet/extension-base/types/service-base");
|
|
21
21
|
var _swap2 = require("@subwallet/extension-base/types/swap");
|
|
22
|
+
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
22
23
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
23
24
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
24
25
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -31,11 +32,12 @@ const HYDRADX_TESTNET_SUBWALLET_REFERRAL_ACCOUNT = '7LCt6dFqtxzdKVB2648jWW9d85do
|
|
|
31
32
|
class HydradxHandler {
|
|
32
33
|
isTestnet = true;
|
|
33
34
|
isReady = false;
|
|
34
|
-
constructor(chainService, balanceService) {
|
|
35
|
-
let isTestnet = arguments.length >
|
|
35
|
+
constructor(chainService, balanceService, feeService) {
|
|
36
|
+
let isTestnet = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
36
37
|
this.swapBaseHandler = new _baseHandler.SwapBaseHandler({
|
|
37
38
|
balanceService,
|
|
38
39
|
chainService,
|
|
40
|
+
feeService,
|
|
39
41
|
providerName: isTestnet ? 'Hydration Testnet' : 'Hydration',
|
|
40
42
|
providerSlug: isTestnet ? _swap2.SwapProviderId.HYDRADX_TESTNET : _swap2.SwapProviderId.HYDRADX_MAINNET
|
|
41
43
|
});
|
|
@@ -97,6 +99,7 @@ class HydradxHandler {
|
|
|
97
99
|
}
|
|
98
100
|
try {
|
|
99
101
|
const alternativeChainInfo = this.chainService.getChainInfoByKey(alternativeAsset.originChain);
|
|
102
|
+
const destChainInfo = this.chainService.getChainInfoByKey(this.chain());
|
|
100
103
|
const step = {
|
|
101
104
|
metadata: {
|
|
102
105
|
sendingValue: bnAmount.toString(),
|
|
@@ -107,13 +110,18 @@ class HydradxHandler {
|
|
|
107
110
|
type: _serviceBase.CommonStepType.XCM
|
|
108
111
|
};
|
|
109
112
|
const xcmOriginSubstrateApi = await this.chainService.getSubstrateApi(alternativeAsset.originChain).isReady;
|
|
113
|
+
const id = (0, _getId.getId)();
|
|
114
|
+
const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee(id, alternativeAsset.originChain, 'substrate');
|
|
110
115
|
const xcmTransfer = await (0, _xcm.createXcmExtrinsic)({
|
|
111
116
|
originTokenInfo: alternativeAsset,
|
|
112
117
|
destinationTokenInfo: fromAsset,
|
|
113
118
|
sendingValue: bnAmount.toString(),
|
|
114
119
|
recipient: params.request.address,
|
|
115
|
-
|
|
116
|
-
|
|
120
|
+
substrateApi: xcmOriginSubstrateApi,
|
|
121
|
+
sender: params.request.address,
|
|
122
|
+
destinationChain: destChainInfo,
|
|
123
|
+
originChain: alternativeChainInfo,
|
|
124
|
+
feeInfo
|
|
117
125
|
});
|
|
118
126
|
const _xcmFeeInfo = await xcmTransfer.paymentInfo(params.request.address);
|
|
119
127
|
const xcmFeeInfo = _xcmFeeInfo.toPrimitive();
|
|
@@ -305,6 +313,8 @@ class HydradxHandler {
|
|
|
305
313
|
const alternativeAssetSlug = (0, _utils2.getSwapAlternativeAsset)(pair);
|
|
306
314
|
const originAsset = this.chainService.getAssetBySlug(alternativeAssetSlug);
|
|
307
315
|
const destinationAsset = this.chainService.getAssetBySlug(pair.from);
|
|
316
|
+
const originChain = this.chainService.getChainInfoByKey(originAsset.originChain);
|
|
317
|
+
const destinationChain = this.chainService.getChainInfoByKey(destinationAsset.originChain);
|
|
308
318
|
const substrateApi = this.chainService.getSubstrateApi(originAsset.originChain);
|
|
309
319
|
const chainApi = await substrateApi.isReady;
|
|
310
320
|
const destinationAssetBalance = await this.balanceService.getTransferableBalance(params.address, destinationAsset.originChain, destinationAsset.slug);
|
|
@@ -317,13 +327,17 @@ class HydradxHandler {
|
|
|
317
327
|
|
|
318
328
|
bnTotalAmount = bnTotalAmount.plus(bnXcmFee);
|
|
319
329
|
}
|
|
330
|
+
const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee((0, _getId.getId)(), originAsset.originChain, 'substrate');
|
|
320
331
|
const xcmTransfer = await (0, _xcm.createXcmExtrinsic)({
|
|
321
332
|
originTokenInfo: originAsset,
|
|
322
333
|
destinationTokenInfo: destinationAsset,
|
|
323
334
|
sendingValue: bnTotalAmount.toString(),
|
|
324
335
|
recipient: params.address,
|
|
325
|
-
|
|
326
|
-
|
|
336
|
+
substrateApi: chainApi,
|
|
337
|
+
sender: params.address,
|
|
338
|
+
destinationChain,
|
|
339
|
+
originChain,
|
|
340
|
+
feeInfo
|
|
327
341
|
});
|
|
328
342
|
const xcmData = {
|
|
329
343
|
originNetworkKey: originAsset.originChain,
|
|
@@ -11,6 +11,7 @@ var _swap = require("@subwallet/extension-base/core/logic-validation/swap");
|
|
|
11
11
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
12
12
|
var _types = require("@subwallet/extension-base/types");
|
|
13
13
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
14
|
+
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
14
15
|
var _bignumber = _interopRequireWildcard(require("bignumber.js"));
|
|
15
16
|
var _smartContract = require("../../balance-service/transfer/smart-contract");
|
|
16
17
|
var _token = require("../../balance-service/transfer/token");
|
|
@@ -125,10 +126,11 @@ const createSwapRequest = async params => {
|
|
|
125
126
|
};
|
|
126
127
|
};
|
|
127
128
|
class SimpleSwapHandler {
|
|
128
|
-
constructor(chainService, balanceService) {
|
|
129
|
+
constructor(chainService, balanceService, feeService) {
|
|
129
130
|
this.swapBaseHandler = new _baseHandler.SwapBaseHandler({
|
|
130
131
|
chainService,
|
|
131
132
|
balanceService,
|
|
133
|
+
feeService,
|
|
132
134
|
providerName: 'SimpleSwap',
|
|
133
135
|
providerSlug: _types.SwapProviderId.SIMPLE_SWAP
|
|
134
136
|
});
|
|
@@ -423,11 +425,29 @@ class SimpleSwapHandler {
|
|
|
423
425
|
});
|
|
424
426
|
extrinsic = submittableExtrinsic;
|
|
425
427
|
} else {
|
|
428
|
+
const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee((0, _getId.getId)(), chainInfo.slug, 'evm');
|
|
426
429
|
if ((0, _utils._isNativeToken)(fromAsset)) {
|
|
427
|
-
const [transactionConfig] = await (0, _smartContract.getEVMTransactionObject)(
|
|
430
|
+
const [transactionConfig] = await (0, _smartContract.getEVMTransactionObject)({
|
|
431
|
+
evmApi: this.chainService.getEvmApi(chainInfo.slug),
|
|
432
|
+
transferAll: false,
|
|
433
|
+
value: quote.fromAmount,
|
|
434
|
+
from: address,
|
|
435
|
+
to: addressFrom,
|
|
436
|
+
chain: chainInfo.slug,
|
|
437
|
+
feeInfo
|
|
438
|
+
});
|
|
428
439
|
extrinsic = transactionConfig;
|
|
429
440
|
} else {
|
|
430
|
-
const [transactionConfig] = await (0, _smartContract.getERC20TransactionObject)(
|
|
441
|
+
const [transactionConfig] = await (0, _smartContract.getERC20TransactionObject)({
|
|
442
|
+
assetAddress: (0, _utils._getContractAddressOfToken)(fromAsset),
|
|
443
|
+
chain: chainInfo.slug,
|
|
444
|
+
evmApi: this.chainService.getEvmApi(chainInfo.slug),
|
|
445
|
+
feeInfo,
|
|
446
|
+
from: address,
|
|
447
|
+
to: addressFrom,
|
|
448
|
+
value: quote.fromAmount,
|
|
449
|
+
transferAll: false
|
|
450
|
+
});
|
|
431
451
|
extrinsic = transactionConfig;
|
|
432
452
|
}
|
|
433
453
|
}
|
|
@@ -145,28 +145,28 @@ class SwapService {
|
|
|
145
145
|
_swap._SUPPORTED_SWAP_PROVIDERS.forEach(providerId => {
|
|
146
146
|
switch (providerId) {
|
|
147
147
|
case _swap.SwapProviderId.CHAIN_FLIP_TESTNET:
|
|
148
|
-
this.handlers[providerId] = new _chainflipHandler.ChainflipSwapHandler(this.chainService, this.state.balanceService);
|
|
148
|
+
this.handlers[providerId] = new _chainflipHandler.ChainflipSwapHandler(this.chainService, this.state.balanceService, this.state.feeService);
|
|
149
149
|
break;
|
|
150
150
|
case _swap.SwapProviderId.CHAIN_FLIP_MAINNET:
|
|
151
|
-
this.handlers[providerId] = new _chainflipHandler.ChainflipSwapHandler(this.chainService, this.state.balanceService, false);
|
|
151
|
+
this.handlers[providerId] = new _chainflipHandler.ChainflipSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, false);
|
|
152
152
|
break;
|
|
153
153
|
case _swap.SwapProviderId.HYDRADX_TESTNET:
|
|
154
|
-
this.handlers[providerId] = new _hydradxHandler.HydradxHandler(this.chainService, this.state.balanceService);
|
|
154
|
+
this.handlers[providerId] = new _hydradxHandler.HydradxHandler(this.chainService, this.state.balanceService, this.state.feeService);
|
|
155
155
|
break;
|
|
156
156
|
case _swap.SwapProviderId.HYDRADX_MAINNET:
|
|
157
|
-
this.handlers[providerId] = new _hydradxHandler.HydradxHandler(this.chainService, this.state.balanceService, false);
|
|
157
|
+
this.handlers[providerId] = new _hydradxHandler.HydradxHandler(this.chainService, this.state.balanceService, this.state.feeService, false);
|
|
158
158
|
break;
|
|
159
159
|
case _swap.SwapProviderId.POLKADOT_ASSET_HUB:
|
|
160
|
-
this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, 'statemint');
|
|
160
|
+
this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'statemint');
|
|
161
161
|
break;
|
|
162
162
|
case _swap.SwapProviderId.KUSAMA_ASSET_HUB:
|
|
163
|
-
this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, 'statemine');
|
|
163
|
+
this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'statemine');
|
|
164
164
|
break;
|
|
165
165
|
case _swap.SwapProviderId.ROCOCO_ASSET_HUB:
|
|
166
|
-
this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, 'rococo_assethub');
|
|
166
|
+
this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'rococo_assethub');
|
|
167
167
|
break;
|
|
168
168
|
case _swap.SwapProviderId.SIMPLE_SWAP:
|
|
169
|
-
this.handlers[providerId] = new _simpleswapHandler.SimpleSwapHandler(this.chainService, this.state.balanceService);
|
|
169
|
+
this.handlers[providerId] = new _simpleswapHandler.SimpleSwapHandler(this.chainService, this.state.balanceService, this.state.feeService);
|
|
170
170
|
break;
|
|
171
171
|
default:
|
|
172
172
|
throw new Error('Unsupported provider');
|
|
@@ -22,8 +22,10 @@ var _types = require("@subwallet/extension-base/types");
|
|
|
22
22
|
var _utils4 = require("@subwallet/extension-base/utils");
|
|
23
23
|
var _mergeTransactionAndSignature = require("@subwallet/extension-base/utils/eth/mergeTransactionAndSignature");
|
|
24
24
|
var _parseTransaction = require("@subwallet/extension-base/utils/eth/parseTransaction");
|
|
25
|
+
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
25
26
|
var _number = require("@subwallet/extension-base/utils/number");
|
|
26
27
|
var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
|
|
28
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
27
29
|
var _ethereumjsUtil = require("ethereumjs-util");
|
|
28
30
|
var _ethers = require("ethers");
|
|
29
31
|
var _eventemitter = _interopRequireDefault(require("eventemitter3"));
|
|
@@ -90,6 +92,8 @@ class TransactionService {
|
|
|
90
92
|
(0, _transfer.checkSupportForAction)(validationResponse, blockedActionsMap);
|
|
91
93
|
}
|
|
92
94
|
const transaction = transactionInput.transaction;
|
|
95
|
+
const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(chain);
|
|
96
|
+
const tokenPayFeeInfo = transactionInput.nonNativeTokenPayFeeSlug ? this.chainService.getAssetBySlug(transactionInput.nonNativeTokenPayFeeSlug) : undefined;
|
|
93
97
|
|
|
94
98
|
// Check duplicated transaction
|
|
95
99
|
validationResponse.errors.push(...this.checkDuplicate(transactionInput));
|
|
@@ -99,6 +103,7 @@ class TransactionService {
|
|
|
99
103
|
if (!chainInfo) {
|
|
100
104
|
validationResponse.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.INTERNAL_ERROR, (0, _i18next.t)('Cannot find network')));
|
|
101
105
|
}
|
|
106
|
+
const substrateApi = this.state.chainService.getSubstrateApi(chainInfo.slug);
|
|
102
107
|
const evmApi = this.state.chainService.getEvmApi(chainInfo.slug);
|
|
103
108
|
const tonApi = this.state.chainService.getTonApi(chainInfo.slug);
|
|
104
109
|
const isNoEvmApi = transaction && !(0, _helpers.isSubstrateTransaction)(transaction) && !(0, _helpers.isTonTransaction)(transaction) && !evmApi; // todo: should split isEvmTx && isNoEvmApi. Because other chains type also has no Evm Api
|
|
@@ -108,12 +113,13 @@ class TransactionService {
|
|
|
108
113
|
}
|
|
109
114
|
|
|
110
115
|
// Estimate fee for transaction
|
|
111
|
-
|
|
116
|
+
const id = (0, _getId.getId)();
|
|
117
|
+
const feeInfo = await this.state.feeService.subscribeChainFee(id, chain, 'evm');
|
|
118
|
+
validationResponse.estimateFee = await (0, _transfer.estimateFeeForTransaction)(validationResponse, transaction, chainInfo, evmApi, substrateApi, feeInfo, nativeTokenInfo, tokenPayFeeInfo, transactionInput.isTransferLocalTokenAndPayThatTokenAsFee);
|
|
112
119
|
const chainInfoMap = this.state.chainService.getChainInfoMap();
|
|
113
120
|
|
|
114
121
|
// Check account signing transaction
|
|
115
122
|
(0, _transfer.checkSigningAccountForTransaction)(validationResponse, chainInfoMap);
|
|
116
|
-
const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(chain);
|
|
117
123
|
const nativeTokenAvailable = await this.state.balanceService.getTransferableBalance(address, chain, nativeTokenInfo.slug, extrinsicType);
|
|
118
124
|
|
|
119
125
|
// Check available balance against transaction fee
|
|
@@ -912,6 +918,13 @@ class TransactionService {
|
|
|
912
918
|
if (!payload.from) {
|
|
913
919
|
payload.from = address;
|
|
914
920
|
}
|
|
921
|
+
if (!payload.estimateGas) {
|
|
922
|
+
if (payload.maxFeePerGas) {
|
|
923
|
+
payload.estimateGas = new _bignumber.default((0, _utils4.anyNumberToBN)(payload.maxFeePerGas).toNumber()).multipliedBy(payload.gas || '0').toFixed(0);
|
|
924
|
+
} else {
|
|
925
|
+
payload.estimateGas = new _bignumber.default((0, _utils4.anyNumberToBN)(payload.gasPrice).toNumber()).multipliedBy(payload.gas || '0').toFixed(0);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
915
928
|
const isExternal = !!account.isExternal;
|
|
916
929
|
const isInjected = !!account.isInjected;
|
|
917
930
|
if (!hasError) {
|
|
@@ -1064,13 +1077,18 @@ class TransactionService {
|
|
|
1064
1077
|
return emitter;
|
|
1065
1078
|
}
|
|
1066
1079
|
signAndSendSubstrateTransaction(_ref10) {
|
|
1080
|
+
var _this$state$chainServ;
|
|
1067
1081
|
let {
|
|
1068
1082
|
address,
|
|
1069
1083
|
chain,
|
|
1084
|
+
feeCustom,
|
|
1070
1085
|
id,
|
|
1086
|
+
nonNativeTokenPayFeeSlug,
|
|
1071
1087
|
transaction,
|
|
1072
1088
|
url
|
|
1073
1089
|
} = _ref10;
|
|
1090
|
+
const tip = (feeCustom === null || feeCustom === void 0 ? void 0 : feeCustom.tip) || '0';
|
|
1091
|
+
const feeAssetId = nonNativeTokenPayFeeSlug ? (_this$state$chainServ = this.state.chainService.getAssetBySlug(nonNativeTokenPayFeeSlug).metadata) === null || _this$state$chainServ === void 0 ? void 0 : _this$state$chainServ.multilocation : undefined;
|
|
1074
1092
|
const emitter = new _eventemitter.default();
|
|
1075
1093
|
const eventData = {
|
|
1076
1094
|
id,
|
|
@@ -1096,7 +1114,9 @@ class TransactionService {
|
|
|
1096
1114
|
};
|
|
1097
1115
|
}
|
|
1098
1116
|
},
|
|
1099
|
-
|
|
1117
|
+
tip,
|
|
1118
|
+
withSignedTransaction: true,
|
|
1119
|
+
assetId: feeAssetId
|
|
1100
1120
|
};
|
|
1101
1121
|
|
|
1102
1122
|
// if (_isRuntimeUpdated(signedExtensions)) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/cjs/types/fee/evm.js
CHANGED
|
@@ -1 +1,16 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FeeOptionKey = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
let FeeOptionKey;
|
|
10
|
+
exports.FeeOptionKey = FeeOptionKey;
|
|
11
|
+
(function (FeeOptionKey) {
|
|
12
|
+
FeeOptionKey["SLOW"] = "slow";
|
|
13
|
+
FeeOptionKey["AVERAGE"] = "average";
|
|
14
|
+
FeeOptionKey["FAST"] = "fast";
|
|
15
|
+
FeeOptionKey["DEFAULT"] = "default";
|
|
16
|
+
})(FeeOptionKey || (exports.FeeOptionKey = FeeOptionKey = {}));
|
package/cjs/types/fee/index.js
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
var _base = require("./base");
|
|
7
|
+
Object.keys(_base).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _base[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _base[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
6
17
|
var _evm = require("./evm");
|
|
7
18
|
Object.keys(_evm).forEach(function (key) {
|
|
8
19
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -14,14 +25,36 @@ Object.keys(_evm).forEach(function (key) {
|
|
|
14
25
|
}
|
|
15
26
|
});
|
|
16
27
|
});
|
|
17
|
-
var
|
|
18
|
-
Object.keys(
|
|
28
|
+
var _option = require("./option");
|
|
29
|
+
Object.keys(_option).forEach(function (key) {
|
|
30
|
+
if (key === "default" || key === "__esModule") return;
|
|
31
|
+
if (key in exports && exports[key] === _option[key]) return;
|
|
32
|
+
Object.defineProperty(exports, key, {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return _option[key];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
var _subscription = require("./subscription");
|
|
40
|
+
Object.keys(_subscription).forEach(function (key) {
|
|
41
|
+
if (key === "default" || key === "__esModule") return;
|
|
42
|
+
if (key in exports && exports[key] === _subscription[key]) return;
|
|
43
|
+
Object.defineProperty(exports, key, {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _subscription[key];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
var _substrate = require("./substrate");
|
|
51
|
+
Object.keys(_substrate).forEach(function (key) {
|
|
19
52
|
if (key === "default" || key === "__esModule") return;
|
|
20
|
-
if (key in exports && exports[key] ===
|
|
53
|
+
if (key in exports && exports[key] === _substrate[key]) return;
|
|
21
54
|
Object.defineProperty(exports, key, {
|
|
22
55
|
enumerable: true,
|
|
23
56
|
get: function () {
|
|
24
|
-
return
|
|
57
|
+
return _substrate[key];
|
|
25
58
|
}
|
|
26
59
|
});
|
|
27
60
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.combineSubstrateFee = exports.combineEthFee = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
|
|
10
|
+
const combineEthFee = (feeInfo, feeOptions, feeCustom) => {
|
|
11
|
+
let maxFeePerGas;
|
|
12
|
+
let maxPriorityFeePerGas;
|
|
13
|
+
if (feeOptions && feeOptions !== 'custom') {
|
|
14
|
+
var _feeInfo$options, _feeInfo$options2;
|
|
15
|
+
maxFeePerGas = (_feeInfo$options = feeInfo.options) === null || _feeInfo$options === void 0 ? void 0 : _feeInfo$options[feeOptions].maxFeePerGas;
|
|
16
|
+
maxPriorityFeePerGas = (_feeInfo$options2 = feeInfo.options) === null || _feeInfo$options2 === void 0 ? void 0 : _feeInfo$options2[feeOptions].maxPriorityFeePerGas;
|
|
17
|
+
} else if (feeOptions === 'custom' && feeCustom) {
|
|
18
|
+
maxFeePerGas = feeCustom.maxFeePerGas;
|
|
19
|
+
maxPriorityFeePerGas = feeCustom.maxPriorityFeePerGas;
|
|
20
|
+
} else {
|
|
21
|
+
var _feeInfo$options3, _feeInfo$options4;
|
|
22
|
+
maxFeePerGas = (_feeInfo$options3 = feeInfo.options) === null || _feeInfo$options3 === void 0 ? void 0 : _feeInfo$options3[feeInfo.options.default].maxFeePerGas;
|
|
23
|
+
maxPriorityFeePerGas = (_feeInfo$options4 = feeInfo.options) === null || _feeInfo$options4 === void 0 ? void 0 : _feeInfo$options4[feeInfo.options.default].maxPriorityFeePerGas;
|
|
24
|
+
}
|
|
25
|
+
if (feeInfo.gasPrice) {
|
|
26
|
+
return {
|
|
27
|
+
gasPrice: feeInfo.gasPrice
|
|
28
|
+
};
|
|
29
|
+
} else {
|
|
30
|
+
return {
|
|
31
|
+
maxFeePerGas,
|
|
32
|
+
maxPriorityFeePerGas
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.combineEthFee = combineEthFee;
|
|
37
|
+
const combineSubstrateFee = (_fee, _feeOptions, feeCustom) => {
|
|
38
|
+
let tip;
|
|
39
|
+
if (_feeOptions && _feeOptions !== 'custom') {
|
|
40
|
+
tip = _fee.options[_feeOptions].tip;
|
|
41
|
+
} else if (_feeOptions === 'custom' && feeCustom && 'tip' in feeCustom) {
|
|
42
|
+
tip = feeCustom.tip;
|
|
43
|
+
} else {
|
|
44
|
+
tip = _fee.options[_fee.options.default].tip;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
tip
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
exports.combineSubstrateFee = combineSubstrateFee;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _combine = require("./combine");
|
|
7
|
+
Object.keys(_combine).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _combine[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _combine[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _transfer = require("./transfer");
|
|
18
|
+
Object.keys(_transfer).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _transfer[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _transfer[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|