@subwallet/extension-base 1.3.4-0 → 1.3.5-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 +1 -1
- package/cjs/koni/api/nft/config.js +1 -1
- package/cjs/koni/api/nft/index.js +9 -0
- package/cjs/koni/api/nft/rari/index.js +87 -0
- package/cjs/koni/api/yield/helper/utils.js +1 -1
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/index.js +5 -0
- package/cjs/services/balance-service/index.js +1 -1
- package/cjs/services/chain-service/constants.js +2 -1
- package/cjs/services/chain-service/handler/EvmChainHandler.js +0 -2
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +58 -54
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +1 -1
- package/cjs/services/earning-service/handlers/native-staking/astar.js +1 -1
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +1 -1
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +1 -1
- package/cjs/services/earning-service/handlers/native-staking/tao.js +1 -1
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +5 -8
- package/cjs/services/transaction-service/index.js +5 -4
- package/koni/api/contract-handler/utils/index.d.ts +3 -2
- package/koni/api/nft/config.js +1 -1
- package/koni/api/nft/index.js +9 -0
- package/koni/api/nft/rari/index.d.ts +7 -0
- package/koni/api/nft/rari/index.js +80 -0
- package/koni/api/yield/helper/utils.js +1 -1
- package/package.json +11 -6
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/index.js +5 -0
- package/services/balance-service/index.js +2 -2
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +2 -1
- package/services/chain-service/handler/EvmChainHandler.js +0 -2
- package/services/chain-service/handler/SubstrateChainHandler.d.ts +1 -2
- package/services/chain-service/handler/SubstrateChainHandler.js +58 -54
- package/services/earning-service/handlers/native-staking/amplitude.js +1 -1
- package/services/earning-service/handlers/native-staking/astar.js +1 -1
- package/services/earning-service/handlers/native-staking/para-chain.js +1 -1
- package/services/earning-service/handlers/native-staking/relay-chain.js +1 -1
- package/services/earning-service/handlers/native-staking/tao.js +1 -1
- package/services/earning-service/handlers/nomination-pool/index.js +5 -8
- package/services/transaction-service/index.js +5 -4
|
@@ -1428,7 +1428,7 @@ export interface KoniRequestSignatures {
|
|
|
1428
1428
|
'pri(bonding.subscribeNominatorMetadata)': [null, NominatorMetadata[], NominatorMetadata[]];
|
|
1429
1429
|
'pri(bonding.getBondingOptions)': [BondingOptionParams, ValidatorInfo[]];
|
|
1430
1430
|
'pri(bonding.getNominationPoolOptions)': [string, NominationPoolInfo[]];
|
|
1431
|
-
'pri(bonding.nominationPool.submitBonding)': [
|
|
1431
|
+
'pri(bonding.nominationPool.submitBonding)': [RequestYieldStepSubmit, SWTransactionResponse];
|
|
1432
1432
|
'pri(bonding.nominationPool.submitUnbonding)': [RequestStakePoolingUnbonding, SWTransactionResponse];
|
|
1433
1433
|
'pri(chainService.subscribeChainInfoMap)': [null, Record<string, any>, Record<string, any>];
|
|
1434
1434
|
'pri(chainService.subscribeChainStateMap)': [null, Record<string, any>, Record<string, any>];
|
|
@@ -124,7 +124,7 @@ exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
|
124
124
|
})(SUPPORTED_TRANSFER_EVM_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME = {}));
|
|
125
125
|
const SUPPORTED_TRANSFER_EVM_CHAIN = [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonriver, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.astarEvm, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shiden, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shibuya];
|
|
126
126
|
exports.SUPPORTED_TRANSFER_EVM_CHAIN = SUPPORTED_TRANSFER_EVM_CHAIN;
|
|
127
|
-
const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm'];
|
|
127
|
+
const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm', 'rari'];
|
|
128
128
|
exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
129
129
|
const TRANSFER_CHAIN_ID = {
|
|
130
130
|
[SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase]: 1287,
|
|
@@ -20,6 +20,7 @@ var _constants = require("@subwallet/extension-base/services/chain-service/const
|
|
|
20
20
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
21
21
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
22
22
|
var _assethub_nft = _interopRequireDefault(require("./assethub_nft"));
|
|
23
|
+
var _rari = require("./rari");
|
|
23
24
|
var _ternoa_nft = require("./ternoa_nft");
|
|
24
25
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
25
26
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -53,6 +54,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
|
53
54
|
return [new _blobinscription.BlobInscriptionApi(chain, substrateAddresses)];
|
|
54
55
|
} else if (_constants._NFT_CHAIN_GROUP.ternoa.includes(chain)) {
|
|
55
56
|
return [new _ternoa_nft.TernoaNftApi(substrateApi, substrateAddresses, chain)];
|
|
57
|
+
} else if (_constants._NFT_CHAIN_GROUP.rari.includes(chain)) {
|
|
58
|
+
return [new _rari.RariNftApi(chain, evmAddresses)];
|
|
56
59
|
}
|
|
57
60
|
return null;
|
|
58
61
|
}
|
|
@@ -151,6 +154,12 @@ class NftHandler {
|
|
|
151
154
|
this.handlers.push(...handlers);
|
|
152
155
|
}
|
|
153
156
|
}
|
|
157
|
+
if (chain === 'rari') {
|
|
158
|
+
const handlers = createSubstrateNftApi(chain, null, evmAddresses);
|
|
159
|
+
if (handlers && !!handlers.length) {
|
|
160
|
+
this.handlers.push(...handlers);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
154
163
|
if (chain === 'ternoa') {
|
|
155
164
|
const handlers = createSubstrateNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
|
|
156
165
|
if (handlers && !!handlers.length) {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RariNftApi = void 0;
|
|
7
|
+
var _nft = require("../nft");
|
|
8
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
9
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
10
|
+
|
|
11
|
+
const options = {
|
|
12
|
+
method: 'GET',
|
|
13
|
+
headers: {
|
|
14
|
+
accept: 'application/json',
|
|
15
|
+
'X-API-KEY': 'ed9df6bf-7eba-4ca2-8a42-9006706be064'
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
class RariNftApi extends _nft.BaseNftApi {
|
|
19
|
+
constructor(chain, addresses) {
|
|
20
|
+
super(chain, undefined, addresses);
|
|
21
|
+
}
|
|
22
|
+
wait(ms) {
|
|
23
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
24
|
+
}
|
|
25
|
+
async handleNfts(params) {
|
|
26
|
+
const collectionMap = new Map();
|
|
27
|
+
const size = 4;
|
|
28
|
+
const waitTime = 1000;
|
|
29
|
+
for (let i = 0; i < this.addresses.length; i += size) {
|
|
30
|
+
const group = this.addresses.slice(i, i + size);
|
|
31
|
+
await Promise.all(group.map(async address => {
|
|
32
|
+
const nftResponse = await fetch(`https://api.rarible.org/v0.1/items/byOwner?blockchains=RARI&owner=ETHEREUM%3A${address}&size=5000`, options).then(response => response.json()).catch(err => {
|
|
33
|
+
console.error(err);
|
|
34
|
+
return null;
|
|
35
|
+
});
|
|
36
|
+
if (!nftResponse || !nftResponse.items) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const nftItems = nftResponse.items;
|
|
40
|
+
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
42
|
+
await Promise.all(nftItems.map(async nft => {
|
|
43
|
+
var _NftMetadata$content$;
|
|
44
|
+
const collectionId = nft.collection;
|
|
45
|
+
const collectionName = nft.itemCollection.name;
|
|
46
|
+
const NftMetadata = nft.meta;
|
|
47
|
+
const NFTimageUrl = ((_NftMetadata$content$ = NftMetadata.content[0]) === null || _NftMetadata$content$ === void 0 ? void 0 : _NftMetadata$content$.url) || '';
|
|
48
|
+
const formatCollectionId = collectionId.replace(/^RARI:/, '');
|
|
49
|
+
const parsedNft = {
|
|
50
|
+
id: nft.tokenId,
|
|
51
|
+
name: NftMetadata.name,
|
|
52
|
+
description: NftMetadata.description || '',
|
|
53
|
+
image: NFTimageUrl,
|
|
54
|
+
collectionId: formatCollectionId,
|
|
55
|
+
chain: this.chain,
|
|
56
|
+
owner: address
|
|
57
|
+
};
|
|
58
|
+
params.updateItem(this.chain, parsedNft, address);
|
|
59
|
+
if (!collectionMap.has(formatCollectionId)) {
|
|
60
|
+
collectionMap.set(formatCollectionId, collectionName);
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
}));
|
|
64
|
+
if (i + size < this.addresses.length) {
|
|
65
|
+
await this.wait(waitTime);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
for (const [formatCollectionId, collectionName] of collectionMap.entries()) {
|
|
69
|
+
const parsedCollection = {
|
|
70
|
+
collectionId: formatCollectionId,
|
|
71
|
+
chain: this.chain,
|
|
72
|
+
collectionName,
|
|
73
|
+
image: ''
|
|
74
|
+
};
|
|
75
|
+
params.updateCollection(this.chain, parsedCollection);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async fetchNfts(params) {
|
|
79
|
+
try {
|
|
80
|
+
await this.handleNfts(params);
|
|
81
|
+
} catch (e) {
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
return 1;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.RariNftApi = RariNftApi;
|
|
@@ -13,7 +13,7 @@ var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
|
13
13
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
14
14
|
// SPDX-License-Identifier: Apache-2.0
|
|
15
15
|
|
|
16
|
-
const YIELD_EXTRINSIC_TYPES = [_KoniTypes.ExtrinsicType.MINT_VDOT, _KoniTypes.ExtrinsicType.MINT_LDOT, _KoniTypes.ExtrinsicType.MINT_SDOT, _KoniTypes.ExtrinsicType.MINT_QDOT, _KoniTypes.ExtrinsicType.MINT_STDOT, _KoniTypes.ExtrinsicType.REDEEM_QDOT, _KoniTypes.ExtrinsicType.REDEEM_SDOT, _KoniTypes.ExtrinsicType.REDEEM_VDOT, _KoniTypes.ExtrinsicType.REDEEM_LDOT, _KoniTypes.ExtrinsicType.REDEEM_STDOT, _KoniTypes.ExtrinsicType.
|
|
16
|
+
const YIELD_EXTRINSIC_TYPES = [_KoniTypes.ExtrinsicType.MINT_VDOT, _KoniTypes.ExtrinsicType.MINT_LDOT, _KoniTypes.ExtrinsicType.MINT_SDOT, _KoniTypes.ExtrinsicType.MINT_QDOT, _KoniTypes.ExtrinsicType.MINT_STDOT, _KoniTypes.ExtrinsicType.REDEEM_QDOT, _KoniTypes.ExtrinsicType.REDEEM_SDOT, _KoniTypes.ExtrinsicType.REDEEM_VDOT, _KoniTypes.ExtrinsicType.REDEEM_LDOT, _KoniTypes.ExtrinsicType.REDEEM_STDOT, _KoniTypes.ExtrinsicType.JOIN_YIELD_POOL, _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD, _KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL];
|
|
17
17
|
exports.YIELD_EXTRINSIC_TYPES = YIELD_EXTRINSIC_TYPES;
|
|
18
18
|
const YIELD_POOL_STAT_REFRESH_INTERVAL = 90000;
|
|
19
19
|
exports.YIELD_POOL_STAT_REFRESH_INTERVAL = YIELD_POOL_STAT_REFRESH_INTERVAL;
|
package/cjs/packageInfo.js
CHANGED
|
@@ -138,6 +138,11 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
|
|
|
138
138
|
tonApi
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
|
+
|
|
142
|
+
// If the chain is not ready, return pending state
|
|
143
|
+
if (!substrateApiMap[chainSlug].isApiReady) {
|
|
144
|
+
handleUnsupportedOrPendingAddresses(useAddresses, chainSlug, chainAssetMap, _KoniTypes.APIItemState.PENDING, callback);
|
|
145
|
+
}
|
|
141
146
|
const substrateApi = await substrateApiMap[chainSlug].isReady;
|
|
142
147
|
return (0, _substrate.subscribeSubstrateBalance)(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback, extrinsicType);
|
|
143
148
|
});
|
|
@@ -199,7 +199,7 @@ class BalanceService {
|
|
|
199
199
|
let unsub = _util.noop;
|
|
200
200
|
unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, result => {
|
|
201
201
|
const rs = result[0];
|
|
202
|
-
if (rs.tokenSlug === tSlug) {
|
|
202
|
+
if (rs.tokenSlug === tSlug && rs.state !== _KoniTypes.APIItemState.PENDING) {
|
|
203
203
|
hasError = false;
|
|
204
204
|
const balance = {
|
|
205
205
|
value: rs.free,
|
|
@@ -65,7 +65,8 @@ const _NFT_CHAIN_GROUP = {
|
|
|
65
65
|
bitcountry: ['bitcountry', 'pioneer', 'continuum_network'],
|
|
66
66
|
vara: ['vara_network'],
|
|
67
67
|
avail: ['avail_mainnet'],
|
|
68
|
-
ternoa: ['ternoa', 'ternoa_alphanet']
|
|
68
|
+
ternoa: ['ternoa', 'ternoa_alphanet'],
|
|
69
|
+
rari: ['rari']
|
|
69
70
|
};
|
|
70
71
|
|
|
71
72
|
// Staking--------------------------------------------------------------------------------------------------------------
|
|
@@ -118,7 +118,6 @@ class EvmChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
118
118
|
const evmApi = this.getEvmApiByChain(originChain);
|
|
119
119
|
try {
|
|
120
120
|
if (tokenType === _types._AssetType.ERC721) {
|
|
121
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access
|
|
122
121
|
tokenContract = new evmApi.api.eth.Contract(_utils._ERC721_ABI, contractAddress);
|
|
123
122
|
const [_name, _symbol] = await Promise.all([
|
|
124
123
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
@@ -128,7 +127,6 @@ class EvmChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
128
127
|
name = _name;
|
|
129
128
|
symbol = _symbol;
|
|
130
129
|
} else {
|
|
131
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access
|
|
132
130
|
tokenContract = new evmApi.api.eth.Contract(_utils._ERC20_ABI, contractAddress);
|
|
133
131
|
const [_decimals, _symbol, _name] = await Promise.all([
|
|
134
132
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
@@ -114,6 +114,12 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
114
114
|
}
|
|
115
115
|
async getPsp22TokenInfo(apiPromise, contractAddress, contractCaller) {
|
|
116
116
|
const tokenContract = new _apiContract.ContractPromise(apiPromise, _utils3._PSP22_ABI, contractAddress);
|
|
117
|
+
const tokenSmartContract = {
|
|
118
|
+
name: '',
|
|
119
|
+
decimals: -1,
|
|
120
|
+
symbol: '',
|
|
121
|
+
contractError: false
|
|
122
|
+
};
|
|
117
123
|
const [nameResp, symbolResp, decimalsResp] = await Promise.all([tokenContract.query['psp22Metadata::tokenName'](contractCaller || contractAddress, {
|
|
118
124
|
gasLimit: (0, _utils.getDefaultWeightV2)(apiPromise)
|
|
119
125
|
}),
|
|
@@ -124,67 +130,72 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
124
130
|
gasLimit: (0, _utils.getDefaultWeightV2)(apiPromise)
|
|
125
131
|
})]);
|
|
126
132
|
if (!(nameResp.result.isOk && symbolResp.result.isOk && decimalsResp.result.isOk) || !nameResp.output || !decimalsResp.output || !symbolResp.output) {
|
|
127
|
-
|
|
133
|
+
tokenSmartContract.contractError = true;
|
|
134
|
+
return tokenSmartContract;
|
|
128
135
|
} else {
|
|
129
136
|
var _symbolResp$output, _decimalsResp$output, _nameResp$output;
|
|
130
|
-
let contractError = false;
|
|
131
137
|
const symbolObj = (_symbolResp$output = symbolResp.output) === null || _symbolResp$output === void 0 ? void 0 : _symbolResp$output.toHuman();
|
|
132
138
|
const decimalsObj = (_decimalsResp$output = decimalsResp.output) === null || _decimalsResp$output === void 0 ? void 0 : _decimalsResp$output.toHuman();
|
|
133
139
|
const nameObj = (_nameResp$output = nameResp.output) === null || _nameResp$output === void 0 ? void 0 : _nameResp$output.toHuman();
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
if (!name || !symbol || typeof name === 'object' || typeof symbol === 'object') {
|
|
138
|
-
contractError = true;
|
|
140
|
+
tokenSmartContract.name = nameResp.output ? nameObj.Ok || nameObj.ok : '';
|
|
141
|
+
tokenSmartContract.decimals = decimalsResp.output ? new _util.BN(decimalsObj.Ok || decimalsObj.ok).toNumber() : 0;
|
|
142
|
+
tokenSmartContract.symbol = decimalsResp.output ? symbolObj.Ok || symbolObj.ok : '';
|
|
143
|
+
if (!tokenSmartContract.name || !tokenSmartContract.symbol || typeof tokenSmartContract.name === 'object' || typeof tokenSmartContract.symbol === 'object') {
|
|
144
|
+
tokenSmartContract.contractError = true;
|
|
139
145
|
}
|
|
140
|
-
return
|
|
146
|
+
return tokenSmartContract;
|
|
141
147
|
}
|
|
142
148
|
}
|
|
143
149
|
async getPsp34TokenInfo(apiPromise, contractAddress, contractCaller) {
|
|
144
150
|
const tokenContract = new _apiContract.ContractPromise(apiPromise, _utils3._PSP34_ABI, contractAddress);
|
|
151
|
+
const tokenSmartContract = {
|
|
152
|
+
name: '',
|
|
153
|
+
decimals: -1,
|
|
154
|
+
symbol: '',
|
|
155
|
+
contractError: false
|
|
156
|
+
};
|
|
145
157
|
const collectionIdResp = await tokenContract.query['psp34::collectionId'](contractCaller || contractAddress, {
|
|
146
158
|
gasLimit: (0, _utils.getDefaultWeightV2)(apiPromise)
|
|
147
159
|
}); // read-only operation so no gas limit
|
|
148
160
|
|
|
149
161
|
if (!collectionIdResp.result.isOk || !collectionIdResp.output) {
|
|
150
|
-
|
|
162
|
+
tokenSmartContract.contractError = true;
|
|
163
|
+
return tokenSmartContract;
|
|
151
164
|
} else {
|
|
152
165
|
var _collectionIdResp$out;
|
|
153
|
-
let contractError = false;
|
|
154
166
|
const collectionIdDict = (_collectionIdResp$out = collectionIdResp.output) === null || _collectionIdResp$out === void 0 ? void 0 : _collectionIdResp$out.toHuman();
|
|
155
167
|
if (collectionIdDict.Bytes === '') {
|
|
156
|
-
contractError = true;
|
|
168
|
+
tokenSmartContract.contractError = true;
|
|
157
169
|
}
|
|
158
|
-
return
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
async getGrc20TokenInfo(apiPromise, contractAddress) {
|
|
162
|
-
if (!(apiPromise instanceof _api.GearApi)) {
|
|
163
|
-
console.warn('Cannot subscribe GRC20 balance without GearApi instance');
|
|
164
|
-
return ['', -1, '', true];
|
|
165
|
-
}
|
|
166
|
-
let contractError = false;
|
|
167
|
-
const tokenContract = (0, _utils2.getGRC20ContractPromise)(apiPromise, contractAddress);
|
|
168
|
-
const [nameRes, symbolRes, decimalsRes] = await Promise.all([tokenContract.service.name(_utils2.GEAR_DEFAULT_ADDRESS), tokenContract.service.symbol(_utils2.GEAR_DEFAULT_ADDRESS), tokenContract.service.decimals(_utils2.GEAR_DEFAULT_ADDRESS)]);
|
|
169
|
-
const decimals = typeof decimalsRes === 'string' ? parseInt(decimalsRes) : decimalsRes;
|
|
170
|
-
if (!nameRes || !symbolRes) {
|
|
171
|
-
contractError = true;
|
|
170
|
+
return tokenSmartContract;
|
|
172
171
|
}
|
|
173
|
-
return [nameRes, decimals, symbolRes, contractError];
|
|
174
172
|
}
|
|
175
|
-
async
|
|
173
|
+
async getVaraFungibleTokenInfo(apiPromise, contractAddress, tokenType) {
|
|
174
|
+
const tokenSmartContract = {
|
|
175
|
+
name: '',
|
|
176
|
+
decimals: -1,
|
|
177
|
+
symbol: '',
|
|
178
|
+
contractError: false
|
|
179
|
+
};
|
|
176
180
|
if (!(apiPromise instanceof _api.GearApi)) {
|
|
177
|
-
|
|
178
|
-
|
|
181
|
+
if (tokenType === _types._AssetType.GRC20) {
|
|
182
|
+
console.warn('Cannot subscribe GRC20 balance without GearApi instance');
|
|
183
|
+
} else if (tokenType === _types._AssetType.VFT) {
|
|
184
|
+
console.warn('Cannot subscribe VFT balance without GearApi instance');
|
|
185
|
+
}
|
|
186
|
+
tokenSmartContract.contractError = true;
|
|
187
|
+
return tokenSmartContract;
|
|
179
188
|
}
|
|
180
|
-
|
|
181
|
-
const tokenContract = (0, _utils2.getVFTContractPromise)(apiPromise, contractAddress);
|
|
189
|
+
const tokenContract = tokenType === _types._AssetType.GRC20 ? (0, _utils2.getGRC20ContractPromise)(apiPromise, contractAddress) : (0, _utils2.getVFTContractPromise)(apiPromise, contractAddress);
|
|
182
190
|
const [nameRes, symbolRes, decimalsRes] = await Promise.all([tokenContract.service.name(_utils2.GEAR_DEFAULT_ADDRESS), tokenContract.service.symbol(_utils2.GEAR_DEFAULT_ADDRESS), tokenContract.service.decimals(_utils2.GEAR_DEFAULT_ADDRESS)]);
|
|
183
|
-
const decimals =
|
|
191
|
+
const decimals = parseInt(decimalsRes.toString());
|
|
192
|
+
tokenSmartContract.name = nameRes;
|
|
193
|
+
tokenSmartContract.decimals = decimals;
|
|
194
|
+
tokenSmartContract.symbol = symbolRes;
|
|
184
195
|
if (!nameRes || !symbolRes) {
|
|
185
|
-
contractError = true;
|
|
196
|
+
tokenSmartContract.contractError = true;
|
|
186
197
|
}
|
|
187
|
-
return
|
|
198
|
+
return tokenSmartContract;
|
|
188
199
|
}
|
|
189
200
|
async getLocalTokenInfo(apiPromise, assetId) {
|
|
190
201
|
const _metadata = await apiPromise.query.assets.metadata(assetId);
|
|
@@ -198,40 +209,33 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
198
209
|
async getSubstrateContractTokenInfo(contractAddress, tokenType, originChain, contractCaller) {
|
|
199
210
|
// todo: improve this funtion later
|
|
200
211
|
|
|
201
|
-
let
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
212
|
+
let tokenSmartContract = {
|
|
213
|
+
name: '',
|
|
214
|
+
decimals: -1,
|
|
215
|
+
symbol: '',
|
|
216
|
+
contractError: false
|
|
217
|
+
};
|
|
205
218
|
const apiPromise = this.getSubstrateApiByChain(originChain).api;
|
|
206
219
|
try {
|
|
207
220
|
switch (tokenType) {
|
|
208
221
|
case _types._AssetType.PSP22:
|
|
209
|
-
|
|
222
|
+
tokenSmartContract = await this.getPsp22TokenInfo(apiPromise, contractAddress, contractCaller);
|
|
210
223
|
break;
|
|
211
224
|
case _types._AssetType.PSP34:
|
|
212
|
-
|
|
225
|
+
tokenSmartContract = await this.getPsp34TokenInfo(apiPromise, contractAddress, contractCaller);
|
|
213
226
|
break;
|
|
214
227
|
case _types._AssetType.GRC20:
|
|
215
|
-
|
|
228
|
+
tokenSmartContract = await this.getVaraFungibleTokenInfo(apiPromise, contractAddress, tokenType);
|
|
216
229
|
break;
|
|
217
230
|
case _types._AssetType.VFT:
|
|
218
|
-
|
|
231
|
+
tokenSmartContract = await this.getVaraFungibleTokenInfo(apiPromise, contractAddress, tokenType);
|
|
219
232
|
break;
|
|
220
233
|
}
|
|
221
|
-
return
|
|
222
|
-
name,
|
|
223
|
-
decimals,
|
|
224
|
-
symbol,
|
|
225
|
-
contractError
|
|
226
|
-
};
|
|
234
|
+
return tokenSmartContract;
|
|
227
235
|
} catch (e) {
|
|
228
236
|
this.logger.error(e);
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
decimals: -1,
|
|
232
|
-
symbol: '',
|
|
233
|
-
contractError: true
|
|
234
|
-
};
|
|
237
|
+
tokenSmartContract.contractError = true;
|
|
238
|
+
return tokenSmartContract;
|
|
235
239
|
}
|
|
236
240
|
}
|
|
237
241
|
async getSubstrateAssetIdTokenInfo(assetId, originChain) {
|
|
@@ -456,7 +456,7 @@ class AmplitudeNativeStakingPoolHandler extends _basePara.default {
|
|
|
456
456
|
} else {
|
|
457
457
|
extrinsic = chainApi.api.tx.parachainStaking.leaveDelegators();
|
|
458
458
|
}
|
|
459
|
-
return [_KoniTypes.ExtrinsicType.
|
|
459
|
+
return [_KoniTypes.ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
460
460
|
}
|
|
461
461
|
|
|
462
462
|
/* Leave pool action */
|
|
@@ -408,7 +408,7 @@ class AstarNativeStakingPoolHandler extends _basePara.default {
|
|
|
408
408
|
Wasm: selectedTarget
|
|
409
409
|
};
|
|
410
410
|
const extrinsic = chainApi.api.tx.dappsStaking.unbondAndUnstake(dappParam, binaryAmount);
|
|
411
|
-
return [_KoniTypes.ExtrinsicType.
|
|
411
|
+
return [_KoniTypes.ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
412
412
|
}
|
|
413
413
|
|
|
414
414
|
/* Leave pool action */
|
|
@@ -479,7 +479,7 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
|
|
|
479
479
|
} else {
|
|
480
480
|
extrinsic = apiPromise.api.tx.parachainStaking.scheduleRevokeDelegation(selectedTarget);
|
|
481
481
|
}
|
|
482
|
-
return [_KoniTypes.ExtrinsicType.
|
|
482
|
+
return [_KoniTypes.ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
483
483
|
}
|
|
484
484
|
|
|
485
485
|
/* Leave pool action */
|
|
@@ -642,7 +642,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
642
642
|
} else {
|
|
643
643
|
extrinsic = chainApi.api.tx.staking.unbond(binaryAmount);
|
|
644
644
|
}
|
|
645
|
-
return [_KoniTypes.ExtrinsicType.
|
|
645
|
+
return [_KoniTypes.ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
646
646
|
}
|
|
647
647
|
|
|
648
648
|
/* Leave pool action */
|
|
@@ -394,7 +394,7 @@ class TaoNativeStakingPoolHandler extends _basePara.default {
|
|
|
394
394
|
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS));
|
|
395
395
|
}
|
|
396
396
|
const extrinsic = apiPromise.api.tx.subtensorModule.removeStake(selectedTarget, binaryAmount);
|
|
397
|
-
return [_KoniTypes.ExtrinsicType.
|
|
397
|
+
return [_KoniTypes.ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
398
398
|
}
|
|
399
399
|
|
|
400
400
|
/* Leave pool action */
|
|
@@ -481,21 +481,18 @@ class NominationPoolHandler extends _base.default {
|
|
|
481
481
|
const data = _data;
|
|
482
482
|
const {
|
|
483
483
|
address,
|
|
484
|
-
amount
|
|
485
|
-
selectedPool
|
|
484
|
+
amount
|
|
486
485
|
} = data;
|
|
487
486
|
const positionInfo = await this.getPoolPosition(address);
|
|
488
487
|
const [extrinsic] = await this.createJoinExtrinsic(data, positionInfo);
|
|
489
488
|
const joinPoolData = {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
amount,
|
|
494
|
-
address
|
|
489
|
+
path,
|
|
490
|
+
data: data,
|
|
491
|
+
currentStep
|
|
495
492
|
};
|
|
496
493
|
return {
|
|
497
494
|
txChain: this.chain,
|
|
498
|
-
extrinsicType: _KoniTypes.ExtrinsicType.
|
|
495
|
+
extrinsicType: _KoniTypes.ExtrinsicType.JOIN_YIELD_POOL,
|
|
499
496
|
extrinsic,
|
|
500
497
|
txData: joinPoolData,
|
|
501
498
|
transferNativeAmount: amount,
|
|
@@ -371,14 +371,15 @@ class TransactionService {
|
|
|
371
371
|
};
|
|
372
372
|
}
|
|
373
373
|
break;
|
|
374
|
-
case _KoniTypes.ExtrinsicType.
|
|
374
|
+
case _KoniTypes.ExtrinsicType.JOIN_YIELD_POOL:
|
|
375
375
|
{
|
|
376
376
|
const data = (0, _utils3.parseTransactionData)(transaction.data);
|
|
377
|
+
const poolData = data.data;
|
|
377
378
|
historyItem.amount = {
|
|
378
379
|
...baseNativeAmount,
|
|
379
|
-
value:
|
|
380
|
+
value: poolData.amount || '0'
|
|
380
381
|
};
|
|
381
|
-
historyItem.to =
|
|
382
|
+
historyItem.to = poolData.selectedPool.name || poolData.selectedPool.id.toString();
|
|
382
383
|
}
|
|
383
384
|
break;
|
|
384
385
|
case _KoniTypes.ExtrinsicType.STAKING_UNBOND:
|
|
@@ -692,7 +693,7 @@ class TransactionService {
|
|
|
692
693
|
} catch (e) {
|
|
693
694
|
console.error(e);
|
|
694
695
|
}
|
|
695
|
-
} else if ([_KoniTypes.ExtrinsicType.STAKING_BOND, _KoniTypes.ExtrinsicType.STAKING_UNBOND, _KoniTypes.ExtrinsicType.STAKING_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_CANCEL_UNSTAKE, _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD, _KoniTypes.ExtrinsicType.
|
|
696
|
+
} else if ([_KoniTypes.ExtrinsicType.STAKING_BOND, _KoniTypes.ExtrinsicType.STAKING_UNBOND, _KoniTypes.ExtrinsicType.STAKING_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_CANCEL_UNSTAKE, _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD, _KoniTypes.ExtrinsicType.JOIN_YIELD_POOL, _KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL].includes(transaction.extrinsicType)) {
|
|
696
697
|
this.state.eventService.emit('transaction.submitStaking', transaction.chain);
|
|
697
698
|
} else if (transaction.extrinsicType === _KoniTypes.ExtrinsicType.SWAP) {
|
|
698
699
|
const inputData = (0, _utils3.parseTransactionData)(transaction.data);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { _Address } from '@subwallet/extension-base/background/KoniTypes';
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
2
|
+
import { AbiItem } from 'web3-utils';
|
|
3
|
+
export declare const _ERC20_ABI: AbiItem[] | AbiItem;
|
|
4
|
+
export declare const _ERC721_ABI: AbiItem[] | AbiItem;
|
|
4
5
|
export declare const _TEST_ERC721_ABI: any;
|
|
5
6
|
export declare const _PSP22_ABI: Record<string, any>;
|
|
6
7
|
export declare const _PSP34_ABI: Record<string, any>;
|
package/koni/api/nft/config.js
CHANGED
|
@@ -82,7 +82,7 @@ export let SUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
|
82
82
|
SUPPORTED_TRANSFER_EVM_CHAIN_NAME["shibuya"] = "shibuya";
|
|
83
83
|
})(SUPPORTED_TRANSFER_EVM_CHAIN_NAME || (SUPPORTED_TRANSFER_EVM_CHAIN_NAME = {}));
|
|
84
84
|
export const SUPPORTED_TRANSFER_EVM_CHAIN = [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonriver, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.astarEvm, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shiden, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shibuya];
|
|
85
|
-
export const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm'];
|
|
85
|
+
export const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm', 'rari'];
|
|
86
86
|
export const TRANSFER_CHAIN_ID = {
|
|
87
87
|
[SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase]: 1287,
|
|
88
88
|
[SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam]: 1284,
|
package/koni/api/nft/index.js
CHANGED
|
@@ -17,6 +17,7 @@ import { _NFT_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-servi
|
|
|
17
17
|
import { _isChainSupportEvmNft, _isChainSupportNativeNft, _isChainSupportWasmNft, _isSupportOrdinal } from '@subwallet/extension-base/services/chain-service/utils';
|
|
18
18
|
import { categoryAddresses, targetIsWeb } from '@subwallet/extension-base/utils';
|
|
19
19
|
import AssetHubNftsPalletApi from "./assethub_nft/index.js";
|
|
20
|
+
import { RariNftApi } from "./rari/index.js";
|
|
20
21
|
import { TernoaNftApi } from "./ternoa_nft/index.js";
|
|
21
22
|
function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
22
23
|
const {
|
|
@@ -45,6 +46,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
|
45
46
|
return [new BlobInscriptionApi(chain, substrateAddresses)];
|
|
46
47
|
} else if (_NFT_CHAIN_GROUP.ternoa.includes(chain)) {
|
|
47
48
|
return [new TernoaNftApi(substrateApi, substrateAddresses, chain)];
|
|
49
|
+
} else if (_NFT_CHAIN_GROUP.rari.includes(chain)) {
|
|
50
|
+
return [new RariNftApi(chain, evmAddresses)];
|
|
48
51
|
}
|
|
49
52
|
return null;
|
|
50
53
|
}
|
|
@@ -142,6 +145,12 @@ export class NftHandler {
|
|
|
142
145
|
this.handlers.push(...handlers);
|
|
143
146
|
}
|
|
144
147
|
}
|
|
148
|
+
if (chain === 'rari') {
|
|
149
|
+
const handlers = createSubstrateNftApi(chain, null, evmAddresses);
|
|
150
|
+
if (handlers && !!handlers.length) {
|
|
151
|
+
this.handlers.push(...handlers);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
145
154
|
if (chain === 'ternoa') {
|
|
146
155
|
const handlers = createSubstrateNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
|
|
147
156
|
if (handlers && !!handlers.length) {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseNftApi, HandleNftParams } from '../nft';
|
|
2
|
+
export declare class RariNftApi extends BaseNftApi {
|
|
3
|
+
constructor(chain: string, addresses: string[]);
|
|
4
|
+
private wait;
|
|
5
|
+
handleNfts(params: HandleNftParams): Promise<void>;
|
|
6
|
+
fetchNfts(params: HandleNftParams): Promise<number>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { BaseNftApi } from "../nft.js";
|
|
5
|
+
const options = {
|
|
6
|
+
method: 'GET',
|
|
7
|
+
headers: {
|
|
8
|
+
accept: 'application/json',
|
|
9
|
+
'X-API-KEY': 'ed9df6bf-7eba-4ca2-8a42-9006706be064'
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export class RariNftApi extends BaseNftApi {
|
|
13
|
+
constructor(chain, addresses) {
|
|
14
|
+
super(chain, undefined, addresses);
|
|
15
|
+
}
|
|
16
|
+
wait(ms) {
|
|
17
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
18
|
+
}
|
|
19
|
+
async handleNfts(params) {
|
|
20
|
+
const collectionMap = new Map();
|
|
21
|
+
const size = 4;
|
|
22
|
+
const waitTime = 1000;
|
|
23
|
+
for (let i = 0; i < this.addresses.length; i += size) {
|
|
24
|
+
const group = this.addresses.slice(i, i + size);
|
|
25
|
+
await Promise.all(group.map(async address => {
|
|
26
|
+
const nftResponse = await fetch(`https://api.rarible.org/v0.1/items/byOwner?blockchains=RARI&owner=ETHEREUM%3A${address}&size=5000`, options).then(response => response.json()).catch(err => {
|
|
27
|
+
console.error(err);
|
|
28
|
+
return null;
|
|
29
|
+
});
|
|
30
|
+
if (!nftResponse || !nftResponse.items) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const nftItems = nftResponse.items;
|
|
34
|
+
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
36
|
+
await Promise.all(nftItems.map(async nft => {
|
|
37
|
+
var _NftMetadata$content$;
|
|
38
|
+
const collectionId = nft.collection;
|
|
39
|
+
const collectionName = nft.itemCollection.name;
|
|
40
|
+
const NftMetadata = nft.meta;
|
|
41
|
+
const NFTimageUrl = ((_NftMetadata$content$ = NftMetadata.content[0]) === null || _NftMetadata$content$ === void 0 ? void 0 : _NftMetadata$content$.url) || '';
|
|
42
|
+
const formatCollectionId = collectionId.replace(/^RARI:/, '');
|
|
43
|
+
const parsedNft = {
|
|
44
|
+
id: nft.tokenId,
|
|
45
|
+
name: NftMetadata.name,
|
|
46
|
+
description: NftMetadata.description || '',
|
|
47
|
+
image: NFTimageUrl,
|
|
48
|
+
collectionId: formatCollectionId,
|
|
49
|
+
chain: this.chain,
|
|
50
|
+
owner: address
|
|
51
|
+
};
|
|
52
|
+
params.updateItem(this.chain, parsedNft, address);
|
|
53
|
+
if (!collectionMap.has(formatCollectionId)) {
|
|
54
|
+
collectionMap.set(formatCollectionId, collectionName);
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
57
|
+
}));
|
|
58
|
+
if (i + size < this.addresses.length) {
|
|
59
|
+
await this.wait(waitTime);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
for (const [formatCollectionId, collectionName] of collectionMap.entries()) {
|
|
63
|
+
const parsedCollection = {
|
|
64
|
+
collectionId: formatCollectionId,
|
|
65
|
+
chain: this.chain,
|
|
66
|
+
collectionName,
|
|
67
|
+
image: ''
|
|
68
|
+
};
|
|
69
|
+
params.updateCollection(this.chain, parsedCollection);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async fetchNfts(params) {
|
|
73
|
+
try {
|
|
74
|
+
await this.handleNfts(params);
|
|
75
|
+
} catch (e) {
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
return 1;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -5,7 +5,7 @@ import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
|
5
5
|
import { _getAssetDecimals } from '@subwallet/extension-base/services/chain-service/utils';
|
|
6
6
|
import { BN_TEN } from '@subwallet/extension-base/utils';
|
|
7
7
|
import BigN from 'bignumber.js';
|
|
8
|
-
export const YIELD_EXTRINSIC_TYPES = [ExtrinsicType.MINT_VDOT, ExtrinsicType.MINT_LDOT, ExtrinsicType.MINT_SDOT, ExtrinsicType.MINT_QDOT, ExtrinsicType.MINT_STDOT, ExtrinsicType.REDEEM_QDOT, ExtrinsicType.REDEEM_SDOT, ExtrinsicType.REDEEM_VDOT, ExtrinsicType.REDEEM_LDOT, ExtrinsicType.REDEEM_STDOT, ExtrinsicType.
|
|
8
|
+
export const YIELD_EXTRINSIC_TYPES = [ExtrinsicType.MINT_VDOT, ExtrinsicType.MINT_LDOT, ExtrinsicType.MINT_SDOT, ExtrinsicType.MINT_QDOT, ExtrinsicType.MINT_STDOT, ExtrinsicType.REDEEM_QDOT, ExtrinsicType.REDEEM_SDOT, ExtrinsicType.REDEEM_VDOT, ExtrinsicType.REDEEM_LDOT, ExtrinsicType.REDEEM_STDOT, ExtrinsicType.JOIN_YIELD_POOL, ExtrinsicType.STAKING_CLAIM_REWARD, ExtrinsicType.STAKING_LEAVE_POOL];
|
|
9
9
|
export const YIELD_POOL_STAT_REFRESH_INTERVAL = 90000;
|
|
10
10
|
export function convertDerivativeToOriginToken(amount, poolInfo, derivativeTokenInfo, originTokenInfo) {
|
|
11
11
|
var _poolInfo$statistic, _poolInfo$statistic$a;
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.3.
|
|
20
|
+
"version": "1.3.5-0",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -390,6 +390,11 @@
|
|
|
390
390
|
"require": "./cjs/koni/api/nft/quartz_nft/protobuf.js",
|
|
391
391
|
"default": "./koni/api/nft/quartz_nft/protobuf.js"
|
|
392
392
|
},
|
|
393
|
+
"./koni/api/nft/rari": {
|
|
394
|
+
"types": "./koni/api/nft/rari/index.d.ts",
|
|
395
|
+
"require": "./cjs/koni/api/nft/rari/index.js",
|
|
396
|
+
"default": "./koni/api/nft/rari/index.js"
|
|
397
|
+
},
|
|
393
398
|
"./koni/api/nft/rmrk_nft": {
|
|
394
399
|
"types": "./koni/api/nft/rmrk_nft/index.d.ts",
|
|
395
400
|
"require": "./cjs/koni/api/nft/rmrk_nft/index.js",
|
|
@@ -2429,11 +2434,11 @@
|
|
|
2429
2434
|
"@reduxjs/toolkit": "^1.9.1",
|
|
2430
2435
|
"@sora-substrate/type-definitions": "^1.17.7",
|
|
2431
2436
|
"@substrate/connect": "^0.8.9",
|
|
2432
|
-
"@subwallet/chain-list": "0.2.
|
|
2433
|
-
"@subwallet/extension-base": "^1.3.
|
|
2434
|
-
"@subwallet/extension-chains": "^1.3.
|
|
2435
|
-
"@subwallet/extension-dapp": "^1.3.
|
|
2436
|
-
"@subwallet/extension-inject": "^1.3.
|
|
2437
|
+
"@subwallet/chain-list": "0.2.92",
|
|
2438
|
+
"@subwallet/extension-base": "^1.3.5-0",
|
|
2439
|
+
"@subwallet/extension-chains": "^1.3.5-0",
|
|
2440
|
+
"@subwallet/extension-dapp": "^1.3.5-0",
|
|
2441
|
+
"@subwallet/extension-inject": "^1.3.5-0",
|
|
2437
2442
|
"@subwallet/keyring": "^0.1.8-beta.0",
|
|
2438
2443
|
"@subwallet/ui-keyring": "^0.1.8-beta.0",
|
|
2439
2444
|
"@ton/core": "^0.56.3",
|
package/packageInfo.js
CHANGED
|
@@ -7,5 +7,5 @@ export const packageInfo = {
|
|
|
7
7
|
name: '@subwallet/extension-base',
|
|
8
8
|
path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
|
|
9
9
|
type: 'esm',
|
|
10
|
-
version: '1.3.
|
|
10
|
+
version: '1.3.5-0'
|
|
11
11
|
};
|
|
@@ -124,6 +124,11 @@ export function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _cha
|
|
|
124
124
|
tonApi
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
|
+
|
|
128
|
+
// If the chain is not ready, return pending state
|
|
129
|
+
if (!substrateApiMap[chainSlug].isApiReady) {
|
|
130
|
+
handleUnsupportedOrPendingAddresses(useAddresses, chainSlug, chainAssetMap, APIItemState.PENDING, callback);
|
|
131
|
+
}
|
|
127
132
|
const substrateApi = await substrateApiMap[chainSlug].isReady;
|
|
128
133
|
return subscribeSubstrateBalance(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback, extrinsicType);
|
|
129
134
|
});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { BalanceError } from '@subwallet/extension-base/background/errors/BalanceError';
|
|
5
|
-
import { BalanceErrorType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
|
+
import { APIItemState, BalanceErrorType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
6
|
import { ALL_ACCOUNT_KEY } from '@subwallet/extension-base/constants';
|
|
7
7
|
import { _isXcmWithinSameConsensus } from '@subwallet/extension-base/core/substrate/xcm-parser';
|
|
8
8
|
import { getDefaultTransferProcess, getSnowbridgeTransferProcessFromEvm } from '@subwallet/extension-base/services/balance-service/helpers/process';
|
|
@@ -193,7 +193,7 @@ export class BalanceService {
|
|
|
193
193
|
let unsub = noop;
|
|
194
194
|
unsub = subscribeBalance([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, result => {
|
|
195
195
|
const rs = result[0];
|
|
196
|
-
if (rs.tokenSlug === tSlug) {
|
|
196
|
+
if (rs.tokenSlug === tSlug && rs.state !== APIItemState.PENDING) {
|
|
197
197
|
hasError = false;
|
|
198
198
|
const balance = {
|
|
199
199
|
value: rs.free,
|
|
@@ -37,6 +37,7 @@ export declare const _NFT_CHAIN_GROUP: {
|
|
|
37
37
|
vara: string[];
|
|
38
38
|
avail: string[];
|
|
39
39
|
ternoa: string[];
|
|
40
|
+
rari: string[];
|
|
40
41
|
};
|
|
41
42
|
export declare const _STAKING_ERA_LENGTH_MAP: Record<string, number>;
|
|
42
43
|
export declare const _EXPECTED_BLOCK_TIME: Record<string, number>;
|
|
@@ -52,7 +52,8 @@ export const _NFT_CHAIN_GROUP = {
|
|
|
52
52
|
bitcountry: ['bitcountry', 'pioneer', 'continuum_network'],
|
|
53
53
|
vara: ['vara_network'],
|
|
54
54
|
avail: ['avail_mainnet'],
|
|
55
|
-
ternoa: ['ternoa', 'ternoa_alphanet']
|
|
55
|
+
ternoa: ['ternoa', 'ternoa_alphanet'],
|
|
56
|
+
rari: ['rari']
|
|
56
57
|
};
|
|
57
58
|
|
|
58
59
|
// Staking--------------------------------------------------------------------------------------------------------------
|
|
@@ -110,7 +110,6 @@ export class EvmChainHandler extends AbstractChainHandler {
|
|
|
110
110
|
const evmApi = this.getEvmApiByChain(originChain);
|
|
111
111
|
try {
|
|
112
112
|
if (tokenType === _AssetType.ERC721) {
|
|
113
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access
|
|
114
113
|
tokenContract = new evmApi.api.eth.Contract(_ERC721_ABI, contractAddress);
|
|
115
114
|
const [_name, _symbol] = await Promise.all([
|
|
116
115
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
@@ -120,7 +119,6 @@ export class EvmChainHandler extends AbstractChainHandler {
|
|
|
120
119
|
name = _name;
|
|
121
120
|
symbol = _symbol;
|
|
122
121
|
} else {
|
|
123
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access
|
|
124
122
|
tokenContract = new evmApi.api.eth.Contract(_ERC20_ABI, contractAddress);
|
|
125
123
|
const [_decimals, _symbol, _name] = await Promise.all([
|
|
126
124
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
@@ -17,8 +17,7 @@ export declare class SubstrateChainHandler extends AbstractChainHandler {
|
|
|
17
17
|
getChainSpec(substrateApi: _SubstrateApi): Promise<_SubstrateChainSpec>;
|
|
18
18
|
private getPsp22TokenInfo;
|
|
19
19
|
private getPsp34TokenInfo;
|
|
20
|
-
private
|
|
21
|
-
private getVftTokenInfo;
|
|
20
|
+
private getVaraFungibleTokenInfo;
|
|
22
21
|
private getLocalTokenInfo;
|
|
23
22
|
getSubstrateContractTokenInfo(contractAddress: string, tokenType: _AssetType, originChain: string, contractCaller?: string): Promise<_SmartContractTokenInfo>;
|
|
24
23
|
getSubstrateAssetIdTokenInfo(assetId: string, originChain: string): Promise<_SmartContractTokenInfo>;
|
|
@@ -107,6 +107,12 @@ export class SubstrateChainHandler extends AbstractChainHandler {
|
|
|
107
107
|
}
|
|
108
108
|
async getPsp22TokenInfo(apiPromise, contractAddress, contractCaller) {
|
|
109
109
|
const tokenContract = new ContractPromise(apiPromise, _PSP22_ABI, contractAddress);
|
|
110
|
+
const tokenSmartContract = {
|
|
111
|
+
name: '',
|
|
112
|
+
decimals: -1,
|
|
113
|
+
symbol: '',
|
|
114
|
+
contractError: false
|
|
115
|
+
};
|
|
110
116
|
const [nameResp, symbolResp, decimalsResp] = await Promise.all([tokenContract.query['psp22Metadata::tokenName'](contractCaller || contractAddress, {
|
|
111
117
|
gasLimit: getDefaultWeightV2(apiPromise)
|
|
112
118
|
}),
|
|
@@ -117,67 +123,72 @@ export class SubstrateChainHandler extends AbstractChainHandler {
|
|
|
117
123
|
gasLimit: getDefaultWeightV2(apiPromise)
|
|
118
124
|
})]);
|
|
119
125
|
if (!(nameResp.result.isOk && symbolResp.result.isOk && decimalsResp.result.isOk) || !nameResp.output || !decimalsResp.output || !symbolResp.output) {
|
|
120
|
-
|
|
126
|
+
tokenSmartContract.contractError = true;
|
|
127
|
+
return tokenSmartContract;
|
|
121
128
|
} else {
|
|
122
129
|
var _symbolResp$output, _decimalsResp$output, _nameResp$output;
|
|
123
|
-
let contractError = false;
|
|
124
130
|
const symbolObj = (_symbolResp$output = symbolResp.output) === null || _symbolResp$output === void 0 ? void 0 : _symbolResp$output.toHuman();
|
|
125
131
|
const decimalsObj = (_decimalsResp$output = decimalsResp.output) === null || _decimalsResp$output === void 0 ? void 0 : _decimalsResp$output.toHuman();
|
|
126
132
|
const nameObj = (_nameResp$output = nameResp.output) === null || _nameResp$output === void 0 ? void 0 : _nameResp$output.toHuman();
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if (!name || !symbol || typeof name === 'object' || typeof symbol === 'object') {
|
|
131
|
-
contractError = true;
|
|
133
|
+
tokenSmartContract.name = nameResp.output ? nameObj.Ok || nameObj.ok : '';
|
|
134
|
+
tokenSmartContract.decimals = decimalsResp.output ? new BN(decimalsObj.Ok || decimalsObj.ok).toNumber() : 0;
|
|
135
|
+
tokenSmartContract.symbol = decimalsResp.output ? symbolObj.Ok || symbolObj.ok : '';
|
|
136
|
+
if (!tokenSmartContract.name || !tokenSmartContract.symbol || typeof tokenSmartContract.name === 'object' || typeof tokenSmartContract.symbol === 'object') {
|
|
137
|
+
tokenSmartContract.contractError = true;
|
|
132
138
|
}
|
|
133
|
-
return
|
|
139
|
+
return tokenSmartContract;
|
|
134
140
|
}
|
|
135
141
|
}
|
|
136
142
|
async getPsp34TokenInfo(apiPromise, contractAddress, contractCaller) {
|
|
137
143
|
const tokenContract = new ContractPromise(apiPromise, _PSP34_ABI, contractAddress);
|
|
144
|
+
const tokenSmartContract = {
|
|
145
|
+
name: '',
|
|
146
|
+
decimals: -1,
|
|
147
|
+
symbol: '',
|
|
148
|
+
contractError: false
|
|
149
|
+
};
|
|
138
150
|
const collectionIdResp = await tokenContract.query['psp34::collectionId'](contractCaller || contractAddress, {
|
|
139
151
|
gasLimit: getDefaultWeightV2(apiPromise)
|
|
140
152
|
}); // read-only operation so no gas limit
|
|
141
153
|
|
|
142
154
|
if (!collectionIdResp.result.isOk || !collectionIdResp.output) {
|
|
143
|
-
|
|
155
|
+
tokenSmartContract.contractError = true;
|
|
156
|
+
return tokenSmartContract;
|
|
144
157
|
} else {
|
|
145
158
|
var _collectionIdResp$out;
|
|
146
|
-
let contractError = false;
|
|
147
159
|
const collectionIdDict = (_collectionIdResp$out = collectionIdResp.output) === null || _collectionIdResp$out === void 0 ? void 0 : _collectionIdResp$out.toHuman();
|
|
148
160
|
if (collectionIdDict.Bytes === '') {
|
|
149
|
-
contractError = true;
|
|
161
|
+
tokenSmartContract.contractError = true;
|
|
150
162
|
}
|
|
151
|
-
return
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
async getGrc20TokenInfo(apiPromise, contractAddress) {
|
|
155
|
-
if (!(apiPromise instanceof GearApi)) {
|
|
156
|
-
console.warn('Cannot subscribe GRC20 balance without GearApi instance');
|
|
157
|
-
return ['', -1, '', true];
|
|
158
|
-
}
|
|
159
|
-
let contractError = false;
|
|
160
|
-
const tokenContract = getGRC20ContractPromise(apiPromise, contractAddress);
|
|
161
|
-
const [nameRes, symbolRes, decimalsRes] = await Promise.all([tokenContract.service.name(GEAR_DEFAULT_ADDRESS), tokenContract.service.symbol(GEAR_DEFAULT_ADDRESS), tokenContract.service.decimals(GEAR_DEFAULT_ADDRESS)]);
|
|
162
|
-
const decimals = typeof decimalsRes === 'string' ? parseInt(decimalsRes) : decimalsRes;
|
|
163
|
-
if (!nameRes || !symbolRes) {
|
|
164
|
-
contractError = true;
|
|
163
|
+
return tokenSmartContract;
|
|
165
164
|
}
|
|
166
|
-
return [nameRes, decimals, symbolRes, contractError];
|
|
167
165
|
}
|
|
168
|
-
async
|
|
166
|
+
async getVaraFungibleTokenInfo(apiPromise, contractAddress, tokenType) {
|
|
167
|
+
const tokenSmartContract = {
|
|
168
|
+
name: '',
|
|
169
|
+
decimals: -1,
|
|
170
|
+
symbol: '',
|
|
171
|
+
contractError: false
|
|
172
|
+
};
|
|
169
173
|
if (!(apiPromise instanceof GearApi)) {
|
|
170
|
-
|
|
171
|
-
|
|
174
|
+
if (tokenType === _AssetType.GRC20) {
|
|
175
|
+
console.warn('Cannot subscribe GRC20 balance without GearApi instance');
|
|
176
|
+
} else if (tokenType === _AssetType.VFT) {
|
|
177
|
+
console.warn('Cannot subscribe VFT balance without GearApi instance');
|
|
178
|
+
}
|
|
179
|
+
tokenSmartContract.contractError = true;
|
|
180
|
+
return tokenSmartContract;
|
|
172
181
|
}
|
|
173
|
-
|
|
174
|
-
const tokenContract = getVFTContractPromise(apiPromise, contractAddress);
|
|
182
|
+
const tokenContract = tokenType === _AssetType.GRC20 ? getGRC20ContractPromise(apiPromise, contractAddress) : getVFTContractPromise(apiPromise, contractAddress);
|
|
175
183
|
const [nameRes, symbolRes, decimalsRes] = await Promise.all([tokenContract.service.name(GEAR_DEFAULT_ADDRESS), tokenContract.service.symbol(GEAR_DEFAULT_ADDRESS), tokenContract.service.decimals(GEAR_DEFAULT_ADDRESS)]);
|
|
176
|
-
const decimals =
|
|
184
|
+
const decimals = parseInt(decimalsRes.toString());
|
|
185
|
+
tokenSmartContract.name = nameRes;
|
|
186
|
+
tokenSmartContract.decimals = decimals;
|
|
187
|
+
tokenSmartContract.symbol = symbolRes;
|
|
177
188
|
if (!nameRes || !symbolRes) {
|
|
178
|
-
contractError = true;
|
|
189
|
+
tokenSmartContract.contractError = true;
|
|
179
190
|
}
|
|
180
|
-
return
|
|
191
|
+
return tokenSmartContract;
|
|
181
192
|
}
|
|
182
193
|
async getLocalTokenInfo(apiPromise, assetId) {
|
|
183
194
|
const _metadata = await apiPromise.query.assets.metadata(assetId);
|
|
@@ -191,40 +202,33 @@ export class SubstrateChainHandler extends AbstractChainHandler {
|
|
|
191
202
|
async getSubstrateContractTokenInfo(contractAddress, tokenType, originChain, contractCaller) {
|
|
192
203
|
// todo: improve this funtion later
|
|
193
204
|
|
|
194
|
-
let
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
205
|
+
let tokenSmartContract = {
|
|
206
|
+
name: '',
|
|
207
|
+
decimals: -1,
|
|
208
|
+
symbol: '',
|
|
209
|
+
contractError: false
|
|
210
|
+
};
|
|
198
211
|
const apiPromise = this.getSubstrateApiByChain(originChain).api;
|
|
199
212
|
try {
|
|
200
213
|
switch (tokenType) {
|
|
201
214
|
case _AssetType.PSP22:
|
|
202
|
-
|
|
215
|
+
tokenSmartContract = await this.getPsp22TokenInfo(apiPromise, contractAddress, contractCaller);
|
|
203
216
|
break;
|
|
204
217
|
case _AssetType.PSP34:
|
|
205
|
-
|
|
218
|
+
tokenSmartContract = await this.getPsp34TokenInfo(apiPromise, contractAddress, contractCaller);
|
|
206
219
|
break;
|
|
207
220
|
case _AssetType.GRC20:
|
|
208
|
-
|
|
221
|
+
tokenSmartContract = await this.getVaraFungibleTokenInfo(apiPromise, contractAddress, tokenType);
|
|
209
222
|
break;
|
|
210
223
|
case _AssetType.VFT:
|
|
211
|
-
|
|
224
|
+
tokenSmartContract = await this.getVaraFungibleTokenInfo(apiPromise, contractAddress, tokenType);
|
|
212
225
|
break;
|
|
213
226
|
}
|
|
214
|
-
return
|
|
215
|
-
name,
|
|
216
|
-
decimals,
|
|
217
|
-
symbol,
|
|
218
|
-
contractError
|
|
219
|
-
};
|
|
227
|
+
return tokenSmartContract;
|
|
220
228
|
} catch (e) {
|
|
221
229
|
this.logger.error(e);
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
decimals: -1,
|
|
225
|
-
symbol: '',
|
|
226
|
-
contractError: true
|
|
227
|
-
};
|
|
230
|
+
tokenSmartContract.contractError = true;
|
|
231
|
+
return tokenSmartContract;
|
|
228
232
|
}
|
|
229
233
|
}
|
|
230
234
|
async getSubstrateAssetIdTokenInfo(assetId, originChain) {
|
|
@@ -448,7 +448,7 @@ export default class AmplitudeNativeStakingPoolHandler extends BaseParaNativeSta
|
|
|
448
448
|
} else {
|
|
449
449
|
extrinsic = chainApi.api.tx.parachainStaking.leaveDelegators();
|
|
450
450
|
}
|
|
451
|
-
return [ExtrinsicType.
|
|
451
|
+
return [ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
452
452
|
}
|
|
453
453
|
|
|
454
454
|
/* Leave pool action */
|
|
@@ -399,7 +399,7 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
|
|
|
399
399
|
Wasm: selectedTarget
|
|
400
400
|
};
|
|
401
401
|
const extrinsic = chainApi.api.tx.dappsStaking.unbondAndUnstake(dappParam, binaryAmount);
|
|
402
|
-
return [ExtrinsicType.
|
|
402
|
+
return [ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
403
403
|
}
|
|
404
404
|
|
|
405
405
|
/* Leave pool action */
|
|
@@ -472,7 +472,7 @@ export default class ParaNativeStakingPoolHandler extends BaseParaNativeStakingP
|
|
|
472
472
|
} else {
|
|
473
473
|
extrinsic = apiPromise.api.tx.parachainStaking.scheduleRevokeDelegation(selectedTarget);
|
|
474
474
|
}
|
|
475
|
-
return [ExtrinsicType.
|
|
475
|
+
return [ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
476
476
|
}
|
|
477
477
|
|
|
478
478
|
/* Leave pool action */
|
|
@@ -634,7 +634,7 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
|
|
|
634
634
|
} else {
|
|
635
635
|
extrinsic = chainApi.api.tx.staking.unbond(binaryAmount);
|
|
636
636
|
}
|
|
637
|
-
return [ExtrinsicType.
|
|
637
|
+
return [ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
638
638
|
}
|
|
639
639
|
|
|
640
640
|
/* Leave pool action */
|
|
@@ -375,7 +375,7 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
375
375
|
return Promise.reject(new TransactionError(BasicTxErrorType.INVALID_PARAMS));
|
|
376
376
|
}
|
|
377
377
|
const extrinsic = apiPromise.api.tx.subtensorModule.removeStake(selectedTarget, binaryAmount);
|
|
378
|
-
return [ExtrinsicType.
|
|
378
|
+
return [ExtrinsicType.STAKING_UNBOND, extrinsic];
|
|
379
379
|
}
|
|
380
380
|
|
|
381
381
|
/* Leave pool action */
|
|
@@ -472,21 +472,18 @@ export default class NominationPoolHandler extends BasePoolHandler {
|
|
|
472
472
|
const data = _data;
|
|
473
473
|
const {
|
|
474
474
|
address,
|
|
475
|
-
amount
|
|
476
|
-
selectedPool
|
|
475
|
+
amount
|
|
477
476
|
} = data;
|
|
478
477
|
const positionInfo = await this.getPoolPosition(address);
|
|
479
478
|
const [extrinsic] = await this.createJoinExtrinsic(data, positionInfo);
|
|
480
479
|
const joinPoolData = {
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
amount,
|
|
485
|
-
address
|
|
480
|
+
path,
|
|
481
|
+
data: data,
|
|
482
|
+
currentStep
|
|
486
483
|
};
|
|
487
484
|
return {
|
|
488
485
|
txChain: this.chain,
|
|
489
|
-
extrinsicType: ExtrinsicType.
|
|
486
|
+
extrinsicType: ExtrinsicType.JOIN_YIELD_POOL,
|
|
490
487
|
extrinsic,
|
|
491
488
|
txData: joinPoolData,
|
|
492
489
|
transferNativeAmount: amount,
|
|
@@ -364,14 +364,15 @@ export default class TransactionService {
|
|
|
364
364
|
};
|
|
365
365
|
}
|
|
366
366
|
break;
|
|
367
|
-
case ExtrinsicType.
|
|
367
|
+
case ExtrinsicType.JOIN_YIELD_POOL:
|
|
368
368
|
{
|
|
369
369
|
const data = parseTransactionData(transaction.data);
|
|
370
|
+
const poolData = data.data;
|
|
370
371
|
historyItem.amount = {
|
|
371
372
|
...baseNativeAmount,
|
|
372
|
-
value:
|
|
373
|
+
value: poolData.amount || '0'
|
|
373
374
|
};
|
|
374
|
-
historyItem.to =
|
|
375
|
+
historyItem.to = poolData.selectedPool.name || poolData.selectedPool.id.toString();
|
|
375
376
|
}
|
|
376
377
|
break;
|
|
377
378
|
case ExtrinsicType.STAKING_UNBOND:
|
|
@@ -682,7 +683,7 @@ export default class TransactionService {
|
|
|
682
683
|
} catch (e) {
|
|
683
684
|
console.error(e);
|
|
684
685
|
}
|
|
685
|
-
} else if ([ExtrinsicType.STAKING_BOND, ExtrinsicType.STAKING_UNBOND, ExtrinsicType.STAKING_WITHDRAW, ExtrinsicType.STAKING_CANCEL_UNSTAKE, ExtrinsicType.STAKING_CLAIM_REWARD, ExtrinsicType.
|
|
686
|
+
} else if ([ExtrinsicType.STAKING_BOND, ExtrinsicType.STAKING_UNBOND, ExtrinsicType.STAKING_WITHDRAW, ExtrinsicType.STAKING_CANCEL_UNSTAKE, ExtrinsicType.STAKING_CLAIM_REWARD, ExtrinsicType.JOIN_YIELD_POOL, ExtrinsicType.STAKING_LEAVE_POOL].includes(transaction.extrinsicType)) {
|
|
686
687
|
this.state.eventService.emit('transaction.submitStaking', transaction.chain);
|
|
687
688
|
} else if (transaction.extrinsicType === ExtrinsicType.SWAP) {
|
|
688
689
|
const inputData = parseTransactionData(transaction.data);
|