@substrate/api-sidecar 20.3.1 → 20.4.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/README.md +9 -0
- package/build/package.json +9 -19
- package/build/src/chains-config/assetHubKusamaControllers.js +17 -0
- package/build/src/chains-config/assetHubKusamaControllers.js.map +1 -1
- package/build/src/chains-config/assetHubNextWestendControllers.js +18 -0
- package/build/src/chains-config/assetHubNextWestendControllers.js.map +1 -1
- package/build/src/chains-config/assetHubPolkadotControllers.js +17 -0
- package/build/src/chains-config/assetHubPolkadotControllers.js.map +1 -1
- package/build/src/chains-config/assetHubWestendControllers.js +18 -0
- package/build/src/chains-config/assetHubWestendControllers.js.map +1 -1
- package/build/src/chains-config/index.d.ts +6 -0
- package/build/src/chains-config/index.js +24 -1
- package/build/src/chains-config/index.js.map +1 -1
- package/build/src/controllers/AbstractController.d.ts +13 -2
- package/build/src/controllers/AbstractController.js +73 -13
- package/build/src/controllers/AbstractController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsAssetsController.d.ts +16 -0
- package/build/src/controllers/accounts/AccountsAssetsController.js +75 -8
- package/build/src/controllers/accounts/AccountsAssetsController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsBalanceInfoController.d.ts +9 -0
- package/build/src/controllers/accounts/AccountsBalanceInfoController.js +50 -10
- package/build/src/controllers/accounts/AccountsBalanceInfoController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsPoolAssetsController.d.ts +15 -0
- package/build/src/controllers/accounts/AccountsPoolAssetsController.js +74 -8
- package/build/src/controllers/accounts/AccountsPoolAssetsController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsProxyInfoController.d.ts +1 -1
- package/build/src/controllers/accounts/AccountsProxyInfoController.js +30 -5
- package/build/src/controllers/accounts/AccountsProxyInfoController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsStakingInfoController.d.ts +9 -0
- package/build/src/controllers/accounts/AccountsStakingInfoController.js +47 -6
- package/build/src/controllers/accounts/AccountsStakingInfoController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsStakingPayoutsController.d.ts +9 -0
- package/build/src/controllers/accounts/AccountsStakingPayoutsController.js +71 -14
- package/build/src/controllers/accounts/AccountsStakingPayoutsController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsVestingInfoController.d.ts +8 -0
- package/build/src/controllers/accounts/AccountsVestingInfoController.js +36 -8
- package/build/src/controllers/accounts/AccountsVestingInfoController.js.map +1 -1
- package/build/src/controllers/blocks/BlocksController.d.ts +10 -0
- package/build/src/controllers/blocks/BlocksController.js +244 -23
- package/build/src/controllers/blocks/BlocksController.js.map +1 -1
- package/build/src/controllers/blocks/BlocksExtrinsicsController.js +95 -36
- package/build/src/controllers/blocks/BlocksExtrinsicsController.js.map +1 -1
- package/build/src/controllers/blocks/BlocksRawExtrinsicsController.js +29 -4
- package/build/src/controllers/blocks/BlocksRawExtrinsicsController.js.map +1 -1
- package/build/src/controllers/controllerInjection.spec.js +5 -1
- package/build/src/controllers/controllerInjection.spec.js.map +1 -1
- package/build/src/controllers/index.d.ts +23 -0
- package/build/src/controllers/index.js +27 -4
- package/build/src/controllers/index.js.map +1 -1
- package/build/src/controllers/pallets/PalletsAssetConversionController.js +58 -6
- package/build/src/controllers/pallets/PalletsAssetConversionController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsAssetsController.d.ts +8 -0
- package/build/src/controllers/pallets/PalletsAssetsController.js +38 -3
- package/build/src/controllers/pallets/PalletsAssetsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsConstsController.js +82 -18
- package/build/src/controllers/pallets/PalletsConstsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsDispatchablesController.d.ts +0 -8
- package/build/src/controllers/pallets/PalletsDispatchablesController.js +82 -28
- package/build/src/controllers/pallets/PalletsDispatchablesController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsErrorsController.js +82 -18
- package/build/src/controllers/pallets/PalletsErrorsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsEventsController.js +82 -18
- package/build/src/controllers/pallets/PalletsEventsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsForeignAssetsController.d.ts +8 -0
- package/build/src/controllers/pallets/PalletsForeignAssetsController.js +38 -3
- package/build/src/controllers/pallets/PalletsForeignAssetsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsNominationPoolsController.js +58 -6
- package/build/src/controllers/pallets/PalletsNominationPoolsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsOnGoingReferendaController.js +30 -3
- package/build/src/controllers/pallets/PalletsOnGoingReferendaController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsPoolAssetsController.js +30 -3
- package/build/src/controllers/pallets/PalletsPoolAssetsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsStakingProgressController.d.ts +1 -1
- package/build/src/controllers/pallets/PalletsStakingProgressController.js +30 -8
- package/build/src/controllers/pallets/PalletsStakingProgressController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsStakingValidatorsController.js +30 -3
- package/build/src/controllers/pallets/PalletsStakingValidatorsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsStorageController.js +84 -19
- package/build/src/controllers/pallets/PalletsStorageController.js.map +1 -1
- package/build/src/controllers/rc/accounts/RcAccountsBalanceInfoController.d.ts +15 -0
- package/build/src/controllers/rc/accounts/RcAccountsBalanceInfoController.js +65 -0
- package/build/src/controllers/rc/accounts/RcAccountsBalanceInfoController.js.map +1 -0
- package/build/src/controllers/rc/accounts/RcAccountsProxyInfoController.d.ts +15 -0
- package/build/src/controllers/rc/accounts/RcAccountsProxyInfoController.js +59 -0
- package/build/src/controllers/rc/accounts/RcAccountsProxyInfoController.js.map +1 -0
- package/build/src/controllers/rc/accounts/index.d.ts +2 -0
- package/build/src/controllers/rc/accounts/index.js +26 -0
- package/build/src/controllers/rc/accounts/index.js.map +1 -0
- package/build/src/controllers/rc/blocks/RcBlocksController.d.ts +17 -0
- package/build/src/controllers/rc/blocks/RcBlocksController.js +263 -0
- package/build/src/controllers/rc/blocks/RcBlocksController.js.map +1 -0
- package/build/src/controllers/rc/blocks/RcBlocksExtrinsicsController.d.ts +11 -0
- package/build/src/controllers/rc/blocks/RcBlocksExtrinsicsController.js +80 -0
- package/build/src/controllers/rc/blocks/RcBlocksExtrinsicsController.js.map +1 -0
- package/build/src/controllers/rc/blocks/RcBlocksRawExtrinsicsController.d.ts +10 -0
- package/build/src/controllers/rc/blocks/RcBlocksRawExtrinsicsController.js +60 -0
- package/build/src/controllers/rc/blocks/RcBlocksRawExtrinsicsController.js.map +1 -0
- package/build/src/controllers/rc/blocks/RcBlocksTraceController.d.ts +12 -0
- package/build/src/controllers/rc/blocks/RcBlocksTraceController.js +89 -0
- package/build/src/controllers/rc/blocks/RcBlocksTraceController.js.map +1 -0
- package/build/src/controllers/rc/blocks/index.d.ts +4 -0
- package/build/src/controllers/rc/blocks/index.js +30 -0
- package/build/src/controllers/rc/blocks/index.js.map +1 -0
- package/build/src/controllers/rc/index.d.ts +4 -0
- package/build/src/controllers/rc/index.js +36 -0
- package/build/src/controllers/rc/index.js.map +1 -0
- package/build/src/controllers/rc/node/RcNodeNetworkController.d.ts +40 -0
- package/build/src/controllers/rc/node/RcNodeNetworkController.js +76 -0
- package/build/src/controllers/rc/node/RcNodeNetworkController.js.map +1 -0
- package/build/src/controllers/rc/node/RcNodeTransactionPoolController.d.ts +27 -0
- package/build/src/controllers/rc/node/RcNodeTransactionPoolController.js +66 -0
- package/build/src/controllers/rc/node/RcNodeTransactionPoolController.js.map +1 -0
- package/build/src/controllers/rc/node/RcNodeVersionController.d.ts +24 -0
- package/build/src/controllers/rc/node/RcNodeVersionController.js +59 -0
- package/build/src/controllers/rc/node/RcNodeVersionController.js.map +1 -0
- package/build/src/controllers/rc/node/index.d.ts +3 -0
- package/build/src/controllers/rc/node/index.js +13 -0
- package/build/src/controllers/rc/node/index.js.map +1 -0
- package/build/src/controllers/rc/pallets/RcPalletsConstsController.d.ts +10 -0
- package/build/src/controllers/rc/pallets/RcPalletsConstsController.js +79 -0
- package/build/src/controllers/rc/pallets/RcPalletsConstsController.js.map +1 -0
- package/build/src/controllers/rc/pallets/RcPalletsDispatchablesController.d.ts +10 -0
- package/build/src/controllers/rc/pallets/RcPalletsDispatchablesController.js +79 -0
- package/build/src/controllers/rc/pallets/RcPalletsDispatchablesController.js.map +1 -0
- package/build/src/controllers/rc/pallets/RcPalletsErrorsController.d.ts +10 -0
- package/build/src/controllers/rc/pallets/RcPalletsErrorsController.js +79 -0
- package/build/src/controllers/rc/pallets/RcPalletsErrorsController.js.map +1 -0
- package/build/src/controllers/rc/pallets/RcPalletsEventsController.d.ts +10 -0
- package/build/src/controllers/rc/pallets/RcPalletsEventsController.js +79 -0
- package/build/src/controllers/rc/pallets/RcPalletsEventsController.js.map +1 -0
- package/build/src/controllers/rc/pallets/RcPalletsOnGoingReferendaController.d.ts +9 -0
- package/build/src/controllers/rc/pallets/RcPalletsOnGoingReferendaController.js +52 -0
- package/build/src/controllers/rc/pallets/RcPalletsOnGoingReferendaController.js.map +1 -0
- package/build/src/controllers/rc/pallets/RcPalletsStorageController.d.ts +10 -0
- package/build/src/controllers/rc/pallets/RcPalletsStorageController.js +81 -0
- package/build/src/controllers/rc/pallets/RcPalletsStorageController.js.map +1 -0
- package/build/src/controllers/rc/pallets/index.d.ts +6 -0
- package/build/src/controllers/rc/pallets/index.js +34 -0
- package/build/src/controllers/rc/pallets/index.js.map +1 -0
- package/build/src/controllers/rc/runtime/RcRuntimeCodeController.d.ts +26 -0
- package/build/src/controllers/rc/runtime/RcRuntimeCodeController.js +68 -0
- package/build/src/controllers/rc/runtime/RcRuntimeCodeController.js.map +1 -0
- package/build/src/controllers/rc/runtime/RcRuntimeMetadataController.d.ts +47 -0
- package/build/src/controllers/rc/runtime/RcRuntimeMetadataController.js +140 -0
- package/build/src/controllers/rc/runtime/RcRuntimeMetadataController.js.map +1 -0
- package/build/src/controllers/rc/runtime/RcRuntimeSpecController.d.ts +34 -0
- package/build/src/controllers/rc/runtime/RcRuntimeSpecController.js +76 -0
- package/build/src/controllers/rc/runtime/RcRuntimeSpecController.js.map +1 -0
- package/build/src/controllers/rc/runtime/index.d.ts +3 -0
- package/build/src/controllers/rc/runtime/index.js +28 -0
- package/build/src/controllers/rc/runtime/index.js.map +1 -0
- package/build/src/logging/transformers/nodeUtilFormat.js +17 -7
- package/build/src/logging/transformers/nodeUtilFormat.js.map +1 -1
- package/build/src/main.js +21 -7
- package/build/src/main.js.map +1 -1
- package/build/src/metrics/index.js +17 -7
- package/build/src/metrics/index.js.map +1 -1
- package/build/src/middleware/logger/httpLogger.js +17 -7
- package/build/src/middleware/logger/httpLogger.js.map +1 -1
- package/build/src/middleware/validate/index.d.ts +1 -0
- package/build/src/middleware/validate/index.js +3 -1
- package/build/src/middleware/validate/index.js.map +1 -1
- package/build/src/middleware/validate/validateUseRcBlockMiddleware.d.ts +10 -0
- package/build/src/middleware/validate/validateUseRcBlockMiddleware.js +58 -0
- package/build/src/middleware/validate/validateUseRcBlockMiddleware.js.map +1 -0
- package/build/src/services/accounts/AccountsStakingInfoService.js +0 -1
- package/build/src/services/accounts/AccountsStakingInfoService.js.map +1 -1
- package/build/src/services/blocks/BlocksService.js +15 -1
- package/build/src/services/blocks/BlocksService.js.map +1 -1
- package/build/src/services/pallets/PalletsStakingProgressService.d.ts +56 -0
- package/build/src/services/pallets/PalletsStakingProgressService.js +140 -21
- package/build/src/services/pallets/PalletsStakingProgressService.js.map +1 -1
- package/build/src/services/pallets/PalletsStakingProgressService.spec.js +255 -43
- package/build/src/services/pallets/PalletsStakingProgressService.spec.js.map +1 -1
- package/build/src/types/requests.d.ts +1 -0
- package/build/src/types/responses/AccountAssets.d.ts +4 -0
- package/build/src/types/responses/AccountBalanceInfo.d.ts +2 -0
- package/build/src/types/responses/AccountPoolAssets.d.ts +6 -2
- package/build/src/types/responses/AccountProxyInfo.d.ts +2 -0
- package/build/src/types/responses/AccountStakingInfo.d.ts +2 -0
- package/build/src/types/responses/AccountStakingPayouts.d.ts +2 -0
- package/build/src/types/responses/AccountVestingInfo.d.ts +2 -0
- package/build/src/types/responses/PalletStakingProgress.d.ts +2 -0
- package/package.json +9 -19
|
@@ -31,6 +31,8 @@ const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
|
31
31
|
* Query:
|
|
32
32
|
* - (Optional)`at`: Block at which to retrieve runtime version information at. Block
|
|
33
33
|
* identifier, as the block height or block hash. Defaults to most recent block.
|
|
34
|
+
* - (Optional) `useRcBlock`: When true, treats the `at` parameter as a relay chain block
|
|
35
|
+
* to find corresponding Asset Hub blocks. Only supported for Asset Hub endpoints.
|
|
34
36
|
* - (Optional) `includeClaimedRewards`: Controls whether or not the `claimedRewards`
|
|
35
37
|
* field is included in the response. Defaults to `true`.
|
|
36
38
|
* If set to `false`:
|
|
@@ -39,6 +41,11 @@ const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
|
39
41
|
* will be skipped, potentially speeding up the response time.
|
|
40
42
|
*
|
|
41
43
|
* Returns:
|
|
44
|
+
* - When using `useRcBlock=true`: An array of response objects, one for each Asset Hub block found
|
|
45
|
+
* in the specified relay chain block. Returns empty array `[]` if no Asset Hub blocks found.
|
|
46
|
+
* - When using `useRcBlock=false` or omitted: A single response object.
|
|
47
|
+
*
|
|
48
|
+
* Response object structure:
|
|
42
49
|
* - `at`: Block number and hash at which the call was made.
|
|
43
50
|
* - `rewardDestination`: The account to which rewards will be paid. Can be 'Staked' (Stash
|
|
44
51
|
* account, adding to the amount at stake), 'Stash' (Stash address, not adding to the amount at
|
|
@@ -57,6 +64,8 @@ const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
|
57
64
|
* with an `era` at which `value` will be unlocked.
|
|
58
65
|
* - `claimedRewards`: Array of eras for which the stakers behind a validator have claimed
|
|
59
66
|
* rewards. Only updated for _validators._
|
|
67
|
+
* - `rcBlockNumber`: The relay chain block number used for the query. Only present when `useRcBlock=true`.
|
|
68
|
+
* - `ahTimestamp`: The Asset Hub block timestamp. Only present when `useRcBlock=true`.
|
|
60
69
|
*
|
|
61
70
|
* Note: Runtime versions of Kusama less than 1062 will either have `lastReward` in place of
|
|
62
71
|
* `claimedRewards`, or no field at all. This is related to changes in reward distribution. See:
|
|
@@ -78,22 +87,54 @@ class AccountsStakingInfoController extends AbstractController_1.default {
|
|
|
78
87
|
* @param req Express Request
|
|
79
88
|
* @param res Express Response
|
|
80
89
|
*/
|
|
81
|
-
this.getAccountStakingInfo = async ({ params: { address }, query: { at, includeClaimedRewards } }, res) => {
|
|
90
|
+
this.getAccountStakingInfo = async ({ params: { address }, query: { at, useRcBlock, includeClaimedRewards } }, res) => {
|
|
82
91
|
const { isAssetHubMigrated } = apiRegistry_1.ApiPromiseRegistry.assetHubInfo;
|
|
83
|
-
const hash = await this.getHashFromAt(at);
|
|
84
92
|
const includeClaimedRewardsArg = includeClaimedRewards !== 'false';
|
|
85
|
-
if (
|
|
86
|
-
|
|
93
|
+
if (useRcBlock === 'true') {
|
|
94
|
+
const rcAtResults = await this.getHashFromRcAt(at);
|
|
95
|
+
// Return empty array if no Asset Hub blocks found
|
|
96
|
+
if (rcAtResults.length === 0) {
|
|
97
|
+
AccountsStakingInfoController.sanitizedSend(res, []);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Process each Asset Hub block found
|
|
101
|
+
const results = [];
|
|
102
|
+
for (const { ahHash, rcBlockNumber } of rcAtResults) {
|
|
103
|
+
let result;
|
|
104
|
+
if (isAssetHubMigrated) {
|
|
105
|
+
result = await this.service.fetchAccountStakingInfoAssetHub(ahHash, includeClaimedRewardsArg, address);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
result = await this.service.fetchAccountStakingInfo(ahHash, includeClaimedRewardsArg, address);
|
|
109
|
+
}
|
|
110
|
+
const apiAt = await this.api.at(ahHash);
|
|
111
|
+
const ahTimestamp = await apiAt.query.timestamp.now();
|
|
112
|
+
const enhancedResult = {
|
|
113
|
+
...result,
|
|
114
|
+
rcBlockNumber,
|
|
115
|
+
ahTimestamp: ahTimestamp.toString(),
|
|
116
|
+
};
|
|
117
|
+
results.push(enhancedResult);
|
|
118
|
+
}
|
|
119
|
+
AccountsStakingInfoController.sanitizedSend(res, results);
|
|
87
120
|
}
|
|
88
121
|
else {
|
|
89
|
-
|
|
122
|
+
const hash = await this.getHashFromAt(at);
|
|
123
|
+
let result;
|
|
124
|
+
if (isAssetHubMigrated) {
|
|
125
|
+
result = await this.service.fetchAccountStakingInfoAssetHub(hash, includeClaimedRewardsArg, address);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
result = await this.service.fetchAccountStakingInfo(hash, includeClaimedRewardsArg, address);
|
|
129
|
+
}
|
|
130
|
+
AccountsStakingInfoController.sanitizedSend(res, result);
|
|
90
131
|
}
|
|
91
132
|
};
|
|
92
133
|
this.initRoutes();
|
|
93
134
|
this.options = options;
|
|
94
135
|
}
|
|
95
136
|
initRoutes() {
|
|
96
|
-
this.router.use(this.path, middleware_1.validateAddress, (0, middleware_1.validateBoolean)(['includeClaimedRewards']));
|
|
137
|
+
this.router.use(this.path, middleware_1.validateAddress, (0, middleware_1.validateBoolean)(['includeClaimedRewards']), middleware_1.validateUseRcBlock);
|
|
97
138
|
this.safeMountAsyncGetHandlers([['', this.getAccountStakingInfo]]);
|
|
98
139
|
}
|
|
99
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsStakingInfoController.js","sourceRoot":"","sources":["../../../../src/controllers/accounts/AccountsStakingInfoController.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;;;;;AAMxE,mDAAuD;AACvD,
|
|
1
|
+
{"version":3,"file":"AccountsStakingInfoController.js","sourceRoot":"","sources":["../../../../src/controllers/accounts/AccountsStakingInfoController.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,15 @@ import AbstractController from '../AbstractController';
|
|
|
13
13
|
* - (Optional) `era`: The era to query at. Max era payout info is available for
|
|
14
14
|
* is the latest finished era: `active_era - 1`. Defaults to `active_era - 1`.
|
|
15
15
|
* - (Optional) `unclaimedOnly`: Only return unclaimed rewards. Defaults to true.
|
|
16
|
+
* - (Optional) `useRcBlock`: When true, treats the `at` parameter as a relay chain block
|
|
17
|
+
* to find corresponding Asset Hub blocks. Only supported for Asset Hub endpoints.
|
|
16
18
|
*
|
|
17
19
|
* Returns:
|
|
20
|
+
* - When using `useRcBlock=true`: An array of response objects, one for each Asset Hub block found
|
|
21
|
+
* in the specified relay chain block. Returns empty array `[]` if no Asset Hub blocks found.
|
|
22
|
+
* - When using `useRcBlock=false` or omitted: A single response object.
|
|
23
|
+
*
|
|
24
|
+
* Response object structure:
|
|
18
25
|
* - `at`:
|
|
19
26
|
* - `hash`: The block's hash.
|
|
20
27
|
* - `height`: The block's height.
|
|
@@ -33,6 +40,8 @@ import AbstractController from '../AbstractController';
|
|
|
33
40
|
* takes as commission, expressed as a Perbill.
|
|
34
41
|
* - `totalValidatorExposure`: The sum of the validator's and its nominators' stake.
|
|
35
42
|
* - `nominatorExposure`: The amount of stake the nominator has behind the validator.
|
|
43
|
+
* - `rcBlockNumber`: The relay chain block number used for the query. Only present when `useRcBlock=true`.
|
|
44
|
+
* - `ahTimestamp`: The Asset Hub block timestamp. Only present when `useRcBlock=true`.
|
|
36
45
|
*
|
|
37
46
|
* Description:
|
|
38
47
|
* Returns payout information for the last specified eras. If specifying both
|
|
@@ -38,8 +38,15 @@ const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
|
38
38
|
* - (Optional) `era`: The era to query at. Max era payout info is available for
|
|
39
39
|
* is the latest finished era: `active_era - 1`. Defaults to `active_era - 1`.
|
|
40
40
|
* - (Optional) `unclaimedOnly`: Only return unclaimed rewards. Defaults to true.
|
|
41
|
+
* - (Optional) `useRcBlock`: When true, treats the `at` parameter as a relay chain block
|
|
42
|
+
* to find corresponding Asset Hub blocks. Only supported for Asset Hub endpoints.
|
|
41
43
|
*
|
|
42
44
|
* Returns:
|
|
45
|
+
* - When using `useRcBlock=true`: An array of response objects, one for each Asset Hub block found
|
|
46
|
+
* in the specified relay chain block. Returns empty array `[]` if no Asset Hub blocks found.
|
|
47
|
+
* - When using `useRcBlock=false` or omitted: A single response object.
|
|
48
|
+
*
|
|
49
|
+
* Response object structure:
|
|
43
50
|
* - `at`:
|
|
44
51
|
* - `hash`: The block's hash.
|
|
45
52
|
* - `height`: The block's height.
|
|
@@ -58,6 +65,8 @@ const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
|
58
65
|
* takes as commission, expressed as a Perbill.
|
|
59
66
|
* - `totalValidatorExposure`: The sum of the validator's and its nominators' stake.
|
|
60
67
|
* - `nominatorExposure`: The amount of stake the nominator has behind the validator.
|
|
68
|
+
* - `rcBlockNumber`: The relay chain block number used for the query. Only present when `useRcBlock=true`.
|
|
69
|
+
* - `ahTimestamp`: The Asset Hub block timestamp. Only present when `useRcBlock=true`.
|
|
61
70
|
*
|
|
62
71
|
* Description:
|
|
63
72
|
* Returns payout information for the last specified eras. If specifying both
|
|
@@ -85,28 +94,76 @@ class AccountsStakingPayoutsController extends AbstractController_1.default {
|
|
|
85
94
|
* @param req Express Request
|
|
86
95
|
* @param res Express Response
|
|
87
96
|
*/
|
|
88
|
-
this.getStakingPayoutsByAccountId = async ({ params: { address }, query: { depth, era, unclaimedOnly, at } }, res) => {
|
|
97
|
+
this.getStakingPayoutsByAccountId = async ({ params: { address }, query: { depth, era, unclaimedOnly, at, useRcBlock } }, res) => {
|
|
89
98
|
const { specName } = this;
|
|
90
99
|
const isKusama = specName.toString().toLowerCase() === 'kusama';
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
if (useRcBlock === 'true') {
|
|
101
|
+
const rcAtResults = await this.getHashFromRcAt(at);
|
|
102
|
+
// Return empty array if no Asset Hub blocks found
|
|
103
|
+
if (rcAtResults.length === 0) {
|
|
104
|
+
AccountsStakingPayoutsController.sanitizedSend(res, []);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// Process each Asset Hub block found
|
|
108
|
+
const results = [];
|
|
109
|
+
for (const { ahHash, rcBlockNumber } of rcAtResults) {
|
|
110
|
+
let hash = ahHash;
|
|
111
|
+
let apiAt = await this.api.at(hash);
|
|
112
|
+
const { eraArg, currentEra } = await this.getEraAndHash(apiAt, this.verifyAndCastOr('era', era, undefined));
|
|
113
|
+
const sanitizedDepth = this.sanitizeDepth({
|
|
114
|
+
isKusama,
|
|
115
|
+
depth: depth === null || depth === void 0 ? void 0 : depth.toString(),
|
|
116
|
+
era: era === null || era === void 0 ? void 0 : era.toString(),
|
|
117
|
+
currentEra,
|
|
118
|
+
});
|
|
119
|
+
if (isKusama && currentEra < 518) {
|
|
120
|
+
const earlyErasBlockInfo = kusamaEarlyErasBlockInfo_json_1.default;
|
|
121
|
+
const block = earlyErasBlockInfo[currentEra].start;
|
|
122
|
+
hash = await this.getHashFromAt(block.toString());
|
|
123
|
+
apiAt = await this.api.at(hash);
|
|
124
|
+
}
|
|
125
|
+
if (!apiAt.query.staking) {
|
|
126
|
+
throw new http_errors_1.BadRequest('Staking pallet not found for queried runtime');
|
|
127
|
+
}
|
|
128
|
+
const result = await this.service.fetchAccountStakingPayout(hash, address, this.verifyAndCastOr('depth', sanitizedDepth, 1), eraArg, unclaimedOnly === 'false' ? false : true, currentEra, apiAt);
|
|
129
|
+
const finalApiAt = await this.api.at(hash);
|
|
130
|
+
const ahTimestamp = await finalApiAt.query.timestamp.now();
|
|
131
|
+
const enhancedResult = {
|
|
132
|
+
...result,
|
|
133
|
+
rcBlockNumber,
|
|
134
|
+
ahTimestamp: ahTimestamp.toString(),
|
|
135
|
+
};
|
|
136
|
+
results.push(enhancedResult);
|
|
137
|
+
}
|
|
138
|
+
AccountsStakingPayoutsController.sanitizedSend(res, results);
|
|
100
139
|
}
|
|
101
|
-
|
|
102
|
-
|
|
140
|
+
else {
|
|
141
|
+
let hash = await this.getHashFromAt(at);
|
|
142
|
+
let apiAt = await this.api.at(hash);
|
|
143
|
+
const { eraArg, currentEra } = await this.getEraAndHash(apiAt, this.verifyAndCastOr('era', era, undefined));
|
|
144
|
+
const sanitizedDepth = this.sanitizeDepth({
|
|
145
|
+
isKusama,
|
|
146
|
+
depth: depth === null || depth === void 0 ? void 0 : depth.toString(),
|
|
147
|
+
era: era === null || era === void 0 ? void 0 : era.toString(),
|
|
148
|
+
currentEra,
|
|
149
|
+
});
|
|
150
|
+
if (isKusama && currentEra < 518) {
|
|
151
|
+
const earlyErasBlockInfo = kusamaEarlyErasBlockInfo_json_1.default;
|
|
152
|
+
const block = earlyErasBlockInfo[currentEra].start;
|
|
153
|
+
hash = await this.getHashFromAt(block.toString());
|
|
154
|
+
apiAt = await this.api.at(hash);
|
|
155
|
+
}
|
|
156
|
+
if (!apiAt.query.staking) {
|
|
157
|
+
throw new http_errors_1.BadRequest('Staking pallet not found for queried runtime');
|
|
158
|
+
}
|
|
159
|
+
const result = await this.service.fetchAccountStakingPayout(hash, address, this.verifyAndCastOr('depth', sanitizedDepth, 1), eraArg, unclaimedOnly === 'false' ? false : true, currentEra, apiAt);
|
|
160
|
+
AccountsStakingPayoutsController.sanitizedSend(res, result);
|
|
103
161
|
}
|
|
104
|
-
AccountsStakingPayoutsController.sanitizedSend(res, await this.service.fetchAccountStakingPayout(hash, address, this.verifyAndCastOr('depth', sanitizedDepth, 1), eraArg, unclaimedOnly === 'false' ? false : true, currentEra, apiAt));
|
|
105
162
|
};
|
|
106
163
|
this.initRoutes();
|
|
107
164
|
}
|
|
108
165
|
initRoutes() {
|
|
109
|
-
this.router.use(this.path, middleware_1.validateAddress, (0, middleware_1.validateBoolean)(['unclaimedOnly']));
|
|
166
|
+
this.router.use(this.path, middleware_1.validateAddress, (0, middleware_1.validateBoolean)(['unclaimedOnly']), middleware_1.validateUseRcBlock);
|
|
110
167
|
this.safeMountAsyncGetHandlers([['', this.getStakingPayoutsByAccountId]]);
|
|
111
168
|
}
|
|
112
169
|
sanitizeDepth({ isKusama, depth, era, currentEra, }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsStakingPayoutsController.js","sourceRoot":"","sources":["../../../../src/controllers/accounts/AccountsStakingPayoutsController.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;;;;;AAGxE,2CAA8C;AAC9C,kDAAuB;AAEvB,6CAA8D;AAE9D,
|
|
1
|
+
{"version":3,"file":"AccountsStakingPayoutsController.js","sourceRoot":"","sources":["../../../../src/controllers/accounts/AccountsStakingPayoutsController.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,13 +9,21 @@ import AbstractController from '../AbstractController';
|
|
|
9
9
|
* Query params:
|
|
10
10
|
* - (Optional)`at`: Block at which to retrieve runtime version information at. Block
|
|
11
11
|
* identifier, as the block height or block hash. Defaults to most recent block.
|
|
12
|
+
* - (Optional)`useRcBlock`: When set to 'true', uses the relay chain block specified in the 'at' parameter to determine corresponding Asset Hub block(s). Only supported for Asset Hub endpoints.
|
|
12
13
|
*
|
|
13
14
|
* Returns:
|
|
15
|
+
* - When using `useRcBlock` parameter: An array of response objects, one for each Asset Hub block found
|
|
16
|
+
* in the specified relay chain block. Returns empty array `[]` if no Asset Hub blocks found.
|
|
17
|
+
* - When using `at` parameter or no query params: A single response object.
|
|
18
|
+
*
|
|
19
|
+
* Response object structure:
|
|
14
20
|
* - `at`: Block number and hash at which the call was made.
|
|
15
21
|
* - `vesting`: Vesting schedule for an account.
|
|
16
22
|
* - `locked`: Number of tokens locked at start.
|
|
17
23
|
* - `perBlock`: Number of tokens that gets unlocked every block after `startingBlock`.
|
|
18
24
|
* - `startingBlock`: Starting block for unlocking(vesting).
|
|
25
|
+
* - `rcBlockNumber`: The relay chain block number used for the query. Only present when `useRcBlock` parameter is used.
|
|
26
|
+
* - `ahTimestamp`: The Asset Hub block timestamp. Only present when `useRcBlock` parameter is used.
|
|
19
27
|
*
|
|
20
28
|
* Substrate Reference:
|
|
21
29
|
* - Vesting Pallet: https://crates.parity.io/pallet_vesting/index.html
|
|
@@ -18,7 +18,6 @@ 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
|
-
const chains_config_1 = require("../../chains-config");
|
|
22
21
|
const middleware_1 = require("../../middleware");
|
|
23
22
|
const services_1 = require("../../services");
|
|
24
23
|
const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
@@ -31,13 +30,21 @@ const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
|
31
30
|
* Query params:
|
|
32
31
|
* - (Optional)`at`: Block at which to retrieve runtime version information at. Block
|
|
33
32
|
* identifier, as the block height or block hash. Defaults to most recent block.
|
|
33
|
+
* - (Optional)`useRcBlock`: When set to 'true', uses the relay chain block specified in the 'at' parameter to determine corresponding Asset Hub block(s). Only supported for Asset Hub endpoints.
|
|
34
34
|
*
|
|
35
35
|
* Returns:
|
|
36
|
+
* - When using `useRcBlock` parameter: An array of response objects, one for each Asset Hub block found
|
|
37
|
+
* in the specified relay chain block. Returns empty array `[]` if no Asset Hub blocks found.
|
|
38
|
+
* - When using `at` parameter or no query params: A single response object.
|
|
39
|
+
*
|
|
40
|
+
* Response object structure:
|
|
36
41
|
* - `at`: Block number and hash at which the call was made.
|
|
37
42
|
* - `vesting`: Vesting schedule for an account.
|
|
38
43
|
* - `locked`: Number of tokens locked at start.
|
|
39
44
|
* - `perBlock`: Number of tokens that gets unlocked every block after `startingBlock`.
|
|
40
45
|
* - `startingBlock`: Starting block for unlocking(vesting).
|
|
46
|
+
* - `rcBlockNumber`: The relay chain block number used for the query. Only present when `useRcBlock` parameter is used.
|
|
47
|
+
* - `ahTimestamp`: The Asset Hub block timestamp. Only present when `useRcBlock` parameter is used.
|
|
41
48
|
*
|
|
42
49
|
* Substrate Reference:
|
|
43
50
|
* - Vesting Pallet: https://crates.parity.io/pallet_vesting/index.html
|
|
@@ -52,18 +59,39 @@ class AccountsVestingInfoController extends AbstractController_1.default {
|
|
|
52
59
|
* @param req Express Request
|
|
53
60
|
* @param res Express Response
|
|
54
61
|
*/
|
|
55
|
-
this.getAccountVestingInfo = async ({ params: { address }, query: { at } }, res) => {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
//
|
|
59
|
-
|
|
62
|
+
this.getAccountVestingInfo = async ({ params: { address }, query: { at, useRcBlock } }, res) => {
|
|
63
|
+
if (useRcBlock === 'true') {
|
|
64
|
+
const rcAtResults = await this.getHashFromRcAt(at);
|
|
65
|
+
// Return empty array if no Asset Hub blocks found
|
|
66
|
+
if (rcAtResults.length === 0) {
|
|
67
|
+
AccountsVestingInfoController.sanitizedSend(res, []);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Process each Asset Hub block found
|
|
71
|
+
const results = [];
|
|
72
|
+
for (const { ahHash, rcBlockNumber } of rcAtResults) {
|
|
73
|
+
const result = await this.service.fetchAccountVestingInfo(ahHash, address);
|
|
74
|
+
const apiAt = await this.api.at(ahHash);
|
|
75
|
+
const ahTimestamp = await apiAt.query.timestamp.now();
|
|
76
|
+
const enhancedResult = {
|
|
77
|
+
...result,
|
|
78
|
+
rcBlockNumber,
|
|
79
|
+
ahTimestamp: ahTimestamp.toString(),
|
|
80
|
+
};
|
|
81
|
+
results.push(enhancedResult);
|
|
82
|
+
}
|
|
83
|
+
AccountsVestingInfoController.sanitizedSend(res, results);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const hash = await this.getHashFromAt(at);
|
|
87
|
+
const result = await this.service.fetchAccountVestingInfo(hash, address);
|
|
88
|
+
AccountsVestingInfoController.sanitizedSend(res, result);
|
|
60
89
|
}
|
|
61
|
-
AccountsVestingInfoController.sanitizedSend(res, await this.service.fetchAccountVestingInfo(hash, address));
|
|
62
90
|
};
|
|
63
91
|
this.initRoutes();
|
|
64
92
|
}
|
|
65
93
|
initRoutes() {
|
|
66
|
-
this.router.use(this.path, middleware_1.validateAddress);
|
|
94
|
+
this.router.use(this.path, middleware_1.validateAddress, middleware_1.validateUseRcBlock);
|
|
67
95
|
this.safeMountAsyncGetHandlers([['', this.getAccountVestingInfo]]);
|
|
68
96
|
}
|
|
69
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsVestingInfoController.js","sourceRoot":"","sources":["../../../../src/controllers/accounts/AccountsVestingInfoController.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;;;;;AAKxE,
|
|
1
|
+
{"version":3,"file":"AccountsVestingInfoController.js","sourceRoot":"","sources":["../../../../src/controllers/accounts/AccountsVestingInfoController.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;;;;;AAKxE,iDAAuE;AACvE,6CAA4D;AAC5D,+EAAuD;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAqB,6BAA8B,SAAQ,4BAA8C;IAIxG,YAAY,GAAW;QACtB,KAAK,CAAC,GAAG,EAAE,iCAAiC,EAAE,IAAI,qCAA0B,CAAC,GAAG,CAAC,CAAC,CAAC;QAUpF;;;;;WAKG;QACK,0BAAqB,GAAkC,KAAK,EACnE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAClD,GAAG,EACa,EAAE;YAClB,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;gBAEnD,kDAAkD;gBAClD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,6BAA6B,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACrD,OAAO;gBACR,CAAC;gBAED,qCAAqC;gBACrC,MAAM,OAAO,GAAG,EAAE,CAAC;gBACnB,KAAK,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,WAAW,EAAE,CAAC;oBACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAE3E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBACxC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;oBAEtD,MAAM,cAAc,GAAG;wBACtB,GAAG,MAAM;wBACT,aAAa;wBACb,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;qBACnC,CAAC;oBAEF,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC9B,CAAC;gBAED,6BAA6B,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACzE,6BAA6B,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC,CAAC;QAnDD,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAES,UAAU;QACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,4BAAe,EAAE,+BAAkB,CAAC,CAAC;QAEhE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;;AAZM,4CAAc,GAAG,qBAAqB,AAAxB,CAAyB;AACvC,6CAAe,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,AAArC,CAAsC;kBAFxC,6BAA6B"}
|
|
@@ -23,9 +23,17 @@ import AbstractController from '../AbstractController';
|
|
|
23
23
|
* - (Optional for `/blocks/{blockId}) `paraId`: When it is set, it will return only the decoded
|
|
24
24
|
* XCM messages for the specified paraId/parachain Id. To activate this functionality, ensure
|
|
25
25
|
* that the `decodedXcmMsgs` parameter is set to true.
|
|
26
|
+
* - (Optional for `/blocks/head`) `useRcBlock`: When set to `true`, it will use the latest
|
|
27
|
+
* relay chain block to determine the corresponding Asset Hub block. Only supported for
|
|
28
|
+
* Asset Hub endpoints with relay chain API available.
|
|
26
29
|
*
|
|
27
30
|
*
|
|
28
31
|
* Returns:
|
|
32
|
+
* - When using `useRcBlock` parameter: An array of response objects, one for each Asset Hub block found
|
|
33
|
+
* corresponding to the relay chain block. Returns empty array `[]` if no Asset Hub blocks found.
|
|
34
|
+
* - When using standard block identifiers or no query params: A single response object.
|
|
35
|
+
*
|
|
36
|
+
* Response object structure:
|
|
29
37
|
* - `number`: Block height.
|
|
30
38
|
* - `hash`: The block's hash.
|
|
31
39
|
* - `parentHash`: The hash of the parent block.
|
|
@@ -56,6 +64,8 @@ import AbstractController from '../AbstractController';
|
|
|
56
64
|
* finalization with the `method` and `data` for each.
|
|
57
65
|
* - `decodedXcmMsgs`: An array of the decoded XCM messages found within the extrinsics
|
|
58
66
|
* of the requested block.
|
|
67
|
+
* - `rcBlockNumber`: The relay chain block number used for the query. Only present when `useRcBlock` parameter is used.
|
|
68
|
+
* - `ahTimestamp`: The Asset Hub block timestamp. Only present when `useRcBlock` parameter is used.
|
|
59
69
|
*
|
|
60
70
|
* Note: Block finalization does not correspond to consensus, i.e. whether the block is in the
|
|
61
71
|
* canonical chain. It denotes the finalization of block _construction._
|