@subwallet/extension-base 1.3.17-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 +7 -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/background/handlers/Extension.js +269 -123
- 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 +1 -1
- 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/earning-service/handlers/liquid-staking/stella-swap.js +7 -12
- package/cjs/services/earning-service/handlers/special.js +15 -4
- 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/background/handlers/Extension.d.ts +3 -3
- package/koni/background/handlers/Extension.js +253 -107
- 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 +1 -1
- 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/earning-service/handlers/liquid-staking/stella-swap.js +7 -12
- package/services/earning-service/handlers/special.js +15 -4
- 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
|
@@ -4,9 +4,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.recalculateGasPrice = exports.parseInfuraFee = exports.fetchSubWalletFeeData = exports.fetchOnlineFeeData = exports.fetchInfuraFeeData = exports.calculateGasFeeParams = void 0;
|
|
7
|
+
exports.recalculateGasPrice = exports.parseInfuraFee = exports.getEIP1559GasFee = exports.fetchSubWalletFeeData = exports.fetchOnlineFeeData = exports.fetchInfuraFeeData = exports.calculateToAmountByReservePool = exports.calculateGasFeeParams = exports.FEE_COVERAGE_PERCENTAGE_SPECIAL_CASE = void 0;
|
|
8
8
|
var _constants = require("@subwallet/extension-base/constants");
|
|
9
|
-
var _utils = require("@subwallet/extension-base/utils");
|
|
9
|
+
var _utils = require("@subwallet/extension-base/services/swap-service/handler/asset-hub/utils");
|
|
10
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
10
11
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
11
12
|
var _polygonBridge = require("../../balance-service/transfer/xcm/polygonBridge");
|
|
12
13
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
@@ -15,60 +16,79 @@ var _polygonBridge = require("../../balance-service/transfer/xcm/polygonBridge")
|
|
|
15
16
|
const INFURA_API_KEY = process.env.INFURA_API_KEY || '';
|
|
16
17
|
const INFURA_API_KEY_SECRET = process.env.INFURA_API_KEY_SECRET || '';
|
|
17
18
|
const INFURA_AUTH = 'Basic ' + Buffer.from(INFURA_API_KEY + ':' + INFURA_API_KEY_SECRET).toString('base64');
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
const
|
|
19
|
+
const FEE_COVERAGE_PERCENTAGE_SPECIAL_CASE = 105; // percentage
|
|
20
|
+
exports.FEE_COVERAGE_PERCENTAGE_SPECIAL_CASE = FEE_COVERAGE_PERCENTAGE_SPECIAL_CASE;
|
|
21
|
+
const parseInfuraFee = (info, threshold) => {
|
|
22
|
+
const base = new _bignumber.default(info.estimatedBaseFee).multipliedBy(_utils2.BN_WEI);
|
|
23
|
+
const thresholdBN = new _bignumber.default(threshold.busyThreshold).multipliedBy(_utils2.BN_WEI);
|
|
24
|
+
const busyNetwork = thresholdBN.gte(_utils2.BN_ZERO) ? base.gt(thresholdBN) : false;
|
|
23
25
|
return {
|
|
24
26
|
busyNetwork,
|
|
25
27
|
gasPrice: undefined,
|
|
26
|
-
baseGasFee: base,
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
baseGasFee: base.toFixed(0),
|
|
29
|
+
type: 'evm',
|
|
30
|
+
options: {
|
|
31
|
+
slow: {
|
|
32
|
+
maxFeePerGas: new _bignumber.default(info.low.suggestedMaxFeePerGas).multipliedBy(_utils2.BN_WEI).integerValue(_bignumber.default.ROUND_UP).toFixed(0),
|
|
33
|
+
maxPriorityFeePerGas: new _bignumber.default(info.low.suggestedMaxPriorityFeePerGas).multipliedBy(_utils2.BN_WEI).integerValue(_bignumber.default.ROUND_UP).toFixed(0),
|
|
34
|
+
maxWaitTimeEstimate: info.low.maxWaitTimeEstimate || 0,
|
|
35
|
+
minWaitTimeEstimate: info.low.minWaitTimeEstimate || 0
|
|
36
|
+
},
|
|
37
|
+
average: {
|
|
38
|
+
maxFeePerGas: new _bignumber.default(info.medium.suggestedMaxFeePerGas).multipliedBy(_utils2.BN_WEI).integerValue(_bignumber.default.ROUND_UP).toFixed(0),
|
|
39
|
+
maxPriorityFeePerGas: new _bignumber.default(info.medium.suggestedMaxPriorityFeePerGas).multipliedBy(_utils2.BN_WEI).integerValue(_bignumber.default.ROUND_UP).toFixed(0),
|
|
40
|
+
maxWaitTimeEstimate: info.medium.maxWaitTimeEstimate || 0,
|
|
41
|
+
minWaitTimeEstimate: info.medium.minWaitTimeEstimate || 0
|
|
42
|
+
},
|
|
43
|
+
fast: {
|
|
44
|
+
maxFeePerGas: new _bignumber.default(info.high.suggestedMaxFeePerGas).multipliedBy(_utils2.BN_WEI).integerValue(_bignumber.default.ROUND_UP).toFixed(0),
|
|
45
|
+
maxPriorityFeePerGas: new _bignumber.default(info.high.suggestedMaxPriorityFeePerGas).multipliedBy(_utils2.BN_WEI).integerValue(_bignumber.default.ROUND_UP).toFixed(0),
|
|
46
|
+
maxWaitTimeEstimate: info.high.maxWaitTimeEstimate || 0,
|
|
47
|
+
minWaitTimeEstimate: info.high.minWaitTimeEstimate || 0
|
|
48
|
+
},
|
|
49
|
+
default: busyNetwork ? 'average' : 'slow'
|
|
50
|
+
}
|
|
29
51
|
};
|
|
30
52
|
};
|
|
31
53
|
exports.parseInfuraFee = parseInfuraFee;
|
|
32
54
|
const fetchInfuraFeeData = async (chainId, infuraAuth) => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
const baseUrl = 'https://gas.api.infura.io/networks/{{chainId}}/suggestedGasFees';
|
|
56
|
+
const baseThressholdUrl = 'https://gas.api.infura.io/networks/{{chainId}}/busyThreshold';
|
|
57
|
+
// const baseFeeHistoryUrl = 'https://gas.api.infura.io/networks/{{chainId}}/baseFeeHistory';
|
|
58
|
+
// const baseFeePercentileUrl = 'https://gas.api.infura.io/networks/{{chainId}}/baseFeePercentile';
|
|
59
|
+
const feeUrl = baseUrl.replaceAll('{{chainId}}', chainId.toString());
|
|
60
|
+
const thressholdUrl = baseThressholdUrl.replaceAll('{{chainId}}', chainId.toString());
|
|
61
|
+
try {
|
|
62
|
+
const [feeResp, thressholdResp] = await Promise.all([feeUrl, thressholdUrl].map(url => {
|
|
63
|
+
return fetch(url, {
|
|
64
|
+
method: 'GET',
|
|
65
|
+
headers: {
|
|
66
|
+
Authorization: INFURA_AUTH
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}));
|
|
70
|
+
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
72
|
+
const [feeInfo, thresholdInfo] = await Promise.all([feeResp.json(), thressholdResp.json()]);
|
|
73
|
+
return parseInfuraFee(feeInfo, thresholdInfo);
|
|
74
|
+
} catch (e) {
|
|
75
|
+
console.warn(e);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
50
78
|
};
|
|
51
79
|
exports.fetchInfuraFeeData = fetchInfuraFeeData;
|
|
52
80
|
const fetchSubWalletFeeData = async (chainId, networkKey) => {
|
|
53
81
|
return await new Promise(resolve => {
|
|
54
82
|
const baseUrl = 'https://api-cache.subwallet.app/sw-evm-gas/{{chain}}';
|
|
55
83
|
const url = baseUrl.replaceAll('{{chain}}', networkKey);
|
|
84
|
+
|
|
85
|
+
// TODO: Update the logo to follow the new estimateFee format or move the logic to the backend
|
|
56
86
|
fetch(url, {
|
|
57
87
|
method: 'GET'
|
|
58
88
|
}).then(rs => {
|
|
59
89
|
return rs.json();
|
|
60
90
|
}).then(info => {
|
|
61
|
-
|
|
62
|
-
resolve(info);
|
|
63
|
-
} else {
|
|
64
|
-
resolve({
|
|
65
|
-
busyNetwork: info.busyNetwork,
|
|
66
|
-
gasPrice: info.gasPrice,
|
|
67
|
-
baseGasFee: new _bignumber.default(info.baseGasFee),
|
|
68
|
-
maxFeePerGas: new _bignumber.default(info.maxFeePerGas),
|
|
69
|
-
maxPriorityFeePerGas: new _bignumber.default(info.maxPriorityFeePerGas)
|
|
70
|
-
});
|
|
71
|
-
}
|
|
91
|
+
resolve(info);
|
|
72
92
|
}).catch(e => {
|
|
73
93
|
console.warn(e);
|
|
74
94
|
resolve(null);
|
|
@@ -94,9 +114,20 @@ const recalculateGasPrice = (_price, chain) => {
|
|
|
94
114
|
return needMulti ? new _bignumber.default(_price).multipliedBy(_constants.GAS_PRICE_RATIO).toFixed(0) : _price;
|
|
95
115
|
};
|
|
96
116
|
exports.recalculateGasPrice = recalculateGasPrice;
|
|
117
|
+
const getEIP1559GasFee = (baseFee, maxPriorityFee, blockNumber, blockTime) => {
|
|
118
|
+
// https://www.blocknative.com/blog/eip-1559-fees
|
|
119
|
+
const maxFee = baseFee.multipliedBy(1.2).plus(maxPriorityFee);
|
|
120
|
+
return {
|
|
121
|
+
maxFeePerGas: maxFee.toFixed(0),
|
|
122
|
+
maxPriorityFeePerGas: maxPriorityFee.toFixed(0),
|
|
123
|
+
minWaitTimeEstimate: blockTime * (blockNumber - 2),
|
|
124
|
+
maxWaitTimeEstimate: blockTime * blockNumber
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
exports.getEIP1559GasFee = getEIP1559GasFee;
|
|
97
128
|
const calculateGasFeeParams = async function (web3, networkKey) {
|
|
98
129
|
let useOnline = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
99
|
-
let useInfura = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] :
|
|
130
|
+
let useInfura = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
100
131
|
if (useOnline) {
|
|
101
132
|
try {
|
|
102
133
|
const chainId = await web3.api.eth.getChainId();
|
|
@@ -113,19 +144,19 @@ const calculateGasFeeParams = async function (web3, networkKey) {
|
|
|
113
144
|
const gasResponse = await fetch(`${gasDomain}`).then(res => res.json());
|
|
114
145
|
const gasPriceInWei = gasResponse.standard * 1e9 + 200000;
|
|
115
146
|
return {
|
|
147
|
+
type: 'evm',
|
|
116
148
|
gasPrice: gasPriceInWei.toString(),
|
|
117
|
-
maxFeePerGas: undefined,
|
|
118
|
-
maxPriorityFeePerGas: undefined,
|
|
119
149
|
baseGasFee: undefined,
|
|
120
|
-
busyNetwork: false
|
|
150
|
+
busyNetwork: false,
|
|
151
|
+
options: undefined
|
|
121
152
|
};
|
|
122
153
|
}
|
|
123
154
|
const numBlock = 20;
|
|
124
|
-
const rewardPercent = [];
|
|
125
|
-
for (let i = 0; i <= 100; i = i + 5) {
|
|
126
|
-
rewardPercent.push(i);
|
|
127
|
-
}
|
|
155
|
+
const rewardPercent = [25, 50, 75];
|
|
128
156
|
const history = await web3.api.eth.getFeeHistory(numBlock, 'latest', rewardPercent);
|
|
157
|
+
const currentBlock = history.oldestBlock - 1;
|
|
158
|
+
const [newBlock, oldBlock] = await Promise.all([web3.api.eth.getBlock(currentBlock), web3.api.eth.getBlock(currentBlock - numBlock)]);
|
|
159
|
+
const blockTime = Number((BigInt(newBlock.timestamp || 0) - BigInt(oldBlock.timestamp || 0)) / BigInt(numBlock) * BigInt(1000));
|
|
129
160
|
const baseGasFee = new _bignumber.default(history.baseFeePerGas[history.baseFeePerGas.length - 1]); // Last element is latest
|
|
130
161
|
|
|
131
162
|
const blocksBusy = history.reward.reduce((previous, rewards, currentIndex) => {
|
|
@@ -137,87 +168,42 @@ const calculateGasFeeParams = async function (web3, networkKey) {
|
|
|
137
168
|
/*
|
|
138
169
|
* True if priority >= 0.3 * base
|
|
139
170
|
* */
|
|
140
|
-
const blockIsBusy = baseBN.gt(
|
|
171
|
+
const blockIsBusy = baseBN.gt(_utils2.BN_ZERO) ? priorityBN.dividedBy(baseBN).gte(0.3) ? 1 : 0 : 0; // Special for bsc, base fee = 0
|
|
141
172
|
|
|
142
173
|
return previous + blockIsBusy;
|
|
143
174
|
}, 0);
|
|
144
175
|
const busyNetwork = blocksBusy >= numBlock / 2; // True, if half of block is busy
|
|
145
176
|
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
/* Get first priority which greater than 0 */
|
|
151
|
-
for (let i = 0; i < rewards.length; i++) {
|
|
152
|
-
firstIndex = i;
|
|
153
|
-
const current = rewards[i];
|
|
154
|
-
const currentBN = new _bignumber.default(current);
|
|
155
|
-
if (currentBN.gt(_utils.BN_ZERO)) {
|
|
156
|
-
firstBN = currentBN;
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
let secondBN = firstBN;
|
|
161
|
-
|
|
162
|
-
/* Get second priority which greater than first priority */
|
|
163
|
-
for (let i = firstIndex; i < rewards.length; i++) {
|
|
164
|
-
const current = rewards[i];
|
|
165
|
-
const currentBN = new _bignumber.default(current);
|
|
166
|
-
if (currentBN.gt(firstBN)) {
|
|
167
|
-
secondBN = currentBN;
|
|
168
|
-
break;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
let current;
|
|
172
|
-
if (busyNetwork) {
|
|
173
|
-
current = secondBN.dividedBy(2).gte(firstBN) ? firstBN : secondBN; // second too larger than first (> 2 times), use first else use second
|
|
174
|
-
} else {
|
|
175
|
-
current = firstBN;
|
|
176
|
-
}
|
|
177
|
-
if (busyNetwork) {
|
|
178
|
-
/* Get max value */
|
|
179
|
-
return current.gte(previous) ? current : previous; // get max priority
|
|
180
|
-
} else {
|
|
181
|
-
/* Get min value which greater than 0 */
|
|
182
|
-
if (previous.eq(_utils.BN_ZERO)) {
|
|
183
|
-
return current; // get min priority
|
|
184
|
-
} else if (current.eq(_utils.BN_ZERO)) {
|
|
185
|
-
return previous;
|
|
186
|
-
}
|
|
187
|
-
return current.lte(previous) ? current : previous; // get min priority
|
|
188
|
-
}
|
|
189
|
-
}, _utils.BN_ZERO);
|
|
190
|
-
if (maxPriorityFeePerGas.eq(_utils.BN_ZERO)) {
|
|
191
|
-
const _price = await web3.api.eth.getGasPrice();
|
|
192
|
-
const gasPrice = recalculateGasPrice(_price, networkKey);
|
|
193
|
-
return {
|
|
194
|
-
gasPrice,
|
|
195
|
-
maxFeePerGas: undefined,
|
|
196
|
-
maxPriorityFeePerGas: undefined,
|
|
197
|
-
baseGasFee: undefined,
|
|
198
|
-
busyNetwork: false
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/* Max gas = (base + priority) * 1.5 (if not busy or 2 when busy); */
|
|
203
|
-
const maxFeePerGas = baseGasFee.plus(maxPriorityFeePerGas).multipliedBy(busyNetwork ? 2 : 1.5).decimalPlaces(0);
|
|
177
|
+
const slowPriorityFee = history.reward.reduce((previous, rewards) => previous.plus(rewards[0]), _utils2.BN_ZERO).dividedBy(numBlock).decimalPlaces(0);
|
|
178
|
+
const averagePriorityFee = history.reward.reduce((previous, rewards) => previous.plus(rewards[1]), _utils2.BN_ZERO).dividedBy(numBlock).decimalPlaces(0);
|
|
179
|
+
const fastPriorityFee = history.reward.reduce((previous, rewards) => previous.plus(rewards[2]), _utils2.BN_ZERO).dividedBy(numBlock).decimalPlaces(0);
|
|
204
180
|
return {
|
|
181
|
+
type: 'evm',
|
|
205
182
|
gasPrice: undefined,
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
183
|
+
baseGasFee: baseGasFee.toString(),
|
|
184
|
+
busyNetwork,
|
|
185
|
+
options: {
|
|
186
|
+
slow: getEIP1559GasFee(baseGasFee, slowPriorityFee, 10, blockTime),
|
|
187
|
+
average: getEIP1559GasFee(baseGasFee, averagePriorityFee, 5, blockTime),
|
|
188
|
+
fast: getEIP1559GasFee(baseGasFee, fastPriorityFee, 3, blockTime),
|
|
189
|
+
default: busyNetwork ? 'average' : 'slow'
|
|
190
|
+
}
|
|
210
191
|
};
|
|
211
192
|
} catch (e) {
|
|
212
193
|
const _price = await web3.api.eth.getGasPrice();
|
|
213
194
|
const gasPrice = recalculateGasPrice(_price, networkKey);
|
|
214
195
|
return {
|
|
196
|
+
type: 'evm',
|
|
197
|
+
busyNetwork: false,
|
|
215
198
|
gasPrice,
|
|
216
|
-
maxFeePerGas: undefined,
|
|
217
|
-
maxPriorityFeePerGas: undefined,
|
|
218
199
|
baseGasFee: undefined,
|
|
219
|
-
|
|
200
|
+
options: undefined
|
|
220
201
|
};
|
|
221
202
|
}
|
|
222
203
|
};
|
|
223
|
-
exports.calculateGasFeeParams = calculateGasFeeParams;
|
|
204
|
+
exports.calculateGasFeeParams = calculateGasFeeParams;
|
|
205
|
+
const calculateToAmountByReservePool = async (api, fromToken, toToken, fromAmount) => {
|
|
206
|
+
const reserve = await (0, _utils.getReserveForPool)(api, fromToken, toToken);
|
|
207
|
+
return (0, _utils.estimateTokensForPool)(fromAmount, reserve);
|
|
208
|
+
};
|
|
209
|
+
exports.calculateToAmountByReservePool = calculateToAmountByReservePool;
|
|
@@ -13,6 +13,9 @@ class BalanceStore extends _BaseStoreWithAddress.default {
|
|
|
13
13
|
async getBalanceMapByAddresses(addresses) {
|
|
14
14
|
return this.table.where('address').anyOf(addresses).toArray();
|
|
15
15
|
}
|
|
16
|
+
async getBalanceHasAmount(address, chain) {
|
|
17
|
+
return this.table.filter(item => item.address === address && item.free !== '0' && item.tokenSlug.startsWith(chain)).toArray();
|
|
18
|
+
}
|
|
16
19
|
async removeBySlugs(tokenSlugs) {
|
|
17
20
|
return this.table.where('tokenSlug').anyOfIgnoreCase(tokenSlugs).delete();
|
|
18
21
|
}
|
|
@@ -15,6 +15,7 @@ var _utils2 = require("@subwallet/extension-base/services/swap-service/utils");
|
|
|
15
15
|
var _types = require("@subwallet/extension-base/types");
|
|
16
16
|
var _serviceBase = require("@subwallet/extension-base/types/service-base");
|
|
17
17
|
var _swap2 = require("@subwallet/extension-base/types/swap");
|
|
18
|
+
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
18
19
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
19
20
|
var _baseHandler = require("../base-handler");
|
|
20
21
|
var _router = require("./router");
|
|
@@ -24,14 +25,15 @@ var _router = require("./router");
|
|
|
24
25
|
const PAH_LOW_LIQUIDITY_THRESHOLD = 0.15;
|
|
25
26
|
class AssetHubSwapHandler {
|
|
26
27
|
isReady = false;
|
|
27
|
-
constructor(chainService, balanceService, chain) {
|
|
28
|
+
constructor(chainService, balanceService, feeService, chain) {
|
|
28
29
|
const chainInfo = chainService.getChainInfoByKey(chain);
|
|
29
30
|
const providerSlug = chain === 'statemint' ? _swap2.SwapProviderId.POLKADOT_ASSET_HUB : chain === 'statemine' ? _swap2.SwapProviderId.KUSAMA_ASSET_HUB : _swap2.SwapProviderId.ROCOCO_ASSET_HUB;
|
|
30
31
|
this.swapBaseHandler = new _baseHandler.SwapBaseHandler({
|
|
31
32
|
balanceService,
|
|
32
33
|
chainService,
|
|
33
34
|
providerName: chainInfo.name,
|
|
34
|
-
providerSlug
|
|
35
|
+
providerSlug,
|
|
36
|
+
feeService
|
|
35
37
|
});
|
|
36
38
|
this.providerSlug = providerSlug;
|
|
37
39
|
this.chain = chain;
|
|
@@ -82,6 +84,7 @@ class AssetHubSwapHandler {
|
|
|
82
84
|
}
|
|
83
85
|
try {
|
|
84
86
|
const alternativeChainInfo = this.chainService.getChainInfoByKey(alternativeAsset.originChain);
|
|
87
|
+
const originalChainInfo = this.chainService.getChainInfoByKey(this.chain);
|
|
85
88
|
const step = {
|
|
86
89
|
metadata: {
|
|
87
90
|
sendingValue: bnAmount.toString(),
|
|
@@ -92,13 +95,18 @@ class AssetHubSwapHandler {
|
|
|
92
95
|
type: _serviceBase.CommonStepType.XCM
|
|
93
96
|
};
|
|
94
97
|
const xcmOriginSubstrateApi = await this.chainService.getSubstrateApi(alternativeAsset.originChain).isReady;
|
|
98
|
+
const id = (0, _getId.getId)();
|
|
99
|
+
const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee(id, alternativeChainInfo.slug, 'substrate');
|
|
95
100
|
const xcmTransfer = await (0, _xcm.createXcmExtrinsic)({
|
|
96
101
|
originTokenInfo: alternativeAsset,
|
|
97
102
|
destinationTokenInfo: fromAsset,
|
|
98
103
|
sendingValue: bnAmount.toString(),
|
|
99
104
|
recipient: params.request.address,
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
sender: params.request.address,
|
|
106
|
+
feeInfo: feeInfo,
|
|
107
|
+
substrateApi: xcmOriginSubstrateApi,
|
|
108
|
+
destinationChain: originalChainInfo,
|
|
109
|
+
originChain: alternativeChainInfo
|
|
102
110
|
});
|
|
103
111
|
const _xcmFeeInfo = await xcmTransfer.paymentInfo(params.request.address);
|
|
104
112
|
const xcmFeeInfo = _xcmFeeInfo.toPrimitive();
|
|
@@ -185,12 +193,16 @@ class AssetHubSwapHandler {
|
|
|
185
193
|
const alternativeAssetSlug = (0, _utils2.getSwapAlternativeAsset)(pair);
|
|
186
194
|
const originAsset = this.chainService.getAssetBySlug(alternativeAssetSlug);
|
|
187
195
|
const destinationAsset = this.chainService.getAssetBySlug(pair.from);
|
|
196
|
+
const originChain = this.chainService.getChainInfoByKey(originAsset.originChain);
|
|
197
|
+
const destinationChain = this.chainService.getChainInfoByKey(destinationAsset.originChain);
|
|
188
198
|
const substrateApi = this.chainService.getSubstrateApi(originAsset.originChain);
|
|
189
199
|
const chainApi = await substrateApi.isReady;
|
|
190
200
|
const destinationAssetBalance = await this.balanceService.getTransferableBalance(params.address, destinationAsset.originChain, destinationAsset.slug);
|
|
191
201
|
const xcmFee = params.process.totalFee[params.currentStep];
|
|
192
202
|
const bnAmount = new _bignumber.default(params.quote.fromAmount);
|
|
193
203
|
const bnDestinationAssetBalance = new _bignumber.default(destinationAssetBalance.value);
|
|
204
|
+
const id = (0, _getId.getId)();
|
|
205
|
+
const feeInfo = await this.swapBaseHandler.feeService.subscribeChainFee(id, originChain.slug, 'substrate');
|
|
194
206
|
let bnTotalAmount = bnAmount.minus(bnDestinationAssetBalance);
|
|
195
207
|
if ((0, _utils._isNativeToken)(originAsset)) {
|
|
196
208
|
const bnXcmFee = new _bignumber.default(xcmFee.feeComponent[0].amount); // xcm fee is paid in native token but swap token is not always native token
|
|
@@ -202,8 +214,11 @@ class AssetHubSwapHandler {
|
|
|
202
214
|
destinationTokenInfo: destinationAsset,
|
|
203
215
|
sendingValue: bnTotalAmount.toString(),
|
|
204
216
|
recipient: params.address,
|
|
205
|
-
|
|
206
|
-
|
|
217
|
+
substrateApi: chainApi,
|
|
218
|
+
sender: params.address,
|
|
219
|
+
originChain: originChain,
|
|
220
|
+
destinationChain: destinationChain,
|
|
221
|
+
feeInfo
|
|
207
222
|
});
|
|
208
223
|
const xcmData = {
|
|
209
224
|
originNetworkKey: originAsset.originChain,
|
|
@@ -45,7 +45,7 @@ class AssetHubRouter {
|
|
|
45
45
|
const reserves = await (0, _utils2.getReserveForPath)(api, paths);
|
|
46
46
|
const amounts = (0, _utils2.estimateTokensForPath)(amount, reserves);
|
|
47
47
|
const marketRate = (0, _utils2.estimateRateForPath)(reserves);
|
|
48
|
-
const marketRateAfter = (0, _utils2.
|
|
48
|
+
const marketRateAfter = (0, _utils2.estimateRateAfterForPath)(amount, reserves);
|
|
49
49
|
const priceImpactPct = (0, _utils2.estimatePriceImpactPct)(marketRate, marketRateAfter);
|
|
50
50
|
const errors = [];
|
|
51
51
|
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.getReserveForPool = exports.getReserveForPath = exports.estimateTokensForPool = exports.estimateTokensForPath = exports.estimateRateForPath = exports.
|
|
7
|
+
exports.getReserveForPool = exports.getReserveForPath = exports.estimateTokensForPool = exports.estimateTokensForPath = exports.estimateRateForPath = exports.estimateRateAfterForPath = exports.estimatePriceImpactPct = exports.estimateActualRate = exports.checkMinAmountForPool = exports.checkMinAmountForPath = exports.checkLiquidityForPool = exports.checkLiquidityForPath = exports.buildSwapExtrinsic = exports._getPoolInfo = void 0;
|
|
8
8
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
9
9
|
var _swap = require("@subwallet/extension-base/types/swap");
|
|
10
10
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
@@ -47,7 +47,7 @@ const getReserveForPath = async (api, paths) => {
|
|
|
47
47
|
};
|
|
48
48
|
exports.getReserveForPath = getReserveForPath;
|
|
49
49
|
const estimateTokensForPool = (amount, reserves) => {
|
|
50
|
-
if (amount === '0') {
|
|
50
|
+
if (!amount || amount === '0') {
|
|
51
51
|
return '0';
|
|
52
52
|
}
|
|
53
53
|
return new _bignumber.default(amount).times(reserves[1]).div(reserves[0]).integerValue(_bignumber.default.ROUND_DOWN).toString();
|
|
@@ -85,7 +85,7 @@ const estimateActualRate = (amount, reserves) => {
|
|
|
85
85
|
return result.toString();
|
|
86
86
|
};
|
|
87
87
|
exports.estimateActualRate = estimateActualRate;
|
|
88
|
-
const
|
|
88
|
+
const estimateRateAfterForPath = (amount, reserves) => {
|
|
89
89
|
const m = new _bignumber.default(amount);
|
|
90
90
|
const reserve = reserves[0];
|
|
91
91
|
const x = new _bignumber.default(reserve[0]);
|
|
@@ -94,7 +94,7 @@ const estimateRateAfter = (amount, reserves) => {
|
|
|
94
94
|
const result = x.plus(m).div(y.minus(n));
|
|
95
95
|
return result.toString();
|
|
96
96
|
};
|
|
97
|
-
exports.
|
|
97
|
+
exports.estimateRateAfterForPath = estimateRateAfterForPath;
|
|
98
98
|
const estimatePriceImpactPct = (marketRate, marketRateAfter) => {
|
|
99
99
|
const bnMarketRate = new _bignumber.default(marketRate);
|
|
100
100
|
const bnActualRate = new _bignumber.default(marketRateAfter);
|
|
@@ -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
|
}
|