@mikeargento/bitgraph-audit 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/dist/audit.d.ts +9 -6
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +34 -8
- package/dist/audit.js.map +1 -1
- package/dist/ceilings.d.ts.map +1 -1
- package/dist/ceilings.js +1 -0
- package/dist/ceilings.js.map +1 -1
- package/dist/cli.js +109 -21
- package/dist/cli.js.map +1 -1
- package/dist/exports.d.ts +39 -0
- package/dist/exports.d.ts.map +1 -0
- package/dist/exports.js +374 -0
- package/dist/exports.js.map +1 -0
- package/dist/floors.d.ts +23 -0
- package/dist/floors.d.ts.map +1 -0
- package/dist/floors.js +203 -0
- package/dist/floors.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest.d.ts +2 -0
- package/dist/ingest.d.ts.map +1 -1
- package/dist/ingest.js +193 -19
- package/dist/ingest.js.map +1 -1
- package/dist/report-json.d.ts.map +1 -1
- package/dist/report-json.js +30 -0
- package/dist/report-json.js.map +1 -1
- package/dist/report-md.d.ts.map +1 -1
- package/dist/report-md.js +315 -25
- package/dist/report-md.js.map +1 -1
- package/dist/temporal.d.ts +12 -0
- package/dist/temporal.d.ts.map +1 -1
- package/dist/temporal.js +245 -41
- package/dist/temporal.js.map +1 -1
- package/dist/types.d.ts +348 -7
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/__tests__/base-floor.test.ts +405 -0
- package/src/audit.ts +36 -8
- package/src/ceilings.ts +1 -0
- package/src/cli.ts +117 -22
- package/src/exports.ts +482 -0
- package/src/floors.ts +242 -0
- package/src/index.ts +20 -0
- package/src/ingest.ts +207 -18
- package/src/report-json.ts +30 -0
- package/src/report-md.ts +353 -29
- package/src/temporal.ts +279 -48
- package/src/types.ts +341 -6
package/dist/report-json.js
CHANGED
|
@@ -89,6 +89,7 @@ export function buildJsonReport(result) {
|
|
|
89
89
|
...(result.ceilings && (result.ceilings.checks.length > 0 || result.ceilings.statuses.length > 0)
|
|
90
90
|
? { ceilings: result.ceilings }
|
|
91
91
|
: {}),
|
|
92
|
+
...(result.exports && result.exports.checks.length > 0 ? { exports: result.exports } : {}),
|
|
92
93
|
attestations: {
|
|
93
94
|
records: result.attestations.records,
|
|
94
95
|
counts: result.attestations.counts,
|
|
@@ -104,6 +105,8 @@ export function buildJsonReport(result) {
|
|
|
104
105
|
segments: result.temporal.segments,
|
|
105
106
|
verifiedAnchorProofHashes: result.temporal.verifiedAnchorProofHashes,
|
|
106
107
|
unverifiedAnchorProofHashes: result.temporal.unverifiedAnchorProofHashes,
|
|
108
|
+
...(result.temporal.signedFloors !== undefined ? { signedFloors: result.temporal.signedFloors } : {}),
|
|
109
|
+
...(result.temporal.floorProblems !== undefined ? { floorProblems: result.temporal.floorProblems } : {}),
|
|
107
110
|
},
|
|
108
111
|
summary,
|
|
109
112
|
};
|
|
@@ -248,9 +251,13 @@ function buildSummary(result, partitions, anomalies) {
|
|
|
248
251
|
if (proof.measurement !== undefined)
|
|
249
252
|
measurements.add(proof.measurement);
|
|
250
253
|
}
|
|
254
|
+
const floors = result.temporal.signedFloors ?? [];
|
|
255
|
+
const floorProblems = result.temporal.floorProblems ?? [];
|
|
251
256
|
const segmentCount = (status) => result.temporal.segments.filter((s) => s.status === status).length;
|
|
252
257
|
const partitionsIntact = partitions.filter((p) => p.intact).length;
|
|
253
258
|
const exit = computeExitFlags(result);
|
|
259
|
+
const exportChecks = result.exports?.checks ?? [];
|
|
260
|
+
const checkedExports = exportChecks.filter((e) => e.status === "checked");
|
|
254
261
|
return {
|
|
255
262
|
proofsObserved: result.ingest.counts.observed,
|
|
256
263
|
fullyVerified: result.verification.verified,
|
|
@@ -288,7 +295,30 @@ function buildSummary(result, partitions, anomalies) {
|
|
|
288
295
|
segmentsLowerBounded: segmentCount("lower-bounded"),
|
|
289
296
|
segmentsUpperBounded: segmentCount("upper-bounded"),
|
|
290
297
|
segmentsUnanchored: segmentCount("ordered-but-unanchored"),
|
|
298
|
+
...(floors.length > 0 || floorProblems.length > 0
|
|
299
|
+
? {
|
|
300
|
+
baseFloors: {
|
|
301
|
+
signed: floors.length,
|
|
302
|
+
bounding: floors.filter((f) => f.bound === "not-before").length,
|
|
303
|
+
headersChecked: floors.filter((f) => f.header === "checked").length,
|
|
304
|
+
withheld: floors.filter((f) => f.bound === "withheld").length,
|
|
305
|
+
problems: floorProblems.length,
|
|
306
|
+
},
|
|
307
|
+
}
|
|
308
|
+
: {}),
|
|
291
309
|
},
|
|
310
|
+
...(exportChecks.length > 0
|
|
311
|
+
? {
|
|
312
|
+
exports: {
|
|
313
|
+
files: exportChecks.length,
|
|
314
|
+
verdictTrue: checkedExports.filter((e) => e.verdict === "TRUE").length,
|
|
315
|
+
verdictFalse: checkedExports.filter((e) => e.verdict === "FALSE").length,
|
|
316
|
+
verdictUndetermined: checkedExports.filter((e) => e.verdict === "UNDETERMINED").length,
|
|
317
|
+
rejected: exportChecks.length - checkedExports.length,
|
|
318
|
+
coveredFilesChecked: checkedExports.reduce((n, e) => n + e.runs.filter((r) => r.file !== null).length, 0),
|
|
319
|
+
},
|
|
320
|
+
}
|
|
321
|
+
: {}),
|
|
292
322
|
exit,
|
|
293
323
|
};
|
|
294
324
|
}
|
package/dist/report-json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-json.js","sourceRoot":"","sources":["../src/report-json.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"report-json.js","sourceRoot":"","sources":["../src/report-json.ts"],"names":[],"mappings":"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"}
|
package/dist/report-md.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-md.d.ts","sourceRoot":"","sources":["../src/report-md.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report-md.d.ts","sourceRoot":"","sources":["../src/report-md.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAGV,WAAW,EAWZ,MAAM,YAAY,CAAC;AAQpB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAW/D"}
|
package/dist/report-md.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* Long tables are capped at MAX_TABLE_ROWS rows with an explicit
|
|
20
20
|
* remainder line; the JSON report always carries the complete data.
|
|
21
21
|
*/
|
|
22
|
+
import { exportRunClaims } from "./exports.js";
|
|
22
23
|
import { buildJsonReport } from "./report-json.js";
|
|
23
24
|
const MAX_TABLE_ROWS = 200;
|
|
24
25
|
// ---------------------------------------------------------------------------
|
|
@@ -273,40 +274,72 @@ function executiveSummary(lines, report, proofByHash) {
|
|
|
273
274
|
lines.push(`- ${st.status} ${inlineCode(st.path)}: ${st.note}`);
|
|
274
275
|
lines.push("");
|
|
275
276
|
}
|
|
277
|
+
// Exports (bitgraph-export/1), only when the bundle carries any.
|
|
278
|
+
const ex = report.exports;
|
|
279
|
+
if (ex && ex.checks.length > 0) {
|
|
280
|
+
lines.push("### Exports (bitgraph-export/1)");
|
|
281
|
+
lines.push("");
|
|
282
|
+
lines.push(`${withCommas(ex.checks.length)} export ${plural(ex.checks.length, "file was", "files were")} found. ` +
|
|
283
|
+
"An export is one JSON file that, with the file it covers, checks a tree/1 BitGraph on its own: " +
|
|
284
|
+
"the signed proof and its attestation, the tree's root document, the member's path or the owner's " +
|
|
285
|
+
"whole list, and the time evidence. Each was checked with verifyExport from bitgraph-verify, once " +
|
|
286
|
+
"for every file in this bundle it covers (matched by SHA-256 to a leaf's committed bytes or to its " +
|
|
287
|
+
"original), or once without a file when the bundle holds none. A claim the export does not carry, " +
|
|
288
|
+
"or one about a file that is not here, reads NOT_CARRIED and is never a failure. Any FALSE claim " +
|
|
289
|
+
"fails the audit (exit bit 1), as a bad proof does; the attestation claims count, because an export " +
|
|
290
|
+
"is checked as one self-contained object.");
|
|
291
|
+
lines.push("");
|
|
292
|
+
for (const e of ex.checks)
|
|
293
|
+
lines.push(`- ${exportSummaryLine(e)}`);
|
|
294
|
+
lines.push("");
|
|
295
|
+
lines.push("Each export's claims, the files it covers and its three time claims (the floor, the ceiling on " +
|
|
296
|
+
"Base, the ceiling on Ethereum, stated separately and never merged) are in the details below.");
|
|
297
|
+
lines.push("");
|
|
298
|
+
}
|
|
276
299
|
// External time evidence.
|
|
277
300
|
lines.push("### External time evidence");
|
|
278
301
|
lines.push("");
|
|
279
302
|
const t = s.temporal;
|
|
280
|
-
|
|
303
|
+
const bf = t.baseFloors;
|
|
304
|
+
if (t.anchorsIdentified === 0 && bf === undefined) {
|
|
281
305
|
lines.push("No Ethereum anchor proofs were observed. The causal order of the " +
|
|
282
306
|
"proofs stands on its own; this report makes no wall-clock claims.");
|
|
283
307
|
lines.push("");
|
|
284
308
|
}
|
|
285
309
|
else {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
"
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
+
if (t.anchorsIdentified > 0) {
|
|
311
|
+
lines.push(`${withCommas(t.anchorsIdentified)} Ethereum anchor ${plural(t.anchorsIdentified, "proof was", "proofs were")} ` +
|
|
312
|
+
"identified. An anchor is an ordinary chain member that committed " +
|
|
313
|
+
"the fingerprint of a public Ethereum block, giving the chain a " +
|
|
314
|
+
"contact point with a public timeline. " +
|
|
315
|
+
`${withCommas(t.anchorsWithVerifiedWitness)} ${plural(t.anchorsWithVerifiedWitness, "anchor", "anchors")} ` +
|
|
316
|
+
"came with witness material (the block header) that let this tool " +
|
|
317
|
+
"reconstruct the block fingerprint locally and confirm it against " +
|
|
318
|
+
"the signed anchor, entirely offline.");
|
|
319
|
+
lines.push("");
|
|
320
|
+
lines.push("A verified anchor bounds time in one direction at a time. Proofs " +
|
|
321
|
+
"that come after an anchor in the chain were committed no earlier " +
|
|
322
|
+
"than that block's timestamp, because the block's fingerprint " +
|
|
323
|
+
"could not have been known before the block existed. That lower " +
|
|
324
|
+
"bound additionally assumes the anchored header is a genuine, " +
|
|
325
|
+
"publicly published Ethereum block: this offline audit checks the " +
|
|
326
|
+
"header's structure and hash binding, not proof-of-work, " +
|
|
327
|
+
"consensus, or chain membership, so it cannot confirm the block " +
|
|
328
|
+
"is real. Proofs that come before an anchor existed before the " +
|
|
329
|
+
"commit that consumed the block; reading that as a wall-clock " +
|
|
330
|
+
"ceiling additionally assumes the anchor consumed a recently " +
|
|
331
|
+
"published block. Every such bound in this report states its " +
|
|
332
|
+
"assumption. No individual proof's exact creation time is ever " +
|
|
333
|
+
"stated.");
|
|
334
|
+
lines.push("");
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
lines.push("No Ethereum anchor proofs were observed. After the cutover to Base floors (enclave v10) there " +
|
|
338
|
+
"are none: order after a record is the chain of proof hashes.");
|
|
339
|
+
lines.push("");
|
|
340
|
+
}
|
|
341
|
+
if (bf !== undefined)
|
|
342
|
+
baseFloorSummary(lines, report);
|
|
310
343
|
lines.push(...table(["Temporal coverage", "Segments"], [
|
|
311
344
|
["Lower-bounded, with a following anchor (its block time is an assumption, not an upper bound)", withCommas(t.segmentsWithFollowingAnchor)],
|
|
312
345
|
["Lower-bounded only (committed no earlier than a block time)", withCommas(t.segmentsLowerBounded)],
|
|
@@ -316,6 +349,44 @@ function executiveSummary(lines, report, proofByHash) {
|
|
|
316
349
|
lines.push("");
|
|
317
350
|
}
|
|
318
351
|
}
|
|
352
|
+
/** The executive summary's paragraph on Base floors (enclave v10). Only written when a proof signs one or a floor problem was found. */
|
|
353
|
+
function baseFloorSummary(lines, report) {
|
|
354
|
+
const bf = report.summary.temporal.baseFloors;
|
|
355
|
+
if (bf === undefined)
|
|
356
|
+
return;
|
|
357
|
+
if (bf.signed > 0) {
|
|
358
|
+
const rest = bf.signed - bf.headersChecked;
|
|
359
|
+
lines.push(`${withCommas(bf.signed)} ${plural(bf.signed, "proof signs", "proofs sign")} a Base block as ` +
|
|
360
|
+
`${plural(bf.signed, "its", "their")} floor (commit.slotFloor, enclave v10). A proof that signs a floor was ` +
|
|
361
|
+
"committed no earlier than that block's time: the block's hash could not exist before the block, and the " +
|
|
362
|
+
"proof signs it. Proofs after it in the chain carry the same bound. A floor is a lower bound only: it " +
|
|
363
|
+
"bounds nothing from above, and it orders no epoch. " +
|
|
364
|
+
`${withCommas(bf.headersChecked)} of ${withCommas(bf.signed)} came with the block's header, checked against ` +
|
|
365
|
+
"the signed hash, number and time" +
|
|
366
|
+
(rest > 0
|
|
367
|
+
? `; for the other ${withCommas(rest)} the time is the one the proof signs, on Base mainnet's schedule for ` +
|
|
368
|
+
"that block, and confirming the block needs a Base lookup. "
|
|
369
|
+
: ". ") +
|
|
370
|
+
"Like an anchored block, a floor additionally assumes the block is a genuine, publicly published Base " +
|
|
371
|
+
"block, which this offline audit cannot confirm." +
|
|
372
|
+
(bf.withheld > 0
|
|
373
|
+
? ` ${withCommas(bf.withheld)} ${plural(bf.withheld, "floor is", "floors are")} not used as a bound; ` +
|
|
374
|
+
"the reasons are in the temporal bounds section."
|
|
375
|
+
: ""));
|
|
376
|
+
lines.push("");
|
|
377
|
+
}
|
|
378
|
+
const problems = report.temporal.floorProblems ?? [];
|
|
379
|
+
if (problems.length > 0) {
|
|
380
|
+
lines.push(`${withCommas(problems.length)} floor ${plural(problems.length, "problem was", "problems were")} found ` +
|
|
381
|
+
"(exit bit 2). A floor with a problem bounds nothing:");
|
|
382
|
+
lines.push("");
|
|
383
|
+
for (const p of problems.slice(0, MAX_TABLE_ROWS)) {
|
|
384
|
+
lines.push(`- ${inlineCode(p.code)}${p.path !== undefined ? ` ${inlineCode(p.path)}` : ""}` +
|
|
385
|
+
`${p.proofHash !== undefined ? `, proof ${inlineCode(p.proofHash)}` : ""}: ${p.message}`);
|
|
386
|
+
}
|
|
387
|
+
lines.push("");
|
|
388
|
+
}
|
|
389
|
+
}
|
|
319
390
|
/** Plain sentences describing one partition's chain state, in the brief's style. */
|
|
320
391
|
function partitionSummarySentences(report, partition) {
|
|
321
392
|
const out = [];
|
|
@@ -404,6 +475,7 @@ function detailSections(lines, report, proofByHash) {
|
|
|
404
475
|
anchorDetails(lines, report);
|
|
405
476
|
witnessDetails(lines, report);
|
|
406
477
|
temporalDetails(lines, report);
|
|
478
|
+
exportDetails(lines, report);
|
|
407
479
|
attestationDetails(lines, report);
|
|
408
480
|
unsupportedVersionDetails(lines, report);
|
|
409
481
|
manifestDetails(lines, report);
|
|
@@ -642,6 +714,20 @@ function temporalDetails(lines, report) {
|
|
|
642
714
|
}
|
|
643
715
|
lines.push("");
|
|
644
716
|
}
|
|
717
|
+
const floors = report.temporal.signedFloors ?? [];
|
|
718
|
+
if (floors.length > 0) {
|
|
719
|
+
lines.push("Base floors the proofs sign (enclave v10), each a not-before for its proof and never an upper bound:");
|
|
720
|
+
lines.push("");
|
|
721
|
+
for (const f of floors.slice(0, MAX_TABLE_ROWS)) {
|
|
722
|
+
lines.push(`- Base block ${withCommas(f.blockNumber)} (${formatTimestamp(f.blockTimestamp)}, hash ${inlineCode(f.blockHash)}), ` +
|
|
723
|
+
`signed by ${inlineCode(f.proofHash)}: ` +
|
|
724
|
+
(f.header === "checked"
|
|
725
|
+
? `header checked (${inlineCode(f.headerPath ?? "")})`
|
|
726
|
+
: "no header in the bundle; confirming the block needs a Base lookup") +
|
|
727
|
+
(f.bound === "not-before" ? "; bounds the proof not before that time." : `; not used as a bound: ${f.withheldReason ?? "withheld"}.`));
|
|
728
|
+
}
|
|
729
|
+
lines.push("");
|
|
730
|
+
}
|
|
645
731
|
if (report.epochRelationships.anchorOrderedPairs.length > 0) {
|
|
646
732
|
lines.push("Anchor-derived epoch ordering (assumption-dependent, covered portions only):");
|
|
647
733
|
lines.push("");
|
|
@@ -657,6 +743,11 @@ function temporalDetails(lines, report) {
|
|
|
657
743
|
}
|
|
658
744
|
}
|
|
659
745
|
function boundLine(bound) {
|
|
746
|
+
if (bound.source === "signed-floor") {
|
|
747
|
+
return (`Committed no earlier than ${formatTimestamp(bound.timestamp)} ` +
|
|
748
|
+
`(Base block ${bound.blockNumber ?? "?"}, the floor signed by ${inlineCode(bound.anchorProofHash)}, ` +
|
|
749
|
+
`evidence: ${bound.evidence}${bound.weaker ? ", weaker" : ""}). ${bound.claim}`);
|
|
750
|
+
}
|
|
660
751
|
const direction = bound.kind === "not-before"
|
|
661
752
|
? "Committed no earlier than"
|
|
662
753
|
: "Precedes an anchor commit that consumed a block published at (ASSUMPTION, not a proof-carried upper bound)";
|
|
@@ -664,6 +755,199 @@ function boundLine(bound) {
|
|
|
664
755
|
`(block ${bound.blockNumber ?? "?"}, anchor ${inlineCode(bound.anchorProofHash)}, ` +
|
|
665
756
|
`evidence: ${bound.evidence}${bound.weaker ? ", weaker" : ""}). ${bound.claim}`);
|
|
666
757
|
}
|
|
758
|
+
// ---------------------------------------------------------------------------
|
|
759
|
+
// Exports (bitgraph-export/1)
|
|
760
|
+
// ---------------------------------------------------------------------------
|
|
761
|
+
/** One summary line for an export: its verdict, path, kind and covered files. */
|
|
762
|
+
function exportSummaryLine(e) {
|
|
763
|
+
if (e.status === "malformed") {
|
|
764
|
+
// It says bitgraph-export/1 and is not one: a failed check, not an unknown format.
|
|
765
|
+
return `FALSE ${inlineCode(e.path)}: malformed, ${e.reason ?? e.status}. Fails the audit (exit bit 1).`;
|
|
766
|
+
}
|
|
767
|
+
if (e.status !== "checked") {
|
|
768
|
+
return `NOT CHECKED ${inlineCode(e.path)}: ${e.reason ?? e.status}. Fails the audit (exit bit 1).`;
|
|
769
|
+
}
|
|
770
|
+
const withFile = e.runs.filter((r) => r.file !== null).length;
|
|
771
|
+
const covered = e.files.length === 0
|
|
772
|
+
? "no covered file in this bundle (checked without one)"
|
|
773
|
+
: `${withCommas(e.files.length)} covered ${plural(e.files.length, "file", "files")} in this bundle` +
|
|
774
|
+
(withFile < e.files.length ? `, ${withCommas(withFile)} checked one by one` : "");
|
|
775
|
+
const failed = e.failedClaims.length > 0 ? ` FALSE claims: ${e.failedClaims.map(inlineCode).join(", ")}.` : "";
|
|
776
|
+
return `${e.verdict} ${inlineCode(e.path)}: ${exportKindPhrase(e)}; ${covered}.${failed}`;
|
|
777
|
+
}
|
|
778
|
+
function exportKindPhrase(e) {
|
|
779
|
+
const count = exportLeafCount(e);
|
|
780
|
+
const tree = count !== null ? ` of a tree of ${withCommas(count)} ${plural(count, "leaf", "leaves")}` : "";
|
|
781
|
+
if (e.kind === "member")
|
|
782
|
+
return `member export${tree}`;
|
|
783
|
+
if (e.kind === "owner")
|
|
784
|
+
return `the owner's export (the whole list)${tree}`;
|
|
785
|
+
return `an export with neither member evidence nor the owner's list${tree}`;
|
|
786
|
+
}
|
|
787
|
+
/** The tree size the export's runs established (from the member, else from tree.root's detail). */
|
|
788
|
+
function exportLeafCount(e) {
|
|
789
|
+
for (const r of e.runs)
|
|
790
|
+
if (r.member !== null)
|
|
791
|
+
return r.member.count;
|
|
792
|
+
for (const c of [...e.claims, ...e.runs.flatMap((r) => r.claims)]) {
|
|
793
|
+
const m = c.id === "tree.root" && c.result === "TRUE" ? /a tree of (\d+) leaves/.exec(c.detail) : null;
|
|
794
|
+
if (m)
|
|
795
|
+
return Number(m[1]);
|
|
796
|
+
}
|
|
797
|
+
return null;
|
|
798
|
+
}
|
|
799
|
+
function exportFileLabel(f) {
|
|
800
|
+
return f.paths.map(inlineCode).join(", ");
|
|
801
|
+
}
|
|
802
|
+
function exportDetails(lines, report) {
|
|
803
|
+
const ex = report.exports;
|
|
804
|
+
if (ex === undefined || ex.checks.length === 0)
|
|
805
|
+
return;
|
|
806
|
+
lines.push("### Exports (bitgraph-export/1)");
|
|
807
|
+
lines.push("");
|
|
808
|
+
lines.push("Each export below was checked with verifyExport from bitgraph-verify. Every claim is TRUE, FALSE, " +
|
|
809
|
+
"UNDETERMINED or NOT_CARRIED, with what it rests on, exactly as the verifier states it. Offline claims " +
|
|
810
|
+
"take block headers as the ones matching their hashes; whether each block is its chain's own is a " +
|
|
811
|
+
"confirmed claim, which this audit never looks up (it makes no network call), so those read " +
|
|
812
|
+
"UNDETERMINED (not checked). The proof inside an export is also in the proof analysis above under its " +
|
|
813
|
+
"canonical hash, where it counts as observed without artifact bytes: its artifact is the tree's " +
|
|
814
|
+
"84-byte root document, which travels inside the export and is checked here (claim tree.root).");
|
|
815
|
+
lines.push("");
|
|
816
|
+
for (const e of ex.checks)
|
|
817
|
+
exportDetail(lines, e);
|
|
818
|
+
}
|
|
819
|
+
function exportDetail(lines, e) {
|
|
820
|
+
lines.push(`#### Export ${inlineCode(e.path)}: ${e.status === "checked" ? e.verdict : e.status === "malformed" ? "FALSE (malformed)" : "NOT CHECKED"}`);
|
|
821
|
+
lines.push("");
|
|
822
|
+
if (e.status !== "checked") {
|
|
823
|
+
lines.push(`Rejected at ingest: ${e.reason ?? e.status}. The file is not checked and is never treated as an ` +
|
|
824
|
+
"artifact; it fails the audit (exit bit 1), as an unsupported proof version does.");
|
|
825
|
+
lines.push("");
|
|
826
|
+
return;
|
|
827
|
+
}
|
|
828
|
+
const facts = [`${exportKindPhrase(e).replace(/^./, (c) => c.toUpperCase())}.`];
|
|
829
|
+
if (e.proofHash !== undefined)
|
|
830
|
+
facts.push(`Proof ${inlineCode(e.proofHash)}.`);
|
|
831
|
+
if (e.failedClaims.length > 0)
|
|
832
|
+
facts.push(`FALSE claims: ${e.failedClaims.map(inlineCode).join(", ")}.`);
|
|
833
|
+
lines.push(facts.join(" "));
|
|
834
|
+
lines.push("");
|
|
835
|
+
// The files it covers.
|
|
836
|
+
if (e.files.length === 0) {
|
|
837
|
+
lines.push("No file in this bundle is covered by this export, so it was checked once without a file: the claims " +
|
|
838
|
+
"about the file read NOT_CARRIED, which is not a failure.");
|
|
839
|
+
lines.push("");
|
|
840
|
+
}
|
|
841
|
+
else {
|
|
842
|
+
lines.push("Covered files in this bundle (matched by SHA-256):");
|
|
843
|
+
lines.push("");
|
|
844
|
+
lines.push(...table(["File", "SHA-256", "Leaf", "Placement", "Matched as", "Name in the export (unsigned)"], e.files.slice(0, MAX_TABLE_ROWS).map((f) => [
|
|
845
|
+
exportFileLabel(f),
|
|
846
|
+
inlineCode(f.sha256Hex),
|
|
847
|
+
f.leafIndex !== null ? String(f.leafIndex) : "",
|
|
848
|
+
f.placement ?? "",
|
|
849
|
+
f.matchedAs === "committed-bytes" ? "committed bytes" : f.matchedAs === "original" ? "original" : "as is",
|
|
850
|
+
f.nameInExport ?? "",
|
|
851
|
+
])));
|
|
852
|
+
if (e.files.length > MAX_TABLE_ROWS)
|
|
853
|
+
lines.push("", `${withCommas(e.files.length - MAX_TABLE_ROWS)} more in the JSON report.`);
|
|
854
|
+
lines.push("");
|
|
855
|
+
if (e.runMode === "member-from-list") {
|
|
856
|
+
lines.push("The owner's list was checked once (claim tree.leaves); each file's member evidence was then derived " +
|
|
857
|
+
"from it exactly as verifyExport derives it, and verifyExport ran once per file with that evidence.");
|
|
858
|
+
lines.push("");
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
for (const u of e.unchecked ?? [])
|
|
862
|
+
lines.push(`- ${exportFileLabel(u.file)}: ${u.reason}.`);
|
|
863
|
+
if ((e.unchecked ?? []).length > 0)
|
|
864
|
+
lines.push("");
|
|
865
|
+
// The three time claims, each on its own evidence, never merged.
|
|
866
|
+
const firstClaims = exportRunClaims(e, e.runs[0]);
|
|
867
|
+
const why = (id) => {
|
|
868
|
+
const c = firstClaims.find((x) => x.id === id);
|
|
869
|
+
return c ? `${inlineCode(id)} ${c.result}: ${c.detail}` : `${inlineCode(id)} was not reached`;
|
|
870
|
+
};
|
|
871
|
+
// Whether a block is its chain's own: the confirmed claim, which only an embedder's lookup answers.
|
|
872
|
+
const confirmedNote = (id, chain) => {
|
|
873
|
+
const c = firstClaims.find((x) => x.id === id);
|
|
874
|
+
if (c === undefined || c.result === "UNDETERMINED")
|
|
875
|
+
return ` Whether the block is ${chain}'s own is a confirmed claim, not looked up here.`;
|
|
876
|
+
return c.result === "TRUE"
|
|
877
|
+
? ` The caller's own lookup confirms the block is ${chain}'s (${inlineCode(id)} TRUE).`
|
|
878
|
+
: ` The caller's own lookup says the block is NOT ${chain}'s (${inlineCode(id)} ${c.result}: ${c.detail}).`;
|
|
879
|
+
};
|
|
880
|
+
lines.push("Time claims, each on its own evidence and never merged:");
|
|
881
|
+
lines.push("");
|
|
882
|
+
const t = e.times;
|
|
883
|
+
lines.push(t.floor !== null
|
|
884
|
+
? `- Floor: ${t.floor.chain === "base" ? "Base" : "Ethereum"} block ${withCommas(t.floor.blockNumber)}, ` +
|
|
885
|
+
`${t.floor.chain === "base" ? "stamped" : "mined"} at ${formatTimestamp(t.floor.blockTimestamp)}, ` +
|
|
886
|
+
`hash ${inlineCode(t.floor.blockHash)}: the proof's signed floor block, its header checked by hash. ` +
|
|
887
|
+
"Every file in the tree was recorded after it (the record floor). Committed bytes that carry this position's " +
|
|
888
|
+
"commitment were also finished after it (the content floor); an original inside them, and a file recorded as is, " +
|
|
889
|
+
"are not dated by it. What the floor covers for each file is stated per run below." +
|
|
890
|
+
confirmedNote("confirmed.floor", t.floor.chain === "base" ? "Base" : "Ethereum")
|
|
891
|
+
: `- Floor: not established (${why("floor.header")}).`);
|
|
892
|
+
lines.push(t.ceilingBase !== null
|
|
893
|
+
? `- Ceiling on Base: the record existed by Base block ${withCommas(t.ceilingBase.blockNumber)}, at ` +
|
|
894
|
+
`${formatTimestamp(t.ceilingBase.blockTimestamp)}, hash ${inlineCode(t.ceilingBase.blockHash)}. ` +
|
|
895
|
+
(!t.ceilingBase.provisional
|
|
896
|
+
? "The caller's own lookup confirmed the block against Base, so the time is no longer provisional."
|
|
897
|
+
: firstClaims.some((x) => x.id === "confirmed.ceiling.base" && x.result === "FALSE")
|
|
898
|
+
? `PROVISIONAL, and the caller's own lookup says the block is NOT Base's (${inlineCode("confirmed.ceiling.base")} FALSE).`
|
|
899
|
+
: "PROVISIONAL: this time holds once the block is checked against Base, which this offline audit does not do.")
|
|
900
|
+
: `- Ceiling on Base: not established (${why("ceiling.base")}).`);
|
|
901
|
+
lines.push(t.ceilingEthereum !== null
|
|
902
|
+
? `- Ceiling on Ethereum: the record existed by Ethereum block ${withCommas(t.ceilingEthereum.blockNumber)}, at ` +
|
|
903
|
+
`${formatTimestamp(t.ceilingEthereum.blockTimestamp)}, hash ${inlineCode(t.ceilingEthereum.blockHash)}, ` +
|
|
904
|
+
"through Base's output root, whatever Base's claim turns out to be." +
|
|
905
|
+
confirmedNote("confirmed.ceiling.ethereum", "Ethereum")
|
|
906
|
+
: `- Ceiling on Ethereum: not established (${why("ceiling.ethereum")}).`);
|
|
907
|
+
lines.push("");
|
|
908
|
+
// Claims: the ones every run states alike once, then each run's own (the ones about its file).
|
|
909
|
+
lines.push(e.runs.length > 1 ? "Claims, the same in every run:" : "Claims:");
|
|
910
|
+
lines.push("");
|
|
911
|
+
lines.push(...table(["Claim", "Result", "Level", "Rests on", "Detail"], e.claims.map((c) => claimRow(c))));
|
|
912
|
+
lines.push("");
|
|
913
|
+
const perFile = [];
|
|
914
|
+
let perFileTotal = 0;
|
|
915
|
+
for (const r of e.runs) {
|
|
916
|
+
for (const c of r.claims) {
|
|
917
|
+
perFileTotal++;
|
|
918
|
+
if (perFile.length < MAX_TABLE_ROWS)
|
|
919
|
+
perFile.push([r.file !== null ? exportFileLabel(r.file) : "(no file)", ...claimRow(c)]);
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
if (perFileTotal > 0) {
|
|
923
|
+
lines.push("Claims that differ by file:");
|
|
924
|
+
lines.push("");
|
|
925
|
+
lines.push(...table(["File", "Claim", "Result", "Level", "Rests on", "Detail"], perFile));
|
|
926
|
+
if (perFileTotal > MAX_TABLE_ROWS)
|
|
927
|
+
lines.push("", `${withCommas(perFileTotal - MAX_TABLE_ROWS)} more rows in the JSON report.`);
|
|
928
|
+
lines.push("");
|
|
929
|
+
}
|
|
930
|
+
// Per run: the verdict, what the floor covers, and the verifier's own reading.
|
|
931
|
+
lines.push(e.runs.length > 1 ? "Runs:" : "Run:");
|
|
932
|
+
lines.push("");
|
|
933
|
+
for (const r of e.runs.slice(0, MAX_TABLE_ROWS))
|
|
934
|
+
lines.push(`- ${exportRunLine(r)}`);
|
|
935
|
+
if (e.runs.length > MAX_TABLE_ROWS)
|
|
936
|
+
lines.push(`- ${withCommas(e.runs.length - MAX_TABLE_ROWS)} more runs in the JSON report.`);
|
|
937
|
+
lines.push("");
|
|
938
|
+
}
|
|
939
|
+
function claimRow(c) {
|
|
940
|
+
return [inlineCode(c.id), c.result, c.level, c.restsOn, c.detail];
|
|
941
|
+
}
|
|
942
|
+
function exportRunLine(r) {
|
|
943
|
+
const who = r.file !== null ? exportFileLabel(r.file) : "Without a file";
|
|
944
|
+
const floor = r.floorCovers === "content"
|
|
945
|
+
? " Recorded after the floor block, and its committed bytes were finished after it; an original inside them is not dated by it."
|
|
946
|
+
: r.floorCovers === "record"
|
|
947
|
+
? " Recorded as is: recorded after the floor block; the bytes themselves are not dated."
|
|
948
|
+
: "";
|
|
949
|
+
return `${who}: ${r.verdict}.${floor} Reading: ${r.reading.length > 0 ? r.reading : "(none)"}`;
|
|
950
|
+
}
|
|
667
951
|
function attestationDetails(lines, report) {
|
|
668
952
|
lines.push("### Attestation breakdown");
|
|
669
953
|
lines.push("");
|
|
@@ -844,6 +1128,12 @@ function codeMeaning(code) {
|
|
|
844
1128
|
return "A validated attestation document's measurement does not equal the measurement the proof declares.";
|
|
845
1129
|
case "attestation-user-data-mismatch":
|
|
846
1130
|
return "A validated attestation document is not bound to the specific proof that carries it.";
|
|
1131
|
+
case "export-malformed":
|
|
1132
|
+
return "A file declares the bitgraph-export/1 format but lacks an export's structure (a proof and the tree's root document). It was not checked, and it fails the audit.";
|
|
1133
|
+
case "export-unsupported-format":
|
|
1134
|
+
return "A file declares a bitgraph-export format this audit does not support (only bitgraph-export/1). It was not checked, and it fails the audit.";
|
|
1135
|
+
case "export-too-large":
|
|
1136
|
+
return "A file opens an export but is larger than this audit reads for one export. It was not checked, and it fails the audit.";
|
|
847
1137
|
default:
|
|
848
1138
|
return "See the anomaly details section.";
|
|
849
1139
|
}
|