@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.
Files changed (137) hide show
  1. package/background/KoniTypes.d.ts +12 -2
  2. package/cjs/constants/index.js +6 -3
  3. package/cjs/core/logic-validation/request.js +26 -19
  4. package/cjs/core/logic-validation/transfer.js +18 -17
  5. package/cjs/koni/api/contract-handler/evm/web3.js +3 -3
  6. package/cjs/koni/api/staking/bonding/utils.js +1 -1
  7. package/cjs/koni/background/handlers/Extension.js +289 -124
  8. package/cjs/koni/background/handlers/State.js +1 -8
  9. package/cjs/packageInfo.js +1 -1
  10. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +14 -2
  11. package/cjs/services/balance-service/index.js +13 -0
  12. package/cjs/services/balance-service/transfer/smart-contract.js +47 -33
  13. package/cjs/services/balance-service/transfer/token.js +5 -4
  14. package/cjs/services/balance-service/transfer/xcm/availBridge.js +14 -18
  15. package/cjs/services/balance-service/transfer/xcm/index.js +30 -61
  16. package/cjs/services/balance-service/transfer/xcm/polygonBridge.js +13 -17
  17. package/cjs/services/balance-service/transfer/xcm/posBridge.js +20 -21
  18. package/cjs/services/balance-service/transfer/xcm/snowBridge.js +7 -7
  19. package/cjs/services/balance-service/transfer/xcm/utils.js +2 -2
  20. package/cjs/services/chain-service/constants.js +3 -3
  21. package/cjs/services/chain-service/index.js +22 -0
  22. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +7 -12
  23. package/cjs/services/earning-service/handlers/native-staking/tao.js +121 -30
  24. package/cjs/services/earning-service/handlers/nomination-pool/index.js +1 -1
  25. package/cjs/services/earning-service/handlers/special.js +34 -14
  26. package/cjs/services/fee-service/interfaces.js +1 -0
  27. package/cjs/services/fee-service/service.js +111 -0
  28. package/cjs/services/fee-service/utils/index.js +99 -113
  29. package/cjs/services/storage-service/db-stores/Balance.js +3 -0
  30. package/cjs/services/swap-service/handler/asset-hub/handler.js +21 -6
  31. package/cjs/services/swap-service/handler/asset-hub/router.js +1 -1
  32. package/cjs/services/swap-service/handler/asset-hub/utils.js +4 -4
  33. package/cjs/services/swap-service/handler/base-handler.js +2 -0
  34. package/cjs/services/swap-service/handler/chainflip-handler.js +25 -4
  35. package/cjs/services/swap-service/handler/hydradx-handler.js +20 -6
  36. package/cjs/services/swap-service/handler/simpleswap-handler.js +23 -3
  37. package/cjs/services/swap-service/index.js +8 -8
  38. package/cjs/services/transaction-service/index.js +23 -3
  39. package/cjs/types/balance/transfer.js +1 -0
  40. package/cjs/types/fee/base.js +1 -0
  41. package/cjs/types/fee/evm.js +16 -1
  42. package/cjs/types/fee/index.js +37 -4
  43. package/cjs/types/fee/option.js +1 -0
  44. package/cjs/types/fee/subscription.js +1 -0
  45. package/cjs/types/fee/substrate.js +1 -0
  46. package/cjs/types/fee/ton.js +1 -0
  47. package/cjs/utils/fee/combine.js +50 -0
  48. package/cjs/utils/fee/index.js +27 -0
  49. package/cjs/utils/fee/transfer.js +374 -0
  50. package/cjs/utils/index.js +12 -0
  51. package/constants/index.d.ts +1 -0
  52. package/constants/index.js +1 -0
  53. package/core/logic-validation/request.js +17 -10
  54. package/core/logic-validation/transfer.d.ts +5 -5
  55. package/core/logic-validation/transfer.js +20 -19
  56. package/core/substrate/xcm-parser.d.ts +1 -1
  57. package/koni/api/contract-handler/evm/web3.js +3 -3
  58. package/koni/api/staking/bonding/utils.js +1 -1
  59. package/koni/background/handlers/Extension.d.ts +4 -3
  60. package/koni/background/handlers/Extension.js +273 -108
  61. package/koni/background/handlers/State.js +1 -8
  62. package/package.json +55 -5
  63. package/packageInfo.js +1 -1
  64. package/services/balance-service/helpers/subscribe/substrate/index.js +14 -2
  65. package/services/balance-service/index.d.ts +1 -0
  66. package/services/balance-service/index.js +13 -0
  67. package/services/balance-service/transfer/smart-contract.d.ts +24 -4
  68. package/services/balance-service/transfer/smart-contract.js +45 -33
  69. package/services/balance-service/transfer/token.js +6 -5
  70. package/services/balance-service/transfer/xcm/availBridge.d.ts +3 -2
  71. package/services/balance-service/transfer/xcm/availBridge.js +11 -15
  72. package/services/balance-service/transfer/xcm/index.d.ts +12 -11
  73. package/services/balance-service/transfer/xcm/index.js +29 -58
  74. package/services/balance-service/transfer/xcm/polygonBridge.d.ts +4 -3
  75. package/services/balance-service/transfer/xcm/polygonBridge.js +13 -17
  76. package/services/balance-service/transfer/xcm/posBridge.d.ts +4 -3
  77. package/services/balance-service/transfer/xcm/posBridge.js +18 -19
  78. package/services/balance-service/transfer/xcm/snowBridge.d.ts +2 -1
  79. package/services/balance-service/transfer/xcm/snowBridge.js +7 -7
  80. package/services/balance-service/transfer/xcm/utils.js +2 -2
  81. package/services/chain-service/constants.js +3 -3
  82. package/services/chain-service/index.d.ts +6 -1
  83. package/services/chain-service/index.js +22 -0
  84. package/services/earning-service/handlers/liquid-staking/stella-swap.js +7 -12
  85. package/services/earning-service/handlers/native-staking/tao.d.ts +7 -2
  86. package/services/earning-service/handlers/native-staking/tao.js +119 -29
  87. package/services/earning-service/handlers/nomination-pool/index.js +1 -1
  88. package/services/earning-service/handlers/special.js +36 -16
  89. package/services/fee-service/interfaces.d.ts +5 -0
  90. package/services/fee-service/interfaces.js +1 -0
  91. package/services/fee-service/service.d.ts +4 -1
  92. package/services/fee-service/service.js +111 -0
  93. package/services/fee-service/utils/index.d.ts +8 -2
  94. package/services/fee-service/utils/index.js +92 -108
  95. package/services/storage-service/db-stores/Balance.d.ts +1 -0
  96. package/services/storage-service/db-stores/Balance.js +3 -0
  97. package/services/swap-service/handler/asset-hub/handler.d.ts +2 -1
  98. package/services/swap-service/handler/asset-hub/handler.js +21 -6
  99. package/services/swap-service/handler/asset-hub/router.js +2 -2
  100. package/services/swap-service/handler/asset-hub/utils.d.ts +1 -1
  101. package/services/swap-service/handler/asset-hub/utils.js +2 -2
  102. package/services/swap-service/handler/base-handler.d.ts +4 -1
  103. package/services/swap-service/handler/base-handler.js +2 -0
  104. package/services/swap-service/handler/chainflip-handler.d.ts +2 -1
  105. package/services/swap-service/handler/chainflip-handler.js +24 -3
  106. package/services/swap-service/handler/hydradx-handler.d.ts +2 -1
  107. package/services/swap-service/handler/hydradx-handler.js +19 -5
  108. package/services/swap-service/handler/simpleswap-handler.d.ts +2 -1
  109. package/services/swap-service/handler/simpleswap-handler.js +23 -3
  110. package/services/swap-service/index.js +8 -8
  111. package/services/transaction-service/index.js +23 -3
  112. package/services/transaction-service/types.d.ts +5 -4
  113. package/types/balance/transfer.d.ts +25 -0
  114. package/types/balance/transfer.js +1 -0
  115. package/types/fee/base.d.ts +8 -0
  116. package/types/fee/base.js +1 -0
  117. package/types/fee/evm.d.ts +46 -16
  118. package/types/fee/evm.js +10 -1
  119. package/types/fee/index.d.ts +4 -1
  120. package/types/fee/index.js +4 -1
  121. package/types/fee/option.d.ts +8 -0
  122. package/types/fee/option.js +1 -0
  123. package/types/fee/subscription.d.ts +12 -0
  124. package/types/fee/subscription.js +1 -0
  125. package/types/fee/substrate.d.ts +15 -0
  126. package/types/fee/substrate.js +1 -0
  127. package/types/fee/ton.d.ts +18 -0
  128. package/types/fee/ton.js +1 -0
  129. package/types/transaction/request.d.ts +13 -3
  130. package/utils/fee/combine.d.ts +12 -0
  131. package/utils/fee/combine.js +42 -0
  132. package/utils/fee/index.d.ts +2 -0
  133. package/utils/fee/index.js +5 -0
  134. package/utils/fee/transfer.d.ts +22 -0
  135. package/utils/fee/transfer.js +363 -0
  136. package/utils/index.d.ts +1 -0
  137. 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 > 2 && arguments[2] !== undefined ? arguments[2] : true;
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)(chainInfo, address, depositAddressResponse.depositAddress, quote.fromAmount, false, this.chainService.getEvmApi(chainInfo.slug));
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)((0, _utils._getContractAddressOfToken)(fromAsset), chainInfo, address, depositAddressResponse.depositAddress, quote.fromAmount, false, this.chainService.getEvmApi(chainInfo.slug));
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 > 2 && arguments[2] !== undefined ? arguments[2] : true;
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
- chainInfoMap: this.chainService.getChainInfoMap(),
116
- substrateApi: xcmOriginSubstrateApi
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
- chainInfoMap: this.chainService.getChainInfoMap(),
326
- substrateApi: chainApi
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)(chainInfo, address, addressFrom, quote.fromAmount, false, this.chainService.getEvmApi(chainInfo.slug));
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)((0, _utils._getContractAddressOfToken)(fromAsset), chainInfo, address, addressFrom, quote.fromAmount, false, this.chainService.getEvmApi(chainInfo.slug));
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
- validationResponse.estimateFee = await (0, _transfer.estimateFeeForTransaction)(validationResponse, transaction, chainInfo, evmApi);
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
- withSignedTransaction: true
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";
@@ -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 = {}));
@@ -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 _fee = require("./fee");
18
- Object.keys(_fee).forEach(function (key) {
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] === _fee[key]) return;
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 _fee[key];
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
+ });