@mikeargento/bitgraph 1.9.1 → 1.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.
Files changed (248) hide show
  1. package/README.md +21 -21
  2. package/dist/fuse-cli.js +2 -2
  3. package/dist/fuse-cli.js.map +1 -1
  4. package/dist/fuse.d.ts +15 -1
  5. package/dist/fuse.d.ts.map +1 -1
  6. package/dist/fuse.js +29 -12
  7. package/dist/fuse.js.map +1 -1
  8. package/package.json +12 -8
  9. package/src/fuse-cli.ts +2 -2
  10. package/src/fuse.ts +46 -13
  11. package/dist/__tests__/audit-anchors.test.d.ts +0 -2
  12. package/dist/__tests__/audit-anchors.test.d.ts.map +0 -1
  13. package/dist/__tests__/audit-anchors.test.js +0 -152
  14. package/dist/__tests__/audit-anchors.test.js.map +0 -1
  15. package/dist/__tests__/audit-anomalies.test.d.ts +0 -2
  16. package/dist/__tests__/audit-anomalies.test.d.ts.map +0 -1
  17. package/dist/__tests__/audit-anomalies.test.js +0 -663
  18. package/dist/__tests__/audit-anomalies.test.js.map +0 -1
  19. package/dist/__tests__/audit-attestation.test.d.ts +0 -2
  20. package/dist/__tests__/audit-attestation.test.d.ts.map +0 -1
  21. package/dist/__tests__/audit-attestation.test.js +0 -403
  22. package/dist/__tests__/audit-attestation.test.js.map +0 -1
  23. package/dist/__tests__/audit-bench-smoke.test.d.ts +0 -2
  24. package/dist/__tests__/audit-bench-smoke.test.d.ts.map +0 -1
  25. package/dist/__tests__/audit-bench-smoke.test.js +0 -87
  26. package/dist/__tests__/audit-bench-smoke.test.js.map +0 -1
  27. package/dist/__tests__/audit-boundary.test.d.ts +0 -20
  28. package/dist/__tests__/audit-boundary.test.d.ts.map +0 -1
  29. package/dist/__tests__/audit-boundary.test.js +0 -84
  30. package/dist/__tests__/audit-boundary.test.js.map +0 -1
  31. package/dist/__tests__/audit-cli.test.d.ts +0 -2
  32. package/dist/__tests__/audit-cli.test.d.ts.map +0 -1
  33. package/dist/__tests__/audit-cli.test.js +0 -239
  34. package/dist/__tests__/audit-cli.test.js.map +0 -1
  35. package/dist/__tests__/audit-dependencies.test.d.ts +0 -2
  36. package/dist/__tests__/audit-dependencies.test.d.ts.map +0 -1
  37. package/dist/__tests__/audit-dependencies.test.js +0 -116
  38. package/dist/__tests__/audit-dependencies.test.js.map +0 -1
  39. package/dist/__tests__/audit-fixtures.d.ts +0 -265
  40. package/dist/__tests__/audit-fixtures.d.ts.map +0 -1
  41. package/dist/__tests__/audit-fixtures.js +0 -511
  42. package/dist/__tests__/audit-fixtures.js.map +0 -1
  43. package/dist/__tests__/audit-ingest.test.d.ts +0 -2
  44. package/dist/__tests__/audit-ingest.test.d.ts.map +0 -1
  45. package/dist/__tests__/audit-ingest.test.js +0 -473
  46. package/dist/__tests__/audit-ingest.test.js.map +0 -1
  47. package/dist/__tests__/audit-memory-ingest.test.d.ts +0 -12
  48. package/dist/__tests__/audit-memory-ingest.test.d.ts.map +0 -1
  49. package/dist/__tests__/audit-memory-ingest.test.js +0 -135
  50. package/dist/__tests__/audit-memory-ingest.test.js.map +0 -1
  51. package/dist/__tests__/audit-property.test.d.ts +0 -2
  52. package/dist/__tests__/audit-property.test.d.ts.map +0 -1
  53. package/dist/__tests__/audit-property.test.js +0 -771
  54. package/dist/__tests__/audit-property.test.js.map +0 -1
  55. package/dist/__tests__/audit-real-fixtures.test.d.ts +0 -2
  56. package/dist/__tests__/audit-real-fixtures.test.d.ts.map +0 -1
  57. package/dist/__tests__/audit-real-fixtures.test.js +0 -132
  58. package/dist/__tests__/audit-real-fixtures.test.js.map +0 -1
  59. package/dist/__tests__/audit-real-live.test.d.ts +0 -2
  60. package/dist/__tests__/audit-real-live.test.d.ts.map +0 -1
  61. package/dist/__tests__/audit-real-live.test.js +0 -107
  62. package/dist/__tests__/audit-real-live.test.js.map +0 -1
  63. package/dist/__tests__/audit-reconstruct.test.d.ts +0 -2
  64. package/dist/__tests__/audit-reconstruct.test.d.ts.map +0 -1
  65. package/dist/__tests__/audit-reconstruct.test.js +0 -287
  66. package/dist/__tests__/audit-reconstruct.test.js.map +0 -1
  67. package/dist/__tests__/audit-report.test.d.ts +0 -2
  68. package/dist/__tests__/audit-report.test.d.ts.map +0 -1
  69. package/dist/__tests__/audit-report.test.js +0 -186
  70. package/dist/__tests__/audit-report.test.js.map +0 -1
  71. package/dist/__tests__/audit-roundtrip.test.d.ts +0 -2
  72. package/dist/__tests__/audit-roundtrip.test.d.ts.map +0 -1
  73. package/dist/__tests__/audit-roundtrip.test.js +0 -368
  74. package/dist/__tests__/audit-roundtrip.test.js.map +0 -1
  75. package/dist/__tests__/audit-temporal.test.d.ts +0 -2
  76. package/dist/__tests__/audit-temporal.test.d.ts.map +0 -1
  77. package/dist/__tests__/audit-temporal.test.js +0 -364
  78. package/dist/__tests__/audit-temporal.test.js.map +0 -1
  79. package/dist/__tests__/audit-tiers.test.d.ts +0 -2
  80. package/dist/__tests__/audit-tiers.test.d.ts.map +0 -1
  81. package/dist/__tests__/audit-tiers.test.js +0 -282
  82. package/dist/__tests__/audit-tiers.test.js.map +0 -1
  83. package/dist/__tests__/audit-witness-real.test.d.ts +0 -19
  84. package/dist/__tests__/audit-witness-real.test.d.ts.map +0 -1
  85. package/dist/__tests__/audit-witness-real.test.js +0 -82
  86. package/dist/__tests__/audit-witness-real.test.js.map +0 -1
  87. package/dist/__tests__/audit-witness.test.d.ts +0 -2
  88. package/dist/__tests__/audit-witness.test.d.ts.map +0 -1
  89. package/dist/__tests__/audit-witness.test.js +0 -308
  90. package/dist/__tests__/audit-witness.test.js.map +0 -1
  91. package/dist/__tests__/canonical.test.d.ts +0 -2
  92. package/dist/__tests__/canonical.test.d.ts.map +0 -1
  93. package/dist/__tests__/canonical.test.js +0 -162
  94. package/dist/__tests__/canonical.test.js.map +0 -1
  95. package/dist/__tests__/chain-hash-anchor.test.d.ts +0 -22
  96. package/dist/__tests__/chain-hash-anchor.test.d.ts.map +0 -1
  97. package/dist/__tests__/chain-hash-anchor.test.js +0 -55
  98. package/dist/__tests__/chain-hash-anchor.test.js.map +0 -1
  99. package/dist/__tests__/commit-service.integration.test.d.ts +0 -2
  100. package/dist/__tests__/commit-service.integration.test.d.ts.map +0 -1
  101. package/dist/__tests__/commit-service.integration.test.js +0 -95
  102. package/dist/__tests__/commit-service.integration.test.js.map +0 -1
  103. package/dist/__tests__/constructor.test.d.ts +0 -2
  104. package/dist/__tests__/constructor.test.d.ts.map +0 -1
  105. package/dist/__tests__/constructor.test.js +0 -267
  106. package/dist/__tests__/constructor.test.js.map +0 -1
  107. package/dist/__tests__/declared-proof-fixture.d.ts +0 -66
  108. package/dist/__tests__/declared-proof-fixture.d.ts.map +0 -1
  109. package/dist/__tests__/declared-proof-fixture.js +0 -66
  110. package/dist/__tests__/declared-proof-fixture.js.map +0 -1
  111. package/dist/__tests__/fuse-inline.test.d.ts +0 -2
  112. package/dist/__tests__/fuse-inline.test.d.ts.map +0 -1
  113. package/dist/__tests__/fuse-inline.test.js +0 -181
  114. package/dist/__tests__/fuse-inline.test.js.map +0 -1
  115. package/dist/__tests__/fuse-placement.test.d.ts +0 -2
  116. package/dist/__tests__/fuse-placement.test.d.ts.map +0 -1
  117. package/dist/__tests__/fuse-placement.test.js +0 -31
  118. package/dist/__tests__/fuse-placement.test.js.map +0 -1
  119. package/dist/__tests__/fuse-roundtrip.test.d.ts +0 -2
  120. package/dist/__tests__/fuse-roundtrip.test.d.ts.map +0 -1
  121. package/dist/__tests__/fuse-roundtrip.test.js +0 -241
  122. package/dist/__tests__/fuse-roundtrip.test.js.map +0 -1
  123. package/dist/__tests__/fuse-sdk.test.d.ts +0 -2
  124. package/dist/__tests__/fuse-sdk.test.d.ts.map +0 -1
  125. package/dist/__tests__/fuse-sdk.test.js +0 -117
  126. package/dist/__tests__/fuse-sdk.test.js.map +0 -1
  127. package/dist/__tests__/fuse-set-sdk.test.d.ts +0 -2
  128. package/dist/__tests__/fuse-set-sdk.test.d.ts.map +0 -1
  129. package/dist/__tests__/fuse-set-sdk.test.js +0 -721
  130. package/dist/__tests__/fuse-set-sdk.test.js.map +0 -1
  131. package/dist/__tests__/fuse-set.test.d.ts +0 -2
  132. package/dist/__tests__/fuse-set.test.d.ts.map +0 -1
  133. package/dist/__tests__/fuse-set.test.js +0 -889
  134. package/dist/__tests__/fuse-set.test.js.map +0 -1
  135. package/dist/__tests__/fuse-set2.test.d.ts +0 -2
  136. package/dist/__tests__/fuse-set2.test.d.ts.map +0 -1
  137. package/dist/__tests__/fuse-set2.test.js +0 -294
  138. package/dist/__tests__/fuse-set2.test.js.map +0 -1
  139. package/dist/__tests__/fuse-vectors.test.d.ts +0 -2
  140. package/dist/__tests__/fuse-vectors.test.d.ts.map +0 -1
  141. package/dist/__tests__/fuse-vectors.test.js +0 -175
  142. package/dist/__tests__/fuse-vectors.test.js.map +0 -1
  143. package/dist/__tests__/fuse-verify.test.d.ts +0 -2
  144. package/dist/__tests__/fuse-verify.test.d.ts.map +0 -1
  145. package/dist/__tests__/fuse-verify.test.js +0 -250
  146. package/dist/__tests__/fuse-verify.test.js.map +0 -1
  147. package/dist/__tests__/hello-world.test.d.ts +0 -2
  148. package/dist/__tests__/hello-world.test.d.ts.map +0 -1
  149. package/dist/__tests__/hello-world.test.js +0 -9
  150. package/dist/__tests__/hello-world.test.js.map +0 -1
  151. package/dist/__tests__/mock-proof-fixture.d.ts +0 -15
  152. package/dist/__tests__/mock-proof-fixture.d.ts.map +0 -1
  153. package/dist/__tests__/mock-proof-fixture.js +0 -34
  154. package/dist/__tests__/mock-proof-fixture.js.map +0 -1
  155. package/dist/__tests__/policy-enforcement.test.d.ts +0 -2
  156. package/dist/__tests__/policy-enforcement.test.d.ts.map +0 -1
  157. package/dist/__tests__/policy-enforcement.test.js +0 -188
  158. package/dist/__tests__/policy-enforcement.test.js.map +0 -1
  159. package/dist/__tests__/proof-hash-regression.test.d.ts +0 -2
  160. package/dist/__tests__/proof-hash-regression.test.d.ts.map +0 -1
  161. package/dist/__tests__/proof-hash-regression.test.js +0 -95
  162. package/dist/__tests__/proof-hash-regression.test.js.map +0 -1
  163. package/dist/__tests__/proof-hash.test.d.ts +0 -2
  164. package/dist/__tests__/proof-hash.test.d.ts.map +0 -1
  165. package/dist/__tests__/proof-hash.test.js +0 -116
  166. package/dist/__tests__/proof-hash.test.js.map +0 -1
  167. package/dist/__tests__/proof-integrity.test.d.ts +0 -2
  168. package/dist/__tests__/proof-integrity.test.d.ts.map +0 -1
  169. package/dist/__tests__/proof-integrity.test.js +0 -454
  170. package/dist/__tests__/proof-integrity.test.js.map +0 -1
  171. package/dist/__tests__/realistic-proof-fixture.d.ts +0 -56
  172. package/dist/__tests__/realistic-proof-fixture.d.ts.map +0 -1
  173. package/dist/__tests__/realistic-proof-fixture.js +0 -57
  174. package/dist/__tests__/realistic-proof-fixture.js.map +0 -1
  175. package/dist/__tests__/run.test.d.ts +0 -2
  176. package/dist/__tests__/run.test.d.ts.map +0 -1
  177. package/dist/__tests__/run.test.js +0 -178
  178. package/dist/__tests__/run.test.js.map +0 -1
  179. package/dist/__tests__/verifier.test.d.ts +0 -2
  180. package/dist/__tests__/verifier.test.d.ts.map +0 -1
  181. package/dist/__tests__/verifier.test.js +0 -531
  182. package/dist/__tests__/verifier.test.js.map +0 -1
  183. package/dist/canonical.d.ts +0 -54
  184. package/dist/canonical.d.ts.map +0 -1
  185. package/dist/canonical.js +0 -119
  186. package/dist/canonical.js.map +0 -1
  187. package/dist/proof-hash.d.ts +0 -9
  188. package/dist/proof-hash.d.ts.map +0 -1
  189. package/dist/proof-hash.js +0 -75
  190. package/dist/proof-hash.js.map +0 -1
  191. package/dist/types.d.ts +0 -705
  192. package/dist/types.d.ts.map +0 -1
  193. package/dist/types.js +0 -3
  194. package/dist/types.js.map +0 -1
  195. package/dist/verifier.d.ts +0 -27
  196. package/dist/verifier.d.ts.map +0 -1
  197. package/dist/verifier.js +0 -844
  198. package/dist/verifier.js.map +0 -1
  199. package/src/__tests__/audit-anchors.test.ts +0 -188
  200. package/src/__tests__/audit-anomalies.test.ts +0 -815
  201. package/src/__tests__/audit-attestation.test.ts +0 -529
  202. package/src/__tests__/audit-bench-smoke.test.ts +0 -108
  203. package/src/__tests__/audit-boundary.test.ts +0 -96
  204. package/src/__tests__/audit-cli.test.ts +0 -288
  205. package/src/__tests__/audit-dependencies.test.ts +0 -141
  206. package/src/__tests__/audit-fixtures.ts +0 -736
  207. package/src/__tests__/audit-ingest.test.ts +0 -575
  208. package/src/__tests__/audit-memory-ingest.test.ts +0 -156
  209. package/src/__tests__/audit-property.test.ts +0 -892
  210. package/src/__tests__/audit-real-fixtures.test.ts +0 -153
  211. package/src/__tests__/audit-real-live.test.ts +0 -128
  212. package/src/__tests__/audit-reconstruct.test.ts +0 -353
  213. package/src/__tests__/audit-report.test.ts +0 -222
  214. package/src/__tests__/audit-roundtrip.test.ts +0 -464
  215. package/src/__tests__/audit-temporal.test.ts +0 -446
  216. package/src/__tests__/audit-tiers.test.ts +0 -343
  217. package/src/__tests__/audit-witness-real.test.ts +0 -92
  218. package/src/__tests__/audit-witness.test.ts +0 -345
  219. package/src/__tests__/canonical.test.ts +0 -253
  220. package/src/__tests__/chain-hash-anchor.test.ts +0 -67
  221. package/src/__tests__/commit-service.integration.test.ts +0 -117
  222. package/src/__tests__/constructor.test.ts +0 -340
  223. package/src/__tests__/declared-proof-fixture.ts +0 -65
  224. package/src/__tests__/fuse-inline.test.ts +0 -211
  225. package/src/__tests__/fuse-placement.test.ts +0 -32
  226. package/src/__tests__/fuse-roundtrip.test.ts +0 -243
  227. package/src/__tests__/fuse-sdk.test.ts +0 -142
  228. package/src/__tests__/fuse-set-sdk.test.ts +0 -852
  229. package/src/__tests__/fuse-set.test.ts +0 -1027
  230. package/src/__tests__/fuse-set2.test.ts +0 -343
  231. package/src/__tests__/fuse-vectors.test.ts +0 -218
  232. package/src/__tests__/fuse-verify.test.ts +0 -278
  233. package/src/__tests__/hello-world.test.ts +0 -10
  234. package/src/__tests__/mock-proof-fixture.ts +0 -36
  235. package/src/__tests__/policy-enforcement.test.ts +0 -226
  236. package/src/__tests__/proof-hash-regression.test.ts +0 -107
  237. package/src/__tests__/proof-hash.test.ts +0 -129
  238. package/src/__tests__/proof-integrity.test.ts +0 -576
  239. package/src/__tests__/real-fixtures/anchor-after-112762.json +0 -47
  240. package/src/__tests__/real-fixtures/anchor-with-ethereum-112758.json +0 -47
  241. package/src/__tests__/real-fixtures/live-proof-0.json +0 -42
  242. package/src/__tests__/real-fixtures/live-proof-1.json +0 -43
  243. package/src/__tests__/real-fixtures/live-proof-2.json +0 -43
  244. package/src/__tests__/real-fixtures/successor-112760.json +0 -38
  245. package/src/__tests__/real-fixtures/witness-25525146.json +0 -6
  246. package/src/__tests__/real-fixtures/witness-25525147.json +0 -6
  247. package/src/__tests__/realistic-proof-fixture.ts +0 -57
  248. package/src/__tests__/verifier.test.ts +0 -624
@@ -1,364 +0,0 @@
1
- // Copyright (c) Argento Computing Inc. All rights reserved. See LICENSE.
2
- /**
3
- * Temporal bounds tests: verified-witness anchors only, one-sided bounds
4
- * with honest semantics (not-before is grounded in block-hash
5
- * unpredictability; not-after is causal precedence whose wall-clock
6
- * reading carries an explicit freshness assumption), chain-link versus
7
- * counter-order evidence marked, unanchored segments reported, and
8
- * cross-epoch ordering only from non-overlapping covered bounds.
9
- */
10
- import { describe, it, before } from "node:test";
11
- import * as assert from "node:assert/strict";
12
- import { keccak_256 } from "@noble/hashes/sha3";
13
- import { sha256 } from "@noble/hashes/sha256";
14
- import { deriveTemporalBounds, identifyAnchors, ingestBundle, reconstructChains, verifyAnchorWitnesses, verifyObservedProofs, } from "@mikeargento/bitgraph-audit";
15
- import { computeProofHash, computeChainHash } from "@mikeargento/bitgraph-verify";
16
- import { b64, makeAnchorProof, makeEthereumHeader, makeKey, makeTempDir, proofJson, signBody, utf8, witnessJson, writeBundleDir, } from "./audit-fixtures.js";
17
- const T1 = 1_000_000;
18
- const T2 = 2_000_000;
19
- const T3 = 3_000_000;
20
- const T_OVERLAP = 1_500_000;
21
- function header(blockNumber, timestamp) {
22
- const h = makeEthereumHeader({ blockNumber, timestamp });
23
- return { rlpHex: h.headerRlpHex, hash: `0x${Buffer.from(keccak_256(h.headerBytes)).toString("hex")}` };
24
- }
25
- const H1 = header(100, T1);
26
- const H2 = header(101, T2);
27
- const H3 = header(102, T3);
28
- const H4 = header(103, T_OVERLAP);
29
- async function userProof(key, epochId, slot, commit, prevB64) {
30
- const bytes = utf8(`temporal-${epochId}-${commit}`);
31
- const commitBody = {
32
- nonceB64: b64(crypto.getRandomValues(new Uint8Array(16))),
33
- counter: commit,
34
- slotCounter: slot,
35
- ...(prevB64 !== undefined ? { prevB64 } : {}),
36
- epochId,
37
- };
38
- commitBody["chainId"] = "bitgraph:main";
39
- const proof = await signBody(key, { hashAlg: "sha256", digestB64: b64(sha256(bytes)) }, commitBody, "test-measurement-temporal");
40
- return { proof, proofHash: computeProofHash(proof), chainHash: computeChainHash(proof) };
41
- }
42
- let fx;
43
- function segmentOf(hash) {
44
- const segment = fx.analysis.segments.find((s) => s.memberProofHashes.includes(hash));
45
- assert.ok(segment !== undefined, "every partitioned proof lands in a segment");
46
- return segment;
47
- }
48
- before(async () => {
49
- const hashes = {};
50
- const files = {};
51
- // Epoch E1 on one key: P1 <- A1(T1) <- P2 <- A2(T2) <- P3, plus P4 with
52
- // a dangling prevB64 (counter evidence only).
53
- const k1 = await makeKey();
54
- const p1 = await userProof(k1, "E1", "1", "2");
55
- const a1 = await makeAnchorProof({
56
- key: k1,
57
- blockHash: H1.hash,
58
- blockNumber: "100",
59
- epochId: "E1",
60
- counter: "4",
61
- slotCounter: "3",
62
- prevB64: p1.chainHash,
63
- chainId: "bitgraph:main",
64
- });
65
- const p2 = await userProof(k1, "E1", "5", "6", a1.chainHash);
66
- const a2 = await makeAnchorProof({
67
- key: k1,
68
- blockHash: H2.hash,
69
- blockNumber: "101",
70
- epochId: "E1",
71
- counter: "8",
72
- slotCounter: "7",
73
- prevB64: p2.chainHash,
74
- chainId: "bitgraph:main",
75
- });
76
- const p3 = await userProof(k1, "E1", "9", "10", a2.chainHash);
77
- const p4 = await userProof(k1, "E1", "11", "12", b64(sha256(utf8("dangling-predecessor"))));
78
- hashes["P1"] = p1.proofHash;
79
- hashes["A1"] = a1.proofHash;
80
- hashes["P2"] = p2.proofHash;
81
- hashes["A2"] = a2.proofHash;
82
- hashes["P3"] = p3.proofHash;
83
- hashes["P4"] = p4.proofHash;
84
- files["proofs/e1-p1.json"] = proofJson(p1.proof);
85
- files["proofs/e1-a1.json"] = proofJson(a1.proof);
86
- files["proofs/e1-p2.json"] = proofJson(p2.proof);
87
- files["proofs/e1-a2.json"] = proofJson(a2.proof);
88
- files["proofs/e1-p3.json"] = proofJson(p3.proof);
89
- files["proofs/e1-p4.json"] = proofJson(p4.proof);
90
- files["witnesses/h1.json"] = witnessJson({ headerRlpHex: H1.rlpHex, blockNumber: 100, blockHash: H1.hash });
91
- files["witnesses/h2.json"] = witnessJson({ headerRlpHex: H2.rlpHex, blockNumber: 101, blockHash: H2.hash });
92
- // Epoch E2: linked chain, no anchors at all (ordered-but-unanchored).
93
- const k2 = await makeKey();
94
- const q1 = await userProof(k2, "E2", "1", "2");
95
- const q2 = await userProof(k2, "E2", "3", "4", q1.chainHash);
96
- hashes["Q1"] = q1.proofHash;
97
- hashes["Q2"] = q2.proofHash;
98
- files["proofs/e2-q1.json"] = proofJson(q1.proof);
99
- files["proofs/e2-q2.json"] = proofJson(q2.proof);
100
- // Epoch E3: an anchor WITHOUT a witness (causal only, no wall clock).
101
- const k3 = await makeKey();
102
- const a3 = await makeAnchorProof({
103
- key: k3,
104
- blockHash: `0x${"77".repeat(32)}`,
105
- blockNumber: "999",
106
- epochId: "E3",
107
- counter: "2",
108
- slotCounter: "1",
109
- chainId: "bitgraph:main",
110
- });
111
- hashes["A3"] = a3.proofHash;
112
- files["proofs/e3-a3.json"] = proofJson(a3.proof);
113
- // Epoch EB: anchored at T3, all members at or after the anchor: its
114
- // covered lower bound sits above E1's covered upper bound (T2 < T3).
115
- const kb = await makeKey();
116
- const ab = await makeAnchorProof({
117
- key: kb,
118
- blockHash: H3.hash,
119
- blockNumber: "102",
120
- epochId: "EB",
121
- counter: "2",
122
- slotCounter: "1",
123
- chainId: "bitgraph:main",
124
- });
125
- const pb = await userProof(kb, "EB", "3", "4", ab.chainHash);
126
- hashes["AB"] = ab.proofHash;
127
- hashes["PB"] = pb.proofHash;
128
- files["proofs/eb-ab.json"] = proofJson(ab.proof);
129
- files["proofs/eb-pb.json"] = proofJson(pb.proof);
130
- files["witnesses/h3.json"] = witnessJson({ headerRlpHex: H3.rlpHex, blockNumber: 102, blockHash: H3.hash });
131
- // Epoch EC: anchored at T_OVERLAP (between T1 and T2): overlaps E1, so
132
- // no ordering pair may be asserted between E1 and EC.
133
- const kc = await makeKey();
134
- const ac = await makeAnchorProof({
135
- key: kc,
136
- blockHash: H4.hash,
137
- blockNumber: "103",
138
- epochId: "EC",
139
- counter: "2",
140
- slotCounter: "1",
141
- chainId: "bitgraph:main",
142
- });
143
- hashes["AC"] = ac.proofHash;
144
- files["proofs/ec-ac.json"] = proofJson(ac.proof);
145
- files["witnesses/h4.json"] = witnessJson({ headerRlpHex: H4.rlpHex, blockNumber: 103, blockHash: H4.hash });
146
- const dir = await makeTempDir("bg-audit-temporal-");
147
- await writeBundleDir(dir, files);
148
- const ingest = await ingestBundle(dir);
149
- await verifyObservedProofs(ingest);
150
- const reconstruction = await reconstructChains(ingest);
151
- const anchors = identifyAnchors(ingest);
152
- const witnesses = await verifyAnchorWitnesses(ingest, anchors);
153
- const analysis = deriveTemporalBounds(ingest, reconstruction, anchors, witnesses);
154
- fx = { ingest, reconstruction, analysis, hashes };
155
- });
156
- describe("audit temporal: verified anchors only", () => {
157
- it("splits anchors into verified and unverified wall-clock sources", () => {
158
- assert.deepEqual(fx.analysis.verifiedAnchorProofHashes, [fx.hashes["A1"], fx.hashes["A2"], fx.hashes["AB"], fx.hashes["AC"]].sort());
159
- assert.deepEqual(fx.analysis.unverifiedAnchorProofHashes, [fx.hashes["A3"]]);
160
- });
161
- it("an anchor without a verified witness confers no bounds", () => {
162
- const segment = segmentOf(fx.hashes["A3"]);
163
- assert.equal(segment.status, "ordered-but-unanchored");
164
- assert.equal(segment.lowerBounds.length, 0);
165
- assert.equal(segment.upperBounds.length, 0);
166
- });
167
- });
168
- describe("audit temporal: one-sided bounds and brackets along chain links", () => {
169
- it("proofs before the first anchor get only a not-after bound", () => {
170
- const segment = segmentOf(fx.hashes["P1"]);
171
- assert.equal(segment.status, "upper-bounded");
172
- assert.equal(segment.lowerBounds.length, 0);
173
- assert.equal(segment.upperBounds.length, 1);
174
- const bound = segment.upperBounds[0];
175
- assert.equal(bound.kind, "not-after");
176
- assert.equal(bound.anchorProofHash, fx.hashes["A1"]);
177
- assert.equal(bound.timestamp, T1);
178
- assert.equal(bound.evidence, "chain-link");
179
- assert.equal(bound.weaker, false);
180
- assert.equal(bound.basis, "causal-precedence");
181
- // A following inbound anchor is an assumption about anchor latency, never a
182
- // proof-carried upper bound, and the report now says so in a machine field.
183
- assert.equal(bound.boundClass, "assumption");
184
- assert.match(bound.claim, /^NOT a proof-carried upper bound\./);
185
- assert.match(bound.claim, /assumes the anchor consumed a recently published block/);
186
- });
187
- it("proofs between two verified anchors are lower-bounded with a following anchor, by the tightest pair", () => {
188
- const segment = segmentOf(fx.hashes["P2"]);
189
- assert.equal(segment.status, "lower-bounded-with-following-anchor");
190
- // A1 shares the identical bound set (its own block for the lower
191
- // side, A2 for the upper) and groups into the same segment.
192
- assert.ok(segment.memberProofHashes.includes(fx.hashes["A1"]));
193
- const lower = segment.lowerBounds[0];
194
- assert.equal(lower.kind, "not-before");
195
- assert.equal(lower.boundClass, "evidence");
196
- assert.equal(lower.anchorProofHash, fx.hashes["A1"]);
197
- assert.equal(lower.timestamp, T1);
198
- assert.equal(lower.evidence, "chain-link");
199
- assert.equal(lower.basis, "block-hash-unpredictability");
200
- assert.match(lower.claim, /no earlier than/);
201
- // The not-before claim carries the genuine-public-block assumption: the
202
- // offline audit cannot confirm the anchored header is a real Ethereum
203
- // block (no proof-of-work, consensus, or chain-membership check).
204
- assert.match(lower.claim, /genuine, publicly published Ethereum block/);
205
- const upper = segment.upperBounds[0];
206
- assert.equal(upper.anchorProofHash, fx.hashes["A2"]);
207
- assert.equal(upper.timestamp, T2);
208
- });
209
- it("proofs after the last anchor get only the tightest not-before bound", () => {
210
- const segment = segmentOf(fx.hashes["P3"]);
211
- assert.equal(segment.status, "lower-bounded");
212
- assert.equal(segment.upperBounds.length, 0);
213
- const bound = segment.lowerBounds[0];
214
- assert.equal(bound.anchorProofHash, fx.hashes["A2"], "tightest lower is the latest anchor");
215
- assert.equal(bound.timestamp, T2);
216
- assert.equal(bound.evidence, "chain-link");
217
- });
218
- });
219
- describe("audit temporal: counter-only evidence is weaker and marked", () => {
220
- it("a chain-broken proof falls back to counter ordering", () => {
221
- const segment = segmentOf(fx.hashes["P4"]);
222
- assert.equal(segment.status, "lower-bounded");
223
- const bound = segment.lowerBounds[0];
224
- assert.equal(bound.evidence, "counter-order");
225
- assert.equal(bound.weaker, true);
226
- assert.equal(bound.anchorProofHash, fx.hashes["A2"]);
227
- assert.equal(bound.timestamp, T2);
228
- assert.match(bound.claim, /counter discipline/);
229
- });
230
- });
231
- describe("audit temporal: unanchored segments", () => {
232
- it("a partition with no verified anchor evidence is ordered-but-unanchored", () => {
233
- const segment = segmentOf(fx.hashes["Q1"]);
234
- assert.equal(segment.status, "ordered-but-unanchored");
235
- assert.ok(segment.memberProofHashes.includes(fx.hashes["Q2"]));
236
- assert.equal(segment.lowerBounds.length, 0);
237
- assert.equal(segment.upperBounds.length, 0);
238
- });
239
- });
240
- describe("audit temporal: epoch bounds and cross-epoch ordering", () => {
241
- it("populates EpochRecord.anchorBounds with covered one-sided bounds", () => {
242
- const epochs = new Map(fx.reconstruction.epochRelationships.epochs.map((e) => [e.epochId, e]));
243
- const e1 = epochs.get("E1");
244
- assert.ok(e1.anchorBounds !== undefined);
245
- const notBefore = e1.anchorBounds.find((b) => b.kind === "not-before");
246
- assert.equal(notBefore.witnessTimestamp, T1, "conservative representative: minimum lower bound");
247
- assert.equal(notBefore.coverage, "members-after-anchor");
248
- assert.equal(notBefore.coveredProofCount, 5, "A1, P2, A2, P3 by chain, P4 by counter");
249
- assert.equal(notBefore.totalProofCount, 6);
250
- const notAfter = e1.anchorBounds.find((b) => b.kind === "not-after");
251
- assert.equal(notAfter.witnessTimestamp, T2, "conservative representative: maximum upper bound");
252
- assert.equal(notAfter.coverage, "members-before-anchor");
253
- assert.equal(notAfter.coveredProofCount, 3, "P1, A1, P2");
254
- assert.match(notAfter.claim, /assumes the anchor consumed a recently published block/);
255
- const eb = epochs.get("EB");
256
- assert.ok(eb.anchorBounds !== undefined);
257
- assert.equal(eb.anchorBounds.length, 1);
258
- assert.equal(eb.anchorBounds[0].kind, "not-before");
259
- assert.equal(epochs.get("E2").anchorBounds, undefined, "no verified evidence, no bounds");
260
- });
261
- it("derives covered-portion ordering only from non-overlapping bounds", () => {
262
- // E1's covered upper bound (T2) sits strictly below EB's covered
263
- // lower bound (T3): one assumption-dependent pair. EC overlaps E1
264
- // (T_OVERLAP < T2) so no pair is asserted in either direction, and
265
- // overlap is never divergence.
266
- assert.equal(fx.analysis.anchorOrderedPairs.length, 1);
267
- const pair = fx.analysis.anchorOrderedPairs[0];
268
- assert.equal(pair.beforeEpochId, "E1");
269
- assert.equal(pair.afterEpochId, "EB");
270
- assert.equal(pair.upperBoundTimestamp, T2);
271
- assert.equal(pair.lowerBoundTimestamp, T3);
272
- assert.equal(pair.assumptionDependent, true);
273
- assert.equal(pair.beforeCoveredProofCount, 3);
274
- assert.equal(pair.beforeTotalProofCount, 6);
275
- assert.equal(pair.afterCoveredProofCount, 2);
276
- assert.equal(pair.afterTotalProofCount, 2);
277
- assert.match(pair.note, /covered portions only/);
278
- // The existing E1 -> EB pair rests on chain-link evidence on both sides.
279
- assert.equal(pair.upperEvidence, "chain-link");
280
- assert.equal(pair.lowerEvidence, "chain-link");
281
- assert.equal(pair.weaker, false);
282
- });
283
- });
284
- describe("audit temporal: cross-epoch ordering carries its evidence class", () => {
285
- it("a pair whose before-side rests on counter-order is marked weaker with the caveat", async () => {
286
- const T_LOW = 2_000_000;
287
- const T_HIGH = 3_000_000;
288
- const hLow = header(200, T_LOW);
289
- const hHigh = header(201, T_HIGH);
290
- // Epoch WA: a user proof PW (lower counter, no chain link to the
291
- // anchor) plus a genesis anchor AW. PW is bounded not-after AW only by
292
- // commit-counter ordering, so WA's covered not-after rests on the
293
- // weaker evidence class.
294
- const ka = await makeKey();
295
- const pw = await userProof(ka, "WA", "1", "2"); // genesis, counter 2
296
- const aw = await makeAnchorProof({
297
- key: ka,
298
- blockHash: hLow.hash,
299
- blockNumber: "200",
300
- epochId: "WA",
301
- counter: "10",
302
- slotCounter: "9",
303
- chainId: "bitgraph:main",
304
- });
305
- // Epoch WB: an anchor AB and its chain-linked successor PB, both
306
- // bounded not-before AB by a verified hash-link path.
307
- const kb = await makeKey();
308
- const ab = await makeAnchorProof({
309
- key: kb,
310
- blockHash: hHigh.hash,
311
- blockNumber: "201",
312
- epochId: "WB",
313
- counter: "2",
314
- slotCounter: "1",
315
- chainId: "bitgraph:main",
316
- });
317
- const pb = await userProof(kb, "WB", "3", "4", ab.chainHash);
318
- const dir = await makeTempDir("bg-audit-temporal-weaker-");
319
- await writeBundleDir(dir, {
320
- "proofs/wa-pw.json": proofJson(pw.proof),
321
- "proofs/wa-aw.json": proofJson(aw.proof),
322
- "proofs/wb-ab.json": proofJson(ab.proof),
323
- "proofs/wb-pb.json": proofJson(pb.proof),
324
- "witnesses/low.json": witnessJson({
325
- headerRlpHex: hLow.rlpHex,
326
- blockNumber: 200,
327
- blockHash: hLow.hash,
328
- }),
329
- "witnesses/high.json": witnessJson({
330
- headerRlpHex: hHigh.rlpHex,
331
- blockNumber: 201,
332
- blockHash: hHigh.hash,
333
- }),
334
- });
335
- const ingest = await ingestBundle(dir);
336
- await verifyObservedProofs(ingest);
337
- const reconstruction = await reconstructChains(ingest);
338
- const anchors = identifyAnchors(ingest);
339
- const witnesses = await verifyAnchorWitnesses(ingest, anchors);
340
- const analysis = deriveTemporalBounds(ingest, reconstruction, anchors, witnesses);
341
- // Exactly one cross-epoch ordering pair, WA before WB, marked weaker
342
- // because the before side (WA's covered not-after) rests on
343
- // counter-order evidence.
344
- assert.equal(analysis.anchorOrderedPairs.length, 1);
345
- const pair = analysis.anchorOrderedPairs[0];
346
- assert.equal(pair.beforeEpochId, "WA");
347
- assert.equal(pair.afterEpochId, "WB");
348
- assert.equal(pair.upperEvidence, "counter-order");
349
- assert.equal(pair.lowerEvidence, "chain-link");
350
- assert.equal(pair.weaker, true);
351
- assert.match(pair.note, /weaker evidence/);
352
- // WA's covered not-after epoch bound carries the evidence class and the
353
- // weaker-evidence caveat in its own claim string (so the JSON report
354
- // and the markdown both state it).
355
- const wa = reconstruction.epochRelationships.epochs.find((e) => e.epochId === "WA");
356
- assert.ok(wa?.anchorBounds !== undefined);
357
- const notAfter = wa.anchorBounds.find((b) => b.kind === "not-after");
358
- assert.ok(notAfter !== undefined);
359
- assert.equal(notAfter.evidence, "counter-order");
360
- assert.equal(notAfter.weaker, true);
361
- assert.match(notAfter.claim, /weaker evidence/);
362
- });
363
- });
364
- //# sourceMappingURL=audit-temporal.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-temporal.test.js","sourceRoot":"","sources":["../../src/__tests__/audit-temporal.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=audit-tiers.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-tiers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/audit-tiers.test.ts"],"names":[],"mappings":""}