@substrate/api-sidecar 11.1.1 → 11.3.1
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/README.md +10 -17
- package/build/package.json +22 -22
- package/build/src/chains-config/acalaControllers.d.ts +5 -0
- package/build/src/chains-config/acalaControllers.js +35 -0
- package/build/src/chains-config/acalaControllers.js.map +1 -0
- package/build/src/chains-config/calamariControllers.d.ts +5 -0
- package/build/src/chains-config/calamariControllers.js +39 -0
- package/build/src/chains-config/calamariControllers.js.map +1 -0
- package/build/src/chains-config/index.js +8 -0
- package/build/src/chains-config/index.js.map +1 -1
- package/build/src/chains-config/karuraControllers.d.ts +5 -0
- package/build/src/chains-config/karuraControllers.js +35 -0
- package/build/src/chains-config/karuraControllers.js.map +1 -0
- package/build/src/chains-config/mantaControllers.d.ts +5 -0
- package/build/src/chains-config/mantaControllers.js +39 -0
- package/build/src/chains-config/mantaControllers.js.map +1 -0
- package/build/src/chains-config/metadata-consts/acalaConsts.d.ts +2 -0
- package/build/src/chains-config/metadata-consts/acalaConsts.js +11 -0
- package/build/src/chains-config/metadata-consts/acalaConsts.js.map +1 -0
- package/build/src/chains-config/metadata-consts/calamariConsts.d.ts +2 -0
- package/build/src/chains-config/metadata-consts/calamariConsts.js +11 -0
- package/build/src/chains-config/metadata-consts/calamariConsts.js.map +1 -0
- package/build/src/chains-config/metadata-consts/index.js +12 -0
- package/build/src/chains-config/metadata-consts/index.js.map +1 -1
- package/build/src/chains-config/metadata-consts/karuraConsts.d.ts +2 -0
- package/build/src/chains-config/metadata-consts/karuraConsts.js +14 -0
- package/build/src/chains-config/metadata-consts/karuraConsts.js.map +1 -0
- package/build/src/chains-config/metadata-consts/mantaConsts.d.ts +2 -0
- package/build/src/chains-config/metadata-consts/mantaConsts.js +11 -0
- package/build/src/chains-config/metadata-consts/mantaConsts.js.map +1 -0
- package/build/src/chains-config/metadata-consts/polkadotConsts.js +1 -1
- package/build/src/chains-config/metadata-consts/polkadotConsts.js.map +1 -1
- package/build/src/controllers/paras/ParasController.js +13 -7
- package/build/src/controllers/paras/ParasController.js.map +1 -1
- package/build/src/controllers/transaction/TransactionMaterialController.d.ts +8 -0
- package/build/src/controllers/transaction/TransactionMaterialController.js +38 -3
- package/build/src/controllers/transaction/TransactionMaterialController.js.map +1 -1
- package/build/src/services/accounts/AccountsStakingPayoutsService.d.ts +11 -5
- package/build/src/services/accounts/AccountsStakingPayoutsService.js +16 -15
- package/build/src/services/accounts/AccountsStakingPayoutsService.js.map +1 -1
- package/build/src/services/accounts/AccountsStakingPayoutsService.spec.d.ts +1 -0
- package/build/src/services/accounts/AccountsStakingPayoutsService.spec.js +152 -0
- package/build/src/services/accounts/AccountsStakingPayoutsService.spec.js.map +1 -0
- package/build/src/services/pallets/PalletsStakingProgressService.js +22 -21
- package/build/src/services/pallets/PalletsStakingProgressService.js.map +1 -1
- package/build/src/services/pallets/PalletsStakingProgressService.spec.js +29 -26
- package/build/src/services/pallets/PalletsStakingProgressService.spec.js.map +1 -1
- package/build/src/services/paras/ParasService.d.ts +12 -2
- package/build/src/services/paras/ParasService.js +76 -39
- package/build/src/services/paras/ParasService.js.map +1 -1
- package/build/src/services/paras/ParasService.spec.js +37 -35
- package/build/src/services/paras/ParasService.spec.js.map +1 -1
- package/build/src/services/test-helpers/mock/accounts/deriveNominators.d.ts +10 -0
- package/build/src/services/test-helpers/mock/accounts/deriveNominators.js +70 -0
- package/build/src/services/test-helpers/mock/accounts/deriveNominators.js.map +1 -0
- package/build/src/services/test-helpers/mock/accounts/deriveValidators.d.ts +18 -0
- package/build/src/services/test-helpers/mock/accounts/deriveValidators.js +28 -0
- package/build/src/services/test-helpers/mock/accounts/deriveValidators.js.map +1 -0
- package/build/src/services/test-helpers/mock/accounts/eraRewardPoints.d.ts +6 -0
- package/build/src/services/test-helpers/mock/accounts/eraRewardPoints.js +17 -0
- package/build/src/services/test-helpers/mock/accounts/eraRewardPoints.js.map +1 -0
- package/build/src/services/test-helpers/mock/accounts/index.d.ts +4 -0
- package/build/src/services/test-helpers/mock/accounts/index.js +17 -0
- package/build/src/services/test-helpers/mock/accounts/index.js.map +1 -0
- package/build/src/services/test-helpers/mock/accounts/ledger.d.ts +8 -0
- package/build/src/services/test-helpers/mock/accounts/ledger.js +19 -0
- package/build/src/services/test-helpers/mock/accounts/ledger.js.map +1 -0
- package/build/src/services/test-helpers/responses/accounts/stakingPayout.json +33 -0
- package/build/src/services/transaction/TransactionMaterialService.d.ts +2 -1
- package/build/src/services/transaction/TransactionMaterialService.js +4 -3
- package/build/src/services/transaction/TransactionMaterialService.js.map +1 -1
- package/build/src/services/transaction/TransactionMaterialService.spec.js +22 -2
- package/build/src/services/transaction/TransactionMaterialService.spec.js.map +1 -1
- package/build/src/test-helpers/metadata/polkadotV9122Metadata.d.ts +1 -0
- package/build/src/test-helpers/metadata/polkadotV9122Metadata.js +5 -0
- package/build/src/test-helpers/metadata/polkadotV9122Metadata.js.map +1 -0
- package/build/src/test-helpers/registries/polkadotRegistry.d.ts +4 -0
- package/build/src/test-helpers/registries/polkadotRegistry.js +6 -1
- package/build/src/test-helpers/registries/polkadotRegistry.js.map +1 -1
- package/build/src/types/responses/Paras.d.ts +9 -6
- package/build/src/types/responses/TransactionMaterial.d.ts +2 -1
- package/package.json +22 -22
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const Log_1 = require("../../logging/Log");
|
|
6
7
|
const services_1 = require("../../services");
|
|
7
8
|
const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
8
9
|
/**
|
|
@@ -44,16 +45,50 @@ class TransactionMaterialController extends AbstractController_1.default {
|
|
|
44
45
|
* @param _req Express Request
|
|
45
46
|
* @param res Express Response
|
|
46
47
|
*/
|
|
47
|
-
this.getTransactionMaterial = async ({ query: { noMeta, at } }, res) => {
|
|
48
|
+
this.getTransactionMaterial = async ({ query: { noMeta, at, metadata } }, res) => {
|
|
48
49
|
const hash = await this.getHashFromAt(at);
|
|
49
|
-
const
|
|
50
|
-
TransactionMaterialController.sanitizedSend(res, await this.service.fetchTransactionMaterial(hash,
|
|
50
|
+
const metadataArg = this.parseMetadataArgs(noMeta, metadata);
|
|
51
|
+
TransactionMaterialController.sanitizedSend(res, await this.service.fetchTransactionMaterial(hash, metadataArg));
|
|
51
52
|
};
|
|
52
53
|
this.initRoutes();
|
|
53
54
|
}
|
|
54
55
|
initRoutes() {
|
|
55
56
|
this.safeMountAsyncGetHandlers([['', this.getTransactionMaterial]]);
|
|
56
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* The metadata args have two options. `json`, and `scale`.
|
|
60
|
+
*
|
|
61
|
+
* @param noMeta
|
|
62
|
+
* @param metadata
|
|
63
|
+
*/
|
|
64
|
+
parseMetadataArgs(noMeta, metadata) {
|
|
65
|
+
/**
|
|
66
|
+
* Checks to see if the `metadata` query param is inputted, if it isnt,
|
|
67
|
+
* it will default to the old behavior. This is to be removed once after
|
|
68
|
+
* the `noMeta` query param is fully deprecated.
|
|
69
|
+
*/
|
|
70
|
+
if (metadata) {
|
|
71
|
+
switch (metadata) {
|
|
72
|
+
case 'json':
|
|
73
|
+
return 'json';
|
|
74
|
+
case 'scale':
|
|
75
|
+
return 'scale';
|
|
76
|
+
default:
|
|
77
|
+
throw new Error('Invalid inputted value for the `metadata` query param.');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (noMeta) {
|
|
81
|
+
Log_1.Log.logger.warn('`noMeta` query param will be deprecated in sidecar v13, and replaced with `metadata` please migrate');
|
|
82
|
+
switch (noMeta) {
|
|
83
|
+
case 'true':
|
|
84
|
+
return false;
|
|
85
|
+
case 'false':
|
|
86
|
+
return 'scale';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// default behavior until `noMeta` is deprecated, then false will be default
|
|
90
|
+
return 'scale';
|
|
91
|
+
}
|
|
57
92
|
}
|
|
58
93
|
exports.default = TransactionMaterialController;
|
|
59
94
|
//# sourceMappingURL=TransactionMaterialController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionMaterialController.js","sourceRoot":"","sources":["../../../../src/controllers/transaction/TransactionMaterialController.ts"],"names":[],"mappings":";;;;;AAGA,6CAA4D;AAC5D,+EAAuD;
|
|
1
|
+
{"version":3,"file":"TransactionMaterialController.js","sourceRoot":"","sources":["../../../../src/controllers/transaction/TransactionMaterialController.ts"],"names":[],"mappings":";;;;;AAGA,2CAAwC;AACxC,6CAA4D;AAC5D,+EAAuD;AAIvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAqB,6BAA8B,SAAQ,4BAA8C;IACxG,YAAY,GAAe;QAC1B,KAAK,CAAC,GAAG,EAAE,uBAAuB,EAAE,IAAI,qCAA0B,CAAC,GAAG,CAAC,CAAC,CAAC;QAQ1E;;;;;WAKG;QACK,2BAAsB,GAAmB,KAAK,EACrD,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EACnC,GAAG,EACa,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAE1C,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAE7D,6BAA6B,CAAC,aAAa,CAC1C,GAAG,EACH,MAAM,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,EAAE,WAAW,CAAC,CAC9D,CAAC;QACH,CAAC,CAAC;QAzBD,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAES,UAAU;QACnB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAsBD;;;;;OAKG;IACK,iBAAiB,CACxB,MAAe,EACf,QAAiB;QAEjB;;;;WAIG;QACH,IAAI,QAAQ,EAAE;YACb,QAAQ,QAAQ,EAAE;gBACjB,KAAK,MAAM;oBACV,OAAO,MAAM,CAAC;gBACf,KAAK,OAAO;oBACX,OAAO,OAAO,CAAC;gBAChB;oBACC,MAAM,IAAI,KAAK,CACd,wDAAwD,CACxD,CAAC;aACH;SACD;QAED,IAAI,MAAM,EAAE;YACX,SAAG,CAAC,MAAM,CAAC,IAAI,CACd,qGAAqG,CACrG,CAAC;YACF,QAAQ,MAAM,EAAE;gBACf,KAAK,MAAM;oBACV,OAAO,KAAK,CAAC;gBACd,KAAK,OAAO;oBACX,OAAO,OAAO,CAAC;aAChB;SACD;QAED,4EAA4E;QAC5E,OAAO,OAAO,CAAC;IAChB,CAAC;CACD;AAzED,gDAyEC"}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import { ApiPromise } from '@polkadot/api';
|
|
2
|
+
import { ApiDecoration } from '@polkadot/api/types';
|
|
2
3
|
import { DeriveEraExposure, DeriveEraExposureNominating } from '@polkadot/api-derive/staking/types';
|
|
3
4
|
import { Option } from '@polkadot/types';
|
|
4
|
-
import { BalanceOf, BlockHash, EraIndex,
|
|
5
|
+
import { BalanceOf, BlockHash, EraIndex, Perbill, StakingLedger } from '@polkadot/types/interfaces';
|
|
6
|
+
import { PalletStakingEraRewardPoints } from '@polkadot/types/lookup';
|
|
5
7
|
import { IAccountStakingPayouts, IEraPayouts } from '../../types/responses';
|
|
6
8
|
import { AbstractService } from '../AbstractService';
|
|
7
9
|
/**
|
|
8
10
|
* General information about an era, in tuple form because we initially get it
|
|
9
11
|
* by destructuring a Promise.all(...)
|
|
10
12
|
*/
|
|
11
|
-
declare type IErasGeneral = [
|
|
13
|
+
declare type IErasGeneral = [
|
|
14
|
+
DeriveEraExposure,
|
|
15
|
+
PalletStakingEraRewardPoints,
|
|
16
|
+
Option<BalanceOf>
|
|
17
|
+
];
|
|
12
18
|
/**
|
|
13
19
|
* Commission and staking ledger of a validator
|
|
14
20
|
*/
|
|
@@ -21,7 +27,7 @@ interface ICommissionAndLedger {
|
|
|
21
27
|
*/
|
|
22
28
|
interface IEraData {
|
|
23
29
|
deriveEraExposure: DeriveEraExposure;
|
|
24
|
-
eraRewardPoints:
|
|
30
|
+
eraRewardPoints: PalletStakingEraRewardPoints;
|
|
25
31
|
erasValidatorRewardOption: Option<BalanceOf>;
|
|
26
32
|
exposuresWithCommission?: (ICommissionAndLedger & {
|
|
27
33
|
validatorId: string;
|
|
@@ -47,7 +53,7 @@ export declare class AccountsStakingPayoutsService extends AbstractService {
|
|
|
47
53
|
* @param startEra first era to get data for
|
|
48
54
|
* @param era the last era to get data for
|
|
49
55
|
*/
|
|
50
|
-
fetchAllErasGeneral(api: ApiPromise,
|
|
56
|
+
fetchAllErasGeneral(api: ApiPromise, historicApi: ApiDecoration<'promise'>, startEra: number, era: number): Promise<IErasGeneral[]>;
|
|
51
57
|
/**
|
|
52
58
|
* Fetch the commission & staking ledger for each `validatorId` in `deriveErasExposures`.
|
|
53
59
|
*
|
|
@@ -57,7 +63,7 @@ export declare class AccountsStakingPayoutsService extends AbstractService {
|
|
|
57
63
|
* @param startEra first era to get data for
|
|
58
64
|
* @param deriveErasExposures exposures per era for `address`
|
|
59
65
|
*/
|
|
60
|
-
fetchAllErasCommissions(
|
|
66
|
+
fetchAllErasCommissions(historicApi: ApiDecoration<'promise'>, address: string, startEra: number, deriveErasExposures: DeriveEraExposure[]): Promise<ICommissionAndLedger[][]>;
|
|
61
67
|
/**
|
|
62
68
|
* Derive all the payouts for `address` at `era`.
|
|
63
69
|
*
|
|
@@ -16,9 +16,10 @@ class AccountsStakingPayoutsService extends AbstractService_1.AbstractService {
|
|
|
16
16
|
*/
|
|
17
17
|
async fetchAccountStakingPayout(hash, address, depth, era, unclaimedOnly, currentEra) {
|
|
18
18
|
const { api } = this;
|
|
19
|
+
const historicApi = await api.at(hash);
|
|
19
20
|
const [{ number }, historyDepth] = await Promise.all([
|
|
20
21
|
api.rpc.chain.getHeader(hash),
|
|
21
|
-
|
|
22
|
+
historicApi.query.staking.historyDepth(),
|
|
22
23
|
]);
|
|
23
24
|
// Information is kept for eras in `[current_era - history_depth; current_era]`
|
|
24
25
|
if (depth > historyDepth.toNumber()) {
|
|
@@ -37,9 +38,9 @@ class AccountsStakingPayoutsService extends AbstractService_1.AbstractService {
|
|
|
37
38
|
// User friendly - we don't error if the user specified era & depth combo <= 0, instead just start at 0
|
|
38
39
|
const startEra = Math.max(0, era - (depth - 1));
|
|
39
40
|
// Fetch general data about the era
|
|
40
|
-
const allErasGeneral = await this.fetchAllErasGeneral(api,
|
|
41
|
+
const allErasGeneral = await this.fetchAllErasGeneral(api, historicApi, startEra, era);
|
|
41
42
|
// With the general data, we can now fetch the commission of each validator `address` nominates
|
|
42
|
-
const allErasCommissions = await this.fetchAllErasCommissions(
|
|
43
|
+
const allErasCommissions = await this.fetchAllErasCommissions(historicApi, address, startEra,
|
|
43
44
|
// Create an array of `DeriveEraExposure`
|
|
44
45
|
allErasGeneral.map((eraGeneral) => eraGeneral[0]));
|
|
45
46
|
// Group together data by Era so we can easily associate parts that are used congruently downstream
|
|
@@ -59,7 +60,7 @@ class AccountsStakingPayoutsService extends AbstractService_1.AbstractService {
|
|
|
59
60
|
eraRewardPoints,
|
|
60
61
|
erasValidatorRewardOption,
|
|
61
62
|
exposuresWithCommission,
|
|
62
|
-
eraIndex:
|
|
63
|
+
eraIndex: historicApi.registry.createType('EraIndex', idx + startEra),
|
|
63
64
|
};
|
|
64
65
|
});
|
|
65
66
|
return {
|
|
@@ -75,14 +76,14 @@ class AccountsStakingPayoutsService extends AbstractService_1.AbstractService {
|
|
|
75
76
|
* @param startEra first era to get data for
|
|
76
77
|
* @param era the last era to get data for
|
|
77
78
|
*/
|
|
78
|
-
async fetchAllErasGeneral(api,
|
|
79
|
+
async fetchAllErasGeneral(api, historicApi, startEra, era) {
|
|
79
80
|
const allDeriveQuerys = [];
|
|
80
81
|
for (let e = startEra; e <= era; e += 1) {
|
|
81
|
-
const eraIndex =
|
|
82
|
+
const eraIndex = historicApi.registry.createType('EraIndex', e);
|
|
82
83
|
const eraGeneralTuple = Promise.all([
|
|
83
84
|
api.derive.staking.eraExposure(eraIndex),
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
historicApi.query.staking.erasRewardPoints(eraIndex),
|
|
86
|
+
historicApi.query.staking.erasValidatorReward(eraIndex),
|
|
86
87
|
]);
|
|
87
88
|
allDeriveQuerys.push(eraGeneralTuple);
|
|
88
89
|
}
|
|
@@ -97,7 +98,7 @@ class AccountsStakingPayoutsService extends AbstractService_1.AbstractService {
|
|
|
97
98
|
* @param startEra first era to get data for
|
|
98
99
|
* @param deriveErasExposures exposures per era for `address`
|
|
99
100
|
*/
|
|
100
|
-
fetchAllErasCommissions(
|
|
101
|
+
fetchAllErasCommissions(historicApi, address, startEra, deriveErasExposures) {
|
|
101
102
|
// Cache StakingLedger to reduce redundant queries to node
|
|
102
103
|
const validatorLedgerCache = {};
|
|
103
104
|
const allErasCommissions = deriveErasExposures.map((deriveEraExposure, idx) => {
|
|
@@ -106,7 +107,7 @@ class AccountsStakingPayoutsService extends AbstractService_1.AbstractService {
|
|
|
106
107
|
if (!nominatedExposures) {
|
|
107
108
|
return [];
|
|
108
109
|
}
|
|
109
|
-
const singleEraCommissions = nominatedExposures.map(({ validatorId }) => this.fetchCommissionAndLedger(
|
|
110
|
+
const singleEraCommissions = nominatedExposures.map(({ validatorId }) => this.fetchCommissionAndLedger(historicApi, validatorId, currEra, validatorLedgerCache));
|
|
110
111
|
return Promise.all(singleEraCommissions);
|
|
111
112
|
});
|
|
112
113
|
return Promise.all(allErasCommissions);
|
|
@@ -181,18 +182,18 @@ class AccountsStakingPayoutsService extends AbstractService_1.AbstractService {
|
|
|
181
182
|
* @param hash `BlockHash` to make call at
|
|
182
183
|
* @param validatorLedgerCache object mapping validatorId => StakingLedger to limit redundant queries
|
|
183
184
|
*/
|
|
184
|
-
async fetchCommissionAndLedger(
|
|
185
|
+
async fetchCommissionAndLedger(historicApi, validatorId, era, validatorLedgerCache) {
|
|
185
186
|
let commission;
|
|
186
187
|
let validatorLedger;
|
|
187
188
|
if (validatorId in validatorLedgerCache) {
|
|
188
189
|
validatorLedger = validatorLedgerCache[validatorId];
|
|
189
|
-
const prefs = await
|
|
190
|
+
const prefs = await historicApi.query.staking.erasValidatorPrefs(era, validatorId);
|
|
190
191
|
commission = prefs.commission.unwrap();
|
|
191
192
|
}
|
|
192
193
|
else {
|
|
193
194
|
const [prefs, validatorControllerOption] = await Promise.all([
|
|
194
|
-
|
|
195
|
-
|
|
195
|
+
historicApi.query.staking.erasValidatorPrefs(era, validatorId),
|
|
196
|
+
historicApi.query.staking.bonded(validatorId),
|
|
196
197
|
]);
|
|
197
198
|
commission = prefs.commission.unwrap();
|
|
198
199
|
if (validatorControllerOption.isNone) {
|
|
@@ -200,7 +201,7 @@ class AccountsStakingPayoutsService extends AbstractService_1.AbstractService {
|
|
|
200
201
|
commission,
|
|
201
202
|
};
|
|
202
203
|
}
|
|
203
|
-
const validatorLedgerOption = await
|
|
204
|
+
const validatorLedgerOption = await historicApi.query.staking.ledger(validatorControllerOption.unwrap());
|
|
204
205
|
if (validatorLedgerOption.isNone) {
|
|
205
206
|
return {
|
|
206
207
|
commission,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsStakingPayoutsService.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsStakingPayoutsService.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AccountsStakingPayoutsService.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsStakingPayoutsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const http_errors_1 = require("http-errors");
|
|
7
|
+
const sanitizeNumbers_1 = require("../../sanitize/sanitizeNumbers");
|
|
8
|
+
const registries_1 = require("../../test-helpers/registries");
|
|
9
|
+
const mock_1 = require("../test-helpers/mock");
|
|
10
|
+
const accounts_1 = require("../test-helpers/mock/accounts");
|
|
11
|
+
const stakingPayout_json_1 = __importDefault(require("../test-helpers/responses/accounts/stakingPayout.json"));
|
|
12
|
+
const AccountsStakingPayoutsService_1 = require("./AccountsStakingPayoutsService");
|
|
13
|
+
/**
|
|
14
|
+
* Addresses and data below were taken from era 533 around block ~7,760,000,
|
|
15
|
+
* on runtime v9122 Polkadot.
|
|
16
|
+
*
|
|
17
|
+
* The real world data has been reduced to fit the unit tests and act as mock data.
|
|
18
|
+
* This test suite also uses polkadotRegistryV9122
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Acts as a placeholder variable for some tests where the era isn't an instrumental
|
|
22
|
+
* factor to the test logic.
|
|
23
|
+
*/
|
|
24
|
+
const era = registries_1.polkadotRegistryV9122.createType('EraIndex', 532);
|
|
25
|
+
const historyDepthAt = () => Promise.resolve().then(() => {
|
|
26
|
+
return registries_1.polkadotRegistryV9122.createType('u32', 84);
|
|
27
|
+
});
|
|
28
|
+
const erasRewardPointsAt = (_eraIndex) => Promise.resolve().then(() => {
|
|
29
|
+
return registries_1.polkadotRegistryV9122.createType('PalletStakingEraRewardPoints', accounts_1.mockEraRewardPoints);
|
|
30
|
+
});
|
|
31
|
+
const erasValidatorRewardAt = (_eraIndex) => Promise.resolve().then(() => {
|
|
32
|
+
return registries_1.polkadotRegistryV9122.createType('Option<BalanceOf>', 2426740332127971);
|
|
33
|
+
});
|
|
34
|
+
const erasValidatorPrefsAt = (_era, _validatorId) => Promise.resolve().then(() => {
|
|
35
|
+
return registries_1.polkadotRegistryV9122.createType('PalletStakingValidatorPrefs', {
|
|
36
|
+
commission: 10000000,
|
|
37
|
+
blocked: false,
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
const bondedAt = (_validatorId) => Promise.resolve().then(() => {
|
|
41
|
+
return registries_1.polkadotRegistryV9122.createType('Option<AccountId32>', '1ZMbuCR3QiatxRsQdNnJYgydn3CWV4PELcTzpH4TNoNjxno');
|
|
42
|
+
});
|
|
43
|
+
const ledgerAt = (_validatorId) => Promise.resolve().then(() => {
|
|
44
|
+
return registries_1.polkadotRegistryV9122.createType('Option<PalletStakingStakingLedger>', accounts_1.mockLedger);
|
|
45
|
+
});
|
|
46
|
+
const deriveEraExposure = (_eraIndex) => Promise.resolve().then(() => {
|
|
47
|
+
return {
|
|
48
|
+
era,
|
|
49
|
+
nominators: accounts_1.mockDeriveNominatedExposure,
|
|
50
|
+
validators: accounts_1.mockDeriveValidatorExposure,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
const mockHistoricApi = {
|
|
54
|
+
registry: registries_1.polkadotRegistryV9122,
|
|
55
|
+
query: {
|
|
56
|
+
staking: {
|
|
57
|
+
ledger: ledgerAt,
|
|
58
|
+
erasRewardPoints: erasRewardPointsAt,
|
|
59
|
+
erasValidatorReward: erasValidatorRewardAt,
|
|
60
|
+
historyDepth: historyDepthAt,
|
|
61
|
+
erasValidatorPrefs: erasValidatorPrefsAt,
|
|
62
|
+
bonded: bondedAt,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
const mockApi = {
|
|
67
|
+
...mock_1.defaultMockApi,
|
|
68
|
+
derive: {
|
|
69
|
+
staking: {
|
|
70
|
+
eraExposure: deriveEraExposure,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
at: (_hash) => mockHistoricApi,
|
|
74
|
+
};
|
|
75
|
+
const stakingPayoutsService = new AccountsStakingPayoutsService_1.AccountsStakingPayoutsService(mockApi);
|
|
76
|
+
describe('AccountsStakingPayoutsService', () => {
|
|
77
|
+
/**
|
|
78
|
+
* These are the two addresses we test the validator and nominator cases on.
|
|
79
|
+
*/
|
|
80
|
+
const nominator = '15j4dg5GzsL1bw2U2AWgeyAk6QTxq43V7ZPbXdAmbVLjvDCK';
|
|
81
|
+
const validator = '12JZr1HgK8w6zsbBj6oAEVRkvisn8j3MrkXugqtvc4E8uwLo';
|
|
82
|
+
const blockHash = registries_1.polkadotRegistryV9122.createType('BlockHash', '0x7b713de604a99857f6c25eacc115a4f28d2611a23d9ddff99ab0e4f1c17a8578');
|
|
83
|
+
let derivedExposure;
|
|
84
|
+
beforeAll(async () => {
|
|
85
|
+
derivedExposure = await deriveEraExposure(era);
|
|
86
|
+
});
|
|
87
|
+
describe('Correct succesfull responses', () => {
|
|
88
|
+
it('Should work when ApiPromise works', async () => {
|
|
89
|
+
const res = await stakingPayoutsService.fetchAccountStakingPayout(blockHash, nominator, 1, 533, true, 534);
|
|
90
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(res)).toStrictEqual(stakingPayout_json_1.default);
|
|
91
|
+
});
|
|
92
|
+
it('Should work when unclaimed is false', async () => {
|
|
93
|
+
const res = await stakingPayoutsService.fetchAccountStakingPayout(blockHash, nominator, 1, 533, false, 534);
|
|
94
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(res)).toStrictEqual(stakingPayout_json_1.default);
|
|
95
|
+
});
|
|
96
|
+
it('Should return the correct era rewards for `extractTotalValidatorRewardPoints`', async () => {
|
|
97
|
+
const rewards = await erasRewardPointsAt(era);
|
|
98
|
+
const res = stakingPayoutsService['extractTotalValidatorRewardPoints'](rewards, validator);
|
|
99
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(res)).toBe('3360');
|
|
100
|
+
});
|
|
101
|
+
it('`extractExposure` should return the correct value when the address is a nominator', () => {
|
|
102
|
+
const res = stakingPayoutsService['extractExposure'](nominator, validator, derivedExposure);
|
|
103
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(res)).toStrictEqual({
|
|
104
|
+
nominatorExposure: '33223051661066608',
|
|
105
|
+
totalExposure: '33223251661066608',
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
it('`extractExposure` should return the correct value when the address is a validator', () => {
|
|
109
|
+
const res = stakingPayoutsService['extractExposure'](validator, validator, derivedExposure);
|
|
110
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(res)).toStrictEqual({
|
|
111
|
+
nominatorExposure: '200000000000',
|
|
112
|
+
totalExposure: '33223251661066608',
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
it('`deriveNominatedExposures` should return the correct value when address is a validator', () => {
|
|
116
|
+
const res = stakingPayoutsService['deriveNominatedExposures']('12JZr1HgK8w6zsbBj6oAEVRkvisn8j3MrkXugqtvc4E8uwLo', derivedExposure);
|
|
117
|
+
const expectedResult = [
|
|
118
|
+
{
|
|
119
|
+
validatorId: '1HDgY7vpDjafR5NM8dbwm1b3Rrs4zATuSCHHbe7YgpKUKFw',
|
|
120
|
+
validatorIndex: '0',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
validatorId: '12JZr1HgK8w6zsbBj6oAEVRkvisn8j3MrkXugqtvc4E8uwLo',
|
|
124
|
+
validatorIndex: '9999',
|
|
125
|
+
},
|
|
126
|
+
];
|
|
127
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(res)).toStrictEqual(expectedResult);
|
|
128
|
+
});
|
|
129
|
+
it('`deriveNominatedExposures` should return the correct value when the address is a nominator', () => {
|
|
130
|
+
const res = stakingPayoutsService['deriveNominatedExposures'](nominator, derivedExposure);
|
|
131
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(res)).toStrictEqual(accounts_1.mockDeriveNominatedExposure[nominator]);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe('Correct errors', () => {
|
|
135
|
+
it('Should throw an error when the depth is greater than the historyDepth', () => {
|
|
136
|
+
const serviceCall = async () => {
|
|
137
|
+
await stakingPayoutsService.fetchAccountStakingPayout(blockHash, nominator, 85, 533, true, 534);
|
|
138
|
+
};
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
140
|
+
expect(serviceCall()).rejects.toThrow(new http_errors_1.BadRequest('Must specify a depth less than history_depth'));
|
|
141
|
+
});
|
|
142
|
+
it('Should throw an error inputted era and historydepth is invalid', () => {
|
|
143
|
+
const serviceCall = async () => {
|
|
144
|
+
await stakingPayoutsService.fetchAccountStakingPayout(blockHash, nominator, 1, 400, true, 534);
|
|
145
|
+
};
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
147
|
+
expect(serviceCall()).rejects.toThrow(new http_errors_1.BadRequest('Must specify era and depth such that era - (depth - 1) is less ' +
|
|
148
|
+
'than or equal to current_era - history_depth.'));
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=AccountsStakingPayoutsService.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountsStakingPayoutsService.spec.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsStakingPayoutsService.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,10 +16,11 @@ class PalletsStakingProgressService extends AbstractService_1.AbstractService {
|
|
|
16
16
|
async derivePalletStakingProgress(hash) {
|
|
17
17
|
var _a, _b;
|
|
18
18
|
const { api } = this;
|
|
19
|
+
const historicApi = await api.at(hash);
|
|
19
20
|
const [validatorCount, forceEra, validators, { number }] = await Promise.all([
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
historicApi.query.staking.validatorCount(),
|
|
22
|
+
historicApi.query.staking.forceEra(),
|
|
23
|
+
historicApi.query.session.validators(),
|
|
23
24
|
api.rpc.chain.getHeader(hash),
|
|
24
25
|
]);
|
|
25
26
|
let eraElectionStatus;
|
|
@@ -29,11 +30,11 @@ class PalletsStakingProgressService extends AbstractService_1.AbstractService {
|
|
|
29
30
|
* runtime less than v0.8.30 it will return a successful result. If it doesn't
|
|
30
31
|
* we do nothing and let `eraElectionStatus` stay undefined.
|
|
31
32
|
*/
|
|
32
|
-
if (
|
|
33
|
-
eraElectionStatus = await
|
|
33
|
+
if (historicApi.query.staking.eraElectionStatus) {
|
|
34
|
+
eraElectionStatus = await historicApi.query.staking.eraElectionStatus();
|
|
34
35
|
}
|
|
35
|
-
const { eraLength, eraProgress, sessionLength, sessionProgress, activeEra, } = await this.deriveSessionAndEraProgress(
|
|
36
|
-
const unappliedSlashesAtActiveEra = await
|
|
36
|
+
const { eraLength, eraProgress, sessionLength, sessionProgress, activeEra, } = await this.deriveSessionAndEraProgress(historicApi);
|
|
37
|
+
const unappliedSlashesAtActiveEra = await historicApi.query.staking.unappliedSlashes(activeEra);
|
|
37
38
|
const currentBlockNumber = number.toBn();
|
|
38
39
|
const nextSession = sessionLength
|
|
39
40
|
.sub(sessionProgress)
|
|
@@ -58,7 +59,7 @@ class PalletsStakingProgressService extends AbstractService_1.AbstractService {
|
|
|
58
59
|
const nextActiveEra = forceEra.isForceAlways
|
|
59
60
|
? nextSession // there is a new era every session
|
|
60
61
|
: eraLength.sub(eraProgress).add(currentBlockNumber); // the nextActiveEra is at the end of this era
|
|
61
|
-
const electionLookAhead = await this.deriveElectionLookAhead(api, hash);
|
|
62
|
+
const electionLookAhead = await this.deriveElectionLookAhead(api, historicApi, hash);
|
|
62
63
|
const nextCurrentEra = nextActiveEra
|
|
63
64
|
.sub(currentBlockNumber)
|
|
64
65
|
.sub(sessionLength)
|
|
@@ -97,26 +98,26 @@ class PalletsStakingProgressService extends AbstractService_1.AbstractService {
|
|
|
97
98
|
* @param api ApiPromise with ensured metadata
|
|
98
99
|
* @param hash `BlockHash` to make call at
|
|
99
100
|
*/
|
|
100
|
-
async deriveSessionAndEraProgress(
|
|
101
|
+
async deriveSessionAndEraProgress(historicApi) {
|
|
101
102
|
const [currentSlot, epochIndex, genesisSlot, currentIndex, activeEraOption,] = await Promise.all([
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
historicApi.query.babe.currentSlot(),
|
|
104
|
+
historicApi.query.babe.epochIndex(),
|
|
105
|
+
historicApi.query.babe.genesisSlot(),
|
|
106
|
+
historicApi.query.session.currentIndex(),
|
|
107
|
+
historicApi.query.staking.activeEra(),
|
|
107
108
|
]);
|
|
108
109
|
if (activeEraOption.isNone) {
|
|
109
110
|
// TODO refactor to newer error type
|
|
110
111
|
throw new http_errors_1.InternalServerError('ActiveEra is None when Some was expected.');
|
|
111
112
|
}
|
|
112
113
|
const { index: activeEra } = activeEraOption.unwrap();
|
|
113
|
-
const activeEraStartSessionIndexOption = await
|
|
114
|
+
const activeEraStartSessionIndexOption = await historicApi.query.staking.erasStartSessionIndex(activeEra);
|
|
114
115
|
if (activeEraStartSessionIndexOption.isNone) {
|
|
115
116
|
throw new http_errors_1.InternalServerError('EraStartSessionIndex is None when Some was expected.');
|
|
116
117
|
}
|
|
117
118
|
const activeEraStartSessionIndex = activeEraStartSessionIndexOption.unwrap();
|
|
118
|
-
const { epochDuration: sessionLength } =
|
|
119
|
-
const eraLength =
|
|
119
|
+
const { epochDuration: sessionLength } = historicApi.consts.babe;
|
|
120
|
+
const eraLength = historicApi.consts.staking.sessionsPerEra.mul(sessionLength);
|
|
120
121
|
const epochStartSlot = epochIndex.mul(sessionLength).add(genesisSlot);
|
|
121
122
|
const sessionProgress = currentSlot.sub(epochStartSlot);
|
|
122
123
|
const eraProgress = currentIndex
|
|
@@ -141,12 +142,12 @@ class PalletsStakingProgressService extends AbstractService_1.AbstractService {
|
|
|
141
142
|
* @param api ApiPromise with ensured metadata
|
|
142
143
|
* @param hash `BlockHash` to make call at
|
|
143
144
|
*/
|
|
144
|
-
async deriveElectionLookAhead(api, hash) {
|
|
145
|
-
if (
|
|
146
|
-
return
|
|
145
|
+
async deriveElectionLookAhead(api, historicApi, hash) {
|
|
146
|
+
if (historicApi.consts.staking.electionLookahead) {
|
|
147
|
+
return historicApi.consts.staking.electionLookahead;
|
|
147
148
|
}
|
|
148
149
|
const { specName } = await api.rpc.state.getRuntimeVersion(hash);
|
|
149
|
-
const { epochDuration } =
|
|
150
|
+
const { epochDuration } = historicApi.consts.babe;
|
|
150
151
|
// TODO - create a configurable epochDivisor env for a more generic solution
|
|
151
152
|
const epochDurationDivisor = specName.toString() === 'polkadot'
|
|
152
153
|
? new bn_js_1.default(16) // polkadot electionLookAhead = epochDuration / 16
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PalletsStakingProgressService.js","sourceRoot":"","sources":["../../../../src/services/pallets/PalletsStakingProgressService.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"PalletsStakingProgressService.js","sourceRoot":"","sources":["../../../../src/services/pallets/PalletsStakingProgressService.ts"],"names":[],"mappings":"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"}
|