@mikeargento/bitgraph-audit 0.1.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 (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/anchors.d.ts +31 -0
  4. package/dist/anchors.d.ts.map +1 -0
  5. package/dist/anchors.js +116 -0
  6. package/dist/anchors.js.map +1 -0
  7. package/dist/anomalies.d.ts +42 -0
  8. package/dist/anomalies.d.ts.map +1 -0
  9. package/dist/anomalies.js +642 -0
  10. package/dist/anomalies.js.map +1 -0
  11. package/dist/attestation.d.ts +20 -0
  12. package/dist/attestation.d.ts.map +1 -0
  13. package/dist/attestation.js +795 -0
  14. package/dist/attestation.js.map +1 -0
  15. package/dist/audit.d.ts +19 -0
  16. package/dist/audit.d.ts.map +1 -0
  17. package/dist/audit.js +116 -0
  18. package/dist/audit.js.map +1 -0
  19. package/dist/authority.d.ts +37 -0
  20. package/dist/authority.d.ts.map +1 -0
  21. package/dist/authority.js +126 -0
  22. package/dist/authority.js.map +1 -0
  23. package/dist/aws-nitro-root-ca.d.ts +24 -0
  24. package/dist/aws-nitro-root-ca.d.ts.map +1 -0
  25. package/dist/aws-nitro-root-ca.js +44 -0
  26. package/dist/aws-nitro-root-ca.js.map +1 -0
  27. package/dist/cli.d.ts +3 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +257 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/contents-hash.d.ts +30 -0
  32. package/dist/contents-hash.d.ts.map +1 -0
  33. package/dist/contents-hash.js +73 -0
  34. package/dist/contents-hash.js.map +1 -0
  35. package/dist/export.d.ts +64 -0
  36. package/dist/export.d.ts.map +1 -0
  37. package/dist/export.js +192 -0
  38. package/dist/export.js.map +1 -0
  39. package/dist/index.d.ts +31 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +17 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/ingest.d.ts +36 -0
  44. package/dist/ingest.d.ts.map +1 -0
  45. package/dist/ingest.js +828 -0
  46. package/dist/ingest.js.map +1 -0
  47. package/dist/reconstruct.d.ts +40 -0
  48. package/dist/reconstruct.d.ts.map +1 -0
  49. package/dist/reconstruct.js +400 -0
  50. package/dist/reconstruct.js.map +1 -0
  51. package/dist/report-json.d.ts +3 -0
  52. package/dist/report-json.d.ts.map +1 -0
  53. package/dist/report-json.js +290 -0
  54. package/dist/report-json.js.map +1 -0
  55. package/dist/report-md.d.ts +3 -0
  56. package/dist/report-md.d.ts.map +1 -0
  57. package/dist/report-md.js +853 -0
  58. package/dist/report-md.js.map +1 -0
  59. package/dist/rlp.d.ts +37 -0
  60. package/dist/rlp.d.ts.map +1 -0
  61. package/dist/rlp.js +120 -0
  62. package/dist/rlp.js.map +1 -0
  63. package/dist/tar.d.ts +47 -0
  64. package/dist/tar.d.ts.map +1 -0
  65. package/dist/tar.js +483 -0
  66. package/dist/tar.js.map +1 -0
  67. package/dist/temporal.d.ts +55 -0
  68. package/dist/temporal.d.ts.map +1 -0
  69. package/dist/temporal.js +461 -0
  70. package/dist/temporal.js.map +1 -0
  71. package/dist/types.d.ts +1389 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +3 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/validity.d.ts +21 -0
  76. package/dist/validity.d.ts.map +1 -0
  77. package/dist/validity.js +86 -0
  78. package/dist/validity.js.map +1 -0
  79. package/dist/verify-tiers.d.ts +11 -0
  80. package/dist/verify-tiers.d.ts.map +1 -0
  81. package/dist/verify-tiers.js +120 -0
  82. package/dist/verify-tiers.js.map +1 -0
  83. package/dist/witness.d.ts +25 -0
  84. package/dist/witness.d.ts.map +1 -0
  85. package/dist/witness.js +308 -0
  86. package/dist/witness.js.map +1 -0
  87. package/package.json +42 -0
  88. package/src/anchors.ts +168 -0
  89. package/src/anomalies.ts +773 -0
  90. package/src/attestation.ts +878 -0
  91. package/src/audit.ts +136 -0
  92. package/src/authority.ts +165 -0
  93. package/src/aws-nitro-root-ca.ts +47 -0
  94. package/src/cli.ts +284 -0
  95. package/src/contents-hash.ts +95 -0
  96. package/src/export.ts +278 -0
  97. package/src/index.ts +122 -0
  98. package/src/ingest.ts +967 -0
  99. package/src/reconstruct.ts +491 -0
  100. package/src/report-json.ts +331 -0
  101. package/src/report-md.ts +1067 -0
  102. package/src/rlp.ts +142 -0
  103. package/src/tar.ts +587 -0
  104. package/src/temporal.ts +629 -0
  105. package/src/types.ts +1528 -0
  106. package/src/validity.ts +90 -0
  107. package/src/verify-tiers.ts +137 -0
  108. package/src/witness.ts +407 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness.js","sourceRoot":"","sources":["../src/witness.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@mikeargento/bitgraph-audit",
3
+ "version": "0.1.0",
4
+ "description": "Offline audit of BitGraph proof bundles: ingest, tiered verification, causal reconstruction, divergence reporting.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "bin": {
10
+ "bitgraph-audit": "./dist/cli.js"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "src",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "prepack": "tsc",
27
+ "typecheck": "tsc --noEmit",
28
+ "bench": "node scripts/bench-audit.mjs"
29
+ },
30
+ "engines": {
31
+ "node": ">=20"
32
+ },
33
+ "dependencies": {
34
+ "@mikeargento/bitgraph-verify": "^1.1.0",
35
+ "@noble/hashes": "^1.4.0"
36
+ },
37
+ "devDependencies": {
38
+ "@noble/ed25519": "^2.1.0",
39
+ "@types/node": "^20.0.0",
40
+ "typescript": "^5.4.0"
41
+ }
42
+ }
package/src/anchors.ts ADDED
@@ -0,0 +1,168 @@
1
+ // Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
2
+
3
+ /**
4
+ * bitgraph-audit anchor identification (G5)
5
+ *
6
+ * Ethereum anchors are ordinary chain members minted by the anchor
7
+ * service: same counter sequence, same prevB64 links, same signing key as
8
+ * every other proof on the chain. What makes a proof an anchor is the
9
+ * SIGNED attribution:
10
+ *
11
+ * - attribution.name === "Ethereum Anchor" is the discriminator.
12
+ * - attribution.message carries the Ethereum block hash string.
13
+ * - attribution.title carries the block number, only inside the signed
14
+ * Etherscan URL.
15
+ * - artifact.digestB64 is SHA-256 over the block-hash STRING.
16
+ *
17
+ * The unsigned metadata.type === "ethereum-anchor" is corroboration only:
18
+ * agreement and disagreement are recorded, and metadata alone never makes
19
+ * a proof an anchor. The unsigned metadata.anchor block timestamp is
20
+ * never read; wall-clock evidence comes exclusively from verified anchor
21
+ * witnesses (witness.ts). No wall-clock time is ever derived from a block
22
+ * number.
23
+ *
24
+ * Run after verifyObservedProofs so the records carry the run
25
+ * verification status; identification itself reads only the signed body.
26
+ */
27
+
28
+ import type {
29
+ AnchorIdentification,
30
+ AnchorRecord,
31
+ AuditFinding,
32
+ IngestResult,
33
+ ObservedProof,
34
+ } from "./types.js";
35
+
36
+ const ANCHOR_ATTRIBUTION_NAME = "Ethereum Anchor";
37
+ const ANCHOR_METADATA_TYPE = "ethereum-anchor";
38
+
39
+ /**
40
+ * Strict Etherscan block URL, the exact form the anchor service signs
41
+ * (packages/hosted/src/bitcoin-anchor.ts): https://etherscan.io/block/{n}.
42
+ * Anything else is reported unparseable and the block number treated as
43
+ * absent, never guessed.
44
+ */
45
+ const ETHERSCAN_BLOCK_URL = /^https:\/\/etherscan\.io\/block\/([0-9]+)$/;
46
+
47
+ /**
48
+ * Identify anchor proofs among the observed proofs. Read-only and
49
+ * deterministic (observation order).
50
+ */
51
+ export function identifyAnchors(ingest: IngestResult): AnchorIdentification {
52
+ const anchors: AnchorRecord[] = [];
53
+ const metadataOnlyProofHashes: string[] = [];
54
+ const findings: AuditFinding[] = [];
55
+
56
+ for (const proof of ingest.proofs) {
57
+ const attributionName = readAttributionField(proof, "name");
58
+ const metadataType = readMetadataType(proof);
59
+ const signedAnchor = attributionName === ANCHOR_ATTRIBUTION_NAME;
60
+
61
+ if (!signedAnchor) {
62
+ if (metadataType === ANCHOR_METADATA_TYPE) {
63
+ // Unsigned claim with no signed backing: recorded, never trusted.
64
+ metadataOnlyProofHashes.push(proof.proofHash);
65
+ findings.push({
66
+ code: "anchor-metadata-only-claim",
67
+ ...pathOf(proof),
68
+ message:
69
+ "unsigned metadata.type claims ethereum-anchor, but the signed attribution does not " +
70
+ "identify this proof as an anchor. Metadata is advisory and unsigned; the proof is " +
71
+ "not treated as an anchor.",
72
+ details: { proofHash: proof.proofHash },
73
+ });
74
+ }
75
+ continue;
76
+ }
77
+
78
+ // Corroboration between the signed discriminator and the unsigned
79
+ // metadata. Only a present-but-different type disagrees; an absent
80
+ // type is simply absent corroboration.
81
+ const corroboration =
82
+ metadataType === ANCHOR_METADATA_TYPE
83
+ ? ("agrees" as const)
84
+ : metadataType === undefined
85
+ ? ("absent" as const)
86
+ : ("disagrees" as const);
87
+ if (corroboration === "disagrees") {
88
+ findings.push({
89
+ code: "anchor-metadata-disagreement",
90
+ ...pathOf(proof),
91
+ message:
92
+ `signed attribution identifies an Ethereum anchor, but unsigned metadata.type is ` +
93
+ `${JSON.stringify(metadataType)}. The signed field governs; the disagreement is recorded.`,
94
+ details: { proofHash: proof.proofHash, metadataType: metadataType as string },
95
+ });
96
+ }
97
+
98
+ const blockHash = readAttributionField(proof, "message");
99
+ const title = readAttributionField(proof, "title");
100
+ const blockNumber = title !== undefined ? (ETHERSCAN_BLOCK_URL.exec(title)?.[1] ?? undefined) : undefined;
101
+ if (blockNumber === undefined) {
102
+ findings.push({
103
+ code: "anchor-title-unparseable",
104
+ ...pathOf(proof),
105
+ message:
106
+ title === undefined
107
+ ? "anchor proof carries no signed attribution.title; the signed block number is absent"
108
+ : "anchor attribution.title does not parse as an Etherscan block URL; the signed block number is treated as absent",
109
+ details: {
110
+ proofHash: proof.proofHash,
111
+ ...(title !== undefined ? { title } : {}),
112
+ },
113
+ });
114
+ }
115
+
116
+ const verification = proof.verification;
117
+ anchors.push({
118
+ proofHash: proof.proofHash,
119
+ ...(proof.epochId !== undefined ? { epochId: proof.epochId } : {}),
120
+ chainId: proof.chainId,
121
+ ...(proof.counter !== undefined ? { counter: proof.counter } : {}),
122
+ ...(proof.slotCounter !== undefined ? { slotCounter: proof.slotCounter } : {}),
123
+ ...(blockHash !== undefined ? { blockHash } : {}),
124
+ ...(blockNumber !== undefined ? { blockNumber } : {}),
125
+ metadataCorroboration: corroboration,
126
+ ...(verification !== undefined
127
+ ? {
128
+ verificationTier: verification.tier,
129
+ verificationStatus: verification.status,
130
+ ...(verification.reason !== undefined ? { verificationReason: verification.reason } : {}),
131
+ }
132
+ : {}),
133
+ });
134
+ }
135
+
136
+ return { anchors, metadataOnlyProofHashes, findings };
137
+ }
138
+
139
+ // ---------------------------------------------------------------------------
140
+ // Field readers (tolerant: structural problems belong to the verification
141
+ // dimension, not to anchor identification)
142
+ // ---------------------------------------------------------------------------
143
+
144
+ function readAttributionField(
145
+ proof: ObservedProof,
146
+ field: "name" | "title" | "message"
147
+ ): string | undefined {
148
+ const attribution = (proof.proof as unknown as Record<string, unknown>)["attribution"];
149
+ if (attribution === null || typeof attribution !== "object" || Array.isArray(attribution)) {
150
+ return undefined;
151
+ }
152
+ const value = (attribution as Record<string, unknown>)[field];
153
+ return typeof value === "string" ? value : undefined;
154
+ }
155
+
156
+ function readMetadataType(proof: ObservedProof): string | undefined {
157
+ const metadata = (proof.proof as unknown as Record<string, unknown>)["metadata"];
158
+ if (metadata === null || typeof metadata !== "object" || Array.isArray(metadata)) {
159
+ return undefined;
160
+ }
161
+ const value = (metadata as Record<string, unknown>)["type"];
162
+ return typeof value === "string" ? value : undefined;
163
+ }
164
+
165
+ function pathOf(proof: ObservedProof): { path?: string } {
166
+ const path = proof.sources[0]?.path;
167
+ return path !== undefined ? { path } : {};
168
+ }