@subwallet/extension-base 1.2.2-0 → 1.2.3-1
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 +4 -0
- package/cjs/core/logic-validation/earning.js +47 -0
- package/cjs/core/logic-validation/swap.js +99 -0
- package/cjs/core/logic-validation/transfer.js +219 -0
- package/cjs/core/substrate/nominationpools-pallet.js +12 -0
- package/cjs/core/substrate/system-pallet.js +78 -0
- package/cjs/koni/api/dotsama/transfer.js +49 -4
- package/cjs/koni/api/staking/bonding/utils.js +1 -1
- package/cjs/koni/api/xcm/index.js +30 -2
- package/cjs/koni/background/handlers/Extension.js +135 -245
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/group.js +4 -27
- package/cjs/services/balance-service/helpers/subscribe/index.js +2 -30
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +41 -80
- package/cjs/services/balance-service/index.js +11 -9
- package/cjs/services/chain-service/index.js +0 -1
- package/cjs/services/chain-service/utils/index.js +6 -0
- package/cjs/services/earning-service/handlers/base.js +1 -1
- package/cjs/services/earning-service/handlers/special.js +11 -12
- package/cjs/services/swap-service/handler/base-handler.js +28 -44
- package/cjs/services/swap-service/handler/chainflip-handler.js +23 -21
- package/cjs/services/swap-service/handler/hydradx-handler.js +40 -38
- package/cjs/services/swap-service/index.js +6 -0
- package/cjs/services/swap-service/utils.js +8 -49
- package/cjs/services/transaction-service/index.js +66 -155
- package/core/logic-validation/earning.d.ts +10 -0
- package/core/logic-validation/earning.js +37 -0
- package/core/logic-validation/swap.d.ts +8 -0
- package/core/logic-validation/swap.js +89 -0
- package/core/logic-validation/transfer.d.ts +16 -0
- package/core/logic-validation/transfer.js +206 -0
- package/core/substrate/nominationpools-pallet.d.ts +7 -0
- package/core/substrate/nominationpools-pallet.js +6 -0
- package/core/substrate/system-pallet.d.ts +27 -0
- package/core/substrate/system-pallet.js +71 -0
- package/koni/api/dotsama/transfer.d.ts +3 -1
- package/koni/api/dotsama/transfer.js +44 -1
- package/koni/api/staking/bonding/relayChain.d.ts +2 -1
- package/koni/api/staking/bonding/utils.js +1 -1
- package/koni/api/xcm/index.d.ts +2 -0
- package/koni/api/xcm/index.js +27 -1
- package/koni/background/handlers/Extension.d.ts +5 -5
- package/koni/background/handlers/Extension.js +111 -221
- package/package.json +34 -9
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/group.js +4 -27
- package/services/balance-service/helpers/subscribe/index.d.ts +2 -1
- package/services/balance-service/helpers/subscribe/index.js +2 -30
- package/services/balance-service/helpers/subscribe/substrate/index.d.ts +2 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +26 -64
- package/services/balance-service/index.d.ts +7 -6
- package/services/balance-service/index.js +12 -10
- package/services/chain-service/index.js +0 -1
- package/services/chain-service/utils/index.d.ts +1 -0
- package/services/chain-service/utils/index.js +4 -0
- package/services/earning-service/handlers/base.js +1 -1
- package/services/earning-service/handlers/nomination-pool/index.d.ts +2 -1
- package/services/earning-service/handlers/special.js +11 -12
- package/services/swap-service/handler/base-handler.d.ts +3 -2
- package/services/swap-service/handler/base-handler.js +26 -42
- package/services/swap-service/handler/chainflip-handler.d.ts +2 -1
- package/services/swap-service/handler/chainflip-handler.js +4 -2
- package/services/swap-service/handler/hydradx-handler.d.ts +2 -1
- package/services/swap-service/handler/hydradx-handler.js +7 -5
- package/services/swap-service/index.js +7 -1
- package/services/swap-service/utils.d.ts +2 -4
- package/services/swap-service/utils.js +7 -47
- package/services/transaction-service/index.d.ts +1 -1
- package/services/transaction-service/index.js +30 -119
- package/services/transaction-service/types.d.ts +1 -0
- package/types/balance/index.d.ts +6 -10
- package/types/yield/info/pallet.d.ts +0 -6
package/cjs/packageInfo.js
CHANGED
|
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.groupBalance = void 0;
|
|
8
8
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
9
|
-
var
|
|
10
|
-
var _bn = _interopRequireDefault(require("bn.js"));
|
|
9
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
11
10
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
12
11
|
// SPDX-License-Identifier: Apache-2.0
|
|
13
12
|
|
|
@@ -20,34 +19,12 @@ var _bn = _interopRequireDefault(require("bn.js"));
|
|
|
20
19
|
*/
|
|
21
20
|
const groupBalance = (items, address, token) => {
|
|
22
21
|
const states = items.map(item => item.state);
|
|
23
|
-
|
|
22
|
+
return {
|
|
24
23
|
address,
|
|
25
24
|
tokenSlug: token,
|
|
26
|
-
free: (
|
|
27
|
-
locked: (
|
|
25
|
+
free: _bignumber.default.sum.apply(null, items.map(item => item.free)).toFixed(),
|
|
26
|
+
locked: _bignumber.default.sum.apply(null, items.map(item => item.locked)).toFixed(),
|
|
28
27
|
state: states.every(item => item === _KoniTypes.APIItemState.NOT_SUPPORT) ? _KoniTypes.APIItemState.NOT_SUPPORT : states.some(item => item === _KoniTypes.APIItemState.READY) ? _KoniTypes.APIItemState.READY : _KoniTypes.APIItemState.PENDING
|
|
29
28
|
};
|
|
30
|
-
for (const item of items) {
|
|
31
|
-
if (item.substrateInfo) {
|
|
32
|
-
if (!result.substrateInfo) {
|
|
33
|
-
result.substrateInfo = {
|
|
34
|
-
...item.substrateInfo
|
|
35
|
-
};
|
|
36
|
-
} else {
|
|
37
|
-
const old = {
|
|
38
|
-
...result.substrateInfo
|
|
39
|
-
};
|
|
40
|
-
const _new = {
|
|
41
|
-
...item.substrateInfo
|
|
42
|
-
};
|
|
43
|
-
result.substrateInfo = {
|
|
44
|
-
reserved: new _bn.default(old.reserved || '0').add(new _bn.default(_new.reserved || '0')).toString(),
|
|
45
|
-
feeFrozen: new _bn.default(old.feeFrozen || '0').add(new _bn.default(_new.feeFrozen || '0')).toString(),
|
|
46
|
-
miscFrozen: new _bn.default(old.miscFrozen || '0').add(new _bn.default(_new.miscFrozen || '0')).toString()
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return result;
|
|
52
29
|
};
|
|
53
30
|
exports.groupBalance = groupBalance;
|
|
@@ -75,18 +75,8 @@ const filterAddress = (addresses, chainInfo) => {
|
|
|
75
75
|
}
|
|
76
76
|
};
|
|
77
77
|
|
|
78
|
-
// interface SubscribeBlanceOptions {
|
|
79
|
-
// addresses: string[];
|
|
80
|
-
// chains: string[];
|
|
81
|
-
// tokens: string[];
|
|
82
|
-
// chainInfoMap: Record<string, _ChainInfo>;
|
|
83
|
-
// substrateApiMap: Record<string, _SubstrateApi>;
|
|
84
|
-
// evmApiMap: Record<string, _EvmApi>;
|
|
85
|
-
// callback: (rs: BalanceItem[]) => void;
|
|
86
|
-
// }
|
|
87
|
-
|
|
88
78
|
// main subscription, use for multiple chains, multiple addresses and multiple tokens
|
|
89
|
-
function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, callback) {
|
|
79
|
+
function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, callback, extrinsicType) {
|
|
90
80
|
// Filter chain and token
|
|
91
81
|
const chainAssetMap = Object.fromEntries(Object.entries(_chainAssetMap).filter(_ref => {
|
|
92
82
|
let [token] = _ref;
|
|
@@ -126,26 +116,8 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
|
|
|
126
116
|
evmApi
|
|
127
117
|
});
|
|
128
118
|
}
|
|
129
|
-
|
|
130
|
-
// if (!useAddresses || useAddresses.length === 0 || _PURE_EVM_CHAINS.indexOf(chainSlug) > -1) {
|
|
131
|
-
// const fungibleTokensByChain = state.chainService.getFungibleTokensByChain(chainSlug, true);
|
|
132
|
-
// const now = new Date().getTime();
|
|
133
|
-
//
|
|
134
|
-
// Object.values(fungibleTokensByChain).map((token) => {
|
|
135
|
-
// return {
|
|
136
|
-
// tokenSlug: token.slug,
|
|
137
|
-
// free: '0',
|
|
138
|
-
// locked: '0',
|
|
139
|
-
// state: APIItemState.READY,
|
|
140
|
-
// timestamp: now
|
|
141
|
-
// } as BalanceItem;
|
|
142
|
-
// }).forEach(callback);
|
|
143
|
-
//
|
|
144
|
-
// return undefined;
|
|
145
|
-
// }
|
|
146
|
-
|
|
147
119
|
const substrateApi = await substrateApiMap[chainSlug].isReady;
|
|
148
|
-
return (0, _substrate.subscribeSubstrateBalance)(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback);
|
|
120
|
+
return (0, _substrate.subscribeSubstrateBalance)(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback, extrinsicType);
|
|
149
121
|
});
|
|
150
122
|
return () => {
|
|
151
123
|
unsubList.forEach(subProm => {
|
|
@@ -9,6 +9,8 @@ var _api = require("@gear-js/api");
|
|
|
9
9
|
var _types = require("@subwallet/chain-list/types");
|
|
10
10
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
11
11
|
var _constants = require("@subwallet/extension-base/constants");
|
|
12
|
+
var _nominationpoolsPallet = require("@subwallet/extension-base/core/substrate/nominationpools-pallet");
|
|
13
|
+
var _systemPallet = require("@subwallet/extension-base/core/substrate/system-pallet");
|
|
12
14
|
var _wasm = require("@subwallet/extension-base/koni/api/tokens/wasm");
|
|
13
15
|
var _utils = require("@subwallet/extension-base/koni/api/tokens/wasm/utils");
|
|
14
16
|
var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
|
|
@@ -23,7 +25,7 @@ var _equilibrium = require("./equilibrium");
|
|
|
23
25
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
24
26
|
// SPDX-License-Identifier: Apache-2.0
|
|
25
27
|
|
|
26
|
-
const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substrateApi, evmApi, callback) => {
|
|
28
|
+
const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substrateApi, evmApi, callback, extrinsicType) => {
|
|
27
29
|
let unsubNativeToken;
|
|
28
30
|
let unsubLocalToken;
|
|
29
31
|
let unsubEvmContractToken;
|
|
@@ -35,7 +37,8 @@ const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substra
|
|
|
35
37
|
addresses,
|
|
36
38
|
chainInfo,
|
|
37
39
|
assetMap,
|
|
38
|
-
callback
|
|
40
|
+
callback,
|
|
41
|
+
extrinsicType
|
|
39
42
|
};
|
|
40
43
|
const substrateParams = {
|
|
41
44
|
...baseParams,
|
|
@@ -107,11 +110,13 @@ const subscribeWithSystemAccountPallet = async _ref => {
|
|
|
107
110
|
addresses,
|
|
108
111
|
callback,
|
|
109
112
|
chainInfo,
|
|
113
|
+
extrinsicType,
|
|
110
114
|
substrateApi
|
|
111
115
|
} = _ref;
|
|
112
116
|
const chainNativeTokenSlug = (0, _utils2._getChainNativeTokenSlug)(chainInfo);
|
|
113
117
|
const balanceSubscribe = substrateApi.rx.query.system.account.multi(addresses);
|
|
114
|
-
let poolSubscribe;
|
|
118
|
+
let poolSubscribe; // add points in nomination pool back to user's balance
|
|
119
|
+
|
|
115
120
|
if ((0, _utils2._isSubstrateRelayChain)(chainInfo) && substrateApi.query.nominationPools) {
|
|
116
121
|
var _substrateApi$rx$quer;
|
|
117
122
|
poolSubscribe = (_substrateApi$rx$quer = substrateApi.rx.query.nominationPools.poolMembers) === null || _substrateApi$rx$quer === void 0 ? void 0 : _substrateApi$rx$quer.multi(addresses);
|
|
@@ -127,54 +132,26 @@ const subscribeWithSystemAccountPallet = async _ref => {
|
|
|
127
132
|
}
|
|
128
133
|
const subscription = (0, _rxjs.combineLatest)({
|
|
129
134
|
balances: balanceSubscribe,
|
|
130
|
-
|
|
135
|
+
poolMemberInfos: poolSubscribe
|
|
131
136
|
}).subscribe(_ref2 => {
|
|
132
137
|
let {
|
|
133
|
-
balances
|
|
134
|
-
|
|
138
|
+
balances,
|
|
139
|
+
poolMemberInfos
|
|
135
140
|
} = _ref2;
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
let [, amount] = _ref3;
|
|
144
|
-
pooled = pooled.add(new _util.BN(amount));
|
|
145
|
-
});
|
|
146
|
-
pooledStakingBalances.push(pooled);
|
|
147
|
-
} else {
|
|
148
|
-
pooledStakingBalances.push(_util.BN_ZERO);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
const items = balances.map((balance, index) => {
|
|
152
|
-
var _balance$data, _balance$data$free, _balance$data2, _balance$data2$reserv, _balance$data3, _balance$data3$miscFr, _balance$data4, _balance$data4$frozen, _balance$data5, _balance$data5$feeFro;
|
|
153
|
-
let total = ((_balance$data = balance.data) === null || _balance$data === void 0 ? void 0 : (_balance$data$free = _balance$data.free) === null || _balance$data$free === void 0 ? void 0 : _balance$data$free.toBn()) || new _util.BN(0);
|
|
154
|
-
const reserved = ((_balance$data2 = balance.data) === null || _balance$data2 === void 0 ? void 0 : (_balance$data2$reserv = _balance$data2.reserved) === null || _balance$data2$reserv === void 0 ? void 0 : _balance$data2$reserv.toBn()) || new _util.BN(0);
|
|
155
|
-
// @ts-ignore
|
|
156
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
157
|
-
const miscFrozen = ((_balance$data3 = balance.data) === null || _balance$data3 === void 0 ? void 0 : (_balance$data3$miscFr = _balance$data3.miscFrozen) === null || _balance$data3$miscFr === void 0 ? void 0 : _balance$data3$miscFr.toBn()) || (balance === null || balance === void 0 ? void 0 : (_balance$data4 = balance.data) === null || _balance$data4 === void 0 ? void 0 : (_balance$data4$frozen = _balance$data4.frozen) === null || _balance$data4$frozen === void 0 ? void 0 : _balance$data4$frozen.toBn()) || new _util.BN(0);
|
|
158
|
-
const feeFrozen = ((_balance$data5 = balance.data) === null || _balance$data5 === void 0 ? void 0 : (_balance$data5$feeFro = _balance$data5.feeFrozen) === null || _balance$data5$feeFro === void 0 ? void 0 : _balance$data5$feeFro.toBn()) || new _util.BN(0);
|
|
159
|
-
let locked = reserved.add(miscFrozen);
|
|
160
|
-
total = total.add(reserved);
|
|
161
|
-
const pooledStakingBalance = pooledStakingBalances[index] || _util.BN_ZERO;
|
|
162
|
-
if (pooledStakingBalance.gt(_util.BN_ZERO)) {
|
|
163
|
-
total = total.add(pooledStakingBalance);
|
|
164
|
-
locked = locked.add(pooledStakingBalance);
|
|
165
|
-
}
|
|
166
|
-
const free = total.sub(locked);
|
|
141
|
+
const items = balances.map((_balance, index) => {
|
|
142
|
+
const balanceInfo = _balance.toPrimitive();
|
|
143
|
+
const poolMemberInfo = poolMemberInfos[index].toPrimitive();
|
|
144
|
+
const nominationPoolBalance = poolMemberInfo ? (0, _nominationpoolsPallet._getActiveStakeInNominationPool)(poolMemberInfo) : '0';
|
|
145
|
+
const transferableBalance = (0, _systemPallet._getSystemPalletTransferable)(balanceInfo, (0, _utils2._getChainExistentialDeposit)(chainInfo), extrinsicType);
|
|
146
|
+
const totalBalance = (0, _systemPallet._getSystemPalletTotalBalance)(balanceInfo);
|
|
147
|
+
const totalLockedFromTransfer = new _bignumber.default(totalBalance).minus(transferableBalance).plus(nominationPoolBalance);
|
|
167
148
|
return {
|
|
168
149
|
address: addresses[index],
|
|
169
150
|
tokenSlug: chainNativeTokenSlug,
|
|
170
|
-
free:
|
|
171
|
-
locked:
|
|
151
|
+
free: transferableBalance,
|
|
152
|
+
locked: totalLockedFromTransfer.toFixed(),
|
|
172
153
|
state: _KoniTypes.APIItemState.READY,
|
|
173
|
-
|
|
174
|
-
miscFrozen: miscFrozen.toString(),
|
|
175
|
-
reserved: reserved.toString(),
|
|
176
|
-
feeFrozen: feeFrozen.toString()
|
|
177
|
-
}
|
|
154
|
+
metadata: balanceInfo
|
|
178
155
|
};
|
|
179
156
|
});
|
|
180
157
|
callback(items);
|
|
@@ -183,14 +160,14 @@ const subscribeWithSystemAccountPallet = async _ref => {
|
|
|
183
160
|
subscription.unsubscribe();
|
|
184
161
|
};
|
|
185
162
|
};
|
|
186
|
-
const subscribeBridgedBalance = async
|
|
163
|
+
const subscribeBridgedBalance = async _ref3 => {
|
|
187
164
|
let {
|
|
188
165
|
addresses,
|
|
189
166
|
assetMap,
|
|
190
167
|
callback,
|
|
191
168
|
chainInfo,
|
|
192
169
|
substrateApi
|
|
193
|
-
} =
|
|
170
|
+
} = _ref3;
|
|
194
171
|
const chain = chainInfo.slug;
|
|
195
172
|
const tokenMap = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.LOCAL]);
|
|
196
173
|
|
|
@@ -223,11 +200,7 @@ const subscribeBridgedBalance = async _ref4 => {
|
|
|
223
200
|
tokenSlug: tokenInfo.slug,
|
|
224
201
|
free: free.toString(),
|
|
225
202
|
locked: frozen.toString(),
|
|
226
|
-
state: _KoniTypes.APIItemState.READY
|
|
227
|
-
substrateInfo: {
|
|
228
|
-
miscFrozen: frozen.toString(),
|
|
229
|
-
reserved: '0'
|
|
230
|
-
}
|
|
203
|
+
state: _KoniTypes.APIItemState.READY
|
|
231
204
|
};
|
|
232
205
|
});
|
|
233
206
|
callback(items);
|
|
@@ -253,19 +226,19 @@ function extractOkResponse(response) {
|
|
|
253
226
|
}
|
|
254
227
|
return undefined;
|
|
255
228
|
}
|
|
256
|
-
const subscribePSP22Balance =
|
|
229
|
+
const subscribePSP22Balance = _ref4 => {
|
|
257
230
|
let {
|
|
258
231
|
addresses,
|
|
259
232
|
assetMap,
|
|
260
233
|
callback,
|
|
261
234
|
chainInfo,
|
|
262
235
|
substrateApi
|
|
263
|
-
} =
|
|
236
|
+
} = _ref4;
|
|
264
237
|
const chain = chainInfo.slug;
|
|
265
238
|
const psp22ContractMap = {};
|
|
266
239
|
const tokenList = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.PSP22]);
|
|
267
|
-
Object.entries(tokenList).forEach(
|
|
268
|
-
let [slug, tokenInfo] =
|
|
240
|
+
Object.entries(tokenList).forEach(_ref5 => {
|
|
241
|
+
let [slug, tokenInfo] = _ref5;
|
|
269
242
|
psp22ContractMap[slug] = (0, _wasm.getPSP22ContractPromise)(substrateApi, (0, _utils2._getContractAddressOfToken)(tokenInfo));
|
|
270
243
|
});
|
|
271
244
|
const getTokenBalances = () => {
|
|
@@ -312,7 +285,7 @@ const subscribePSP22Balance = _ref5 => {
|
|
|
312
285
|
clearInterval(interval);
|
|
313
286
|
};
|
|
314
287
|
};
|
|
315
|
-
const subscribeTokensAccountsPallet = async
|
|
288
|
+
const subscribeTokensAccountsPallet = async _ref6 => {
|
|
316
289
|
let {
|
|
317
290
|
addresses,
|
|
318
291
|
assetMap,
|
|
@@ -320,7 +293,7 @@ const subscribeTokensAccountsPallet = async _ref7 => {
|
|
|
320
293
|
chainInfo,
|
|
321
294
|
includeNativeToken,
|
|
322
295
|
substrateApi
|
|
323
|
-
} =
|
|
296
|
+
} = _ref6;
|
|
324
297
|
const chain = chainInfo.slug;
|
|
325
298
|
const tokenTypes = includeNativeToken ? [_types._AssetType.NATIVE, _types._AssetType.LOCAL] : [_types._AssetType.LOCAL];
|
|
326
299
|
const tokenMap = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, tokenTypes);
|
|
@@ -346,11 +319,7 @@ const subscribeTokensAccountsPallet = async _ref7 => {
|
|
|
346
319
|
tokenSlug: tokenInfo.slug,
|
|
347
320
|
state: _KoniTypes.APIItemState.READY,
|
|
348
321
|
free: freeBalance.toString(),
|
|
349
|
-
locked: lockedBalance.toString()
|
|
350
|
-
substrateInfo: {
|
|
351
|
-
reserved: tokenBalance.reserved.toString(),
|
|
352
|
-
miscFrozen: tokenBalance.frozen.toString()
|
|
353
|
-
}
|
|
322
|
+
locked: lockedBalance.toString()
|
|
354
323
|
};
|
|
355
324
|
});
|
|
356
325
|
callback(items);
|
|
@@ -366,7 +335,7 @@ const subscribeTokensAccountsPallet = async _ref7 => {
|
|
|
366
335
|
});
|
|
367
336
|
};
|
|
368
337
|
};
|
|
369
|
-
const subscribeAssetsAccountPallet = async
|
|
338
|
+
const subscribeAssetsAccountPallet = async _ref7 => {
|
|
370
339
|
let {
|
|
371
340
|
addresses,
|
|
372
341
|
assetMap,
|
|
@@ -374,7 +343,7 @@ const subscribeAssetsAccountPallet = async _ref8 => {
|
|
|
374
343
|
chainInfo,
|
|
375
344
|
includeNativeToken,
|
|
376
345
|
substrateApi
|
|
377
|
-
} =
|
|
346
|
+
} = _ref7;
|
|
378
347
|
const chain = chainInfo.slug;
|
|
379
348
|
const tokenMap = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.LOCAL]);
|
|
380
349
|
Object.values(tokenMap).forEach(token => {
|
|
@@ -409,11 +378,7 @@ const subscribeAssetsAccountPallet = async _ref8 => {
|
|
|
409
378
|
tokenSlug: tokenInfo.slug,
|
|
410
379
|
free: free.toString(),
|
|
411
380
|
locked: frozen.toString(),
|
|
412
|
-
state: _KoniTypes.APIItemState.READY
|
|
413
|
-
substrateInfo: {
|
|
414
|
-
miscFrozen: frozen.toString(),
|
|
415
|
-
reserved: '0'
|
|
416
|
-
}
|
|
381
|
+
state: _KoniTypes.APIItemState.READY
|
|
417
382
|
};
|
|
418
383
|
});
|
|
419
384
|
callback(items);
|
|
@@ -431,14 +396,14 @@ const subscribeAssetsAccountPallet = async _ref8 => {
|
|
|
431
396
|
};
|
|
432
397
|
|
|
433
398
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
434
|
-
const subscribeOrmlTokensPallet = async
|
|
399
|
+
const subscribeOrmlTokensPallet = async _ref8 => {
|
|
435
400
|
let {
|
|
436
401
|
addresses,
|
|
437
402
|
assetMap,
|
|
438
403
|
callback,
|
|
439
404
|
chainInfo,
|
|
440
405
|
substrateApi
|
|
441
|
-
} =
|
|
406
|
+
} = _ref8;
|
|
442
407
|
const chain = chainInfo.slug;
|
|
443
408
|
const tokenTypes = [_types._AssetType.LOCAL];
|
|
444
409
|
const tokenMap = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, tokenTypes);
|
|
@@ -465,11 +430,7 @@ const subscribeOrmlTokensPallet = async _ref9 => {
|
|
|
465
430
|
tokenSlug: tokenInfo.slug,
|
|
466
431
|
state: _KoniTypes.APIItemState.READY,
|
|
467
432
|
free: freeBalance.toString(),
|
|
468
|
-
locked: lockedBalance.toString()
|
|
469
|
-
substrateInfo: {
|
|
470
|
-
reserved: tokenBalance.reserved.toString(),
|
|
471
|
-
miscFrozen: tokenBalance.frozen.toString()
|
|
472
|
-
}
|
|
433
|
+
locked: lockedBalance.toString()
|
|
473
434
|
};
|
|
474
435
|
});
|
|
475
436
|
callback(items);
|
|
@@ -488,14 +449,14 @@ const subscribeOrmlTokensPallet = async _ref9 => {
|
|
|
488
449
|
});
|
|
489
450
|
};
|
|
490
451
|
};
|
|
491
|
-
const subscribeGRC20Balance =
|
|
452
|
+
const subscribeGRC20Balance = _ref9 => {
|
|
492
453
|
let {
|
|
493
454
|
addresses,
|
|
494
455
|
assetMap,
|
|
495
456
|
callback,
|
|
496
457
|
chainInfo,
|
|
497
458
|
substrateApi
|
|
498
|
-
} =
|
|
459
|
+
} = _ref9;
|
|
499
460
|
if (!(substrateApi instanceof _api.GearApi)) {
|
|
500
461
|
console.warn('Cannot subscribe GRC20 balance without GearApi instance');
|
|
501
462
|
return _util.noop;
|
|
@@ -503,8 +464,8 @@ const subscribeGRC20Balance = _ref10 => {
|
|
|
503
464
|
const chain = chainInfo.slug;
|
|
504
465
|
const psp22ContractMap = {};
|
|
505
466
|
const tokenList = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.GRC20]);
|
|
506
|
-
Object.entries(tokenList).forEach(
|
|
507
|
-
let [slug, tokenInfo] =
|
|
467
|
+
Object.entries(tokenList).forEach(_ref10 => {
|
|
468
|
+
let [slug, tokenInfo] = _ref10;
|
|
508
469
|
psp22ContractMap[slug] = (0, _utils3.getGRC20ContractPromise)(substrateApi, (0, _utils2._getContractAddressOfToken)(tokenInfo));
|
|
509
470
|
});
|
|
510
471
|
const getTokenBalances = () => {
|
|
@@ -165,8 +165,8 @@ class BalanceService {
|
|
|
165
165
|
});
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
/** Subscribe token free balance of
|
|
169
|
-
async
|
|
168
|
+
/** Subscribe token free balance of an address on chain */
|
|
169
|
+
async subscribeTransferableBalance(address, chain, tokenSlug, extrinsicType, callback) {
|
|
170
170
|
const chainInfo = this.state.chainService.getChainInfoByKey(chain);
|
|
171
171
|
const chainState = this.state.chainService.getChainStateByKey(chain);
|
|
172
172
|
if (!chainInfo || !chainState || !chainState.active) {
|
|
@@ -199,7 +199,8 @@ class BalanceService {
|
|
|
199
199
|
const balance = {
|
|
200
200
|
value: rs.free,
|
|
201
201
|
decimals: tokenInfo.decimals || 0,
|
|
202
|
-
symbol: tokenInfo.symbol
|
|
202
|
+
symbol: tokenInfo.symbol,
|
|
203
|
+
metadata: rs.metadata
|
|
203
204
|
};
|
|
204
205
|
if (callback) {
|
|
205
206
|
callback(balance);
|
|
@@ -210,7 +211,7 @@ class BalanceService {
|
|
|
210
211
|
}
|
|
211
212
|
resolve([unsub, balance]);
|
|
212
213
|
}
|
|
213
|
-
});
|
|
214
|
+
}, extrinsicType);
|
|
214
215
|
setTimeout(() => {
|
|
215
216
|
if (hasError) {
|
|
216
217
|
var _unsub2;
|
|
@@ -224,15 +225,16 @@ class BalanceService {
|
|
|
224
225
|
/**
|
|
225
226
|
* @public
|
|
226
227
|
* @async
|
|
227
|
-
* @function
|
|
228
|
+
* @function getTransferableBalance
|
|
228
229
|
* @desc Fetch free balance on chain
|
|
229
230
|
* @param {string} address - Address
|
|
230
231
|
* @param {string} chain - Slug of chain
|
|
231
232
|
* @param {string} [tokenSlug] - Slug of token
|
|
233
|
+
* @param extrinsicType - Customize transferable based on context
|
|
232
234
|
* @return {Promise<AmountData>} - Free token balance of address on chain
|
|
233
|
-
|
|
234
|
-
async
|
|
235
|
-
const [, balance] = await this.
|
|
235
|
+
*/
|
|
236
|
+
async getTransferableBalance(address, chain, tokenSlug, extrinsicType) {
|
|
237
|
+
const [, balance] = await this.subscribeTransferableBalance(address, chain, tokenSlug, extrinsicType);
|
|
236
238
|
return balance;
|
|
237
239
|
}
|
|
238
240
|
|
|
@@ -334,7 +336,7 @@ class BalanceService {
|
|
|
334
336
|
}).map(asset => asset.slug);
|
|
335
337
|
const unsub = (0, _helpers.subscribeBalance)(addresses, activeChainSlugs, assets, assetMap, chainInfoMap, substrateApiMap, evmApiMap, result => {
|
|
336
338
|
!cancel && this.setBalanceItem(result);
|
|
337
|
-
});
|
|
339
|
+
}, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
|
|
338
340
|
const unsub2 = this.state.subscribeMantaPayBalance();
|
|
339
341
|
this._unsubscribeBalance = () => {
|
|
340
342
|
cancel = true;
|
|
@@ -497,7 +497,6 @@ class ChainService {
|
|
|
497
497
|
needUpdateChainApiList,
|
|
498
498
|
storedChainInfoList
|
|
499
499
|
} = (0, _utils.updateLatestChainInfo)(this.dataMap, latestChainInfo);
|
|
500
|
-
console.log('here', needUpdateChainApiList, storedChainInfoList);
|
|
501
500
|
this.dbService.bulkUpdateChainStore(storedChainInfoList).catch(console.error);
|
|
502
501
|
this.updateChainSubscription();
|
|
503
502
|
needUpdateChainApiList.forEach(chainInfo => {
|
|
@@ -78,6 +78,7 @@ var _exportNames = {
|
|
|
78
78
|
findChainInfoByHalfGenesisHash: true,
|
|
79
79
|
findChainInfoByChainId: true,
|
|
80
80
|
_isMantaZkAsset: true,
|
|
81
|
+
_getChainExistentialDeposit: true,
|
|
81
82
|
randomizeProvider: true,
|
|
82
83
|
_isAssetCanPayTxFee: true,
|
|
83
84
|
updateLatestChainInfo: true
|
|
@@ -90,6 +91,7 @@ exports._getAssetOriginChain = _getAssetOriginChain;
|
|
|
90
91
|
exports._getAssetPriceId = _getAssetPriceId;
|
|
91
92
|
exports._getAssetSymbol = _getAssetSymbol;
|
|
92
93
|
exports._getBlockExplorerFromChain = _getBlockExplorerFromChain;
|
|
94
|
+
exports._getChainExistentialDeposit = _getChainExistentialDeposit;
|
|
93
95
|
exports._getChainName = _getChainName;
|
|
94
96
|
exports._getChainNativeTokenBasicInfo = _getChainNativeTokenBasicInfo;
|
|
95
97
|
exports._getChainNativeTokenSlug = _getChainNativeTokenSlug;
|
|
@@ -582,6 +584,10 @@ exports.findChainInfoByChainId = findChainInfoByChainId;
|
|
|
582
584
|
function _isMantaZkAsset(chainAsset) {
|
|
583
585
|
return _constants._MANTA_ZK_CHAIN_GROUP.includes(chainAsset.originChain) && chainAsset.symbol.startsWith(_constants._ZK_ASSET_PREFIX);
|
|
584
586
|
}
|
|
587
|
+
function _getChainExistentialDeposit(chainInfo) {
|
|
588
|
+
var _chainInfo$substrateI18;
|
|
589
|
+
return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI18 = chainInfo.substrateInfo) === null || _chainInfo$substrateI18 === void 0 ? void 0 : _chainInfo$substrateI18.existentialDeposit) || '0';
|
|
590
|
+
}
|
|
585
591
|
function randomizeProvider(providers, excludedKeys) {
|
|
586
592
|
if (Object.keys(providers).length === 0) {
|
|
587
593
|
return {
|
|
@@ -134,7 +134,7 @@ class BasePoolHandler {
|
|
|
134
134
|
};
|
|
135
135
|
}
|
|
136
136
|
const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(this.chain);
|
|
137
|
-
const nativeTokenBalance = await this.state.balanceService.
|
|
137
|
+
const nativeTokenBalance = await this.state.balanceService.getTransferableBalance(request.address, this.chain);
|
|
138
138
|
const bnNativeTokenBalance = new _util.BN(nativeTokenBalance.value);
|
|
139
139
|
const bnMinBalanceToJoin = new _util.BN(((_poolInfo$statistic2 = poolInfo.statistic) === null || _poolInfo$statistic2 === void 0 ? void 0 : (_poolInfo$statistic2$ = _poolInfo$statistic2.earningThreshold) === null || _poolInfo$statistic2$ === void 0 ? void 0 : _poolInfo$statistic2$.join) || '0').add(new _util.BN(poolInfo.metadata.maintainBalance));
|
|
140
140
|
if (bnNativeTokenBalance.lte(bnMinBalanceToJoin)) {
|
|
@@ -74,11 +74,11 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
74
74
|
const feeAssetInfo = this.state.chainService.getAssetBySlug(this.feeAssets[0]);
|
|
75
75
|
const altInputAssetInfo = this.state.chainService.getAssetBySlug(this.altInputAsset);
|
|
76
76
|
const inputAssetInfo = this.state.chainService.getAssetBySlug(this.inputAsset);
|
|
77
|
-
const [inputAssetBalance, altInputAssetBalance, feeAssetBalance] = await Promise.all([this.state.balanceService.
|
|
77
|
+
const [inputAssetBalance, altInputAssetBalance, feeAssetBalance] = await Promise.all([this.state.balanceService.getTransferableBalance(request.address, inputAssetInfo.originChain, inputAssetInfo.slug), altInputAssetInfo ? this.state.balanceService.getTransferableBalance(request.address, altInputAssetInfo.originChain, altInputAssetInfo.slug) : Promise.resolve({
|
|
78
78
|
symbol: '',
|
|
79
79
|
decimals: 0,
|
|
80
80
|
value: '0'
|
|
81
|
-
}), this.state.balanceService.
|
|
81
|
+
}), this.state.balanceService.getTransferableBalance(request.address, feeAssetInfo.originChain, feeAssetInfo.slug)]);
|
|
82
82
|
const bnInputAssetBalance = new _util.BN(inputAssetBalance.value);
|
|
83
83
|
const bnAltInputAssetBalance = new _util.BN(altInputAssetBalance.value);
|
|
84
84
|
const bnMinJoinPool = new _util.BN(poolInfo.statistic.earningThreshold.join);
|
|
@@ -200,13 +200,13 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
200
200
|
const bnAmount = new _util.BN(amount);
|
|
201
201
|
const inputTokenSlug = this.inputAsset; // assume that the pool only has 1 input token, will update later
|
|
202
202
|
const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
|
|
203
|
-
const inputTokenBalance = await this.state.balanceService.
|
|
203
|
+
const inputTokenBalance = await this.state.balanceService.getTransferableBalance(address, inputTokenInfo.originChain, inputTokenSlug);
|
|
204
204
|
const bnInputTokenBalance = new _util.BN(inputTokenBalance.value);
|
|
205
205
|
if (!bnInputTokenBalance.gte(bnAmount)) {
|
|
206
206
|
if (this.altInputAsset) {
|
|
207
207
|
const altInputTokenSlug = this.altInputAsset;
|
|
208
208
|
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
209
|
-
const altInputTokenBalance = await this.state.balanceService.
|
|
209
|
+
const altInputTokenBalance = await this.state.balanceService.getTransferableBalance(address, altInputTokenInfo.originChain, altInputTokenSlug);
|
|
210
210
|
const bnAltInputTokenBalance = new _util.BN(altInputTokenBalance.value || '0');
|
|
211
211
|
if (bnAltInputTokenBalance.gt(_util.BN_ZERO)) {
|
|
212
212
|
const altChainInfo = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
@@ -279,17 +279,16 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
279
279
|
const altInputTokenSlug = this.altInputAsset || '';
|
|
280
280
|
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
281
281
|
const inputTokenInfo = this.state.getAssetBySlug(this.inputAsset);
|
|
282
|
-
const altInputTokenBalance = await this.state.balanceService.
|
|
282
|
+
const altInputTokenBalance = await this.state.balanceService.getTransferableBalance(params.address, altInputTokenInfo.originChain, altInputTokenSlug);
|
|
283
283
|
const missingAmount = bnAmount.sub(bnInputTokenBalance); // TODO: what if input token is not LOCAL ??
|
|
284
284
|
const xcmFee = new _util.BN(path.totalFee[1].amount || '0');
|
|
285
285
|
const xcmAmount = missingAmount.add(xcmFee);
|
|
286
286
|
const bnAltInputTokenBalance = new _util.BN(altInputTokenBalance.value || '0');
|
|
287
|
-
|
|
288
|
-
if (!bnAltInputTokenBalance.sub(xcmAmount).gte(altInputTokenMinAmount)) {
|
|
287
|
+
if (!bnAltInputTokenBalance.sub(xcmAmount).gt(_util.BN_ZERO)) {
|
|
289
288
|
processValidation.failedStep = path.steps[1];
|
|
290
289
|
processValidation.ok = false;
|
|
291
290
|
processValidation.status = _types.YieldValidationStatus.NOT_ENOUGH_BALANCE;
|
|
292
|
-
const maxBn = bnInputTokenBalance.add(new _util.BN(altInputTokenBalance.value)).sub(xcmFee)
|
|
291
|
+
const maxBn = bnInputTokenBalance.add(new _util.BN(altInputTokenBalance.value)).sub(xcmFee);
|
|
293
292
|
const maxValue = (0, _utils3.formatNumber)(maxBn.toString(), inputTokenInfo.decimals || 0);
|
|
294
293
|
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
295
294
|
const symbol = altInputTokenInfo.symbol;
|
|
@@ -297,7 +296,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
297
296
|
const inputNetworkName = this.chainInfo.name;
|
|
298
297
|
const altNetworkName = altNetwork.name;
|
|
299
298
|
const currentValue = (0, _utils3.formatNumber)(bnInputTokenBalance.toString(), inputTokenInfo.decimals || 0);
|
|
300
|
-
const bnMaxXCM = new _util.BN(altInputTokenBalance.value).sub(xcmFee)
|
|
299
|
+
const bnMaxXCM = new _util.BN(altInputTokenBalance.value).sub(xcmFee);
|
|
301
300
|
const maxXCMValue = (0, _utils3.formatNumber)(bnMaxXCM.toString(), inputTokenInfo.decimals || 0);
|
|
302
301
|
processValidation.message = (0, _i18next.t)('You can only enter a maximum of {{maxValue}} {{symbol}}, which is {{currentValue}} {{symbol}} ({{inputNetworkName}}) and {{maxXCMValue}} {{symbol}} ({{altNetworkName}}). Lower your amount and try again.', {
|
|
303
302
|
replace: {
|
|
@@ -334,7 +333,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
334
333
|
if (this.feeAssets.length === 1 && feeTokenSlug === defaultFeeTokenSlug) {
|
|
335
334
|
var _path$totalFee$id;
|
|
336
335
|
const bnFeeAmount = new _util.BN(((_path$totalFee$id = path.totalFee[id]) === null || _path$totalFee$id === void 0 ? void 0 : _path$totalFee$id.amount) || '0');
|
|
337
|
-
const feeTokenBalance = await this.state.balanceService.
|
|
336
|
+
const feeTokenBalance = await this.state.balanceService.getTransferableBalance(params.address, feeTokenInfo.originChain, feeTokenSlug);
|
|
338
337
|
const bnFeeTokenBalance = new _util.BN(feeTokenBalance.value || '0');
|
|
339
338
|
const bnFeeTokenMinAmount = new _util.BN((feeTokenInfo === null || feeTokenInfo === void 0 ? void 0 : feeTokenInfo.minAmount) || '0');
|
|
340
339
|
if (!bnFeeTokenBalance.sub(bnFeeAmount).gte(bnFeeTokenMinAmount)) {
|
|
@@ -372,7 +371,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
372
371
|
const inputTokenSlug = this.inputAsset;
|
|
373
372
|
const inputTokenInfo = this.state.getAssetBySlug(inputTokenSlug);
|
|
374
373
|
const balanceService = this.state.balanceService;
|
|
375
|
-
const inputTokenBalance = await balanceService.
|
|
374
|
+
const inputTokenBalance = await balanceService.getTransferableBalance(params.address, inputTokenInfo.originChain, inputTokenSlug);
|
|
376
375
|
const bnInputTokenBalance = new _util.BN(inputTokenBalance.value || '0');
|
|
377
376
|
const bnAmount = new _util.BN(params.amount);
|
|
378
377
|
if (bnAmount.lte(_util.BN_ZERO)) {
|
|
@@ -422,7 +421,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
422
421
|
const originTokenInfo = this.state.getAssetBySlug(originTokenSlug);
|
|
423
422
|
const destinationTokenInfo = this.state.getAssetBySlug(destinationTokenSlug);
|
|
424
423
|
const substrateApi = this.state.getSubstrateApi(originChainInfo.slug);
|
|
425
|
-
const inputTokenBalance = await this.state.balanceService.
|
|
424
|
+
const inputTokenBalance = await this.state.balanceService.getTransferableBalance(address, destinationTokenInfo.originChain, destinationTokenSlug);
|
|
426
425
|
const bnInputTokenBalance = new _util.BN(inputTokenBalance.value);
|
|
427
426
|
const bnXcmFee = new _util.BN(xcmFee);
|
|
428
427
|
const bnAmount = new _util.BN(amount);
|