@substrate/api-sidecar 10.0.0 → 11.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 +11 -11
- package/build/src/chains-config/metadata-consts/kusamaConsts.js +1 -1
- package/build/src/chains-config/metadata-consts/kusamaConsts.js.map +1 -1
- package/build/src/controllers/accounts/AccountsBalanceInfoController.js +2 -1
- package/build/src/controllers/accounts/AccountsBalanceInfoController.js.map +1 -1
- package/build/src/services/accounts/AccountsBalanceInfoService.d.ts +2 -1
- package/build/src/services/accounts/AccountsBalanceInfoService.js +18 -20
- package/build/src/services/accounts/AccountsBalanceInfoService.js.map +1 -1
- package/build/src/services/accounts/AccountsBalanceInfoService.spec.js +25 -39
- package/build/src/services/accounts/AccountsBalanceInfoService.spec.js.map +1 -1
- package/build/src/services/accounts/AccountsVestingInfoService.js +19 -5
- package/build/src/services/accounts/AccountsVestingInfoService.js.map +1 -1
- package/build/src/services/accounts/AccountsVestingInfoService.spec.js +40 -5
- package/build/src/services/accounts/AccountsVestingInfoService.spec.js.map +1 -1
- package/build/src/services/test-helpers/responses/accounts/vestingInfo789629.json +5 -1
- package/package.json +11 -11
package/build/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "11.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",
|
|
@@ -51,9 +51,9 @@
|
|
|
51
51
|
"test:test-release": "yarn start:test-release"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@polkadot/api": "6.
|
|
55
|
-
"@polkadot/apps-config": "0.
|
|
56
|
-
"@polkadot/util-crypto": "^7.
|
|
54
|
+
"@polkadot/api": "6.4.1",
|
|
55
|
+
"@polkadot/apps-config": "0.97.2-0",
|
|
56
|
+
"@polkadot/util-crypto": "^7.5.1",
|
|
57
57
|
"@polkadot/x-rxjs": "^6.11.1",
|
|
58
58
|
"@substrate/calc": "^0.2.3",
|
|
59
59
|
"argparse": "^2.0.1",
|
|
@@ -77,13 +77,13 @@
|
|
|
77
77
|
"tsc-watch": "^4.4.0"
|
|
78
78
|
},
|
|
79
79
|
"resolutions": {
|
|
80
|
-
"@polkadot/api": "6.
|
|
81
|
-
"@polkadot/keyring": "7.
|
|
82
|
-
"@polkadot/networks": "7.
|
|
83
|
-
"@polkadot/types": "6.
|
|
84
|
-
"@polkadot/types-known": "6.
|
|
85
|
-
"@polkadot/util": "7.
|
|
86
|
-
"@polkadot/util-crypto": "7.
|
|
80
|
+
"@polkadot/api": "6.4.1",
|
|
81
|
+
"@polkadot/keyring": "7.5.1",
|
|
82
|
+
"@polkadot/networks": "7.5.1",
|
|
83
|
+
"@polkadot/types": "6.4.1",
|
|
84
|
+
"@polkadot/types-known": "6.4.1",
|
|
85
|
+
"@polkadot/util": "7.5.1",
|
|
86
|
+
"@polkadot/util-crypto": "7.5.1",
|
|
87
87
|
"@polkadot/wasm-crypto": "4.2.1",
|
|
88
88
|
"node-forge": ">=0.10.0",
|
|
89
89
|
"node-fetch": ">=2.6.1",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kusamaConsts.js","sourceRoot":"","sources":["../../../../src/chains-config/metadata-consts/kusamaConsts.ts"],"names":[],"mappings":";;;AACA,uDAAkE;AAErD,QAAA,iBAAiB,GAAqB;IAClD;QACC,eAAe,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;YACtE,IAAI,EAAE,IAAI;SACV;QACD,mBAAmB,EAAnB,qCAAmB;KACnB;IACD;QACC,eAAe,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;YACtE,IAAI,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"kusamaConsts.js","sourceRoot":"","sources":["../../../../src/chains-config/metadata-consts/kusamaConsts.ts"],"names":[],"mappings":";;;AACA,uDAAkE;AAErD,QAAA,iBAAiB,GAAqB;IAClD;QACC,eAAe,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;YACtE,IAAI,EAAE,IAAI;SACV;QACD,mBAAmB,EAAnB,qCAAmB;KACnB;IACD;QACC,eAAe,EAAE;YAChB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;YACtE,IAAI,EAAE,IAAI,EAAE,IAAI;SAChB;QACD,QAAQ,EAAR,0BAAQ;KACR;CACD,CAAC"}
|
|
@@ -54,7 +54,8 @@ class AccountsBalanceController extends AbstractController_1.default {
|
|
|
54
54
|
: // We assume the first token is the native token
|
|
55
55
|
this.api.registry.chainTokens[0].toUpperCase();
|
|
56
56
|
const hash = await this.getHashFromAt(at);
|
|
57
|
-
|
|
57
|
+
const historicApi = await this.api.at(hash);
|
|
58
|
+
AccountsBalanceController.sanitizedSend(res, await this.service.fetchAccountBalanceInfo(hash, historicApi, address, tokenArg));
|
|
58
59
|
};
|
|
59
60
|
this.initRoutes();
|
|
60
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsBalanceInfoController.js","sourceRoot":"","sources":["../../../../src/controllers/accounts/AccountsBalanceInfoController.ts"],"names":[],"mappings":";;;;;AAIA,iDAAmD;AACnD,6CAA4D;AAC5D,+EAAuD;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAqB,yBAA0B,SAAQ,4BAA8C;IACpG,YAAY,GAAe;QAC1B,KAAK,CACJ,GAAG,EACH,iCAAiC,EACjC,IAAI,qCAA0B,CAAC,GAAG,CAAC,CACnC,CAAC;QAUH;;;;;WAKG;QACK,0BAAqB,GAAkC,KAAK,EACnE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAC7C,GAAG,EACa,EAAE;YAClB,MAAM,QAAQ,GACb,OAAO,KAAK,KAAK,QAAQ;gBACxB,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;gBACrB,CAAC,CAAC,gDAAgD;oBAChD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAEnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AccountsBalanceInfoController.js","sourceRoot":"","sources":["../../../../src/controllers/accounts/AccountsBalanceInfoController.ts"],"names":[],"mappings":";;;;;AAIA,iDAAmD;AACnD,6CAA4D;AAC5D,+EAAuD;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAqB,yBAA0B,SAAQ,4BAA8C;IACpG,YAAY,GAAe;QAC1B,KAAK,CACJ,GAAG,EACH,iCAAiC,EACjC,IAAI,qCAA0B,CAAC,GAAG,CAAC,CACnC,CAAC;QAUH;;;;;WAKG;QACK,0BAAqB,GAAkC,KAAK,EACnE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAC7C,GAAG,EACa,EAAE;YAClB,MAAM,QAAQ,GACb,OAAO,KAAK,KAAK,QAAQ;gBACxB,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;gBACrB,CAAC,CAAC,gDAAgD;oBAChD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAEnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAE5C,yBAAyB,CAAC,aAAa,CACtC,GAAG,EACH,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,CACzC,IAAI,EACJ,WAAW,EACX,OAAO,EACP,QAAQ,CACR,CACD,CAAC;QACH,CAAC,CAAC;QArCD,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAES,UAAU;QACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,4BAAe,CAAC,CAAC;QAE5C,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;CA+BD;AA7CD,4CA6CC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ApiDecoration } from '@polkadot/api/types';
|
|
1
2
|
import { BlockHash } from '@polkadot/types/interfaces';
|
|
2
3
|
import { IAccountBalanceInfo } from 'src/types/responses';
|
|
3
4
|
import { AbstractService } from '../AbstractService';
|
|
@@ -10,5 +11,5 @@ export declare class AccountsBalanceInfoService extends AbstractService {
|
|
|
10
11
|
* @param address Address of the account to get the balance info of.
|
|
11
12
|
* @param token Token to get the balance info of.
|
|
12
13
|
*/
|
|
13
|
-
fetchAccountBalanceInfo(hash: BlockHash, address: string, token: string): Promise<IAccountBalanceInfo>;
|
|
14
|
+
fetchAccountBalanceInfo(hash: BlockHash, historicApi: ApiDecoration<'promise'>, address: string, token: string): Promise<IAccountBalanceInfo>;
|
|
14
15
|
}
|
|
@@ -12,27 +12,25 @@ class AccountsBalanceInfoService extends AbstractService_1.AbstractService {
|
|
|
12
12
|
* @param address Address of the account to get the balance info of.
|
|
13
13
|
* @param token Token to get the balance info of.
|
|
14
14
|
*/
|
|
15
|
-
async fetchAccountBalanceInfo(hash, address, token) {
|
|
15
|
+
async fetchAccountBalanceInfo(hash, historicApi, address, token) {
|
|
16
16
|
const { api } = this;
|
|
17
|
-
// Retrieve the historic api for the given hash
|
|
18
|
-
const historicalApi = await api.at(hash);
|
|
19
17
|
/**
|
|
20
|
-
* Check two different cases where a
|
|
18
|
+
* Check two different cases where a historicApi is needed in order
|
|
21
19
|
* to have the correct runtime methods.
|
|
22
20
|
*
|
|
23
21
|
* a) Does the block use the oldest api where the free balance is found
|
|
24
|
-
* using `
|
|
22
|
+
* using `historicApi.query.balances.freeBalance`.
|
|
25
23
|
*
|
|
26
24
|
* b) Does the block use an older api where the free balance is within the
|
|
27
25
|
* AccountInfo type, but the storage does not yet have the `.at` method.
|
|
28
26
|
*/
|
|
29
|
-
if (
|
|
27
|
+
if (historicApi.query.balances.freeBalance) {
|
|
30
28
|
const [header, free, locks, reserved, nonce] = await Promise.all([
|
|
31
29
|
api.rpc.chain.getHeader(hash),
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
historicApi.query.balances.freeBalance(address),
|
|
31
|
+
historicApi.query.balances.locks(address),
|
|
32
|
+
historicApi.query.balances.reservedBalance(address),
|
|
33
|
+
historicApi.query.system.accountNonce(address),
|
|
36
34
|
]);
|
|
37
35
|
// Values dont exist for these historic runtimes
|
|
38
36
|
const miscFrozen = api.registry.createType('Balance', 0), feeFrozen = api.registry.createType('Balance', 0);
|
|
@@ -56,11 +54,11 @@ class AccountsBalanceInfoService extends AbstractService_1.AbstractService {
|
|
|
56
54
|
throw new http_errors_1.BadRequest('Account not found');
|
|
57
55
|
}
|
|
58
56
|
}
|
|
59
|
-
else if (!
|
|
57
|
+
else if (!historicApi.query.system.account.at) {
|
|
60
58
|
const [header, accountInfo, locks] = await Promise.all([
|
|
61
59
|
api.rpc.chain.getHeader(hash),
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
historicApi.query.system.account(address),
|
|
61
|
+
historicApi.query.balances.locks(address),
|
|
64
62
|
]);
|
|
65
63
|
const { data: { free, reserved, feeFrozen, miscFrozen }, nonce, } = accountInfo;
|
|
66
64
|
const at = {
|
|
@@ -85,16 +83,16 @@ class AccountsBalanceInfoService extends AbstractService_1.AbstractService {
|
|
|
85
83
|
}
|
|
86
84
|
let locks, header, accountInfo, accountData;
|
|
87
85
|
// We assume the first token is the native token
|
|
88
|
-
if (token.toUpperCase() ===
|
|
86
|
+
if (token.toUpperCase() === historicApi.registry.chainTokens[0].toUpperCase()) {
|
|
89
87
|
[header, locks, accountInfo] = await Promise.all([
|
|
90
88
|
api.rpc.chain.getHeader(hash),
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
historicApi.query.balances.locks(address),
|
|
90
|
+
historicApi.query.system.account(address),
|
|
93
91
|
]);
|
|
94
92
|
accountData =
|
|
95
93
|
accountInfo.data != null
|
|
96
94
|
? accountInfo.data
|
|
97
|
-
: await
|
|
95
|
+
: await historicApi.query.balances.account(address);
|
|
98
96
|
}
|
|
99
97
|
else {
|
|
100
98
|
// Assume we are using ORML token pallet
|
|
@@ -102,11 +100,11 @@ class AccountsBalanceInfoService extends AbstractService_1.AbstractService {
|
|
|
102
100
|
try {
|
|
103
101
|
[header, locksAny, accountDataAny, accountInfo] = await Promise.all([
|
|
104
102
|
api.rpc.chain.getHeader(hash),
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
historicApi.query.tokens.locks(address, { Token: token }),
|
|
104
|
+
historicApi.query.tokens.accounts(address, {
|
|
107
105
|
Token: token,
|
|
108
106
|
}),
|
|
109
|
-
|
|
107
|
+
historicApi.query.system.account(address),
|
|
110
108
|
]);
|
|
111
109
|
}
|
|
112
110
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsBalanceInfoService.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsBalanceInfoService.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AccountsBalanceInfoService.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsBalanceInfoService.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,19 +6,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const sanitizeNumbers_1 = require("../../sanitize/sanitizeNumbers");
|
|
7
7
|
const registries_1 = require("../../test-helpers/registries");
|
|
8
8
|
const mock_1 = require("../test-helpers/mock");
|
|
9
|
-
const events789629Hex_1 = require("../test-helpers/mock/data/events789629Hex");
|
|
10
9
|
const balanceInfo789629_json_1 = __importDefault(require("../test-helpers/responses/accounts/balanceInfo789629.json"));
|
|
11
10
|
const AccountsBalanceInfoService_1 = require("./AccountsBalanceInfoService");
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const freeBalance = async () => registries_1.polkadotRegistry.createType('Balance', 123456789);
|
|
11
|
+
const locksAt = (_address) => Promise.resolve().then(() => registries_1.polkadotRegistry.createType('Vec<BalanceLock>', '0x047374616b696e672000e8764817000000000000000000000002'));
|
|
12
|
+
const accountAt = (_address) => Promise.resolve().then(() => registries_1.polkadotRegistry.createType('AccountInfo', '0x0600000003dbb656ab7400000000000000000000000000000000000000000000000000000000e8764817000000000000000000000000e87648170000000000000000000000'));
|
|
13
|
+
const freeBalanceAt = () => Promise.resolve().then(() => registries_1.polkadotRegistry.createType('Balance', 123456789));
|
|
16
14
|
const mockHistoricApi = {
|
|
15
|
+
registry: registries_1.polkadotRegistry,
|
|
17
16
|
query: {
|
|
18
17
|
balances: {
|
|
19
|
-
freeBalance,
|
|
18
|
+
freeBalance: freeBalanceAt,
|
|
20
19
|
reservedBalance: async () => registries_1.polkadotRegistry.createType('Balance', 1),
|
|
21
|
-
locks:
|
|
20
|
+
locks: locksAt,
|
|
22
21
|
},
|
|
23
22
|
system: {
|
|
24
23
|
accountNonce: async () => registries_1.polkadotRegistry.createType('Index', 1),
|
|
@@ -26,20 +25,8 @@ const mockHistoricApi = {
|
|
|
26
25
|
},
|
|
27
26
|
},
|
|
28
27
|
};
|
|
29
|
-
const queryMockApi = {
|
|
30
|
-
query: {
|
|
31
|
-
system: {
|
|
32
|
-
events: eventsAt,
|
|
33
|
-
account: { at: accountAt },
|
|
34
|
-
},
|
|
35
|
-
balances: {
|
|
36
|
-
locks: { at: locksAt },
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
28
|
const mockApi = {
|
|
41
29
|
...mock_1.defaultMockApi,
|
|
42
|
-
...queryMockApi,
|
|
43
30
|
at: (_hash) => mockHistoricApi,
|
|
44
31
|
};
|
|
45
32
|
const accountsBalanceInfoService = new AccountsBalanceInfoService_1.AccountsBalanceInfoService(mockApi);
|
|
@@ -50,14 +37,13 @@ describe('AccountsBalanceInfoService', () => {
|
|
|
50
37
|
tempHistoricApi.query.balances.freeBalance = undefined;
|
|
51
38
|
const tempMockApi = {
|
|
52
39
|
...mock_1.defaultMockApi,
|
|
53
|
-
...queryMockApi,
|
|
54
40
|
at: (_hash) => tempHistoricApi,
|
|
55
41
|
};
|
|
56
42
|
const tempAccountsBalanceInfoService = new AccountsBalanceInfoService_1.AccountsBalanceInfoService(tempMockApi);
|
|
57
|
-
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await tempAccountsBalanceInfoService.fetchAccountBalanceInfo(mock_1.blockHash789629, mock_1.testAddress, 'DOT'))).toStrictEqual(balanceInfo789629_json_1.default);
|
|
43
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await tempAccountsBalanceInfoService.fetchAccountBalanceInfo(mock_1.blockHash789629, mockHistoricApi, mock_1.testAddress, 'DOT'))).toStrictEqual(balanceInfo789629_json_1.default);
|
|
58
44
|
});
|
|
59
45
|
it('Correctly queries historical blocks', async () => {
|
|
60
|
-
const result = await accountsBalanceInfoService.fetchAccountBalanceInfo(mock_1.blockHash789629, mock_1.testAddress, 'DOT');
|
|
46
|
+
const result = await accountsBalanceInfoService.fetchAccountBalanceInfo(mock_1.blockHash789629, mockHistoricApi, mock_1.testAddress, 'DOT');
|
|
61
47
|
const expectedResponse = {
|
|
62
48
|
at: {
|
|
63
49
|
hash: '0x7b713de604a99857f6c25eacc115a4f28d2611a23d9ddff99ab0e4f1c17a8578',
|
|
@@ -81,11 +67,10 @@ describe('AccountsBalanceInfoService', () => {
|
|
|
81
67
|
});
|
|
82
68
|
describe('token recognition', () => {
|
|
83
69
|
const tokenHistoricApi = { ...mockHistoricApi };
|
|
84
|
-
tokenHistoricApi.query.system.account
|
|
70
|
+
Object.assign(tokenHistoricApi.query.system.account, { at: true });
|
|
85
71
|
tokenHistoricApi.query.balances.freeBalance = undefined;
|
|
86
72
|
const tokenMockApi = {
|
|
87
73
|
...mock_1.defaultMockApi,
|
|
88
|
-
...queryMockApi,
|
|
89
74
|
at: (_hash) => tokenHistoricApi,
|
|
90
75
|
};
|
|
91
76
|
const tokenAccountsBalanceInfoService = new AccountsBalanceInfoService_1.AccountsBalanceInfoService(tokenMockApi);
|
|
@@ -93,18 +78,19 @@ describe('AccountsBalanceInfoService', () => {
|
|
|
93
78
|
beforeAll(() => {
|
|
94
79
|
// Important: these temp values should never be reassinged. They are used so we can assign
|
|
95
80
|
// the mockApi properties back to their original values after this sub-section of tests run.
|
|
96
|
-
tempQueryTokens =
|
|
97
|
-
tempQueryBalance =
|
|
98
|
-
const tokensAccountAt = async (
|
|
81
|
+
tempQueryTokens = tokenHistoricApi.query.tokens;
|
|
82
|
+
tempQueryBalance = tokenHistoricApi.query.balances;
|
|
83
|
+
const tokensAccountAt = async (address) => (await tokenHistoricApi.query.system.account(address)).data;
|
|
99
84
|
// Wrap our functions in a jest mock so we can collect data on how they are called
|
|
100
|
-
mockTokensLocksAt = jest.fn(
|
|
85
|
+
mockTokensLocksAt = jest.fn(tokenHistoricApi.query.balances.locks);
|
|
101
86
|
mockTokenAccountAt = jest.fn(tokensAccountAt);
|
|
102
|
-
|
|
103
|
-
locks:
|
|
104
|
-
accounts:
|
|
87
|
+
tokenHistoricApi.query.tokens = {
|
|
88
|
+
locks: mockTokensLocksAt,
|
|
89
|
+
accounts: mockTokenAccountAt,
|
|
105
90
|
};
|
|
106
|
-
mockBalancesLocksAt = jest.fn(
|
|
107
|
-
|
|
91
|
+
mockBalancesLocksAt = jest.fn(tokenHistoricApi.query.balances.locks);
|
|
92
|
+
tokenHistoricApi.query.balances.locks =
|
|
93
|
+
mockBalancesLocksAt;
|
|
108
94
|
});
|
|
109
95
|
afterEach(() => {
|
|
110
96
|
// Clear data about how the mocks where called after each `it` test.
|
|
@@ -113,21 +99,21 @@ describe('AccountsBalanceInfoService', () => {
|
|
|
113
99
|
mockBalancesLocksAt.mockClear();
|
|
114
100
|
});
|
|
115
101
|
afterAll(() => {
|
|
116
|
-
|
|
117
|
-
|
|
102
|
+
tokenHistoricApi.query.tokens = tempQueryTokens;
|
|
103
|
+
tokenHistoricApi.query.balances = tempQueryBalance;
|
|
118
104
|
});
|
|
119
105
|
it('only has `["DOT"]` (all uppercase chars) for the mockApi registry', () => {
|
|
120
|
-
expect(
|
|
121
|
-
expect(
|
|
106
|
+
expect(tokenHistoricApi.registry.chainTokens).toStrictEqual(['DOT']);
|
|
107
|
+
expect(tokenHistoricApi.registry.chainDecimals).toStrictEqual([12]);
|
|
122
108
|
});
|
|
123
109
|
it('querrys tokens pallet storage with a non-native token', async () => {
|
|
124
|
-
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await tokenAccountsBalanceInfoService.fetchAccountBalanceInfo(mock_1.blockHash789629, mock_1.testAddress, 'fOoToKeN')).tokenSymbol).toEqual('fOoToKeN');
|
|
110
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await tokenAccountsBalanceInfoService.fetchAccountBalanceInfo(mock_1.blockHash789629, tokenHistoricApi, mock_1.testAddress, 'fOoToKeN')).tokenSymbol).toEqual('fOoToKeN');
|
|
125
111
|
expect(mockTokensLocksAt).toBeCalled();
|
|
126
112
|
expect(mockTokenAccountAt).toBeCalled();
|
|
127
113
|
expect(mockBalancesLocksAt).not.toBeCalled();
|
|
128
114
|
});
|
|
129
115
|
it('does not query tokens pallet storage with the native token', async () => {
|
|
130
|
-
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await tokenAccountsBalanceInfoService.fetchAccountBalanceInfo(mock_1.blockHash789629, mock_1.testAddress, 'doT')).tokenSymbol).toEqual('doT');
|
|
116
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await tokenAccountsBalanceInfoService.fetchAccountBalanceInfo(mock_1.blockHash789629, tokenHistoricApi, mock_1.testAddress, 'doT')).tokenSymbol).toEqual('doT');
|
|
131
117
|
expect(mockTokensLocksAt).not.toBeCalled();
|
|
132
118
|
expect(mockTokenAccountAt).not.toBeCalled();
|
|
133
119
|
expect(mockBalancesLocksAt).toBeCalled();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsBalanceInfoService.spec.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsBalanceInfoService.spec.ts"],"names":[],"mappings":";;;;;AAQA,oEAAiE;AACjE,8DAAiE;AACjE,+CAI8B;AAC9B
|
|
1
|
+
{"version":3,"file":"AccountsBalanceInfoService.spec.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsBalanceInfoService.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AccountsVestingInfoService = void 0;
|
|
4
|
+
const http_errors_1 = require("http-errors");
|
|
4
5
|
const AbstractService_1 = require("../AbstractService");
|
|
5
6
|
class AccountsVestingInfoService extends AbstractService_1.AbstractService {
|
|
6
7
|
/**
|
|
@@ -11,18 +12,31 @@ class AccountsVestingInfoService extends AbstractService_1.AbstractService {
|
|
|
11
12
|
*/
|
|
12
13
|
async fetchAccountVestingInfo(hash, address) {
|
|
13
14
|
const { api } = this;
|
|
15
|
+
const historicApi = await api.at(hash);
|
|
16
|
+
if (!historicApi.query.vesting) {
|
|
17
|
+
throw new http_errors_1.BadRequest(`Vesting pallet does not exist on the specified blocks runtime version`);
|
|
18
|
+
}
|
|
14
19
|
const [{ number }, vesting] = await Promise.all([
|
|
15
20
|
api.rpc.chain.getHeader(hash),
|
|
16
|
-
|
|
21
|
+
historicApi.query.vesting.vesting(address),
|
|
17
22
|
]);
|
|
18
23
|
const at = {
|
|
19
24
|
hash,
|
|
20
25
|
height: number.unwrap().toString(10),
|
|
21
26
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
if (vesting.isNone) {
|
|
28
|
+
return {
|
|
29
|
+
at,
|
|
30
|
+
vesting: [],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const unwrapVesting = vesting.unwrap();
|
|
35
|
+
return {
|
|
36
|
+
at,
|
|
37
|
+
vesting: Array.isArray(unwrapVesting) ? unwrapVesting : [unwrapVesting],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
26
40
|
}
|
|
27
41
|
}
|
|
28
42
|
exports.AccountsVestingInfoService = AccountsVestingInfoService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsVestingInfoService.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsVestingInfoService.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AccountsVestingInfoService.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsVestingInfoService.ts"],"names":[],"mappings":";;;AACA,6CAAyC;AAGzC,wDAAqD;AAErD,MAAa,0BAA2B,SAAQ,iCAAe;IAC9D;;;;;OAKG;IACH,KAAK,CAAC,uBAAuB,CAC5B,IAAe,EACf,OAAe;QAEf,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAErB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE;YAC/B,MAAM,IAAI,wBAAU,CACnB,uEAAuE,CACvE,CAAC;SACF;QAED,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/C,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;YAC7B,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SAC1C,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG;YACV,IAAI;YACJ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;SACpC,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,EAAE;YACnB,OAAO;gBACN,EAAE;gBACF,OAAO,EAAE,EAAE;aACX,CAAC;SACF;aAAM;YACN,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAEvC,OAAO;gBACN,EAAE;gBACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;aACvE,CAAC;SACF;IACF,CAAC;CACD;AA7CD,gEA6CC"}
|
|
@@ -4,24 +4,59 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const sanitizeNumbers_1 = require("../../sanitize/sanitizeNumbers");
|
|
7
|
+
const polkadotV9110Metadata_1 = require("../../test-helpers/metadata/polkadotV9110Metadata");
|
|
7
8
|
const registries_1 = require("../../test-helpers/registries");
|
|
9
|
+
const typeFactory_1 = require("../../test-helpers/typeFactory");
|
|
8
10
|
const mock_1 = require("../test-helpers/mock");
|
|
9
11
|
const vestingInfo789629_json_1 = __importDefault(require("../test-helpers/responses/accounts/vestingInfo789629.json"));
|
|
10
12
|
const AccountsVestingInfoService_1 = require("./AccountsVestingInfoService");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
13
|
+
const typeFactorApiV9110 = (0, typeFactory_1.createApiWithAugmentations)(polkadotV9110Metadata_1.polkadotMetadataRpcV9110);
|
|
14
|
+
const factory = new typeFactory_1.TypeFactory(typeFactorApiV9110);
|
|
15
|
+
const vestingRes = {
|
|
16
|
+
locked: '1749990000000000',
|
|
17
|
+
perBlock: '166475460',
|
|
18
|
+
startingBlock: '4961000',
|
|
19
|
+
};
|
|
20
|
+
const vestingAt = (_address) => Promise.resolve().then(() => {
|
|
21
|
+
const vestingInfo = typeFactorApiV9110.createType('PalletVestingVestingInfo', vestingRes);
|
|
22
|
+
const vecVestingInfo = factory.vecOf([vestingInfo]);
|
|
23
|
+
return factory.optionOf(vecVestingInfo);
|
|
24
|
+
});
|
|
25
|
+
const historicVestingAt = (_address) => Promise.resolve().then(() => registries_1.polkadotRegistry.createType('Option<VestingInfo>', vestingRes));
|
|
26
|
+
const mockHistoricApi = {
|
|
14
27
|
query: {
|
|
15
28
|
vesting: {
|
|
16
|
-
vesting:
|
|
29
|
+
vesting: vestingAt,
|
|
17
30
|
},
|
|
18
31
|
},
|
|
19
32
|
};
|
|
33
|
+
const mockApi = {
|
|
34
|
+
...mock_1.defaultMockApi,
|
|
35
|
+
at: (_hash) => mockHistoricApi,
|
|
36
|
+
};
|
|
20
37
|
const accountsVestingInfoService = new AccountsVestingInfoService_1.AccountsVestingInfoService(mockApi);
|
|
21
38
|
describe('AccountVestingInfoService', () => {
|
|
22
39
|
describe('fetchAccountVestingInfo', () => {
|
|
23
|
-
it('works when ApiPromise works (block 789629)', async () => {
|
|
40
|
+
it('works when ApiPromise works (block 789629) with V14 metadata', async () => {
|
|
41
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await accountsVestingInfoService.fetchAccountVestingInfo(mock_1.blockHash789629, mock_1.testAddress))).toStrictEqual(vestingInfo789629_json_1.default);
|
|
42
|
+
});
|
|
43
|
+
it('Vesting should return an empty array for None responses', async () => {
|
|
44
|
+
const tempVest = () => Promise.resolve().then(() => registries_1.polkadotRegistry.createType('Option<VestingInfo>', null));
|
|
45
|
+
mockHistoricApi.query.vesting.vesting = tempVest;
|
|
46
|
+
const expectedResponse = {
|
|
47
|
+
at: {
|
|
48
|
+
hash: '0x7b713de604a99857f6c25eacc115a4f28d2611a23d9ddff99ab0e4f1c17a8578',
|
|
49
|
+
height: '789629',
|
|
50
|
+
},
|
|
51
|
+
vesting: [],
|
|
52
|
+
};
|
|
53
|
+
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await accountsVestingInfoService.fetchAccountVestingInfo(mock_1.blockHash789629, mock_1.testAddress))).toStrictEqual(expectedResponse);
|
|
54
|
+
mockHistoricApi.query.vesting.vesting = vestingAt;
|
|
55
|
+
});
|
|
56
|
+
it('Should correctly adjust `Option<VestingInfo>` for pre V14 blocks to return an array', async () => {
|
|
57
|
+
mockHistoricApi.query.vesting.vesting = historicVestingAt;
|
|
24
58
|
expect((0, sanitizeNumbers_1.sanitizeNumbers)(await accountsVestingInfoService.fetchAccountVestingInfo(mock_1.blockHash789629, mock_1.testAddress))).toStrictEqual(vestingInfo789629_json_1.default);
|
|
59
|
+
mockHistoricApi.query.vesting.vesting = vestingAt;
|
|
25
60
|
});
|
|
26
61
|
});
|
|
27
62
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsVestingInfoService.spec.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsVestingInfoService.spec.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"AccountsVestingInfoService.spec.js","sourceRoot":"","sources":["../../../../src/services/accounts/AccountsVestingInfoService.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "11.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",
|
|
@@ -51,9 +51,9 @@
|
|
|
51
51
|
"test:test-release": "yarn start:test-release"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@polkadot/api": "6.
|
|
55
|
-
"@polkadot/apps-config": "0.
|
|
56
|
-
"@polkadot/util-crypto": "^7.
|
|
54
|
+
"@polkadot/api": "6.4.1",
|
|
55
|
+
"@polkadot/apps-config": "0.97.2-0",
|
|
56
|
+
"@polkadot/util-crypto": "^7.5.1",
|
|
57
57
|
"@polkadot/x-rxjs": "^6.11.1",
|
|
58
58
|
"@substrate/calc": "^0.2.3",
|
|
59
59
|
"argparse": "^2.0.1",
|
|
@@ -77,13 +77,13 @@
|
|
|
77
77
|
"tsc-watch": "^4.4.0"
|
|
78
78
|
},
|
|
79
79
|
"resolutions": {
|
|
80
|
-
"@polkadot/api": "6.
|
|
81
|
-
"@polkadot/keyring": "7.
|
|
82
|
-
"@polkadot/networks": "7.
|
|
83
|
-
"@polkadot/types": "6.
|
|
84
|
-
"@polkadot/types-known": "6.
|
|
85
|
-
"@polkadot/util": "7.
|
|
86
|
-
"@polkadot/util-crypto": "7.
|
|
80
|
+
"@polkadot/api": "6.4.1",
|
|
81
|
+
"@polkadot/keyring": "7.5.1",
|
|
82
|
+
"@polkadot/networks": "7.5.1",
|
|
83
|
+
"@polkadot/types": "6.4.1",
|
|
84
|
+
"@polkadot/types-known": "6.4.1",
|
|
85
|
+
"@polkadot/util": "7.5.1",
|
|
86
|
+
"@polkadot/util-crypto": "7.5.1",
|
|
87
87
|
"@polkadot/wasm-crypto": "4.2.1",
|
|
88
88
|
"node-forge": ">=0.10.0",
|
|
89
89
|
"node-fetch": ">=2.6.1",
|