@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.
Files changed (101) hide show
  1. package/build/package.json +3 -2
  2. package/build/src/chains-config/assetHubKusamaControllers.js +2 -1
  3. package/build/src/chains-config/assetHubKusamaControllers.js.map +1 -1
  4. package/build/src/chains-config/assetHubNextWestendControllers.js +2 -1
  5. package/build/src/chains-config/assetHubNextWestendControllers.js.map +1 -1
  6. package/build/src/chains-config/assetHubPolkadotControllers.js +2 -1
  7. package/build/src/chains-config/assetHubPolkadotControllers.js.map +1 -1
  8. package/build/src/chains-config/assetHubWestendControllers.js +2 -1
  9. package/build/src/chains-config/assetHubWestendControllers.js.map +1 -1
  10. package/build/src/chains-config/defaultControllers.js +2 -1
  11. package/build/src/chains-config/defaultControllers.js.map +1 -1
  12. package/build/src/chains-config/kusamaControllers.js +2 -1
  13. package/build/src/chains-config/kusamaControllers.js.map +1 -1
  14. package/build/src/chains-config/polkadotControllers.js +2 -1
  15. package/build/src/chains-config/polkadotControllers.js.map +1 -1
  16. package/build/src/chains-config/westendControllers.js +2 -1
  17. package/build/src/chains-config/westendControllers.js.map +1 -1
  18. package/build/src/controllers/AbstractController.d.ts +16 -0
  19. package/build/src/controllers/AbstractController.js +33 -0
  20. package/build/src/controllers/AbstractController.js.map +1 -1
  21. package/build/src/controllers/accounts/AccountsAssetsController.js +36 -8
  22. package/build/src/controllers/accounts/AccountsAssetsController.js.map +1 -1
  23. package/build/src/controllers/accounts/AccountsBalanceInfoController.js +18 -4
  24. package/build/src/controllers/accounts/AccountsBalanceInfoController.js.map +1 -1
  25. package/build/src/controllers/accounts/AccountsForeignAssetsController.js +18 -4
  26. package/build/src/controllers/accounts/AccountsForeignAssetsController.js.map +1 -1
  27. package/build/src/controllers/accounts/AccountsPoolAssetsController.js +36 -8
  28. package/build/src/controllers/accounts/AccountsPoolAssetsController.js.map +1 -1
  29. package/build/src/controllers/accounts/AccountsProxyInfoController.js +18 -4
  30. package/build/src/controllers/accounts/AccountsProxyInfoController.js.map +1 -1
  31. package/build/src/controllers/accounts/AccountsStakingInfoController.js +18 -4
  32. package/build/src/controllers/accounts/AccountsStakingInfoController.js.map +1 -1
  33. package/build/src/controllers/accounts/AccountsStakingPayoutsController.js +18 -4
  34. package/build/src/controllers/accounts/AccountsStakingPayoutsController.js.map +1 -1
  35. package/build/src/controllers/accounts/AccountsVestingInfoController.js +18 -4
  36. package/build/src/controllers/accounts/AccountsVestingInfoController.js.map +1 -1
  37. package/build/src/controllers/blocks/BlocksController.js +87 -18
  38. package/build/src/controllers/blocks/BlocksController.js.map +1 -1
  39. package/build/src/controllers/blocks/BlocksExtrinsicsController.js +18 -4
  40. package/build/src/controllers/blocks/BlocksExtrinsicsController.js.map +1 -1
  41. package/build/src/controllers/blocks/BlocksRawExtrinsicsController.js +18 -4
  42. package/build/src/controllers/blocks/BlocksRawExtrinsicsController.js.map +1 -1
  43. package/build/src/controllers/index.d.ts +2 -1
  44. package/build/src/controllers/index.js +2 -1
  45. package/build/src/controllers/index.js.map +1 -1
  46. package/build/src/controllers/pallets/PalletsAssetConversionController.js +36 -8
  47. package/build/src/controllers/pallets/PalletsAssetConversionController.js.map +1 -1
  48. package/build/src/controllers/pallets/PalletsAssetsController.js +18 -4
  49. package/build/src/controllers/pallets/PalletsAssetsController.js.map +1 -1
  50. package/build/src/controllers/pallets/PalletsConstsController.js +36 -8
  51. package/build/src/controllers/pallets/PalletsConstsController.js.map +1 -1
  52. package/build/src/controllers/pallets/PalletsDispatchablesController.js +36 -8
  53. package/build/src/controllers/pallets/PalletsDispatchablesController.js.map +1 -1
  54. package/build/src/controllers/pallets/PalletsErrorsController.js +36 -8
  55. package/build/src/controllers/pallets/PalletsErrorsController.js.map +1 -1
  56. package/build/src/controllers/pallets/PalletsEventsController.js +36 -8
  57. package/build/src/controllers/pallets/PalletsEventsController.js.map +1 -1
  58. package/build/src/controllers/pallets/PalletsForeignAssetsController.js +18 -4
  59. package/build/src/controllers/pallets/PalletsForeignAssetsController.js.map +1 -1
  60. package/build/src/controllers/pallets/PalletsNominationPoolsController.js +36 -8
  61. package/build/src/controllers/pallets/PalletsNominationPoolsController.js.map +1 -1
  62. package/build/src/controllers/pallets/PalletsOnGoingReferendaController.js +18 -4
  63. package/build/src/controllers/pallets/PalletsOnGoingReferendaController.js.map +1 -1
  64. package/build/src/controllers/pallets/PalletsPoolAssetsController.js +18 -4
  65. package/build/src/controllers/pallets/PalletsPoolAssetsController.js.map +1 -1
  66. package/build/src/controllers/pallets/PalletsStakingProgressController.js +18 -4
  67. package/build/src/controllers/pallets/PalletsStakingProgressController.js.map +1 -1
  68. package/build/src/controllers/pallets/PalletsStakingValidatorsController.js +18 -4
  69. package/build/src/controllers/pallets/PalletsStakingValidatorsController.js.map +1 -1
  70. package/build/src/controllers/pallets/PalletsStorageController.js +36 -8
  71. package/build/src/controllers/pallets/PalletsStorageController.js.map +1 -1
  72. package/build/src/controllers/transaction/TransactionMetadataBlobController.d.ts +55 -0
  73. package/build/src/controllers/transaction/TransactionMetadataBlobController.js +91 -0
  74. package/build/src/controllers/transaction/TransactionMetadataBlobController.js.map +1 -0
  75. package/build/src/controllers/transaction/index.d.ts +1 -0
  76. package/build/src/controllers/transaction/index.js +4 -2
  77. package/build/src/controllers/transaction/index.js.map +1 -1
  78. package/build/src/middleware/validate/validateUseRcBlockMiddleware.d.ts +5 -4
  79. package/build/src/middleware/validate/validateUseRcBlockMiddleware.js +20 -6
  80. package/build/src/middleware/validate/validateUseRcBlockMiddleware.js.map +1 -1
  81. package/build/src/services/transaction/TransactionMetadataBlobService.d.ts +23 -0
  82. package/build/src/services/transaction/TransactionMetadataBlobService.js +144 -0
  83. package/build/src/services/transaction/TransactionMetadataBlobService.js.map +1 -0
  84. package/build/src/services/transaction/TransactionMetadataBlobService.spec.d.ts +1 -0
  85. package/build/src/services/transaction/TransactionMetadataBlobService.spec.js +269 -0
  86. package/build/src/services/transaction/TransactionMetadataBlobService.spec.js.map +1 -0
  87. package/build/src/services/transaction/index.d.ts +1 -0
  88. package/build/src/services/transaction/index.js +2 -1
  89. package/build/src/services/transaction/index.js.map +1 -1
  90. package/build/src/types/requests.d.ts +57 -0
  91. package/build/src/types/requests.js +1 -1
  92. package/build/src/types/responses/RcBlockFormat.d.ts +24 -0
  93. package/build/src/types/responses/RcBlockFormat.js +18 -0
  94. package/build/src/types/responses/RcBlockFormat.js.map +1 -0
  95. package/build/src/types/responses/TransactionMetadataBlob.d.ts +11 -0
  96. package/build/src/types/responses/TransactionMetadataBlob.js +18 -0
  97. package/build/src/types/responses/TransactionMetadataBlob.js.map +1 -0
  98. package/build/src/types/responses/index.d.ts +2 -0
  99. package/build/src/types/responses/index.js +3 -1
  100. package/build/src/types/responses/index.js.map +1 -1
  101. 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,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAiB,EAAE;YAChH,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,kCAAkC,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC1D,OAAO;gBACR,CAAC;gBAED,qCAAqC;gBACrC,MAAM,OAAO,GAAG,EAAE,CAAC;gBACnB,KAAK,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,WAAW,EAAE,CAAC;oBAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;oBAExE,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,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;wBACnC,aAAa;wBACb,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;qBACnC,CAAC;oBAEF,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC9B,CAAC;gBAED,kCAAkC,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;gBACtE,kCAAkC,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC/D,CAAC;QACF,CAAC,CAAC;QAhDD,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAES,UAAU;QACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,+BAAkB,CAAC,CAAC;QAC/C,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;;AAVM,iDAAc,GAAG,0BAA0B,AAA7B,CAA8B;AAC5C,kDAAe,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,AAA3B,CAA4B;kBAF9B,kCAAkC"}
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
- // Return empty array if no Asset Hub blocks found
47
+ // Handle empty results based on format
47
48
  if (rcAtResults.length === 0) {
48
- PalletsStorageController.sanitizedSend(res, []);
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
- PalletsStorageController.sanitizedSend(res, results);
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
- // Return empty array if no Asset Hub blocks found
108
+ // Handle empty results based on format
94
109
  if (rcAtResults.length === 0) {
95
- PalletsStorageController.sanitizedSend(res, []);
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
- PalletsStorageController.sanitizedSend(res, results);
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":"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"}
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-2025 Parity Technologies (UK) Ltd.
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 parameter.
3
+ * Express Middleware to validate the `useRcBlock` and `useRcBlockFormat` query parameters.
4
4
  *
5
5
  * This middleware performs the following validations:
6
- * 1. Asset Hub requirement - validates that the current API is connected to Asset Hub
7
- * 2. Relay chain availability - ensures relay chain API is available
8
- * 3. Boolean validation - ensures useRcBlock is a valid boolean string
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 parameter.
22
+ * Express Middleware to validate the `useRcBlock` and `useRcBlockFormat` query parameters.
23
23
  *
24
24
  * This middleware performs the following validations:
25
- * 1. Asset Hub requirement - validates that the current API is connected to Asset Hub
26
- * 2. Relay chain availability - ensures relay chain API is available
27
- * 3. Boolean validation - ensures useRcBlock is a valid boolean string
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
- // If useRcBlock is not provided, continue without validation
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;;;;;;;GAOG;AACI,MAAM,4BAA4B,GAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC/E,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;IAEjC,6DAA6D;IAC7D,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;AArCW,QAAA,4BAA4B,gCAqCvC"}
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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"}