@subwallet/extension-base 1.1.35-0 → 1.1.35-beta.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 +111 -69
- package/background/KoniTypes.js +19 -13
- package/background/errors/TransactionError.js +9 -0
- package/cjs/background/KoniTypes.js +20 -16
- package/cjs/background/errors/TransactionError.js +9 -0
- package/cjs/constants/index.js +19 -4
- package/cjs/koni/api/dotsama/balance.js +464 -0
- package/cjs/koni/api/nft/config.js +33 -23
- package/cjs/koni/api/nft/index.js +14 -0
- package/cjs/koni/api/nft/nft.js +1 -22
- package/cjs/koni/api/nft/ordinal_nft/constants.js +21 -0
- package/cjs/koni/api/nft/ordinal_nft/index.js +121 -0
- package/cjs/koni/api/nft/ordinal_nft/utils.js +41 -0
- package/cjs/koni/api/staking/bonding/amplitude.js +19 -16
- package/cjs/koni/api/staking/bonding/astar.js +11 -10
- package/cjs/koni/api/staking/bonding/index.js +4 -1
- package/cjs/koni/api/staking/bonding/paraChain.js +25 -23
- package/cjs/koni/api/staking/bonding/relayChain.js +48 -45
- package/cjs/koni/api/staking/bonding/utils.js +104 -86
- package/cjs/koni/api/staking/index.js +6 -5
- package/cjs/koni/api/staking/paraChain.js +6 -5
- package/cjs/koni/api/staking/relayChain.js +3 -2
- package/cjs/koni/api/yield/helper/utils.js +46 -0
- package/cjs/koni/background/cron.js +3 -21
- package/cjs/koni/background/handlers/Extension.js +368 -69
- package/cjs/koni/background/handlers/State.js +18 -12
- package/cjs/koni/background/handlers/index.js +4 -2
- package/cjs/koni/background/subscription.js +7 -104
- package/cjs/services/campaign-service/index.js +9 -6
- package/cjs/services/chain-service/constants.js +1 -16
- package/cjs/services/chain-service/index.js +6 -2
- package/cjs/services/chain-service/utils.js +7 -1
- package/cjs/services/earning-service/constants/chains.js +30 -0
- package/cjs/services/earning-service/constants/index.js +27 -0
- package/cjs/services/earning-service/constants/step.js +18 -0
- package/cjs/services/earning-service/handlers/base.js +262 -0
- package/cjs/services/earning-service/handlers/index.js +60 -0
- package/cjs/services/earning-service/handlers/lending/base.js +81 -0
- package/cjs/services/earning-service/handlers/lending/index.js +13 -0
- package/cjs/services/earning-service/handlers/lending/interlay.js +192 -0
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +240 -0
- package/cjs/services/earning-service/handlers/liquid-staking/base.js +97 -0
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +140 -0
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +298 -0
- package/cjs/services/earning-service/handlers/liquid-staking/index.js +34 -0
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +227 -0
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +404 -0
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +434 -0
- package/cjs/services/earning-service/handlers/native-staking/astar.js +466 -0
- package/cjs/services/earning-service/handlers/native-staking/base-para.js +146 -0
- package/cjs/services/earning-service/handlers/native-staking/base.js +161 -0
- package/cjs/services/earning-service/handlers/native-staking/index.js +34 -0
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +390 -0
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +567 -0
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +566 -0
- package/cjs/services/earning-service/handlers/special.js +493 -0
- package/cjs/services/earning-service/service.js +733 -0
- package/cjs/services/earning-service/utils/index.js +128 -0
- package/cjs/services/event-service/index.js +5 -0
- package/cjs/services/keyring-service/index.js +14 -2
- package/cjs/services/migration-service/scripts/DeleteEarningData.js +21 -0
- package/cjs/services/migration-service/scripts/EnableEarningChains.js +21 -0
- package/cjs/services/migration-service/scripts/MigrateEthProvider.js +17 -0
- package/cjs/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
- package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +17 -0
- package/cjs/services/migration-service/scripts/MigrateProvider.js +29 -0
- package/cjs/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
- package/cjs/services/migration-service/scripts/databases/MigrateEarningHistory.js +21 -0
- package/cjs/services/migration-service/scripts/databases/MigrateEarningVersion.js +21 -0
- package/cjs/services/migration-service/scripts/index.js +6 -1
- package/cjs/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +149 -0
- package/cjs/services/mint-campaign-service/campaigns/index.js +13 -0
- package/cjs/services/mint-campaign-service/constants.js +11 -0
- package/cjs/services/mint-campaign-service/index.js +18 -0
- package/cjs/services/notification-service/NotificationService.js +3 -2
- package/cjs/services/request-service/handler/PopupHandler.js +2 -3
- package/cjs/services/storage-service/DatabaseService.js +63 -0
- package/cjs/services/storage-service/databases/index.js +4 -0
- package/cjs/services/storage-service/db-stores/NominatorMetadata.js +3 -3
- package/cjs/services/storage-service/db-stores/YieldPoolStore.js +36 -0
- package/cjs/services/storage-service/db-stores/YieldPositionStore.js +71 -0
- package/cjs/services/storage-service/index.js +241 -0
- package/cjs/services/subscan-service/index.js +16 -0
- package/cjs/services/transaction-service/event-parser/index.js +58 -0
- package/cjs/services/transaction-service/helpers/index.js +3 -1
- package/cjs/services/transaction-service/index.js +249 -75
- package/cjs/services/transaction-service/utils.js +1 -0
- package/cjs/types/campaigns/index.js +16 -0
- package/cjs/types/campaigns/unlock-dot.js +1 -0
- package/cjs/types/index.js +44 -0
- package/cjs/types/ordinal.js +1 -0
- package/cjs/types/transaction.js +1 -0
- package/cjs/types/yield/actions/index.js +27 -0
- package/cjs/types/yield/actions/join/index.js +38 -0
- package/cjs/types/yield/actions/join/step.js +47 -0
- package/cjs/types/yield/actions/join/submit.js +1 -0
- package/cjs/types/yield/actions/join/validate.js +16 -0
- package/cjs/types/yield/actions/others.js +1 -0
- package/cjs/types/yield/index.js +27 -0
- package/cjs/types/yield/info/account/index.js +49 -0
- package/cjs/types/yield/info/account/info.js +1 -0
- package/cjs/types/yield/info/account/reward.js +1 -0
- package/cjs/types/yield/info/account/target.js +32 -0
- package/cjs/types/yield/info/account/unstake.js +27 -0
- package/cjs/types/yield/info/base.js +41 -0
- package/cjs/types/yield/info/chain/index.js +27 -0
- package/cjs/types/yield/info/chain/info.js +1 -0
- package/cjs/types/yield/info/chain/target.js +1 -0
- package/cjs/types/yield/info/index.js +49 -0
- package/cjs/types/yield/info/pallet.js +15 -0
- package/cjs/types.js +1 -0
- package/cjs/utils/address.js +34 -0
- package/cjs/utils/environment.js +23 -28
- package/cjs/utils/fetchStaticCache.js +22 -0
- package/cjs/utils/fetchStaticData.js +2 -1
- package/cjs/utils/index.js +94 -10
- package/cjs/utils/keyring.js +57 -0
- package/cjs/utils/mv3.js +14 -0
- package/cjs/utils/number.js +6 -2
- package/cjs/utils/object.js +12 -0
- package/constants/index.d.ts +6 -1
- package/constants/index.js +6 -1
- package/koni/api/nft/config.js +33 -23
- package/koni/api/nft/index.js +15 -1
- package/koni/api/nft/nft.js +2 -23
- package/koni/api/nft/ordinal_nft/constants.d.ts +9 -0
- package/koni/api/nft/ordinal_nft/constants.js +12 -0
- package/koni/api/nft/ordinal_nft/index.d.ts +8 -0
- package/koni/api/nft/ordinal_nft/index.js +114 -0
- package/koni/api/nft/ordinal_nft/utils.d.ts +2 -0
- package/koni/api/nft/ordinal_nft/utils.js +33 -0
- package/koni/api/staking/bonding/amplitude.js +13 -10
- package/koni/api/staking/bonding/astar.js +9 -8
- package/koni/api/staking/bonding/index.d.ts +1 -1
- package/koni/api/staking/bonding/index.js +5 -1
- package/koni/api/staking/bonding/paraChain.js +12 -10
- package/koni/api/staking/bonding/relayChain.d.ts +2 -2
- package/koni/api/staking/bonding/relayChain.js +33 -30
- package/koni/api/staking/bonding/utils.d.ts +15 -38
- package/koni/api/staking/bonding/utils.js +85 -69
- package/koni/api/staking/index.js +2 -1
- package/koni/api/staking/paraChain.js +7 -6
- package/koni/api/staking/relayChain.js +4 -3
- package/koni/api/yield/helper/utils.d.ts +10 -0
- package/koni/api/yield/helper/utils.js +32 -0
- package/koni/background/cron.d.ts +0 -4
- package/koni/background/cron.js +4 -22
- package/koni/background/handlers/Extension.d.ts +17 -1
- package/koni/background/handlers/Extension.js +327 -30
- package/koni/background/handlers/State.d.ts +6 -1
- package/koni/background/handlers/State.js +17 -12
- package/koni/background/handlers/index.js +4 -2
- package/koni/background/subscription.d.ts +1 -6
- package/koni/background/subscription.js +8 -104
- package/package.json +326 -3
- package/services/campaign-service/index.js +9 -6
- package/services/chain-service/constants.d.ts +0 -12
- package/services/chain-service/constants.js +0 -14
- package/services/chain-service/index.js +6 -2
- package/services/chain-service/utils.d.ts +1 -0
- package/services/chain-service/utils.js +5 -1
- package/services/earning-service/constants/abis/compound_finance_v2_abi.json +1235 -0
- package/services/earning-service/constants/abis/st_liquid_token_abi.json +1355 -0
- package/services/earning-service/constants/chains.d.ts +15 -0
- package/services/earning-service/constants/chains.js +22 -0
- package/services/earning-service/constants/index.d.ts +2 -0
- package/services/earning-service/constants/index.js +5 -0
- package/services/earning-service/constants/step.d.ts +3 -0
- package/services/earning-service/constants/step.js +10 -0
- package/services/earning-service/handlers/base.d.ts +113 -0
- package/services/earning-service/handlers/base.js +256 -0
- package/services/earning-service/handlers/index.d.ts +5 -0
- package/services/earning-service/handlers/index.js +8 -0
- package/services/earning-service/handlers/lending/base.d.ts +8 -0
- package/services/earning-service/handlers/lending/base.js +73 -0
- package/services/earning-service/handlers/lending/index.d.ts +1 -0
- package/services/earning-service/handlers/lending/index.js +4 -0
- package/services/earning-service/handlers/lending/interlay.d.ts +24 -0
- package/services/earning-service/handlers/lending/interlay.js +184 -0
- package/services/earning-service/handlers/liquid-staking/acala.d.ts +27 -0
- package/services/earning-service/handlers/liquid-staking/acala.js +232 -0
- package/services/earning-service/handlers/liquid-staking/base.d.ts +11 -0
- package/services/earning-service/handlers/liquid-staking/base.js +89 -0
- package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +46 -0
- package/services/earning-service/handlers/liquid-staking/bifrost.js +287 -0
- package/services/earning-service/handlers/liquid-staking/index.d.ts +4 -0
- package/services/earning-service/handlers/liquid-staking/index.js +7 -0
- package/services/earning-service/handlers/liquid-staking/parallel.d.ts +26 -0
- package/services/earning-service/handlers/liquid-staking/parallel.js +219 -0
- package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +34 -0
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +394 -0
- package/services/earning-service/handlers/native-staking/amplitude.d.ts +22 -0
- package/services/earning-service/handlers/native-staking/amplitude.js +425 -0
- package/services/earning-service/handlers/native-staking/astar.d.ts +19 -0
- package/services/earning-service/handlers/native-staking/astar.js +456 -0
- package/services/earning-service/handlers/native-staking/base-para.d.ts +11 -0
- package/services/earning-service/handlers/native-staking/base-para.js +138 -0
- package/services/earning-service/handlers/native-staking/base.d.ts +21 -0
- package/services/earning-service/handlers/native-staking/base.js +152 -0
- package/services/earning-service/handlers/native-staking/index.d.ts +4 -0
- package/services/earning-service/handlers/native-staking/index.js +7 -0
- package/services/earning-service/handlers/native-staking/para-chain.d.ts +15 -0
- package/services/earning-service/handlers/native-staking/para-chain.js +382 -0
- package/services/earning-service/handlers/native-staking/relay-chain.d.ts +21 -0
- package/services/earning-service/handlers/native-staking/relay-chain.js +558 -0
- package/services/earning-service/handlers/nomination-pool/index.d.ts +36 -0
- package/services/earning-service/handlers/nomination-pool/index.js +556 -0
- package/services/earning-service/handlers/special.d.ts +64 -0
- package/services/earning-service/handlers/special.js +485 -0
- package/services/earning-service/service.d.ts +94 -0
- package/services/earning-service/service.js +722 -0
- package/services/earning-service/utils/index.d.ts +18 -0
- package/services/earning-service/utils/index.js +112 -0
- package/services/event-service/index.d.ts +2 -0
- package/services/event-service/index.js +5 -0
- package/services/event-service/types.d.ts +9 -0
- package/services/keyring-service/index.d.ts +2 -1
- package/services/keyring-service/index.js +14 -2
- package/services/migration-service/scripts/DeleteEarningData.d.ts +4 -0
- package/services/migration-service/scripts/DeleteEarningData.js +13 -0
- package/services/migration-service/scripts/EnableEarningChains.d.ts +4 -0
- package/services/migration-service/scripts/EnableEarningChains.js +13 -0
- package/services/migration-service/scripts/MigrateLedgerAccount.js +1 -1
- package/services/migration-service/scripts/MigrateTransactionHistory.js +1 -1
- package/services/migration-service/scripts/databases/MigrateEarningHistory.d.ts +4 -0
- package/services/migration-service/scripts/databases/MigrateEarningHistory.js +13 -0
- package/services/migration-service/scripts/databases/MigrateEarningVersion.d.ts +4 -0
- package/services/migration-service/scripts/databases/MigrateEarningVersion.js +13 -0
- package/services/migration-service/scripts/index.js +6 -1
- package/services/mint-campaign-service/campaigns/UnlockDotCampaign.d.ts +13 -0
- package/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +139 -0
- package/services/mint-campaign-service/campaigns/index.d.ts +1 -0
- package/services/mint-campaign-service/campaigns/index.js +4 -0
- package/services/mint-campaign-service/constants.d.ts +1 -0
- package/services/mint-campaign-service/constants.js +4 -0
- package/services/mint-campaign-service/index.d.ts +7 -0
- package/services/mint-campaign-service/index.js +11 -0
- package/services/notification-service/NotificationService.js +3 -2
- package/services/request-service/handler/PopupHandler.js +3 -4
- package/services/storage-service/DatabaseService.d.ts +22 -1
- package/services/storage-service/DatabaseService.js +63 -0
- package/services/storage-service/databases/index.d.ts +3 -1
- package/services/storage-service/databases/index.js +4 -0
- package/services/storage-service/db-stores/NominatorMetadata.js +3 -3
- package/services/storage-service/db-stores/YieldPoolStore.d.ts +10 -0
- package/services/storage-service/db-stores/YieldPoolStore.js +28 -0
- package/services/storage-service/db-stores/YieldPositionStore.d.ts +11 -0
- package/services/storage-service/db-stores/YieldPositionStore.js +63 -0
- package/services/subscan-service/index.d.ts +3 -2
- package/services/subscan-service/index.js +15 -0
- package/services/subscan-service/types.d.ts +20 -0
- package/services/transaction-service/event-parser/index.d.ts +3 -1
- package/services/transaction-service/event-parser/index.js +57 -1
- package/services/transaction-service/helpers/index.js +3 -1
- package/services/transaction-service/index.d.ts +6 -13
- package/services/transaction-service/index.js +247 -73
- package/services/transaction-service/types.d.ts +2 -0
- package/services/transaction-service/utils.js +1 -0
- package/types/campaigns/index.d.ts +1 -0
- package/types/campaigns/index.js +4 -0
- package/types/campaigns/unlock-dot.d.ts +71 -0
- package/types/campaigns/unlock-dot.js +1 -0
- package/types/index.d.ts +5 -0
- package/types/index.js +5 -1
- package/types/ordinal.d.ts +69 -0
- package/types/ordinal.js +1 -0
- package/types/transaction.d.ts +3 -0
- package/types/transaction.js +1 -0
- package/types/yield/actions/index.d.ts +2 -0
- package/types/yield/actions/index.js +5 -0
- package/types/yield/actions/join/index.d.ts +3 -0
- package/types/yield/actions/join/index.js +6 -0
- package/types/yield/actions/join/step.d.ts +95 -0
- package/types/yield/actions/join/step.js +46 -0
- package/types/yield/actions/join/submit.d.ts +58 -0
- package/types/yield/actions/join/submit.js +1 -0
- package/types/yield/actions/join/validate.d.ts +18 -0
- package/types/yield/actions/join/validate.js +10 -0
- package/types/yield/actions/others.d.ts +85 -0
- package/types/yield/actions/others.js +1 -0
- package/types/yield/index.d.ts +2 -0
- package/types/yield/index.js +5 -0
- package/types/yield/info/account/index.d.ts +4 -0
- package/types/yield/info/account/index.js +7 -0
- package/types/yield/info/account/info.d.ts +92 -0
- package/types/yield/info/account/info.js +1 -0
- package/types/yield/info/account/reward.d.ts +47 -0
- package/types/yield/info/account/reward.js +1 -0
- package/types/yield/info/account/target.d.ts +43 -0
- package/types/yield/info/account/target.js +27 -0
- package/types/yield/info/account/unstake.d.ts +31 -0
- package/types/yield/info/account/unstake.js +22 -0
- package/types/yield/info/base.d.ts +45 -0
- package/types/yield/info/base.js +36 -0
- package/types/yield/info/chain/index.d.ts +2 -0
- package/types/yield/info/chain/index.js +5 -0
- package/types/yield/info/chain/info.d.ts +252 -0
- package/types/yield/info/chain/info.js +1 -0
- package/types/yield/info/chain/target.d.ts +37 -0
- package/types/yield/info/chain/target.js +1 -0
- package/types/yield/info/index.d.ts +4 -0
- package/types/yield/info/index.js +7 -0
- package/types/yield/info/pallet.d.ts +143 -0
- package/types/yield/info/pallet.js +9 -0
- package/utils/environment.d.ts +9 -2
- package/utils/environment.js +14 -26
- package/utils/fetchStaticCache.d.ts +1 -0
- package/utils/fetchStaticCache.js +14 -0
- package/utils/fetchStaticData.js +2 -1
- package/utils/index.d.ts +5 -1
- package/utils/index.js +53 -3
- package/utils/mv3.d.ts +2 -0
- package/utils/mv3.js +6 -0
- package/utils/number.d.ts +2 -1
- package/utils/number.js +2 -1
- package/utils/object.d.ts +1 -0
- package/utils/object.js +6 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { ORDINAL_COLLECTION } from '@subwallet/extension-base/constants';
|
|
5
|
+
import { BaseNftApi } from '@subwallet/extension-base/koni/api/nft/nft';
|
|
6
|
+
import { fetchExtrinsicParams, fetchRemarkEvent } from '@subwallet/extension-base/koni/api/nft/ordinal_nft/utils';
|
|
7
|
+
import { state } from '@subwallet/extension-base/koni/background/handlers';
|
|
8
|
+
const parseParamData = (param, event, chain, address) => {
|
|
9
|
+
const ordinalData = JSON.parse(param.value);
|
|
10
|
+
if ('p' in ordinalData) {
|
|
11
|
+
const properties = {};
|
|
12
|
+
for (const [key, value] of Object.entries(ordinalData)) {
|
|
13
|
+
const _name = key.charAt(0).toUpperCase() + key.slice(1);
|
|
14
|
+
properties[_name] = {
|
|
15
|
+
value: value
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
properties['Block number'] = {
|
|
19
|
+
value: event.extrinsic_index.split('-')[0]
|
|
20
|
+
};
|
|
21
|
+
properties.Timestamp = {
|
|
22
|
+
value: event.block_timestamp
|
|
23
|
+
};
|
|
24
|
+
const op = ordinalData.op.charAt(0).toUpperCase() + ordinalData.op.slice(1);
|
|
25
|
+
const nameParams = [op];
|
|
26
|
+
if (ordinalData.amt !== undefined) {
|
|
27
|
+
nameParams.push(ordinalData.amt);
|
|
28
|
+
}
|
|
29
|
+
nameParams.push(ordinalData.tick);
|
|
30
|
+
const name = nameParams.join(' ');
|
|
31
|
+
return {
|
|
32
|
+
chain: chain,
|
|
33
|
+
collectionId: ORDINAL_COLLECTION,
|
|
34
|
+
id: event.extrinsic_hash,
|
|
35
|
+
description: JSON.stringify(ordinalData),
|
|
36
|
+
name,
|
|
37
|
+
owner: address,
|
|
38
|
+
properties: properties
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
};
|
|
43
|
+
export default class OrdinalNftApi extends BaseNftApi {
|
|
44
|
+
constructor(addresses, chain, subscanChain) {
|
|
45
|
+
super(chain, undefined, addresses);
|
|
46
|
+
this.subscanChain = subscanChain;
|
|
47
|
+
}
|
|
48
|
+
async handleNft(address, handleNftParams) {
|
|
49
|
+
const events = await state.subscanService.addRequest(async () => {
|
|
50
|
+
return await fetchRemarkEvent(this.subscanChain, address);
|
|
51
|
+
});
|
|
52
|
+
if (events && events.length) {
|
|
53
|
+
const extrinsicIds = events.map(data => data.extrinsic_index);
|
|
54
|
+
const extrinsicParams = await state.subscanService.addRequest(async () => {
|
|
55
|
+
return await fetchExtrinsicParams(this.subscanChain, extrinsicIds);
|
|
56
|
+
});
|
|
57
|
+
const items = [];
|
|
58
|
+
for (const data of extrinsicParams) {
|
|
59
|
+
const {
|
|
60
|
+
extrinsic_index: extrinsicIndex,
|
|
61
|
+
params
|
|
62
|
+
} = data;
|
|
63
|
+
const event = events.find(item => item.extrinsic_index === extrinsicIndex);
|
|
64
|
+
if (params.length === 1 && event) {
|
|
65
|
+
const [param] = params;
|
|
66
|
+
if (param.name === 'remark') {
|
|
67
|
+
const childParam = {
|
|
68
|
+
name: param.name,
|
|
69
|
+
type: param.type,
|
|
70
|
+
value: param.value
|
|
71
|
+
};
|
|
72
|
+
const item = parseParamData(childParam, event, this.chain, address);
|
|
73
|
+
if (item) {
|
|
74
|
+
items.push(item);
|
|
75
|
+
}
|
|
76
|
+
} else if (param.name === 'calls') {
|
|
77
|
+
const children = param.value;
|
|
78
|
+
for (const child of children) {
|
|
79
|
+
if (child.call_module === 'System' && child.call_name === 'remark_with_event') {
|
|
80
|
+
for (const childParam of child.params) {
|
|
81
|
+
const item = parseParamData(childParam, event, this.chain, address);
|
|
82
|
+
if (item) {
|
|
83
|
+
items.push(item);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (items.length) {
|
|
92
|
+
// handleNftParams.updateCollection(this.chain, {
|
|
93
|
+
// chain: this.chain,
|
|
94
|
+
// collectionId: ORDINAL_COLLECTION
|
|
95
|
+
// });
|
|
96
|
+
|
|
97
|
+
for (const item of items) {
|
|
98
|
+
handleNftParams.updateItem(this.chain, item, address);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async handleNfts(params) {
|
|
104
|
+
await Promise.all(this.addresses.map(address => this.handleNft(address, params)));
|
|
105
|
+
}
|
|
106
|
+
async fetchNfts(params) {
|
|
107
|
+
try {
|
|
108
|
+
await this.handleNfts(params);
|
|
109
|
+
} catch (e) {
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
return 1;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const fetchRemarkEvent: (chain: string, address: string) => Promise<import("@subwallet/extension-base/types").SubscanEventBaseItemData[]>;
|
|
2
|
+
export declare const fetchExtrinsicParams: (chain: string, extrinsicIndexes: string[]) => Promise<import("@subwallet/extension-base/types").SubscanExtrinsicParam[]>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { BASE_FETCH_ORDINAL_EVENT_DATA, GET_EVENT_LIST_API, GET_EXTRINSIC_PARAMS_API } from "./constants.js";
|
|
5
|
+
export const fetchRemarkEvent = async (chain, address) => {
|
|
6
|
+
const params = {
|
|
7
|
+
...BASE_FETCH_ORDINAL_EVENT_DATA,
|
|
8
|
+
address
|
|
9
|
+
};
|
|
10
|
+
const response = await fetch(GET_EVENT_LIST_API.replace('{{chain}}', chain), {
|
|
11
|
+
method: 'POST',
|
|
12
|
+
headers: {
|
|
13
|
+
'Content-Type': 'application/json'
|
|
14
|
+
},
|
|
15
|
+
body: JSON.stringify(params)
|
|
16
|
+
});
|
|
17
|
+
const data = await response.json();
|
|
18
|
+
return data.data.events;
|
|
19
|
+
};
|
|
20
|
+
export const fetchExtrinsicParams = async (chain, extrinsicIndexes) => {
|
|
21
|
+
const params = {
|
|
22
|
+
extrinsic_index: extrinsicIndexes
|
|
23
|
+
};
|
|
24
|
+
const response = await fetch(GET_EXTRINSIC_PARAMS_API.replace('{{chain}}', chain), {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: {
|
|
27
|
+
'Content-Type': 'application/json'
|
|
28
|
+
},
|
|
29
|
+
body: JSON.stringify(params)
|
|
30
|
+
});
|
|
31
|
+
const data = await response.json();
|
|
32
|
+
return data.data;
|
|
33
|
+
};
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import { getBondedValidators,
|
|
6
|
-
import {
|
|
4
|
+
import { StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
|
+
import { getBondedValidators, getEarningStatusByNominations, isUnstakeAll } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
|
|
6
|
+
import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
7
|
+
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
|
|
8
|
+
import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
|
|
9
|
+
import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
|
|
7
10
|
import { parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
|
|
8
11
|
import { BN, BN_ZERO } from '@polkadot/util';
|
|
9
12
|
import { isEthereumAddress } from '@polkadot/util-crypto';
|
|
@@ -69,9 +72,9 @@ export async function subscribeAmplitudeNominatorMetadata(chainInfo, address, su
|
|
|
69
72
|
const [identity] = identities[i];
|
|
70
73
|
activeStake = delegate.amount.toString();
|
|
71
74
|
const bnActiveStake = new BN(activeStake);
|
|
72
|
-
let delegationStatus =
|
|
75
|
+
let delegationStatus = EarningStatus.NOT_EARNING;
|
|
73
76
|
if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegatorStake))) {
|
|
74
|
-
delegationStatus =
|
|
77
|
+
delegationStatus = EarningStatus.EARNING_REWARD;
|
|
75
78
|
}
|
|
76
79
|
nominationList.push({
|
|
77
80
|
status: delegationStatus,
|
|
@@ -105,7 +108,7 @@ export async function subscribeAmplitudeNominatorMetadata(chainInfo, address, su
|
|
|
105
108
|
}
|
|
106
109
|
}
|
|
107
110
|
}
|
|
108
|
-
const stakingStatus =
|
|
111
|
+
const stakingStatus = getEarningStatusByNominations(new BN(activeStake), nominationList);
|
|
109
112
|
return {
|
|
110
113
|
chain: chainInfo.slug,
|
|
111
114
|
type: StakingType.NOMINATED,
|
|
@@ -137,7 +140,7 @@ export async function getAmplitudeNominatorMetadata(chainInfo, address, substrat
|
|
|
137
140
|
chain: chainInfo.slug,
|
|
138
141
|
type: StakingType.NOMINATED,
|
|
139
142
|
address,
|
|
140
|
-
status:
|
|
143
|
+
status: EarningStatus.NOT_STAKING,
|
|
141
144
|
activeStake: '0',
|
|
142
145
|
nominations: [],
|
|
143
146
|
unstakings: []
|
|
@@ -149,9 +152,9 @@ export async function getAmplitudeNominatorMetadata(chainInfo, address, substrat
|
|
|
149
152
|
const [identity] = await parseIdentity(substrateApi, delegatorState.owner);
|
|
150
153
|
activeStake = delegatorState.amount.toString();
|
|
151
154
|
const bnActiveStake = new BN(activeStake);
|
|
152
|
-
let delegationStatus =
|
|
155
|
+
let delegationStatus = EarningStatus.NOT_EARNING;
|
|
153
156
|
if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegatorStake))) {
|
|
154
|
-
delegationStatus =
|
|
157
|
+
delegationStatus = EarningStatus.EARNING_REWARD;
|
|
155
158
|
}
|
|
156
159
|
nominationList.push({
|
|
157
160
|
status: delegationStatus,
|
|
@@ -187,7 +190,7 @@ export async function getAmplitudeNominatorMetadata(chainInfo, address, substrat
|
|
|
187
190
|
if (nominationList.length === 0 && unstakingList.length === 0) {
|
|
188
191
|
return;
|
|
189
192
|
}
|
|
190
|
-
const stakingStatus =
|
|
193
|
+
const stakingStatus = getEarningStatusByNominations(new BN(activeStake), nominationList);
|
|
191
194
|
return {
|
|
192
195
|
chain,
|
|
193
196
|
type: StakingType.NOMINATED,
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
|
+
import { getEarningStatusByNominations } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
|
|
6
6
|
import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
7
|
+
import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
|
|
7
8
|
import { isUrl, parseRawNumber } from '@subwallet/extension-base/utils';
|
|
8
9
|
import fetch from 'cross-fetch';
|
|
9
10
|
import { BN, BN_ZERO } from '@polkadot/util';
|
|
@@ -99,7 +100,7 @@ export async function subscribeAstarNominatorMetadata(chainInfo, address, substr
|
|
|
99
100
|
const currentStake = stakeList.slice(-1)[0].staked.toString() || '0';
|
|
100
101
|
const bnCurrentStake = new BN(currentStake);
|
|
101
102
|
if (bnCurrentStake.gt(BN_ZERO)) {
|
|
102
|
-
const dappStakingStatus = bnCurrentStake.gt(BN_ZERO) && bnCurrentStake.gte(new BN(minDelegatorStake)) ?
|
|
103
|
+
const dappStakingStatus = bnCurrentStake.gt(BN_ZERO) && bnCurrentStake.gte(new BN(minDelegatorStake)) ? EarningStatus.EARNING_REWARD : EarningStatus.NOT_EARNING;
|
|
103
104
|
bnTotalActiveStake = bnTotalActiveStake.add(bnCurrentStake);
|
|
104
105
|
const dappInfo = dAppInfoMap[dappAddress];
|
|
105
106
|
nominationList.push({
|
|
@@ -134,13 +135,13 @@ export async function subscribeAstarNominatorMetadata(chainInfo, address, substr
|
|
|
134
135
|
chain: chainInfo.slug,
|
|
135
136
|
type: StakingType.NOMINATED,
|
|
136
137
|
address,
|
|
137
|
-
status:
|
|
138
|
+
status: EarningStatus.NOT_STAKING,
|
|
138
139
|
activeStake: '0',
|
|
139
140
|
nominations: [],
|
|
140
141
|
unstakings: []
|
|
141
142
|
};
|
|
142
143
|
}
|
|
143
|
-
const stakingStatus =
|
|
144
|
+
const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
|
|
144
145
|
return {
|
|
145
146
|
chain: chainInfo.slug,
|
|
146
147
|
type: StakingType.NOMINATED,
|
|
@@ -185,7 +186,7 @@ export async function getAstarNominatorMetadata(chainInfo, address, substrateApi
|
|
|
185
186
|
const currentStake = stakeList.slice(-1)[0].staked.toString() || '0';
|
|
186
187
|
const bnCurrentStake = new BN(currentStake);
|
|
187
188
|
if (bnCurrentStake.gt(BN_ZERO)) {
|
|
188
|
-
const dappStakingStatus = bnCurrentStake.gt(BN_ZERO) && bnCurrentStake.gte(new BN(minDelegatorStake)) ?
|
|
189
|
+
const dappStakingStatus = bnCurrentStake.gt(BN_ZERO) && bnCurrentStake.gte(new BN(minDelegatorStake)) ? EarningStatus.EARNING_REWARD : EarningStatus.NOT_EARNING;
|
|
189
190
|
bnTotalActiveStake = bnTotalActiveStake.add(bnCurrentStake);
|
|
190
191
|
const dappInfo = dAppInfoMap[dappAddress];
|
|
191
192
|
nominationList.push({
|
|
@@ -220,13 +221,13 @@ export async function getAstarNominatorMetadata(chainInfo, address, substrateApi
|
|
|
220
221
|
chain: chainInfo.slug,
|
|
221
222
|
type: StakingType.NOMINATED,
|
|
222
223
|
address,
|
|
223
|
-
status:
|
|
224
|
+
status: EarningStatus.NOT_STAKING,
|
|
224
225
|
activeStake: '0',
|
|
225
226
|
nominations: [],
|
|
226
227
|
unstakings: []
|
|
227
228
|
};
|
|
228
229
|
}
|
|
229
|
-
const stakingStatus =
|
|
230
|
+
const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
|
|
230
231
|
return {
|
|
231
232
|
chain,
|
|
232
233
|
type: StakingType.NOMINATED,
|
|
@@ -11,7 +11,7 @@ export declare function getChainStakingMetadata(chainInfo: _ChainInfo, substrate
|
|
|
11
11
|
* */
|
|
12
12
|
export declare function getNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi): Promise<NominatorMetadata | undefined>;
|
|
13
13
|
export declare function getValidatorsInfo(networkKey: string, substrateApi: _SubstrateApi, decimals: number, chainStakingMetadata: ChainStakingMetadata): Promise<ValidatorInfo[]>;
|
|
14
|
-
export declare function getNominationPoolsInfo(chain: string, substrateApi: _SubstrateApi): Promise<import("
|
|
14
|
+
export declare function getNominationPoolsInfo(chain: string, substrateApi: _SubstrateApi): Promise<import("../../../../types").NominationPoolInfo[]>;
|
|
15
15
|
export declare function getBondingExtrinsic(chainInfo: _ChainInfo, amount: string, selectedValidators: ValidatorInfo[], substrateApi: _SubstrateApi, address: string, nominatorMetadata?: NominatorMetadata): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
|
|
16
16
|
export declare function getUnbondingExtrinsic(nominatorMetadata: NominatorMetadata, amount: string, chain: string, substrateApi: _SubstrateApi, selectedValidator?: string): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
|
|
17
17
|
export declare function getWithdrawalExtrinsic(substrateApi: _SubstrateApi, chain: string, nominatorMetadata: NominatorMetadata, validatorAddress?: string): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>;
|
|
@@ -6,10 +6,14 @@ import { getAmplitudeBondingExtrinsic, getAmplitudeClaimRewardExtrinsic, getAmpl
|
|
|
6
6
|
import { getAstarBondingExtrinsic, getAstarClaimRewardExtrinsic, getAstarDappsInfo, getAstarNominatorMetadata, getAstarStakingMetadata, getAstarUnbondingExtrinsic, getAstarWithdrawalExtrinsic, subscribeAstarStakingMetadata } from '@subwallet/extension-base/koni/api/staking/bonding/astar';
|
|
7
7
|
import { getParaBondingExtrinsic, getParaCancelWithdrawalExtrinsic, getParachainCollatorsInfo, getParaChainNominatorMetadata, getParaChainStakingMetadata, getParaUnbondingExtrinsic, getParaWithdrawalExtrinsic, subscribeParaChainStakingMetadata, validateParaChainBondingCondition, validateParaChainUnbondingCondition } from '@subwallet/extension-base/koni/api/staking/bonding/paraChain';
|
|
8
8
|
import { getPoolingClaimRewardExtrinsic, getPoolingWithdrawalExtrinsic, getRelayBondingExtrinsic, getRelayCancelWithdrawalExtrinsic, getRelayChainNominatorMetadata, getRelayChainStakingMetadata, getRelayPoolsInfo, getRelayUnbondingExtrinsic, getRelayValidatorsInfo, getRelayWithdrawalExtrinsic, subscribeRelayChainStakingMetadata, validateRelayBondingCondition, validateRelayUnbondingCondition } from '@subwallet/extension-base/koni/api/staking/bonding/relayChain';
|
|
9
|
-
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/
|
|
9
|
+
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
|
|
10
|
+
|
|
10
11
|
// all addresses must be converted to its chain format
|
|
11
12
|
|
|
12
13
|
export function validateUnbondingCondition(nominatorMetadata, amount, chain, chainStakingMetadata, selectedValidator) {
|
|
14
|
+
if (nominatorMetadata.type === StakingType.LIQUID_STAKING) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
13
17
|
if (_STAKING_CHAIN_GROUP.relay.includes(chain)) {
|
|
14
18
|
return validateRelayUnbondingCondition(amount, chainStakingMetadata, nominatorMetadata);
|
|
15
19
|
}
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
|
-
import { BasicTxErrorType,
|
|
6
|
-
import { getBondedValidators, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, getParaCurrentInflation,
|
|
5
|
+
import { BasicTxErrorType, StakingTxErrorType, StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
|
+
import { getBondedValidators, getEarningStatusByNominations, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, getParaCurrentInflation, isUnstakeAll } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
|
|
7
7
|
import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
8
8
|
import { _isChainEvmCompatible } from '@subwallet/extension-base/services/chain-service/utils';
|
|
9
|
+
import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
|
|
10
|
+
import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
|
|
9
11
|
import { isSameAddress, parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
|
|
10
12
|
import { BN, BN_ZERO } from '@polkadot/util';
|
|
11
13
|
import { isEthereumAddress } from '@polkadot/util-crypto';
|
|
@@ -46,7 +48,7 @@ export function validateParaChainBondingCondition(chainInfo, amount, selectedCol
|
|
|
46
48
|
const minStakeErrorMessage = getMinStakeErrorMessage(chainInfo, bnMinStake);
|
|
47
49
|
const maxValidatorErrorMessage = getMaxValidatorErrorMessage(chainInfo, chainStakingMetadata.maxValidatorPerNominator);
|
|
48
50
|
const existUnstakeErrorMessage = getExistUnstakeErrorMessage(chainInfo.slug, nominatorMetadata === null || nominatorMetadata === void 0 ? void 0 : nominatorMetadata.type, true);
|
|
49
|
-
if (!nominatorMetadata || nominatorMetadata.status ===
|
|
51
|
+
if (!nominatorMetadata || nominatorMetadata.status === EarningStatus.NOT_STAKING) {
|
|
50
52
|
if (!bnTotalStake.gte(bnMinStake)) {
|
|
51
53
|
errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
|
|
52
54
|
}
|
|
@@ -160,7 +162,7 @@ export async function subscribeParaChainNominatorMetadata(chainInfo, address, su
|
|
|
160
162
|
const minDelegation = collatorInfo === null || collatorInfo === void 0 ? void 0 : collatorInfo.lowestTopDelegationAmount.toString();
|
|
161
163
|
const delegationScheduledRequests = _delegationScheduledRequests.toPrimitive();
|
|
162
164
|
let hasUnstaking = false;
|
|
163
|
-
let delegationStatus =
|
|
165
|
+
let delegationStatus = EarningStatus.NOT_EARNING;
|
|
164
166
|
|
|
165
167
|
// parse unstaking info
|
|
166
168
|
if (delegationScheduledRequests) {
|
|
@@ -188,7 +190,7 @@ export async function subscribeParaChainNominatorMetadata(chainInfo, address, su
|
|
|
188
190
|
const bnUnstakeBalance = unstakingMap[delegation.owner] ? new BN(unstakingMap[delegation.owner].claimable) : BN_ZERO;
|
|
189
191
|
const bnActiveStake = bnStake.sub(bnUnstakeBalance);
|
|
190
192
|
if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegation))) {
|
|
191
|
-
delegationStatus =
|
|
193
|
+
delegationStatus = EarningStatus.EARNING_REWARD;
|
|
192
194
|
}
|
|
193
195
|
bnTotalActiveStake = bnTotalActiveStake.add(bnActiveStake);
|
|
194
196
|
nominationList.push({
|
|
@@ -209,7 +211,7 @@ export async function subscribeParaChainNominatorMetadata(chainInfo, address, su
|
|
|
209
211
|
// nomination.validatorMinStake = collatorInfo.lowestTopDelegationAmount.toString();
|
|
210
212
|
// }));
|
|
211
213
|
|
|
212
|
-
const stakingStatus =
|
|
214
|
+
const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
|
|
213
215
|
return {
|
|
214
216
|
chain: chainInfo.slug,
|
|
215
217
|
type: StakingType.NOMINATED,
|
|
@@ -239,7 +241,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
|
|
|
239
241
|
chain: chainInfo.slug,
|
|
240
242
|
type: StakingType.NOMINATED,
|
|
241
243
|
address,
|
|
242
|
-
status:
|
|
244
|
+
status: EarningStatus.NOT_STAKING,
|
|
243
245
|
activeStake: '0',
|
|
244
246
|
nominations: [],
|
|
245
247
|
unstakings: []
|
|
@@ -254,7 +256,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
|
|
|
254
256
|
const delegationScheduledRequests = _delegationScheduledRequests.toPrimitive();
|
|
255
257
|
const currentRound = roundInfo.current;
|
|
256
258
|
let hasUnstaking = false;
|
|
257
|
-
let delegationStatus =
|
|
259
|
+
let delegationStatus = EarningStatus.NOT_EARNING;
|
|
258
260
|
|
|
259
261
|
// parse unstaking info
|
|
260
262
|
if (delegationScheduledRequests) {
|
|
@@ -282,7 +284,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
|
|
|
282
284
|
const bnUnstakeBalance = unstakingMap[delegation.owner] ? new BN(unstakingMap[delegation.owner].claimable) : BN_ZERO;
|
|
283
285
|
const bnActiveStake = bnStake.sub(bnUnstakeBalance);
|
|
284
286
|
if (bnActiveStake.gt(BN_ZERO) && bnActiveStake.gte(new BN(minDelegation))) {
|
|
285
|
-
delegationStatus =
|
|
287
|
+
delegationStatus = EarningStatus.EARNING_REWARD;
|
|
286
288
|
}
|
|
287
289
|
bnTotalActiveStake = bnTotalActiveStake.add(bnActiveStake);
|
|
288
290
|
nominationList.push({
|
|
@@ -299,7 +301,7 @@ export async function getParaChainNominatorMetadata(chainInfo, address, substrat
|
|
|
299
301
|
const collatorInfo = _collatorInfo.toPrimitive();
|
|
300
302
|
nomination.validatorMinStake = collatorInfo.lowestTopDelegationAmount.toString();
|
|
301
303
|
}));
|
|
302
|
-
const stakingStatus =
|
|
304
|
+
const stakingStatus = getEarningStatusByNominations(bnTotalActiveStake, nominationList);
|
|
303
305
|
return {
|
|
304
306
|
chain,
|
|
305
307
|
type: StakingType.NOMINATED,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { _ChainInfo } from '@subwallet/chain-list/types';
|
|
2
2
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
3
|
-
import { ChainStakingMetadata,
|
|
4
|
-
import { PalletNominationPoolsPoolMember } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
|
|
3
|
+
import { ChainStakingMetadata, NominatorMetadata, UnstakingInfo, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
4
|
import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
|
|
5
|
+
import { NominationPoolInfo, PalletNominationPoolsPoolMember } from '@subwallet/extension-base/types';
|
|
6
6
|
import { Codec } from '@polkadot/types/types';
|
|
7
7
|
export interface PalletStakingNominations {
|
|
8
8
|
targets: string[];
|
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
|
-
import {
|
|
5
|
+
import { StakingTxErrorType, StakingType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
6
|
import { MAX_NOMINATIONS } from '@subwallet/extension-base/constants';
|
|
7
|
-
import { calculateAlephZeroValidatorReturn, calculateChainStakedReturn, calculateInflation, calculateTernoaValidatorReturn, calculateValidatorStakedReturn, getCommission, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage,
|
|
8
|
-
import { _EXPECTED_BLOCK_TIME,
|
|
7
|
+
import { calculateAlephZeroValidatorReturn, calculateChainStakedReturn, calculateInflation, calculateTernoaValidatorReturn, calculateValidatorStakedReturn, getCommission, getExistUnstakeErrorMessage, getMaxValidatorErrorMessage, getMinStakeErrorMessage, parsePoolStashAddress } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
|
|
8
|
+
import { _EXPECTED_BLOCK_TIME, _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
9
9
|
import { _getChainSubstrateAddressPrefix } from '@subwallet/extension-base/services/chain-service/utils';
|
|
10
|
+
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
|
|
11
|
+
import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
|
|
12
|
+
import { EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
|
|
10
13
|
import { reformatAddress } from '@subwallet/extension-base/utils';
|
|
11
14
|
import BigN from 'bignumber.js';
|
|
12
15
|
import { t } from 'i18next';
|
|
@@ -58,7 +61,7 @@ export function validateRelayBondingCondition(chainInfo, amount, selectedValidat
|
|
|
58
61
|
const bnMinStake = new BN(chainStakingMetadata.minStake);
|
|
59
62
|
const minStakeErrorMessage = getMinStakeErrorMessage(chainInfo, bnMinStake);
|
|
60
63
|
const maxValidatorErrorMessage = getMaxValidatorErrorMessage(chainInfo, chainStakingMetadata.maxValidatorPerNominator);
|
|
61
|
-
if (!nominatorMetadata || nominatorMetadata.status ===
|
|
64
|
+
if (!nominatorMetadata || nominatorMetadata.status === EarningStatus.NOT_STAKING) {
|
|
62
65
|
if (!bnTotalStake.gte(bnMinStake)) {
|
|
63
66
|
errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_STAKE, minStakeErrorMessage));
|
|
64
67
|
}
|
|
@@ -117,12 +120,12 @@ export function subscribeRelayChainStakingMetadata(chainInfo, substrateApi, call
|
|
|
117
120
|
});
|
|
118
121
|
}
|
|
119
122
|
export async function getRelayChainStakingMetadata(chainInfo, substrateApi) {
|
|
120
|
-
var _chainApi$api$query$a, _chainApi$api$query, _chainApi$api$query$s, _chainApi$api$query2, _chainApi$api$query2$, _chainApi$api$query3, _chainApi$api$query3$;
|
|
123
|
+
var _chainApi$api$consts$, _chainApi$api$consts$2, _chainApi$api$query$a, _chainApi$api$query, _chainApi$api$query$s, _chainApi$api$query2, _chainApi$api$query2$, _chainApi$api$query3, _chainApi$api$query3$;
|
|
121
124
|
const chain = chainInfo.slug;
|
|
122
125
|
const chainApi = await substrateApi.isReady;
|
|
123
126
|
const _era = await chainApi.api.query.staking.currentEra();
|
|
124
127
|
const currentEra = _era.toString();
|
|
125
|
-
const maxNominations = chainApi.api.consts.staking
|
|
128
|
+
const maxNominations = ((_chainApi$api$consts$ = chainApi.api.consts.staking) === null || _chainApi$api$consts$ === void 0 ? void 0 : (_chainApi$api$consts$2 = _chainApi$api$consts$.maxNominations) === null || _chainApi$api$consts$2 === void 0 ? void 0 : _chainApi$api$consts$2.toString()) || '16'; // TODO
|
|
126
129
|
const maxUnlockingChunks = chainApi.api.consts.staking.maxUnlockingChunks.toString();
|
|
127
130
|
const unlockingEras = chainApi.api.consts.staking.bondingDuration.toString();
|
|
128
131
|
const [_totalEraStake, _totalIssuance, _auctionCounter, _minimumActiveStake, _minNominatorBond, _minPoolJoin, _eraStakers] = await Promise.all([chainApi.api.query.staking.erasTotalStake(parseInt(currentEra)), chainApi.api.query.balances.totalIssuance(), (_chainApi$api$query$a = chainApi.api.query.auctions) === null || _chainApi$api$query$a === void 0 ? void 0 : _chainApi$api$query$a.auctionCounter(), ((_chainApi$api$query = chainApi.api.query) === null || _chainApi$api$query === void 0 ? void 0 : (_chainApi$api$query$s = _chainApi$api$query.staking) === null || _chainApi$api$query$s === void 0 ? void 0 : _chainApi$api$query$s.minimumActiveStake) && ((_chainApi$api$query2 = chainApi.api.query) === null || _chainApi$api$query2 === void 0 ? void 0 : (_chainApi$api$query2$ = _chainApi$api$query2.staking) === null || _chainApi$api$query2$ === void 0 ? void 0 : _chainApi$api$query2$.minimumActiveStake()), chainApi.api.query.staking.minNominatorBond(), (_chainApi$api$query3 = chainApi.api.query) === null || _chainApi$api$query3 === void 0 ? void 0 : (_chainApi$api$query3$ = _chainApi$api$query3.nominationPools) === null || _chainApi$api$query3$ === void 0 ? void 0 : _chainApi$api$query3$.minJoinBond(), chainApi.api.query.staking.erasStakers.entries(parseInt(currentEra))]);
|
|
@@ -193,7 +196,7 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
|
|
|
193
196
|
if (nominations) {
|
|
194
197
|
const validatorList = nominations.targets;
|
|
195
198
|
await Promise.all(validatorList.map(async validatorAddress => {
|
|
196
|
-
let nominationStatus =
|
|
199
|
+
let nominationStatus = EarningStatus.NOT_EARNING;
|
|
197
200
|
const [[identity], _eraStaker] = await Promise.all([parseIdentity(chainApi, validatorAddress), chainApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
|
|
198
201
|
const eraStaker = _eraStaker.toPrimitive();
|
|
199
202
|
const sortedNominators = eraStaker.others.sort((a, b) => {
|
|
@@ -204,10 +207,10 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
|
|
|
204
207
|
});
|
|
205
208
|
if (!topNominators.includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
206
209
|
// if nominator has target but not in nominator list
|
|
207
|
-
nominationStatus =
|
|
210
|
+
nominationStatus = EarningStatus.WAITING;
|
|
208
211
|
} else if (topNominators.slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator).includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
209
212
|
// if address in top nominators
|
|
210
|
-
nominationStatus =
|
|
213
|
+
nominationStatus = EarningStatus.EARNING_REWARD;
|
|
211
214
|
}
|
|
212
215
|
nominationList.push({
|
|
213
216
|
chain,
|
|
@@ -219,20 +222,20 @@ export async function subscribeRelayChainNominatorMetadata(chainInfo, address, s
|
|
|
219
222
|
}));
|
|
220
223
|
}
|
|
221
224
|
|
|
222
|
-
let stakingStatus =
|
|
225
|
+
let stakingStatus = EarningStatus.NOT_EARNING;
|
|
223
226
|
const bnActiveStake = new BN(activeStake);
|
|
224
227
|
let waitingNominationCount = 0;
|
|
225
228
|
if (bnActiveStake.gte(minStake)) {
|
|
226
229
|
for (const nomination of nominationList) {
|
|
227
|
-
if (nomination.status ===
|
|
230
|
+
if (nomination.status === EarningStatus.EARNING_REWARD) {
|
|
228
231
|
// only need 1 earning nomination to count
|
|
229
|
-
stakingStatus =
|
|
230
|
-
} else if (nomination.status ===
|
|
232
|
+
stakingStatus = EarningStatus.EARNING_REWARD;
|
|
233
|
+
} else if (nomination.status === EarningStatus.WAITING) {
|
|
231
234
|
waitingNominationCount += 1;
|
|
232
235
|
}
|
|
233
236
|
}
|
|
234
237
|
if (waitingNominationCount === nominationList.length) {
|
|
235
|
-
stakingStatus =
|
|
238
|
+
stakingStatus = EarningStatus.WAITING;
|
|
236
239
|
}
|
|
237
240
|
}
|
|
238
241
|
ledger.unlocking.forEach(unlockingChunk => {
|
|
@@ -293,7 +296,7 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
|
|
|
293
296
|
return {
|
|
294
297
|
chain,
|
|
295
298
|
type: StakingType.NOMINATED,
|
|
296
|
-
status:
|
|
299
|
+
status: EarningStatus.NOT_STAKING,
|
|
297
300
|
address: address,
|
|
298
301
|
activeStake: '0',
|
|
299
302
|
nominations: [],
|
|
@@ -306,7 +309,7 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
|
|
|
306
309
|
if (nominations) {
|
|
307
310
|
const validatorList = nominations.targets;
|
|
308
311
|
await Promise.all(validatorList.map(async validatorAddress => {
|
|
309
|
-
let nominationStatus =
|
|
312
|
+
let nominationStatus = EarningStatus.NOT_EARNING;
|
|
310
313
|
const [[identity], _eraStaker] = await Promise.all([parseIdentity(chainApi, validatorAddress), chainApi.api.query.staking.erasStakers(currentEra, validatorAddress)]);
|
|
311
314
|
const eraStaker = _eraStaker.toPrimitive();
|
|
312
315
|
const sortedNominators = eraStaker.others.sort((a, b) => {
|
|
@@ -317,10 +320,10 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
|
|
|
317
320
|
});
|
|
318
321
|
if (!topNominators.includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
319
322
|
// if nominator has target but not in nominator list
|
|
320
|
-
nominationStatus =
|
|
323
|
+
nominationStatus = EarningStatus.WAITING;
|
|
321
324
|
} else if (topNominators.slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator).includes(reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
322
325
|
// if address in top nominators
|
|
323
|
-
nominationStatus =
|
|
326
|
+
nominationStatus = EarningStatus.EARNING_REWARD;
|
|
324
327
|
}
|
|
325
328
|
nominationList.push({
|
|
326
329
|
chain,
|
|
@@ -332,20 +335,20 @@ export async function getRelayChainNominatorMetadata(chainInfo, address, substra
|
|
|
332
335
|
}));
|
|
333
336
|
}
|
|
334
337
|
|
|
335
|
-
let stakingStatus =
|
|
338
|
+
let stakingStatus = EarningStatus.NOT_EARNING;
|
|
336
339
|
const bnActiveStake = new BN(activeStake);
|
|
337
340
|
let waitingNominationCount = 0;
|
|
338
341
|
if (bnActiveStake.gte(minStake)) {
|
|
339
342
|
for (const nomination of nominationList) {
|
|
340
|
-
if (nomination.status ===
|
|
343
|
+
if (nomination.status === EarningStatus.EARNING_REWARD) {
|
|
341
344
|
// only need 1 earning nomination to count
|
|
342
|
-
stakingStatus =
|
|
343
|
-
} else if (nomination.status ===
|
|
345
|
+
stakingStatus = EarningStatus.EARNING_REWARD;
|
|
346
|
+
} else if (nomination.status === EarningStatus.WAITING) {
|
|
344
347
|
waitingNominationCount += 1;
|
|
345
348
|
}
|
|
346
349
|
}
|
|
347
350
|
if (waitingNominationCount === nominationList.length) {
|
|
348
|
-
stakingStatus =
|
|
351
|
+
stakingStatus = EarningStatus.WAITING;
|
|
349
352
|
}
|
|
350
353
|
}
|
|
351
354
|
ledger.unlocking.forEach(unlockingChunk => {
|
|
@@ -381,7 +384,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
|
|
|
381
384
|
const poolMetadata = _poolMetadata.toPrimitive();
|
|
382
385
|
const currentEra = _currentEra.toString();
|
|
383
386
|
const nominations = _nominations.toJSON();
|
|
384
|
-
let stakingStatus =
|
|
387
|
+
let stakingStatus = EarningStatus.NOT_EARNING;
|
|
385
388
|
const getPoolName = () => {
|
|
386
389
|
if (poolMetadata.isUtf8) {
|
|
387
390
|
return poolMetadata.toUtf8();
|
|
@@ -404,7 +407,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
|
|
|
404
407
|
}).slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator);
|
|
405
408
|
if (topNominators.includes(reformatAddress(poolStashAccount, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
406
409
|
// if address in top nominators
|
|
407
|
-
stakingStatus =
|
|
410
|
+
stakingStatus = EarningStatus.EARNING_REWARD;
|
|
408
411
|
}
|
|
409
412
|
}));
|
|
410
413
|
}
|
|
@@ -439,7 +442,7 @@ export async function subscribeRelayChainPoolMemberMetadata(chainInfo, address,
|
|
|
439
442
|
});
|
|
440
443
|
const bnActiveStake = new BN(poolMemberInfo.points.toString());
|
|
441
444
|
if (!bnActiveStake.gt(BN_ZERO)) {
|
|
442
|
-
stakingStatus =
|
|
445
|
+
stakingStatus = EarningStatus.NOT_EARNING;
|
|
443
446
|
}
|
|
444
447
|
return {
|
|
445
448
|
chain: chainInfo.slug,
|
|
@@ -470,14 +473,14 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
|
|
|
470
473
|
chain: chainInfo.slug,
|
|
471
474
|
type: StakingType.POOLED,
|
|
472
475
|
address,
|
|
473
|
-
status:
|
|
476
|
+
status: EarningStatus.NOT_STAKING,
|
|
474
477
|
activeStake: '0',
|
|
475
478
|
nominations: [],
|
|
476
479
|
// can only join 1 pool at a time
|
|
477
480
|
unstakings: []
|
|
478
481
|
};
|
|
479
482
|
}
|
|
480
|
-
let stakingStatus =
|
|
483
|
+
let stakingStatus = EarningStatus.NOT_EARNING;
|
|
481
484
|
const _poolMetadata = await chainApi.api.query.nominationPools.metadata(poolMemberInfo.poolId);
|
|
482
485
|
const poolMetadata = _poolMetadata.toPrimitive();
|
|
483
486
|
const getPoolName = () => {
|
|
@@ -505,7 +508,7 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
|
|
|
505
508
|
}).slice(0, unlimitedNominatorRewarded ? undefined : maxNominatorRewardedPerValidator);
|
|
506
509
|
if (topNominators.includes(reformatAddress(poolStashAccount, _getChainSubstrateAddressPrefix(chainInfo)))) {
|
|
507
510
|
// if address in top nominators
|
|
508
|
-
stakingStatus =
|
|
511
|
+
stakingStatus = EarningStatus.EARNING_REWARD;
|
|
509
512
|
}
|
|
510
513
|
}));
|
|
511
514
|
}
|
|
@@ -532,7 +535,7 @@ export async function getRelayChainPoolMemberMetadata(chainInfo, address, substr
|
|
|
532
535
|
});
|
|
533
536
|
const bnActiveStake = new BN(poolMemberInfo.points.toString());
|
|
534
537
|
if (!bnActiveStake.gt(BN_ZERO)) {
|
|
535
|
-
stakingStatus =
|
|
538
|
+
stakingStatus = EarningStatus.NOT_EARNING;
|
|
536
539
|
}
|
|
537
540
|
return {
|
|
538
541
|
chain: chainInfo.slug,
|