@subwallet/extension-base 1.1.32-0 → 1.1.33-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 +2 -0
- package/background/KoniTypes.js +1 -0
- package/cjs/background/KoniTypes.js +1 -0
- package/cjs/koni/api/staking/bonding/amplitude.js +97 -63
- package/cjs/koni/api/staking/paraChain.js +31 -5
- package/cjs/koni/api/xcm/xTokens.js +1 -1
- package/cjs/koni/background/handlers/Tabs.js +19 -2
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/campaign-service/index.js +19 -0
- package/cjs/services/chain-service/constants.js +5 -3
- package/cjs/services/history-service/index.js +12 -8
- package/cjs/services/storage-service/DatabaseService.js +3 -0
- package/cjs/services/storage-service/db-stores/Campaign.js +9 -3
- package/cjs/services/transaction-service/index.js +58 -13
- package/cjs/utils/fetchEvmChainInfo.js +20 -0
- package/cjs/utils/index.js +24 -0
- package/koni/api/staking/bonding/amplitude.d.ts +1 -1
- package/koni/api/staking/bonding/amplitude.js +98 -64
- package/koni/api/staking/bonding/utils.d.ts +4 -0
- package/koni/api/staking/paraChain.js +31 -5
- package/koni/api/xcm/xTokens.js +1 -1
- package/koni/background/handlers/Tabs.js +20 -3
- package/package.json +11 -6
- package/packageInfo.js +1 -1
- package/services/campaign-service/index.js +19 -0
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +5 -3
- package/services/event-service/types.d.ts +1 -0
- package/services/history-service/index.js +12 -8
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +3 -0
- package/services/storage-service/db-stores/Campaign.js +9 -3
- package/services/transaction-service/index.d.ts +1 -0
- package/services/transaction-service/index.js +45 -1
- package/services/transaction-service/types.d.ts +1 -0
- package/utils/fetchEvmChainInfo.d.ts +17 -0
- package/utils/fetchEvmChainInfo.js +14 -0
- package/utils/index.d.ts +2 -0
- package/utils/index.js +3 -1
|
@@ -392,6 +392,7 @@ export declare enum ExtrinsicStatus {
|
|
|
392
392
|
SUCCESS = "success",
|
|
393
393
|
FAIL = "fail",
|
|
394
394
|
CANCELLED = "cancelled",
|
|
395
|
+
TIMEOUT = "timeout",
|
|
395
396
|
UNKNOWN = "unknown"
|
|
396
397
|
}
|
|
397
398
|
export interface TxHistoryItem {
|
|
@@ -1553,6 +1554,7 @@ export interface BaseCampaignData {
|
|
|
1553
1554
|
slug: string;
|
|
1554
1555
|
campaignId: number;
|
|
1555
1556
|
isDone: boolean;
|
|
1557
|
+
isArchive: boolean;
|
|
1556
1558
|
type: CampaignDataType;
|
|
1557
1559
|
data: Record<string, any>;
|
|
1558
1560
|
buttons: CampaignButton[];
|
package/background/KoniTypes.js
CHANGED
|
@@ -85,6 +85,7 @@ export let ExtrinsicStatus;
|
|
|
85
85
|
ExtrinsicStatus["SUCCESS"] = "success";
|
|
86
86
|
ExtrinsicStatus["FAIL"] = "fail";
|
|
87
87
|
ExtrinsicStatus["CANCELLED"] = "cancelled";
|
|
88
|
+
ExtrinsicStatus["TIMEOUT"] = "timeout";
|
|
88
89
|
ExtrinsicStatus["UNKNOWN"] = "unknown";
|
|
89
90
|
})(ExtrinsicStatus || (ExtrinsicStatus = {}));
|
|
90
91
|
export let BasicTxErrorType;
|
|
@@ -100,6 +100,7 @@ exports.ExtrinsicStatus = ExtrinsicStatus;
|
|
|
100
100
|
ExtrinsicStatus["SUCCESS"] = "success";
|
|
101
101
|
ExtrinsicStatus["FAIL"] = "fail";
|
|
102
102
|
ExtrinsicStatus["CANCELLED"] = "cancelled";
|
|
103
|
+
ExtrinsicStatus["TIMEOUT"] = "timeout";
|
|
103
104
|
ExtrinsicStatus["UNKNOWN"] = "unknown";
|
|
104
105
|
})(ExtrinsicStatus || (exports.ExtrinsicStatus = ExtrinsicStatus = {}));
|
|
105
106
|
let BasicTxErrorType;
|
|
@@ -30,7 +30,7 @@ function subscribeAmplitudeStakingMetadata(chain, substrateApi, callback) {
|
|
|
30
30
|
const unstakingDelay = substrateApi.api.consts.parachainStaking.stakeDuration.toString();
|
|
31
31
|
const _blockPerRound = substrateApi.api.consts.parachainStaking.defaultBlocksPerRound.toString();
|
|
32
32
|
const blockPerRound = parseFloat(_blockPerRound);
|
|
33
|
-
const blockDuration = (_constants._STAKING_ERA_LENGTH_MAP[chain] || _constants._STAKING_ERA_LENGTH_MAP.default) / blockPerRound;
|
|
33
|
+
const blockDuration = (_constants._STAKING_ERA_LENGTH_MAP[chain] || _constants._STAKING_ERA_LENGTH_MAP.default) / blockPerRound;
|
|
34
34
|
const unstakingPeriod = blockDuration * parseInt(unstakingDelay);
|
|
35
35
|
callback(chain, {
|
|
36
36
|
chain,
|
|
@@ -72,46 +72,52 @@ async function subscribeAmplitudeNominatorMetadata(chainInfo, address, substrate
|
|
|
72
72
|
const nominationList = [];
|
|
73
73
|
const unstakingList = [];
|
|
74
74
|
const minDelegatorStake = substrateApi.api.consts.parachainStaking.minDelegatorStake.toString();
|
|
75
|
+
const hasUnstakingInfo = unstakingInfo && Object.values(unstakingInfo).length > 0;
|
|
75
76
|
let activeStake = '0';
|
|
76
77
|
if (delegatorState) {
|
|
77
78
|
// delegatorState can be null while unstaking all
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
79
|
+
const identityPromises = delegatorState.map(delegate => (0, _utils.parseIdentity)(substrateApi, delegate.owner));
|
|
80
|
+
const identities = await Promise.all(identityPromises);
|
|
81
|
+
for (let i = 0; i < delegatorState.length; i++) {
|
|
82
|
+
const delegate = delegatorState[i];
|
|
83
|
+
const [identity] = identities[i];
|
|
84
|
+
activeStake = delegate.amount.toString();
|
|
85
|
+
const bnActiveStake = new _util.BN(activeStake);
|
|
86
|
+
let delegationStatus = _KoniTypes.StakingStatus.NOT_EARNING;
|
|
87
|
+
if (bnActiveStake.gt(_util.BN_ZERO) && bnActiveStake.gte(new _util.BN(minDelegatorStake))) {
|
|
88
|
+
delegationStatus = _KoniTypes.StakingStatus.EARNING_REWARD;
|
|
89
|
+
}
|
|
90
|
+
nominationList.push({
|
|
91
|
+
status: delegationStatus,
|
|
92
|
+
chain: chainInfo.slug,
|
|
93
|
+
validatorAddress: delegate.owner,
|
|
94
|
+
activeStake: delegate.amount.toString(),
|
|
95
|
+
validatorMinStake: '0',
|
|
96
|
+
hasUnstaking: hasUnstakingInfo,
|
|
97
|
+
validatorIdentity: identity
|
|
98
|
+
});
|
|
99
|
+
if (hasUnstakingInfo) {
|
|
100
|
+
const _currentBlockInfo = await substrateApi.api.rpc.chain.getHeader();
|
|
101
|
+
const currentBlockInfo = _currentBlockInfo.toPrimitive();
|
|
102
|
+
const currentBlockNumber = currentBlockInfo.number;
|
|
103
|
+
const _blockPerRound = substrateApi.api.consts.parachainStaking.defaultBlocksPerRound.toString();
|
|
104
|
+
const blockPerRound = parseFloat(_blockPerRound);
|
|
105
|
+
const nearestUnstakingBlock = Object.keys(unstakingInfo)[0];
|
|
106
|
+
const nearestUnstakingAmount = Object.values(unstakingInfo)[0];
|
|
107
|
+
const blockDuration = (_constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _constants._STAKING_ERA_LENGTH_MAP.default) / blockPerRound; // in hours
|
|
104
108
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
109
|
+
const isClaimable = parseInt(nearestUnstakingBlock) - currentBlockNumber < 0;
|
|
110
|
+
const remainingBlock = parseInt(nearestUnstakingBlock) - currentBlockNumber;
|
|
111
|
+
const waitingTime = remainingBlock * blockDuration;
|
|
112
|
+
unstakingList.push({
|
|
113
|
+
chain: chainInfo.slug,
|
|
114
|
+
status: isClaimable ? _KoniTypes.UnstakingStatus.CLAIMABLE : _KoniTypes.UnstakingStatus.UNLOCKING,
|
|
115
|
+
claimable: nearestUnstakingAmount.toString(),
|
|
116
|
+
waitingTime,
|
|
117
|
+
validatorAddress: (delegate === null || delegate === void 0 ? void 0 : delegate.owner) || undefined
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
115
121
|
}
|
|
116
122
|
const stakingStatus = (0, _utils.getStakingStatusByNominations)(new _util.BN(activeStake), nominationList);
|
|
117
123
|
return {
|
|
@@ -208,33 +214,61 @@ async function getAmplitudeNominatorMetadata(chainInfo, address, substrateApi) {
|
|
|
208
214
|
}
|
|
209
215
|
async function getAmplitudeCollatorsInfo(chain, substrateApi) {
|
|
210
216
|
const chainApi = await substrateApi.isReady;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
217
|
+
|
|
218
|
+
// Noted: Krest do not have reward
|
|
219
|
+
if (_constants._STAKING_CHAIN_GROUP.krest_network.includes(chain)) {
|
|
220
|
+
const _allCollators = await chainApi.api.query.parachainStaking.candidatePool.entries();
|
|
221
|
+
const maxDelegatorsPerCollator = chainApi.api.consts.parachainStaking.maxDelegatorsPerCollator.toString();
|
|
222
|
+
const allCollators = [];
|
|
223
|
+
for (const _collator of _allCollators) {
|
|
224
|
+
const collatorInfo = _collator[1].toPrimitive();
|
|
225
|
+
const bnTotalStake = new _util.BN(collatorInfo.total);
|
|
226
|
+
const bnOwnStake = new _util.BN(collatorInfo.stake);
|
|
227
|
+
const bnOtherStake = bnTotalStake.sub(bnOwnStake);
|
|
228
|
+
allCollators.push({
|
|
229
|
+
address: collatorInfo.id,
|
|
230
|
+
totalStake: bnTotalStake.toString(),
|
|
231
|
+
ownStake: bnOwnStake.toString(),
|
|
232
|
+
otherStake: bnOtherStake.toString(),
|
|
233
|
+
nominatorCount: collatorInfo.delegators.length,
|
|
234
|
+
commission: 0,
|
|
235
|
+
blocked: false,
|
|
236
|
+
isVerified: false,
|
|
237
|
+
minBond: '0',
|
|
238
|
+
chain,
|
|
239
|
+
isCrowded: collatorInfo.delegators.length >= parseInt(maxDelegatorsPerCollator)
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
return allCollators;
|
|
243
|
+
} else {
|
|
244
|
+
const [_allCollators, _inflationConfig] = await Promise.all([chainApi.api.query.parachainStaking.candidatePool.entries(), chainApi.api.query.parachainStaking.inflationConfig()]);
|
|
245
|
+
const maxDelegatorsPerCollator = chainApi.api.consts.parachainStaking.maxDelegatorsPerCollator.toString();
|
|
246
|
+
const inflationConfig = _inflationConfig.toHuman();
|
|
247
|
+
const rawDelegatorReturn = inflationConfig.delegator.rewardRate.annual;
|
|
248
|
+
const delegatorReturn = parseFloat(rawDelegatorReturn.split('%')[0]);
|
|
249
|
+
const allCollators = [];
|
|
250
|
+
for (const _collator of _allCollators) {
|
|
251
|
+
const collatorInfo = _collator[1].toPrimitive();
|
|
252
|
+
const bnTotalStake = new _util.BN(collatorInfo.total);
|
|
253
|
+
const bnOwnStake = new _util.BN(collatorInfo.stake);
|
|
254
|
+
const bnOtherStake = bnTotalStake.sub(bnOwnStake);
|
|
255
|
+
allCollators.push({
|
|
256
|
+
address: collatorInfo.id,
|
|
257
|
+
totalStake: bnTotalStake.toString(),
|
|
258
|
+
ownStake: bnOwnStake.toString(),
|
|
259
|
+
otherStake: bnOtherStake.toString(),
|
|
260
|
+
nominatorCount: collatorInfo.delegators.length,
|
|
261
|
+
commission: 0,
|
|
262
|
+
expectedReturn: delegatorReturn,
|
|
263
|
+
blocked: false,
|
|
264
|
+
isVerified: false,
|
|
265
|
+
minBond: '0',
|
|
266
|
+
chain,
|
|
267
|
+
isCrowded: collatorInfo.delegators.length >= parseInt(maxDelegatorsPerCollator)
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
return allCollators;
|
|
236
271
|
}
|
|
237
|
-
return allCollators;
|
|
238
272
|
}
|
|
239
273
|
async function getAmplitudeBondingExtrinsic(substrateApi, amount, selectedValidatorInfo, nominatorMetadata) {
|
|
240
274
|
const chainApi = await substrateApi.isReady;
|
|
@@ -22,7 +22,15 @@ var _utilCrypto = require("@polkadot/util-crypto");
|
|
|
22
22
|
function getSingleStakingAmplitude(substrateApi, address, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
|
|
23
23
|
return substrateApi.api.queryMulti([[substrateApi.api.query.parachainStaking.delegatorState, address], [substrateApi.api.query.parachainStaking.unstaking, address]], async _ref => {
|
|
24
24
|
let [_delegatorState, _unstaking] = _ref;
|
|
25
|
-
|
|
25
|
+
let delegatorState = [];
|
|
26
|
+
if (_constants._STAKING_CHAIN_GROUP.krest_network.includes(chain)) {
|
|
27
|
+
const krestDelegatorState = _delegatorState.toPrimitive();
|
|
28
|
+
const delegates = krestDelegatorState === null || krestDelegatorState === void 0 ? void 0 : krestDelegatorState.delegations;
|
|
29
|
+
delegatorState = delegatorState.concat(delegates);
|
|
30
|
+
} else {
|
|
31
|
+
const delegate = _delegatorState.toPrimitive();
|
|
32
|
+
delegatorState.push(delegate);
|
|
33
|
+
}
|
|
26
34
|
const unstakingInfo = _unstaking.toPrimitive();
|
|
27
35
|
const {
|
|
28
36
|
symbol
|
|
@@ -51,8 +59,13 @@ function getSingleStakingAmplitude(substrateApi, address, chainInfoMap, chain, s
|
|
|
51
59
|
unstakings: []
|
|
52
60
|
});
|
|
53
61
|
} else {
|
|
54
|
-
|
|
62
|
+
let activeBalance = _util.BN_ZERO;
|
|
55
63
|
let unstakingBalance = _util.BN_ZERO;
|
|
64
|
+
for (const delegate of delegatorState) {
|
|
65
|
+
var _delegate$amount;
|
|
66
|
+
const amount = new _util.BN((_delegate$amount = delegate.amount) === null || _delegate$amount === void 0 ? void 0 : _delegate$amount.toString());
|
|
67
|
+
activeBalance = activeBalance.add(amount);
|
|
68
|
+
}
|
|
56
69
|
if (unstakingInfo) {
|
|
57
70
|
Object.values(unstakingInfo).forEach(unstakingAmount => {
|
|
58
71
|
const bnUnstakingAmount = new _util.BN(unstakingAmount.toString());
|
|
@@ -87,7 +100,15 @@ function getMultiStakingAmplitude(substrateApi, useAddresses, chainInfoMap, chai
|
|
|
87
100
|
const _unstakingStates = await substrateApi.api.query.parachainStaking.unstaking.multi(useAddresses);
|
|
88
101
|
await Promise.all(ledgers.map(async (_delegatorState, i) => {
|
|
89
102
|
const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
|
|
90
|
-
|
|
103
|
+
let delegatorState = [];
|
|
104
|
+
if (_constants._STAKING_CHAIN_GROUP.krest_network.includes(chain)) {
|
|
105
|
+
const krestDelegatorState = _delegatorState.toPrimitive();
|
|
106
|
+
const delegates = krestDelegatorState === null || krestDelegatorState === void 0 ? void 0 : krestDelegatorState.delegations;
|
|
107
|
+
delegatorState = delegatorState.concat(delegates);
|
|
108
|
+
} else {
|
|
109
|
+
const delegate = _delegatorState.toPrimitive();
|
|
110
|
+
delegatorState.push(delegate);
|
|
111
|
+
}
|
|
91
112
|
const unstakingInfo = _unstakingStates[i].toPrimitive();
|
|
92
113
|
if (!delegatorState && !unstakingInfo) {
|
|
93
114
|
stakingCallback(chain, {
|
|
@@ -112,8 +133,13 @@ function getMultiStakingAmplitude(substrateApi, useAddresses, chainInfoMap, chai
|
|
|
112
133
|
unstakings: []
|
|
113
134
|
});
|
|
114
135
|
} else {
|
|
115
|
-
|
|
136
|
+
let activeBalance = _util.BN_ZERO;
|
|
116
137
|
let unstakingBalance = _util.BN_ZERO;
|
|
138
|
+
for (const delegate of delegatorState) {
|
|
139
|
+
var _delegate$amount2;
|
|
140
|
+
const amount = new _util.BN((_delegate$amount2 = delegate.amount) === null || _delegate$amount2 === void 0 ? void 0 : _delegate$amount2.toString());
|
|
141
|
+
activeBalance = activeBalance.add(amount);
|
|
142
|
+
}
|
|
117
143
|
if (unstakingInfo) {
|
|
118
144
|
Object.values(unstakingInfo).forEach(unstakingAmount => {
|
|
119
145
|
const bnUnstakingAmount = new _util.BN(unstakingAmount.toString());
|
|
@@ -159,7 +185,7 @@ async function getAmplitudeUnclaimedStakingReward(substrateApiMap, addresses, ne
|
|
|
159
185
|
});
|
|
160
186
|
const unclaimedRewardList = [];
|
|
161
187
|
await Promise.all(chains.map(async chain => {
|
|
162
|
-
if (_constants._STAKING_CHAIN_GROUP.amplitude.includes(chain) && !_constants._STAKING_CHAIN_GROUP.kilt.includes(chain)) {
|
|
188
|
+
if (_constants._STAKING_CHAIN_GROUP.amplitude.includes(chain) && !_constants._STAKING_CHAIN_GROUP.kilt.includes(chain) && !_constants._STAKING_CHAIN_GROUP.krest_network.includes(chain)) {
|
|
163
189
|
const networkInfo = networks[chain];
|
|
164
190
|
const apiProps = await substrateApiMap[chain].isReady;
|
|
165
191
|
await Promise.all(useAddresses.map(async address => {
|
|
@@ -25,6 +25,6 @@ function getCurrencyId(tokenInfo) {
|
|
|
25
25
|
}
|
|
26
26
|
function getExtrinsicByXtokensPallet(tokenInfo, originChainInfo, destinationChainInfo, recipientAddress, value, api) {
|
|
27
27
|
const weightParam = ['pioneer'].includes(originChainInfo.slug) ? _utils.FOUR_INSTRUCTIONS_WEIGHT : (0, _utils.getDestWeight)();
|
|
28
|
-
const destVersion = ['moonbeam', 'moonriver', 'bifrost_dot', 'interlay', 'hydradx_main', 'acala', 'parallel', 'astar', 'shiden', 'centrifuge'].includes(originChainInfo.slug) ? 'V3' : undefined;
|
|
28
|
+
const destVersion = ['moonbeam', 'moonriver', 'bifrost_dot', 'interlay', 'hydradx_main', 'acala', 'parallel', 'astar', 'shiden', 'centrifuge', 'manta_network'].includes(originChainInfo.slug) ? 'V3' : undefined;
|
|
29
29
|
return api.tx.xTokens.transfer(getCurrencyId(tokenInfo), value, (0, _utils.getDestMultilocation)(destinationChainInfo, recipientAddress, destVersion), weightParam);
|
|
30
30
|
}
|
|
@@ -424,15 +424,32 @@ class KoniTabs {
|
|
|
424
424
|
} = _ref13;
|
|
425
425
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
426
426
|
const chainId = params[0].chainId;
|
|
427
|
+
const chainIdDec = parseInt(chainId, 16);
|
|
427
428
|
const evmState = await this.getEvmState(url);
|
|
428
429
|
if (evmState.chainId === chainId) {
|
|
429
430
|
return null;
|
|
430
431
|
}
|
|
431
|
-
const [networkKey] = this.#koniState.findNetworkKeyByChainId(
|
|
432
|
+
const [networkKey] = this.#koniState.findNetworkKeyByChainId(chainIdDec);
|
|
432
433
|
if (networkKey) {
|
|
433
434
|
await this.#koniState.switchEvmNetworkByUrl((0, _utils2.stripUrl)(url), networkKey);
|
|
434
435
|
} else {
|
|
435
|
-
|
|
436
|
+
const onlineData = await (0, _utils2.getEVMChainInfo)(chainIdDec);
|
|
437
|
+
if (onlineData) {
|
|
438
|
+
const chainData = {
|
|
439
|
+
chainId: chainId,
|
|
440
|
+
rpcUrls: onlineData.rpc.filter(url => url.startsWith('https://')),
|
|
441
|
+
chainName: onlineData.name,
|
|
442
|
+
blockExplorerUrls: onlineData.explorers.map(explorer => explorer.url),
|
|
443
|
+
nativeCurrency: onlineData.nativeCurrency,
|
|
444
|
+
requestId: id
|
|
445
|
+
};
|
|
446
|
+
await this.addEvmChain(id, url, {
|
|
447
|
+
method: 'wallet_addEthereumChain',
|
|
448
|
+
params: [chainData]
|
|
449
|
+
});
|
|
450
|
+
} else {
|
|
451
|
+
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, 'This network is currently not supported');
|
|
452
|
+
}
|
|
436
453
|
}
|
|
437
454
|
return null;
|
|
438
455
|
}
|
package/cjs/packageInfo.js
CHANGED
|
@@ -50,6 +50,7 @@ class CampaignService {
|
|
|
50
50
|
endTime,
|
|
51
51
|
startTime,
|
|
52
52
|
isDone: false,
|
|
53
|
+
isArchive: false,
|
|
53
54
|
campaignId,
|
|
54
55
|
type: _KoniTypes.CampaignDataType.BANNER,
|
|
55
56
|
buttons,
|
|
@@ -70,6 +71,7 @@ class CampaignService {
|
|
|
70
71
|
endTime,
|
|
71
72
|
startTime,
|
|
72
73
|
isDone: false,
|
|
74
|
+
isArchive: false,
|
|
73
75
|
campaignId,
|
|
74
76
|
type: _KoniTypes.CampaignDataType.NOTIFICATION,
|
|
75
77
|
buttons,
|
|
@@ -82,6 +84,23 @@ class CampaignService {
|
|
|
82
84
|
const exists = await this.#state.dbService.getCampaign(campaign.slug);
|
|
83
85
|
if (!exists) {
|
|
84
86
|
await this.#state.dbService.upsertCampaign(campaign);
|
|
87
|
+
} else {
|
|
88
|
+
const data = {
|
|
89
|
+
...campaign,
|
|
90
|
+
isDone: exists.isDone
|
|
91
|
+
};
|
|
92
|
+
await this.#state.dbService.upsertCampaign(data);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const allCampaign = await this.#state.dbService.getAllCampaign();
|
|
96
|
+
for (const stored of allCampaign) {
|
|
97
|
+
const exists = campaigns.find(campaign => campaign.slug === stored.slug);
|
|
98
|
+
if (!exists) {
|
|
99
|
+
const data = {
|
|
100
|
+
...stored,
|
|
101
|
+
isArchive: true
|
|
102
|
+
};
|
|
103
|
+
await this.#state.dbService.upsertCampaign(data);
|
|
85
104
|
}
|
|
86
105
|
}
|
|
87
106
|
this.#state.eventService.emit('campaign.ready', true);
|
|
@@ -40,7 +40,7 @@ const _BALANCE_CHAIN_GROUP = {
|
|
|
40
40
|
genshiro: ['genshiro_testnet', 'genshiro'],
|
|
41
41
|
equilibrium_parachain: ['equilibrium_parachain'],
|
|
42
42
|
bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'pendulum', 'amplitude'],
|
|
43
|
-
statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari'],
|
|
43
|
+
statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network'],
|
|
44
44
|
kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
|
|
45
45
|
// perhaps there are some runtime updates
|
|
46
46
|
centrifuge: ['centrifuge']
|
|
@@ -69,8 +69,9 @@ const _STAKING_CHAIN_GROUP = {
|
|
|
69
69
|
relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'ternoa_alphanet', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet'],
|
|
70
70
|
para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network'],
|
|
71
71
|
astar: ['astar', 'shiden', 'shibuya'],
|
|
72
|
-
amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum'],
|
|
72
|
+
amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum', 'krest_network'],
|
|
73
73
|
// amplitude and kilt only share some common logic
|
|
74
|
+
krest_network: ['krest_network'],
|
|
74
75
|
kilt: ['kilt', 'kilt_peregrine'],
|
|
75
76
|
nominationPool: ['polkadot', 'kusama', 'westend', 'alephTest', 'aleph', 'kate', 'vara_network', 'goldberg_testnet'],
|
|
76
77
|
bifrost: ['bifrost', 'bifrost_testnet'],
|
|
@@ -111,7 +112,8 @@ const _STAKING_ERA_LENGTH_MAP = {
|
|
|
111
112
|
creditcoin: 24,
|
|
112
113
|
vara_network: 12,
|
|
113
114
|
goldberg_testnet: 24,
|
|
114
|
-
manta_network: 6
|
|
115
|
+
manta_network: 6,
|
|
116
|
+
krest_network: 4
|
|
115
117
|
};
|
|
116
118
|
exports._STAKING_ERA_LENGTH_MAP = _STAKING_ERA_LENGTH_MAP;
|
|
117
119
|
const _EXPECTED_BLOCK_TIME = {
|
|
@@ -173,14 +173,18 @@ class HistoryService {
|
|
|
173
173
|
|
|
174
174
|
// Insert history with check override origin 'app'
|
|
175
175
|
async addHistoryItems(historyItems) {
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
176
|
+
const updateRecords = [];
|
|
177
|
+
const appItems = this.historySubject.value.filter(i => i.origin === 'app');
|
|
178
|
+
historyItems.forEach(item => {
|
|
179
|
+
const needUpdateItem = appItems.find(item_ => item_.extrinsicHash === item.extrinsicHash && item.chain === item_.chain && item.address === item_.address);
|
|
180
|
+
if (needUpdateItem) {
|
|
181
|
+
updateRecords.push({
|
|
182
|
+
...needUpdateItem,
|
|
183
|
+
status: item.status
|
|
184
|
+
});
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
updateRecords.push(item);
|
|
184
188
|
});
|
|
185
189
|
await this.dbService.upsertHistory(updateRecords);
|
|
186
190
|
this.historySubject.next(await this.dbService.getHistories());
|
|
@@ -13,7 +13,13 @@ var _dexie = require("dexie");
|
|
|
13
13
|
const filterProcessing = campaign => {
|
|
14
14
|
const now = new Date().getTime();
|
|
15
15
|
const isExpired = now <= campaign.startTime || now >= campaign.endTime;
|
|
16
|
-
return !(campaign.isDone || isExpired);
|
|
16
|
+
return !(campaign.isArchive || campaign.isDone || isExpired);
|
|
17
|
+
};
|
|
18
|
+
const getId = campaign => {
|
|
19
|
+
return campaign.campaignId;
|
|
20
|
+
};
|
|
21
|
+
const sortById = (a, b) => {
|
|
22
|
+
return getId(a) - getId(b);
|
|
17
23
|
};
|
|
18
24
|
class CampaignStore extends _BaseStore.default {
|
|
19
25
|
async getAll() {
|
|
@@ -23,10 +29,10 @@ class CampaignStore extends _BaseStore.default {
|
|
|
23
29
|
return this.table.get(slug);
|
|
24
30
|
}
|
|
25
31
|
async getProcessingCampaign() {
|
|
26
|
-
return (await this.table.toArray()).filter(filterProcessing);
|
|
32
|
+
return (await this.table.toArray()).filter(filterProcessing).sort(sortById);
|
|
27
33
|
}
|
|
28
34
|
subscribeProcessingCampaign() {
|
|
29
|
-
return (0, _dexie.liveQuery)(() => this.table.filter(filterProcessing).toArray());
|
|
35
|
+
return (0, _dexie.liveQuery)(async () => (await this.table.filter(filterProcessing).toArray()).sort(sortById));
|
|
30
36
|
}
|
|
31
37
|
upsertCampaign(campaign) {
|
|
32
38
|
return this.table.put(campaign);
|
|
@@ -290,6 +290,12 @@ class TransactionService {
|
|
|
290
290
|
errors: [...data.errors, new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR)]
|
|
291
291
|
});
|
|
292
292
|
});
|
|
293
|
+
emitter.on('timeout', data => {
|
|
294
|
+
this.onTimeOut({
|
|
295
|
+
...data,
|
|
296
|
+
errors: [...data.errors, new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.TIMEOUT)]
|
|
297
|
+
});
|
|
298
|
+
});
|
|
293
299
|
|
|
294
300
|
// Todo: handle any event with transaction.eventsHandler
|
|
295
301
|
|
|
@@ -657,6 +663,45 @@ class TransactionService {
|
|
|
657
663
|
}
|
|
658
664
|
this.eventService.emit('transaction.failed', transaction);
|
|
659
665
|
}
|
|
666
|
+
onTimeOut(_ref6) {
|
|
667
|
+
let {
|
|
668
|
+
blockHash,
|
|
669
|
+
blockNumber,
|
|
670
|
+
errors,
|
|
671
|
+
extrinsicHash,
|
|
672
|
+
id
|
|
673
|
+
} = _ref6;
|
|
674
|
+
const transaction = this.getTransaction(id);
|
|
675
|
+
const nextStatus = _KoniTypes.ExtrinsicStatus.TIMEOUT;
|
|
676
|
+
if (transaction) {
|
|
677
|
+
this.updateTransaction(id, {
|
|
678
|
+
status: nextStatus,
|
|
679
|
+
errors,
|
|
680
|
+
extrinsicHash
|
|
681
|
+
});
|
|
682
|
+
this.historyService.updateHistoryByExtrinsicHash(transaction.extrinsicHash, {
|
|
683
|
+
extrinsicHash: extrinsicHash || transaction.extrinsicHash,
|
|
684
|
+
status: nextStatus,
|
|
685
|
+
blockNumber: blockNumber || 0,
|
|
686
|
+
blockHash: blockHash || ''
|
|
687
|
+
}).catch(console.error);
|
|
688
|
+
const info = (0, _util.isHex)(transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash) ? transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash : (0, _helpers.getBaseTransactionInfo)(transaction, this.chainService.getChainInfoMap());
|
|
689
|
+
this.notificationService.notify({
|
|
690
|
+
type: _KoniTypes.NotificationType.ERROR,
|
|
691
|
+
title: (0, _i18next.t)('Transaction timed out'),
|
|
692
|
+
message: (0, _i18next.t)('Transaction {{info}} timed out', {
|
|
693
|
+
replace: {
|
|
694
|
+
info
|
|
695
|
+
}
|
|
696
|
+
}),
|
|
697
|
+
action: {
|
|
698
|
+
url: this.getTransactionLink(id)
|
|
699
|
+
},
|
|
700
|
+
notifyViaBrowser: true
|
|
701
|
+
});
|
|
702
|
+
}
|
|
703
|
+
this.eventService.emit('transaction.timeout', transaction);
|
|
704
|
+
}
|
|
660
705
|
generateHashPayload(chain, transaction) {
|
|
661
706
|
var _transaction$nonce;
|
|
662
707
|
const chainInfo = this.chainService.getChainInfoByKey(chain);
|
|
@@ -671,7 +716,7 @@ class TransactionService {
|
|
|
671
716
|
};
|
|
672
717
|
return _ethers.ethers.Transaction.from(txObject).unsignedSerialized;
|
|
673
718
|
}
|
|
674
|
-
async signAndSendEvmTransaction(
|
|
719
|
+
async signAndSendEvmTransaction(_ref7) {
|
|
675
720
|
var _payload$nonce;
|
|
676
721
|
let {
|
|
677
722
|
address,
|
|
@@ -679,7 +724,7 @@ class TransactionService {
|
|
|
679
724
|
id,
|
|
680
725
|
transaction,
|
|
681
726
|
url
|
|
682
|
-
} =
|
|
727
|
+
} = _ref7;
|
|
683
728
|
const payload = transaction;
|
|
684
729
|
const evmApi = this.chainService.getEvmApi(chain);
|
|
685
730
|
const chainInfo = this.chainService.getChainInfoByKey(chain);
|
|
@@ -747,11 +792,11 @@ class TransactionService {
|
|
|
747
792
|
extrinsicHash: id
|
|
748
793
|
};
|
|
749
794
|
if (isInjected) {
|
|
750
|
-
this.requestService.addConfirmation(id, url || _constants3.EXTENSION_REQUEST_URL, 'evmWatchTransactionRequest', payload, {}).then(async
|
|
795
|
+
this.requestService.addConfirmation(id, url || _constants3.EXTENSION_REQUEST_URL, 'evmWatchTransactionRequest', payload, {}).then(async _ref8 => {
|
|
751
796
|
let {
|
|
752
797
|
isApproved,
|
|
753
798
|
payload
|
|
754
|
-
} =
|
|
799
|
+
} = _ref8;
|
|
755
800
|
if (isApproved) {
|
|
756
801
|
if (!payload) {
|
|
757
802
|
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, 'Bad signature');
|
|
@@ -812,11 +857,11 @@ class TransactionService {
|
|
|
812
857
|
emitter.emit('error', eventData);
|
|
813
858
|
});
|
|
814
859
|
} else {
|
|
815
|
-
this.requestService.addConfirmation(id, url || _constants3.EXTENSION_REQUEST_URL, 'evmSendTransactionRequest', payload, {}).then(async
|
|
860
|
+
this.requestService.addConfirmation(id, url || _constants3.EXTENSION_REQUEST_URL, 'evmSendTransactionRequest', payload, {}).then(async _ref9 => {
|
|
816
861
|
let {
|
|
817
862
|
isApproved,
|
|
818
863
|
payload
|
|
819
|
-
} =
|
|
864
|
+
} = _ref9;
|
|
820
865
|
if (isApproved) {
|
|
821
866
|
let signedTransaction;
|
|
822
867
|
if (!payload) {
|
|
@@ -872,14 +917,14 @@ class TransactionService {
|
|
|
872
917
|
}
|
|
873
918
|
return emitter;
|
|
874
919
|
}
|
|
875
|
-
signAndSendSubstrateTransaction(
|
|
920
|
+
signAndSendSubstrateTransaction(_ref10) {
|
|
876
921
|
let {
|
|
877
922
|
address,
|
|
878
923
|
chain,
|
|
879
924
|
id,
|
|
880
925
|
transaction,
|
|
881
926
|
url
|
|
882
|
-
} =
|
|
927
|
+
} = _ref10;
|
|
883
928
|
const emitter = new _eventemitter.default();
|
|
884
929
|
const eventData = {
|
|
885
930
|
id,
|
|
@@ -925,20 +970,20 @@ class TransactionService {
|
|
|
925
970
|
eventData.extrinsicHash = txState.txHash.toHex();
|
|
926
971
|
eventData.eventLogs = txState.events;
|
|
927
972
|
// TODO: push block hash and block number into eventData
|
|
928
|
-
txState.events.filter(
|
|
973
|
+
txState.events.filter(_ref11 => {
|
|
929
974
|
let {
|
|
930
975
|
event: {
|
|
931
976
|
section
|
|
932
977
|
}
|
|
933
|
-
} =
|
|
978
|
+
} = _ref11;
|
|
934
979
|
return section === 'system';
|
|
935
|
-
}).forEach(
|
|
980
|
+
}).forEach(_ref12 => {
|
|
936
981
|
let {
|
|
937
982
|
event: {
|
|
938
983
|
data: [error],
|
|
939
984
|
method
|
|
940
985
|
}
|
|
941
|
-
} =
|
|
986
|
+
} = _ref12;
|
|
942
987
|
if (method === 'ExtrinsicFailed') {
|
|
943
988
|
eventData.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.SEND_TRANSACTION_FAILED, error.toString()));
|
|
944
989
|
emitter.emit('error', eventData);
|
|
@@ -963,7 +1008,7 @@ class TransactionService {
|
|
|
963
1008
|
const transaction = this.getTransaction(eventData.id);
|
|
964
1009
|
if (transaction.status !== _KoniTypes.ExtrinsicStatus.SUCCESS && transaction.status !== _KoniTypes.ExtrinsicStatus.FAIL) {
|
|
965
1010
|
eventData.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.TIMEOUT, (0, _i18next.t)('Transaction timeout')));
|
|
966
|
-
emitter.emit('
|
|
1011
|
+
emitter.emit('timeout', eventData);
|
|
967
1012
|
clearTimeout(timeout);
|
|
968
1013
|
}
|
|
969
1014
|
}, _constants4.TRANSACTION_TIMEOUT);
|