@substrate/api-sidecar 19.4.0 → 20.0.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/build/package.json +7 -7
- package/build/src/services/accounts/AccountsStakingInfoService.d.ts +25 -0
- package/build/src/services/accounts/AccountsStakingInfoService.js +278 -13
- package/build/src/services/accounts/AccountsStakingInfoService.js.map +1 -1
- package/build/src/services/accounts/AccountsStakingInfoService.spec.d.ts +6 -0
- package/build/src/services/accounts/AccountsStakingInfoService.spec.js +99 -1
- package/build/src/services/accounts/AccountsStakingInfoService.spec.js.map +1 -1
- package/build/src/services/blocks/BlocksTraceService.spec.js +1 -1
- package/build/src/services/blocks/BlocksTraceService.spec.js.map +1 -1
- package/build/src/types/responses/AccountStakingInfo.d.ts +17 -3
- package/package.json +7 -7
package/build/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "20.0.0",
|
|
3
3
|
"name": "@substrate/api-sidecar",
|
|
4
4
|
"description": "REST service that makes it easy to interact with blockchain nodes built using Substrate's FRAME framework.",
|
|
5
5
|
"homepage": "https://github.com/paritytech/substrate-api-sidecar#readme",
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
"test:test-release": "yarn build:scripts && node scripts/build/runYarnPack.js"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@polkadot/api": "^15.2
|
|
54
|
-
"@polkadot/api-augment": "^15.2
|
|
55
|
-
"@polkadot/api-contract": "^15.2
|
|
56
|
-
"@polkadot/types": "^15.2
|
|
57
|
-
"@polkadot/types-codec": "^15.2
|
|
53
|
+
"@polkadot/api": "^15.5.2",
|
|
54
|
+
"@polkadot/api-augment": "^15.5.2",
|
|
55
|
+
"@polkadot/api-contract": "^15.5.2",
|
|
56
|
+
"@polkadot/types": "^15.5.2",
|
|
57
|
+
"@polkadot/types-codec": "^15.5.2",
|
|
58
58
|
"@polkadot/util": "^13.3.1",
|
|
59
59
|
"@polkadot/util-crypto": "^13.3.1",
|
|
60
60
|
"@substrate/calc": "^0.3.1",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@substrate/dev": "^0.9.0",
|
|
74
74
|
"@types/argparse": "2.0.17",
|
|
75
75
|
"@types/express": "^5.0.0",
|
|
76
|
-
"@types/express-serve-static-core": "^5.0.
|
|
76
|
+
"@types/express-serve-static-core": "^5.0.6",
|
|
77
77
|
"@types/http-errors": "2.0.4",
|
|
78
78
|
"@types/lru-cache": "^7.10.10",
|
|
79
79
|
"@types/morgan": "1.9.9",
|
|
@@ -9,4 +9,29 @@ export declare class AccountsStakingInfoService extends AbstractService {
|
|
|
9
9
|
* @param stash address of the _Stash_ account to get the staking info of
|
|
10
10
|
*/
|
|
11
11
|
fetchAccountStakingInfo(hash: BlockHash, stash: string): Promise<IAccountStakingInfo>;
|
|
12
|
+
private fetchStakingData;
|
|
13
|
+
private fetchErasStatusForValidator;
|
|
14
|
+
private fetchErasStatusForNominator;
|
|
15
|
+
/**
|
|
16
|
+
* This function returns the era and its reward status information for a given stash account.
|
|
17
|
+
*/
|
|
18
|
+
private fetchErasFromOldCalls;
|
|
19
|
+
private ErasStatusNominatorForValPartiallyClaimed;
|
|
20
|
+
/**
|
|
21
|
+
* This function calculates the era from which we should start checking
|
|
22
|
+
* for claimed rewards.
|
|
23
|
+
*/
|
|
24
|
+
private fetchErasStart;
|
|
25
|
+
/**
|
|
26
|
+
* This function verifies if the information from old calls has already been checked/used. If not,
|
|
27
|
+
* it proceeds to use it and populate the `claimedRewards` array with the eras that have been claimed.
|
|
28
|
+
* Note that data from old calls may also be empty (no results), in which case the `claimedRewards` array
|
|
29
|
+
* will only be populated with data from the new `query.staking?.claimedRewards` call
|
|
30
|
+
* (later in the main function's code).
|
|
31
|
+
*
|
|
32
|
+
* Returns a boolean flag `oldCallChecked` that indicates if the old calls have already been checked/used or not.
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
35
|
+
private isOldCallsChecked;
|
|
36
|
+
private fetchClaimedInfoFromOldCalls;
|
|
12
37
|
}
|
|
@@ -26,8 +26,10 @@ class AccountsStakingInfoService extends AbstractService_1.AbstractService {
|
|
|
26
26
|
* @param stash address of the _Stash_ account to get the staking info of
|
|
27
27
|
*/
|
|
28
28
|
async fetchAccountStakingInfo(hash, stash) {
|
|
29
|
+
var _a;
|
|
29
30
|
const { api } = this;
|
|
30
31
|
const historicApi = await api.at(hash);
|
|
32
|
+
// Fetching initial data
|
|
31
33
|
const [header, controllerOption] = await Promise.all([
|
|
32
34
|
api.rpc.chain.getHeader(hash),
|
|
33
35
|
historicApi.query.staking.bonded(stash), // Option<AccountId> representing the controller
|
|
@@ -42,33 +44,296 @@ class AccountsStakingInfoService extends AbstractService_1.AbstractService {
|
|
|
42
44
|
throw new http_errors_1.BadRequest(`The address ${stash} is not a stash address.`);
|
|
43
45
|
}
|
|
44
46
|
const controller = controllerOption.unwrap();
|
|
45
|
-
const [stakingLedgerOption, rewardDestination, slashingSpansOption] = await
|
|
46
|
-
historicApi.query.staking.ledger(controller),
|
|
47
|
-
historicApi.query.staking.payee(stash),
|
|
48
|
-
historicApi.query.staking.slashingSpans(stash),
|
|
49
|
-
]).catch((err) => {
|
|
50
|
-
throw this.createHttpErrorForAddr(stash, err);
|
|
51
|
-
});
|
|
47
|
+
const [stakingLedgerOption, rewardDestination, slashingSpansOption] = await this.fetchStakingData(historicApi, controller, stash);
|
|
52
48
|
const stakingLedger = stakingLedgerOption.unwrapOr(null);
|
|
49
|
+
/**
|
|
50
|
+
* `isValidator`: checking if the account is a validator or not.
|
|
51
|
+
*
|
|
52
|
+
* `nominations`: fetching the list of validators that a nominator is nominating. This is only relevant for nominators.
|
|
53
|
+
* The stash account that we use as key is the nominator's stash account.
|
|
54
|
+
* https://polkadot.js.org/docs/substrate/storage/#nominatorsaccountid32-optionpalletstakingnominations
|
|
55
|
+
*
|
|
56
|
+
* `currentEra`: fetching the current era.
|
|
57
|
+
*/
|
|
58
|
+
const [isValidator, nominations, currentEraOption] = await Promise.all([
|
|
59
|
+
historicApi.query.session
|
|
60
|
+
? (await historicApi.query.session.validators()).toHuman().includes(stash)
|
|
61
|
+
: false,
|
|
62
|
+
historicApi.query.staking.nominators ? (await historicApi.query.staking.nominators(stash)).unwrapOr(null) : null,
|
|
63
|
+
historicApi.query.staking.currentEra(),
|
|
64
|
+
]);
|
|
53
65
|
if (stakingLedger === null) {
|
|
54
66
|
// should never throw because by time we get here we know we have a bonded pair
|
|
55
67
|
throw new http_errors_1.InternalServerError(`Staking ledger could not be found for controller address "${controller.toString()}"`);
|
|
56
68
|
}
|
|
57
|
-
|
|
58
|
-
let
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
69
|
+
// Initializing two arrays to store the status of claimed rewards per era for validators and for nominators.
|
|
70
|
+
let claimedRewards = [];
|
|
71
|
+
let claimedRewardsNom = [];
|
|
72
|
+
// `eraDepth`: the number of eras to check.
|
|
73
|
+
const eraDepth = Number(api.consts.staking.historyDepth.toNumber());
|
|
74
|
+
const eraStart = this.fetchErasStart(currentEraOption, eraDepth);
|
|
75
|
+
let oldCallChecked = false;
|
|
76
|
+
// Checking each era one by one
|
|
77
|
+
for (let e = eraStart; e < eraStart + eraDepth; e++) {
|
|
78
|
+
let claimedRewardsEras = [];
|
|
79
|
+
[claimedRewardsEras, claimedRewards] = this.fetchClaimedInfoFromOldCalls(stakingLedger, claimedRewardsEras, claimedRewards);
|
|
80
|
+
[oldCallChecked, claimedRewards, e] = this.isOldCallsChecked(oldCallChecked, claimedRewardsEras, claimedRewards, eraStart, eraDepth, e);
|
|
81
|
+
claimedRewardsNom = claimedRewards;
|
|
82
|
+
/**
|
|
83
|
+
* If the old calls are checked (which means `oldCallChecked` flag is true) and the new call
|
|
84
|
+
* `query.staking.claimedRewards` is available then we go into this check.
|
|
85
|
+
*/
|
|
86
|
+
if (!!((_a = historicApi.query.staking) === null || _a === void 0 ? void 0 : _a.claimedRewards) && oldCallChecked) {
|
|
87
|
+
if (currentEraOption.isNone) {
|
|
88
|
+
throw new http_errors_1.InternalServerError('CurrentEra is None when Some was expected');
|
|
89
|
+
}
|
|
90
|
+
if (isValidator) {
|
|
91
|
+
claimedRewards = await this.fetchErasStatusForValidator(historicApi, e, stash, claimedRewards);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// To verify the reward status `claimed` of an era for a Nominator's account,
|
|
95
|
+
// we need to check the status of that era in one of their associated Validators' accounts.
|
|
96
|
+
const validatorsTargets = nominations === null || nominations === void 0 ? void 0 : nominations.targets.toHuman();
|
|
97
|
+
if (validatorsTargets) {
|
|
98
|
+
const [era, claimedRewardsNom1] = await this.fetchErasStatusForNominator(historicApi, e, eraDepth, eraStart, claimedRewardsNom, validatorsTargets, stash, currentEraOption);
|
|
99
|
+
e = era;
|
|
100
|
+
claimedRewardsNom = claimedRewardsNom1;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
62
107
|
}
|
|
108
|
+
const numSlashingSpans = slashingSpansOption.isSome ? slashingSpansOption.unwrap().prior.length + 1 : 0;
|
|
63
109
|
return {
|
|
64
110
|
at,
|
|
65
111
|
controller,
|
|
66
112
|
rewardDestination,
|
|
67
113
|
numSlashingSpans,
|
|
68
114
|
nominations,
|
|
69
|
-
staking:
|
|
115
|
+
staking: {
|
|
116
|
+
stash: stakingLedger.stash,
|
|
117
|
+
total: stakingLedger.total,
|
|
118
|
+
active: stakingLedger.active,
|
|
119
|
+
unlocking: stakingLedger.unlocking,
|
|
120
|
+
claimedRewards: isValidator ? claimedRewards : claimedRewardsNom,
|
|
121
|
+
},
|
|
70
122
|
};
|
|
71
123
|
}
|
|
124
|
+
async fetchStakingData(historicApi, controller, stash) {
|
|
125
|
+
const [stakingLedgerOption, rewardDestination, slashingSpansOption] = await Promise.all([
|
|
126
|
+
historicApi.query.staking.ledger(controller),
|
|
127
|
+
historicApi.query.staking.payee(stash),
|
|
128
|
+
historicApi.query.staking.slashingSpans(stash),
|
|
129
|
+
]).catch((err) => {
|
|
130
|
+
throw this.createHttpErrorForAddr(stash, err);
|
|
131
|
+
});
|
|
132
|
+
return [stakingLedgerOption, rewardDestination, slashingSpansOption];
|
|
133
|
+
}
|
|
134
|
+
async fetchErasStatusForValidator(historicApi, e, stash, claimedRewards) {
|
|
135
|
+
var _a, _b, _c;
|
|
136
|
+
const [erasStakersOverview, erasStakers, claimedRewardsPerEra] = await Promise.all([
|
|
137
|
+
((_a = historicApi.query.staking) === null || _a === void 0 ? void 0 : _a.erasStakersOverview) ? (_b = historicApi.query.staking) === null || _b === void 0 ? void 0 : _b.erasStakersOverview(e, stash) : null,
|
|
138
|
+
((_c = historicApi.query.staking) === null || _c === void 0 ? void 0 : _c.erasStakers) ? historicApi.query.staking.erasStakers(e, stash) : null,
|
|
139
|
+
historicApi.query.staking.claimedRewards(e, stash),
|
|
140
|
+
]);
|
|
141
|
+
if (erasStakersOverview === null || erasStakersOverview === void 0 ? void 0 : erasStakersOverview.isSome) {
|
|
142
|
+
const pageCount = erasStakersOverview.unwrap().pageCount.toNumber();
|
|
143
|
+
const eraStatus = claimedRewardsPerEra.length === 0
|
|
144
|
+
? 'unclaimed'
|
|
145
|
+
: claimedRewardsPerEra.length === pageCount
|
|
146
|
+
? 'claimed'
|
|
147
|
+
: claimedRewardsPerEra.length != pageCount
|
|
148
|
+
? 'partially claimed'
|
|
149
|
+
: 'undefined';
|
|
150
|
+
claimedRewards.push({ era: e, status: eraStatus });
|
|
151
|
+
}
|
|
152
|
+
else if (erasStakers && erasStakers.total.toBigInt() > 0) {
|
|
153
|
+
// if erasStakers.total > 0, then the pageCount is always 1
|
|
154
|
+
// https://github.com/polkadot-js/api/issues/5859#issuecomment-2077011825
|
|
155
|
+
const eraStatus = claimedRewardsPerEra.length === 1 ? 'claimed' : 'unclaimed';
|
|
156
|
+
claimedRewards.push({ era: e, status: eraStatus });
|
|
157
|
+
}
|
|
158
|
+
return claimedRewards;
|
|
159
|
+
}
|
|
160
|
+
async fetchErasStatusForNominator(historicApi, e, depth, eraStart, claimedRewardsNom, validatorsTargets, nominatorStash, currentEraOption) {
|
|
161
|
+
var _a, _b;
|
|
162
|
+
// Iterate through all validators that the nominator is nominating and
|
|
163
|
+
// check if the rewards are claimed or not.
|
|
164
|
+
for (const [idx, validatorStash] of validatorsTargets.entries()) {
|
|
165
|
+
let oldCallChecked = false;
|
|
166
|
+
if (claimedRewardsNom.length == 0) {
|
|
167
|
+
const [era, claimedRewardsOld, oldCallCheck] = await this.fetchErasFromOldCalls(historicApi, e, depth, eraStart, claimedRewardsNom, validatorStash, oldCallChecked);
|
|
168
|
+
claimedRewardsNom = claimedRewardsOld;
|
|
169
|
+
oldCallChecked = oldCallCheck;
|
|
170
|
+
e = era;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
oldCallChecked = true;
|
|
174
|
+
}
|
|
175
|
+
// Checking if the new call is available then I can check if rewards of nominator are claimed or not.
|
|
176
|
+
// If not available, I will set the status to 'undefined'.
|
|
177
|
+
if (!!((_a = historicApi.query.staking) === null || _a === void 0 ? void 0 : _a.claimedRewards) && oldCallChecked) {
|
|
178
|
+
if (currentEraOption.isNone) {
|
|
179
|
+
throw new http_errors_1.InternalServerError('CurrentEra is None when Some was expected');
|
|
180
|
+
}
|
|
181
|
+
// Doing similar checks as in fetchErasStatusForValidator function
|
|
182
|
+
// but with slight changes to adjust to nominator's case
|
|
183
|
+
const [erasStakersOverview, erasStakers, claimedRewardsPerEra] = await Promise.all([
|
|
184
|
+
historicApi.query.staking.erasStakersOverview(e, validatorStash),
|
|
185
|
+
((_b = historicApi.query.staking) === null || _b === void 0 ? void 0 : _b.erasStakers) ? historicApi.query.staking.erasStakers(e, validatorStash) : null,
|
|
186
|
+
historicApi.query.staking.claimedRewards(e, validatorStash),
|
|
187
|
+
]);
|
|
188
|
+
if (erasStakersOverview.isSome) {
|
|
189
|
+
const pageCount = erasStakersOverview.unwrap().pageCount.toNumber();
|
|
190
|
+
const eraStatus = claimedRewardsPerEra.length === 0
|
|
191
|
+
? 'unclaimed'
|
|
192
|
+
: claimedRewardsPerEra.length === pageCount
|
|
193
|
+
? 'claimed'
|
|
194
|
+
: claimedRewardsPerEra.length != pageCount
|
|
195
|
+
? await this.ErasStatusNominatorForValPartiallyClaimed(historicApi, e, validatorStash, pageCount, nominatorStash, claimedRewardsPerEra)
|
|
196
|
+
: 'undefined';
|
|
197
|
+
claimedRewardsNom.push({ era: e, status: eraStatus });
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
else if (erasStakers && erasStakers.total.toBigInt() > 0) {
|
|
201
|
+
// if erasStakers.total > 0, then the pageCount is always 1
|
|
202
|
+
// https://github.com/polkadot-js/api/issues/5859#issuecomment-2077011825
|
|
203
|
+
const eraStatus = claimedRewardsPerEra.length === 1 ? 'claimed' : 'unclaimed';
|
|
204
|
+
claimedRewardsNom.push({ era: e, status: eraStatus });
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
if (idx === validatorsTargets.length - 1) {
|
|
209
|
+
claimedRewardsNom.push({ era: e, status: 'undefined' });
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return [e, claimedRewardsNom];
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* This function returns the era and its reward status information for a given stash account.
|
|
221
|
+
*/
|
|
222
|
+
async fetchErasFromOldCalls(historicApi, e, depth, eraStart, claimedRewards, validatorStash, oldCallChecked) {
|
|
223
|
+
let claimedRewardsEras = [];
|
|
224
|
+
const controllerOption = await historicApi.query.staking.bonded(validatorStash);
|
|
225
|
+
if (controllerOption.isNone) {
|
|
226
|
+
return [e, claimedRewards, oldCallChecked];
|
|
227
|
+
}
|
|
228
|
+
const controller = controllerOption.unwrap();
|
|
229
|
+
const [stakingLedgerOption, ,] = await this.fetchStakingData(historicApi, controller, validatorStash);
|
|
230
|
+
const stakingLedgerValNom = stakingLedgerOption.unwrapOr(null);
|
|
231
|
+
[claimedRewardsEras, claimedRewards] = this.fetchClaimedInfoFromOldCalls(stakingLedgerValNom, claimedRewardsEras, claimedRewards);
|
|
232
|
+
[oldCallChecked, claimedRewards, e] = this.isOldCallsChecked(oldCallChecked, claimedRewardsEras, claimedRewards, eraStart, depth, e);
|
|
233
|
+
return [e, claimedRewards, oldCallChecked];
|
|
234
|
+
}
|
|
235
|
+
async ErasStatusNominatorForValPartiallyClaimed(historicApi, e, validatorStash, pageCount, nominatorStash, claimedRewardsPerEra) {
|
|
236
|
+
var _a;
|
|
237
|
+
// If era is partially claimed from the side of the validator that means that the validator
|
|
238
|
+
// has more than one page of nominators. In this case, I need to check in which page the nominator is
|
|
239
|
+
// and if that page was claimed or not.
|
|
240
|
+
for (let page = 0; page < pageCount; page++) {
|
|
241
|
+
if ((_a = historicApi.query.staking) === null || _a === void 0 ? void 0 : _a.erasStakersPaged) {
|
|
242
|
+
const erasStakers = await historicApi.query.staking.erasStakersPaged(e, validatorStash, page);
|
|
243
|
+
const erasStakersPaged = erasStakers.unwrapOr(null);
|
|
244
|
+
if (erasStakersPaged === null || erasStakersPaged === void 0 ? void 0 : erasStakersPaged.others) {
|
|
245
|
+
for (const nominator of erasStakersPaged.others.entries()) {
|
|
246
|
+
if (nominatorStash === nominator[1].who.toString()) {
|
|
247
|
+
if (claimedRewardsPerEra.length > 0) {
|
|
248
|
+
const pageIncluded = claimedRewardsPerEra === null || claimedRewardsPerEra === void 0 ? void 0 : claimedRewardsPerEra.some((reward) => Number(reward) === Number(page));
|
|
249
|
+
if (pageIncluded) {
|
|
250
|
+
return 'claimed';
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
return 'unclaimed';
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return 'undefined';
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* This function calculates the era from which we should start checking
|
|
266
|
+
* for claimed rewards.
|
|
267
|
+
*/
|
|
268
|
+
fetchErasStart(currentEraOption, eraDepth) {
|
|
269
|
+
if (currentEraOption.isNone) {
|
|
270
|
+
throw new http_errors_1.InternalServerError('CurrentEra is None when Some was expected');
|
|
271
|
+
}
|
|
272
|
+
const currentEraNumber = currentEraOption.unwrap().toNumber();
|
|
273
|
+
const eraStart = Math.max(0, currentEraNumber - eraDepth);
|
|
274
|
+
return eraStart;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* This function verifies if the information from old calls has already been checked/used. If not,
|
|
278
|
+
* it proceeds to use it and populate the `claimedRewards` array with the eras that have been claimed.
|
|
279
|
+
* Note that data from old calls may also be empty (no results), in which case the `claimedRewards` array
|
|
280
|
+
* will only be populated with data from the new `query.staking?.claimedRewards` call
|
|
281
|
+
* (later in the main function's code).
|
|
282
|
+
*
|
|
283
|
+
* Returns a boolean flag `oldCallChecked` that indicates if the old calls have already been checked/used or not.
|
|
284
|
+
*
|
|
285
|
+
*/
|
|
286
|
+
isOldCallsChecked(oldCallChecked, claimedRewardsEras, claimedRewards, eraStart, depth, e) {
|
|
287
|
+
if (!oldCallChecked) {
|
|
288
|
+
if (claimedRewardsEras.length > 0) {
|
|
289
|
+
claimedRewards = claimedRewardsEras.map((element) => ({
|
|
290
|
+
era: element.toNumber(),
|
|
291
|
+
status: 'claimed',
|
|
292
|
+
}));
|
|
293
|
+
const claimedRewardsErasMax = claimedRewardsEras[claimedRewardsEras.length - 1].toNumber();
|
|
294
|
+
/**
|
|
295
|
+
* This check was added because old calls would sometimes return eras outside the intended range.
|
|
296
|
+
* In such cases, I need to verify if the era falls within the specific range I am checking.
|
|
297
|
+
*/
|
|
298
|
+
if (eraStart <= claimedRewardsErasMax) {
|
|
299
|
+
e = claimedRewardsErasMax + 1;
|
|
300
|
+
}
|
|
301
|
+
else if (depth == claimedRewardsEras.length) {
|
|
302
|
+
if (claimedRewardsEras[0].toNumber() == eraStart) {
|
|
303
|
+
e = eraStart + depth;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
claimedRewards = [];
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
oldCallChecked = true;
|
|
311
|
+
}
|
|
312
|
+
return [oldCallChecked, claimedRewards, e];
|
|
313
|
+
}
|
|
314
|
+
fetchClaimedInfoFromOldCalls(stakingLedger, claimedRewardsEras, claimedRewards) {
|
|
315
|
+
var _a;
|
|
316
|
+
// Checking first the old call of `lastReward` and setting as claimed only the era that
|
|
317
|
+
// is defined in the lastReward field. I do not make any assumptions for any other eras.
|
|
318
|
+
if (stakingLedger === null || stakingLedger === void 0 ? void 0 : stakingLedger.lastReward) {
|
|
319
|
+
const lastReward = stakingLedger.lastReward;
|
|
320
|
+
if (lastReward.isSome) {
|
|
321
|
+
const e = (_a = stakingLedger === null || stakingLedger === void 0 ? void 0 : stakingLedger.lastReward) === null || _a === void 0 ? void 0 : _a.unwrap().toNumber();
|
|
322
|
+
if (e) {
|
|
323
|
+
claimedRewards.push({ era: e, status: 'claimed' });
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Second check is another old call called `legacyClaimedRewards` from stakingLedger
|
|
327
|
+
}
|
|
328
|
+
else if (stakingLedger === null || stakingLedger === void 0 ? void 0 : stakingLedger.legacyClaimedRewards) {
|
|
329
|
+
claimedRewardsEras = stakingLedger === null || stakingLedger === void 0 ? void 0 : stakingLedger.legacyClaimedRewards;
|
|
330
|
+
// If none of the above are present, we try the `claimedRewards` from stakingLedger
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
claimedRewardsEras = stakingLedger === null || stakingLedger === void 0 ? void 0 : stakingLedger.claimedRewards;
|
|
334
|
+
}
|
|
335
|
+
return [claimedRewardsEras, claimedRewards];
|
|
336
|
+
}
|
|
72
337
|
}
|
|
73
338
|
exports.AccountsStakingInfoService = AccountsStakingInfoService;
|
|
74
339
|
//# sourceMappingURL=AccountsStakingInfoService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsStakingInfoService.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsStakingInfoService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AccountsStakingInfoService.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsStakingInfoService.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,3 +2,9 @@ import { Option } from '@polkadot/types';
|
|
|
2
2
|
import { AccountId, Hash, StakingLedger } from '@polkadot/types/interfaces';
|
|
3
3
|
export declare const bondedAt: (_hash: Hash, _address: string) => Promise<Option<AccountId>>;
|
|
4
4
|
export declare const ledgerAt: (_hash: Hash, _address: string) => Promise<Option<StakingLedger>>;
|
|
5
|
+
export declare const bondedAt21157800: (_hash: Hash, _address: string) => Promise<Option<AccountId>>;
|
|
6
|
+
export declare const ledgerAt21157800: (_hash: Hash, _address: string) => Promise<Option<StakingLedger>>;
|
|
7
|
+
export declare const payee21157800: (_hash: Hash, _address: string) => Promise<Option<AccountId>>;
|
|
8
|
+
export declare const bondedAt22939322: (_hash: Hash, _address: string) => Promise<Option<AccountId>>;
|
|
9
|
+
export declare const ledgerAt22939322: (_hash: Hash, _address: string) => Promise<Option<StakingLedger>>;
|
|
10
|
+
export declare const payee22939322: (_hash: Hash, _address: string) => Promise<Option<AccountId>>;
|
|
@@ -18,12 +18,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
18
18
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.ledgerAt = exports.bondedAt = void 0;
|
|
21
|
+
exports.payee22939322 = exports.ledgerAt22939322 = exports.bondedAt22939322 = exports.payee21157800 = exports.ledgerAt21157800 = exports.bondedAt21157800 = exports.ledgerAt = exports.bondedAt = void 0;
|
|
22
22
|
const http_errors_1 = require("http-errors");
|
|
23
23
|
const sanitizeNumbers_1 = require("../../sanitize/sanitizeNumbers");
|
|
24
24
|
const registries_1 = require("../../test-helpers/registries");
|
|
25
25
|
const mock_1 = require("../test-helpers/mock");
|
|
26
|
+
const stakingInfo_1 = require("../test-helpers/mock/accounts/stakingInfo");
|
|
27
|
+
const validators789629Hex_1 = require("../test-helpers/mock/data/validators789629Hex");
|
|
28
|
+
const validators21157800Hex_1 = require("../test-helpers/mock/data/validators21157800Hex");
|
|
29
|
+
const validators22939322Hex_1 = require("../test-helpers/mock/data/validators22939322Hex");
|
|
26
30
|
const stakingInfo789629_json_1 = __importDefault(require("../test-helpers/responses/accounts/stakingInfo789629.json"));
|
|
31
|
+
const stakingInfo21157800_json_1 = __importDefault(require("../test-helpers/responses/accounts/stakingInfo21157800.json"));
|
|
32
|
+
const stakingInfo21157800nominator_json_1 = __importDefault(require("../test-helpers/responses/accounts/stakingInfo21157800nominator.json"));
|
|
33
|
+
const stakingInfo22939322_json_1 = __importDefault(require("../test-helpers/responses/accounts/stakingInfo22939322.json"));
|
|
27
34
|
const AccountsStakingInfoService_1 = require("./AccountsStakingInfoService");
|
|
28
35
|
const bondedAt = (_hash, _address) => Promise.resolve().then(() => registries_1.polkadotRegistry.createType('Option<AccountId>', mock_1.testAddressController));
|
|
29
36
|
exports.bondedAt = bondedAt;
|
|
@@ -31,6 +38,7 @@ const ledgerAt = (_hash, _address) => Promise.resolve().then(() => registries_1.
|
|
|
31
38
|
exports.ledgerAt = ledgerAt;
|
|
32
39
|
const payeeAt = (_hash, _address) => Promise.resolve().then(() => registries_1.polkadotRegistry.createType('RewardDestination', 'Controller'));
|
|
33
40
|
const slashingSpansAt = (_hash, _address) => Promise.resolve().then(() => registries_1.polkadotRegistry.createType('SlashingSpans'));
|
|
41
|
+
const validatorsAt789629 = () => Promise.resolve().then(() => registries_1.polkadotRegistry.createType('Vec<AccountId32>', validators789629Hex_1.validators789629Hex));
|
|
34
42
|
const historicApi = {
|
|
35
43
|
query: {
|
|
36
44
|
staking: {
|
|
@@ -38,6 +46,10 @@ const historicApi = {
|
|
|
38
46
|
ledger: exports.ledgerAt,
|
|
39
47
|
payee: payeeAt,
|
|
40
48
|
slashingSpans: slashingSpansAt,
|
|
49
|
+
currentEra: mock_1.currentEraAt,
|
|
50
|
+
},
|
|
51
|
+
session: {
|
|
52
|
+
validators: validatorsAt789629,
|
|
41
53
|
},
|
|
42
54
|
},
|
|
43
55
|
};
|
|
@@ -46,6 +58,83 @@ const mockApi = {
|
|
|
46
58
|
at: (_hash) => historicApi,
|
|
47
59
|
};
|
|
48
60
|
const accountStakingInfoService = new AccountsStakingInfoService_1.AccountsStakingInfoService(mockApi);
|
|
61
|
+
const bondedAt21157800 = (_hash, _address) => Promise.resolve().then(() => registries_1.polkadotRegistryV1002000.createType('Option<AccountId>', mock_1.testAddressControllerPolkadot));
|
|
62
|
+
exports.bondedAt21157800 = bondedAt21157800;
|
|
63
|
+
const ledgerAt21157800 = (_hash, _address) => Promise.resolve().then(() => registries_1.polkadotRegistryV1002000.createType('Option<StakingLedger>', '0x005fa73637062be3fbfb972174a5bc85a2f6cc0350cb84aa9d657422796bfdf10b119b01640c070b119b01640c070088690500006a0500006b0500006c0500006d0500006e0500006f050000700500007105000072050000730500007405000075050000760500007705000078050000790500007a0500007b0500007c0500007d0500007e0500007f050000800500008105000082050000830500008405000085050000860500008705000088050000890500008a050000'));
|
|
64
|
+
exports.ledgerAt21157800 = ledgerAt21157800;
|
|
65
|
+
const payee21157800 = (_hash, _address) => Promise.resolve().then(() => registries_1.polkadotRegistryV1002000.createType('Option<AccountId>', mock_1.testAddressPayeePolkadot));
|
|
66
|
+
exports.payee21157800 = payee21157800;
|
|
67
|
+
const validatorsAt21157800 = () => Promise.resolve().then(() => registries_1.polkadotRegistryV1002000.createType('Vec<AccountId32>', validators21157800Hex_1.validators21157800Hex));
|
|
68
|
+
const nominations21157800 = (_hash) => Promise.resolve().then(() => registries_1.polkadotRegistryV1002000.createType('Option<PalletStakingNominations>', '0x04005fa73637062be3fbfb972174a5bc85a2f6cc0350cb84aa9d657422796bfdf16705000000'));
|
|
69
|
+
const historicApi21157800 = {
|
|
70
|
+
query: {
|
|
71
|
+
staking: {
|
|
72
|
+
bonded: exports.bondedAt21157800,
|
|
73
|
+
ledger: exports.ledgerAt21157800,
|
|
74
|
+
payee: stakingInfo_1.polkadotPayeeMockedCall,
|
|
75
|
+
slashingSpans: stakingInfo_1.polkadotSlashingSpansMockedCall,
|
|
76
|
+
claimedRewards: stakingInfo_1.polkadotClaimedRewardsMockedCall,
|
|
77
|
+
activeEra: mock_1.activeEraAt21157800,
|
|
78
|
+
currentEra: mock_1.currentEraAt21157800,
|
|
79
|
+
erasStakersOverview: stakingInfo_1.polkadotErasStakersOverviewMockedCall,
|
|
80
|
+
erasStakers: stakingInfo_1.polkadotErasStakersMockedCall,
|
|
81
|
+
nominators: null,
|
|
82
|
+
},
|
|
83
|
+
session: {
|
|
84
|
+
validators: validatorsAt21157800,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
const mockApiPolkadot21157800val = {
|
|
89
|
+
...mock_1.defaultMockApi21157800,
|
|
90
|
+
at: (_hash) => historicApi21157800,
|
|
91
|
+
};
|
|
92
|
+
const accountStakingInfoService21157800val = new AccountsStakingInfoService_1.AccountsStakingInfoService(mockApiPolkadot21157800val);
|
|
93
|
+
const mockApiPolkadot21157800nom = {
|
|
94
|
+
...mock_1.defaultMockApi21157800,
|
|
95
|
+
at: (_hash) => ({
|
|
96
|
+
...historicApi21157800,
|
|
97
|
+
query: {
|
|
98
|
+
...historicApi21157800.query,
|
|
99
|
+
staking: {
|
|
100
|
+
...historicApi21157800.query.staking,
|
|
101
|
+
nominators: nominations21157800,
|
|
102
|
+
erasStakersPaged: stakingInfo_1.polkadotErasStakersPagedMockedCall,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
}),
|
|
106
|
+
};
|
|
107
|
+
const accountStakingInfoService21157800nom = new AccountsStakingInfoService_1.AccountsStakingInfoService(mockApiPolkadot21157800nom);
|
|
108
|
+
const bondedAt22939322 = (_hash, _address) => Promise.resolve().then(() => registries_1.kusamaRegistryV1002000.createType('Option<AccountId>', mock_1.testAddressControllerKusama));
|
|
109
|
+
exports.bondedAt22939322 = bondedAt22939322;
|
|
110
|
+
const ledgerAt22939322 = (_hash, _address) => Promise.resolve().then(() => registries_1.kusamaRegistryV1002000.createType('Option<StakingLedger>', '0x6c6ed8531e6c0b882af0a42f2f23ef0a102b5d49cb5f5a24ede72d53ffce83170b7962e569db040b7962e569db0400a84719000048190000491900004a1900004b1900004c1900004d1900004e1900004f190000501900005119000052190000531900005419000055190000561900005719000058190000591900005a1900005b1900005c1900005d1900005e1900005f190000601900006119000062190000631900006419000065190000661900006719000068190000691900006a1900006b1900006c1900006d1900006e1900006f19000070190000'));
|
|
111
|
+
exports.ledgerAt22939322 = ledgerAt22939322;
|
|
112
|
+
const payee22939322 = (_hash, _address) => Promise.resolve().then(() => registries_1.kusamaRegistryV1002000.createType('Option<AccountId>', mock_1.testAddressPayeeKusama));
|
|
113
|
+
exports.payee22939322 = payee22939322;
|
|
114
|
+
const validatorsAt22939322 = () => Promise.resolve().then(() => registries_1.kusamaRegistryV1002000.createType('Vec<AccountId32>', validators22939322Hex_1.validators22939322Hex));
|
|
115
|
+
const historicApi22939322 = {
|
|
116
|
+
query: {
|
|
117
|
+
staking: {
|
|
118
|
+
bonded: exports.bondedAt22939322,
|
|
119
|
+
ledger: exports.ledgerAt22939322,
|
|
120
|
+
payee: stakingInfo_1.stakingPayeeMockedCall,
|
|
121
|
+
slashingSpans: stakingInfo_1.stakingslashingSpansMockedCall,
|
|
122
|
+
claimedRewards: stakingInfo_1.stakingClaimedRewardsMockedCall,
|
|
123
|
+
activeEra: mock_1.activeEraAt22939322,
|
|
124
|
+
currentEra: mock_1.currentEraAt22939322,
|
|
125
|
+
erasStakersOverview: stakingInfo_1.stakingerasStakersOverviewMockedCall,
|
|
126
|
+
erasStakers: stakingInfo_1.kusamaErasStakersMockedCall,
|
|
127
|
+
},
|
|
128
|
+
session: {
|
|
129
|
+
validators: validatorsAt22939322,
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
const mockApiKusama22939322 = {
|
|
134
|
+
...mock_1.defaultMockApi22939322,
|
|
135
|
+
at: (_hash) => historicApi22939322,
|
|
136
|
+
};
|
|
137
|
+
const accountStakingInfoService22939322 = new AccountsStakingInfoService_1.AccountsStakingInfoService(mockApiKusama22939322);
|
|
49
138
|
describe('AccountsStakingInfoService', () => {
|
|
50
139
|
describe('fetchAccountStakingInfo', () => {
|
|
51
140
|
it('works with a valid stash address (block 789629)', async () => {
|
|
@@ -61,6 +150,15 @@ describe('AccountsStakingInfoService', () => {
|
|
|
61
150
|
await expect(accountStakingInfoService.fetchAccountStakingInfo(mock_1.blockHash789629, mock_1.testAddress)).rejects.toStrictEqual(new http_errors_1.InternalServerError(`Staking ledger could not be found for controller address "${mock_1.testAddressController.toString()}"`));
|
|
62
151
|
historicApi.query.staking.ledger = exports.ledgerAt;
|
|
63
152
|
});
|
|
153
|
+
it('works with a valid stash account (block 22939322) and returns eras claimed that include era 6514 (when the migration occurred in Kusama)', async () => {
|
|
154
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await accountStakingInfoService22939322.fetchAccountStakingInfo(mock_1.blockHash22939322, mock_1.testAddressKusama))).toStrictEqual(stakingInfo22939322_json_1.default);
|
|
155
|
+
});
|
|
156
|
+
it('works with a validator account (block 21157800) & returns an array of claimed (including case erasStakersOverview=null & erasStakers>0, era 1419), partially claimed & unclaimed eras (Polkadot)', async () => {
|
|
157
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await accountStakingInfoService21157800val.fetchAccountStakingInfo(mock_1.blockHash21157800, mock_1.testAddressPolkadot))).toStrictEqual(stakingInfo21157800_json_1.default);
|
|
158
|
+
});
|
|
159
|
+
it('works with a nominator account (block 21157800) & returns claimed & unclaimed eras (Polkadot)', async () => {
|
|
160
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await accountStakingInfoService21157800nom.fetchAccountStakingInfo(mock_1.blockHash21157800, mock_1.testNominatorAddressPolkadot))).toStrictEqual(stakingInfo21157800nominator_json_1.default);
|
|
161
|
+
});
|
|
64
162
|
});
|
|
65
163
|
});
|
|
66
164
|
//# sourceMappingURL=AccountsStakingInfoService.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsStakingInfoService.spec.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsStakingInfoService.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;;
|
|
1
|
+
{"version":3,"file":"AccountsStakingInfoService.spec.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsStakingInfoService.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ const tempGetKeyNames = trace_1.Trace['getKeyNames'].bind(trace_1.Trace);
|
|
|
35
35
|
* HistoricApi used in order to create the correct types per the blocks runtime.
|
|
36
36
|
*/
|
|
37
37
|
const mockHistoricApi = {
|
|
38
|
-
registry: registries_1.
|
|
38
|
+
registry: registries_1.kusamaRegistryV2025,
|
|
39
39
|
};
|
|
40
40
|
/**
|
|
41
41
|
* BlocksTraceService mock
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlocksTraceService.spec.js","sourceRoot":"","sources":["../../../../src/services/blocks/BlocksTraceService.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAIxE,oEAAiE;AACjE,
|
|
1
|
+
{"version":3,"file":"BlocksTraceService.spec.js","sourceRoot":"","sources":["../../../../src/services/blocks/BlocksTraceService.spec.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAIxE,oEAAiE;AACjE,8DAAoE;AACpE,+CAAuE;AACvE,uEAAiE;AACjE,uGAAkF;AAClF,+FAA0E;AAC1E,6DAA0D;AAC1D,mCAAgC;AAEhC;;;GAGG;AACH,MAAM,eAAe,GAAG,aAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAK,CAAC,CAAC;AAEzD;;GAEG;AACH,MAAM,eAAe,GAAG;IACvB,QAAQ,EAAE,gCAAmB;CACU,CAAC;AAEzC;;GAEG;AACH,MAAM,kBAAkB,GAAG,IAAI,uCAAkB,CAAC,qBAAc,CAAC,CAAC;AAElE,SAAS,CAAC,GAAG,EAAE;IACd,aAAK,CAAC,aAAa,CAAC,GAAG,GAAG,EAAE,CAAC,sBAAQ,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,GAAG,EAAE;IACb,uCAAuC;IACvC,aAAK,CAAC,aAAa,CAAC,GAAG,eAAe,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,CAAC,IAAA,iCAAe,EAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,sBAAe,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,qBAAc,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,CACL,IAAA,iCAAe,EAAC,MAAM,kBAAkB,CAAC,UAAU,CAAC,sBAAe,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAC7F,CAAC,aAAa,CAAC,yBAAkB,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1,12 +1,26 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { u128, Vec } from '@polkadot/types';
|
|
2
|
+
import type { Compact, Option } from '@polkadot/types/codec';
|
|
2
3
|
import type { AccountId } from '@polkadot/types/interfaces/runtime';
|
|
3
|
-
import type { PalletStakingNominations, PalletStakingRewardDestination,
|
|
4
|
+
import type { PalletStakingNominations, PalletStakingRewardDestination, PalletStakingUnlockChunk } from '@polkadot/types/lookup';
|
|
4
5
|
import { IAt } from '.';
|
|
6
|
+
export type ValidatorStatus = 'claimed' | 'unclaimed' | 'partially claimed' | 'undefined';
|
|
7
|
+
export type NominatorStatus = 'claimed' | 'unclaimed' | 'undefined';
|
|
8
|
+
export interface IEraStatus<T> {
|
|
9
|
+
era: number;
|
|
10
|
+
status: T;
|
|
11
|
+
}
|
|
12
|
+
export interface IStakingLedger {
|
|
13
|
+
stash: AccountId;
|
|
14
|
+
total: Compact<u128>;
|
|
15
|
+
active: Compact<u128>;
|
|
16
|
+
unlocking: Vec<PalletStakingUnlockChunk>;
|
|
17
|
+
claimedRewards?: IEraStatus<ValidatorStatus | NominatorStatus>[];
|
|
18
|
+
}
|
|
5
19
|
export interface IAccountStakingInfo {
|
|
6
20
|
at: IAt;
|
|
7
21
|
controller: AccountId;
|
|
8
22
|
rewardDestination: Option<PalletStakingRewardDestination>;
|
|
9
23
|
numSlashingSpans: number;
|
|
10
24
|
nominations: PalletStakingNominations | null;
|
|
11
|
-
staking:
|
|
25
|
+
staking: IStakingLedger | null;
|
|
12
26
|
}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "20.0.0",
|
|
3
3
|
"name": "@substrate/api-sidecar",
|
|
4
4
|
"description": "REST service that makes it easy to interact with blockchain nodes built using Substrate's FRAME framework.",
|
|
5
5
|
"homepage": "https://github.com/paritytech/substrate-api-sidecar#readme",
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
"test:test-release": "yarn build:scripts && node scripts/build/runYarnPack.js"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@polkadot/api": "^15.2
|
|
54
|
-
"@polkadot/api-augment": "^15.2
|
|
55
|
-
"@polkadot/api-contract": "^15.2
|
|
56
|
-
"@polkadot/types": "^15.2
|
|
57
|
-
"@polkadot/types-codec": "^15.2
|
|
53
|
+
"@polkadot/api": "^15.5.2",
|
|
54
|
+
"@polkadot/api-augment": "^15.5.2",
|
|
55
|
+
"@polkadot/api-contract": "^15.5.2",
|
|
56
|
+
"@polkadot/types": "^15.5.2",
|
|
57
|
+
"@polkadot/types-codec": "^15.5.2",
|
|
58
58
|
"@polkadot/util": "^13.3.1",
|
|
59
59
|
"@polkadot/util-crypto": "^13.3.1",
|
|
60
60
|
"@substrate/calc": "^0.3.1",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@substrate/dev": "^0.9.0",
|
|
74
74
|
"@types/argparse": "2.0.17",
|
|
75
75
|
"@types/express": "^5.0.0",
|
|
76
|
-
"@types/express-serve-static-core": "^5.0.
|
|
76
|
+
"@types/express-serve-static-core": "^5.0.6",
|
|
77
77
|
"@types/http-errors": "2.0.4",
|
|
78
78
|
"@types/lru-cache": "^7.10.10",
|
|
79
79
|
"@types/morgan": "1.9.9",
|