@brightchain/brightchain-lib 0.29.21 → 0.29.22
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/package.json +1 -1
- package/src/lib/errors/ledgerError.d.ts +4 -1
- package/src/lib/errors/ledgerError.d.ts.map +1 -1
- package/src/lib/errors/ledgerError.js +3 -0
- package/src/lib/errors/ledgerError.js.map +1 -1
- package/src/lib/interfaces/ledger/consistencyProof.d.ts +22 -0
- package/src/lib/interfaces/ledger/consistencyProof.d.ts.map +1 -0
- package/src/lib/interfaces/ledger/consistencyProof.js +12 -0
- package/src/lib/interfaces/ledger/consistencyProof.js.map +1 -0
- package/src/lib/interfaces/ledger/index.d.ts +4 -0
- package/src/lib/interfaces/ledger/index.d.ts.map +1 -1
- package/src/lib/interfaces/ledger/index.js +4 -1
- package/src/lib/interfaces/ledger/index.js.map +1 -1
- package/src/lib/interfaces/ledger/merkleProof.d.ts +42 -0
- package/src/lib/interfaces/ledger/merkleProof.d.ts.map +1 -0
- package/src/lib/interfaces/ledger/merkleProof.js +23 -0
- package/src/lib/interfaces/ledger/merkleProof.js.map +1 -0
- package/src/lib/interfaces/ledger/proofVerificationResult.d.ts +19 -0
- package/src/lib/interfaces/ledger/proofVerificationResult.d.ts.map +1 -0
- package/src/lib/interfaces/ledger/proofVerificationResult.js +12 -0
- package/src/lib/interfaces/ledger/proofVerificationResult.js.map +1 -0
- package/src/lib/interfaces/ledger/validationResult.d.ts +1 -1
- package/src/lib/interfaces/ledger/validationResult.d.ts.map +1 -1
- package/src/lib/ledger/incrementalMerkleTree.d.ts +179 -0
- package/src/lib/ledger/incrementalMerkleTree.d.ts.map +1 -0
- package/src/lib/ledger/incrementalMerkleTree.js +372 -0
- package/src/lib/ledger/incrementalMerkleTree.js.map +1 -0
- package/src/lib/ledger/ledger.d.ts +91 -1
- package/src/lib/ledger/ledger.d.ts.map +1 -1
- package/src/lib/ledger/ledger.js +363 -10
- package/src/lib/ledger/ledger.js.map +1 -1
- package/src/lib/ledger/ledgerChainValidator.d.ts +48 -2
- package/src/lib/ledger/ledgerChainValidator.d.ts.map +1 -1
- package/src/lib/ledger/ledgerChainValidator.js +145 -2
- package/src/lib/ledger/ledgerChainValidator.js.map +1 -1
- package/src/lib/ledger/proofSerializer.d.ts +60 -0
- package/src/lib/ledger/proofSerializer.d.ts.map +1 -0
- package/src/lib/ledger/proofSerializer.js +206 -0
- package/src/lib/ledger/proofSerializer.js.map +1 -0
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
*/
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.LedgerChainValidator = void 0;
|
|
17
|
+
const checksum_service_1 = require("../services/checksum.service");
|
|
17
18
|
const authorizedSignerSet_1 = require("./authorizedSignerSet");
|
|
18
19
|
const governancePayloadSerializer_1 = require("./governancePayloadSerializer");
|
|
20
|
+
const incrementalMerkleTree_1 = require("./incrementalMerkleTree");
|
|
21
|
+
const ledger_1 = require("./ledger");
|
|
19
22
|
/**
|
|
20
23
|
* Validates ledger chain integrity by walking entries and verifying:
|
|
21
24
|
* - Contiguous sequence numbers
|
|
@@ -46,8 +49,19 @@ class LedgerChainValidator {
|
|
|
46
49
|
* - Each entry's signer is authorized at that chain position
|
|
47
50
|
* - Governance entries have admin role and satisfy quorum
|
|
48
51
|
* - Governance actions pass safety constraints
|
|
52
|
+
*
|
|
53
|
+
* When a merkleRoot is provided, also validates:
|
|
54
|
+
* - Reconstructs the Merkle tree from entry hashes
|
|
55
|
+
* - Verifies the computed root matches the provided Merkle root
|
|
56
|
+
*
|
|
57
|
+
* @param entries - The chain entries to validate
|
|
58
|
+
* @param merkleRoot - Optional Merkle root to verify against. When provided,
|
|
59
|
+
* the validator reconstructs the Merkle tree from entry hashes and compares
|
|
60
|
+
* the computed root to this value.
|
|
61
|
+
*
|
|
62
|
+
* @see Requirements 11.1, 11.3, 11.4
|
|
49
63
|
*/
|
|
50
|
-
validateAll(entries) {
|
|
64
|
+
validateAll(entries, merkleRoot) {
|
|
51
65
|
if (entries.length === 0) {
|
|
52
66
|
return { isValid: true, entriesChecked: 0, errors: [] };
|
|
53
67
|
}
|
|
@@ -99,6 +113,20 @@ class LedgerChainValidator {
|
|
|
99
113
|
// Verify signature
|
|
100
114
|
this.verifySignature(entry, errors);
|
|
101
115
|
}
|
|
116
|
+
// Merkle root verification: reconstruct tree from entry hashes and compare
|
|
117
|
+
if (merkleRoot !== undefined) {
|
|
118
|
+
const checksumService = new checksum_service_1.ChecksumService();
|
|
119
|
+
const entryHashes = entries.map((e) => e.entryHash);
|
|
120
|
+
const computedTree = incrementalMerkleTree_1.IncrementalMerkleTree.fromLeaves(entryHashes, checksumService);
|
|
121
|
+
const computedRoot = computedTree.root;
|
|
122
|
+
if (!computedRoot.equals(merkleRoot)) {
|
|
123
|
+
errors.push({
|
|
124
|
+
sequenceNumber: entries[entries.length - 1].sequenceNumber,
|
|
125
|
+
errorType: 'merkle_root_mismatch',
|
|
126
|
+
message: 'Reconstructed Merkle root does not match the stored Merkle root',
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
102
130
|
return {
|
|
103
131
|
isValid: errors.length === 0,
|
|
104
132
|
entriesChecked: entries.length,
|
|
@@ -113,8 +141,15 @@ class LedgerChainValidator {
|
|
|
113
141
|
* the sub-range starts at genesis.
|
|
114
142
|
* @param signerSetAtPredecessor - Optional AuthorizedSignerSet state at the predecessor
|
|
115
143
|
* for governance validation of the sub-range.
|
|
144
|
+
* @param merkleRoot - Optional Merkle root to verify entry hashes against.
|
|
145
|
+
* When provided along with merkleProofs, each entry's entryHash is verified
|
|
146
|
+
* against its corresponding Merkle proof.
|
|
147
|
+
* @param merkleProofs - Optional array of Merkle proofs corresponding 1:1 with
|
|
148
|
+
* the entries array. Required for Merkle validation when merkleRoot is provided.
|
|
149
|
+
*
|
|
150
|
+
* @see Requirements 11.2
|
|
116
151
|
*/
|
|
117
|
-
validateRange(entries, predecessor, signerSetAtPredecessor) {
|
|
152
|
+
validateRange(entries, predecessor, signerSetAtPredecessor, merkleRoot, merkleProofs) {
|
|
118
153
|
if (entries.length === 0) {
|
|
119
154
|
return { isValid: true, entriesChecked: 0, errors: [] };
|
|
120
155
|
}
|
|
@@ -182,13 +217,121 @@ class LedgerChainValidator {
|
|
|
182
217
|
// Verify signature
|
|
183
218
|
this.verifySignature(entry, errors);
|
|
184
219
|
}
|
|
220
|
+
// Merkle proof verification: when both merkleRoot and merkleProofs are provided,
|
|
221
|
+
// verify each entry's entryHash is consistent with its Merkle proof.
|
|
222
|
+
if (merkleRoot !== undefined && merkleProofs !== undefined) {
|
|
223
|
+
for (let i = 0; i < entries.length; i++) {
|
|
224
|
+
if (i < merkleProofs.length) {
|
|
225
|
+
const result = ledger_1.Ledger.verifyInclusionProof(merkleProofs[i], merkleRoot);
|
|
226
|
+
if (!result.isValid) {
|
|
227
|
+
errors.push({
|
|
228
|
+
sequenceNumber: entries[i].sequenceNumber,
|
|
229
|
+
errorType: 'merkle_root_mismatch',
|
|
230
|
+
message: `Merkle proof verification failed for entry at sequenceNumber ${entries[i].sequenceNumber}: ${result.error ?? 'unknown error'}`,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
185
236
|
return {
|
|
186
237
|
isValid: errors.length === 0,
|
|
187
238
|
entriesChecked: entries.length,
|
|
188
239
|
errors,
|
|
189
240
|
};
|
|
190
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Validate the entire chain in parallel by splitting into chunks and
|
|
244
|
+
* verifying each chunk concurrently via Promise.all.
|
|
245
|
+
*
|
|
246
|
+
* Produces the same validation result as sequential `validateAll()`:
|
|
247
|
+
* same `isValid`, same `entriesChecked`, same error types (though error
|
|
248
|
+
* ordering may differ).
|
|
249
|
+
*
|
|
250
|
+
* Hash verification and signature verification — the expensive operations —
|
|
251
|
+
* run in parallel across chunks. Governance validation is run as a separate
|
|
252
|
+
* sequential pass since it requires tracking the AuthorizedSignerSet state
|
|
253
|
+
* across the chain.
|
|
254
|
+
*
|
|
255
|
+
* @param entries - The chain entries to validate (ordered by sequenceNumber from 0)
|
|
256
|
+
* @param merkleRoot - Optional Merkle root to verify against
|
|
257
|
+
* @returns Promise resolving to the same IValidationResult as validateAll()
|
|
258
|
+
*
|
|
259
|
+
* @see Requirements 17.1, 17.2, 17.3
|
|
260
|
+
*/
|
|
261
|
+
async validateAllParallel(entries, merkleRoot) {
|
|
262
|
+
if (entries.length === 0) {
|
|
263
|
+
return { isValid: true, entriesChecked: 0, errors: [] };
|
|
264
|
+
}
|
|
265
|
+
// Determine chunk count: 2-4 chunks based on entry count
|
|
266
|
+
const chunkCount = Math.min(entries.length, entries.length <= 4 ? entries.length : Math.min(4, Math.max(2, Math.ceil(entries.length / 4))));
|
|
267
|
+
const chunkSize = Math.ceil(entries.length / chunkCount);
|
|
268
|
+
// Build chunk descriptors: each chunk has its entries and predecessor
|
|
269
|
+
const chunkTasks = [];
|
|
270
|
+
for (let i = 0; i < entries.length; i += chunkSize) {
|
|
271
|
+
const chunk = entries.slice(i, Math.min(i + chunkSize, entries.length));
|
|
272
|
+
const predecessor = i === 0 ? null : entries[i - 1];
|
|
273
|
+
chunkTasks.push({ chunk, predecessor });
|
|
274
|
+
}
|
|
275
|
+
// Run all chunk validations concurrently (without governance — that's sequential)
|
|
276
|
+
// Create a temporary validator without governance for the parallel pass
|
|
277
|
+
const noGovValidator = new LedgerChainValidator(this.serializer, this.signatureVerifier);
|
|
278
|
+
const chunkResults = await Promise.all(chunkTasks.map(({ chunk, predecessor }) => Promise.resolve(noGovValidator.validateRange(chunk, predecessor))));
|
|
279
|
+
// Merge chunk results
|
|
280
|
+
const allErrors = [];
|
|
281
|
+
let totalChecked = 0;
|
|
282
|
+
for (const result of chunkResults) {
|
|
283
|
+
allErrors.push(...result.errors);
|
|
284
|
+
totalChecked += result.entriesChecked;
|
|
285
|
+
}
|
|
286
|
+
// Governance validation: run sequentially if a governance serializer is present
|
|
287
|
+
if (this.governanceSerializer) {
|
|
288
|
+
const govResult = this.validateGovernanceSequential(entries);
|
|
289
|
+
allErrors.push(...govResult.errors);
|
|
290
|
+
}
|
|
291
|
+
// Merkle root verification: reconstruct tree from entry hashes and compare
|
|
292
|
+
if (merkleRoot !== undefined) {
|
|
293
|
+
const checksumService = new checksum_service_1.ChecksumService();
|
|
294
|
+
const entryHashes = entries.map((e) => e.entryHash);
|
|
295
|
+
const computedTree = incrementalMerkleTree_1.IncrementalMerkleTree.fromLeaves(entryHashes, checksumService);
|
|
296
|
+
const computedRoot = computedTree.root;
|
|
297
|
+
if (!computedRoot.equals(merkleRoot)) {
|
|
298
|
+
allErrors.push({
|
|
299
|
+
sequenceNumber: entries[entries.length - 1].sequenceNumber,
|
|
300
|
+
errorType: 'merkle_root_mismatch',
|
|
301
|
+
message: 'Reconstructed Merkle root does not match the stored Merkle root',
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
isValid: allErrors.length === 0,
|
|
307
|
+
entriesChecked: totalChecked,
|
|
308
|
+
errors: allErrors,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
191
311
|
// ── private helpers ──────────────────────────────────────────────────
|
|
312
|
+
/**
|
|
313
|
+
* Run governance validation sequentially across the full chain.
|
|
314
|
+
* This is separated from the parallel chunk validation because governance
|
|
315
|
+
* requires tracking the AuthorizedSignerSet state across entries.
|
|
316
|
+
*/
|
|
317
|
+
validateGovernanceSequential(entries) {
|
|
318
|
+
const errors = [];
|
|
319
|
+
let signerSet = null;
|
|
320
|
+
for (let i = 0; i < entries.length; i++) {
|
|
321
|
+
const entry = entries[i];
|
|
322
|
+
if (i === 0) {
|
|
323
|
+
// Initialize signer set from genesis
|
|
324
|
+
signerSet = this.initSignerSetFromGenesis(entry, errors);
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
// Validate authorization for non-genesis entries
|
|
328
|
+
if (signerSet && this.governanceSerializer) {
|
|
329
|
+
this.validateEntryAuthorization(entry, signerSet, errors);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return { errors };
|
|
334
|
+
}
|
|
192
335
|
/**
|
|
193
336
|
* Initialize the AuthorizedSignerSet from a genesis entry.
|
|
194
337
|
* Returns the signer set, or null if the genesis is not a valid governance payload.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledgerChainValidator.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/ledgerChainValidator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ledgerChainValidator.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/ledgerChainValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Deterministic binary serialization for Merkle inclusion proofs
|
|
3
|
+
* and consistency proofs.
|
|
4
|
+
*
|
|
5
|
+
* Uses only browser-compatible APIs (DataView, Uint8Array) — no Node.js Buffer.
|
|
6
|
+
*
|
|
7
|
+
* @see Design: Merkle Tree Commitment Layer — Proof Serialization
|
|
8
|
+
* @see Requirements 10.1, 10.2, 10.3, 10.4, 10.7, 10.8, 15.4
|
|
9
|
+
*/
|
|
10
|
+
import { IMerkleProof } from '../interfaces/ledger/merkleProof';
|
|
11
|
+
import { IConsistencyProof } from '../interfaces/ledger/consistencyProof';
|
|
12
|
+
/**
|
|
13
|
+
* Deterministic binary serializer for Merkle inclusion proofs and consistency proofs.
|
|
14
|
+
*
|
|
15
|
+
* All methods are static. Uses only Uint8Array and DataView for browser compatibility.
|
|
16
|
+
*/
|
|
17
|
+
export declare class ProofSerializer {
|
|
18
|
+
/**
|
|
19
|
+
* Serialize an inclusion proof to a Uint8Array.
|
|
20
|
+
*
|
|
21
|
+
* Binary format:
|
|
22
|
+
* | Offset | Size | Field |
|
|
23
|
+
* |--------|-----------------|------------|
|
|
24
|
+
* | 0 | 1 | version |
|
|
25
|
+
* | 1 | 1 | proofType |
|
|
26
|
+
* | 2 | 64 | leafHash |
|
|
27
|
+
* | 66 | 4 | leafIndex |
|
|
28
|
+
* | 70 | 4 | treeSize |
|
|
29
|
+
* | 74 | 2 | pathLength |
|
|
30
|
+
* | 76 | pathLength × 65 | path |
|
|
31
|
+
*/
|
|
32
|
+
static serializeInclusionProof(proof: IMerkleProof): Uint8Array;
|
|
33
|
+
/**
|
|
34
|
+
* Deserialize a Uint8Array into an inclusion proof.
|
|
35
|
+
*
|
|
36
|
+
* @throws LedgerSerializationError for truncated, malformed, or unrecognized data
|
|
37
|
+
*/
|
|
38
|
+
static deserializeInclusionProof(data: Uint8Array): IMerkleProof;
|
|
39
|
+
/**
|
|
40
|
+
* Serialize a consistency proof to a Uint8Array.
|
|
41
|
+
*
|
|
42
|
+
* Binary format:
|
|
43
|
+
* | Offset | Size | Field |
|
|
44
|
+
* |--------|-------------------|-------------|
|
|
45
|
+
* | 0 | 1 | version |
|
|
46
|
+
* | 1 | 1 | proofType |
|
|
47
|
+
* | 2 | 4 | earlierSize |
|
|
48
|
+
* | 6 | 4 | laterSize |
|
|
49
|
+
* | 10 | 2 | hashCount |
|
|
50
|
+
* | 12 | hashCount × 64 | hashes |
|
|
51
|
+
*/
|
|
52
|
+
static serializeConsistencyProof(proof: IConsistencyProof): Uint8Array;
|
|
53
|
+
/**
|
|
54
|
+
* Deserialize a Uint8Array into a consistency proof.
|
|
55
|
+
*
|
|
56
|
+
* @throws LedgerSerializationError for truncated, malformed, or unrecognized data
|
|
57
|
+
*/
|
|
58
|
+
static deserializeConsistencyProof(data: Uint8Array): IConsistencyProof;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=proofSerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proofSerializer.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/proofSerializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,EACL,YAAY,EAGb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA6B1E;;;;GAIG;AACH,qBAAa,eAAe;IAC1B;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU;IAiC/D;;;;OAIG;IACH,MAAM,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY;IA6EhE;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU;IA6BtE;;;;OAIG;IACH,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB;CA8DxE"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Deterministic binary serialization for Merkle inclusion proofs
|
|
4
|
+
* and consistency proofs.
|
|
5
|
+
*
|
|
6
|
+
* Uses only browser-compatible APIs (DataView, Uint8Array) — no Node.js Buffer.
|
|
7
|
+
*
|
|
8
|
+
* @see Design: Merkle Tree Commitment Layer — Proof Serialization
|
|
9
|
+
* @see Requirements 10.1, 10.2, 10.3, 10.4, 10.7, 10.8, 15.4
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ProofSerializer = void 0;
|
|
13
|
+
const checksum_1 = require("../types/checksum");
|
|
14
|
+
const ledgerSerializationError_1 = require("../errors/ledgerSerializationError");
|
|
15
|
+
const merkleProof_1 = require("../interfaces/ledger/merkleProof");
|
|
16
|
+
/** Current serialization format version. */
|
|
17
|
+
const FORMAT_VERSION = 0x01;
|
|
18
|
+
/** Proof type byte for inclusion proofs. */
|
|
19
|
+
const PROOF_TYPE_INCLUSION = 0x01;
|
|
20
|
+
/** Proof type byte for consistency proofs. */
|
|
21
|
+
const PROOF_TYPE_CONSISTENCY = 0x02;
|
|
22
|
+
/** SHA3-512 hash size in bytes. */
|
|
23
|
+
const HASH_SIZE = 64;
|
|
24
|
+
/**
|
|
25
|
+
* Minimum size of a serialized inclusion proof (no path steps):
|
|
26
|
+
* version(1) + proofType(1) + leafHash(64) + leafIndex(4) + treeSize(4) + pathLength(2) = 76
|
|
27
|
+
*/
|
|
28
|
+
const INCLUSION_HEADER_SIZE = 76;
|
|
29
|
+
/** Size of each inclusion proof path step: hash(64) + direction(1) = 65 */
|
|
30
|
+
const PATH_STEP_SIZE = 65;
|
|
31
|
+
/**
|
|
32
|
+
* Minimum size of a serialized consistency proof (no hashes):
|
|
33
|
+
* version(1) + proofType(1) + earlierSize(4) + laterSize(4) + hashCount(2) = 12
|
|
34
|
+
*/
|
|
35
|
+
const CONSISTENCY_HEADER_SIZE = 12;
|
|
36
|
+
/**
|
|
37
|
+
* Deterministic binary serializer for Merkle inclusion proofs and consistency proofs.
|
|
38
|
+
*
|
|
39
|
+
* All methods are static. Uses only Uint8Array and DataView for browser compatibility.
|
|
40
|
+
*/
|
|
41
|
+
class ProofSerializer {
|
|
42
|
+
/**
|
|
43
|
+
* Serialize an inclusion proof to a Uint8Array.
|
|
44
|
+
*
|
|
45
|
+
* Binary format:
|
|
46
|
+
* | Offset | Size | Field |
|
|
47
|
+
* |--------|-----------------|------------|
|
|
48
|
+
* | 0 | 1 | version |
|
|
49
|
+
* | 1 | 1 | proofType |
|
|
50
|
+
* | 2 | 64 | leafHash |
|
|
51
|
+
* | 66 | 4 | leafIndex |
|
|
52
|
+
* | 70 | 4 | treeSize |
|
|
53
|
+
* | 74 | 2 | pathLength |
|
|
54
|
+
* | 76 | pathLength × 65 | path |
|
|
55
|
+
*/
|
|
56
|
+
static serializeInclusionProof(proof) {
|
|
57
|
+
const pathLength = proof.path.length;
|
|
58
|
+
const totalSize = INCLUSION_HEADER_SIZE + pathLength * PATH_STEP_SIZE;
|
|
59
|
+
const buffer = new Uint8Array(totalSize);
|
|
60
|
+
const view = new DataView(buffer.buffer);
|
|
61
|
+
// version + proofType
|
|
62
|
+
buffer[0] = FORMAT_VERSION;
|
|
63
|
+
buffer[1] = PROOF_TYPE_INCLUSION;
|
|
64
|
+
// leafHash (64 bytes)
|
|
65
|
+
buffer.set(proof.leafHash.toUint8Array(), 2);
|
|
66
|
+
// leafIndex (uint32 BE)
|
|
67
|
+
view.setUint32(66, proof.leafIndex, false);
|
|
68
|
+
// treeSize (uint32 BE)
|
|
69
|
+
view.setUint32(70, proof.treeSize, false);
|
|
70
|
+
// pathLength (uint16 BE)
|
|
71
|
+
view.setUint16(74, pathLength, false);
|
|
72
|
+
// path steps
|
|
73
|
+
let offset = INCLUSION_HEADER_SIZE;
|
|
74
|
+
for (const step of proof.path) {
|
|
75
|
+
buffer.set(step.hash.toUint8Array(), offset);
|
|
76
|
+
buffer[offset + HASH_SIZE] = step.direction;
|
|
77
|
+
offset += PATH_STEP_SIZE;
|
|
78
|
+
}
|
|
79
|
+
return buffer;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Deserialize a Uint8Array into an inclusion proof.
|
|
83
|
+
*
|
|
84
|
+
* @throws LedgerSerializationError for truncated, malformed, or unrecognized data
|
|
85
|
+
*/
|
|
86
|
+
static deserializeInclusionProof(data) {
|
|
87
|
+
if (data.length < INCLUSION_HEADER_SIZE) {
|
|
88
|
+
throw new ledgerSerializationError_1.LedgerSerializationError(ledgerSerializationError_1.LedgerSerializationErrorType.DataTooShort, `Inclusion proof data too short: expected at least ${INCLUSION_HEADER_SIZE} bytes, got ${data.length}`);
|
|
89
|
+
}
|
|
90
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
91
|
+
// version
|
|
92
|
+
const version = data[0];
|
|
93
|
+
if (version !== FORMAT_VERSION) {
|
|
94
|
+
throw new ledgerSerializationError_1.LedgerSerializationError(ledgerSerializationError_1.LedgerSerializationErrorType.UnsupportedVersion, `Unrecognized proof version: 0x${version.toString(16).padStart(2, '0')}`);
|
|
95
|
+
}
|
|
96
|
+
// proofType
|
|
97
|
+
const proofType = data[1];
|
|
98
|
+
if (proofType !== PROOF_TYPE_INCLUSION) {
|
|
99
|
+
throw new ledgerSerializationError_1.LedgerSerializationError(ledgerSerializationError_1.LedgerSerializationErrorType.InvalidMagic, `Expected inclusion proof type 0x${PROOF_TYPE_INCLUSION.toString(16).padStart(2, '0')}, got 0x${proofType.toString(16).padStart(2, '0')}`);
|
|
100
|
+
}
|
|
101
|
+
// leafHash
|
|
102
|
+
const leafHash = checksum_1.Checksum.fromUint8Array(data.slice(2, 2 + HASH_SIZE));
|
|
103
|
+
// leafIndex
|
|
104
|
+
const leafIndex = view.getUint32(66, false);
|
|
105
|
+
// treeSize
|
|
106
|
+
const treeSize = view.getUint32(70, false);
|
|
107
|
+
// pathLength
|
|
108
|
+
const pathLength = view.getUint16(74, false);
|
|
109
|
+
// Validate remaining data is sufficient for path
|
|
110
|
+
const expectedSize = INCLUSION_HEADER_SIZE + pathLength * PATH_STEP_SIZE;
|
|
111
|
+
if (data.length < expectedSize) {
|
|
112
|
+
throw new ledgerSerializationError_1.LedgerSerializationError(ledgerSerializationError_1.LedgerSerializationErrorType.FieldOverflow, `Inclusion proof path truncated: expected ${expectedSize} bytes, got ${data.length}`);
|
|
113
|
+
}
|
|
114
|
+
// Parse path steps
|
|
115
|
+
const path = [];
|
|
116
|
+
let offset = INCLUSION_HEADER_SIZE;
|
|
117
|
+
for (let i = 0; i < pathLength; i++) {
|
|
118
|
+
const hash = checksum_1.Checksum.fromUint8Array(data.slice(offset, offset + HASH_SIZE));
|
|
119
|
+
const directionByte = data[offset + HASH_SIZE];
|
|
120
|
+
if (directionByte !== merkleProof_1.MerkleDirection.LEFT &&
|
|
121
|
+
directionByte !== merkleProof_1.MerkleDirection.RIGHT) {
|
|
122
|
+
throw new ledgerSerializationError_1.LedgerSerializationError(ledgerSerializationError_1.LedgerSerializationErrorType.InvalidMagic, `Invalid proof step direction byte: 0x${directionByte.toString(16).padStart(2, '0')}`);
|
|
123
|
+
}
|
|
124
|
+
path.push({ hash, direction: directionByte });
|
|
125
|
+
offset += PATH_STEP_SIZE;
|
|
126
|
+
}
|
|
127
|
+
return { leafHash, leafIndex, treeSize, path };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Serialize a consistency proof to a Uint8Array.
|
|
131
|
+
*
|
|
132
|
+
* Binary format:
|
|
133
|
+
* | Offset | Size | Field |
|
|
134
|
+
* |--------|-------------------|-------------|
|
|
135
|
+
* | 0 | 1 | version |
|
|
136
|
+
* | 1 | 1 | proofType |
|
|
137
|
+
* | 2 | 4 | earlierSize |
|
|
138
|
+
* | 6 | 4 | laterSize |
|
|
139
|
+
* | 10 | 2 | hashCount |
|
|
140
|
+
* | 12 | hashCount × 64 | hashes |
|
|
141
|
+
*/
|
|
142
|
+
static serializeConsistencyProof(proof) {
|
|
143
|
+
const hashCount = proof.hashes.length;
|
|
144
|
+
const totalSize = CONSISTENCY_HEADER_SIZE + hashCount * HASH_SIZE;
|
|
145
|
+
const buffer = new Uint8Array(totalSize);
|
|
146
|
+
const view = new DataView(buffer.buffer);
|
|
147
|
+
// version + proofType
|
|
148
|
+
buffer[0] = FORMAT_VERSION;
|
|
149
|
+
buffer[1] = PROOF_TYPE_CONSISTENCY;
|
|
150
|
+
// earlierSize (uint32 BE)
|
|
151
|
+
view.setUint32(2, proof.earlierSize, false);
|
|
152
|
+
// laterSize (uint32 BE)
|
|
153
|
+
view.setUint32(6, proof.laterSize, false);
|
|
154
|
+
// hashCount (uint16 BE)
|
|
155
|
+
view.setUint16(10, hashCount, false);
|
|
156
|
+
// hashes
|
|
157
|
+
let offset = CONSISTENCY_HEADER_SIZE;
|
|
158
|
+
for (const hash of proof.hashes) {
|
|
159
|
+
buffer.set(hash.toUint8Array(), offset);
|
|
160
|
+
offset += HASH_SIZE;
|
|
161
|
+
}
|
|
162
|
+
return buffer;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Deserialize a Uint8Array into a consistency proof.
|
|
166
|
+
*
|
|
167
|
+
* @throws LedgerSerializationError for truncated, malformed, or unrecognized data
|
|
168
|
+
*/
|
|
169
|
+
static deserializeConsistencyProof(data) {
|
|
170
|
+
if (data.length < CONSISTENCY_HEADER_SIZE) {
|
|
171
|
+
throw new ledgerSerializationError_1.LedgerSerializationError(ledgerSerializationError_1.LedgerSerializationErrorType.DataTooShort, `Consistency proof data too short: expected at least ${CONSISTENCY_HEADER_SIZE} bytes, got ${data.length}`);
|
|
172
|
+
}
|
|
173
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
174
|
+
// version
|
|
175
|
+
const version = data[0];
|
|
176
|
+
if (version !== FORMAT_VERSION) {
|
|
177
|
+
throw new ledgerSerializationError_1.LedgerSerializationError(ledgerSerializationError_1.LedgerSerializationErrorType.UnsupportedVersion, `Unrecognized proof version: 0x${version.toString(16).padStart(2, '0')}`);
|
|
178
|
+
}
|
|
179
|
+
// proofType
|
|
180
|
+
const proofType = data[1];
|
|
181
|
+
if (proofType !== PROOF_TYPE_CONSISTENCY) {
|
|
182
|
+
throw new ledgerSerializationError_1.LedgerSerializationError(ledgerSerializationError_1.LedgerSerializationErrorType.InvalidMagic, `Expected consistency proof type 0x${PROOF_TYPE_CONSISTENCY.toString(16).padStart(2, '0')}, got 0x${proofType.toString(16).padStart(2, '0')}`);
|
|
183
|
+
}
|
|
184
|
+
// earlierSize
|
|
185
|
+
const earlierSize = view.getUint32(2, false);
|
|
186
|
+
// laterSize
|
|
187
|
+
const laterSize = view.getUint32(6, false);
|
|
188
|
+
// hashCount
|
|
189
|
+
const hashCount = view.getUint16(10, false);
|
|
190
|
+
// Validate remaining data is sufficient for hashes
|
|
191
|
+
const expectedSize = CONSISTENCY_HEADER_SIZE + hashCount * HASH_SIZE;
|
|
192
|
+
if (data.length < expectedSize) {
|
|
193
|
+
throw new ledgerSerializationError_1.LedgerSerializationError(ledgerSerializationError_1.LedgerSerializationErrorType.FieldOverflow, `Consistency proof hashes truncated: expected ${expectedSize} bytes, got ${data.length}`);
|
|
194
|
+
}
|
|
195
|
+
// Parse hashes
|
|
196
|
+
const hashes = [];
|
|
197
|
+
let offset = CONSISTENCY_HEADER_SIZE;
|
|
198
|
+
for (let i = 0; i < hashCount; i++) {
|
|
199
|
+
hashes.push(checksum_1.Checksum.fromUint8Array(data.slice(offset, offset + HASH_SIZE)));
|
|
200
|
+
offset += HASH_SIZE;
|
|
201
|
+
}
|
|
202
|
+
return { earlierSize, laterSize, hashes };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.ProofSerializer = ProofSerializer;
|
|
206
|
+
//# sourceMappingURL=proofSerializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proofSerializer.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/proofSerializer.ts"],"names":[],"mappings":"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"}
|