@mikeargento/bitgraph 1.10.1 → 1.12.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 +42 -32
- package/dist/export.d.ts +98 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +366 -0
- package/dist/export.js.map +1 -0
- package/dist/fuse.d.ts +156 -11
- package/dist/fuse.d.ts.map +1 -1
- package/dist/fuse.js +380 -8
- package/dist/fuse.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/recovery-write.d.ts +58 -0
- package/dist/recovery-write.d.ts.map +1 -0
- package/dist/recovery-write.js +265 -0
- package/dist/recovery-write.js.map +1 -0
- package/dist/recovery.d.ts +490 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +1124 -0
- package/dist/recovery.js.map +1 -0
- package/package.json +3 -3
- package/src/export.ts +435 -0
- package/src/fuse.ts +521 -19
- package/src/index.ts +28 -3
- package/src/recovery-write.ts +334 -0
- package/src/recovery.ts +1261 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikeargento/bitgraph",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"description": "Portable proof that these exact bytes filled a position that existed before them.",
|
|
6
6
|
"keywords": [
|
|
@@ -43,12 +43,12 @@
|
|
|
43
43
|
"test:integration": "npm run build --prefix server/commit-service && npm run test:core"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@mikeargento/bitgraph-verify": "^1.
|
|
46
|
+
"@mikeargento/bitgraph-verify": "^1.17.0",
|
|
47
47
|
"@noble/ed25519": "^2.1.0",
|
|
48
48
|
"@noble/hashes": "^1.4.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@mikeargento/bitgraph-audit": "^0.
|
|
51
|
+
"@mikeargento/bitgraph-audit": "^0.9.0",
|
|
52
52
|
"@types/node": "^20.0.0",
|
|
53
53
|
"typescript": "^5.4.0"
|
|
54
54
|
},
|
package/src/export.ts
ADDED
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
// Copyright (c) Argento Computing Inc. All rights reserved. See LICENSE.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* bitgraph-export/1 from the producer's side (2026-10-03): the JSON file
|
|
5
|
+
* that, with the file it is about, checks a tree/1 BitGraph with nothing of
|
|
6
|
+
* BitGraph's required. The verify package defines the format (buildExport,
|
|
7
|
+
* parseExport, verifyExport); this module builds one from what fuseTree
|
|
8
|
+
* returned and completes one later from public, read-only GETs.
|
|
9
|
+
*
|
|
10
|
+
* Two kinds, one format:
|
|
11
|
+
* a member's export tree.member: one leaf, its index and its path. It
|
|
12
|
+
* shows nothing of the other files but sibling hashes.
|
|
13
|
+
* the owner's export tree.leaves: every leaf (count x 65 bytes, base64)
|
|
14
|
+
* and tree.names beside them. Any member's evidence is
|
|
15
|
+
* rebuilt from it, and it lists every file, so it is
|
|
16
|
+
* the owner's to keep.
|
|
17
|
+
*
|
|
18
|
+
* At make time the floor header can be in hand (the site's witness route for
|
|
19
|
+
* an Ethereum floor; for a Base floor, enclave v10, a Base node's block at the
|
|
20
|
+
* signed height);
|
|
21
|
+
* the ceiling (a Base block, seconds after the commit) and the settlement
|
|
22
|
+
* (Base's output root on Ethereum, much later) cannot, so they start as
|
|
23
|
+
* { status: "pending" }. completeExport fetches all three. Nothing fetched is
|
|
24
|
+
* embedded before it verifies here: the floor header must hash to the floor
|
|
25
|
+
* block the proof signs, the ceiling must pass verifyCeiling for this proof,
|
|
26
|
+
* and the settlement must pass verifyOutputRootSettlement for the ceiling's
|
|
27
|
+
* own Base block. Nothing already in an export is ever overwritten.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { sha256 } from "@noble/hashes/sha256";
|
|
31
|
+
import {
|
|
32
|
+
base64ToBytes,
|
|
33
|
+
BASE_MAINNET_CHAIN_ID,
|
|
34
|
+
BITGRAPH_CEILING_WRITER,
|
|
35
|
+
buildExport,
|
|
36
|
+
buildTreeMemberEvidence,
|
|
37
|
+
bytesEqual,
|
|
38
|
+
bytesToBase64,
|
|
39
|
+
bytesToHex,
|
|
40
|
+
checkFloorHeader,
|
|
41
|
+
computeProofHash,
|
|
42
|
+
encodeTreeLeaves,
|
|
43
|
+
evmHexToBytes,
|
|
44
|
+
MerkleTree,
|
|
45
|
+
OUTPUT_ROOT_VERSION,
|
|
46
|
+
parseExport,
|
|
47
|
+
parseTreeRootDocument,
|
|
48
|
+
treeLeafHash,
|
|
49
|
+
treeRootFromMember,
|
|
50
|
+
verifyCeiling,
|
|
51
|
+
verifyOutputRootSettlement,
|
|
52
|
+
verifyTreeLeaves,
|
|
53
|
+
CEILING_VERSION,
|
|
54
|
+
headerRlpFromRpc,
|
|
55
|
+
signedFloorOf,
|
|
56
|
+
evmBytesToHex,
|
|
57
|
+
} from "@mikeargento/bitgraph-verify";
|
|
58
|
+
import type { BitGraphExport, BitGraphProof, CeilingSidecar, OutputRootSettlement, RpcBlockHeader, SignedFloor, TreeLeaf } from "@mikeargento/bitgraph-verify";
|
|
59
|
+
import type { FuseTreeResult } from "./fuse.js";
|
|
60
|
+
|
|
61
|
+
/** An export's floor: the block the proof signs (commit.slotAnchor on Ethereum, or commit.slotFloor on Base, with chain "base"), with its RLP header (0x hex). */
|
|
62
|
+
export type ExportFloor = NonNullable<BitGraphExport["floor"]>;
|
|
63
|
+
|
|
64
|
+
/** What an export is built from. A FuseTreeResult is one; so is the same data read back from an owner's export. */
|
|
65
|
+
export interface TreeExportSource {
|
|
66
|
+
proof: BitGraphProof;
|
|
67
|
+
/** The 84-byte root document the proof commits. */
|
|
68
|
+
rootDocument: Uint8Array;
|
|
69
|
+
/** Every leaf, in tree order. */
|
|
70
|
+
leaves: readonly TreeLeaf[];
|
|
71
|
+
/** The tree over those leaves, when already built (reused across many member exports). */
|
|
72
|
+
tree?: MerkleTree;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** The parts beside the tree. Each defaults to the make-time state: no floor header, ceiling and settlement pending. */
|
|
76
|
+
export interface ExportParts {
|
|
77
|
+
floor?: ExportFloor | null;
|
|
78
|
+
ceiling?: BitGraphExport["ceiling"];
|
|
79
|
+
settlement?: BitGraphExport["settlement"];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Throws unless the root document is the one the proof signs and states this many leaves; returns its parse. */
|
|
83
|
+
function boundDocument(source: TreeExportSource): { count: number; root: Uint8Array } {
|
|
84
|
+
const doc = parseTreeRootDocument(source.rootDocument);
|
|
85
|
+
if (doc === null) throw new TypeError("the root document is not 84 bytes of tree/1");
|
|
86
|
+
const signed = base64ToBytes(source.proof.artifact?.digestB64 ?? "");
|
|
87
|
+
if (signed === null || !bytesEqual(sha256(source.rootDocument), signed)) throw new TypeError("the root document does not hash to the proof's signed artifact digest");
|
|
88
|
+
if (doc.count !== source.leaves.length) throw new TypeError(`the root document states ${doc.count} leaves; ${source.leaves.length} were given`);
|
|
89
|
+
return doc;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function parts(p: ExportParts): Pick<BitGraphExport, "floor" | "ceiling" | "settlement"> {
|
|
93
|
+
return {
|
|
94
|
+
floor: p.floor ?? null,
|
|
95
|
+
ceiling: p.ceiling === undefined ? { status: "pending" } : p.ceiling,
|
|
96
|
+
settlement: p.settlement === undefined ? { status: "pending" } : p.settlement,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* One member's export: its leaf, its index and its path, and nothing of the
|
|
102
|
+
* other files but sibling hashes. The path is checked against the committed
|
|
103
|
+
* root before the export is built, so no export contradicts itself.
|
|
104
|
+
*/
|
|
105
|
+
export function buildMemberExport(source: TreeExportSource, leafIndex: number, extras: ExportParts = {}): BitGraphExport {
|
|
106
|
+
const doc = boundDocument(source);
|
|
107
|
+
if (!Number.isInteger(leafIndex) || leafIndex < 0 || leafIndex >= source.leaves.length) throw new RangeError(`leaf ${leafIndex} is not in a tree of ${source.leaves.length}`);
|
|
108
|
+
const tree = source.tree ?? new MerkleTree(source.leaves.map(treeLeafHash));
|
|
109
|
+
const leaf = source.leaves[leafIndex]!;
|
|
110
|
+
const path = tree.path(leafIndex);
|
|
111
|
+
const reached = treeRootFromMember(leaf, leafIndex, doc.count, path);
|
|
112
|
+
if (reached === null || !bytesEqual(reached, doc.root)) throw new TypeError(`leaf ${leafIndex}'s path does not recompute the committed root`);
|
|
113
|
+
return buildExport({
|
|
114
|
+
proof: source.proof,
|
|
115
|
+
tree: { rootDocument: bytesToHex(source.rootDocument), member: buildTreeMemberEvidence(leaf, leafIndex, doc.count, path) },
|
|
116
|
+
...parts(extras),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The owner's export: every leaf in tree order and, when given, a name per
|
|
122
|
+
* leaf (unsigned, informational). The whole list is checked against the
|
|
123
|
+
* committed root first: sorted, without duplicates, rebuilding the root.
|
|
124
|
+
*/
|
|
125
|
+
export function buildOwnerExport(source: TreeExportSource, extras: ExportParts & { names?: readonly string[] } = {}): BitGraphExport {
|
|
126
|
+
boundDocument(source);
|
|
127
|
+
const list = encodeTreeLeaves(source.leaves);
|
|
128
|
+
const check = verifyTreeLeaves(source.rootDocument, list);
|
|
129
|
+
if (!check.ok) throw new TypeError(`the leaves do not make the committed tree: ${check.reason ?? "invalid"}`);
|
|
130
|
+
const names = extras.names;
|
|
131
|
+
if (names !== undefined && (names.length !== source.leaves.length || names.some((n) => typeof n !== "string"))) {
|
|
132
|
+
throw new TypeError(`names must be one string per leaf (${source.leaves.length})`);
|
|
133
|
+
}
|
|
134
|
+
return buildExport({
|
|
135
|
+
proof: source.proof,
|
|
136
|
+
tree: { rootDocument: bytesToHex(source.rootDocument), leaves: bytesToBase64(list), ...(names !== undefined ? { names: [...names] } : {}) },
|
|
137
|
+
...parts(extras),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** A name per leaf, in tree order, from a tree's members ("" for a member made without one). */
|
|
142
|
+
export function namesByLeaf(result: Pick<FuseTreeResult, "members" | "count">): string[] {
|
|
143
|
+
const names = new Array<string>(result.count).fill("");
|
|
144
|
+
for (const m of result.members) names[m.leafIndex] = m.name ?? "";
|
|
145
|
+
return names;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** The floor a proof signs, or null when it signs none or is ambiguous (two floors). */
|
|
149
|
+
function signedFloor(proof: BitGraphProof): SignedFloor | null {
|
|
150
|
+
try {
|
|
151
|
+
return signedFloorOf(proof);
|
|
152
|
+
} catch {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The floor for an export from a block header, or null unless the header
|
|
159
|
+
* decodes and hashes to the block the proof signs as its floor, at that
|
|
160
|
+
* height (for a Base floor, also at the signed time, on Base mainnet's
|
|
161
|
+
* schedule). The header is never trusted for anything it does not hash to.
|
|
162
|
+
*/
|
|
163
|
+
export function floorFromHeader(proof: BitGraphProof, headerHex: string): ExportFloor | null {
|
|
164
|
+
const signed = signedFloor(proof);
|
|
165
|
+
if (!signed || typeof headerHex !== "string") return null;
|
|
166
|
+
try {
|
|
167
|
+
const r = checkFloorHeader(signed, evmHexToBytes(headerHex), signed.chain);
|
|
168
|
+
if (!r.ok) return null;
|
|
169
|
+
const hex = headerHex.toLowerCase();
|
|
170
|
+
const header = hex.startsWith("0x") ? hex : `0x${hex}`;
|
|
171
|
+
return signed.chain === "base"
|
|
172
|
+
? { chain: "base", blockNumber: r.header.number, blockHash: r.header.hash, header }
|
|
173
|
+
: { blockNumber: r.header.number, blockHash: r.header.hash, header };
|
|
174
|
+
} catch {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export interface ExportFetchOptions {
|
|
180
|
+
/** The site to read from. Default https://bitgraph.ing. */
|
|
181
|
+
baseUrl?: string;
|
|
182
|
+
/** Per request. Default 20 s. */
|
|
183
|
+
timeoutMs?: number;
|
|
184
|
+
/** The Base node asked for a Base floor's header (enclave v10 floors), by height. Default https://mainnet.base.org. */
|
|
185
|
+
baseRpcUrl?: string;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
type Fetcher = (input: string, init?: RequestInit) => Promise<Response>;
|
|
189
|
+
|
|
190
|
+
const DEFAULT_SITE = "https://bitgraph.ing";
|
|
191
|
+
const DEFAULT_BASE_RPC = "https://mainnet.base.org";
|
|
192
|
+
|
|
193
|
+
function siteOf(opts: ExportFetchOptions): string {
|
|
194
|
+
return (opts.baseUrl ?? DEFAULT_SITE).replace(/\/+$/, "");
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** One read-only GET: status and parsed JSON, or the reason it failed. Never throws. */
|
|
198
|
+
async function getJson(fetcher: Fetcher, url: string, timeoutMs: number): Promise<{ status: number; json: unknown } | { error: string }> {
|
|
199
|
+
try {
|
|
200
|
+
const res = await fetcher(url, { method: "GET", headers: { accept: "application/json" }, redirect: "error", signal: AbortSignal.timeout(timeoutMs) });
|
|
201
|
+
let json: unknown = null;
|
|
202
|
+
try {
|
|
203
|
+
json = await res.json();
|
|
204
|
+
} catch {
|
|
205
|
+
json = null;
|
|
206
|
+
}
|
|
207
|
+
return { status: res.status, json };
|
|
208
|
+
} catch (err) {
|
|
209
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* The floor header for a proof, checked against the floor the proof signs:
|
|
215
|
+
* for an Ethereum floor, from the site's witness route
|
|
216
|
+
* (GET /api/proofs/witness?block=N&hash=0x...); for a Base floor, the site's
|
|
217
|
+
* saved copy (GET /api/proofs/floor-header?chain=base&block=N&hash=0x...)
|
|
218
|
+
* when opts.baseUrl names the site, else the Base node's block at the signed
|
|
219
|
+
* height (eth_getBlockByNumber), its header rebuilt from the node's JSON;
|
|
220
|
+
* either kept only when it hashes to the signed block hash.
|
|
221
|
+
* Null when the proof signs no floor, nothing answered with a header, or the
|
|
222
|
+
* header is not that block's.
|
|
223
|
+
*/
|
|
224
|
+
export async function fetchFloorHeader(proof: BitGraphProof, fetcher: Fetcher = fetch, opts: ExportFetchOptions = {}): Promise<ExportFloor | null> {
|
|
225
|
+
const r = await floorHeaderLookup(proof, fetcher, opts);
|
|
226
|
+
return "floor" in r ? r.floor : null;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** One floor-header lookup on the floor's own chain: the floor, or why there is none. Never throws. */
|
|
230
|
+
async function floorHeaderLookup(proof: BitGraphProof, fetcher: Fetcher, opts: ExportFetchOptions): Promise<{ floor: ExportFloor } | { note: string } | { none: true }> {
|
|
231
|
+
const signed = signedFloor(proof);
|
|
232
|
+
if (!signed) return { none: true };
|
|
233
|
+
const timeoutMs = opts.timeoutMs ?? 20_000;
|
|
234
|
+
if (signed.chain === "base") {
|
|
235
|
+
// The site's saved copy first, when the caller names its site (the parent
|
|
236
|
+
// saves each floor header before a proof stands on it), then a Base node
|
|
237
|
+
// by height. Either is kept only when it hashes to the signed block; a
|
|
238
|
+
// site that has no copy, or answers anything else, falls through.
|
|
239
|
+
if (opts.baseUrl !== undefined) {
|
|
240
|
+
const saved = await getJson(fetcher, `${siteOf(opts)}/api/proofs/floor-header?chain=base&block=${signed.blockNumber}&hash=${encodeURIComponent(signed.blockHash)}`, timeoutMs);
|
|
241
|
+
if (!("error" in saved) && saved.status === 200) {
|
|
242
|
+
const header = (saved.json as { header?: unknown } | null)?.header;
|
|
243
|
+
const f = typeof header === "string" ? floorFromHeader(proof, header) : null;
|
|
244
|
+
if (f !== null) return { floor: f };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const url = opts.baseRpcUrl ?? DEFAULT_BASE_RPC;
|
|
248
|
+
const r = await postJson(fetcher, url, { jsonrpc: "2.0", id: 1, method: "eth_getBlockByNumber", params: [`0x${signed.blockNumber.toString(16)}`, false] }, timeoutMs);
|
|
249
|
+
if ("error" in r) return { note: `floor header: ${r.error}` };
|
|
250
|
+
if (r.status !== 200) return { note: `floor header: the Base node answered ${r.status}` };
|
|
251
|
+
const block = (r.json as { result?: RpcBlockHeader | null } | null)?.result ?? null;
|
|
252
|
+
if (block === null) return { note: `floor header: the Base node has no block ${signed.blockNumber}` };
|
|
253
|
+
const rlp = headerRlpFromRpc(block, signed.blockHash);
|
|
254
|
+
const f = rlp === null ? null : floorFromHeader(proof, evmBytesToHex(rlp));
|
|
255
|
+
return f !== null ? { floor: f } : { note: `floor header: the Base node's block ${signed.blockNumber} is not the floor block the proof signs; not embedded` };
|
|
256
|
+
}
|
|
257
|
+
const r = await getJson(fetcher, `${siteOf(opts)}/api/proofs/witness?block=${signed.blockNumber}&hash=${encodeURIComponent(signed.blockHash)}`, timeoutMs);
|
|
258
|
+
if ("error" in r) return { note: `floor header: ${r.error}` };
|
|
259
|
+
if (r.status !== 200) return { note: `floor header: the witness route answered ${r.status}` };
|
|
260
|
+
const f = floorFromHeader(proof, witnessHeader(r.json) ?? "");
|
|
261
|
+
return f !== null ? { floor: f } : { note: "floor header: the witness route answered a header that is not the floor block the proof signs; not embedded" };
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/** One JSON-RPC POST: status and parsed JSON, or the reason it failed. Never throws. */
|
|
265
|
+
async function postJson(fetcher: Fetcher, url: string, body: unknown, timeoutMs: number): Promise<{ status: number; json: unknown } | { error: string }> {
|
|
266
|
+
try {
|
|
267
|
+
const res = await fetcher(url, { method: "POST", headers: { "content-type": "application/json", accept: "application/json" }, body: JSON.stringify(body), redirect: "error", signal: AbortSignal.timeout(timeoutMs) });
|
|
268
|
+
let json: unknown = null;
|
|
269
|
+
try {
|
|
270
|
+
json = await res.json();
|
|
271
|
+
} catch {
|
|
272
|
+
json = null;
|
|
273
|
+
}
|
|
274
|
+
return { status: res.status, json };
|
|
275
|
+
} catch (err) {
|
|
276
|
+
return { error: err instanceof Error ? err.message : String(err) };
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/** The header in a witness answer: the bitgraph-anchor-witness/1 object, or the same inside a { witness } envelope. */
|
|
281
|
+
function witnessHeader(json: unknown): string | null {
|
|
282
|
+
const j = json as { headerRlpHex?: unknown; witness?: { headerRlpHex?: unknown } } | null;
|
|
283
|
+
const h = j?.headerRlpHex ?? j?.witness?.headerRlpHex;
|
|
284
|
+
return typeof h === "string" ? h : null;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function isCeiling(c: BitGraphExport["ceiling"]): c is CeilingSidecar {
|
|
288
|
+
return c !== null && typeof c === "object" && (c as { version?: unknown }).version === CEILING_VERSION && (c as CeilingSidecar).anchor != null;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function isSettlement(s: BitGraphExport["settlement"]): s is OutputRootSettlement {
|
|
292
|
+
return s !== null && typeof s === "object" && (s as { version?: unknown }).version === OUTPUT_ROOT_VERSION;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export interface CompleteExportOptions extends ExportFetchOptions {
|
|
296
|
+
/** The ceiling writer the verifier accepts. Default BitGraph's published writer on Base. */
|
|
297
|
+
writerAddress?: string;
|
|
298
|
+
/** Default Base mainnet (8453). */
|
|
299
|
+
baseChainId?: number;
|
|
300
|
+
/** The chain the settlement is on. Default Ethereum mainnet (1). */
|
|
301
|
+
ethereumChainId?: number;
|
|
302
|
+
/** Keep asking while something is still pending, up to this long. Default 0: one pass. */
|
|
303
|
+
waitMs?: number;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
export interface CompletedExport {
|
|
307
|
+
export: BitGraphExport;
|
|
308
|
+
/** True when anything was added. */
|
|
309
|
+
changed: boolean;
|
|
310
|
+
floor: "present" | "absent";
|
|
311
|
+
ceiling: "present" | "pending";
|
|
312
|
+
settlement: "present" | "pending";
|
|
313
|
+
/** What was asked and not embedded, and why: a route that failed, or evidence that did not verify. */
|
|
314
|
+
notes: string[];
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Fill what an export is waiting for, from read-only GETs on the site:
|
|
321
|
+
* floor GET /api/proofs/witness?block=N&hash=0x... for an Ethereum floor; a Base floor is
|
|
322
|
+
* GET /api/proofs/floor-header?chain=base&block=N&hash=0x..., else the Base node's
|
|
323
|
+
* block N (opts.baseRpcUrl); or the ceiling sidecar's own floor header
|
|
324
|
+
* ceiling GET /api/ceilings/<proofHash, URL-safe> 404: still pending
|
|
325
|
+
* settlement GET /api/ceilings/settlement/<Base block> 404: still pending
|
|
326
|
+
* Each is verified here before it is embedded, and nothing already present is
|
|
327
|
+
* overwritten. The fetcher is injectable; it defaults to the global fetch.
|
|
328
|
+
*/
|
|
329
|
+
export async function completeExport(input: BitGraphExport, fetcher: Fetcher = fetch, opts: CompleteExportOptions = {}): Promise<CompletedExport> {
|
|
330
|
+
const exp = parseExport(input);
|
|
331
|
+
if (exp === null) throw new TypeError("not a bitgraph-export/1 document");
|
|
332
|
+
const site = siteOf(opts);
|
|
333
|
+
const timeoutMs = opts.timeoutMs ?? 20_000;
|
|
334
|
+
const writerAddress = opts.writerAddress ?? BITGRAPH_CEILING_WRITER;
|
|
335
|
+
const chainId = opts.baseChainId ?? BASE_MAINNET_CHAIN_ID;
|
|
336
|
+
const proof = exp.proof;
|
|
337
|
+
const notes = new Set<string>();
|
|
338
|
+
let floor: BitGraphExport["floor"] = exp.floor ?? null;
|
|
339
|
+
let ceiling: BitGraphExport["ceiling"] = exp.ceiling ?? null;
|
|
340
|
+
let settlement: BitGraphExport["settlement"] = exp.settlement ?? null;
|
|
341
|
+
let changed = false;
|
|
342
|
+
const deadline = Date.now() + (opts.waitMs ?? 0);
|
|
343
|
+
|
|
344
|
+
for (;;) {
|
|
345
|
+
// 1. The floor header, on the floor's own chain, checked against the signed floor.
|
|
346
|
+
if (floor === null) {
|
|
347
|
+
const r = await floorHeaderLookup(proof, fetcher, opts);
|
|
348
|
+
if ("floor" in r) {
|
|
349
|
+
floor = r.floor;
|
|
350
|
+
changed = true;
|
|
351
|
+
} else if ("note" in r) notes.add(r.note);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// 2. The ceiling on Base: the sidecar, verified for this proof and writer.
|
|
355
|
+
if (!isCeiling(ceiling)) {
|
|
356
|
+
const r = await getJson(fetcher, `${site}/api/ceilings/${encodeURIComponent(urlSafe(computeProofHash(proof)))}`, timeoutMs);
|
|
357
|
+
if ("error" in r) notes.add(`ceiling: ${r.error}`);
|
|
358
|
+
else if (r.status === 404) {
|
|
359
|
+
if (ceiling === null) {
|
|
360
|
+
ceiling = { status: "pending" };
|
|
361
|
+
changed = true;
|
|
362
|
+
}
|
|
363
|
+
} else if (r.status !== 200) notes.add(`ceiling: the ceiling route answered ${r.status}`);
|
|
364
|
+
else {
|
|
365
|
+
const sidecar = r.json as CeilingSidecar;
|
|
366
|
+
const v = await verifyCeiling(proof, sidecar, { writerAddress, chainId });
|
|
367
|
+
if (v.ok) {
|
|
368
|
+
ceiling = sidecar;
|
|
369
|
+
changed = true;
|
|
370
|
+
// The sidecar can carry the floor header too; it is checked the same way.
|
|
371
|
+
if (floor === null && typeof sidecar.floor?.blockHeader === "string") {
|
|
372
|
+
const f = floorFromHeader(proof, sidecar.floor.blockHeader);
|
|
373
|
+
if (f !== null) floor = f;
|
|
374
|
+
}
|
|
375
|
+
} else if (v.status === "pending") {
|
|
376
|
+
if (ceiling === null) {
|
|
377
|
+
ceiling = { status: "pending" };
|
|
378
|
+
changed = true;
|
|
379
|
+
}
|
|
380
|
+
} else notes.add(`ceiling: the sidecar the site served does not verify (${v.reason ?? "invalid"}); not embedded`);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// 3. The settlement on Ethereum, for the ceiling's own Base block.
|
|
385
|
+
if (!isSettlement(settlement)) {
|
|
386
|
+
if (isCeiling(ceiling)) {
|
|
387
|
+
const base = ceiling.anchor!;
|
|
388
|
+
const pending = { status: "pending" as const, baseBlock: base.blockNumber };
|
|
389
|
+
const r = await getJson(fetcher, `${site}/api/ceilings/settlement/${base.blockNumber}`, timeoutMs);
|
|
390
|
+
const answer = "error" in r ? null : (r.json as { settlement?: unknown; status?: unknown } | null);
|
|
391
|
+
const s = (answer !== null && typeof answer === "object" && answer.settlement !== undefined ? answer.settlement : answer) as OutputRootSettlement | { status?: unknown } | null;
|
|
392
|
+
if ("error" in r) notes.add(`settlement: ${r.error}`);
|
|
393
|
+
else if (r.status === 404 || (r.status === 200 && (s as { status?: unknown } | null)?.status === "pending")) {
|
|
394
|
+
if (!samePending(settlement, pending)) {
|
|
395
|
+
settlement = pending;
|
|
396
|
+
changed = true;
|
|
397
|
+
}
|
|
398
|
+
} else if (r.status !== 200) notes.add(`settlement: the settlement route answered ${r.status}`);
|
|
399
|
+
else {
|
|
400
|
+
const so = s as OutputRootSettlement;
|
|
401
|
+
const v = verifyOutputRootSettlement(so, { baseChainId: chainId, ethereumChainId: opts.ethereumChainId ?? 1 });
|
|
402
|
+
const linked = so?.base?.blockNumber === base.blockNumber && typeof so.base.blockHash === "string" && so.base.blockHash.toLowerCase() === base.blockHash.toLowerCase();
|
|
403
|
+
if (v.ok && linked) {
|
|
404
|
+
settlement = so;
|
|
405
|
+
changed = true;
|
|
406
|
+
} else notes.add(`settlement: ${v.ok ? "it settles a different Base block than the ceiling's" : `it does not verify (${v.reason ?? "invalid"})`}; not embedded`);
|
|
407
|
+
}
|
|
408
|
+
} else if (settlement === null) {
|
|
409
|
+
settlement = { status: "pending" };
|
|
410
|
+
changed = true;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
const complete = floor !== null && isCeiling(ceiling) && isSettlement(settlement);
|
|
415
|
+
if (complete || Date.now() + 2_000 > deadline) break;
|
|
416
|
+
await sleep(2_000);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
return {
|
|
420
|
+
export: buildExport({ proof, tree: exp.tree, floor, ceiling, settlement }),
|
|
421
|
+
changed,
|
|
422
|
+
floor: floor !== null ? "present" : "absent",
|
|
423
|
+
ceiling: isCeiling(ceiling) ? "present" : "pending",
|
|
424
|
+
settlement: isSettlement(settlement) ? "present" : "pending",
|
|
425
|
+
notes: [...notes],
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
function samePending(s: BitGraphExport["settlement"], p: { status: "pending"; baseBlock: number }): boolean {
|
|
430
|
+
return s !== null && (s as { status?: unknown }).status === "pending" && (s as { baseBlock?: unknown }).baseBlock === p.baseBlock;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
function urlSafe(b64: string): string {
|
|
434
|
+
return b64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
435
|
+
}
|