@subwallet/extension-base 1.0.2-1 → 1.0.2-1b
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 +16 -34
- package/background/KoniTypes.js +6 -7
- package/background/errors/TransactionError.js +21 -1
- package/cjs/background/KoniTypes.js +6 -7
- package/cjs/background/errors/TransactionError.js +20 -0
- package/cjs/constants/index.js +8 -26
- package/cjs/koni/api/dotsama/balance.js +49 -224
- package/cjs/koni/api/dotsama/transfer.js +30 -29
- package/cjs/koni/api/nft/acala_nft/index.js +4 -1
- package/cjs/koni/api/nft/bit.country/index.js +4 -1
- package/cjs/koni/api/nft/evm_nft/index.js +7 -3
- package/cjs/koni/api/nft/index.js +3 -6
- package/cjs/koni/api/nft/karura_nft/index.js +4 -1
- package/cjs/koni/api/nft/rmrk_nft/index.js +8 -1
- package/cjs/koni/api/nft/statemine_nft/index.js +4 -1
- package/cjs/koni/api/nft/unique_nft/index.js +6 -1
- package/cjs/koni/api/nft/wasm_nft/index.js +169 -111
- package/cjs/koni/api/nft/wasm_nft/utils.js +11 -7
- package/cjs/koni/api/staking/bonding/amplitude.js +13 -9
- package/cjs/koni/api/staking/bonding/astar.js +15 -13
- package/cjs/koni/api/staking/bonding/index.js +22 -10
- package/cjs/koni/api/staking/bonding/paraChain.js +85 -2
- package/cjs/koni/api/staking/bonding/relayChain.js +119 -16
- package/cjs/koni/api/staking/bonding/utils.js +27 -8
- package/cjs/koni/api/tokens/wasm/index.js +5 -4
- package/cjs/koni/api/tokens/wasm/utils.js +63 -0
- package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
- package/cjs/koni/api/xcm/utils.js +18 -13
- package/cjs/koni/api/xcm/xTokens.js +1 -1
- package/cjs/koni/api/xcm/xcmPallet.js +9 -6
- package/cjs/koni/background/cron.js +150 -47
- package/cjs/koni/background/handlers/Extension.js +106 -64
- package/cjs/koni/background/handlers/State.js +19 -21
- package/cjs/koni/background/handlers/Tabs.js +8 -1
- package/cjs/koni/background/subscription.js +32 -29
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +13 -8
- package/cjs/services/chain-service/handler/light-client/index.js +2 -0
- package/cjs/services/chain-service/index.js +6 -7
- package/cjs/services/event-service/index.js +5 -1
- package/cjs/services/event-service/types.js +11 -1
- package/cjs/services/history-service/index.js +16 -10
- package/cjs/services/history-service/subsquid-multi-chain-history.js +12 -9
- package/cjs/services/price-service/coingecko.js +0 -1
- package/cjs/services/price-service/index.js +2 -3
- package/cjs/services/request-service/handler/AuthRequestHandler.js +6 -2
- package/cjs/services/storage-service/DatabaseService.js +52 -33
- package/cjs/services/storage-service/db-stores/Nft.js +4 -17
- package/cjs/services/transaction-service/event-parser/index.js +20 -48
- package/cjs/services/transaction-service/index.js +23 -14
- package/cjs/utils/index.js +7 -14
- package/constants/index.d.ts +7 -13
- package/constants/index.js +7 -13
- package/koni/api/dotsama/balance.d.ts +0 -1
- package/koni/api/dotsama/balance.js +22 -197
- package/koni/api/dotsama/transfer.js +5 -4
- package/koni/api/nft/acala_nft/index.js +3 -1
- package/koni/api/nft/bit.country/index.js +3 -1
- package/koni/api/nft/evm_nft/index.js +6 -3
- package/koni/api/nft/index.d.ts +1 -2
- package/koni/api/nft/index.js +3 -6
- package/koni/api/nft/karura_nft/index.js +3 -1
- package/koni/api/nft/nft.d.ts +1 -0
- package/koni/api/nft/rmrk_nft/index.js +8 -1
- package/koni/api/nft/statemine_nft/index.js +3 -1
- package/koni/api/nft/unique_nft/index.js +5 -1
- package/koni/api/nft/wasm_nft/index.d.ts +0 -2
- package/koni/api/nft/wasm_nft/index.js +167 -109
- package/koni/api/nft/wasm_nft/utils.d.ts +7 -5
- package/koni/api/nft/wasm_nft/utils.js +7 -5
- package/koni/api/staking/bonding/amplitude.d.ts +0 -1
- package/koni/api/staking/bonding/amplitude.js +15 -10
- package/koni/api/staking/bonding/astar.js +8 -6
- package/koni/api/staking/bonding/index.d.ts +4 -1
- package/koni/api/staking/bonding/index.js +23 -13
- package/koni/api/staking/bonding/paraChain.d.ts +3 -0
- package/koni/api/staking/bonding/paraChain.js +86 -5
- package/koni/api/staking/bonding/relayChain.d.ts +5 -1
- package/koni/api/staking/bonding/relayChain.js +118 -18
- package/koni/api/staking/bonding/utils.d.ts +3 -2
- package/koni/api/staking/bonding/utils.js +27 -9
- package/koni/api/tokens/wasm/index.js +5 -4
- package/koni/api/tokens/wasm/utils.d.ts +6 -0
- package/koni/api/tokens/wasm/utils.js +54 -0
- package/koni/api/xcm/polkadotXcm.js +2 -2
- package/koni/api/xcm/utils.d.ts +5 -6
- package/koni/api/xcm/utils.js +15 -10
- package/koni/api/xcm/xTokens.js +2 -2
- package/koni/api/xcm/xcmPallet.js +10 -9
- package/koni/background/cron.d.ts +6 -1
- package/koni/background/cron.js +151 -48
- package/koni/background/handlers/Extension.d.ts +2 -2
- package/koni/background/handlers/Extension.js +108 -67
- package/koni/background/handlers/State.d.ts +5 -6
- package/koni/background/handlers/State.js +19 -21
- package/koni/background/handlers/Tabs.js +8 -1
- package/koni/background/subscription.js +31 -30
- package/package.json +9 -4
- package/services/chain-service/handler/SubstrateChainHandler.js +14 -9
- package/services/chain-service/handler/light-client/index.d.ts +17 -1
- package/services/chain-service/handler/light-client/index.js +1 -1
- package/services/chain-service/helper/psp22_abi.json +1041 -881
- package/services/chain-service/helper/psp34_abi.json +2963 -1807
- package/services/chain-service/index.js +6 -7
- package/services/event-service/index.js +5 -1
- package/services/event-service/types.d.ts +5 -9
- package/services/event-service/types.js +4 -1
- package/services/history-service/index.d.ts +1 -1
- package/services/history-service/index.js +16 -10
- package/services/history-service/subsquid-multi-chain-history.js +15 -11
- package/services/price-service/coingecko.js +0 -1
- package/services/price-service/index.js +2 -3
- package/services/request-service/handler/AuthRequestHandler.js +6 -2
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +52 -33
- package/services/storage-service/db-stores/Nft.d.ts +1 -2
- package/services/storage-service/db-stores/Nft.js +4 -16
- package/services/transaction-service/event-parser/index.js +21 -49
- package/services/transaction-service/index.js +23 -14
- package/utils/index.d.ts +1 -1
- package/utils/index.js +6 -12
|
@@ -3,34 +3,33 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getFreeBalance = getFreeBalance;
|
|
7
6
|
exports.subscribeBalance = subscribeBalance;
|
|
8
7
|
exports.subscribeEVMBalance = subscribeEVMBalance;
|
|
9
8
|
exports.subscribeSubstrateBalance = subscribeSubstrateBalance;
|
|
10
9
|
var _types = require("@subwallet/chain-list/types");
|
|
11
10
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
12
11
|
var _constants = require("@subwallet/extension-base/constants");
|
|
13
|
-
var
|
|
12
|
+
var _balance = require("@subwallet/extension-base/koni/api/tokens/evm/balance");
|
|
14
13
|
var _web = require("@subwallet/extension-base/koni/api/tokens/evm/web3");
|
|
15
14
|
var _wasm = require("@subwallet/extension-base/koni/api/tokens/wasm");
|
|
15
|
+
var _utils = require("@subwallet/extension-base/koni/api/tokens/wasm/utils");
|
|
16
16
|
var _handlers = require("@subwallet/extension-base/koni/background/handlers");
|
|
17
17
|
var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
|
|
18
|
-
var
|
|
19
|
-
var
|
|
18
|
+
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
19
|
+
var _utils3 = require("@subwallet/extension-base/utils");
|
|
20
20
|
var _util = require("@polkadot/util");
|
|
21
|
-
var _utilCrypto = require("@polkadot/util-crypto");
|
|
22
21
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
23
22
|
// SPDX-License-Identifier: Apache-2.0
|
|
24
23
|
|
|
25
24
|
// main subscription
|
|
26
25
|
function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmApiMap, callback) {
|
|
27
|
-
const [substrateAddresses, evmAddresses] = (0,
|
|
26
|
+
const [substrateAddresses, evmAddresses] = (0, _utils3.categoryAddresses)(addresses);
|
|
28
27
|
|
|
29
28
|
// Looping over each chain
|
|
30
29
|
const unsubList = Object.entries(chainInfoMap).map(async _ref => {
|
|
31
30
|
let [chainSlug, chainInfo] = _ref;
|
|
32
|
-
const useAddresses = (0,
|
|
33
|
-
if ((0,
|
|
31
|
+
const useAddresses = (0, _utils2._isChainEvmCompatible)(chainInfo) ? evmAddresses : substrateAddresses;
|
|
32
|
+
if ((0, _utils2._isPureEvmChain)(chainInfo)) {
|
|
34
33
|
const nativeTokenInfo = _handlers.state.getNativeTokenInfo(chainSlug);
|
|
35
34
|
return subscribeEVMBalance(chainSlug, useAddresses, evmApiMap, callback, nativeTokenInfo);
|
|
36
35
|
}
|
|
@@ -79,10 +78,10 @@ async function subscribeSubstrateBalance(addresses, chainInfo, chain, networkAPI
|
|
|
79
78
|
} else if (_constants2._BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
|
|
80
79
|
unsubLocalToken = await subscribeEquilibriumTokenBalance(addresses, chain, networkAPI.api, callBack, true);
|
|
81
80
|
}
|
|
82
|
-
if ((0,
|
|
81
|
+
if ((0, _utils2._isChainEvmCompatible)(chainInfo)) {
|
|
83
82
|
unsubEvmContractToken = subscribeERC20Interval(addresses, chain, evmApiMap, callBack);
|
|
84
83
|
}
|
|
85
|
-
if ((0,
|
|
84
|
+
if ((0, _utils2._checkSmartContractSupportByChain)(chainInfo, _types._AssetType.PSP22)) {
|
|
86
85
|
// Get sub-token for substrate-based chains
|
|
87
86
|
unsubWasmContractToken = subscribePSP22Balance(addresses, chain, networkAPI.api, callBack);
|
|
88
87
|
}
|
|
@@ -99,17 +98,23 @@ async function subscribeSubstrateBalance(addresses, chainInfo, chain, networkAPI
|
|
|
99
98
|
|
|
100
99
|
// handler according to different logic
|
|
101
100
|
async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI, callBack) {
|
|
102
|
-
const chainNativeTokenSlug = (0,
|
|
101
|
+
const chainNativeTokenSlug = (0, _utils2._getChainNativeTokenSlug)(chainInfo);
|
|
103
102
|
const unsub = await networkAPI.query.system.account.multi(addresses, async balances => {
|
|
104
103
|
let [total, reserved, miscFrozen, feeFrozen] = [new _util.BN(0), new _util.BN(0), new _util.BN(0), new _util.BN(0)];
|
|
105
104
|
let pooledStakingBalance = _util.BN_ZERO;
|
|
106
|
-
if ((0,
|
|
105
|
+
if ((0, _utils2._isSubstrateRelayChain)(chainInfo) && networkAPI.query.nominationPools) {
|
|
107
106
|
const poolMemberDatas = await networkAPI.query.nominationPools.poolMembers.multi(addresses);
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
107
|
+
if (poolMemberDatas) {
|
|
108
|
+
for (const _poolMemberData of poolMemberDatas) {
|
|
109
|
+
const poolMemberData = _poolMemberData.toPrimitive();
|
|
110
|
+
if (poolMemberData) {
|
|
111
|
+
const pooledBalance = new _util.BN(poolMemberData.points.toString());
|
|
112
|
+
pooledStakingBalance = pooledStakingBalance.add(pooledBalance);
|
|
113
|
+
Object.entries(poolMemberData.unbondingEras).forEach(_ref2 => {
|
|
114
|
+
let [, amount] = _ref2;
|
|
115
|
+
pooledStakingBalance = pooledStakingBalance.add(new _util.BN(amount));
|
|
116
|
+
});
|
|
117
|
+
}
|
|
113
118
|
}
|
|
114
119
|
}
|
|
115
120
|
}
|
|
@@ -130,7 +135,7 @@ async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI
|
|
|
130
135
|
const free = total.sub(locked);
|
|
131
136
|
callBack({
|
|
132
137
|
tokenSlug: chainNativeTokenSlug,
|
|
133
|
-
free: free.toString(),
|
|
138
|
+
free: free.gte(_util.BN_ZERO) ? free.toString() : '0',
|
|
134
139
|
locked: locked.toString(),
|
|
135
140
|
state: _KoniTypes.APIItemState.READY,
|
|
136
141
|
substrateInfo: {
|
|
@@ -144,79 +149,6 @@ async function subscribeWithSystemAccountPallet(addresses, chainInfo, networkAPI
|
|
|
144
149
|
unsub();
|
|
145
150
|
};
|
|
146
151
|
}
|
|
147
|
-
|
|
148
|
-
// deprecated
|
|
149
|
-
// function subscribeDarwiniaBalance (addresses: string[], chainInfo: _ChainInfo, chain: string, networkAPI: ApiPromise, callBack: (rs: BalanceItem) => void) {
|
|
150
|
-
// const tokenMap = state.getAssetByChainAndAsset(chain, [_AssetType.LOCAL]);
|
|
151
|
-
// const nativeTokenSlug = _getChainNativeTokenSlug(chainInfo);
|
|
152
|
-
//
|
|
153
|
-
// let totalBalance: BN = new BN(0);
|
|
154
|
-
// let freeBalance: BN = new BN(0);
|
|
155
|
-
// let miscFrozen: BN = new BN(0);
|
|
156
|
-
// let reservedKtonBalance: BN = new BN(0);
|
|
157
|
-
// let totalKtonBalance: BN = new BN(0);
|
|
158
|
-
//
|
|
159
|
-
// const unsubProms = addresses.map((address) => {
|
|
160
|
-
// return networkAPI.derive.balances?.all(address, async (balance: DeriveBalancesAll) => {
|
|
161
|
-
// // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
162
|
-
// freeBalance = freeBalance.add(balance.availableBalance?.toBn() || new BN(0));
|
|
163
|
-
// miscFrozen = miscFrozen.add(balance.lockedBalance?.toBn() || new BN(0));
|
|
164
|
-
// totalBalance = totalBalance.add(balance.freeBalance?.toBn() || new BN(0));
|
|
165
|
-
//
|
|
166
|
-
// const _systemBalance = await networkAPI.query.system.account(address);
|
|
167
|
-
// const systemBalance = _systemBalance.toHuman() as unknown as AccountInfo;
|
|
168
|
-
//
|
|
169
|
-
// // @ts-ignore
|
|
170
|
-
// const rawTotalKton = (systemBalance.data?.freeKton as string).replaceAll(',', '');
|
|
171
|
-
// // @ts-ignore
|
|
172
|
-
// const rawReservedKton = (systemBalance.data?.reservedKton as string).replaceAll(',', '');
|
|
173
|
-
//
|
|
174
|
-
// // @ts-ignore
|
|
175
|
-
// // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
176
|
-
// totalKtonBalance = totalKtonBalance.add(new BN(rawTotalKton) || new BN(0));
|
|
177
|
-
// // @ts-ignore
|
|
178
|
-
// // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
179
|
-
// reservedKtonBalance = reservedKtonBalance.add(new BN(rawReservedKton) || new BN(0));
|
|
180
|
-
//
|
|
181
|
-
// if (Object.keys(tokenMap).length > 1) {
|
|
182
|
-
// for (const tokenInfo of Object.values(tokenMap)) {
|
|
183
|
-
// if (_BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
|
|
184
|
-
// const freeKton = totalKtonBalance.sub(reservedKtonBalance);
|
|
185
|
-
//
|
|
186
|
-
// callBack({
|
|
187
|
-
// free: freeKton.toString(),
|
|
188
|
-
// locked: reservedKtonBalance.toString(),
|
|
189
|
-
// state: APIItemState.READY,
|
|
190
|
-
// tokenSlug: tokenInfo.slug
|
|
191
|
-
// });
|
|
192
|
-
// break;
|
|
193
|
-
// }
|
|
194
|
-
// }
|
|
195
|
-
// }
|
|
196
|
-
//
|
|
197
|
-
// const free = totalBalance.sub(miscFrozen);
|
|
198
|
-
//
|
|
199
|
-
// callBack({
|
|
200
|
-
// tokenSlug: nativeTokenSlug,
|
|
201
|
-
// free: free.toString(),
|
|
202
|
-
// locked: miscFrozen.toString(),
|
|
203
|
-
// state: APIItemState.READY,
|
|
204
|
-
// substrateInfo: {
|
|
205
|
-
// miscFrozen: miscFrozen.toString()
|
|
206
|
-
// }
|
|
207
|
-
// });
|
|
208
|
-
// });
|
|
209
|
-
// });
|
|
210
|
-
//
|
|
211
|
-
// return () => {
|
|
212
|
-
// Promise.all(unsubProms).then((unsubs) => {
|
|
213
|
-
// unsubs.forEach((unsub) => {
|
|
214
|
-
// unsub && unsub();
|
|
215
|
-
// });
|
|
216
|
-
// }).catch(console.error);
|
|
217
|
-
// };
|
|
218
|
-
// }
|
|
219
|
-
|
|
220
152
|
function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
|
|
221
153
|
let tokenList = {};
|
|
222
154
|
const erc20ContractMap = {};
|
|
@@ -229,7 +161,7 @@ function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
|
|
|
229
161
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
230
162
|
return contract.methods.balanceOf(address).call();
|
|
231
163
|
}));
|
|
232
|
-
free = (0,
|
|
164
|
+
free = (0, _utils3.sumBN)(balanceList.map(balance => new _util.BN(balance || 0)));
|
|
233
165
|
callBack({
|
|
234
166
|
tokenSlug: tokenInfo.slug,
|
|
235
167
|
free: free.toString(),
|
|
@@ -242,9 +174,9 @@ function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
|
|
|
242
174
|
});
|
|
243
175
|
};
|
|
244
176
|
tokenList = _handlers.state.getAssetByChainAndAsset(chain, [_types._AssetType.ERC20]);
|
|
245
|
-
Object.entries(tokenList).forEach(
|
|
246
|
-
let [slug, tokenInfo] =
|
|
247
|
-
erc20ContractMap[slug] = (0, _web.getERC20Contract)(chain, (0,
|
|
177
|
+
Object.entries(tokenList).forEach(_ref3 => {
|
|
178
|
+
let [slug, tokenInfo] = _ref3;
|
|
179
|
+
erc20ContractMap[slug] = (0, _web.getERC20Contract)(chain, (0, _utils2._getContractAddressOfToken)(tokenInfo), evmApiMap);
|
|
248
180
|
});
|
|
249
181
|
getTokenBalances();
|
|
250
182
|
const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
|
|
@@ -261,12 +193,14 @@ function subscribePSP22Balance(addresses, chain, api, callBack) {
|
|
|
261
193
|
try {
|
|
262
194
|
const contract = psp22ContractMap[tokenInfo.slug];
|
|
263
195
|
const balances = await Promise.all(addresses.map(async address => {
|
|
196
|
+
var _balanceOf$output;
|
|
264
197
|
const _balanceOf = await contract.query['psp22::balanceOf'](address, {
|
|
265
|
-
gasLimit:
|
|
198
|
+
gasLimit: (0, _utils.getDefaultWeightV2)(api)
|
|
266
199
|
}, address);
|
|
267
|
-
|
|
200
|
+
const balanceObj = _balanceOf === null || _balanceOf === void 0 ? void 0 : (_balanceOf$output = _balanceOf.output) === null || _balanceOf$output === void 0 ? void 0 : _balanceOf$output.toPrimitive();
|
|
201
|
+
return _balanceOf.output ? balanceObj.ok || balanceObj.Ok : '0';
|
|
268
202
|
}));
|
|
269
|
-
free = (0,
|
|
203
|
+
free = (0, _utils3.sumBN)(balances.map(bal => new _util.BN(bal || 0)));
|
|
270
204
|
callBack({
|
|
271
205
|
tokenSlug: tokenInfo.slug,
|
|
272
206
|
free: free.toString(),
|
|
@@ -274,14 +208,15 @@ function subscribePSP22Balance(addresses, chain, api, callBack) {
|
|
|
274
208
|
state: _KoniTypes.APIItemState.READY
|
|
275
209
|
});
|
|
276
210
|
} catch (err) {
|
|
277
|
-
console.
|
|
211
|
+
console.warn('Problem fetching ' + tokenInfo.slug + ' PSP-22 token balance', err); // TODO: error createType
|
|
278
212
|
}
|
|
279
213
|
});
|
|
280
214
|
};
|
|
215
|
+
|
|
281
216
|
tokenList = _handlers.state.getAssetByChainAndAsset(chain, [_types._AssetType.PSP22]);
|
|
282
|
-
Object.entries(tokenList).forEach(
|
|
283
|
-
let [slug, tokenInfo] =
|
|
284
|
-
psp22ContractMap[slug] = (0, _wasm.getPSP22ContractPromise)(api, (0,
|
|
217
|
+
Object.entries(tokenList).forEach(_ref4 => {
|
|
218
|
+
let [slug, tokenInfo] = _ref4;
|
|
219
|
+
psp22ContractMap[slug] = (0, _wasm.getPSP22ContractPromise)(api, (0, _utils2._getContractAddressOfToken)(tokenInfo));
|
|
285
220
|
});
|
|
286
221
|
getTokenBalances();
|
|
287
222
|
const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
|
|
@@ -295,7 +230,7 @@ async function subscribeEquilibriumTokenBalance(addresses, chain, api, callBack,
|
|
|
295
230
|
const unsub = await api.query.system.account.multi(addresses, balances => {
|
|
296
231
|
// Equilibrium customizes the SystemAccount pallet
|
|
297
232
|
Object.values(tokenMap).forEach(tokenInfo => {
|
|
298
|
-
const assetId = (0,
|
|
233
|
+
const assetId = (0, _utils2._getTokenOnChainAssetId)(tokenInfo);
|
|
299
234
|
let tokenFreeBalance = _util.BN_ZERO;
|
|
300
235
|
for (const balance of balances) {
|
|
301
236
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
@@ -328,10 +263,10 @@ async function subscribeEqBalanceAccountPallet(addresses, chain, api, callBack,
|
|
|
328
263
|
const tokenMap = _handlers.state.getAssetByChainAndAsset(chain, tokenTypes);
|
|
329
264
|
const unsubList = Object.values(tokenMap).map(async tokenInfo => {
|
|
330
265
|
try {
|
|
331
|
-
const assetId = (0,
|
|
266
|
+
const assetId = (0, _utils2._getTokenOnChainAssetId)(tokenInfo);
|
|
332
267
|
const unsub = await api.query.eqBalances.account.multi(addresses.map(address => [address, [assetId]]), balances => {
|
|
333
268
|
const tokenBalance = {
|
|
334
|
-
free: (0,
|
|
269
|
+
free: (0, _utils3.sumBN)(balances.map(b => b.asPositive)).toString(),
|
|
335
270
|
locked: '0',
|
|
336
271
|
// Equilibrium doesn't show locked balance
|
|
337
272
|
state: _KoniTypes.APIItemState.READY,
|
|
@@ -358,15 +293,15 @@ async function subscribeTokensAccountsPallet(addresses, chain, api, callBack, in
|
|
|
358
293
|
const tokenMap = _handlers.state.getAssetByChainAndAsset(chain, tokenTypes);
|
|
359
294
|
const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
|
|
360
295
|
try {
|
|
361
|
-
const onChainInfo = (0,
|
|
296
|
+
const onChainInfo = (0, _utils2._getTokenOnChainInfo)(tokenInfo);
|
|
362
297
|
|
|
363
298
|
// Get Token Balance
|
|
364
299
|
// @ts-ignore
|
|
365
300
|
return await api.query.tokens.accounts.multi(addresses.map(address => [address, onChainInfo]), balances => {
|
|
366
301
|
const tokenBalance = {
|
|
367
|
-
reserved: (0,
|
|
368
|
-
frozen: (0,
|
|
369
|
-
free: (0,
|
|
302
|
+
reserved: (0, _utils3.sumBN)(balances.map(b => b.reserved || new _util.BN(0))),
|
|
303
|
+
frozen: (0, _utils3.sumBN)(balances.map(b => b.frozen || new _util.BN(0))),
|
|
304
|
+
free: (0, _utils3.sumBN)(balances.map(b => b.free || new _util.BN(0))) // free is actually total balance
|
|
370
305
|
};
|
|
371
306
|
|
|
372
307
|
// free balance = total balance - frozen misc
|
|
@@ -399,7 +334,7 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
|
|
|
399
334
|
const tokenMap = _handlers.state.getAssetByChainAndAsset(chain, [_types._AssetType.LOCAL]);
|
|
400
335
|
const unsubList = await Promise.all(Object.values(tokenMap).map(async tokenInfo => {
|
|
401
336
|
try {
|
|
402
|
-
const assetIndex = (0,
|
|
337
|
+
const assetIndex = (0, _utils2._getTokenOnChainAssetId)(tokenInfo);
|
|
403
338
|
|
|
404
339
|
// Get Token Balance
|
|
405
340
|
return await api.query.assets.account.multi(addresses.map(address => [assetIndex, address]), balances => {
|
|
@@ -408,11 +343,11 @@ async function subscribeAssetsAccountPallet(addresses, chain, api, callBack) {
|
|
|
408
343
|
balances.forEach(b => {
|
|
409
344
|
// @ts-ignore
|
|
410
345
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-assignment
|
|
411
|
-
const bdata = b === null || b === void 0 ? void 0 : b.
|
|
346
|
+
const bdata = b === null || b === void 0 ? void 0 : b.toHuman();
|
|
412
347
|
if (bdata) {
|
|
413
348
|
// @ts-ignore
|
|
414
349
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-argument
|
|
415
|
-
const addressBalance = new _util.BN(String(bdata === null || bdata === void 0 ? void 0 : bdata.balance) || '0');
|
|
350
|
+
const addressBalance = new _util.BN(String(bdata === null || bdata === void 0 ? void 0 : bdata.balance).replaceAll(',', '') || '0');
|
|
416
351
|
|
|
417
352
|
// @ts-ignore
|
|
418
353
|
if (bdata !== null && bdata !== void 0 && bdata.isFrozen) {
|
|
@@ -453,8 +388,8 @@ function subscribeEVMBalance(chain, addresses, evmApiMap, callback, tokenInfo) {
|
|
|
453
388
|
locked: '0'
|
|
454
389
|
};
|
|
455
390
|
function getBalance() {
|
|
456
|
-
(0,
|
|
457
|
-
balanceItem.free = (0,
|
|
391
|
+
(0, _balance.getEVMBalance)(chain, addresses, evmApiMap).then(balances => {
|
|
392
|
+
balanceItem.free = (0, _utils3.sumBN)(balances.map(b => new _util.BN(b || '0'))).toString();
|
|
458
393
|
balanceItem.state = _KoniTypes.APIItemState.READY;
|
|
459
394
|
callback(balanceItem);
|
|
460
395
|
}).catch(console.warn);
|
|
@@ -466,114 +401,4 @@ function subscribeEVMBalance(chain, addresses, evmApiMap, callback, tokenInfo) {
|
|
|
466
401
|
clearInterval(interval);
|
|
467
402
|
unsub2 && unsub2();
|
|
468
403
|
};
|
|
469
|
-
}
|
|
470
|
-
async function getFreeBalance(chain, address, substrateApiMap, evmApiMap, tokenSlug) {
|
|
471
|
-
const substrateApi = await substrateApiMap[chain].isReady;
|
|
472
|
-
const api = substrateApi.api;
|
|
473
|
-
const web3Api = evmApiMap[chain];
|
|
474
|
-
const tokenInfo = tokenSlug ? _handlers.state.getAssetBySlug(tokenSlug) : _handlers.state.getNativeTokenInfo(chain);
|
|
475
|
-
const chainInfo = _handlers.state.getChainInfo(chain);
|
|
476
|
-
|
|
477
|
-
// Only EVM Address use with EVM network
|
|
478
|
-
if (Boolean(web3Api || (0, _utils._isChainEvmCompatible)(chainInfo)) !== (0, _utilCrypto.isEthereumAddress)(address)) {
|
|
479
|
-
if (!(0, _utilCrypto.isEthereumAddress)(address)) {
|
|
480
|
-
return '0';
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
// web3Api support mean isEthereum Network support
|
|
485
|
-
if (web3Api) {
|
|
486
|
-
if ((0, _utils._isNativeToken)(tokenInfo)) {
|
|
487
|
-
var _web3Api$api;
|
|
488
|
-
return (await ((_web3Api$api = web3Api.api) === null || _web3Api$api === void 0 ? void 0 : _web3Api$api.eth.getBalance(address))) || '0';
|
|
489
|
-
} else {
|
|
490
|
-
if ((0, _utils._getContractAddressOfToken)(tokenInfo).length > 0) {
|
|
491
|
-
return '0';
|
|
492
|
-
}
|
|
493
|
-
const contract = (0, _web.getERC20Contract)(chain, (0, _utils._getContractAddressOfToken)(tokenInfo), evmApiMap);
|
|
494
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
495
|
-
const free = await contract.methods.balanceOf(address).call();
|
|
496
|
-
|
|
497
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return
|
|
498
|
-
return (free === null || free === void 0 ? void 0 : free.toString()) || '0';
|
|
499
|
-
}
|
|
500
|
-
} else {
|
|
501
|
-
var _balance$availableBal, _balance$availableBal2;
|
|
502
|
-
if (tokenSlug) {
|
|
503
|
-
if ((0, _utils._isSmartContractToken)(tokenInfo)) {
|
|
504
|
-
if ((0, _utils._getContractAddressOfToken)(tokenInfo).length > 0) {
|
|
505
|
-
return '0';
|
|
506
|
-
}
|
|
507
|
-
const contractPromise = (0, _wasm.getPSP22ContractPromise)(api, (0, _utils._getContractAddressOfToken)(tokenInfo));
|
|
508
|
-
const balanceOf = await contractPromise.query['psp22::balanceOf'](address, {
|
|
509
|
-
gasLimit: -1
|
|
510
|
-
}, address);
|
|
511
|
-
return balanceOf.output ? balanceOf.output.toString() : '0';
|
|
512
|
-
} else if (_constants2._BALANCE_CHAIN_GROUP.genshiro.includes(chain)) {
|
|
513
|
-
var _balance$asPositive;
|
|
514
|
-
const onChainInfo = (0, _utils._getTokenOnChainInfo)(tokenInfo);
|
|
515
|
-
const balance = await api.query.eqBalances.account(address, onChainInfo);
|
|
516
|
-
|
|
517
|
-
// @ts-ignore
|
|
518
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
|
|
519
|
-
return ((_balance$asPositive = balance.asPositive) === null || _balance$asPositive === void 0 ? void 0 : _balance$asPositive.toString()) || '0';
|
|
520
|
-
} else if (_constants2._BALANCE_CHAIN_GROUP.equilibrium_parachain.includes(chain)) {
|
|
521
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
522
|
-
const balance = await api.query.system.account(address);
|
|
523
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
524
|
-
const balancesData = JSON.parse(balance.data.toString());
|
|
525
|
-
const balanceList = balancesData.v0.balance;
|
|
526
|
-
let freeTokenBalance;
|
|
527
|
-
const assetId = (0, _utils._getTokenOnChainAssetId)(tokenInfo);
|
|
528
|
-
if (!(0, _utils._isNativeToken)(tokenInfo)) {
|
|
529
|
-
// @ts-ignore
|
|
530
|
-
freeTokenBalance = balanceList.find(data => data[0] === assetId);
|
|
531
|
-
} else {
|
|
532
|
-
freeTokenBalance = balanceList[0];
|
|
533
|
-
}
|
|
534
|
-
return freeTokenBalance ? freeTokenBalance[1].positive.toString() : '0';
|
|
535
|
-
} else if (_constants2._BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
|
|
536
|
-
var _balance$data5, _balance$data5$freeKt;
|
|
537
|
-
// @ts-ignore
|
|
538
|
-
const balance = await api.query.system.account(address);
|
|
539
|
-
return ((_balance$data5 = balance.data) === null || _balance$data5 === void 0 ? void 0 : (_balance$data5$freeKt = _balance$data5.freeKton) === null || _balance$data5$freeKt === void 0 ? void 0 : _balance$data5$freeKt.toString()) || '0';
|
|
540
|
-
} else if (!(0, _utils._isNativeToken)(tokenInfo) && _constants2._BALANCE_CHAIN_GROUP.statemine.includes(chain)) {
|
|
541
|
-
var _balanceInfo$balance;
|
|
542
|
-
const assetId = (0, _utils._getTokenOnChainAssetId)(tokenInfo);
|
|
543
|
-
const balanceInfo = (await api.query.assets.account(assetId, address)).toHuman();
|
|
544
|
-
|
|
545
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
|
|
546
|
-
return (balanceInfo === null || balanceInfo === void 0 ? void 0 : (_balanceInfo$balance = balanceInfo.balance) === null || _balanceInfo$balance === void 0 ? void 0 : _balanceInfo$balance.replaceAll(',', '')) || '0';
|
|
547
|
-
} else if (!(0, _utils._isNativeToken)(tokenInfo) || _constants2._BALANCE_CHAIN_GROUP.kintsugi.includes(chain)) {
|
|
548
|
-
var _balance$free;
|
|
549
|
-
const onChainInfo = (0, _utils._getTokenOnChainInfo)(tokenInfo);
|
|
550
|
-
// @ts-ignore
|
|
551
|
-
const balance = await api.query.tokens.accounts(address, onChainInfo);
|
|
552
|
-
return ((_balance$free = balance.free) === null || _balance$free === void 0 ? void 0 : _balance$free.toString()) || '0';
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
if (_constants2._BALANCE_CHAIN_GROUP.kusama.includes(chain)) {
|
|
556
|
-
var _balance$data6, _balance$data7;
|
|
557
|
-
// @ts-ignore
|
|
558
|
-
const _balance = await api.query.system.account(address);
|
|
559
|
-
|
|
560
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
561
|
-
const balance = _balance.toHuman();
|
|
562
|
-
|
|
563
|
-
// @ts-ignore
|
|
564
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
565
|
-
const freeBalance = new _util.BN((_balance$data6 = balance.data) === null || _balance$data6 === void 0 ? void 0 : _balance$data6.free.replaceAll(',', ''));
|
|
566
|
-
|
|
567
|
-
// @ts-ignore
|
|
568
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
569
|
-
const miscFrozen = new _util.BN((_balance$data7 = balance.data) === null || _balance$data7 === void 0 ? void 0 : _balance$data7.miscFrozen.replaceAll(',', ''));
|
|
570
|
-
const transferable = freeBalance.sub(miscFrozen);
|
|
571
|
-
|
|
572
|
-
// @ts-ignore
|
|
573
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
|
|
574
|
-
return transferable.toString() || '0';
|
|
575
|
-
}
|
|
576
|
-
const balance = await api.derive.balances.all(address);
|
|
577
|
-
return ((_balance$availableBal = balance.availableBalance) === null || _balance$availableBal === void 0 ? void 0 : (_balance$availableBal2 = _balance$availableBal.toBn()) === null || _balance$availableBal2 === void 0 ? void 0 : _balance$availableBal2.toString()) || '0';
|
|
578
|
-
}
|
|
579
404
|
}
|
|
@@ -7,8 +7,9 @@ exports.checkReferenceCount = checkReferenceCount;
|
|
|
7
7
|
exports.checkSupportTransfer = checkSupportTransfer;
|
|
8
8
|
exports.createTransferExtrinsic = void 0;
|
|
9
9
|
var _wasm = require("@subwallet/extension-base/koni/api/tokens/wasm");
|
|
10
|
+
var _utils = require("@subwallet/extension-base/koni/api/tokens/wasm/utils");
|
|
10
11
|
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
11
|
-
var
|
|
12
|
+
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
12
13
|
var _util = require("@polkadot/util");
|
|
13
14
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
14
15
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -19,7 +20,7 @@ function isRefCount(accountInfo) {
|
|
|
19
20
|
async function checkReferenceCount(networkKey, address, substrateApiMap, chainInfo) {
|
|
20
21
|
const apiProps = await substrateApiMap[networkKey].isReady;
|
|
21
22
|
const api = apiProps.api;
|
|
22
|
-
if ((0,
|
|
23
|
+
if ((0, _utils2._isChainEvmCompatible)(chainInfo)) {
|
|
23
24
|
return false;
|
|
24
25
|
}
|
|
25
26
|
|
|
@@ -35,7 +36,7 @@ async function checkSupportTransfer(networkKey, tokenInfo, substrateApiMap, chai
|
|
|
35
36
|
supportTransferAll: false
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
|
-
if ((0,
|
|
39
|
+
if ((0, _utils2._isChainEvmCompatible)(chainInfo)) {
|
|
39
40
|
return {
|
|
40
41
|
supportTransfer: true,
|
|
41
42
|
supportTransferAll: true
|
|
@@ -59,32 +60,32 @@ async function checkSupportTransfer(networkKey, tokenInfo, substrateApiMap, chai
|
|
|
59
60
|
if (!(isTxCurrenciesSupported || isTxBalancesSupported || isTxTokensSupported || isTxEqBalancesSupported)) {
|
|
60
61
|
return result;
|
|
61
62
|
}
|
|
62
|
-
if ((0,
|
|
63
|
+
if ((0, _utils2._isTokenWasmSmartContract)(tokenInfo) && api.query.contracts) {
|
|
63
64
|
// for PSP tokens
|
|
64
65
|
return {
|
|
65
66
|
supportTransfer: true,
|
|
66
67
|
supportTransferAll: true
|
|
67
68
|
};
|
|
68
69
|
}
|
|
69
|
-
if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey) && !(0,
|
|
70
|
+
if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxCurrenciesSupported) {
|
|
70
71
|
result.supportTransfer = true;
|
|
71
72
|
result.supportTransferAll = false;
|
|
72
|
-
} else if (_constants._TRANSFER_CHAIN_GROUP.kintsugi.includes(networkKey) && !(0,
|
|
73
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.kintsugi.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxTokensSupported) {
|
|
73
74
|
result.supportTransfer = true;
|
|
74
75
|
result.supportTransferAll = true;
|
|
75
|
-
} else if (_constants._TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey) && !(0,
|
|
76
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxEqBalancesSupported) {
|
|
76
77
|
result.supportTransfer = true;
|
|
77
78
|
result.supportTransferAll = false;
|
|
78
79
|
} else if (_constants._TRANSFER_CHAIN_GROUP.crab.includes(networkKey) && _constants._BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
|
|
79
80
|
result.supportTransfer = true;
|
|
80
81
|
result.supportTransferAll = true;
|
|
81
|
-
} else if (isTxBalancesSupported && (0,
|
|
82
|
+
} else if (isTxBalancesSupported && (0, _utils2._isNativeToken)(tokenInfo)) {
|
|
82
83
|
result.supportTransfer = true;
|
|
83
84
|
result.supportTransferAll = true;
|
|
84
|
-
} else if (_constants._TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !(0,
|
|
85
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && _constants._BALANCE_TOKEN_GROUP.bitcountry.includes(tokenInfo.symbol)) {
|
|
85
86
|
result.supportTransfer = true;
|
|
86
87
|
result.supportTransferAll = true;
|
|
87
|
-
} else if (_constants._TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !(0,
|
|
88
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo)) {
|
|
88
89
|
result.supportTransfer = true;
|
|
89
90
|
result.supportTransferAll = true;
|
|
90
91
|
}
|
|
@@ -111,45 +112,45 @@ const createTransferExtrinsic = async _ref => {
|
|
|
111
112
|
const isTxEqBalancesSupported = !!api && !!api.tx && !!api.tx.eqBalances;
|
|
112
113
|
let transferAmount; // for PSP-22 tokens, might be deprecated in the future
|
|
113
114
|
|
|
114
|
-
if ((0,
|
|
115
|
-
const contractPromise = (0, _wasm.getPSP22ContractPromise)(api, (0,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
115
|
+
if ((0, _utils2._isTokenWasmSmartContract)(tokenInfo) && api.query.contracts) {
|
|
116
|
+
const contractPromise = (0, _wasm.getPSP22ContractPromise)(api, (0, _utils2._getContractAddressOfToken)(tokenInfo));
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
const gasLimit = await (0, _utils.getWasmContractGasLimit)(api, from, 'psp22::transfer', contractPromise, {}, [from, value, {}]);
|
|
119
|
+
|
|
120
|
+
// @ts-ignore
|
|
120
121
|
transfer = contractPromise.tx['psp22::transfer']({
|
|
121
122
|
gasLimit
|
|
122
123
|
}, to, value, {});
|
|
123
124
|
transferAmount = value;
|
|
124
|
-
} else if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey) && !(0,
|
|
125
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxCurrenciesSupported) {
|
|
125
126
|
if (transferAll) {
|
|
126
127
|
// currently Acala, Karura, Acala testnet do not have transfer all method for sub token
|
|
127
128
|
} else if (value) {
|
|
128
|
-
transfer = api.tx.currencies.transfer(to, (0,
|
|
129
|
+
transfer = api.tx.currencies.transfer(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), value);
|
|
129
130
|
}
|
|
130
|
-
} else if (_constants._TRANSFER_CHAIN_GROUP.kintsugi.includes(networkKey) && !(0,
|
|
131
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.kintsugi.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxTokensSupported) {
|
|
131
132
|
if (transferAll) {
|
|
132
|
-
transfer = api.tx.tokens.transferAll(to, (0,
|
|
133
|
+
transfer = api.tx.tokens.transferAll(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), false);
|
|
133
134
|
} else if (value) {
|
|
134
|
-
transfer = api.tx.tokens.transfer(to, (0,
|
|
135
|
+
transfer = api.tx.tokens.transfer(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), new _util.BN(value));
|
|
135
136
|
}
|
|
136
|
-
} else if (_constants._TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey) && !(0,
|
|
137
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.genshiro.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo) && isTxEqBalancesSupported) {
|
|
137
138
|
if (transferAll) {
|
|
138
139
|
// currently genshiro_testnet, genshiro, equilibrium_parachain do not have transfer all method for tokens
|
|
139
140
|
} else if (value) {
|
|
140
|
-
transfer = api.tx.eqBalances.transfer((0,
|
|
141
|
+
transfer = api.tx.eqBalances.transfer((0, _utils2._getTokenOnChainAssetId)(tokenInfo), to, value);
|
|
141
142
|
}
|
|
142
|
-
} else if (!(0,
|
|
143
|
+
} else if (!(0, _utils2._isNativeToken)(tokenInfo) && (_constants._TRANSFER_CHAIN_GROUP.crab.includes(networkKey) || _constants._BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol))) {
|
|
143
144
|
if (transferAll) {
|
|
144
145
|
transfer = api.tx.kton.transferAll(to, false);
|
|
145
146
|
} else if (value) {
|
|
146
147
|
transfer = api.tx.kton.transfer(to, new _util.BN(value));
|
|
147
148
|
}
|
|
148
|
-
} else if (_constants._TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !(0,
|
|
149
|
-
transfer = api.tx.currencies.transfer(to, (0,
|
|
150
|
-
} else if (_constants._TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !(0,
|
|
151
|
-
transfer = api.tx.assets.transfer((0,
|
|
152
|
-
} else if (isTxBalancesSupported && (0,
|
|
149
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo)) {
|
|
150
|
+
transfer = api.tx.currencies.transfer(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), value);
|
|
151
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo)) {
|
|
152
|
+
transfer = api.tx.assets.transfer((0, _utils2._getTokenOnChainAssetId)(tokenInfo), to, value);
|
|
153
|
+
} else if (isTxBalancesSupported && (0, _utils2._isNativeToken)(tokenInfo)) {
|
|
153
154
|
if (transferAll) {
|
|
154
155
|
transfer = api.tx.balances.transferAll(to, false);
|
|
155
156
|
} else if (value) {
|
|
@@ -117,8 +117,11 @@ class AcalaNftApi extends _nft.BaseNftApi {
|
|
|
117
117
|
};
|
|
118
118
|
params.updateItem(this.chain, parsedNft, address);
|
|
119
119
|
params.updateCollection(this.chain, parsedCollection);
|
|
120
|
-
// params.updateReady(true);
|
|
121
120
|
}));
|
|
121
|
+
Object.entries(collectionNftIds).forEach(_ref => {
|
|
122
|
+
let [collectionId, nftIds] = _ref;
|
|
123
|
+
params.cleanUpNfts(this.chain, address, collectionId, nftIds);
|
|
124
|
+
});
|
|
122
125
|
} catch (e) {
|
|
123
126
|
console.error('Failed to fetch acala nft', e);
|
|
124
127
|
}
|
|
@@ -114,8 +114,11 @@ class BitCountryNftApi extends _nft.BaseNftApi {
|
|
|
114
114
|
};
|
|
115
115
|
params.updateItem(this.chain, parsedNft, address);
|
|
116
116
|
params.updateCollection(this.chain, parsedCollection);
|
|
117
|
-
// params.updateReady(true);
|
|
118
117
|
}));
|
|
118
|
+
Object.entries(collectionNftIds).forEach(_ref => {
|
|
119
|
+
let [collectionId, nftIds] = _ref;
|
|
120
|
+
params.cleanUpNfts(this.chain, address, collectionId, nftIds);
|
|
121
|
+
});
|
|
119
122
|
} catch (e) {
|
|
120
123
|
console.error('Failed to fetch bit.country nft', e);
|
|
121
124
|
}
|
|
@@ -82,6 +82,7 @@ class EvmNftApi extends _nft.BaseNftApi {
|
|
|
82
82
|
const contract = new this.evmApi.api.eth.Contract(_helper._ERC721_ABI, smartContract);
|
|
83
83
|
let ownItem = false;
|
|
84
84
|
let collectionImage;
|
|
85
|
+
const nftOwnerMap = {};
|
|
85
86
|
await Promise.all(this.addresses.map(async address => {
|
|
86
87
|
if (!(0, _utilCrypto.isEthereumAddress)(address)) {
|
|
87
88
|
return;
|
|
@@ -132,8 +133,9 @@ class EvmNftApi extends _nft.BaseNftApi {
|
|
|
132
133
|
}
|
|
133
134
|
}
|
|
134
135
|
}));
|
|
136
|
+
nftOwnerMap[address] = nftIds;
|
|
135
137
|
} catch (e) {
|
|
136
|
-
console.error('
|
|
138
|
+
console.error('EVM NFT error', e);
|
|
137
139
|
}
|
|
138
140
|
}));
|
|
139
141
|
if (ownItem) {
|
|
@@ -145,10 +147,12 @@ class EvmNftApi extends _nft.BaseNftApi {
|
|
|
145
147
|
originAsset: tokenInfo.slug
|
|
146
148
|
};
|
|
147
149
|
nftParams.updateCollection(this.chain, nftCollection);
|
|
148
|
-
|
|
150
|
+
Object.entries(nftOwnerMap).forEach(_ref => {
|
|
151
|
+
let [owner, nftIds] = _ref;
|
|
152
|
+
nftParams.cleanUpNfts(this.chain, owner, smartContract, nftIds);
|
|
153
|
+
});
|
|
149
154
|
}
|
|
150
155
|
}
|
|
151
|
-
|
|
152
156
|
async handleNfts(params) {
|
|
153
157
|
if (!this.evmContracts || this.evmContracts.length === 0) {
|
|
154
158
|
return;
|
|
@@ -132,19 +132,16 @@ class NftHandler {
|
|
|
132
132
|
console.error('error setting up nft handlers', e);
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
|
-
async handleNfts(nftContracts, updateItem, updateCollection) {
|
|
135
|
+
async handleNfts(nftContracts, updateItem, updateCollection, cleanUpNfts) {
|
|
136
136
|
this.setupApi();
|
|
137
137
|
this.setupNftContracts(nftContracts);
|
|
138
138
|
await Promise.all(this.handlers.map(async handler => {
|
|
139
139
|
await handler.fetchNfts({
|
|
140
140
|
updateItem,
|
|
141
|
-
updateCollection
|
|
141
|
+
updateCollection,
|
|
142
|
+
cleanUpNfts
|
|
142
143
|
});
|
|
143
144
|
}));
|
|
144
145
|
}
|
|
145
|
-
parseAssetId(id) {
|
|
146
|
-
const numberId = parseInt(id);
|
|
147
|
-
return numberId.toString();
|
|
148
|
-
}
|
|
149
146
|
}
|
|
150
147
|
exports.NftHandler = NftHandler;
|