@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
package/src/lib/ledger/ledger.js
CHANGED
|
@@ -29,11 +29,13 @@ const rawData_1 = require("../blocks/rawData");
|
|
|
29
29
|
const blockDataType_1 = require("../enumerations/blockDataType");
|
|
30
30
|
const blockType_1 = require("../enumerations/blockType");
|
|
31
31
|
const ledgerError_1 = require("../errors/ledgerError");
|
|
32
|
+
const merkleProof_1 = require("../interfaces/ledger/merkleProof");
|
|
32
33
|
const checksum_service_1 = require("../services/checksum.service");
|
|
33
34
|
const checksum_1 = require("../types/checksum");
|
|
34
35
|
const xorUtils_1 = require("../utils/xorUtils");
|
|
35
36
|
const authorizedSignerSet_1 = require("./authorizedSignerSet");
|
|
36
37
|
const governancePayloadSerializer_1 = require("./governancePayloadSerializer");
|
|
38
|
+
const incrementalMerkleTree_1 = require("./incrementalMerkleTree");
|
|
37
39
|
/** Magic bytes identifying a ledger metadata block: "LMET" in ASCII. */
|
|
38
40
|
const METADATA_MAGIC = 0x4c4d4554;
|
|
39
41
|
/** Current metadata format version. */
|
|
@@ -83,6 +85,7 @@ class Ledger {
|
|
|
83
85
|
governanceSerializer;
|
|
84
86
|
index = new Map();
|
|
85
87
|
checksumService = new checksum_service_1.ChecksumService();
|
|
88
|
+
merkleTree;
|
|
86
89
|
_length = 0;
|
|
87
90
|
_head = null;
|
|
88
91
|
_headEntryHash = null;
|
|
@@ -93,6 +96,7 @@ class Ledger {
|
|
|
93
96
|
this.serializer = serializer;
|
|
94
97
|
this.ledgerId = ledgerId;
|
|
95
98
|
this.governanceSerializer = governanceSerializer;
|
|
99
|
+
this.merkleTree = new incrementalMerkleTree_1.IncrementalMerkleTree(this.checksumService);
|
|
96
100
|
}
|
|
97
101
|
// ── Public getters ────────────────────────────────────────────────
|
|
98
102
|
/** Current chain length. */
|
|
@@ -107,6 +111,16 @@ class Ledger {
|
|
|
107
111
|
get quorumPolicy() {
|
|
108
112
|
return this._authorizedSignerSet?.quorumPolicy;
|
|
109
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Current Merkle root, or null if the ledger is empty.
|
|
116
|
+
* @see Requirements 9.1, 7.1
|
|
117
|
+
*/
|
|
118
|
+
get merkleRoot() {
|
|
119
|
+
if (this.merkleTree.size === 0) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
return this.merkleTree.root;
|
|
123
|
+
}
|
|
110
124
|
// ── Append ────────────────────────────────────────────────────────
|
|
111
125
|
/**
|
|
112
126
|
* Append a new entry to the ledger.
|
|
@@ -242,6 +256,34 @@ class Ledger {
|
|
|
242
256
|
}
|
|
243
257
|
return this.getEntry(this._length - 1);
|
|
244
258
|
}
|
|
259
|
+
// ── Merkle proof operations ───────────────────────────────────────
|
|
260
|
+
/**
|
|
261
|
+
* Get an inclusion proof for the entry at the given sequence number.
|
|
262
|
+
*
|
|
263
|
+
* @param sequenceNumber - Zero-based sequence number of the entry
|
|
264
|
+
* @returns An IMerkleProof with the authentication path from leaf to root
|
|
265
|
+
* @throws LedgerError(MerkleProofFailed) if sequenceNumber is out of range
|
|
266
|
+
*
|
|
267
|
+
* @see Requirements 9.2, 18.1
|
|
268
|
+
*/
|
|
269
|
+
getInclusionProof(sequenceNumber) {
|
|
270
|
+
if (sequenceNumber < 0 || sequenceNumber >= this._length) {
|
|
271
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.MerkleProofFailed, `Sequence number ${sequenceNumber} is out of range [0, ${this._length})`);
|
|
272
|
+
}
|
|
273
|
+
return this.merkleTree.getInclusionProof(sequenceNumber);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get a consistency proof between an earlier length and the current length.
|
|
277
|
+
*
|
|
278
|
+
* @param earlierLength - The earlier ledger length M
|
|
279
|
+
* @returns An IConsistencyProof with the intermediate hashes
|
|
280
|
+
* @throws LedgerError(ConsistencyProofFailed) if earlierLength > current length
|
|
281
|
+
*
|
|
282
|
+
* @see Requirements 9.3
|
|
283
|
+
*/
|
|
284
|
+
getConsistencyProof(earlierLength) {
|
|
285
|
+
return this.merkleTree.getConsistencyProof(earlierLength);
|
|
286
|
+
}
|
|
245
287
|
// ── Private: genesis entry handling ───────────────────────────────
|
|
246
288
|
/**
|
|
247
289
|
* Handle the genesis entry for a governance-enabled ledger.
|
|
@@ -307,6 +349,8 @@ class Ledger {
|
|
|
307
349
|
this._length = sequenceNumber + 1;
|
|
308
350
|
this._head = blockChecksum;
|
|
309
351
|
this._headEntryHash = entryHash;
|
|
352
|
+
// 6b. Append entry hash to Merkle tree (Req 2.1, 7.1)
|
|
353
|
+
this.merkleTree.append(entryHash);
|
|
310
354
|
// 7. Persist metadata block
|
|
311
355
|
try {
|
|
312
356
|
await this.persistMetadata();
|
|
@@ -328,7 +372,7 @@ class Ledger {
|
|
|
328
372
|
/**
|
|
329
373
|
* Serialize the current metadata into binary.
|
|
330
374
|
*
|
|
331
|
-
* Format:
|
|
375
|
+
* Format (version 0x0001):
|
|
332
376
|
* magic 4 bytes 0x4C4D4554 ("LMET")
|
|
333
377
|
* version 2 bytes 0x0001
|
|
334
378
|
* ledgerIdLength 4 bytes uint32 BE
|
|
@@ -336,22 +380,40 @@ class Ledger {
|
|
|
336
380
|
* length 4 bytes uint32 BE
|
|
337
381
|
* hasHead 1 byte 0x00 or 0x01
|
|
338
382
|
* headChecksum 0|64 SHA3-512 bytes (block checksum of head)
|
|
383
|
+
* hasMerkleRoot 1 byte 0x00 or 0x01
|
|
384
|
+
* merkleRoot 0|64 SHA3-512 Merkle root
|
|
385
|
+
* frontierCount 2 bytes uint16 BE — number of frontier hashes
|
|
386
|
+
* frontier var frontierCount × 64 bytes SHA3-512 hashes
|
|
339
387
|
* index entries var seqNum (uint32 BE) + blockChecksum (64 bytes)
|
|
388
|
+
*
|
|
389
|
+
* @see Requirements 7.1, 7.3, 8.1, 8.4
|
|
340
390
|
*/
|
|
341
391
|
serializeMetadata() {
|
|
342
392
|
const encoder = new TextEncoder();
|
|
343
393
|
const ledgerIdBytes = encoder.encode(this.ledgerId);
|
|
344
394
|
const headBytes = this._head ? this._head.toUint8Array() : null;
|
|
395
|
+
// Merkle root: present when tree has leaves
|
|
396
|
+
const hasMerkleRoot = this.merkleTree.size > 0;
|
|
397
|
+
const merkleRootBytes = hasMerkleRoot
|
|
398
|
+
? this.merkleTree.root.toUint8Array()
|
|
399
|
+
: null;
|
|
400
|
+
// Frontier hashes
|
|
401
|
+
const frontier = this.merkleTree.currentFrontier;
|
|
402
|
+
const frontierCount = frontier.length;
|
|
345
403
|
const indexEntrySize = 4 + HASH_LENGTH;
|
|
346
404
|
const indexSize = this._length * indexEntrySize;
|
|
347
|
-
const size = 4 +
|
|
348
|
-
2 +
|
|
349
|
-
4 +
|
|
350
|
-
ledgerIdBytes.length +
|
|
351
|
-
4 +
|
|
352
|
-
1 +
|
|
353
|
-
(headBytes ? HASH_LENGTH : 0) +
|
|
354
|
-
|
|
405
|
+
const size = 4 + // magic
|
|
406
|
+
2 + // version
|
|
407
|
+
4 + // ledgerIdLength
|
|
408
|
+
ledgerIdBytes.length + // ledgerId
|
|
409
|
+
4 + // length
|
|
410
|
+
1 + // hasHead
|
|
411
|
+
(headBytes ? HASH_LENGTH : 0) + // headChecksum
|
|
412
|
+
1 + // hasMerkleRoot
|
|
413
|
+
(merkleRootBytes ? HASH_LENGTH : 0) + // merkleRoot
|
|
414
|
+
2 + // frontierCount
|
|
415
|
+
frontierCount * HASH_LENGTH + // frontier hashes
|
|
416
|
+
indexSize; // index entries
|
|
355
417
|
const buf = new Uint8Array(size);
|
|
356
418
|
const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
357
419
|
let offset = 0;
|
|
@@ -375,6 +437,25 @@ class Ledger {
|
|
|
375
437
|
buf[offset] = 0x00;
|
|
376
438
|
offset += 1;
|
|
377
439
|
}
|
|
440
|
+
// Merkle root (Req 7.1)
|
|
441
|
+
if (merkleRootBytes) {
|
|
442
|
+
buf[offset] = 0x01;
|
|
443
|
+
offset += 1;
|
|
444
|
+
buf.set(merkleRootBytes, offset);
|
|
445
|
+
offset += HASH_LENGTH;
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
buf[offset] = 0x00;
|
|
449
|
+
offset += 1;
|
|
450
|
+
}
|
|
451
|
+
// Frontier (Req 8.1, 8.4)
|
|
452
|
+
view.setUint16(offset, frontierCount, false);
|
|
453
|
+
offset += 2;
|
|
454
|
+
for (const hash of frontier) {
|
|
455
|
+
buf.set(hash.toUint8Array(), offset);
|
|
456
|
+
offset += HASH_LENGTH;
|
|
457
|
+
}
|
|
458
|
+
// Index entries
|
|
378
459
|
for (let i = 0; i < this._length; i++) {
|
|
379
460
|
const checksum = this.index.get(i);
|
|
380
461
|
if (checksum) {
|
|
@@ -403,6 +484,192 @@ class Ledger {
|
|
|
403
484
|
const block = new LedgerMetadataBlock(this.blockSize, padded, metadataKey);
|
|
404
485
|
await this.store.setData(block);
|
|
405
486
|
}
|
|
487
|
+
// ── Static proof verification ───────────────────────────────────
|
|
488
|
+
/**
|
|
489
|
+
* Verify an inclusion proof against a Merkle root.
|
|
490
|
+
* Static — no Ledger instance needed. Suitable for light clients.
|
|
491
|
+
*
|
|
492
|
+
* Recomputes hashes from the leaf to the root using the proof path,
|
|
493
|
+
* then compares the result to the provided Merkle root.
|
|
494
|
+
*
|
|
495
|
+
* @param proof - The inclusion proof to verify
|
|
496
|
+
* @param merkleRoot - The expected Merkle root
|
|
497
|
+
* @returns An IProofVerificationResult indicating success or failure
|
|
498
|
+
*
|
|
499
|
+
* @see Requirements 9.4, 4.1, 4.2, 4.3, 4.4, 15.3, 18.3
|
|
500
|
+
*/
|
|
501
|
+
static verifyInclusionProof(proof, merkleRoot) {
|
|
502
|
+
// Validate proof structure: path length vs tree size
|
|
503
|
+
if (proof.treeSize === 1) {
|
|
504
|
+
if (proof.path.length !== 0) {
|
|
505
|
+
return {
|
|
506
|
+
isValid: false,
|
|
507
|
+
error: `Malformed proof: treeSize is 1 but path length is ${proof.path.length} (expected 0)`,
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
else if (proof.treeSize > 1) {
|
|
512
|
+
if (proof.path.length === 0) {
|
|
513
|
+
return {
|
|
514
|
+
isValid: false,
|
|
515
|
+
error: `Malformed proof: treeSize is ${proof.treeSize} but path length is 0 (expected > 0)`,
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
const checksumService = new checksum_service_1.ChecksumService();
|
|
520
|
+
let current = proof.leafHash;
|
|
521
|
+
for (const step of proof.path) {
|
|
522
|
+
const currentBytes = current.toUint8Array();
|
|
523
|
+
const stepBytes = step.hash.toUint8Array();
|
|
524
|
+
const combined = new Uint8Array(currentBytes.length + stepBytes.length);
|
|
525
|
+
if (step.direction === merkleProof_1.MerkleDirection.LEFT) {
|
|
526
|
+
// Sibling is on the left: SHA3-512(sibling || current)
|
|
527
|
+
combined.set(stepBytes, 0);
|
|
528
|
+
combined.set(currentBytes, stepBytes.length);
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
// Sibling is on the right: SHA3-512(current || sibling)
|
|
532
|
+
combined.set(currentBytes, 0);
|
|
533
|
+
combined.set(stepBytes, currentBytes.length);
|
|
534
|
+
}
|
|
535
|
+
current = checksumService.calculateChecksum(combined);
|
|
536
|
+
}
|
|
537
|
+
if (current.equals(merkleRoot)) {
|
|
538
|
+
return { isValid: true };
|
|
539
|
+
}
|
|
540
|
+
return { isValid: false, error: 'Root mismatch' };
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Verify a consistency proof between two Merkle roots.
|
|
544
|
+
* Static — no Ledger instance needed.
|
|
545
|
+
*
|
|
546
|
+
* Implements the RFC 6962 Section 2.1.4 consistency proof verification
|
|
547
|
+
* algorithm. The proof hashes are consumed in order to reconstruct both
|
|
548
|
+
* the earlier and later roots.
|
|
549
|
+
*
|
|
550
|
+
* @param proof - The consistency proof to verify
|
|
551
|
+
* @param earlierRoot - The Merkle root at the earlier length
|
|
552
|
+
* @param laterRoot - The Merkle root at the later length
|
|
553
|
+
* @param earlierLength - The earlier ledger length M
|
|
554
|
+
* @param laterLength - The later ledger length N
|
|
555
|
+
* @returns An IProofVerificationResult indicating success or failure
|
|
556
|
+
*
|
|
557
|
+
* @see Requirements 9.5, 6.1, 6.2, 6.3
|
|
558
|
+
*/
|
|
559
|
+
static verifyConsistencyProof(proof, earlierRoot, laterRoot, earlierLength, laterLength) {
|
|
560
|
+
// Trivial cases: M=0 or M=N
|
|
561
|
+
if (earlierLength === 0) {
|
|
562
|
+
// Empty tree is trivially consistent with any later state
|
|
563
|
+
return { isValid: true };
|
|
564
|
+
}
|
|
565
|
+
if (earlierLength === laterLength) {
|
|
566
|
+
// Same size — roots must match, proof should be empty
|
|
567
|
+
if (earlierRoot.equals(laterRoot)) {
|
|
568
|
+
return { isValid: true };
|
|
569
|
+
}
|
|
570
|
+
return { isValid: false, error: 'Root mismatch for same-size trees' };
|
|
571
|
+
}
|
|
572
|
+
if (earlierLength > laterLength) {
|
|
573
|
+
return {
|
|
574
|
+
isValid: false,
|
|
575
|
+
error: `Earlier length ${earlierLength} exceeds later length ${laterLength}`,
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
if (proof.hashes.length === 0) {
|
|
579
|
+
return {
|
|
580
|
+
isValid: false,
|
|
581
|
+
error: 'Empty proof for non-trivial consistency check',
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
const checksumService = new checksum_service_1.ChecksumService();
|
|
585
|
+
// RFC 6962 Section 2.1.4 verification algorithm
|
|
586
|
+
// Walk the decomposition path to determine how proof hashes combine
|
|
587
|
+
// to reconstruct both the earlier and later roots.
|
|
588
|
+
let hashIndex = 0;
|
|
589
|
+
let fn = earlierLength - 1; // last node index in earlier tree
|
|
590
|
+
let sn = laterLength - 1; // last node index in later tree
|
|
591
|
+
// Remove common left-spine: while fn is odd (fn is a right child),
|
|
592
|
+
// shift both down. This finds the position of the old tree's root
|
|
593
|
+
// in the decomposition.
|
|
594
|
+
while (fn % 2 === 1) {
|
|
595
|
+
fn >>>= 1;
|
|
596
|
+
sn >>>= 1;
|
|
597
|
+
}
|
|
598
|
+
// When fn === 0 after the loop, M was a power of 2. In this case,
|
|
599
|
+
// the proof generation omits the old root (startFromOldRoot=true),
|
|
600
|
+
// so the verifier must use earlierRoot as the starting hash.
|
|
601
|
+
let fr;
|
|
602
|
+
let sr;
|
|
603
|
+
if (fn === 0) {
|
|
604
|
+
// M is a power of 2: old root was omitted from proof
|
|
605
|
+
fr = earlierRoot;
|
|
606
|
+
sr = earlierRoot;
|
|
607
|
+
}
|
|
608
|
+
else {
|
|
609
|
+
// M is not a power of 2: first proof hash is the old subtree root
|
|
610
|
+
if (hashIndex >= proof.hashes.length) {
|
|
611
|
+
return {
|
|
612
|
+
isValid: false,
|
|
613
|
+
error: 'Proof too short',
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
fr = proof.hashes[hashIndex];
|
|
617
|
+
sr = proof.hashes[hashIndex];
|
|
618
|
+
hashIndex++;
|
|
619
|
+
}
|
|
620
|
+
while (sn > 0) {
|
|
621
|
+
if (hashIndex >= proof.hashes.length) {
|
|
622
|
+
return {
|
|
623
|
+
isValid: false,
|
|
624
|
+
error: 'Proof too short',
|
|
625
|
+
};
|
|
626
|
+
}
|
|
627
|
+
const nextHash = proof.hashes[hashIndex];
|
|
628
|
+
hashIndex++;
|
|
629
|
+
if (fn % 2 === 1 || fn === sn) {
|
|
630
|
+
// The next hash is on the left; both fr and sr get it prepended
|
|
631
|
+
fr = Ledger.hashChildren(checksumService, nextHash, fr);
|
|
632
|
+
sr = Ledger.hashChildren(checksumService, nextHash, sr);
|
|
633
|
+
// If fn is odd, keep going up while fn is odd
|
|
634
|
+
while (fn !== 0 && fn % 2 === 1) {
|
|
635
|
+
fn >>>= 1;
|
|
636
|
+
sn >>>= 1;
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
else {
|
|
640
|
+
// The next hash is on the right; only sr gets it appended
|
|
641
|
+
sr = Ledger.hashChildren(checksumService, sr, nextHash);
|
|
642
|
+
}
|
|
643
|
+
fn >>>= 1;
|
|
644
|
+
sn >>>= 1;
|
|
645
|
+
}
|
|
646
|
+
// Verify both reconstructed roots match
|
|
647
|
+
if (!fr.equals(earlierRoot)) {
|
|
648
|
+
return {
|
|
649
|
+
isValid: false,
|
|
650
|
+
error: 'Consistency proof failed: earlier root mismatch',
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
if (!sr.equals(laterRoot)) {
|
|
654
|
+
return {
|
|
655
|
+
isValid: false,
|
|
656
|
+
error: 'Consistency proof failed: later root mismatch',
|
|
657
|
+
};
|
|
658
|
+
}
|
|
659
|
+
return { isValid: true };
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Hash two child nodes: SHA3-512(left || right).
|
|
663
|
+
* Helper for static verification methods.
|
|
664
|
+
*/
|
|
665
|
+
static hashChildren(checksumService, left, right) {
|
|
666
|
+
const leftBytes = left.toUint8Array();
|
|
667
|
+
const rightBytes = right.toUint8Array();
|
|
668
|
+
const combined = new Uint8Array(leftBytes.length + rightBytes.length);
|
|
669
|
+
combined.set(leftBytes, 0);
|
|
670
|
+
combined.set(rightBytes, leftBytes.length);
|
|
671
|
+
return checksumService.calculateChecksum(combined);
|
|
672
|
+
}
|
|
406
673
|
// ── Static load ───────────────────────────────────────────────────
|
|
407
674
|
/**
|
|
408
675
|
* Load ledger state from the block store.
|
|
@@ -454,6 +721,9 @@ class Ledger {
|
|
|
454
721
|
if (governanceSerializer) {
|
|
455
722
|
await ledger.replayGovernance();
|
|
456
723
|
}
|
|
724
|
+
// Restore Merkle tree from persisted frontier or rebuild from leaves
|
|
725
|
+
// @see Requirements 7.2, 8.2, 8.3
|
|
726
|
+
await ledger.restoreMerkleTree(parsed.merkleRoot, parsed.frontier, parsed.length, store, serializer);
|
|
457
727
|
return ledger;
|
|
458
728
|
}
|
|
459
729
|
/**
|
|
@@ -485,8 +755,63 @@ class Ledger {
|
|
|
485
755
|
}
|
|
486
756
|
}
|
|
487
757
|
}
|
|
758
|
+
/**
|
|
759
|
+
* Restore the Merkle tree during `Ledger.load()`.
|
|
760
|
+
*
|
|
761
|
+
* Strategy:
|
|
762
|
+
* 1. If a Merkle root and frontier are persisted, attempt fast restoration
|
|
763
|
+
* via `IncrementalMerkleTree.fromFrontier()`. Verify the restored root
|
|
764
|
+
* matches the persisted root.
|
|
765
|
+
* 2. On mismatch, fall back to full reconstruction from entry hashes.
|
|
766
|
+
* 3. If no Merkle root in metadata, rebuild from all entry hashes.
|
|
767
|
+
*
|
|
768
|
+
* @see Requirements 7.2, 8.2, 8.3
|
|
769
|
+
*/
|
|
770
|
+
async restoreMerkleTree(persistedMerkleRoot, persistedFrontier, entryCount, store, serializer) {
|
|
771
|
+
// Case 1: Frontier-based fast restoration
|
|
772
|
+
if (persistedMerkleRoot !== null && persistedFrontier.length > 0) {
|
|
773
|
+
const restored = incrementalMerkleTree_1.IncrementalMerkleTree.fromFrontier(persistedFrontier, entryCount, this.checksumService);
|
|
774
|
+
if (restored.root.equals(persistedMerkleRoot)) {
|
|
775
|
+
// Frontier restoration succeeded — use the restored tree
|
|
776
|
+
this.merkleTree = restored;
|
|
777
|
+
return;
|
|
778
|
+
}
|
|
779
|
+
// Mismatch — fall back to full reconstruction (Req 8.3)
|
|
780
|
+
console.warn(`Merkle frontier restoration root mismatch for ledger "${this.ledgerId}". ` +
|
|
781
|
+
`Persisted root does not match frontier-computed root. ` +
|
|
782
|
+
`Falling back to full reconstruction from entry hashes.`);
|
|
783
|
+
}
|
|
784
|
+
// Case 2: No Merkle root in metadata, or frontier mismatch fallback —
|
|
785
|
+
// rebuild from all entry hashes
|
|
786
|
+
if (entryCount > 0) {
|
|
787
|
+
const entryHashes = [];
|
|
788
|
+
for (let i = 0; i < entryCount; i++) {
|
|
789
|
+
const blockChecksum = this.index.get(i);
|
|
790
|
+
if (blockChecksum === undefined) {
|
|
791
|
+
continue;
|
|
792
|
+
}
|
|
793
|
+
try {
|
|
794
|
+
const block = await store.getData(blockChecksum);
|
|
795
|
+
const unpadded = (0, xorUtils_1.unpadCblData)(block.data);
|
|
796
|
+
const entry = serializer.deserialize(unpadded);
|
|
797
|
+
entryHashes.push(entry.entryHash);
|
|
798
|
+
}
|
|
799
|
+
catch {
|
|
800
|
+
// Skip unreadable entries — degraded state
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
if (entryHashes.length > 0) {
|
|
804
|
+
this.merkleTree = incrementalMerkleTree_1.IncrementalMerkleTree.fromLeaves(entryHashes, this.checksumService);
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
}
|
|
488
808
|
/**
|
|
489
809
|
* Parse a metadata block's binary content.
|
|
810
|
+
*
|
|
811
|
+
* Returns the parsed fields including Merkle root and frontier
|
|
812
|
+
* so that `Ledger.load()` can restore the Merkle tree state.
|
|
813
|
+
*
|
|
814
|
+
* @see Requirements 7.2, 7.3, 8.1, 8.4
|
|
490
815
|
*/
|
|
491
816
|
static parseMetadata(data) {
|
|
492
817
|
if (data.length < 11) {
|
|
@@ -538,6 +863,34 @@ class Ledger {
|
|
|
538
863
|
headChecksum = checksum_1.Checksum.fromUint8Array(data.slice(offset, offset + HASH_LENGTH));
|
|
539
864
|
offset += HASH_LENGTH;
|
|
540
865
|
}
|
|
866
|
+
// hasMerkleRoot (Req 7.2)
|
|
867
|
+
let merkleRoot = null;
|
|
868
|
+
if (offset + 1 > data.length) {
|
|
869
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.MetadataCorrupted, 'Metadata hasMerkleRoot field overflows');
|
|
870
|
+
}
|
|
871
|
+
const hasMerkleRoot = data[offset];
|
|
872
|
+
offset += 1;
|
|
873
|
+
if (hasMerkleRoot === 0x01) {
|
|
874
|
+
if (offset + HASH_LENGTH > data.length) {
|
|
875
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.MetadataCorrupted, 'Metadata merkleRoot overflows');
|
|
876
|
+
}
|
|
877
|
+
merkleRoot = checksum_1.Checksum.fromUint8Array(data.slice(offset, offset + HASH_LENGTH));
|
|
878
|
+
offset += HASH_LENGTH;
|
|
879
|
+
}
|
|
880
|
+
// frontierCount + frontier hashes (Req 8.4)
|
|
881
|
+
const frontier = [];
|
|
882
|
+
if (offset + 2 > data.length) {
|
|
883
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.MetadataCorrupted, 'Metadata frontierCount field overflows');
|
|
884
|
+
}
|
|
885
|
+
const frontierCount = view.getUint16(offset, false);
|
|
886
|
+
offset += 2;
|
|
887
|
+
if (offset + frontierCount * HASH_LENGTH > data.length) {
|
|
888
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.MetadataCorrupted, 'Metadata frontier hashes overflow');
|
|
889
|
+
}
|
|
890
|
+
for (let i = 0; i < frontierCount; i++) {
|
|
891
|
+
frontier.push(checksum_1.Checksum.fromUint8Array(data.slice(offset, offset + HASH_LENGTH)));
|
|
892
|
+
offset += HASH_LENGTH;
|
|
893
|
+
}
|
|
541
894
|
// Parse index entries: each is seqNum (4) + checksum (64) = 68 bytes
|
|
542
895
|
const index = new Map();
|
|
543
896
|
const indexEntrySize = 4 + HASH_LENGTH;
|
|
@@ -548,7 +901,7 @@ class Ledger {
|
|
|
548
901
|
offset += HASH_LENGTH;
|
|
549
902
|
index.set(seqNum, blockChecksum);
|
|
550
903
|
}
|
|
551
|
-
return { ledgerId, length, headChecksum, index };
|
|
904
|
+
return { ledgerId, length, headChecksum, merkleRoot, frontier, index };
|
|
552
905
|
}
|
|
553
906
|
}
|
|
554
907
|
exports.Ledger = Ledger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/ledger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { ILedgerEntry } from '../interfaces/ledger/ledgerEntry';
|
|
15
15
|
import { ILedgerSignatureVerifier } from '../interfaces/ledger/ledgerSignatureVerifier';
|
|
16
|
+
import { IMerkleProof } from '../interfaces/ledger/merkleProof';
|
|
16
17
|
import { IValidationResult } from '../interfaces/ledger/validationResult';
|
|
18
|
+
import { Checksum } from '../types/checksum';
|
|
17
19
|
import { AuthorizedSignerSet } from './authorizedSignerSet';
|
|
18
20
|
import { GovernancePayloadSerializer } from './governancePayloadSerializer';
|
|
19
21
|
import { LedgerEntrySerializer } from './ledgerEntrySerializer';
|
|
@@ -43,8 +45,19 @@ export declare class LedgerChainValidator {
|
|
|
43
45
|
* - Each entry's signer is authorized at that chain position
|
|
44
46
|
* - Governance entries have admin role and satisfy quorum
|
|
45
47
|
* - Governance actions pass safety constraints
|
|
48
|
+
*
|
|
49
|
+
* When a merkleRoot is provided, also validates:
|
|
50
|
+
* - Reconstructs the Merkle tree from entry hashes
|
|
51
|
+
* - Verifies the computed root matches the provided Merkle root
|
|
52
|
+
*
|
|
53
|
+
* @param entries - The chain entries to validate
|
|
54
|
+
* @param merkleRoot - Optional Merkle root to verify against. When provided,
|
|
55
|
+
* the validator reconstructs the Merkle tree from entry hashes and compares
|
|
56
|
+
* the computed root to this value.
|
|
57
|
+
*
|
|
58
|
+
* @see Requirements 11.1, 11.3, 11.4
|
|
46
59
|
*/
|
|
47
|
-
validateAll(entries: ILedgerEntry[]): IValidationResult;
|
|
60
|
+
validateAll(entries: ILedgerEntry[], merkleRoot?: Checksum): IValidationResult;
|
|
48
61
|
/**
|
|
49
62
|
* Validate a sub-range of entries, including the link to the predecessor.
|
|
50
63
|
*
|
|
@@ -53,8 +66,41 @@ export declare class LedgerChainValidator {
|
|
|
53
66
|
* the sub-range starts at genesis.
|
|
54
67
|
* @param signerSetAtPredecessor - Optional AuthorizedSignerSet state at the predecessor
|
|
55
68
|
* for governance validation of the sub-range.
|
|
69
|
+
* @param merkleRoot - Optional Merkle root to verify entry hashes against.
|
|
70
|
+
* When provided along with merkleProofs, each entry's entryHash is verified
|
|
71
|
+
* against its corresponding Merkle proof.
|
|
72
|
+
* @param merkleProofs - Optional array of Merkle proofs corresponding 1:1 with
|
|
73
|
+
* the entries array. Required for Merkle validation when merkleRoot is provided.
|
|
74
|
+
*
|
|
75
|
+
* @see Requirements 11.2
|
|
76
|
+
*/
|
|
77
|
+
validateRange(entries: ILedgerEntry[], predecessor: ILedgerEntry | null, signerSetAtPredecessor?: AuthorizedSignerSet, merkleRoot?: Checksum, merkleProofs?: IMerkleProof[]): IValidationResult;
|
|
78
|
+
/**
|
|
79
|
+
* Validate the entire chain in parallel by splitting into chunks and
|
|
80
|
+
* verifying each chunk concurrently via Promise.all.
|
|
81
|
+
*
|
|
82
|
+
* Produces the same validation result as sequential `validateAll()`:
|
|
83
|
+
* same `isValid`, same `entriesChecked`, same error types (though error
|
|
84
|
+
* ordering may differ).
|
|
85
|
+
*
|
|
86
|
+
* Hash verification and signature verification — the expensive operations —
|
|
87
|
+
* run in parallel across chunks. Governance validation is run as a separate
|
|
88
|
+
* sequential pass since it requires tracking the AuthorizedSignerSet state
|
|
89
|
+
* across the chain.
|
|
90
|
+
*
|
|
91
|
+
* @param entries - The chain entries to validate (ordered by sequenceNumber from 0)
|
|
92
|
+
* @param merkleRoot - Optional Merkle root to verify against
|
|
93
|
+
* @returns Promise resolving to the same IValidationResult as validateAll()
|
|
94
|
+
*
|
|
95
|
+
* @see Requirements 17.1, 17.2, 17.3
|
|
96
|
+
*/
|
|
97
|
+
validateAllParallel(entries: ILedgerEntry[], merkleRoot?: Checksum): Promise<IValidationResult>;
|
|
98
|
+
/**
|
|
99
|
+
* Run governance validation sequentially across the full chain.
|
|
100
|
+
* This is separated from the parallel chunk validation because governance
|
|
101
|
+
* requires tracking the AuthorizedSignerSet state across entries.
|
|
56
102
|
*/
|
|
57
|
-
|
|
103
|
+
private validateGovernanceSequential;
|
|
58
104
|
/**
|
|
59
105
|
* Initialize the AuthorizedSignerSet from a genesis entry.
|
|
60
106
|
* Returns the signer set, or null if the genesis is not a valid governance payload.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledgerChainValidator.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/ledgerChainValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAEL,iBAAiB,EAClB,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"ledgerChainValidator.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/ledgerChainValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAEL,iBAAiB,EAClB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBAFrB,UAAU,EAAE,qBAAqB,EACjC,iBAAiB,EAAE,wBAAwB,EAC3C,oBAAoB,CAAC,EAAE,2BAA2B,YAAA;IAGrE;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,iBAAiB;IAsF9E;;;;;;;;;;;;;;;OAeG;IACH,aAAa,CACX,OAAO,EAAE,YAAY,EAAE,EACvB,WAAW,EAAE,YAAY,GAAG,IAAI,EAChC,sBAAsB,CAAC,EAAE,mBAAmB,EAC5C,UAAU,CAAC,EAAE,QAAQ,EACrB,YAAY,CAAC,EAAE,YAAY,EAAE,GAC5B,iBAAiB;IAwGpB;;;;;;;;;;;;;;;;;;OAkBG;IACG,mBAAmB,CACvB,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,CAAC,EAAE,QAAQ,GACpB,OAAO,CAAC,iBAAiB,CAAC;IAkF7B;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAuBpC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAmDhC;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;IA0ElC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcvB;;;OAGG;IACH,OAAO,CAAC,eAAe;CAkBxB"}
|