@subwallet/extension-base 1.0.7-0 → 1.0.7-2
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 +7 -8
- package/cjs/constants/index.js +1 -1
- package/cjs/koni/api/staking/bonding/amplitude.js +83 -0
- package/cjs/koni/api/staking/bonding/astar.js +109 -5
- package/cjs/koni/api/staking/bonding/index.js +35 -0
- package/cjs/koni/api/staking/bonding/paraChain.js +97 -0
- package/cjs/koni/api/staking/bonding/relayChain.js +203 -15
- package/cjs/koni/api/staking/bonding/utils.js +7 -0
- package/cjs/koni/api/staking/index.js +11 -11
- package/cjs/koni/api/staking/paraChain.js +200 -130
- package/cjs/koni/api/staking/relayChain.js +66 -68
- package/cjs/koni/api/staking/subsquidStaking.js +6 -11
- package/cjs/koni/background/cron.js +0 -25
- package/cjs/koni/background/handlers/Extension.js +98 -74
- package/cjs/koni/background/handlers/State.js +17 -19
- package/cjs/koni/background/subscription.js +57 -12
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +3 -1
- package/cjs/services/chain-service/utils.js +6 -1
- package/cjs/services/storage-service/DatabaseService.js +7 -3
- package/cjs/services/storage-service/db-stores/ChainStakingMetadata.js +5 -0
- package/cjs/services/storage-service/db-stores/NominatorMetadata.js +4 -4
- package/cjs/services/transaction-service/index.js +6 -1
- package/constants/index.d.ts +1 -1
- package/constants/index.js +1 -1
- package/koni/api/staking/bonding/amplitude.d.ts +4 -0
- package/koni/api/staking/bonding/amplitude.js +81 -0
- package/koni/api/staking/bonding/astar.d.ts +4 -0
- package/koni/api/staking/bonding/astar.js +107 -5
- package/koni/api/staking/bonding/index.d.ts +1 -0
- package/koni/api/staking/bonding/index.js +38 -4
- package/koni/api/staking/bonding/paraChain.d.ts +4 -0
- package/koni/api/staking/bonding/paraChain.js +95 -0
- package/koni/api/staking/bonding/relayChain.d.ts +5 -0
- package/koni/api/staking/bonding/relayChain.js +198 -14
- package/koni/api/staking/bonding/utils.d.ts +5 -0
- package/koni/api/staking/bonding/utils.js +6 -0
- package/koni/api/staking/index.d.ts +4 -4
- package/koni/api/staking/index.js +11 -11
- package/koni/api/staking/paraChain.d.ts +5 -5
- package/koni/api/staking/paraChain.js +201 -131
- package/koni/api/staking/relayChain.d.ts +4 -4
- package/koni/api/staking/relayChain.js +66 -67
- package/koni/api/staking/subsquidStaking.d.ts +1 -1
- package/koni/api/staking/subsquidStaking.js +6 -11
- package/koni/background/cron.js +1 -26
- package/koni/background/handlers/Extension.js +29 -7
- package/koni/background/handlers/State.d.ts +2 -2
- package/koni/background/handlers/State.js +17 -19
- package/koni/background/subscription.d.ts +2 -1
- package/koni/background/subscription.js +58 -13
- package/package.json +5 -5
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +3 -2
- package/services/chain-service/types.d.ts +8 -0
- package/services/chain-service/utils.js +6 -1
- package/services/storage-service/DatabaseService.d.ts +2 -2
- package/services/storage-service/DatabaseService.js +7 -3
- package/services/storage-service/db-stores/ChainStakingMetadata.d.ts +1 -0
- package/services/storage-service/db-stores/ChainStakingMetadata.js +3 -0
- package/services/storage-service/db-stores/NominatorMetadata.d.ts +2 -2
- package/services/storage-service/db-stores/NominatorMetadata.js +4 -4
- package/services/transaction-service/index.js +6 -1
|
@@ -8,6 +8,9 @@ exports.getAmplitudeUnclaimedStakingReward = getAmplitudeUnclaimedStakingReward;
|
|
|
8
8
|
exports.getAstarStakingOnChain = getAstarStakingOnChain;
|
|
9
9
|
exports.getParaStakingOnChain = getParaStakingOnChain;
|
|
10
10
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
11
|
+
var _amplitude = require("@subwallet/extension-base/koni/api/staking/bonding/amplitude");
|
|
12
|
+
var _astar = require("@subwallet/extension-base/koni/api/staking/bonding/astar");
|
|
13
|
+
var _paraChain = require("@subwallet/extension-base/koni/api/staking/bonding/paraChain");
|
|
11
14
|
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
12
15
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
13
16
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
@@ -16,93 +19,135 @@ var _utilCrypto = require("@polkadot/util-crypto");
|
|
|
16
19
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
17
20
|
// SPDX-License-Identifier: Apache-2.0
|
|
18
21
|
|
|
19
|
-
function getSingleStakingAmplitude(
|
|
20
|
-
return
|
|
22
|
+
function getSingleStakingAmplitude(substrateApi, address, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
|
|
23
|
+
return substrateApi.api.queryMulti([[substrateApi.api.query.parachainStaking.delegatorState, address], [substrateApi.api.query.parachainStaking.unstaking, address]], async _ref => {
|
|
21
24
|
let [_delegatorState, _unstaking] = _ref;
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
let _activeBalance = '0';
|
|
25
|
-
if (_stakingData !== null) {
|
|
26
|
-
_activeBalance = _stakingData.amount || _stakingData.total;
|
|
27
|
-
_activeBalance = _activeBalance.replaceAll(',', '');
|
|
28
|
-
}
|
|
29
|
-
const activeBalance = new _util.BN(_activeBalance);
|
|
30
|
-
let unstakingBalance = _util.BN_ZERO;
|
|
31
|
-
if (_unstakingData !== null) {
|
|
32
|
-
Object.values(_unstakingData).forEach(_unstakingAmount => {
|
|
33
|
-
const bnUnstakingAmount = new _util.BN(_unstakingAmount.replaceAll(',', ''));
|
|
34
|
-
unstakingBalance = unstakingBalance.add(bnUnstakingAmount);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
const totalBalance = activeBalance.add(unstakingBalance);
|
|
25
|
+
const delegatorState = _delegatorState.toPrimitive();
|
|
26
|
+
const unstakingInfo = _unstaking.toPrimitive();
|
|
38
27
|
const {
|
|
39
28
|
symbol
|
|
40
|
-
} = (0, _utils._getChainNativeTokenBasicInfo)(
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
chain
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
29
|
+
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
|
|
30
|
+
const owner = (0, _utils2.reformatAddress)(address, 42);
|
|
31
|
+
if (!delegatorState && !unstakingInfo) {
|
|
32
|
+
stakingCallback(chain, {
|
|
33
|
+
name: chainInfoMap[chain].name,
|
|
34
|
+
chain: chain,
|
|
35
|
+
balance: '0',
|
|
36
|
+
activeBalance: '0',
|
|
37
|
+
unlockingBalance: '0',
|
|
38
|
+
nativeToken: symbol,
|
|
39
|
+
unit: symbol,
|
|
40
|
+
state: _KoniTypes.APIItemState.READY,
|
|
41
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
42
|
+
address: owner
|
|
43
|
+
});
|
|
44
|
+
nominatorStateCallback({
|
|
45
|
+
chain,
|
|
46
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
47
|
+
address: owner,
|
|
48
|
+
status: _KoniTypes.StakingStatus.NOT_STAKING,
|
|
49
|
+
activeStake: '0',
|
|
50
|
+
nominations: [],
|
|
51
|
+
unstakings: []
|
|
52
|
+
});
|
|
53
|
+
} else {
|
|
54
|
+
const activeBalance = delegatorState ? new _util.BN(delegatorState.amount.toString()) : _util.BN_ZERO;
|
|
55
|
+
let unstakingBalance = _util.BN_ZERO;
|
|
56
|
+
if (unstakingInfo) {
|
|
57
|
+
Object.values(unstakingInfo).forEach(unstakingAmount => {
|
|
58
|
+
const bnUnstakingAmount = new _util.BN(unstakingAmount.toString());
|
|
59
|
+
unstakingBalance = unstakingBalance.add(bnUnstakingAmount);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const totalBalance = activeBalance.add(unstakingBalance);
|
|
63
|
+
const stakingItem = {
|
|
64
|
+
name: chainInfoMap[chain].name,
|
|
65
|
+
chain: chain,
|
|
66
|
+
balance: totalBalance.toString(),
|
|
67
|
+
activeBalance: activeBalance.toString(),
|
|
68
|
+
unlockingBalance: unstakingBalance.toString(),
|
|
69
|
+
nativeToken: symbol,
|
|
70
|
+
unit: symbol,
|
|
71
|
+
state: _KoniTypes.APIItemState.READY,
|
|
72
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
73
|
+
address: owner
|
|
74
|
+
};
|
|
75
|
+
stakingCallback(chain, stakingItem);
|
|
76
|
+
const nominatorMetadata = await (0, _amplitude.subscribeAmplitudeNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, delegatorState, unstakingInfo);
|
|
77
|
+
nominatorStateCallback(nominatorMetadata);
|
|
78
|
+
}
|
|
54
79
|
});
|
|
55
80
|
}
|
|
56
|
-
function getMultiStakingAmplitude(
|
|
57
|
-
return
|
|
81
|
+
function getMultiStakingAmplitude(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
|
|
82
|
+
return substrateApi.api.query.parachainStaking.delegatorState.multi(useAddresses, async ledgers => {
|
|
58
83
|
if (ledgers) {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
84
|
+
const {
|
|
85
|
+
symbol
|
|
86
|
+
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
|
|
87
|
+
const _unstakingStates = await substrateApi.api.query.parachainStaking.unstaking.multi(useAddresses);
|
|
88
|
+
await Promise.all(ledgers.map(async (_delegatorState, i) => {
|
|
63
89
|
const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
90
|
+
const delegatorState = _delegatorState.toPrimitive();
|
|
91
|
+
const unstakingInfo = _unstakingStates[i].toPrimitive();
|
|
92
|
+
if (!delegatorState && !unstakingInfo) {
|
|
93
|
+
stakingCallback(chain, {
|
|
94
|
+
name: chainInfoMap[chain].name,
|
|
95
|
+
chain: chain,
|
|
96
|
+
balance: '0',
|
|
97
|
+
activeBalance: '0',
|
|
98
|
+
unlockingBalance: '0',
|
|
99
|
+
nativeToken: symbol,
|
|
100
|
+
unit: symbol,
|
|
101
|
+
state: _KoniTypes.APIItemState.READY,
|
|
102
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
103
|
+
address: owner
|
|
76
104
|
});
|
|
105
|
+
nominatorStateCallback({
|
|
106
|
+
chain,
|
|
107
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
108
|
+
address: owner,
|
|
109
|
+
status: _KoniTypes.StakingStatus.NOT_STAKING,
|
|
110
|
+
activeStake: '0',
|
|
111
|
+
nominations: [],
|
|
112
|
+
unstakings: []
|
|
113
|
+
});
|
|
114
|
+
} else {
|
|
115
|
+
const activeBalance = delegatorState ? new _util.BN(delegatorState.amount.toString()) : _util.BN_ZERO;
|
|
116
|
+
let unstakingBalance = _util.BN_ZERO;
|
|
117
|
+
if (unstakingInfo) {
|
|
118
|
+
Object.values(unstakingInfo).forEach(unstakingAmount => {
|
|
119
|
+
const bnUnstakingAmount = new _util.BN(unstakingAmount.toString());
|
|
120
|
+
unstakingBalance = unstakingBalance.add(bnUnstakingAmount);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const totalBalance = activeBalance.add(unstakingBalance);
|
|
124
|
+
const stakingItem = {
|
|
125
|
+
name: chainInfoMap[chain].name,
|
|
126
|
+
chain: chain,
|
|
127
|
+
balance: totalBalance.toString(),
|
|
128
|
+
activeBalance: activeBalance.toString(),
|
|
129
|
+
unlockingBalance: unstakingBalance.toString(),
|
|
130
|
+
nativeToken: symbol,
|
|
131
|
+
unit: symbol,
|
|
132
|
+
state: _KoniTypes.APIItemState.READY,
|
|
133
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
134
|
+
address: owner
|
|
135
|
+
};
|
|
136
|
+
stakingCallback(chain, stakingItem);
|
|
137
|
+
const nominatorMetadata = await (0, _amplitude.subscribeAmplitudeNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, delegatorState, unstakingInfo);
|
|
138
|
+
nominatorStateCallback(nominatorMetadata);
|
|
77
139
|
}
|
|
78
|
-
|
|
79
|
-
const {
|
|
80
|
-
symbol
|
|
81
|
-
} = (0, _utils._getChainNativeTokenBasicInfo)(networks[chain]);
|
|
82
|
-
const stakingItem = {
|
|
83
|
-
name: networks[chain].name,
|
|
84
|
-
chain: chain,
|
|
85
|
-
balance: totalBalance.toString(),
|
|
86
|
-
activeBalance: activeBalance.toString(),
|
|
87
|
-
unlockingBalance: unstakingBalance.toString(),
|
|
88
|
-
nativeToken: symbol,
|
|
89
|
-
unit: symbol,
|
|
90
|
-
state: _KoniTypes.APIItemState.READY,
|
|
91
|
-
type: _KoniTypes.StakingType.NOMINATED,
|
|
92
|
-
address: owner
|
|
93
|
-
};
|
|
94
|
-
callback(chain, stakingItem);
|
|
95
|
-
}
|
|
140
|
+
}));
|
|
96
141
|
}
|
|
97
142
|
});
|
|
98
143
|
}
|
|
99
|
-
function getAmplitudeStakingOnChain(parentApi, useAddresses, networks, chain, callback) {
|
|
144
|
+
function getAmplitudeStakingOnChain(parentApi, useAddresses, networks, chain, callback, nominatorStateCallback) {
|
|
100
145
|
if (useAddresses.length === 1) {
|
|
101
|
-
return getSingleStakingAmplitude(parentApi, useAddresses[0], networks, chain, callback);
|
|
146
|
+
return getSingleStakingAmplitude(parentApi, useAddresses[0], networks, chain, callback, nominatorStateCallback);
|
|
102
147
|
}
|
|
103
|
-
return getMultiStakingAmplitude(parentApi, useAddresses, networks, chain, callback);
|
|
148
|
+
return getMultiStakingAmplitude(parentApi, useAddresses, networks, chain, callback, nominatorStateCallback);
|
|
104
149
|
}
|
|
105
|
-
async function getAmplitudeUnclaimedStakingReward(substrateApiMap, addresses, networks, chains) {
|
|
150
|
+
async function getAmplitudeUnclaimedStakingReward(substrateApiMap, addresses, networks, chains, callBack) {
|
|
106
151
|
if (chains.length === 0) {
|
|
107
152
|
return [];
|
|
108
153
|
}
|
|
@@ -119,42 +164,37 @@ async function getAmplitudeUnclaimedStakingReward(substrateApiMap, addresses, ne
|
|
|
119
164
|
const apiProps = await substrateApiMap[chain].isReady;
|
|
120
165
|
await Promise.all(useAddresses.map(async address => {
|
|
121
166
|
const _unclaimedReward = await apiProps.api.query.parachainStaking.rewards(address);
|
|
122
|
-
|
|
123
|
-
const rewardItem = {
|
|
167
|
+
callBack({
|
|
124
168
|
chain,
|
|
125
169
|
name: networkInfo.name,
|
|
126
170
|
state: _KoniTypes.APIItemState.READY,
|
|
127
171
|
type: _KoniTypes.StakingType.NOMINATED,
|
|
128
172
|
address: (0, _utils2.reformatAddress)(address, 42),
|
|
129
|
-
unclaimedReward
|
|
130
|
-
};
|
|
131
|
-
unclaimedRewardList.push(rewardItem);
|
|
173
|
+
unclaimedReward: _unclaimedReward.toString()
|
|
174
|
+
});
|
|
132
175
|
}));
|
|
133
176
|
}
|
|
134
177
|
}));
|
|
135
178
|
return unclaimedRewardList;
|
|
136
179
|
}
|
|
137
|
-
function getParaStakingOnChain(
|
|
180
|
+
function getParaStakingOnChain(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
|
|
138
181
|
const {
|
|
139
182
|
symbol
|
|
140
|
-
} = (0, _utils._getChainNativeTokenBasicInfo)(
|
|
141
|
-
return
|
|
183
|
+
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
|
|
184
|
+
return substrateApi.api.query.parachainStaking.delegatorState.multi(useAddresses, async ledgers => {
|
|
142
185
|
if (ledgers) {
|
|
143
|
-
|
|
144
|
-
const
|
|
186
|
+
await Promise.all(ledgers.map(async (_delegatorState, i) => {
|
|
187
|
+
const delegatorState = _delegatorState.toPrimitive();
|
|
145
188
|
const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
let
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
_unlockingBalance = _unlockingBalance.replaceAll(',', '');
|
|
153
|
-
const totalBalance = new _util.BN(_totalBalance);
|
|
154
|
-
const unlockingBalance = new _util.BN(_unlockingBalance);
|
|
189
|
+
if (delegatorState) {
|
|
190
|
+
const _totalBalance = delegatorState.total;
|
|
191
|
+
// let _unlockingBalance = delegatorState.lessTotal ? delegatorState.lessTotal : delegatorState.requests.lessTotal;
|
|
192
|
+
const _unlockingBalance = delegatorState.lessTotal;
|
|
193
|
+
const totalBalance = new _util.BN(_totalBalance.toString());
|
|
194
|
+
const unlockingBalance = new _util.BN(_unlockingBalance.toString());
|
|
155
195
|
const activeBalance = totalBalance.sub(unlockingBalance);
|
|
156
|
-
|
|
157
|
-
name:
|
|
196
|
+
stakingCallback(chain, {
|
|
197
|
+
name: chainInfoMap[chain].name,
|
|
158
198
|
chain: chain,
|
|
159
199
|
balance: totalBalance.toString(),
|
|
160
200
|
activeBalance: activeBalance.toString(),
|
|
@@ -164,11 +204,12 @@ function getParaStakingOnChain(parentApi, useAddresses, networks, chain, callbac
|
|
|
164
204
|
state: _KoniTypes.APIItemState.READY,
|
|
165
205
|
type: _KoniTypes.StakingType.NOMINATED,
|
|
166
206
|
address: owner
|
|
167
|
-
};
|
|
168
|
-
|
|
207
|
+
});
|
|
208
|
+
const nominatorMetadata = await (0, _paraChain.subscribeParaChainNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, delegatorState);
|
|
209
|
+
nominatorStateCallback(nominatorMetadata);
|
|
169
210
|
} else {
|
|
170
|
-
|
|
171
|
-
name:
|
|
211
|
+
stakingCallback(chain, {
|
|
212
|
+
name: chainInfoMap[chain].name,
|
|
172
213
|
chain: chain,
|
|
173
214
|
balance: '0',
|
|
174
215
|
activeBalance: '0',
|
|
@@ -178,49 +219,78 @@ function getParaStakingOnChain(parentApi, useAddresses, networks, chain, callbac
|
|
|
178
219
|
state: _KoniTypes.APIItemState.READY,
|
|
179
220
|
type: _KoniTypes.StakingType.NOMINATED,
|
|
180
221
|
address: owner
|
|
181
|
-
};
|
|
182
|
-
|
|
222
|
+
});
|
|
223
|
+
nominatorStateCallback({
|
|
224
|
+
chain,
|
|
225
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
226
|
+
address: owner,
|
|
227
|
+
status: _KoniTypes.StakingStatus.NOT_STAKING,
|
|
228
|
+
activeStake: '0',
|
|
229
|
+
nominations: [],
|
|
230
|
+
unstakings: []
|
|
231
|
+
});
|
|
183
232
|
}
|
|
184
|
-
}
|
|
233
|
+
}));
|
|
185
234
|
}
|
|
186
235
|
});
|
|
187
236
|
}
|
|
188
|
-
function getAstarStakingOnChain(
|
|
237
|
+
function getAstarStakingOnChain(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
|
|
189
238
|
const {
|
|
190
239
|
symbol
|
|
191
|
-
} = (0, _utils._getChainNativeTokenBasicInfo)(
|
|
192
|
-
return
|
|
240
|
+
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
|
|
241
|
+
return substrateApi.api.query.dappsStaking.ledger.multi(useAddresses, async ledgers => {
|
|
193
242
|
if (ledgers) {
|
|
194
|
-
|
|
243
|
+
await Promise.all(ledgers.map(async (_ledger, i) => {
|
|
195
244
|
let bnUnlockingBalance = _util.BN_ZERO;
|
|
196
245
|
const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
|
|
197
|
-
const ledger =
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
246
|
+
const ledger = _ledger.toPrimitive();
|
|
247
|
+
if (ledger && ledger.locked > 0) {
|
|
248
|
+
const unlockingChunks = ledger.unbondingInfo.unlockingChunks;
|
|
249
|
+
const _totalStake = ledger.locked;
|
|
250
|
+
const bnTotalStake = new _util.BN(_totalStake.toString());
|
|
251
|
+
for (const chunk of unlockingChunks) {
|
|
252
|
+
const bnChunk = new _util.BN(chunk.amount.toString());
|
|
253
|
+
bnUnlockingBalance = bnUnlockingBalance.add(bnChunk);
|
|
254
|
+
}
|
|
255
|
+
const bnActiveStake = bnTotalStake.sub(bnUnlockingBalance);
|
|
256
|
+
stakingCallback(chain, {
|
|
257
|
+
name: chainInfoMap[chain].name,
|
|
258
|
+
chain: chain,
|
|
259
|
+
balance: bnTotalStake.toString(),
|
|
260
|
+
activeBalance: bnActiveStake.toString(),
|
|
261
|
+
unlockingBalance: bnUnlockingBalance.toString(),
|
|
262
|
+
nativeToken: symbol,
|
|
263
|
+
unit: symbol,
|
|
264
|
+
state: _KoniTypes.APIItemState.READY,
|
|
265
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
266
|
+
address: owner
|
|
267
|
+
});
|
|
268
|
+
const nominatorMetadata = await (0, _astar.subscribeAstarNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, ledger);
|
|
269
|
+
nominatorStateCallback(nominatorMetadata);
|
|
270
|
+
} else {
|
|
271
|
+
stakingCallback(chain, {
|
|
272
|
+
name: chainInfoMap[chain].name,
|
|
273
|
+
chain,
|
|
274
|
+
balance: '0',
|
|
275
|
+
activeBalance: '0',
|
|
276
|
+
unlockingBalance: '0',
|
|
277
|
+
nativeToken: symbol,
|
|
278
|
+
unit: symbol,
|
|
279
|
+
state: _KoniTypes.APIItemState.READY,
|
|
280
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
281
|
+
address: owner
|
|
282
|
+
});
|
|
283
|
+
nominatorStateCallback({
|
|
284
|
+
chain,
|
|
285
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
286
|
+
address: owner,
|
|
287
|
+
status: _KoniTypes.StakingStatus.NOT_STAKING,
|
|
288
|
+
activeStake: '0',
|
|
289
|
+
nominations: [],
|
|
290
|
+
unstakings: []
|
|
291
|
+
});
|
|
205
292
|
}
|
|
206
|
-
|
|
207
|
-
const bnActiveStake = bnTotalStake.sub(bnUnlockingBalance);
|
|
208
|
-
const stakingItem = {
|
|
209
|
-
name: networks[chain].name,
|
|
210
|
-
chain: chain,
|
|
211
|
-
balance: bnTotalStake.toString(),
|
|
212
|
-
activeBalance: bnActiveStake.toString(),
|
|
213
|
-
unlockingBalance: bnUnlockingBalance.toString(),
|
|
214
|
-
nativeToken: symbol,
|
|
215
|
-
unit: symbol,
|
|
216
|
-
state: _KoniTypes.APIItemState.READY,
|
|
217
|
-
type: _KoniTypes.StakingType.NOMINATED,
|
|
218
|
-
address: owner
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
// eslint-disable-next-line node/no-callback-literal
|
|
222
|
-
callback(chain, stakingItem);
|
|
223
|
-
}
|
|
293
|
+
}));
|
|
224
294
|
}
|
|
225
295
|
});
|
|
226
296
|
}
|
|
@@ -7,6 +7,7 @@ exports.getNominationPoolReward = getNominationPoolReward;
|
|
|
7
7
|
exports.getRelayPoolingOnChain = getRelayPoolingOnChain;
|
|
8
8
|
exports.getRelayStakingOnChain = getRelayStakingOnChain;
|
|
9
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
|
+
var _relayChain = require("@subwallet/extension-base/koni/api/staking/bonding/relayChain");
|
|
10
11
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
11
12
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
12
13
|
var _util = require("@polkadot/util");
|
|
@@ -14,95 +15,84 @@ var _utilCrypto = require("@polkadot/util-crypto");
|
|
|
14
15
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
15
16
|
// SPDX-License-Identifier: Apache-2.0
|
|
16
17
|
|
|
17
|
-
function getRelayStakingOnChain(substrateApi, useAddresses, chainInfoMap, chain,
|
|
18
|
+
function getRelayStakingOnChain(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
|
|
18
19
|
var _substrateApi$api$que;
|
|
19
20
|
const {
|
|
20
21
|
symbol
|
|
21
22
|
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
|
|
22
|
-
return (_substrateApi$api$que = substrateApi.api.query.staking) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.ledger.multi(useAddresses, ledgers => {
|
|
23
|
-
let unit = '';
|
|
23
|
+
return (_substrateApi$api$que = substrateApi.api.query.staking) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.ledger.multi(useAddresses, async ledgers => {
|
|
24
24
|
if (ledgers) {
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
data.unlocking.forEach(_ref => {
|
|
34
|
-
let {
|
|
35
|
-
value
|
|
36
|
-
} = _ref;
|
|
37
|
-
value = value.split(' ')[0];
|
|
38
|
-
const _unlockingBalance = value.replaceAll(',', '');
|
|
39
|
-
bnUnlockingBalance = bnUnlockingBalance.add(new _util.BN(_unlockingBalance));
|
|
40
|
-
});
|
|
41
|
-
let amount = _totalBalance ? _totalBalance.split(' ')[0] : '';
|
|
42
|
-
amount = amount.replaceAll(',', '');
|
|
43
|
-
unit = _totalBalance ? _totalBalance.split(' ')[1] : '';
|
|
44
|
-
const bnTotalBalance = new _util.BN(amount);
|
|
45
|
-
amount = _activeBalance ? _activeBalance.split(' ')[0] : '';
|
|
46
|
-
amount = amount.replaceAll(',', '');
|
|
47
|
-
unit = _activeBalance ? _activeBalance.split(' ')[1] : '';
|
|
48
|
-
const bnActiveBalance = new _util.BN(amount);
|
|
49
|
-
const stakingItem = {
|
|
25
|
+
await Promise.all(ledgers.map(async (_ledger, i) => {
|
|
26
|
+
const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
|
|
27
|
+
const ledger = _ledger.toPrimitive();
|
|
28
|
+
if (ledger) {
|
|
29
|
+
const _totalBalance = ledger.total.toString();
|
|
30
|
+
const _activeBalance = ledger.active.toString();
|
|
31
|
+
const bnUnlockingBalance = new _util.BN(_totalBalance).sub(new _util.BN(_activeBalance));
|
|
32
|
+
stakingCallback(chain, {
|
|
50
33
|
name: chainInfoMap[chain].name,
|
|
51
34
|
chain: chain,
|
|
52
|
-
balance:
|
|
53
|
-
activeBalance:
|
|
35
|
+
balance: _totalBalance,
|
|
36
|
+
activeBalance: _activeBalance,
|
|
54
37
|
unlockingBalance: bnUnlockingBalance.toString(),
|
|
55
38
|
nativeToken: symbol,
|
|
56
|
-
unit:
|
|
39
|
+
unit: symbol,
|
|
57
40
|
state: _KoniTypes.APIItemState.READY,
|
|
58
41
|
type: _KoniTypes.StakingType.NOMINATED,
|
|
59
42
|
address: owner
|
|
60
|
-
};
|
|
61
|
-
|
|
43
|
+
});
|
|
44
|
+
const nominatorMetadata = await (0, _relayChain.subscribeRelayChainNominatorMetadata)(chainInfoMap[chain], owner, substrateApi, ledger);
|
|
45
|
+
nominatorStateCallback(nominatorMetadata);
|
|
62
46
|
} else {
|
|
63
|
-
|
|
47
|
+
stakingCallback(chain, {
|
|
64
48
|
name: chainInfoMap[chain].name,
|
|
65
49
|
chain: chain,
|
|
66
50
|
balance: '0',
|
|
67
51
|
activeBalance: '0',
|
|
68
52
|
unlockingBalance: '0',
|
|
69
53
|
nativeToken: symbol,
|
|
70
|
-
unit:
|
|
54
|
+
unit: symbol,
|
|
71
55
|
state: _KoniTypes.APIItemState.READY,
|
|
72
56
|
type: _KoniTypes.StakingType.NOMINATED,
|
|
73
57
|
address: owner
|
|
74
|
-
};
|
|
75
|
-
|
|
58
|
+
});
|
|
59
|
+
nominatorStateCallback({
|
|
60
|
+
chain,
|
|
61
|
+
type: _KoniTypes.StakingType.NOMINATED,
|
|
62
|
+
status: _KoniTypes.StakingStatus.NOT_STAKING,
|
|
63
|
+
address: owner,
|
|
64
|
+
activeStake: '0',
|
|
65
|
+
nominations: [],
|
|
66
|
+
unstakings: []
|
|
67
|
+
});
|
|
76
68
|
}
|
|
77
|
-
}
|
|
69
|
+
}));
|
|
78
70
|
}
|
|
79
71
|
});
|
|
80
72
|
}
|
|
81
|
-
function getRelayPoolingOnChain(
|
|
82
|
-
var
|
|
73
|
+
function getRelayPoolingOnChain(substrateApi, useAddresses, chainInfoMap, chain, stakingCallback, nominatorStateCallback) {
|
|
74
|
+
var _substrateApi$api$que2, _substrateApi$api$que3;
|
|
83
75
|
const {
|
|
84
76
|
symbol
|
|
85
|
-
} = (0, _utils._getChainNativeTokenBasicInfo)(
|
|
86
|
-
return (
|
|
77
|
+
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfoMap[chain]);
|
|
78
|
+
return (_substrateApi$api$que2 = substrateApi.api.query) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.nominationPools) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.poolMembers.multi(useAddresses, async ledgers => {
|
|
87
79
|
if (ledgers) {
|
|
88
|
-
|
|
89
|
-
const
|
|
80
|
+
await Promise.all(ledgers.map(async (_poolMemberInfo, i) => {
|
|
81
|
+
const poolMemberInfo = _poolMemberInfo.toPrimitive();
|
|
90
82
|
const owner = (0, _utils2.reformatAddress)(useAddresses[i], 42);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
const unbondedBalance = data.unbondingEras;
|
|
83
|
+
if (poolMemberInfo) {
|
|
84
|
+
const bondedBalance = poolMemberInfo.points;
|
|
85
|
+
const unbondedBalance = poolMemberInfo.unbondingEras;
|
|
95
86
|
let unlockingBalance = new _util.BN(0);
|
|
96
|
-
|
|
97
|
-
Object.entries(unbondedBalance).forEach(
|
|
98
|
-
let [
|
|
99
|
-
const bnUnbondedBalance = new _util.BN(value.
|
|
87
|
+
const bnBondedBalance = new _util.BN(bondedBalance.toString());
|
|
88
|
+
Object.entries(unbondedBalance).forEach(_ref => {
|
|
89
|
+
let [, value] = _ref;
|
|
90
|
+
const bnUnbondedBalance = new _util.BN(value.toString());
|
|
100
91
|
unlockingBalance = unlockingBalance.add(bnUnbondedBalance);
|
|
101
92
|
});
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
name: networks[chain].name,
|
|
93
|
+
const totalBalance = bnBondedBalance.add(unlockingBalance);
|
|
94
|
+
stakingCallback(chain, {
|
|
95
|
+
name: chainInfoMap[chain].name,
|
|
106
96
|
chain: chain,
|
|
107
97
|
balance: totalBalance.toString(),
|
|
108
98
|
activeBalance: bnBondedBalance.toString(),
|
|
@@ -112,11 +102,12 @@ function getRelayPoolingOnChain(parentApi, useAddresses, networks, chain, callba
|
|
|
112
102
|
state: _KoniTypes.APIItemState.READY,
|
|
113
103
|
type: _KoniTypes.StakingType.POOLED,
|
|
114
104
|
address: owner
|
|
115
|
-
};
|
|
116
|
-
|
|
105
|
+
});
|
|
106
|
+
const nominatorMetadata = await (0, _relayChain.subscribeRelayChainPoolMemberMetadata)(chainInfoMap[chain], owner, substrateApi, poolMemberInfo);
|
|
107
|
+
nominatorStateCallback(nominatorMetadata);
|
|
117
108
|
} else {
|
|
118
|
-
|
|
119
|
-
name:
|
|
109
|
+
stakingCallback(chain, {
|
|
110
|
+
name: chainInfoMap[chain].name,
|
|
120
111
|
chain: chain,
|
|
121
112
|
balance: '0',
|
|
122
113
|
activeBalance: '0',
|
|
@@ -126,14 +117,23 @@ function getRelayPoolingOnChain(parentApi, useAddresses, networks, chain, callba
|
|
|
126
117
|
state: _KoniTypes.APIItemState.READY,
|
|
127
118
|
type: _KoniTypes.StakingType.POOLED,
|
|
128
119
|
address: owner
|
|
129
|
-
};
|
|
130
|
-
|
|
120
|
+
});
|
|
121
|
+
nominatorStateCallback({
|
|
122
|
+
chain,
|
|
123
|
+
type: _KoniTypes.StakingType.POOLED,
|
|
124
|
+
address: owner,
|
|
125
|
+
status: _KoniTypes.StakingStatus.NOT_STAKING,
|
|
126
|
+
activeStake: '0',
|
|
127
|
+
nominations: [],
|
|
128
|
+
// can only join 1 pool at a time
|
|
129
|
+
unstakings: []
|
|
130
|
+
});
|
|
131
131
|
}
|
|
132
|
-
}
|
|
132
|
+
}));
|
|
133
133
|
}
|
|
134
134
|
});
|
|
135
135
|
}
|
|
136
|
-
async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap) {
|
|
136
|
+
async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap, callBack) {
|
|
137
137
|
const targetNetworks = [];
|
|
138
138
|
const validAddresses = [];
|
|
139
139
|
Object.keys(chainInfoMap).forEach(key => {
|
|
@@ -144,7 +144,6 @@ async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap)
|
|
|
144
144
|
validAddresses.push(address);
|
|
145
145
|
}
|
|
146
146
|
});
|
|
147
|
-
const rewardList = [];
|
|
148
147
|
try {
|
|
149
148
|
await Promise.all(targetNetworks.map(async networkKey => {
|
|
150
149
|
const substrateApi = await substrateApiMap[networkKey].isReady;
|
|
@@ -153,7 +152,7 @@ async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap)
|
|
|
153
152
|
var _substrateApi$api$cal, _substrateApi$api$cal2;
|
|
154
153
|
const _unclaimedReward = await ((_substrateApi$api$cal = substrateApi.api.call) === null || _substrateApi$api$cal === void 0 ? void 0 : (_substrateApi$api$cal2 = _substrateApi$api$cal.nominationPoolsApi) === null || _substrateApi$api$cal2 === void 0 ? void 0 : _substrateApi$api$cal2.pendingRewards(address));
|
|
155
154
|
if (_unclaimedReward) {
|
|
156
|
-
|
|
155
|
+
callBack({
|
|
157
156
|
address: address,
|
|
158
157
|
chain: networkKey,
|
|
159
158
|
unclaimedReward: _unclaimedReward.toString(),
|
|
@@ -166,7 +165,6 @@ async function getNominationPoolReward(addresses, chainInfoMap, substrateApiMap)
|
|
|
166
165
|
}
|
|
167
166
|
}));
|
|
168
167
|
} catch (e) {
|
|
169
|
-
|
|
168
|
+
console.debug(e);
|
|
170
169
|
}
|
|
171
|
-
return rewardList;
|
|
172
170
|
}
|