@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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SwapError } from '@subwallet/extension-base/background/errors/SwapError';
|
|
2
2
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
3
|
+
import FeeService from '@subwallet/extension-base/services/fee-service/service';
|
|
3
4
|
import { BaseStepDetail, CommonOptimalPath, CommonStepFeeInfo, OptimalSwapPathParams, SwapEarlyValidation, SwapProviderId, SwapQuote, SwapRequest, SwapSubmitParams, SwapSubmitStepData, ValidateSwapProcessParams } from '@subwallet/extension-base/types';
|
|
4
5
|
import { BalanceService } from '../../balance-service';
|
|
5
6
|
import { ChainService } from '../../chain-service';
|
|
@@ -8,7 +9,7 @@ export declare const simpleSwapApiKey: string;
|
|
|
8
9
|
export declare class SimpleSwapHandler implements SwapBaseInterface {
|
|
9
10
|
private swapBaseHandler;
|
|
10
11
|
providerSlug: SwapProviderId;
|
|
11
|
-
constructor(chainService: ChainService, balanceService: BalanceService);
|
|
12
|
+
constructor(chainService: ChainService, balanceService: BalanceService, feeService: FeeService);
|
|
12
13
|
validateSwapProcess(params: ValidateSwapProcessParams): Promise<TransactionError[]>;
|
|
13
14
|
get chainService(): ChainService;
|
|
14
15
|
get balanceService(): BalanceService;
|
|
@@ -8,6 +8,7 @@ import { _getSimpleSwapEarlyValidationError } from '@subwallet/extension-base/co
|
|
|
8
8
|
import { _getAssetDecimals, _getChainNativeTokenSlug, _getContractAddressOfToken, _isChainSubstrateCompatible, _isNativeToken } from '@subwallet/extension-base/services/chain-service/utils';
|
|
9
9
|
import { BasicTxErrorType, CommonStepType, SwapErrorType, SwapFeeType, SwapProviderId, SwapStepType } from '@subwallet/extension-base/types';
|
|
10
10
|
import { _reformatAddressWithChain, formatNumber } from '@subwallet/extension-base/utils';
|
|
11
|
+
import { getId } from '@subwallet/extension-base/utils/getId';
|
|
11
12
|
import BigN, { BigNumber } from 'bignumber.js';
|
|
12
13
|
import { getERC20TransactionObject, getEVMTransactionObject } from "../../balance-service/transfer/smart-contract.js";
|
|
13
14
|
import { createTransferExtrinsic, getTransferMockTxFee } from "../../balance-service/transfer/token.js";
|
|
@@ -116,10 +117,11 @@ const createSwapRequest = async params => {
|
|
|
116
117
|
};
|
|
117
118
|
};
|
|
118
119
|
export class SimpleSwapHandler {
|
|
119
|
-
constructor(chainService, balanceService) {
|
|
120
|
+
constructor(chainService, balanceService, feeService) {
|
|
120
121
|
this.swapBaseHandler = new SwapBaseHandler({
|
|
121
122
|
chainService,
|
|
122
123
|
balanceService,
|
|
124
|
+
feeService,
|
|
123
125
|
providerName: 'SimpleSwap',
|
|
124
126
|
providerSlug: SwapProviderId.SIMPLE_SWAP
|
|
125
127
|
});
|
|
@@ -414,11 +416,29 @@ export class SimpleSwapHandler {
|
|
|
414
416
|
});
|
|
415
417
|
extrinsic = submittableExtrinsic;
|
|
416
418
|
} else {
|
|
419
|
+
const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee(getId(), chainInfo.slug, 'evm');
|
|
417
420
|
if (_isNativeToken(fromAsset)) {
|
|
418
|
-
const [transactionConfig] = await getEVMTransactionObject(
|
|
421
|
+
const [transactionConfig] = await getEVMTransactionObject({
|
|
422
|
+
evmApi: this.chainService.getEvmApi(chainInfo.slug),
|
|
423
|
+
transferAll: false,
|
|
424
|
+
value: quote.fromAmount,
|
|
425
|
+
from: address,
|
|
426
|
+
to: addressFrom,
|
|
427
|
+
chain: chainInfo.slug,
|
|
428
|
+
feeInfo
|
|
429
|
+
});
|
|
419
430
|
extrinsic = transactionConfig;
|
|
420
431
|
} else {
|
|
421
|
-
const [transactionConfig] = await getERC20TransactionObject(
|
|
432
|
+
const [transactionConfig] = await getERC20TransactionObject({
|
|
433
|
+
assetAddress: _getContractAddressOfToken(fromAsset),
|
|
434
|
+
chain: chainInfo.slug,
|
|
435
|
+
evmApi: this.chainService.getEvmApi(chainInfo.slug),
|
|
436
|
+
feeInfo,
|
|
437
|
+
from: address,
|
|
438
|
+
to: addressFrom,
|
|
439
|
+
value: quote.fromAmount,
|
|
440
|
+
transferAll: false
|
|
441
|
+
});
|
|
422
442
|
extrinsic = transactionConfig;
|
|
423
443
|
}
|
|
424
444
|
}
|
|
@@ -138,28 +138,28 @@ export class SwapService {
|
|
|
138
138
|
_SUPPORTED_SWAP_PROVIDERS.forEach(providerId => {
|
|
139
139
|
switch (providerId) {
|
|
140
140
|
case SwapProviderId.CHAIN_FLIP_TESTNET:
|
|
141
|
-
this.handlers[providerId] = new ChainflipSwapHandler(this.chainService, this.state.balanceService);
|
|
141
|
+
this.handlers[providerId] = new ChainflipSwapHandler(this.chainService, this.state.balanceService, this.state.feeService);
|
|
142
142
|
break;
|
|
143
143
|
case SwapProviderId.CHAIN_FLIP_MAINNET:
|
|
144
|
-
this.handlers[providerId] = new ChainflipSwapHandler(this.chainService, this.state.balanceService, false);
|
|
144
|
+
this.handlers[providerId] = new ChainflipSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, false);
|
|
145
145
|
break;
|
|
146
146
|
case SwapProviderId.HYDRADX_TESTNET:
|
|
147
|
-
this.handlers[providerId] = new HydradxHandler(this.chainService, this.state.balanceService);
|
|
147
|
+
this.handlers[providerId] = new HydradxHandler(this.chainService, this.state.balanceService, this.state.feeService);
|
|
148
148
|
break;
|
|
149
149
|
case SwapProviderId.HYDRADX_MAINNET:
|
|
150
|
-
this.handlers[providerId] = new HydradxHandler(this.chainService, this.state.balanceService, false);
|
|
150
|
+
this.handlers[providerId] = new HydradxHandler(this.chainService, this.state.balanceService, this.state.feeService, false);
|
|
151
151
|
break;
|
|
152
152
|
case SwapProviderId.POLKADOT_ASSET_HUB:
|
|
153
|
-
this.handlers[providerId] = new AssetHubSwapHandler(this.chainService, this.state.balanceService, 'statemint');
|
|
153
|
+
this.handlers[providerId] = new AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'statemint');
|
|
154
154
|
break;
|
|
155
155
|
case SwapProviderId.KUSAMA_ASSET_HUB:
|
|
156
|
-
this.handlers[providerId] = new AssetHubSwapHandler(this.chainService, this.state.balanceService, 'statemine');
|
|
156
|
+
this.handlers[providerId] = new AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'statemine');
|
|
157
157
|
break;
|
|
158
158
|
case SwapProviderId.ROCOCO_ASSET_HUB:
|
|
159
|
-
this.handlers[providerId] = new AssetHubSwapHandler(this.chainService, this.state.balanceService, 'rococo_assethub');
|
|
159
|
+
this.handlers[providerId] = new AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'rococo_assethub');
|
|
160
160
|
break;
|
|
161
161
|
case SwapProviderId.SIMPLE_SWAP:
|
|
162
|
-
this.handlers[providerId] = new SimpleSwapHandler(this.chainService, this.state.balanceService);
|
|
162
|
+
this.handlers[providerId] = new SimpleSwapHandler(this.chainService, this.state.balanceService, this.state.feeService);
|
|
163
163
|
break;
|
|
164
164
|
default:
|
|
165
165
|
throw new Error('Unsupported provider');
|
|
@@ -18,8 +18,10 @@ import { BasicTxErrorType, YieldPoolType } from '@subwallet/extension-base/types
|
|
|
18
18
|
import { anyNumberToBN, pairToAccount, reformatAddress } from '@subwallet/extension-base/utils';
|
|
19
19
|
import { mergeTransactionAndSignature } from '@subwallet/extension-base/utils/eth/mergeTransactionAndSignature';
|
|
20
20
|
import { isContractAddress, parseContractInput } from '@subwallet/extension-base/utils/eth/parseTransaction';
|
|
21
|
+
import { getId } from '@subwallet/extension-base/utils/getId';
|
|
21
22
|
import { BN_ZERO } from '@subwallet/extension-base/utils/number';
|
|
22
23
|
import keyring from '@subwallet/ui-keyring';
|
|
24
|
+
import BigN from 'bignumber.js';
|
|
23
25
|
import { addHexPrefix } from 'ethereumjs-util';
|
|
24
26
|
import { ethers } from 'ethers';
|
|
25
27
|
import EventEmitter from 'eventemitter3';
|
|
@@ -83,6 +85,8 @@ export default class TransactionService {
|
|
|
83
85
|
checkSupportForAction(validationResponse, blockedActionsMap);
|
|
84
86
|
}
|
|
85
87
|
const transaction = transactionInput.transaction;
|
|
88
|
+
const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(chain);
|
|
89
|
+
const tokenPayFeeInfo = transactionInput.nonNativeTokenPayFeeSlug ? this.chainService.getAssetBySlug(transactionInput.nonNativeTokenPayFeeSlug) : undefined;
|
|
86
90
|
|
|
87
91
|
// Check duplicated transaction
|
|
88
92
|
validationResponse.errors.push(...this.checkDuplicate(transactionInput));
|
|
@@ -92,6 +96,7 @@ export default class TransactionService {
|
|
|
92
96
|
if (!chainInfo) {
|
|
93
97
|
validationResponse.errors.push(new TransactionError(BasicTxErrorType.INTERNAL_ERROR, t('Cannot find network')));
|
|
94
98
|
}
|
|
99
|
+
const substrateApi = this.state.chainService.getSubstrateApi(chainInfo.slug);
|
|
95
100
|
const evmApi = this.state.chainService.getEvmApi(chainInfo.slug);
|
|
96
101
|
const tonApi = this.state.chainService.getTonApi(chainInfo.slug);
|
|
97
102
|
const isNoEvmApi = transaction && !isSubstrateTransaction(transaction) && !isTonTransaction(transaction) && !evmApi; // todo: should split isEvmTx && isNoEvmApi. Because other chains type also has no Evm Api
|
|
@@ -101,12 +106,13 @@ export default class TransactionService {
|
|
|
101
106
|
}
|
|
102
107
|
|
|
103
108
|
// Estimate fee for transaction
|
|
104
|
-
|
|
109
|
+
const id = getId();
|
|
110
|
+
const feeInfo = await this.state.feeService.subscribeChainFee(id, chain, 'evm');
|
|
111
|
+
validationResponse.estimateFee = await estimateFeeForTransaction(validationResponse, transaction, chainInfo, evmApi, substrateApi, feeInfo, nativeTokenInfo, tokenPayFeeInfo, transactionInput.isTransferLocalTokenAndPayThatTokenAsFee);
|
|
105
112
|
const chainInfoMap = this.state.chainService.getChainInfoMap();
|
|
106
113
|
|
|
107
114
|
// Check account signing transaction
|
|
108
115
|
checkSigningAccountForTransaction(validationResponse, chainInfoMap);
|
|
109
|
-
const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(chain);
|
|
110
116
|
const nativeTokenAvailable = await this.state.balanceService.getTransferableBalance(address, chain, nativeTokenInfo.slug, extrinsicType);
|
|
111
117
|
|
|
112
118
|
// Check available balance against transaction fee
|
|
@@ -898,6 +904,13 @@ export default class TransactionService {
|
|
|
898
904
|
if (!payload.from) {
|
|
899
905
|
payload.from = address;
|
|
900
906
|
}
|
|
907
|
+
if (!payload.estimateGas) {
|
|
908
|
+
if (payload.maxFeePerGas) {
|
|
909
|
+
payload.estimateGas = new BigN(anyNumberToBN(payload.maxFeePerGas).toNumber()).multipliedBy(payload.gas || '0').toFixed(0);
|
|
910
|
+
} else {
|
|
911
|
+
payload.estimateGas = new BigN(anyNumberToBN(payload.gasPrice).toNumber()).multipliedBy(payload.gas || '0').toFixed(0);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
901
914
|
const isExternal = !!account.isExternal;
|
|
902
915
|
const isInjected = !!account.isInjected;
|
|
903
916
|
if (!hasError) {
|
|
@@ -1050,10 +1063,15 @@ export default class TransactionService {
|
|
|
1050
1063
|
signAndSendSubstrateTransaction({
|
|
1051
1064
|
address,
|
|
1052
1065
|
chain,
|
|
1066
|
+
feeCustom,
|
|
1053
1067
|
id,
|
|
1068
|
+
nonNativeTokenPayFeeSlug,
|
|
1054
1069
|
transaction,
|
|
1055
1070
|
url
|
|
1056
1071
|
}) {
|
|
1072
|
+
var _this$state$chainServ;
|
|
1073
|
+
const tip = (feeCustom === null || feeCustom === void 0 ? void 0 : feeCustom.tip) || '0';
|
|
1074
|
+
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;
|
|
1057
1075
|
const emitter = new EventEmitter();
|
|
1058
1076
|
const eventData = {
|
|
1059
1077
|
id,
|
|
@@ -1079,7 +1097,9 @@ export default class TransactionService {
|
|
|
1079
1097
|
};
|
|
1080
1098
|
}
|
|
1081
1099
|
},
|
|
1082
|
-
|
|
1100
|
+
tip,
|
|
1101
|
+
withSignedTransaction: true,
|
|
1102
|
+
assetId: feeAssetId
|
|
1083
1103
|
};
|
|
1084
1104
|
|
|
1085
1105
|
// if (_isRuntimeUpdated(signedExtensions)) {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ChainType, ExtrinsicDataTypeMap, ExtrinsicStatus, ExtrinsicType, FeeData, ValidateTransactionResponse } from '@subwallet/extension-base/background/KoniTypes';
|
|
2
2
|
import { TonTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
|
|
3
|
-
import { BaseRequestSign } from '@subwallet/extension-base/types';
|
|
3
|
+
import { BaseRequestSign, TransactionFee } from '@subwallet/extension-base/types';
|
|
4
4
|
import EventEmitter from 'eventemitter3';
|
|
5
5
|
import { TransactionConfig } from 'web3-core';
|
|
6
6
|
import { SubmittableExtrinsic } from '@polkadot/api/promise/types';
|
|
7
7
|
import { EventRecord } from '@polkadot/types/interfaces';
|
|
8
|
-
export interface SWTransaction extends ValidateTransactionResponse, Partial<Pick<BaseRequestSign, 'ignoreWarnings'
|
|
8
|
+
export interface SWTransaction extends ValidateTransactionResponse, Partial<Pick<BaseRequestSign, 'ignoreWarnings'>>, TransactionFee {
|
|
9
9
|
id: string;
|
|
10
10
|
url?: string;
|
|
11
11
|
isInternal: boolean;
|
|
@@ -25,17 +25,18 @@ export interface SWTransaction extends ValidateTransactionResponse, Partial<Pick
|
|
|
25
25
|
}
|
|
26
26
|
export declare type SWTransactionResult = Omit<SWTransaction, 'transaction' | 'additionalValidator' | 'eventsHandler'>;
|
|
27
27
|
declare type SwInputBase = Pick<SWTransaction, 'address' | 'url' | 'data' | 'extrinsicType' | 'chain' | 'chainType' | 'ignoreWarnings' | 'transferNativeAmount'> & Partial<Pick<SWTransaction, 'additionalValidator' | 'eventsHandler'>>;
|
|
28
|
-
export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransaction, 'estimateFee'
|
|
28
|
+
export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransaction, 'estimateFee'>>, TransactionFee {
|
|
29
29
|
id?: string;
|
|
30
30
|
transaction?: SWTransaction['transaction'] | null;
|
|
31
31
|
warnings?: SWTransaction['warnings'];
|
|
32
32
|
errors?: SWTransaction['errors'];
|
|
33
33
|
edAsWarning?: boolean;
|
|
34
34
|
isTransferAll?: boolean;
|
|
35
|
+
isTransferLocalTokenAndPayThatTokenAsFee?: boolean;
|
|
35
36
|
resolveOnDone?: boolean;
|
|
36
37
|
skipFeeValidation?: boolean;
|
|
37
38
|
}
|
|
38
|
-
export declare type SWTransactionResponse = SwInputBase & Pick<SWTransaction, 'warnings' | 'errors'> & Partial<Pick<SWTransaction, 'id' | 'extrinsicHash' | 'status' | 'estimateFee'
|
|
39
|
+
export declare type SWTransactionResponse = SwInputBase & Pick<SWTransaction, 'warnings' | 'errors'> & Partial<Pick<SWTransaction, 'id' | 'extrinsicHash' | 'status' | 'estimateFee'>> & TransactionFee;
|
|
39
40
|
export declare type ValidateTransactionResponseInput = SWTransactionInput;
|
|
40
41
|
export declare type TransactionEmitter = EventEmitter<TransactionEventMap>;
|
|
41
42
|
export interface TransactionEventResponse extends ValidateTransactionResponse {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BaseRequestSign } from '@subwallet/extension-base/types';
|
|
2
|
+
import { FeeChainType, FeeDetail, TransactionFee } from '../fee';
|
|
3
|
+
export interface RequestSubscribeTransfer extends TransactionFee {
|
|
4
|
+
address: string;
|
|
5
|
+
chain: string;
|
|
6
|
+
token: string;
|
|
7
|
+
destChain: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ResponseSubscribeTransfer {
|
|
10
|
+
id: string;
|
|
11
|
+
maxTransferable: string;
|
|
12
|
+
feeOptions: FeeDetail;
|
|
13
|
+
feeType: FeeChainType;
|
|
14
|
+
feePercentageSpecialCase?: number;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface RequestSubmitTransfer extends BaseRequestSign, TransactionFee {
|
|
18
|
+
chain: string;
|
|
19
|
+
from: string;
|
|
20
|
+
to: string;
|
|
21
|
+
tokenSlug: string;
|
|
22
|
+
transferAll: boolean;
|
|
23
|
+
value: string;
|
|
24
|
+
transferBounceable?: boolean;
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/types/fee/evm.d.ts
CHANGED
|
@@ -1,33 +1,61 @@
|
|
|
1
|
-
import
|
|
2
|
-
interface BaseFeeInfo {
|
|
3
|
-
busyNetwork: boolean;
|
|
4
|
-
}
|
|
1
|
+
import { BaseFeeDetail, BaseFeeInfo, FeeDefaultOption } from '@subwallet/extension-base/types';
|
|
5
2
|
export interface EvmLegacyFeeInfo extends BaseFeeInfo {
|
|
3
|
+
type: 'evm';
|
|
6
4
|
gasPrice: string;
|
|
7
|
-
maxFeePerGas: undefined;
|
|
8
|
-
maxPriorityFeePerGas: undefined;
|
|
9
5
|
baseGasFee: undefined;
|
|
6
|
+
options: undefined;
|
|
7
|
+
}
|
|
8
|
+
export interface EvmEIP1559FeeOption {
|
|
9
|
+
maxFeePerGas: string;
|
|
10
|
+
maxPriorityFeePerGas: string;
|
|
11
|
+
minWaitTimeEstimate?: number;
|
|
12
|
+
maxWaitTimeEstimate?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare enum FeeOptionKey {
|
|
15
|
+
SLOW = "slow",
|
|
16
|
+
AVERAGE = "average",
|
|
17
|
+
FAST = "fast",
|
|
18
|
+
DEFAULT = "default"
|
|
10
19
|
}
|
|
11
|
-
export interface
|
|
20
|
+
export interface EvmEIP1559FeeInfo extends BaseFeeInfo {
|
|
21
|
+
type: 'evm';
|
|
12
22
|
gasPrice: undefined;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
baseGasFee: string;
|
|
24
|
+
options: {
|
|
25
|
+
[FeeOptionKey.SLOW]: EvmEIP1559FeeOption;
|
|
26
|
+
[FeeOptionKey.AVERAGE]: EvmEIP1559FeeOption;
|
|
27
|
+
[FeeOptionKey.FAST]: EvmEIP1559FeeOption;
|
|
28
|
+
[FeeOptionKey.DEFAULT]: FeeDefaultOption;
|
|
29
|
+
};
|
|
16
30
|
}
|
|
17
|
-
export declare type EvmFeeInfo = EvmLegacyFeeInfo |
|
|
31
|
+
export declare type EvmFeeInfo = EvmLegacyFeeInfo | EvmEIP1559FeeInfo;
|
|
18
32
|
export interface EvmLegacyFeeInfoCache extends BaseFeeInfo {
|
|
33
|
+
type: 'evm';
|
|
19
34
|
gasPrice: string;
|
|
20
35
|
maxFeePerGas: undefined;
|
|
21
36
|
maxPriorityFeePerGas: undefined;
|
|
22
37
|
baseGasFee: undefined;
|
|
38
|
+
options: undefined;
|
|
23
39
|
}
|
|
24
|
-
export interface
|
|
40
|
+
export interface EvmEIP1559FeeInfoCache extends BaseFeeInfo {
|
|
41
|
+
type: 'evm';
|
|
25
42
|
gasPrice: undefined;
|
|
26
|
-
maxFeePerGas: string;
|
|
27
|
-
maxPriorityFeePerGas: string;
|
|
28
43
|
baseGasFee: string;
|
|
44
|
+
options: {
|
|
45
|
+
[FeeOptionKey.SLOW]: EvmEIP1559FeeOption;
|
|
46
|
+
[FeeOptionKey.AVERAGE]: EvmEIP1559FeeOption;
|
|
47
|
+
[FeeOptionKey.FAST]: EvmEIP1559FeeOption;
|
|
48
|
+
[FeeOptionKey.DEFAULT]: FeeDefaultOption;
|
|
49
|
+
};
|
|
29
50
|
}
|
|
30
|
-
export
|
|
51
|
+
export interface EvmLegacyFeeDetail extends EvmLegacyFeeInfo, BaseFeeDetail {
|
|
52
|
+
gasLimit: string;
|
|
53
|
+
}
|
|
54
|
+
export interface EvmEIP1559FeeDetail extends EvmEIP1559FeeInfo, BaseFeeDetail {
|
|
55
|
+
gasLimit: string;
|
|
56
|
+
}
|
|
57
|
+
export declare type EvmFeeInfoCache = EvmLegacyFeeInfoCache | EvmEIP1559FeeInfoCache;
|
|
58
|
+
export declare type EvmFeeDetail = EvmLegacyFeeDetail | EvmEIP1559FeeDetail;
|
|
31
59
|
export interface InfuraFeeDetail {
|
|
32
60
|
suggestedMaxPriorityFeePerGas: string;
|
|
33
61
|
suggestedMaxFeePerGas: string;
|
|
@@ -46,4 +74,6 @@ export interface InfuraFeeInfo {
|
|
|
46
74
|
priorityFeeTrend: 'down' | 'up';
|
|
47
75
|
baseFeeTrend: 'down' | 'up';
|
|
48
76
|
}
|
|
49
|
-
export {
|
|
77
|
+
export interface InfuraThresholdInfo {
|
|
78
|
+
busyThreshold: string;
|
|
79
|
+
}
|
package/types/fee/evm.js
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
export let FeeOptionKey;
|
|
5
|
+
(function (FeeOptionKey) {
|
|
6
|
+
FeeOptionKey["SLOW"] = "slow";
|
|
7
|
+
FeeOptionKey["AVERAGE"] = "average";
|
|
8
|
+
FeeOptionKey["FAST"] = "fast";
|
|
9
|
+
FeeOptionKey["DEFAULT"] = "default";
|
|
10
|
+
})(FeeOptionKey || (FeeOptionKey = {}));
|
package/types/fee/index.d.ts
CHANGED
package/types/fee/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
export * from "./base.js";
|
|
4
5
|
export * from "./evm.js";
|
|
5
|
-
export * from "./
|
|
6
|
+
export * from "./option.js";
|
|
7
|
+
export * from "./subscription.js";
|
|
8
|
+
export * from "./substrate.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FeeCustom } from '@subwallet/extension-base/types';
|
|
2
|
+
export declare type FeeDefaultOption = 'slow' | 'average' | 'fast';
|
|
3
|
+
export declare type FeeOption = FeeDefaultOption | 'custom';
|
|
4
|
+
export declare type TransactionFee = {
|
|
5
|
+
feeOption?: FeeOption;
|
|
6
|
+
feeCustom?: FeeCustom;
|
|
7
|
+
nonNativeTokenPayFeeSlug?: string;
|
|
8
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
import { EvmEIP1559FeeOption, EvmFeeDetail, EvmFeeInfo } from './evm';
|
|
3
|
+
import { SubstrateFeeDetail, SubstrateFeeInfo, SubstrateTipInfo } from './substrate';
|
|
4
|
+
import { TonFeeDetail, TonFeeInfo, TonTipInfo } from './ton';
|
|
5
|
+
export declare type FeeInfo = EvmFeeInfo | SubstrateFeeInfo | TonFeeInfo;
|
|
6
|
+
export declare type FeeDetail = EvmFeeDetail | SubstrateFeeDetail | TonFeeDetail;
|
|
7
|
+
export declare type FeeCustom = EvmEIP1559FeeOption | SubstrateTipInfo | TonTipInfo;
|
|
8
|
+
export interface FeeSubscription {
|
|
9
|
+
observer: BehaviorSubject<FeeInfo | undefined>;
|
|
10
|
+
subscription: Record<string, VoidFunction>;
|
|
11
|
+
unsubscribe: VoidFunction;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseFeeDetail, BaseFeeInfo } from './base';
|
|
2
|
+
import { FeeDefaultOption } from './option';
|
|
3
|
+
export interface SubstrateTipInfo {
|
|
4
|
+
tip: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SubstrateFeeInfo extends BaseFeeInfo {
|
|
7
|
+
type: 'substrate';
|
|
8
|
+
options: {
|
|
9
|
+
slow: SubstrateTipInfo;
|
|
10
|
+
average: SubstrateTipInfo;
|
|
11
|
+
fast: SubstrateTipInfo;
|
|
12
|
+
default: FeeDefaultOption;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare type SubstrateFeeDetail = SubstrateFeeInfo & BaseFeeDetail;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseFeeDetail, BaseFeeInfo } from './base';
|
|
2
|
+
import { FeeDefaultOption } from './option';
|
|
3
|
+
/** @deprecated */
|
|
4
|
+
export interface TonTipInfo {
|
|
5
|
+
tip: string;
|
|
6
|
+
}
|
|
7
|
+
/** @deprecated */
|
|
8
|
+
export interface TonFeeInfo extends BaseFeeInfo {
|
|
9
|
+
type: 'ton';
|
|
10
|
+
options: {
|
|
11
|
+
slow: TonTipInfo;
|
|
12
|
+
average: TonTipInfo;
|
|
13
|
+
fast: TonTipInfo;
|
|
14
|
+
default: FeeDefaultOption;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** @deprecated */
|
|
18
|
+
export declare type TonFeeDetail = TonFeeInfo & BaseFeeDetail;
|
package/types/fee/ton.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TransactionWarningType } from '@subwallet/extension-base/types';
|
|
1
|
+
import { TransactionFee, TransactionWarningType } from '@subwallet/extension-base/types';
|
|
2
2
|
export declare type BaseRequestSign = {
|
|
3
3
|
ignoreWarnings?: TransactionWarningType[];
|
|
4
4
|
};
|
|
@@ -11,14 +11,24 @@ export interface RequestBaseTransfer {
|
|
|
11
11
|
transferAll?: boolean;
|
|
12
12
|
transferBounceable?: boolean;
|
|
13
13
|
}
|
|
14
|
-
export interface RequestCheckTransfer extends RequestBaseTransfer {
|
|
14
|
+
export interface RequestCheckTransfer extends RequestBaseTransfer, TransactionFee {
|
|
15
15
|
networkKey: string;
|
|
16
16
|
}
|
|
17
17
|
export declare type RequestTransfer = InternalRequestSign<RequestCheckTransfer>;
|
|
18
|
-
export interface RequestCheckCrossChainTransfer extends RequestBaseTransfer {
|
|
18
|
+
export interface RequestCheckCrossChainTransfer extends RequestBaseTransfer, TransactionFee {
|
|
19
19
|
value: string;
|
|
20
20
|
originNetworkKey: string;
|
|
21
21
|
destinationNetworkKey: string;
|
|
22
22
|
showExtraWarning?: boolean;
|
|
23
23
|
}
|
|
24
24
|
export declare type RequestCrossChainTransfer = InternalRequestSign<RequestCheckCrossChainTransfer>;
|
|
25
|
+
export interface RequestGetTokensCanPayFee {
|
|
26
|
+
address: string;
|
|
27
|
+
chain: string;
|
|
28
|
+
feeAmount?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface RequestGetAmountForPair {
|
|
31
|
+
nativeTokenFeeAmount: string;
|
|
32
|
+
nativeTokenSlug: string;
|
|
33
|
+
toTokenSlug: string;
|
|
34
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EvmEIP1559FeeOption, EvmFeeInfo, FeeOption, SubstrateFeeInfo, SubstrateTipInfo } from '@subwallet/extension-base/types';
|
|
2
|
+
interface EvmFeeCombine {
|
|
3
|
+
gasPrice?: string;
|
|
4
|
+
maxFeePerGas?: string;
|
|
5
|
+
maxPriorityFeePerGas?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const combineEthFee: (feeInfo: EvmFeeInfo, feeOptions?: FeeOption, feeCustom?: EvmEIP1559FeeOption) => EvmFeeCombine;
|
|
8
|
+
interface SubstrateFeeCombine {
|
|
9
|
+
tip: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const combineSubstrateFee: (_fee: SubstrateFeeInfo, _feeOptions?: FeeOption, feeCustom?: SubstrateTipInfo) => SubstrateFeeCombine;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
export const combineEthFee = (feeInfo, feeOptions, feeCustom) => {
|
|
5
|
+
let maxFeePerGas;
|
|
6
|
+
let maxPriorityFeePerGas;
|
|
7
|
+
if (feeOptions && feeOptions !== 'custom') {
|
|
8
|
+
var _feeInfo$options, _feeInfo$options2;
|
|
9
|
+
maxFeePerGas = (_feeInfo$options = feeInfo.options) === null || _feeInfo$options === void 0 ? void 0 : _feeInfo$options[feeOptions].maxFeePerGas;
|
|
10
|
+
maxPriorityFeePerGas = (_feeInfo$options2 = feeInfo.options) === null || _feeInfo$options2 === void 0 ? void 0 : _feeInfo$options2[feeOptions].maxPriorityFeePerGas;
|
|
11
|
+
} else if (feeOptions === 'custom' && feeCustom) {
|
|
12
|
+
maxFeePerGas = feeCustom.maxFeePerGas;
|
|
13
|
+
maxPriorityFeePerGas = feeCustom.maxPriorityFeePerGas;
|
|
14
|
+
} else {
|
|
15
|
+
var _feeInfo$options3, _feeInfo$options4;
|
|
16
|
+
maxFeePerGas = (_feeInfo$options3 = feeInfo.options) === null || _feeInfo$options3 === void 0 ? void 0 : _feeInfo$options3[feeInfo.options.default].maxFeePerGas;
|
|
17
|
+
maxPriorityFeePerGas = (_feeInfo$options4 = feeInfo.options) === null || _feeInfo$options4 === void 0 ? void 0 : _feeInfo$options4[feeInfo.options.default].maxPriorityFeePerGas;
|
|
18
|
+
}
|
|
19
|
+
if (feeInfo.gasPrice) {
|
|
20
|
+
return {
|
|
21
|
+
gasPrice: feeInfo.gasPrice
|
|
22
|
+
};
|
|
23
|
+
} else {
|
|
24
|
+
return {
|
|
25
|
+
maxFeePerGas,
|
|
26
|
+
maxPriorityFeePerGas
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
export const combineSubstrateFee = (_fee, _feeOptions, feeCustom) => {
|
|
31
|
+
let tip;
|
|
32
|
+
if (_feeOptions && _feeOptions !== 'custom') {
|
|
33
|
+
tip = _fee.options[_feeOptions].tip;
|
|
34
|
+
} else if (_feeOptions === 'custom' && feeCustom && 'tip' in feeCustom) {
|
|
35
|
+
tip = feeCustom.tip;
|
|
36
|
+
} else {
|
|
37
|
+
tip = _fee.options[_fee.options.default].tip;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
tip
|
|
41
|
+
};
|
|
42
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
|
|
2
|
+
import { AmountData } from '@subwallet/extension-base/background/KoniTypes';
|
|
3
|
+
import { _EvmApi, _SubstrateApi, _TonApi } from '@subwallet/extension-base/services/chain-service/types';
|
|
4
|
+
import { FeeChainType, FeeInfo, TransactionFee } from '@subwallet/extension-base/types';
|
|
5
|
+
import { ResponseSubscribeTransfer } from '@subwallet/extension-base/types/balance/transfer';
|
|
6
|
+
export interface CalculateMaxTransferable extends TransactionFee {
|
|
7
|
+
address: string;
|
|
8
|
+
srcToken: _ChainAsset;
|
|
9
|
+
destToken?: _ChainAsset;
|
|
10
|
+
srcChain: _ChainInfo;
|
|
11
|
+
destChain: _ChainInfo;
|
|
12
|
+
substrateApi: _SubstrateApi;
|
|
13
|
+
evmApi: _EvmApi;
|
|
14
|
+
tonApi: _TonApi;
|
|
15
|
+
isTransferLocalTokenAndPayThatTokenAsFee: boolean;
|
|
16
|
+
isTransferNativeTokenAndPayLocalTokenAsFee: boolean;
|
|
17
|
+
nativeToken: _ChainAsset;
|
|
18
|
+
}
|
|
19
|
+
export declare const detectTransferTxType: (srcToken: _ChainAsset, srcChain: _ChainInfo, destChain: _ChainInfo) => FeeChainType;
|
|
20
|
+
export declare const calculateMaxTransferable: (id: string, request: CalculateMaxTransferable, freeBalance: AmountData, fee: FeeInfo) => Promise<ResponseSubscribeTransfer>;
|
|
21
|
+
export declare const calculateTransferMaxTransferable: (id: string, request: CalculateMaxTransferable, freeBalance: AmountData, fee: FeeInfo) => Promise<ResponseSubscribeTransfer>;
|
|
22
|
+
export declare const calculateXCMMaxTransferable: (id: string, request: CalculateMaxTransferable, freeBalance: AmountData, fee: FeeInfo) => Promise<ResponseSubscribeTransfer>;
|