@mikeargento/bitgraph-audit 0.6.4 → 0.8.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/dist/audit.d.ts +1 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +9 -2
- package/dist/audit.js.map +1 -1
- package/dist/ceilings.d.ts +41 -0
- package/dist/ceilings.d.ts.map +1 -0
- package/dist/ceilings.js +198 -0
- package/dist/ceilings.js.map +1 -0
- package/dist/cli.js +48 -4
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest.d.ts.map +1 -1
- package/dist/ingest.js +17 -0
- package/dist/ingest.js.map +1 -1
- package/dist/report-json.d.ts.map +1 -1
- package/dist/report-json.js +3 -0
- package/dist/report-json.js.map +1 -1
- package/dist/report-md.js +24 -0
- package/dist/report-md.js.map +1 -1
- package/dist/settlement-blobs.d.ts +131 -0
- package/dist/settlement-blobs.d.ts.map +1 -0
- package/dist/settlement-blobs.js +682 -0
- package/dist/settlement-blobs.js.map +1 -0
- package/dist/types.d.ts +96 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -3
- package/src/__tests__/fixtures/settlement/0x018efc046e94610e2530344caf1574e507a3182e1a975fb25b032ec1434a3f5c.bin +0 -0
- package/src/__tests__/fixtures/settlement/ceiling-51979918.json +101 -0
- package/src/__tests__/fixtures/settlement/pointer-51979918.json +69 -0
- package/src/__tests__/settlement.test.ts +254 -0
- package/src/audit.ts +8 -1
- package/src/ceilings.ts +219 -0
- package/src/cli.ts +47 -7
- package/src/index.ts +6 -0
- package/src/ingest.ts +19 -0
- package/src/report-json.ts +3 -0
- package/src/report-md.ts +22 -0
- package/src/settlement-blobs.ts +689 -0
- package/src/types.ts +85 -0
package/dist/audit.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { AuditOptions, AuditResult, ExitFlags, IngestResult } from "./types
|
|
|
8
8
|
* this equals package.json's version, so the constant cannot drift silently
|
|
9
9
|
* across releases.
|
|
10
10
|
*/
|
|
11
|
-
export declare const AUDIT_VERSION = "0.
|
|
11
|
+
export declare const AUDIT_VERSION = "0.8.0";
|
|
12
12
|
/** The audit package's own version. */
|
|
13
13
|
export declare function auditToolVersion(): string;
|
|
14
14
|
/** Options for auditIngest(): the audit options plus the run stamp. */
|
package/dist/audit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC,uCAAuC;AACvC,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,uEAAuE;AACvE,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CA2CtB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAG/F;AAuBD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAoB/D"}
|
package/dist/audit.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*
|
|
16
16
|
* Zero network access, as everywhere in this package.
|
|
17
17
|
*/
|
|
18
|
+
import { verifyCeilings } from "./ceilings.js";
|
|
18
19
|
import { ingestBundle } from "./ingest.js";
|
|
19
20
|
import { verifyObservedProofs } from "./verify-tiers.js";
|
|
20
21
|
import { reconstructChains } from "./reconstruct.js";
|
|
@@ -33,7 +34,7 @@ import { validateAttestations } from "./attestation.js";
|
|
|
33
34
|
* this equals package.json's version, so the constant cannot drift silently
|
|
34
35
|
* across releases.
|
|
35
36
|
*/
|
|
36
|
-
export const AUDIT_VERSION = "0.
|
|
37
|
+
export const AUDIT_VERSION = "0.8.0";
|
|
37
38
|
/** The audit package's own version. */
|
|
38
39
|
export function auditToolVersion() {
|
|
39
40
|
return AUDIT_VERSION;
|
|
@@ -57,6 +58,7 @@ export async function auditIngest(ingest, options) {
|
|
|
57
58
|
const witnesses = await verifyAnchorWitnesses(ingest, anchors);
|
|
58
59
|
// Populates EpochRecord.anchorBounds on the reconstruction result.
|
|
59
60
|
const temporal = deriveTemporalBounds(ingest, reconstruction, anchors, witnesses);
|
|
61
|
+
const ceilings = await verifyCeilings(ingest, options?.ceilings ?? {});
|
|
60
62
|
const attestations = await validateAttestations(ingest, authorities, options?.trustedRootCaDer !== undefined
|
|
61
63
|
? { trustedRootCaDer: options.trustedRootCaDer }
|
|
62
64
|
: undefined);
|
|
@@ -76,6 +78,7 @@ export async function auditIngest(ingest, options) {
|
|
|
76
78
|
witnesses,
|
|
77
79
|
temporal,
|
|
78
80
|
attestations,
|
|
81
|
+
ceilings,
|
|
79
82
|
};
|
|
80
83
|
}
|
|
81
84
|
/**
|
|
@@ -118,7 +121,11 @@ const WITNESS_VERIFICATION_FAILURE_CODES = new Set([
|
|
|
118
121
|
export function computeExitFlags(result) {
|
|
119
122
|
const verificationFailures = result.verification.failed > 0 || result.ingest.counts.unsupportedVersion > 0;
|
|
120
123
|
const witnessVerificationFailures = result.witnesses.findings.some((f) => WITNESS_VERIFICATION_FAILURE_CODES.has(f.code));
|
|
121
|
-
|
|
124
|
+
// A ceiling file that is present and wrong is failed evidence, like a bad
|
|
125
|
+
// witness: bit 2. Pending, unmatched and status notes are reported, never bits.
|
|
126
|
+
const ceilingFailures = (result.ceilings?.checks ?? []).some((c) => c.status === "failed");
|
|
127
|
+
const chainAnomaliesOrDivergences = ceilingFailures ||
|
|
128
|
+
result.anomalies.anomalies.length > 0 ||
|
|
122
129
|
result.anomalies.divergences.length > 0 ||
|
|
123
130
|
result.authorities.anomalies.length > 0 ||
|
|
124
131
|
witnessVerificationFailures;
|
package/dist/audit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC,uCAAuC;AACvC,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC;AACvB,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAoB,EACpB,OAA4B;IAE5B,yEAAyE;IACzE,8CAA8C;IAC9C,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEjE,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAC7C,MAAM,EACN,OAAO,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CACzF,CAAC;IACF,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,mEAAmE;IACnE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAC7C,MAAM,EACN,WAAW,EACX,OAAO,EAAE,gBAAgB,KAAK,SAAS;QACrC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE;QAChD,CAAC,CAAC,SAAS,CACd,CAAC;IAEF,OAAO;QACL,WAAW,EAAE;YACX,WAAW,EAAE,gBAAgB,EAAE;YAC/B,SAAS;YACT,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B;QACD,MAAM;QACN,YAAY;QACZ,cAAc;QACd,SAAS;QACT,WAAW;QACX,OAAO;QACP,SAAS;QACT,QAAQ;QACR,YAAY;
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ceilings in time (bitgraph-ceiling/1): each ceiling file in the bundle is
|
|
3
|
+
* matched to its proof by proofHash and checked with verifyCeiling, offline.
|
|
4
|
+
* The one thing offline cannot say is whether the carried Base header is on
|
|
5
|
+
* Base's chain. The audit reports that as unchecked; `bitgraph ceiling
|
|
6
|
+
* verify --rpc` or any Base explorer answers it.
|
|
7
|
+
*
|
|
8
|
+
* The writer address is a trust input, like a measurement allowlist: the
|
|
9
|
+
* default is the address BitGraph publishes, and a reader can pass another.
|
|
10
|
+
*
|
|
11
|
+
* A ceiling file may carry its SETTLEMENT on Ethereum (bitgraph-settlement/1,
|
|
12
|
+
* the `settlement` field): the batcher transaction whose blobs hold the Base
|
|
13
|
+
* block. Two layers, both offline, reported as separate lines: the POINTER
|
|
14
|
+
* (verifySettlementPointer, against the Base mainnet pins or ones the reader
|
|
15
|
+
* passes) and the BLOBS (blob bytes kept in the bundle next to the ceiling
|
|
16
|
+
* file or under a `blobs/` folder, verified against the listed KZG
|
|
17
|
+
* commitments and decoded down to the ceiling transaction). Blob bytes
|
|
18
|
+
* absent from the bundle are reported, never a failure; a pointer or blob
|
|
19
|
+
* that is present and wrong fails the ceiling like any other bad evidence.
|
|
20
|
+
* The settlement is checked whether or not the ceiling's proof is in the
|
|
21
|
+
* bundle: it is evidence about the ceiling file itself.
|
|
22
|
+
*/
|
|
23
|
+
import { type SettlementPins } from "@mikeargento/bitgraph-verify";
|
|
24
|
+
import type { CeilingAnalysis, IngestResult } from "./types.js";
|
|
25
|
+
/** BitGraph's published ceiling writer on Base mainnet (bitgraph.ing/ceilings). */
|
|
26
|
+
export declare const BITGRAPH_CEILING_WRITER = "0xf3972408D853c975F86351C311f4310220bbF2a3";
|
|
27
|
+
export declare const BASE_MAINNET_CHAIN_ID = 8453;
|
|
28
|
+
export interface CeilingAuditOptions {
|
|
29
|
+
writer?: string;
|
|
30
|
+
chainId?: number;
|
|
31
|
+
/**
|
|
32
|
+
* The one online question, supplied by an embedder that allows network:
|
|
33
|
+
* the Base chain's block hash at a height. The audit itself never makes a
|
|
34
|
+
* network call (its zero-network guarantee), so the CLI never sets this.
|
|
35
|
+
*/
|
|
36
|
+
getBlockHash?: (blockNumber: number) => Promise<string | null>;
|
|
37
|
+
/** The batch inbox and batcher a settlement pointer must name. Base mainnet's by default. */
|
|
38
|
+
settlementPins?: SettlementPins;
|
|
39
|
+
}
|
|
40
|
+
export declare function verifyCeilings(ingest: IngestResult, options?: CeilingAuditOptions): Promise<CeilingAnalysis>;
|
|
41
|
+
//# sourceMappingURL=ceilings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ceilings.d.ts","sourceRoot":"","sources":["../src/ceilings.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAEwC,KAAK,cAAc,EACjE,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EAAE,eAAe,EAAwC,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtG,mFAAmF;AACnF,eAAO,MAAM,uBAAuB,+CAA+C,CAAC;AACpF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/D,6FAA6F;IAC7F,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgEtH"}
|
package/dist/ceilings.js
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026 Argento Computing Inc. Licensed under the MIT License. See LICENSE.
|
|
2
|
+
/**
|
|
3
|
+
* Ceilings in time (bitgraph-ceiling/1): each ceiling file in the bundle is
|
|
4
|
+
* matched to its proof by proofHash and checked with verifyCeiling, offline.
|
|
5
|
+
* The one thing offline cannot say is whether the carried Base header is on
|
|
6
|
+
* Base's chain. The audit reports that as unchecked; `bitgraph ceiling
|
|
7
|
+
* verify --rpc` or any Base explorer answers it.
|
|
8
|
+
*
|
|
9
|
+
* The writer address is a trust input, like a measurement allowlist: the
|
|
10
|
+
* default is the address BitGraph publishes, and a reader can pass another.
|
|
11
|
+
*
|
|
12
|
+
* A ceiling file may carry its SETTLEMENT on Ethereum (bitgraph-settlement/1,
|
|
13
|
+
* the `settlement` field): the batcher transaction whose blobs hold the Base
|
|
14
|
+
* block. Two layers, both offline, reported as separate lines: the POINTER
|
|
15
|
+
* (verifySettlementPointer, against the Base mainnet pins or ones the reader
|
|
16
|
+
* passes) and the BLOBS (blob bytes kept in the bundle next to the ceiling
|
|
17
|
+
* file or under a `blobs/` folder, verified against the listed KZG
|
|
18
|
+
* commitments and decoded down to the ceiling transaction). Blob bytes
|
|
19
|
+
* absent from the bundle are reported, never a failure; a pointer or blob
|
|
20
|
+
* that is present and wrong fails the ceiling like any other bad evidence.
|
|
21
|
+
* The settlement is checked whether or not the ceiling's proof is in the
|
|
22
|
+
* bundle: it is evidence about the ceiling file itself.
|
|
23
|
+
*/
|
|
24
|
+
import { verifyCeiling, checkCeilingOnline, verifySettlementPointer, BASE_MAINNET_SETTLEMENT_PINS, decodeHeader, evmHexToBytes, } from "@mikeargento/bitgraph-verify";
|
|
25
|
+
import { streamArtifactsByHash } from "./ingest.js";
|
|
26
|
+
import { verifySettlementBlobs } from "./settlement-blobs.js";
|
|
27
|
+
/** BitGraph's published ceiling writer on Base mainnet (bitgraph.ing/ceilings). */
|
|
28
|
+
export const BITGRAPH_CEILING_WRITER = "0xf3972408D853c975F86351C311f4310220bbF2a3";
|
|
29
|
+
export const BASE_MAINNET_CHAIN_ID = 8453;
|
|
30
|
+
export async function verifyCeilings(ingest, options = {}) {
|
|
31
|
+
const writer = options.writer ?? BITGRAPH_CEILING_WRITER;
|
|
32
|
+
const chainId = options.chainId ?? BASE_MAINNET_CHAIN_ID;
|
|
33
|
+
const pins = options.settlementPins ?? BASE_MAINNET_SETTLEMENT_PINS;
|
|
34
|
+
const byHash = new Map(ingest.proofs.map((p) => [p.proofHash, p]));
|
|
35
|
+
const checks = [];
|
|
36
|
+
for (const f of ingest.ceilings ?? []) {
|
|
37
|
+
const side = f.json;
|
|
38
|
+
const proofHash = typeof side.proofHash === "string" ? side.proofHash : null;
|
|
39
|
+
const observed = proofHash ? byHash.get(proofHash) : undefined;
|
|
40
|
+
let check;
|
|
41
|
+
if (!observed) {
|
|
42
|
+
check = { path: f.path, proofHash, status: "unmatched", reason: "no proof in this bundle has this ceiling's proofHash", onChain: null };
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const r = await verifyCeiling(observed.proof, side, { writerAddress: writer, chainId });
|
|
46
|
+
if (!r.ok) {
|
|
47
|
+
const pending = r.status === "pending";
|
|
48
|
+
check = { path: f.path, proofHash, status: pending ? "pending" : "failed", ...(r.reason ? { reason: r.reason } : {}), onChain: null };
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const w = r.window;
|
|
52
|
+
check = {
|
|
53
|
+
path: f.path,
|
|
54
|
+
proofHash,
|
|
55
|
+
status: "verified",
|
|
56
|
+
...(r.label ? { label: r.label } : {}),
|
|
57
|
+
window: {
|
|
58
|
+
floorBlock: w.floor.blockNumber || null,
|
|
59
|
+
floorTime: w.floor.blockTimestamp,
|
|
60
|
+
ceilingChainId: w.ceiling.chainId,
|
|
61
|
+
ceilingBlock: w.ceiling.blockNumber,
|
|
62
|
+
ceilingTime: w.ceiling.blockTimestamp,
|
|
63
|
+
widthSeconds: w.widthSeconds,
|
|
64
|
+
},
|
|
65
|
+
onChain: null,
|
|
66
|
+
onChainDetail: "header not checked against chain",
|
|
67
|
+
};
|
|
68
|
+
if (options.getBlockHash) {
|
|
69
|
+
const online = await checkCeilingOnline(side, options.getBlockHash);
|
|
70
|
+
check.onChain = online.onChain;
|
|
71
|
+
check.onChainDetail = online.detail;
|
|
72
|
+
if (online.onChain === false) {
|
|
73
|
+
check.status = "failed";
|
|
74
|
+
check.reason = `chain: ${online.detail}`;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const carried = f.json["settlement"];
|
|
80
|
+
if (carried !== null && carried !== undefined) {
|
|
81
|
+
const settlement = await auditSettlement(f.path, side, carried, ingest, pins);
|
|
82
|
+
check.settlement = settlement;
|
|
83
|
+
if (settlement.status === "failed" && check.status !== "failed") {
|
|
84
|
+
check.status = "failed";
|
|
85
|
+
check.reason = settlement.lines.find((l) => l.includes("FAILED")) ?? "settlement: failed";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
checks.push(check);
|
|
89
|
+
}
|
|
90
|
+
const statuses = (ingest.ceilingStatuses ?? []).map((f) => ({
|
|
91
|
+
path: f.path,
|
|
92
|
+
status: String(f.json["status"] ?? "unknown"),
|
|
93
|
+
note: String(f.json["note"] ?? ""),
|
|
94
|
+
}));
|
|
95
|
+
return { writer, chainId, checks, statuses };
|
|
96
|
+
}
|
|
97
|
+
// ── settlement ─────────────────────────────────────────────────────────────
|
|
98
|
+
function whenUtc(unix) {
|
|
99
|
+
const iso = new Date(unix * 1000).toISOString();
|
|
100
|
+
return `${iso.slice(0, 10)} ${iso.slice(11, 19)} UTC`;
|
|
101
|
+
}
|
|
102
|
+
/** The bundle paths a blob file named `file` may sit at, next to the ceiling file first. */
|
|
103
|
+
function blobCandidatePaths(ceilingPath, file) {
|
|
104
|
+
const slash = ceilingPath.lastIndexOf("/");
|
|
105
|
+
const dir = slash < 0 ? "" : ceilingPath.slice(0, slash + 1);
|
|
106
|
+
return [`${dir}${file}`, `${dir}blobs/${file}`, `blobs/${file}`, file];
|
|
107
|
+
}
|
|
108
|
+
async function auditSettlement(path, side, carried, ingest, pins) {
|
|
109
|
+
const lines = [];
|
|
110
|
+
const failed = (pointer, blobs) => ({ status: "failed", pointer, blobs, lines });
|
|
111
|
+
const noBlobs = (detail, listed) => ({ status: "absent", detail, listed, supplied: 0 });
|
|
112
|
+
// 1. The pointer: header, inclusion, batcher, blob commitments.
|
|
113
|
+
const pointer = carried;
|
|
114
|
+
const p = verifySettlementPointer(pointer, pins);
|
|
115
|
+
const listed = Array.isArray(pointer?.blobs) ? pointer.blobs.length : 0;
|
|
116
|
+
if (!p.ok) {
|
|
117
|
+
lines.push(`settlement: pointer FAILED (${p.reason ?? "invalid"})`);
|
|
118
|
+
return failed({ ok: false, reason: p.reason ?? "invalid" }, noBlobs("not checked: the pointer failed", listed));
|
|
119
|
+
}
|
|
120
|
+
const existedBy = p.existedBy;
|
|
121
|
+
// The pointer must be about THIS ceiling's Base block and transaction.
|
|
122
|
+
const anchor = side.anchor;
|
|
123
|
+
let mismatch = null;
|
|
124
|
+
if (!anchor)
|
|
125
|
+
mismatch = "the ceiling has no Base transaction yet";
|
|
126
|
+
else if (pointer.baseBlockNumber !== anchor.blockNumber || pointer.baseBlockHash.toLowerCase() !== anchor.blockHash.toLowerCase()) {
|
|
127
|
+
mismatch = `the pointer names Base block ${pointer.baseBlockNumber} (${pointer.baseBlockHash.slice(0, 10)}…), this ceiling is in block ${anchor.blockNumber} (${anchor.blockHash.slice(0, 10)}…)`;
|
|
128
|
+
}
|
|
129
|
+
else if (pointer.located && pointer.located.txHash.toLowerCase() !== anchor.txHash.toLowerCase()) {
|
|
130
|
+
mismatch = `the pointer locates transaction ${pointer.located.txHash.slice(0, 10)}…, this ceiling's is ${anchor.txHash.slice(0, 10)}…`;
|
|
131
|
+
}
|
|
132
|
+
if (mismatch) {
|
|
133
|
+
lines.push(`settlement: pointer FAILED (${mismatch})`);
|
|
134
|
+
return failed({ ok: false, reason: mismatch, existedBy }, noBlobs("not checked: the pointer is for another block", listed));
|
|
135
|
+
}
|
|
136
|
+
lines.push(`settlement: pointer ok, Ethereum block ${existedBy.blockNumber} at ${whenUtc(existedBy.blockTimestamp)}`);
|
|
137
|
+
const pointerOk = { ok: true, existedBy };
|
|
138
|
+
// 2. The blobs, when the bundle holds their bytes.
|
|
139
|
+
const wanted = new Map(); // sha256 hex -> versioned hash
|
|
140
|
+
const byPath = new Map(); // bundle path -> sha256 hex
|
|
141
|
+
for (const a of ingest.artifacts)
|
|
142
|
+
for (const ap of a.paths)
|
|
143
|
+
byPath.set(ap, a.sha256Hex);
|
|
144
|
+
const byBasename = new Map();
|
|
145
|
+
for (const a of ingest.artifacts)
|
|
146
|
+
for (const ap of a.paths)
|
|
147
|
+
byBasename.set(ap.slice(ap.lastIndexOf("/") + 1), a.sha256Hex);
|
|
148
|
+
for (const b of pointer.blobs) {
|
|
149
|
+
const file = typeof b.file === "string" ? b.file : `${b.versionedHash.toLowerCase()}.bin`;
|
|
150
|
+
if (file.includes("/") || file.includes("\\") || file.includes(".."))
|
|
151
|
+
continue;
|
|
152
|
+
const hex = blobCandidatePaths(path, file).map((c) => byPath.get(c)).find((h) => h !== undefined) ?? byBasename.get(file);
|
|
153
|
+
if (hex)
|
|
154
|
+
wanted.set(hex, b.versionedHash.toLowerCase());
|
|
155
|
+
}
|
|
156
|
+
if (wanted.size === 0) {
|
|
157
|
+
lines.push("settlement: blobs not in bundle");
|
|
158
|
+
return { status: "pointer-only", pointer: pointerOk, blobs: noBlobs("blobs not in bundle", listed), lines };
|
|
159
|
+
}
|
|
160
|
+
const bytesByHash = new Map();
|
|
161
|
+
for await (const m of streamArtifactsByHash(ingest, wanted.keys()))
|
|
162
|
+
bytesByHash.set(wanted.get(m.sha256Hex), m.bytes);
|
|
163
|
+
let expectParent;
|
|
164
|
+
try {
|
|
165
|
+
expectParent = anchor ? decodeHeader(evmHexToBytes(anchor.blockHeader)).parentHash : undefined;
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
expectParent = undefined;
|
|
169
|
+
}
|
|
170
|
+
const r = await verifySettlementBlobs(pointer, bytesByHash, {
|
|
171
|
+
expect: {
|
|
172
|
+
txHash: anchor.txHash,
|
|
173
|
+
rawTx: anchor.rawTx,
|
|
174
|
+
...(expectParent ? { baseParentHash: expectParent } : {}),
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
if (!r.ok) {
|
|
178
|
+
lines.push(`settlement: blobs FAILED (${r.reason ?? "invalid"})`);
|
|
179
|
+
return failed(pointerOk, { status: "failed", detail: r.reason ?? "invalid", listed, supplied: bytesByHash.size });
|
|
180
|
+
}
|
|
181
|
+
const c = r.channel;
|
|
182
|
+
const frames = c.complete ? `all ${c.framesDecoded} frames` : `frames 0..${c.framesDecoded - 1}${c.framesTotal ? ` of ${c.framesTotal}` : ""}`;
|
|
183
|
+
const loc = r.located;
|
|
184
|
+
lines.push(`settlement: blobs decoded (${frames}), ceiling tx located in Base block ${loc.baseBlockNumber}${loc.batchComplete ? "" : " (batch cut at the last frame supplied)"}`);
|
|
185
|
+
return {
|
|
186
|
+
status: "verified",
|
|
187
|
+
pointer: pointerOk,
|
|
188
|
+
blobs: {
|
|
189
|
+
status: "verified",
|
|
190
|
+
detail: `${bytesByHash.size} of ${listed} blobs supplied; ${frames} decoded; ${r.checks.map((k) => k.detail ?? k.name).join("; ")}`,
|
|
191
|
+
listed,
|
|
192
|
+
supplied: bytesByHash.size,
|
|
193
|
+
located: { baseBlockNumber: loc.baseBlockNumber, baseTxIndex: loc.baseTxIndex, txHash: loc.txHash, batchComplete: loc.batchComplete, framesDecoded: c.framesDecoded, framesTotal: c.framesTotal },
|
|
194
|
+
},
|
|
195
|
+
lines,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=ceilings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ceilings.js","sourceRoot":"","sources":["../src/ceilings.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -44,7 +44,7 @@ const KNOWN_POLICY_FIELDS = [
|
|
|
44
44
|
];
|
|
45
45
|
class UsageError extends Error {
|
|
46
46
|
}
|
|
47
|
-
const USAGE_LINE = "Usage: bitgraph-audit <path-to-bundle> [--out <dir>] [--format json,md] [--trust-policy <path>]";
|
|
47
|
+
const USAGE_LINE = "Usage: bitgraph-audit <path-to-bundle> [--out <dir>] [--format json,md] [--trust-policy <path>] [--ceiling-writer <0x...>] [--ceiling-chain <id>]";
|
|
48
48
|
function helpText() {
|
|
49
49
|
return [
|
|
50
50
|
`bitgraph-audit ${auditToolVersion()}: offline audit of BitGraph proof bundles.`,
|
|
@@ -69,6 +69,14 @@ function helpText() {
|
|
|
69
69
|
" verification tiers. Valid fields:",
|
|
70
70
|
` ${KNOWN_POLICY_FIELDS.join(", ")}.`,
|
|
71
71
|
" Any other field is an error.",
|
|
72
|
+
" --ceiling-writer <0x…> The address ceilings in time must come from",
|
|
73
|
+
" (default: BitGraph's published writer,",
|
|
74
|
+
" 0xf3972408D853c975F86351C311f4310220bbF2a3).",
|
|
75
|
+
" --ceiling-chain <id> Base chain id for ceilings (default 8453).",
|
|
76
|
+
" The audit never goes online, so whether each",
|
|
77
|
+
" ceiling's Base block is on Base's chain is",
|
|
78
|
+
" reported as unchecked: confirm it on basescan.org",
|
|
79
|
+
" or with `bitgraph ceiling verify --rpc <url>`.",
|
|
72
80
|
" --help, -h Print this help and exit 0.",
|
|
73
81
|
"",
|
|
74
82
|
"Exit codes (bit flags):",
|
|
@@ -89,7 +97,10 @@ function helpText() {
|
|
|
89
97
|
" or a supplied anchor witness that fails its offline verification",
|
|
90
98
|
" (block-hash mismatch, digest binding, block number, header or",
|
|
91
99
|
" RLP malformation, an invalid candidate anchor, or an unmatched",
|
|
92
|
-
" witness)
|
|
100
|
+
" witness), or a ceiling in time (bitgraph-ceiling/1) that fails",
|
|
101
|
+
" its check against its proof (wrong writer, root, block, header).",
|
|
102
|
+
" A pending ceiling or a ceiling status note never sets a bit.",
|
|
103
|
+
" Benign findings are reported but never set exit bits:",
|
|
93
104
|
" duplicate copies, manifest advisories, unsafe paths, embedded",
|
|
94
105
|
" proofHash mismatches, and informational anchor findings (unsigned",
|
|
95
106
|
" metadata disagreements, metadata-only anchor claims, and",
|
|
@@ -110,6 +121,8 @@ function parseArgs(argv) {
|
|
|
110
121
|
let outDir = ".";
|
|
111
122
|
let formats = new Set(["json", "md"]);
|
|
112
123
|
let trustPolicyPath;
|
|
124
|
+
let ceilingWriter;
|
|
125
|
+
let ceilingChain;
|
|
113
126
|
const takeValue = (flag, index) => {
|
|
114
127
|
const value = argv[index + 1];
|
|
115
128
|
if (value === undefined)
|
|
@@ -145,6 +158,18 @@ function parseArgs(argv) {
|
|
|
145
158
|
trustPolicyPath = takeValue(arg, i);
|
|
146
159
|
i++;
|
|
147
160
|
}
|
|
161
|
+
else if (arg === "--ceiling-writer") {
|
|
162
|
+
ceilingWriter = takeValue(arg, i);
|
|
163
|
+
i++;
|
|
164
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(ceilingWriter))
|
|
165
|
+
throw new UsageError("--ceiling-writer must be a 0x address.");
|
|
166
|
+
}
|
|
167
|
+
else if (arg === "--ceiling-chain") {
|
|
168
|
+
ceilingChain = Number(takeValue(arg, i));
|
|
169
|
+
i++;
|
|
170
|
+
if (!Number.isInteger(ceilingChain) || ceilingChain <= 0)
|
|
171
|
+
throw new UsageError("--ceiling-chain must be a chain id.");
|
|
172
|
+
}
|
|
148
173
|
else if (arg.startsWith("-")) {
|
|
149
174
|
throw new UsageError(`unknown option "${arg}".`);
|
|
150
175
|
}
|
|
@@ -162,6 +187,8 @@ function parseArgs(argv) {
|
|
|
162
187
|
outDir,
|
|
163
188
|
formats,
|
|
164
189
|
...(trustPolicyPath !== undefined ? { trustPolicyPath } : {}),
|
|
190
|
+
...(ceilingWriter !== undefined ? { ceilingWriter } : {}),
|
|
191
|
+
...(ceilingChain !== undefined ? { ceilingChain } : {}),
|
|
165
192
|
};
|
|
166
193
|
}
|
|
167
194
|
function loadTrustPolicy(path) {
|
|
@@ -196,7 +223,7 @@ function exitMeaning(flags) {
|
|
|
196
223
|
if (flags.verificationFailures)
|
|
197
224
|
parts.push("verification failures");
|
|
198
225
|
if (flags.chainAnomaliesOrDivergences) {
|
|
199
|
-
parts.push("chain anomalies, divergences, or anchor witness verification failures");
|
|
226
|
+
parts.push("chain anomalies, divergences, or anchor witness verification failures (or a failed ceiling in time)");
|
|
200
227
|
}
|
|
201
228
|
return parts.join("; ");
|
|
202
229
|
}
|
|
@@ -294,7 +321,14 @@ async function main() {
|
|
|
294
321
|
}
|
|
295
322
|
let result;
|
|
296
323
|
try {
|
|
297
|
-
|
|
324
|
+
const ceilings = {
|
|
325
|
+
...(parsed.ceilingWriter !== undefined ? { writer: parsed.ceilingWriter } : {}),
|
|
326
|
+
...(parsed.ceilingChain !== undefined ? { chainId: parsed.ceilingChain } : {}),
|
|
327
|
+
};
|
|
328
|
+
result = await runAudit(bundlePath, {
|
|
329
|
+
...(trustAnchors !== undefined ? { trustAnchors } : {}),
|
|
330
|
+
ceilings,
|
|
331
|
+
});
|
|
298
332
|
}
|
|
299
333
|
catch (err) {
|
|
300
334
|
process.stderr.write(`bitgraph-audit: cannot audit "${parsed.bundlePath}": ` +
|
|
@@ -322,6 +356,16 @@ async function main() {
|
|
|
322
356
|
flags.chainAnomaliesOrDivergences = true;
|
|
323
357
|
}
|
|
324
358
|
flags.code = flags.code | carrierFlags;
|
|
359
|
+
for (const c of result.ceilings?.checks ?? []) {
|
|
360
|
+
const width = c.window?.widthSeconds != null ? ` (window ${c.window.widthSeconds}s after the floor block)` : "";
|
|
361
|
+
process.stdout.write(c.status === "verified"
|
|
362
|
+
? `ceiling VERIFIED ${c.path}: ${c.label ?? ""}${width}; ${c.onChainDetail ?? ""}\n`
|
|
363
|
+
: `ceiling ${c.status.toUpperCase()} ${c.path}: ${c.reason ?? ""}\n`);
|
|
364
|
+
for (const line of c.settlement?.lines ?? [])
|
|
365
|
+
process.stdout.write(` ${line}\n`);
|
|
366
|
+
}
|
|
367
|
+
for (const s of result.ceilings?.statuses ?? [])
|
|
368
|
+
process.stdout.write(`ceiling ${s.status} ${s.path}: ${s.note}\n`);
|
|
325
369
|
process.stdout.write(`bitgraph-audit ${auditToolVersion()}: wrote ${written.join(", ")}\n` +
|
|
326
370
|
`exit ${flags.code}: ${exitMeaning(flags)}\n`);
|
|
327
371
|
return flags.code;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,6 +20,10 @@ export { analyzeAuthorities } from "./authority.js";
|
|
|
20
20
|
export { identifyAnchors } from "./anchors.js";
|
|
21
21
|
export { verifyAnchorWitnesses, verifyAnchorWitness } from "./witness.js";
|
|
22
22
|
export { deriveTemporalBounds } from "./temporal.js";
|
|
23
|
+
export { verifyCeilings, BITGRAPH_CEILING_WRITER, BASE_MAINNET_CHAIN_ID } from "./ceilings.js";
|
|
24
|
+
export type { CeilingAuditOptions } from "./ceilings.js";
|
|
25
|
+
export { verifySettlementBlobs, decodeOpBlob, parseFrames, decompressChannel, decodeBatches, decodeSpanBatch, BASE_MAINNET_ROLLUP, BLOB_BYTES, MAX_BLOB_DATA_BYTES } from "./settlement-blobs.js";
|
|
26
|
+
export type { SettlementBlobsResult, SettlementBlobsCheck, SettlementBlobsOptions, SettlementLocated, ChannelFrame, DecodedBatch, BatchTx } from "./settlement-blobs.js";
|
|
23
27
|
export { validateAttestations, validateNitroAttestationDocument } from "./attestation.js";
|
|
24
28
|
export { runAudit, auditIngest, computeExitFlags, auditToolVersion, AUDIT_VERSION } from "./audit.js";
|
|
25
29
|
export type { AuditIngestOptions } from "./audit.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,YAAY,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,EACZ,0BAA0B,EAC1B,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,2BAA2B,EAC3B,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,2BAA2B,EAC3B,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAChI,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,9 @@ export { analyzeAuthorities } from "./authority.js";
|
|
|
7
7
|
export { identifyAnchors } from "./anchors.js";
|
|
8
8
|
export { verifyAnchorWitnesses, verifyAnchorWitness } from "./witness.js";
|
|
9
9
|
export { deriveTemporalBounds } from "./temporal.js";
|
|
10
|
+
export { verifyCeilings, BITGRAPH_CEILING_WRITER, BASE_MAINNET_CHAIN_ID } from "./ceilings.js";
|
|
11
|
+
// The blob layer of a ceiling's settlement on Ethereum (bitgraph-settlement/1): KZG, frames, channel, batches, the ceiling transaction.
|
|
12
|
+
export { verifySettlementBlobs, decodeOpBlob, parseFrames, decompressChannel, decodeBatches, decodeSpanBatch, BASE_MAINNET_ROLLUP, BLOB_BYTES, MAX_BLOB_DATA_BYTES } from "./settlement-blobs.js";
|
|
10
13
|
export { validateAttestations, validateNitroAttestationDocument } from "./attestation.js";
|
|
11
14
|
export { runAudit, auditIngest, computeExitFlags, auditToolVersion, AUDIT_VERSION } from "./audit.js";
|
|
12
15
|
export { buildJsonReport } from "./report-json.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAuF9F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGhI,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAuF9F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGhI,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG/F,wIAAwI;AACxI,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGlM,OAAO,EAAE,oBAAoB,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AAE1F,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGtG,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGhF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/ingest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EASV,YAAY,EACZ,YAAY,EAEZ,oBAAoB,EAIrB,MAAM,YAAY,CAAC;AAUpB;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAInC,CAAC;AAaF;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,YAAoC,GAC3C,OAAO,CAAC,YAAY,CAAC,CAkEvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;CAC1E;AAWD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACpC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,YAAY,CAAC,CA2CvB;AA8MD;;;;;;;;;;;GAWG;AACH,wBAAuB,sBAAsB,CAC3C,MAAM,EAAE,YAAY,GACnB,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,CAElD;AAED;;;;;;;GAOG;AACH,wBAAuB,qBAAqB,CAC1C,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,GAC5B,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,CAIlD"}
|
package/dist/ingest.js
CHANGED
|
@@ -60,6 +60,8 @@ const NUL = new Uint8Array([0]);
|
|
|
60
60
|
const MANIFEST_PATH = "manifest.json";
|
|
61
61
|
const BUNDLE_VERSION = "bitgraph-bundle/1";
|
|
62
62
|
const WITNESS_VERSION = "bitgraph-anchor-witness/1";
|
|
63
|
+
const CEILING_VERSION_TAG = "bitgraph-ceiling/1";
|
|
64
|
+
const CEILING_STATUS_VERSION_TAG = "bitgraph-ceiling-status/1";
|
|
63
65
|
// ---------------------------------------------------------------------------
|
|
64
66
|
// Public API
|
|
65
67
|
// ---------------------------------------------------------------------------
|
|
@@ -262,6 +264,8 @@ function finalizeIngest(params) {
|
|
|
262
264
|
const proofsByHash = new Map();
|
|
263
265
|
const unsupportedVersions = [];
|
|
264
266
|
const witnesses = [];
|
|
267
|
+
const ceilings = [];
|
|
268
|
+
const ceilingStatuses = [];
|
|
265
269
|
const artifactsByHex = new Map();
|
|
266
270
|
let manifest;
|
|
267
271
|
let proofFiles = 0;
|
|
@@ -315,6 +319,16 @@ function finalizeIngest(params) {
|
|
|
315
319
|
});
|
|
316
320
|
continue;
|
|
317
321
|
}
|
|
322
|
+
// A ceiling in time travels beside its proof: evidence, never an artifact.
|
|
323
|
+
const pv = parsed !== undefined ? parsed["version"] : undefined;
|
|
324
|
+
if (pv === CEILING_VERSION_TAG || pv === CEILING_STATUS_VERSION_TAG) {
|
|
325
|
+
(pv === CEILING_VERSION_TAG ? ceilings : ceilingStatuses).push({
|
|
326
|
+
path: entry.path,
|
|
327
|
+
fileSha256Hex: entry.sha256Hex,
|
|
328
|
+
json: parsed,
|
|
329
|
+
});
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
318
332
|
indexArtifact(entry, artifactsByHex);
|
|
319
333
|
}
|
|
320
334
|
// ---------------------------------------------------------------------
|
|
@@ -338,6 +352,7 @@ function finalizeIngest(params) {
|
|
|
338
352
|
unsupportedVersion: unsupportedVersions.length,
|
|
339
353
|
artifacts: artifacts.length,
|
|
340
354
|
witnesses: witnesses.length,
|
|
355
|
+
ceilings: ceilings.length + ceilingStatuses.length,
|
|
341
356
|
skippedUnsafePaths,
|
|
342
357
|
};
|
|
343
358
|
return {
|
|
@@ -349,6 +364,8 @@ function finalizeIngest(params) {
|
|
|
349
364
|
unsupportedVersions,
|
|
350
365
|
artifacts,
|
|
351
366
|
witnesses,
|
|
367
|
+
ceilings,
|
|
368
|
+
ceilingStatuses,
|
|
352
369
|
...(manifest !== undefined ? { manifest } : {}),
|
|
353
370
|
computedContentsHashB64,
|
|
354
371
|
findings,
|