@substrate/api-sidecar 20.13.3 → 20.14.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 +3 -2
- package/build/src/chains-config/assetHubKusamaControllers.js +2 -1
- package/build/src/chains-config/assetHubKusamaControllers.js.map +1 -1
- package/build/src/chains-config/assetHubNextWestendControllers.js +2 -1
- package/build/src/chains-config/assetHubNextWestendControllers.js.map +1 -1
- package/build/src/chains-config/assetHubPolkadotControllers.js +2 -1
- package/build/src/chains-config/assetHubPolkadotControllers.js.map +1 -1
- package/build/src/chains-config/assetHubWestendControllers.js +2 -1
- package/build/src/chains-config/assetHubWestendControllers.js.map +1 -1
- package/build/src/chains-config/defaultControllers.js +2 -1
- package/build/src/chains-config/defaultControllers.js.map +1 -1
- package/build/src/chains-config/kusamaControllers.js +2 -1
- package/build/src/chains-config/kusamaControllers.js.map +1 -1
- package/build/src/chains-config/polkadotControllers.js +2 -1
- package/build/src/chains-config/polkadotControllers.js.map +1 -1
- package/build/src/chains-config/westendControllers.js +2 -1
- package/build/src/chains-config/westendControllers.js.map +1 -1
- package/build/src/controllers/AbstractController.d.ts +16 -0
- package/build/src/controllers/AbstractController.js +33 -0
- package/build/src/controllers/AbstractController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsAssetsController.js +36 -8
- package/build/src/controllers/accounts/AccountsAssetsController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsBalanceInfoController.js +18 -4
- package/build/src/controllers/accounts/AccountsBalanceInfoController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsForeignAssetsController.js +18 -4
- package/build/src/controllers/accounts/AccountsForeignAssetsController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsPoolAssetsController.js +36 -8
- package/build/src/controllers/accounts/AccountsPoolAssetsController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsProxyInfoController.js +18 -4
- package/build/src/controllers/accounts/AccountsProxyInfoController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsStakingInfoController.js +18 -4
- package/build/src/controllers/accounts/AccountsStakingInfoController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsStakingPayoutsController.js +18 -4
- package/build/src/controllers/accounts/AccountsStakingPayoutsController.js.map +1 -1
- package/build/src/controllers/accounts/AccountsVestingInfoController.js +18 -4
- package/build/src/controllers/accounts/AccountsVestingInfoController.js.map +1 -1
- package/build/src/controllers/blocks/BlocksController.js +87 -18
- package/build/src/controllers/blocks/BlocksController.js.map +1 -1
- package/build/src/controllers/blocks/BlocksExtrinsicsController.js +18 -4
- package/build/src/controllers/blocks/BlocksExtrinsicsController.js.map +1 -1
- package/build/src/controllers/blocks/BlocksRawExtrinsicsController.js +18 -4
- package/build/src/controllers/blocks/BlocksRawExtrinsicsController.js.map +1 -1
- package/build/src/controllers/index.d.ts +2 -1
- package/build/src/controllers/index.js +2 -1
- package/build/src/controllers/index.js.map +1 -1
- package/build/src/controllers/pallets/PalletsAssetConversionController.js +36 -8
- package/build/src/controllers/pallets/PalletsAssetConversionController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsAssetsController.js +18 -4
- package/build/src/controllers/pallets/PalletsAssetsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsConstsController.js +36 -8
- package/build/src/controllers/pallets/PalletsConstsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsDispatchablesController.js +36 -8
- package/build/src/controllers/pallets/PalletsDispatchablesController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsErrorsController.js +36 -8
- package/build/src/controllers/pallets/PalletsErrorsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsEventsController.js +36 -8
- package/build/src/controllers/pallets/PalletsEventsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsForeignAssetsController.js +18 -4
- package/build/src/controllers/pallets/PalletsForeignAssetsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsNominationPoolsController.js +36 -8
- package/build/src/controllers/pallets/PalletsNominationPoolsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsOnGoingReferendaController.js +18 -4
- package/build/src/controllers/pallets/PalletsOnGoingReferendaController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsPoolAssetsController.js +18 -4
- package/build/src/controllers/pallets/PalletsPoolAssetsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsStakingProgressController.js +18 -4
- package/build/src/controllers/pallets/PalletsStakingProgressController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsStakingValidatorsController.js +18 -4
- package/build/src/controllers/pallets/PalletsStakingValidatorsController.js.map +1 -1
- package/build/src/controllers/pallets/PalletsStorageController.js +36 -8
- package/build/src/controllers/pallets/PalletsStorageController.js.map +1 -1
- package/build/src/controllers/transaction/TransactionMetadataBlobController.d.ts +55 -0
- package/build/src/controllers/transaction/TransactionMetadataBlobController.js +91 -0
- package/build/src/controllers/transaction/TransactionMetadataBlobController.js.map +1 -0
- package/build/src/controllers/transaction/index.d.ts +1 -0
- package/build/src/controllers/transaction/index.js +4 -2
- package/build/src/controllers/transaction/index.js.map +1 -1
- package/build/src/middleware/validate/validateUseRcBlockMiddleware.d.ts +5 -4
- package/build/src/middleware/validate/validateUseRcBlockMiddleware.js +20 -6
- package/build/src/middleware/validate/validateUseRcBlockMiddleware.js.map +1 -1
- package/build/src/services/transaction/TransactionMetadataBlobService.d.ts +23 -0
- package/build/src/services/transaction/TransactionMetadataBlobService.js +144 -0
- package/build/src/services/transaction/TransactionMetadataBlobService.js.map +1 -0
- package/build/src/services/transaction/TransactionMetadataBlobService.spec.d.ts +1 -0
- package/build/src/services/transaction/TransactionMetadataBlobService.spec.js +269 -0
- package/build/src/services/transaction/TransactionMetadataBlobService.spec.js.map +1 -0
- package/build/src/services/transaction/index.d.ts +1 -0
- package/build/src/services/transaction/index.js +2 -1
- package/build/src/services/transaction/index.js.map +1 -1
- package/build/src/types/requests.d.ts +57 -0
- package/build/src/types/requests.js +1 -1
- package/build/src/types/responses/RcBlockFormat.d.ts +24 -0
- package/build/src/types/responses/RcBlockFormat.js +18 -0
- package/build/src/types/responses/RcBlockFormat.js.map +1 -0
- package/build/src/types/responses/TransactionMetadataBlob.d.ts +11 -0
- package/build/src/types/responses/TransactionMetadataBlob.js +18 -0
- package/build/src/types/responses/TransactionMetadataBlob.js.map +1 -0
- package/build/src/types/responses/index.d.ts +2 -0
- package/build/src/types/responses/index.js +3 -1
- package/build/src/types/responses/index.js.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PalletsStakingValidatorsController.js","sourceRoot":"","sources":["../../../../src/controllers/pallets/PalletsStakingValidatorsController.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,8CAA8C;AAC9C,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,oEAAoE;AACpE,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,wEAAwE;;;;;AAIxE,iDAAsD;AACtD,6CAAiE;AACjE,+EAAuD;AAEvD,MAAqB,kCAAmC,SAAQ,4BAAmD;IAGlH,YAAY,GAAW;QACtB,KAAK,CAAC,GAAG,EAAE,6BAA6B,EAAE,IAAI,0CAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;QASrF;;;;;WAKG;QACK,+BAA0B,GAAmB,KAAK,
|
|
1
|
+
{"version":3,"file":"PalletsStakingValidatorsController.js","sourceRoot":"","sources":["../../../../src/controllers/pallets/PalletsStakingValidatorsController.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,14 +38,21 @@ const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
|
38
38
|
class PalletsStorageController extends AbstractController_1.default {
|
|
39
39
|
constructor(api) {
|
|
40
40
|
super(api, '/pallets/:palletId/storage', new services_1.PalletsStorageService(api));
|
|
41
|
-
this.getStorageItem = async ({ query: { at, keys, metadata, useRcBlock }, params: { palletId, storageItemId } }, res) => {
|
|
41
|
+
this.getStorageItem = async ({ query: { at, keys, metadata, useRcBlock, useRcBlockFormat }, params: { palletId, storageItemId } }, res) => {
|
|
42
42
|
const parsedKeys = Array.isArray(keys) ? keys : [];
|
|
43
43
|
const metadataArg = metadata === 'true';
|
|
44
|
+
const useObjectFormat = useRcBlockFormat === 'object';
|
|
44
45
|
if (useRcBlock === 'true') {
|
|
45
46
|
const rcAtResults = await this.getHashFromRcAt(at);
|
|
46
|
-
//
|
|
47
|
+
// Handle empty results based on format
|
|
47
48
|
if (rcAtResults.length === 0) {
|
|
48
|
-
|
|
49
|
+
if (useObjectFormat) {
|
|
50
|
+
const rcBlockInfo = await this.getRcBlockInfo(at);
|
|
51
|
+
PalletsStorageController.sanitizedSend(res, this.formatRcBlockObjectResponse(rcBlockInfo, []));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
PalletsStorageController.sanitizedSend(res, []);
|
|
55
|
+
}
|
|
49
56
|
return;
|
|
50
57
|
}
|
|
51
58
|
// Process each Asset Hub block found
|
|
@@ -70,7 +77,14 @@ class PalletsStorageController extends AbstractController_1.default {
|
|
|
70
77
|
};
|
|
71
78
|
results.push(enhancedResult);
|
|
72
79
|
}
|
|
73
|
-
|
|
80
|
+
// Send response based on format
|
|
81
|
+
if (useObjectFormat) {
|
|
82
|
+
const rcBlockInfo = await this.getRcBlockInfo(at);
|
|
83
|
+
PalletsStorageController.sanitizedSend(res, this.formatRcBlockObjectResponse(rcBlockInfo, results));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
PalletsStorageController.sanitizedSend(res, results);
|
|
87
|
+
}
|
|
74
88
|
}
|
|
75
89
|
else {
|
|
76
90
|
const hash = await this.getHashFromAt(at);
|
|
@@ -86,13 +100,20 @@ class PalletsStorageController extends AbstractController_1.default {
|
|
|
86
100
|
PalletsStorageController.sanitizedSend(res, result);
|
|
87
101
|
}
|
|
88
102
|
};
|
|
89
|
-
this.getStorage = async ({ params: { palletId }, query: { at, onlyIds, useRcBlock } }, res) => {
|
|
103
|
+
this.getStorage = async ({ params: { palletId }, query: { at, onlyIds, useRcBlock, useRcBlockFormat } }, res) => {
|
|
90
104
|
const onlyIdsArg = onlyIds === 'true';
|
|
105
|
+
const useObjectFormat = useRcBlockFormat === 'object';
|
|
91
106
|
if (useRcBlock === 'true') {
|
|
92
107
|
const rcAtResults = await this.getHashFromRcAt(at);
|
|
93
|
-
//
|
|
108
|
+
// Handle empty results based on format
|
|
94
109
|
if (rcAtResults.length === 0) {
|
|
95
|
-
|
|
110
|
+
if (useObjectFormat) {
|
|
111
|
+
const rcBlockInfo = await this.getRcBlockInfo(at);
|
|
112
|
+
PalletsStorageController.sanitizedSend(res, this.formatRcBlockObjectResponse(rcBlockInfo, []));
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
PalletsStorageController.sanitizedSend(res, []);
|
|
116
|
+
}
|
|
96
117
|
return;
|
|
97
118
|
}
|
|
98
119
|
// Process each Asset Hub block found
|
|
@@ -114,7 +135,14 @@ class PalletsStorageController extends AbstractController_1.default {
|
|
|
114
135
|
};
|
|
115
136
|
results.push(enhancedResult);
|
|
116
137
|
}
|
|
117
|
-
|
|
138
|
+
// Send response based on format
|
|
139
|
+
if (useObjectFormat) {
|
|
140
|
+
const rcBlockInfo = await this.getRcBlockInfo(at);
|
|
141
|
+
PalletsStorageController.sanitizedSend(res, this.formatRcBlockObjectResponse(rcBlockInfo, results));
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
PalletsStorageController.sanitizedSend(res, results);
|
|
145
|
+
}
|
|
118
146
|
}
|
|
119
147
|
else {
|
|
120
148
|
const hash = await this.getHashFromAt(at);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PalletsStorageController.js","sourceRoot":"","sources":["../../../../src/controllers/pallets/PalletsStorageController.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;;;;;AAExE,yCAAiD;AAGjD,iDAAsD;AACtD,6CAAuD;AAEvD,+EAAuD;AAEvD;;;;;;;;;;;;GAYG;AACH,MAAqB,wBAAyB,SAAQ,4BAAyC;IAG9F,YAAY,GAAW;QACtB,KAAK,CAAC,GAAG,EAAE,4BAA4B,EAAE,IAAI,gCAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;QAalE,mBAAc,GAAsF,KAAK,EAChH,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"PalletsStorageController.js","sourceRoot":"","sources":["../../../../src/controllers/pallets/PalletsStorageController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { TransactionMetadataBlobService } from '../../services';
|
|
2
|
+
import AbstractController from '../AbstractController';
|
|
3
|
+
/**
|
|
4
|
+
* POST metadata blob for a transaction.
|
|
5
|
+
*
|
|
6
|
+
* This endpoint generates the minimal metadata ("metadata blob" or "proof")
|
|
7
|
+
* needed by offline signers to decode a transaction's signing payload.
|
|
8
|
+
* It also returns the metadata hash that should be used with the
|
|
9
|
+
* CheckMetadataHash signed extension per RFC-0078.
|
|
10
|
+
*
|
|
11
|
+
* Request body:
|
|
12
|
+
* - Alternative 1: Full extrinsic
|
|
13
|
+
* - `tx`: Hex-encoded full extrinsic
|
|
14
|
+
* - `txAdditionalSigned`: (Optional) Hex-encoded additional signed data
|
|
15
|
+
*
|
|
16
|
+
* - Alternative 2: Extrinsic parts
|
|
17
|
+
* - `callData`: Hex-encoded call data
|
|
18
|
+
* - `includedInExtrinsic`: Hex-encoded signed extension extra data
|
|
19
|
+
* - `includedInSignedData`: Hex-encoded signed extension additional signed data
|
|
20
|
+
*
|
|
21
|
+
* - `at`: (Optional) Block hash or number. Defaults to finalized head.
|
|
22
|
+
*
|
|
23
|
+
* Returns:
|
|
24
|
+
* - `at`: Block context (hash and height)
|
|
25
|
+
* - `metadataHash`: The 32-byte metadata hash for CheckMetadataHash as hex
|
|
26
|
+
* - `metadataBlob`: The minimal metadata proof for offline signers as hex
|
|
27
|
+
* - `specVersion`: Runtime spec version
|
|
28
|
+
* - `specName`: Runtime spec name
|
|
29
|
+
* - `base58Prefix`: SS58 address prefix
|
|
30
|
+
* - `decimals`: Native token decimals
|
|
31
|
+
* - `tokenSymbol`: Native token symbol
|
|
32
|
+
*
|
|
33
|
+
* The `metadataBlob` contains:
|
|
34
|
+
* - Type definitions needed to decode the specific transaction
|
|
35
|
+
* - Merkle proofs verifying these types are part of the full metadata
|
|
36
|
+
* - Extra info (specVersion, specName, base58Prefix, decimals, tokenSymbol)
|
|
37
|
+
*
|
|
38
|
+
* Offline signers can use this to:
|
|
39
|
+
* 1. Decode the transaction to display what the user is signing
|
|
40
|
+
* 2. Verify the metadata subset matches the on-chain metadata via merkle proofs
|
|
41
|
+
*
|
|
42
|
+
* Reference:
|
|
43
|
+
* - RFC-0078: https://polkadot-fellows.github.io/RFCs/approved/0078-merkleized-metadata.html
|
|
44
|
+
* - Original issue: https://github.com/paritytech/substrate-api-sidecar/issues/1783
|
|
45
|
+
*/
|
|
46
|
+
export default class TransactionMetadataBlobController extends AbstractController<TransactionMetadataBlobService> {
|
|
47
|
+
static controllerName: string;
|
|
48
|
+
static requiredPallets: never[];
|
|
49
|
+
constructor(api: string);
|
|
50
|
+
protected initRoutes(): void;
|
|
51
|
+
/**
|
|
52
|
+
* POST handler for generating metadata blob.
|
|
53
|
+
*/
|
|
54
|
+
private getMetadataBlob;
|
|
55
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2017-2026 Parity Technologies (UK) Ltd.
|
|
3
|
+
// This file is part of Substrate API Sidecar.
|
|
4
|
+
//
|
|
5
|
+
// Substrate API Sidecar is free software: you can redistribute it and/or modify
|
|
6
|
+
// it under the terms of the GNU General Public License as published by
|
|
7
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
// (at your option) any later version.
|
|
9
|
+
//
|
|
10
|
+
// This program is distributed in the hope that it will be useful,
|
|
11
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
// GNU General Public License for more details.
|
|
14
|
+
//
|
|
15
|
+
// You should have received a copy of the GNU General Public License
|
|
16
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
const services_1 = require("../../services");
|
|
22
|
+
const AbstractController_1 = __importDefault(require("../AbstractController"));
|
|
23
|
+
/**
|
|
24
|
+
* POST metadata blob for a transaction.
|
|
25
|
+
*
|
|
26
|
+
* This endpoint generates the minimal metadata ("metadata blob" or "proof")
|
|
27
|
+
* needed by offline signers to decode a transaction's signing payload.
|
|
28
|
+
* It also returns the metadata hash that should be used with the
|
|
29
|
+
* CheckMetadataHash signed extension per RFC-0078.
|
|
30
|
+
*
|
|
31
|
+
* Request body:
|
|
32
|
+
* - Alternative 1: Full extrinsic
|
|
33
|
+
* - `tx`: Hex-encoded full extrinsic
|
|
34
|
+
* - `txAdditionalSigned`: (Optional) Hex-encoded additional signed data
|
|
35
|
+
*
|
|
36
|
+
* - Alternative 2: Extrinsic parts
|
|
37
|
+
* - `callData`: Hex-encoded call data
|
|
38
|
+
* - `includedInExtrinsic`: Hex-encoded signed extension extra data
|
|
39
|
+
* - `includedInSignedData`: Hex-encoded signed extension additional signed data
|
|
40
|
+
*
|
|
41
|
+
* - `at`: (Optional) Block hash or number. Defaults to finalized head.
|
|
42
|
+
*
|
|
43
|
+
* Returns:
|
|
44
|
+
* - `at`: Block context (hash and height)
|
|
45
|
+
* - `metadataHash`: The 32-byte metadata hash for CheckMetadataHash as hex
|
|
46
|
+
* - `metadataBlob`: The minimal metadata proof for offline signers as hex
|
|
47
|
+
* - `specVersion`: Runtime spec version
|
|
48
|
+
* - `specName`: Runtime spec name
|
|
49
|
+
* - `base58Prefix`: SS58 address prefix
|
|
50
|
+
* - `decimals`: Native token decimals
|
|
51
|
+
* - `tokenSymbol`: Native token symbol
|
|
52
|
+
*
|
|
53
|
+
* The `metadataBlob` contains:
|
|
54
|
+
* - Type definitions needed to decode the specific transaction
|
|
55
|
+
* - Merkle proofs verifying these types are part of the full metadata
|
|
56
|
+
* - Extra info (specVersion, specName, base58Prefix, decimals, tokenSymbol)
|
|
57
|
+
*
|
|
58
|
+
* Offline signers can use this to:
|
|
59
|
+
* 1. Decode the transaction to display what the user is signing
|
|
60
|
+
* 2. Verify the metadata subset matches the on-chain metadata via merkle proofs
|
|
61
|
+
*
|
|
62
|
+
* Reference:
|
|
63
|
+
* - RFC-0078: https://polkadot-fellows.github.io/RFCs/approved/0078-merkleized-metadata.html
|
|
64
|
+
* - Original issue: https://github.com/paritytech/substrate-api-sidecar/issues/1783
|
|
65
|
+
*/
|
|
66
|
+
class TransactionMetadataBlobController extends AbstractController_1.default {
|
|
67
|
+
constructor(api) {
|
|
68
|
+
super(api, '/transaction/metadata-blob', new services_1.TransactionMetadataBlobService(api));
|
|
69
|
+
/**
|
|
70
|
+
* POST handler for generating metadata blob.
|
|
71
|
+
*/
|
|
72
|
+
this.getMetadataBlob = async ({ body: { tx, txAdditionalSigned, callData, includedInExtrinsic, includedInSignedData, at } }, res) => {
|
|
73
|
+
const hash = await this.getHashFromAt(at);
|
|
74
|
+
TransactionMetadataBlobController.sanitizedSend(res, await this.service.fetchMetadataBlob(this.api, hash, {
|
|
75
|
+
tx,
|
|
76
|
+
txAdditionalSigned,
|
|
77
|
+
callData,
|
|
78
|
+
includedInExtrinsic,
|
|
79
|
+
includedInSignedData,
|
|
80
|
+
}));
|
|
81
|
+
};
|
|
82
|
+
this.initRoutes();
|
|
83
|
+
}
|
|
84
|
+
initRoutes() {
|
|
85
|
+
this.router.post(this.path, TransactionMetadataBlobController.catchWrap(this.getMetadataBlob));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
TransactionMetadataBlobController.controllerName = 'TransactionMetadataBlob';
|
|
89
|
+
TransactionMetadataBlobController.requiredPallets = [];
|
|
90
|
+
exports.default = TransactionMetadataBlobController;
|
|
91
|
+
//# sourceMappingURL=TransactionMetadataBlobController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionMetadataBlobController.js","sourceRoot":"","sources":["../../../../src/controllers/transaction/TransactionMetadataBlobController.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;;;;;AAExE,6CAAgE;AAEhE,+EAAuD;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAqB,iCAAkC,SAAQ,4BAAkD;IAIhH,YAAY,GAAW;QACtB,KAAK,CAAC,GAAG,EAAE,4BAA4B,EAAE,IAAI,yCAA8B,CAAC,GAAG,CAAC,CAAC,CAAC;QAQnF;;WAEG;QACK,oBAAe,GAA2C,KAAK,EACtE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,EAAE,EAAE,EAAE,EAC7F,GAAG,EACa,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAE1C,iCAAiC,CAAC,aAAa,CAC9C,GAAG,EACH,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;gBACpD,EAAE;gBACF,kBAAkB;gBAClB,QAAQ;gBACR,mBAAmB;gBACnB,oBAAoB;aACpB,CAAC,CACF,CAAC;QACH,CAAC,CAAC;QA1BD,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAES,UAAU;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iCAAiC,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAChG,CAAC;;AAVM,gDAAc,GAAG,yBAAyB,AAA5B,CAA6B;AAC3C,iDAAe,GAAG,EAAE,AAAL,CAAM;kBAFR,iCAAiC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { default as TransactionDryRun } from './TransactionDryRunController';
|
|
2
2
|
export { default as TransactionFeeEstimate } from './TransactionFeeEstimateController';
|
|
3
3
|
export { default as TransactionMaterial } from './TransactionMaterialController';
|
|
4
|
+
export { default as TransactionMetadataBlob } from './TransactionMetadataBlobController';
|
|
4
5
|
export { default as TransactionSubmit } from './TransactionSubmitController';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Copyright 2017-
|
|
2
|
+
// Copyright 2017-2026 Parity Technologies (UK) Ltd.
|
|
3
3
|
// This file is part of Substrate API Sidecar.
|
|
4
4
|
//
|
|
5
5
|
// Substrate API Sidecar is free software: you can redistribute it and/or modify
|
|
@@ -18,13 +18,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
18
18
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.TransactionSubmit = exports.TransactionMaterial = exports.TransactionFeeEstimate = exports.TransactionDryRun = void 0;
|
|
21
|
+
exports.TransactionSubmit = exports.TransactionMetadataBlob = exports.TransactionMaterial = exports.TransactionFeeEstimate = exports.TransactionDryRun = void 0;
|
|
22
22
|
var TransactionDryRunController_1 = require("./TransactionDryRunController");
|
|
23
23
|
Object.defineProperty(exports, "TransactionDryRun", { enumerable: true, get: function () { return __importDefault(TransactionDryRunController_1).default; } });
|
|
24
24
|
var TransactionFeeEstimateController_1 = require("./TransactionFeeEstimateController");
|
|
25
25
|
Object.defineProperty(exports, "TransactionFeeEstimate", { enumerable: true, get: function () { return __importDefault(TransactionFeeEstimateController_1).default; } });
|
|
26
26
|
var TransactionMaterialController_1 = require("./TransactionMaterialController");
|
|
27
27
|
Object.defineProperty(exports, "TransactionMaterial", { enumerable: true, get: function () { return __importDefault(TransactionMaterialController_1).default; } });
|
|
28
|
+
var TransactionMetadataBlobController_1 = require("./TransactionMetadataBlobController");
|
|
29
|
+
Object.defineProperty(exports, "TransactionMetadataBlob", { enumerable: true, get: function () { return __importDefault(TransactionMetadataBlobController_1).default; } });
|
|
28
30
|
var TransactionSubmitController_1 = require("./TransactionSubmitController");
|
|
29
31
|
Object.defineProperty(exports, "TransactionSubmit", { enumerable: true, get: function () { return __importDefault(TransactionSubmitController_1).default; } });
|
|
30
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/controllers/transaction/index.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;;;;;;AAExE,6EAA6E;AAApE,iJAAA,OAAO,OAAqB;AACrC,uFAAuF;AAA9E,2JAAA,OAAO,OAA0B;AAC1C,iFAAiF;AAAxE,qJAAA,OAAO,OAAuB;AACvC,6EAA6E;AAApE,iJAAA,OAAO,OAAqB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/controllers/transaction/index.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;;;;;;AAExE,6EAA6E;AAApE,iJAAA,OAAO,OAAqB;AACrC,uFAAuF;AAA9E,2JAAA,OAAO,OAA0B;AAC1C,iFAAiF;AAAxE,qJAAA,OAAO,OAAuB;AACvC,yFAAyF;AAAhF,6JAAA,OAAO,OAA2B;AAC3C,6EAA6E;AAApE,iJAAA,OAAO,OAAqB"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
2
|
/**
|
|
3
|
-
* Express Middleware to validate the `useRcBlock` query
|
|
3
|
+
* Express Middleware to validate the `useRcBlock` and `useRcBlockFormat` query parameters.
|
|
4
4
|
*
|
|
5
5
|
* This middleware performs the following validations:
|
|
6
|
-
* 1.
|
|
7
|
-
* 2.
|
|
8
|
-
* 3.
|
|
6
|
+
* 1. Boolean validation - ensures useRcBlock is a valid boolean string
|
|
7
|
+
* 2. Asset Hub requirement - validates that the current API is connected to Asset Hub
|
|
8
|
+
* 3. Relay chain availability - ensures relay chain API is available
|
|
9
|
+
* 4. useRcBlockFormat validation - ensures it's only used with useRcBlock=true and has valid values
|
|
9
10
|
*/
|
|
10
11
|
export declare const validateUseRcBlockMiddleware: RequestHandler;
|
|
@@ -19,16 +19,30 @@ exports.validateUseRcBlockMiddleware = void 0;
|
|
|
19
19
|
const http_errors_1 = require("http-errors");
|
|
20
20
|
const apiRegistry_1 = require("../../apiRegistry");
|
|
21
21
|
/**
|
|
22
|
-
* Express Middleware to validate the `useRcBlock` query
|
|
22
|
+
* Express Middleware to validate the `useRcBlock` and `useRcBlockFormat` query parameters.
|
|
23
23
|
*
|
|
24
24
|
* This middleware performs the following validations:
|
|
25
|
-
* 1.
|
|
26
|
-
* 2.
|
|
27
|
-
* 3.
|
|
25
|
+
* 1. Boolean validation - ensures useRcBlock is a valid boolean string
|
|
26
|
+
* 2. Asset Hub requirement - validates that the current API is connected to Asset Hub
|
|
27
|
+
* 3. Relay chain availability - ensures relay chain API is available
|
|
28
|
+
* 4. useRcBlockFormat validation - ensures it's only used with useRcBlock=true and has valid values
|
|
28
29
|
*/
|
|
29
30
|
const validateUseRcBlockMiddleware = (req, _res, next) => {
|
|
30
|
-
const { useRcBlock } = req.query;
|
|
31
|
-
//
|
|
31
|
+
const { useRcBlock, useRcBlockFormat } = req.query;
|
|
32
|
+
// Validate useRcBlockFormat requires useRcBlock=true
|
|
33
|
+
if (useRcBlockFormat && useRcBlock !== 'true') {
|
|
34
|
+
return next(new http_errors_1.BadRequest('useRcBlockFormat parameter requires useRcBlock=true'));
|
|
35
|
+
}
|
|
36
|
+
// Validate useRcBlockFormat values
|
|
37
|
+
if (useRcBlockFormat) {
|
|
38
|
+
if (typeof useRcBlockFormat !== 'string') {
|
|
39
|
+
return next(new http_errors_1.BadRequest('useRcBlockFormat must be a string'));
|
|
40
|
+
}
|
|
41
|
+
if (useRcBlockFormat !== 'array' && useRcBlockFormat !== 'object') {
|
|
42
|
+
return next(new http_errors_1.BadRequest('useRcBlockFormat must be either "array" or "object"'));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// If useRcBlock is not provided, continue without further validation
|
|
32
46
|
if (!useRcBlock) {
|
|
33
47
|
return next();
|
|
34
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateUseRcBlockMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/validate/validateUseRcBlockMiddleware.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,6CAAyC;AAEzC,mDAAuD;AAEvD
|
|
1
|
+
{"version":3,"file":"validateUseRcBlockMiddleware.js","sourceRoot":"","sources":["../../../../src/middleware/validate/validateUseRcBlockMiddleware.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,6CAAyC;AAEzC,mDAAuD;AAEvD;;;;;;;;GAQG;AACI,MAAM,4BAA4B,GAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC/E,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;IAEnD,qDAAqD;IACrD,IAAI,gBAAgB,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,IAAI,wBAAU,CAAC,qDAAqD,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,mCAAmC;IACnC,IAAI,gBAAgB,EAAE,CAAC;QACtB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,IAAI,wBAAU,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,gBAAgB,KAAK,OAAO,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC,IAAI,wBAAU,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACpF,CAAC;IACF,CAAC;IAED,qEAAqE;IACrE,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO,IAAI,EAAE,CAAC;IACf,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,IAAI,wBAAU,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,IAAI,wBAAU,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,6EAA6E;IAC7E,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC3B,iCAAiC;QACjC,MAAM,YAAY,GAAG,gCAAkB,CAAC,YAAY,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,IAAI,wBAAU,CAAC,gEAAgE,CAAC,CAAC,CAAC;QAC/F,CAAC;QAED,oCAAoC;QACpC,MAAM,cAAc,GAAG,gCAAkB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,IAAI,CACV,IAAI,wBAAU,CACb,+GAA+G,CAC/G,CACD,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;AACf,CAAC,CAAC;AArDW,QAAA,4BAA4B,gCAqDvC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ApiPromise } from '@polkadot/api';
|
|
2
|
+
import type { BlockHash } from '@polkadot/types/interfaces';
|
|
3
|
+
import { MetadataBlobParams } from 'src/types/requests';
|
|
4
|
+
import { ITransactionMetadataBlob } from 'src/types/responses';
|
|
5
|
+
import { AbstractService } from '../AbstractService';
|
|
6
|
+
export declare class TransactionMetadataBlobService extends AbstractService {
|
|
7
|
+
protected getMerkleizeMetadata(): Promise<(typeof import('@polkadot-api/merkleize-metadata'))['merkleizeMetadata']>;
|
|
8
|
+
/**
|
|
9
|
+
* Fetch metadata blob (proof) for a given transaction.
|
|
10
|
+
* This returns the minimal metadata needed by offline signers to decode
|
|
11
|
+
* the transaction, along with the metadata hash for CheckMetadataHash.
|
|
12
|
+
*
|
|
13
|
+
* @param api ApiPromise to use for the call
|
|
14
|
+
* @param hash `BlockHash` hash to query at
|
|
15
|
+
* @param params Request parameters
|
|
16
|
+
*/
|
|
17
|
+
fetchMetadataBlob(api: ApiPromise, hash: BlockHash, params: MetadataBlobParams): Promise<ITransactionMetadataBlob>;
|
|
18
|
+
/**
|
|
19
|
+
* Fetch V15 metadata from the chain.
|
|
20
|
+
* V15 metadata is required for RFC-0078 merkleization.
|
|
21
|
+
*/
|
|
22
|
+
private fetchMetadataV15;
|
|
23
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2017-2026 Parity Technologies (UK) Ltd.
|
|
3
|
+
// This file is part of Substrate API Sidecar.
|
|
4
|
+
//
|
|
5
|
+
// Substrate API Sidecar is free software: you can redistribute it and/or modify
|
|
6
|
+
// it under the terms of the GNU General Public License as published by
|
|
7
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
// (at your option) any later version.
|
|
9
|
+
//
|
|
10
|
+
// This program is distributed in the hope that it will be useful,
|
|
11
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
// GNU General Public License for more details.
|
|
14
|
+
//
|
|
15
|
+
// You should have received a copy of the GNU General Public License
|
|
16
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.TransactionMetadataBlobService = void 0;
|
|
19
|
+
const util_1 = require("@polkadot/util");
|
|
20
|
+
const http_errors_1 = require("http-errors");
|
|
21
|
+
const AbstractService_1 = require("../AbstractService");
|
|
22
|
+
const DEFAULT_DECIMALS = 10;
|
|
23
|
+
const DEFAULT_SS58_PREFIX = 42;
|
|
24
|
+
const DEFAULT_TOKEN_SYMBOL = 'DOT';
|
|
25
|
+
// Dynamic import helper that TypeScript won't transform to require()
|
|
26
|
+
// This is necessary because @polkadot-api/merkleize-metadata is an ESM-only package
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
28
|
+
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
29
|
+
// Cached module after first load
|
|
30
|
+
let merkleizeMetadataModule = null;
|
|
31
|
+
async function loadMerkleizeMetadata() {
|
|
32
|
+
if (!merkleizeMetadataModule) {
|
|
33
|
+
merkleizeMetadataModule = await dynamicImport('@polkadot-api/merkleize-metadata');
|
|
34
|
+
}
|
|
35
|
+
return merkleizeMetadataModule.merkleizeMetadata;
|
|
36
|
+
}
|
|
37
|
+
class TransactionMetadataBlobService extends AbstractService_1.AbstractService {
|
|
38
|
+
async getMerkleizeMetadata() {
|
|
39
|
+
return loadMerkleizeMetadata();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Fetch metadata blob (proof) for a given transaction.
|
|
43
|
+
* This returns the minimal metadata needed by offline signers to decode
|
|
44
|
+
* the transaction, along with the metadata hash for CheckMetadataHash.
|
|
45
|
+
*
|
|
46
|
+
* @param api ApiPromise to use for the call
|
|
47
|
+
* @param hash `BlockHash` hash to query at
|
|
48
|
+
* @param params Request parameters
|
|
49
|
+
*/
|
|
50
|
+
async fetchMetadataBlob(api, hash, params) {
|
|
51
|
+
var _a, _b, _c;
|
|
52
|
+
if (!params.tx && !params.callData) {
|
|
53
|
+
throw new http_errors_1.BadRequest('Must provide either `tx` (full extrinsic) or `callData` with `includedInExtrinsic` and `includedInSignedData`.');
|
|
54
|
+
}
|
|
55
|
+
if (params.callData && (!params.includedInExtrinsic || !params.includedInSignedData)) {
|
|
56
|
+
throw new http_errors_1.BadRequest('When using `callData`, must also provide `includedInExtrinsic` and `includedInSignedData`.');
|
|
57
|
+
}
|
|
58
|
+
const historicApi = await api.at(hash);
|
|
59
|
+
const [header, version, properties, metadataV15Raw] = await Promise.all([
|
|
60
|
+
api.rpc.chain.getHeader(hash),
|
|
61
|
+
api.rpc.state.getRuntimeVersion(hash),
|
|
62
|
+
api.rpc.system.properties(),
|
|
63
|
+
this.fetchMetadataV15(historicApi),
|
|
64
|
+
]);
|
|
65
|
+
const tokenDecimalsRaw = properties.tokenDecimals.isSome ? properties.tokenDecimals.value : null;
|
|
66
|
+
const tokenSymbolRaw = properties.tokenSymbol.isSome ? properties.tokenSymbol.value : null;
|
|
67
|
+
const ss58Format = properties.ss58Format.isSome ? properties.ss58Format.value : null;
|
|
68
|
+
let decimals = DEFAULT_DECIMALS;
|
|
69
|
+
if (tokenDecimalsRaw) {
|
|
70
|
+
const decimalsJson = tokenDecimalsRaw.toJSON();
|
|
71
|
+
if (Array.isArray(decimalsJson)) {
|
|
72
|
+
decimals = (_a = decimalsJson[0]) !== null && _a !== void 0 ? _a : DEFAULT_DECIMALS;
|
|
73
|
+
}
|
|
74
|
+
else if (typeof decimalsJson === 'number') {
|
|
75
|
+
decimals = decimalsJson;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
let tokenSymbol = DEFAULT_TOKEN_SYMBOL;
|
|
79
|
+
if (tokenSymbolRaw) {
|
|
80
|
+
const symbolJson = tokenSymbolRaw.toJSON();
|
|
81
|
+
if (Array.isArray(symbolJson)) {
|
|
82
|
+
tokenSymbol = (_b = symbolJson[0]) !== null && _b !== void 0 ? _b : DEFAULT_TOKEN_SYMBOL;
|
|
83
|
+
}
|
|
84
|
+
else if (typeof symbolJson === 'string') {
|
|
85
|
+
tokenSymbol = symbolJson;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const base58Prefix = (_c = ss58Format === null || ss58Format === void 0 ? void 0 : ss58Format.toNumber()) !== null && _c !== void 0 ? _c : DEFAULT_SS58_PREFIX;
|
|
89
|
+
// Use dynamic import for ESM module compatibility
|
|
90
|
+
const merkleizeMetadata = await this.getMerkleizeMetadata();
|
|
91
|
+
const merkleized = merkleizeMetadata(metadataV15Raw, {
|
|
92
|
+
decimals,
|
|
93
|
+
tokenSymbol,
|
|
94
|
+
});
|
|
95
|
+
const metadataHash = (0, util_1.u8aToHex)(merkleized.digest());
|
|
96
|
+
let metadataBlobBytes;
|
|
97
|
+
if (params.tx) {
|
|
98
|
+
metadataBlobBytes = merkleized.getProofForExtrinsic(params.tx, params.txAdditionalSigned);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
metadataBlobBytes = merkleized.getProofForExtrinsicParts(params.callData, params.includedInExtrinsic, params.includedInSignedData);
|
|
102
|
+
}
|
|
103
|
+
const metadataBlob = (0, util_1.u8aToHex)(metadataBlobBytes);
|
|
104
|
+
return {
|
|
105
|
+
at: {
|
|
106
|
+
hash,
|
|
107
|
+
height: header.number.unwrap().toString(10),
|
|
108
|
+
},
|
|
109
|
+
metadataHash,
|
|
110
|
+
metadataBlob,
|
|
111
|
+
specVersion: version.specVersion.toNumber(),
|
|
112
|
+
specName: version.specName.toString(),
|
|
113
|
+
base58Prefix,
|
|
114
|
+
decimals,
|
|
115
|
+
tokenSymbol,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Fetch V15 metadata from the chain.
|
|
120
|
+
* V15 metadata is required for RFC-0078 merkleization.
|
|
121
|
+
*/
|
|
122
|
+
async fetchMetadataV15(apiAt) {
|
|
123
|
+
try {
|
|
124
|
+
const availableVersions = await apiAt.call.metadata.metadataVersions();
|
|
125
|
+
const versions = availableVersions.toJSON();
|
|
126
|
+
if (!versions.includes(15)) {
|
|
127
|
+
throw new http_errors_1.BadRequest('Metadata V15 is not available on this chain. CheckMetadataHash requires V15 metadata.');
|
|
128
|
+
}
|
|
129
|
+
const metadataOpt = await apiAt.call.metadata.metadataAtVersion(15);
|
|
130
|
+
if (metadataOpt.isNone) {
|
|
131
|
+
throw new http_errors_1.InternalServerError('Failed to fetch metadata V15 from the chain.');
|
|
132
|
+
}
|
|
133
|
+
return metadataOpt.unwrap().toU8a();
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
if (err instanceof http_errors_1.BadRequest || err instanceof http_errors_1.InternalServerError) {
|
|
137
|
+
throw err;
|
|
138
|
+
}
|
|
139
|
+
throw new http_errors_1.InternalServerError(`Failed to fetch metadata V15: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.TransactionMetadataBlobService = TransactionMetadataBlobService;
|
|
144
|
+
//# sourceMappingURL=TransactionMetadataBlobService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionMetadataBlobService.js","sourceRoot":"","sources":["../../../../src/services/transaction/TransactionMetadataBlobService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|