@secondlayer/verify 0.3.0 → 0.4.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 CHANGED
@@ -30,23 +30,22 @@ bun add @secondlayer/verify
30
30
  ```ts
31
31
  import { SecondlayerProofSource, verifyBlock } from "@secondlayer/verify";
32
32
 
33
- const source = new SecondlayerProofSource({
34
- baseUrl: "https://api.secondlayer.tools",
35
- apiKey: process.env.SECONDLAYER_API_KEY!, // any account key; proofs are never billed
36
- });
33
+ const source = new SecondlayerProofSource(); // hosted API, no key needed
37
34
 
38
35
  const result = await verifyBlock(9_137_005, { source });
39
36
  if (!result.ok) throw new Error(result.failures[0]?.message); // first broken link
40
37
  console.log(result.blockId, result.stateRoot, result.diff?.writes.length);
41
38
  ```
42
39
 
40
+ Limits on the hosted API: 10 requests per second per IP (1 for witnesses). Pass `{ apiKey }` for 20 and 2; `rows: true` needs a key. The package runs in browsers as well as Node.
41
+
43
42
  With your own node, blocks and MARF proofs come from its RPC. Witnesses, burn preimages and Bitcoin headers still come from the API, checked the same way:
44
43
 
45
44
  ```ts
46
45
  import { NodeRpcProofSource } from "@secondlayer/verify";
47
46
 
48
47
  const source = {
49
- ...new SecondlayerProofSource({ baseUrl: "https://api.secondlayer.tools", apiKey }),
48
+ ...new SecondlayerProofSource(),
50
49
  ...new NodeRpcProofSource({ nodeUrl: "http://localhost:20443" }),
51
50
  };
52
51
  ```
@@ -58,7 +57,8 @@ Heights below the checkpoint need no extra options: `verifyBlock(150_000, { sour
58
57
  By default only proofs are read, and proofs are free. That includes the block's state writes (`/v1/proofs/writes/{height}`), which name every written leaf of the diff; `result.writes` holds them and each named `diff.writes` entry carries its proven `value`. A source with no writes for the block (the API answers 404 until its node delivers `state_writes` for that height) leaves the diff proven but unnamed, with a note; it is never a failure. Pass `rows: true` to also check the indexed `vm_events` rows, which bill as Index rows on the Secondlayer API.
59
58
 
60
59
  ```ts
61
- await verifyBlock(9_137_005, { source, rows: true });
60
+ const keyed = new SecondlayerProofSource({ apiKey: process.env.SECONDLAYER_API_KEY });
61
+ await verifyBlock(9_137_005, { source: keyed, rows: true });
62
62
  ```
63
63
 
64
64
  ## What it proves
package/dist/index.d.ts CHANGED
@@ -373,11 +373,16 @@ declare class SourceError extends Error {
373
373
  constructor(url: string, status: number | null, detail: string);
374
374
  }
375
375
  type Fetch = (url: string, init?: RequestInit) => Promise<Response>;
376
+ /** The hosted API. */
377
+ declare const DEFAULT_API_URL = "https://api.secondlayer.tools";
376
378
  interface SecondlayerSourceOptions {
377
- /** API origin, e.g. `https://api.secondlayer.tools`. */
378
- baseUrl: string;
379
- /** Account key, sent as `Authorization: Bearer`. */
380
- apiKey: string;
379
+ /** API origin. Defaults to {@link DEFAULT_API_URL}. */
380
+ baseUrl?: string;
381
+ /**
382
+ * Optional. Proofs are keyless; a key raises the rate limit. Required for
383
+ * `rows: true` (metered Index reads). Sent as `Authorization: Bearer`.
384
+ */
385
+ apiKey?: string;
381
386
  fetch?: Fetch;
382
387
  }
383
388
  /**
@@ -397,7 +402,7 @@ declare class SecondlayerProofSource implements ProofSource {
397
402
  getBitcoinHeaders: (from: number, count: number) => Promise<string[]>;
398
403
  getStateWrites: (height: number) => Promise<StateWrite[] | null>;
399
404
  getVmEvents: (height: number) => Promise<VmEventRow[]>;
400
- constructor(opts: SecondlayerSourceOptions);
405
+ constructor(opts?: SecondlayerSourceOptions);
401
406
  }
402
407
  interface NodeRpcSourceOptions {
403
408
  /** Stacks node RPC origin, e.g. `http://localhost:20443`. */
@@ -722,4 +727,4 @@ declare class BlockVerifier {
722
727
  }
723
728
  /** One-shot: verify a block from a checkpoint (MAINNET_CHECKPOINT by default). */
724
729
  declare const verifyBlock: (ref: string | number, opts: VerifyOptions) => Promise<BlockVerification>;
725
- export { Ancestry, BlockDiff, BlockDiffInput, BlockStateInput, BlockStateResult, BlockTransaction, BlockVerification, BlockVerifier, BurnPreimage, Bytes, Checkpoint, ClassifiedLeaf, DiffLeaf, DiffWrite, Epoch2Header, Epoch2HeaderResponse, HeaderChain, HeaderRule, HeaderValidationError, MAINNET_CHECKPOINT, MAINNET_FIRST_BURN_HEIGHT, MAINNET_PREPARE_LENGTH, MAINNET_REWARD_CYCLE_LENGTH, MarfProofInput, MarfProofResponse, NakamotoHeader, NodeRpcProofSource, NodeRpcSourceOptions, ProofSource, ProvenDiff, SIGNERS_CONTRACT, SecondlayerProofSource, SecondlayerSourceOptions, SignerCheck, SignerSet, SourceError, StacksHeader, StateFailure, StateFailureCode, StateWitness, StateWrite, TransactionsError, VerifyCheckpoint, VerifyFailure, VerifyFailureCode, VerifyOptions, VerifyStep, VmEventRow, WitnessLeaf, blockId2 as blockId, blockTransactions, classifyBlockDiff, cycleStart, dataVarKey, decodeSignerSet, ftBalanceKey, hex, isEpoch2Header, mapEntryKey, marfPath, marfProofAncestors, marfValue, parseEpoch2Header, parseNakamotoHeader, parseWitness, rewardCycle, signerSignatureHash, txMerkleRoot2 as txMerkleRoot, unhex, verifyBlock, verifyBlockState, verifyConsensusPreimage, verifyMarfProof, verifySignerSignatures };
730
+ export { Ancestry, BlockDiff, BlockDiffInput, BlockStateInput, BlockStateResult, BlockTransaction, BlockVerification, BlockVerifier, BurnPreimage, Bytes, Checkpoint, ClassifiedLeaf, DEFAULT_API_URL, DiffLeaf, DiffWrite, Epoch2Header, Epoch2HeaderResponse, HeaderChain, HeaderRule, HeaderValidationError, MAINNET_CHECKPOINT, MAINNET_FIRST_BURN_HEIGHT, MAINNET_PREPARE_LENGTH, MAINNET_REWARD_CYCLE_LENGTH, MarfProofInput, MarfProofResponse, NakamotoHeader, NodeRpcProofSource, NodeRpcSourceOptions, ProofSource, ProvenDiff, SIGNERS_CONTRACT, SecondlayerProofSource, SecondlayerSourceOptions, SignerCheck, SignerSet, SourceError, StacksHeader, StateFailure, StateFailureCode, StateWitness, StateWrite, TransactionsError, VerifyCheckpoint, VerifyFailure, VerifyFailureCode, VerifyOptions, VerifyStep, VmEventRow, WitnessLeaf, blockId2 as blockId, blockTransactions, classifyBlockDiff, cycleStart, dataVarKey, decodeSignerSet, ftBalanceKey, hex, isEpoch2Header, mapEntryKey, marfPath, marfProofAncestors, marfValue, parseEpoch2Header, parseNakamotoHeader, parseWitness, rewardCycle, signerSignatureHash, txMerkleRoot2 as txMerkleRoot, unhex, verifyBlock, verifyBlockState, verifyConsensusPreimage, verifyMarfProof, verifySignerSignatures };
package/dist/index.js CHANGED
@@ -993,7 +993,7 @@ async function get(url, opts, attempt = 1) {
993
993
  }
994
994
  if (res.status === 404)
995
995
  return null;
996
- if (res.status === 503 && attempt < MAX_ATTEMPTS) {
996
+ if ((res.status === 503 || res.status === 429) && attempt < MAX_ATTEMPTS) {
997
997
  const header = res.headers.get("retry-after");
998
998
  const seconds = header === null ? 1 : Number(header);
999
999
  const wait = Number.isFinite(seconds) ? Math.min(Math.max(seconds, 0), MAX_RETRY_SECONDS) : 1;
@@ -1035,6 +1035,7 @@ var toMarf = (url, j) => {
1035
1035
  throw new SourceError(url, 200, "MARF answer needs data and proof");
1036
1036
  return { data: j.data, proof: unhex(proof) };
1037
1037
  };
1038
+ var DEFAULT_API_URL = "https://api.secondlayer.tools";
1038
1039
  var VM_WRITE_TYPES = [
1039
1040
  "var_set",
1040
1041
  "map_set",
@@ -1070,10 +1071,10 @@ class SecondlayerProofSource {
1070
1071
  getBitcoinHeaders;
1071
1072
  getStateWrites;
1072
1073
  getVmEvents;
1073
- constructor(opts) {
1074
- const base = trimSlash(opts.baseUrl);
1074
+ constructor(opts = {}) {
1075
+ const base = trimSlash(opts.baseUrl ?? DEFAULT_API_URL);
1075
1076
  const http = {
1076
- headers: { authorization: `Bearer ${opts.apiKey}` },
1077
+ headers: opts.apiKey ? { authorization: `Bearer ${opts.apiKey}` } : {},
1077
1078
  fetch: opts.fetch
1078
1079
  };
1079
1080
  this.getBlock = async (ref) => {
@@ -1114,9 +1115,12 @@ class SecondlayerProofSource {
1114
1115
  return j.state_writes;
1115
1116
  };
1116
1117
  this.getVmEvents = async (height) => {
1118
+ const eventsUrl = (type) => `${base}/v1/index/events?event_type=${type}&from_height=${height}&to_height=${height}&limit=${PAGE}`;
1119
+ if (!opts.apiKey)
1120
+ throw new SourceError(eventsUrl(VM_WRITE_TYPES[0]), 401, "rows: true reads metered Index events and needs an apiKey");
1117
1121
  const out = [];
1118
1122
  for (const type of VM_WRITE_TYPES) {
1119
- const url = `${base}/v1/index/events?event_type=${type}&from_height=${height}&to_height=${height}&limit=${PAGE}`;
1123
+ const url = eventsUrl(type);
1120
1124
  out.push(...await pages("events", url, http) ?? []);
1121
1125
  }
1122
1126
  return out.sort((a, b) => a.event_index - b.event_index);
@@ -2026,6 +2030,7 @@ function signatureFailure(sig, step, cycle) {
2026
2030
  var verifyBlock = (ref, opts) => new BlockVerifier(opts).verify(ref);
2027
2031
  export {
2028
2032
  BlockVerifier,
2033
+ DEFAULT_API_URL,
2029
2034
  HeaderChain,
2030
2035
  HeaderValidationError,
2031
2036
  MAINNET_CHECKPOINT,
@@ -2064,5 +2069,5 @@ export {
2064
2069
  verifySignerSignatures
2065
2070
  };
2066
2071
 
2067
- //# debugId=AFAA56E81913DBC664756E2164756E21
2072
+ //# debugId=14EE5CF6A37C9A0B64756E2164756E21
2068
2073
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -13,12 +13,12 @@
13
13
  "/**\n * Bitcoin block header wire format: 80 bytes, all integers little-endian.\n *\n * version (i32) | prevHash (32) | merkleRoot (32) | time (u32) | bits (u32) | nonce (u32)\n *\n * Hashes are carried in display order (byte-reversed hex, as bitcoind and\n * explorers print them). `headerHash` returns the natural (internal) byte\n * order, which is what proof-of-work compares as a little-endian integer.\n */\n\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils.js\";\n\nexport const HEADER_SIZE = 80;\n\nexport interface BlockHeader {\n\t/** Signed 32-bit version field. */\n\tversion: number;\n\t/** Display-order hex of the previous block hash. */\n\tprevHash: string;\n\t/** Display-order hex of the merkle root. */\n\tmerkleRoot: string;\n\t/** Unix timestamp, seconds. */\n\ttime: number;\n\t/** Compact-encoded target. */\n\tbits: number;\n\tnonce: number;\n}\n\nfunction toBytes(raw: Uint8Array | string): Uint8Array {\n\treturn typeof raw === \"string\" ? hexToBytes(raw) : raw;\n}\n\n/** Reverses byte order: natural <-> display. Returns a copy. */\nexport function reverseBytes(bytes: Uint8Array): Uint8Array {\n\treturn Uint8Array.from(bytes).reverse();\n}\n\nexport function parseHeader(raw: Uint8Array | string): BlockHeader {\n\tconst bytes = toBytes(raw);\n\tif (bytes.length !== HEADER_SIZE) {\n\t\tthrow new RangeError(\n\t\t\t`block header must be ${HEADER_SIZE} bytes, got ${bytes.length}`,\n\t\t);\n\t}\n\tconst view = new DataView(bytes.buffer, bytes.byteOffset, HEADER_SIZE);\n\treturn {\n\t\tversion: view.getInt32(0, true),\n\t\tprevHash: bytesToHex(reverseBytes(bytes.subarray(4, 36))),\n\t\tmerkleRoot: bytesToHex(reverseBytes(bytes.subarray(36, 68))),\n\t\ttime: view.getUint32(68, true),\n\t\tbits: view.getUint32(72, true),\n\t\tnonce: view.getUint32(76, true),\n\t};\n}\n\nexport function serializeHeader(header: BlockHeader): Uint8Array {\n\tconst bytes = new Uint8Array(HEADER_SIZE);\n\tconst view = new DataView(bytes.buffer);\n\tview.setInt32(0, header.version, true);\n\tbytes.set(reverseBytes(hexToBytes(header.prevHash)), 4);\n\tbytes.set(reverseBytes(hexToBytes(header.merkleRoot)), 36);\n\tview.setUint32(68, header.time, true);\n\tview.setUint32(72, header.bits, true);\n\tview.setUint32(76, header.nonce, true);\n\treturn bytes;\n}\n\n/** Double-SHA256 of the raw header, natural (internal) byte order. */\nexport function headerHash(raw: Uint8Array | string): Uint8Array {\n\tconst bytes = toBytes(raw);\n\tif (bytes.length !== HEADER_SIZE) {\n\t\tthrow new RangeError(\n\t\t\t`block header must be ${HEADER_SIZE} bytes, got ${bytes.length}`,\n\t\t);\n\t}\n\treturn sha256(sha256(bytes));\n}\n\n/** Block hash as display-order hex (what bitcoind prints). */\nexport function headerHashHex(raw: Uint8Array | string): string {\n\treturn bytesToHex(reverseBytes(headerHash(raw)));\n}\n",
14
14
  "/**\n * Proof-of-work arithmetic, mirroring Bitcoin Core's arith_uint256\n * SetCompact/GetCompact, CheckProofOfWork, GetBlockProof and\n * CalculateNextWorkRequired (mainnet parameters only).\n */\n\n/** Mainnet powLimit, compact form. */\nexport const POW_LIMIT_BITS = 0x1d00ffff;\n/** Mainnet powLimit: 0x00000000ffff0000...0000. */\nexport const POW_LIMIT = 0xffffn << 208n;\n/** Blocks per difficulty period. */\nexport const RETARGET_INTERVAL = 2016;\n/** Two weeks, seconds. */\nexport const TARGET_TIMESPAN = 14 * 24 * 60 * 60;\n\nconst TWO_256 = 1n << 256n;\n\nexport interface DecodedCompact {\n\ttarget: bigint;\n\tnegative: boolean;\n\toverflow: boolean;\n}\n\n/** Core's arith_uint256::SetCompact, including its negative/overflow flags. */\nexport function decodeCompact(bits: number): DecodedCompact {\n\tconst size = bits >>> 24;\n\tlet word = bits & 0x007fffff;\n\tlet target: bigint;\n\tif (size <= 3) {\n\t\tword >>>= 8 * (3 - size);\n\t\ttarget = BigInt(word);\n\t} else {\n\t\ttarget = BigInt(word) << BigInt(8 * (size - 3));\n\t}\n\tconst negative = word !== 0 && (bits & 0x00800000) !== 0;\n\tconst overflow =\n\t\tword !== 0 &&\n\t\t(size > 34 || (word > 0xff && size > 33) || (word > 0xffff && size > 32));\n\treturn { target: target & (TWO_256 - 1n), negative, overflow };\n}\n\n/** Decodes compact bits to a target, throwing on negative/overflow/zero. */\nexport function bitsToTarget(bits: number): bigint {\n\tconst { target, negative, overflow } = decodeCompact(bits);\n\tif (negative || overflow || target === 0n) {\n\t\tthrow new RangeError(\n\t\t\t`bits 0x${bits.toString(16).padStart(8, \"0\")} do not encode a valid target`,\n\t\t);\n\t}\n\treturn target;\n}\n\n/** Core's arith_uint256::GetCompact for a non-negative target. */\nexport function targetToBits(target: bigint): number {\n\tif (target < 0n) throw new RangeError(\"target must be non-negative\");\n\tlet size = target === 0n ? 0 : Math.ceil(target.toString(2).length / 8);\n\tlet compact =\n\t\tsize <= 3\n\t\t\t? Number(target << BigInt(8 * (3 - size)))\n\t\t\t: Number(target >> BigInt(8 * (size - 3)));\n\tif (compact & 0x00800000) {\n\t\tcompact >>>= 8;\n\t\tsize += 1;\n\t}\n\treturn ((size << 24) | compact) >>> 0;\n}\n\n/** Interprets a natural-order hash as the little-endian 256-bit integer PoW compares. */\nexport function hashToBigInt(hash: Uint8Array): bigint {\n\tlet n = 0n;\n\tfor (let i = hash.length - 1; i >= 0; i--) {\n\t\tn = (n << 8n) | BigInt(hash[i] as number);\n\t}\n\treturn n;\n}\n\n/** Core's CheckProofOfWork: valid target ≤ powLimit and hash ≤ target. */\nexport function checkProofOfWork(hash: Uint8Array, bits: number): boolean {\n\tconst { target, negative, overflow } = decodeCompact(bits);\n\tif (negative || overflow || target === 0n || target > POW_LIMIT) {\n\t\treturn false;\n\t}\n\treturn hashToBigInt(hash) <= target;\n}\n\n/** Expected number of hashes for a block at `bits`: 2^256 / (target + 1). */\nexport function headerWork(bits: number): bigint {\n\tconst target = bitsToTarget(bits);\n\t// Core's GetBlockProof: (~target / (target + 1)) + 1, same value without overflow.\n\treturn (TWO_256 - 1n - target) / (target + 1n) + 1n;\n}\n\n/**\n * Core's CalculateNextWorkRequired. `firstTime` is the timestamp of the first\n * block of the closing period and `lastTime` of its last block, so the\n * measured span covers 2015 intervals, not 2016 (the well-known off-by-one\n * that consensus preserves).\n */\nexport function nextRetargetBits(\n\tlastBits: number,\n\tfirstTime: number,\n\tlastTime: number,\n): number {\n\tlet actual = lastTime - firstTime;\n\tif (actual < TARGET_TIMESPAN / 4) actual = TARGET_TIMESPAN / 4;\n\tif (actual > TARGET_TIMESPAN * 4) actual = TARGET_TIMESPAN * 4;\n\tlet target =\n\t\t(bitsToTarget(lastBits) * BigInt(actual)) / BigInt(TARGET_TIMESPAN);\n\tif (target > POW_LIMIT) target = POW_LIMIT;\n\treturn targetToBits(target);\n}\n",
15
15
  "// Trusted starting point baked into each release. Everything verifyBlock\n// proves is relative to it: a Stacks block whose state holds one cycle's\n// signer set, and a Bitcoin header to sync proof-of-work from.\n//\n// Bump it once per release so the signer-set walk stays short:\n// 1. Pick a recent reward cycle C and a canonical Stacks block X whose burn\n// block is in C-1's prepare phase or later (its state holds set C).\n// 2. Fetch X's raw block (`/v3/blocks/<id>`, keep the header bytes) and\n// `cycle-signer-set[C]` with its proof at X (`/v2/clarity/marf/<path>?tip=X&proof=1`,\n// key `mapEntryKey(SIGNERS_CONTRACT, \"cycle-signer-set\", uintCV(C))`).\n// 3. Bitcoin: the retarget-period start (a multiple of 2016) at or below C's\n// first burn block, 666050 + 2100 * C. Blocks above X whose burn height\n// is below the Bitcoin checkpoint cannot be verified; blocks below X are\n// verified by hash chain from X instead.\n// 4. Add X's header, its proof ancestors and the set proof to test/fixtures:\n// the checkpoint test re-proves the baked set against X.\nimport type { Checkpoint } from \"./bitcoin/chain.ts\";\n\nexport interface VerifyCheckpoint {\n\tstacks: {\n\t\t/** Raw Nakamoto header (hex) of a trusted block whose state holds `signerSet`. */\n\t\theader: string;\n\t\t/** Reward cycle `signerSet` belongs to. */\n\t\tcycle: number;\n\t\t/** `.signers` `cycle-signer-set[cycle]` as stored: hex of `(some (list ...))`. */\n\t\tsignerSet: string;\n\t};\n\t/** Retarget-boundary Bitcoin header at or below the first burn block of `stacks.cycle`. */\n\tbitcoin: Checkpoint;\n}\n\n/**\n * Mainnet: Stacks block 8,956,304 (`3914ea5f…74bb`) holding the cycle 143\n * signer set (29 signers, weight 4000), and Bitcoin block 967,680 (a\n * retarget-period start inside cycle 143). Later blocks verify forward\n * (burn height 967,680 or later); earlier ones by hash chain from 8,956,304.\n */\nexport const MAINNET_CHECKPOINT: VerifyCheckpoint = {\n\tstacks: {\n\t\theader: [\n\t\t\t\"01000000000088a9900000006629951a50e3616a1c1e0b8c05ba66615c7065053804c56e2a68dc605cf905df5a754c57\",\n\t\t\t\"144e9ddde1191353b05f1a5e6d3c99244aeb006ba4f4db761cb1efecfb92693a8c08fefc766a4cd5ccfcb8f13789a809\",\n\t\t\t\"e7ee0c2e6b7dfb64868cf1e4e6acc50513202acfab84553454b433248c0ef06cebda3c734c000000006aa28bfd013be3\",\n\t\t\t\"826a60039f518d7021a4799f2e083dafaaaac7a2d56fda601d674d596d3046b9bbcd52e79fba491e54d92fdab0ca3ab9\",\n\t\t\t\"9ccf346c6e6726fbd4c8579a02b80000000d0004f2d135dd684fcdf24973ad0e9d4f11ef10890a8159614b1df97d8f31\",\n\t\t\t\"76532d1ce4ebdcbbf45afcd01d5bb298ef9556b232f877f3586d65303642dabc210059012d5f341c979fd10a1ce9b48f\",\n\t\t\t\"4a38f68da5ccbb8749c02e164a99668328890ed706accfbec155202f63ff487a26aba793169341c2ff91a43ffed38f0e\",\n\t\t\t\"941c3dc1012a12bb2148d6cf23dd05e228d29286e3bb87ff717712ecc2c9f0c4297c241ac41f879baeee87a570243a31\",\n\t\t\t\"cf43e775862e71a7f51cb150bbc31f3a2f62a1772d00f8bdd615ab5b58841c7918d69cf98a030f52ca410c9b91a188ba\",\n\t\t\t\"038138563ea35f8453075907fc3cdac7e3eff8fa9f61fcb53a1e14a102309fa297e420826bfe015628863a16f1bdc077\",\n\t\t\t\"90c6eead0cfd7a0aa7222df6d8d41415427b0b4057eb972dc31bd413f1e425ef1bc738cc5c3b8507890bad0940bafdf2\",\n\t\t\t\"220a6ecadb33ed002f9a476eb20c5e532bafa7b559b285932e1dab1159c93038d8cb0da8d55d25294cc8e6b0972efc08\",\n\t\t\t\"fdf825407e3215d8d01531f5cddfe993db10be07b38c18fa006999eb6418eac4696bb42ca149f79832442754ea08b0e1\",\n\t\t\t\"c6237feb522df034a3388c0de90b1a4652218b319f839ff16a132baa90dbbca2876f52b1a5750dc07001cffca3ed6e92\",\n\t\t\t\"2483e6567f183a78a1c09d16846743f08c5cce93e7e06294c4a722283d31195722b6ce97087c6dd00eedecd1db77be10\",\n\t\t\t\"9c298c322c53e83ea43201dd0684e8171ad29f6895ed9892d3932daeb0986f32992d6758db194ae9ba8eb256fdff3b61\",\n\t\t\t\"af0cd448aafe5e4e62e7e75409dfcd3cef3913c792e412849a02550109083fa52598f5fa2907e840050c41db32163838\",\n\t\t\t\"32aa7cb5e23de14ced47961e356b23e442f2a657ea89fed2845a6b380624dc12347e4d591c80e15016ae35fc005ae002\",\n\t\t\t\"f1fc5837c21185b88b06cc8611cfb482c021df5329d878e2b4f221341a47e6fe02182c9250d25fe162f42a0bbe9b8ce2\",\n\t\t\t\"f9a70aa2dcca9e955a61a0fe24016398a0fdf5e2541d3d0838d9f7e24b4093d27660a48cd71bf0728fe5d02e6d374a3e\",\n\t\t\t\"aa67c91aee87635d7458bb1fe89755021fbe8d34e271fba1d765b065e266008a862c839aeec0d6a9940cfe44e0bc1586\",\n\t\t\t\"2bd2ac23b3ab6fc59734a8171b44401b395984f0f906b2d15b4a3a24d2136a8ca925485f197197b3aa1bb2c46d02e000\",\n\t\t\t\"01000000010100000000\",\n\t\t].join(\"\"),\n\t\tcycle: 143,\n\t\tsignerSet: [\n\t\t\t\"0a0b0000001d0c00000002067369676e65720516f5061b1c62f399ecc0db8cbb21f8d481af079a380677656967687401\",\n\t\t\t\"000000000000000000000000000002860c00000002067369676e65720516a3bbf2a4133fbd5bd1880982957b7a760347\",\n\t\t\t\"b2dc0677656967687401000000000000000000000000000000090c00000002067369676e657205164f72f6b5a9f5d863\",\n\t\t\t\"34b2f0fe701db51a7a246f3d0677656967687401000000000000000000000000000000990c00000002067369676e6572\",\n\t\t\t\"051653ec8b4f51c8286dad6f4ff81ca2a3409d2f382d0677656967687401000000000000000000000000000000050c00\",\n\t\t\t\"000002067369676e65720516dba631825ff0f15c7c5946b560070f8f5f5747cb06776569676874010000000000000000\",\n\t\t\t\"00000000000000240c00000002067369676e6572051600d058b39f4495b412ff7eada763eaa6386eb90a067765696768\",\n\t\t\t\"7401000000000000000000000000000002860c00000002067369676e65720516321ac33715d684d5e8d0cf427cd98557\",\n\t\t\t\"6f64c6df06776569676874010000000000000000000000000000000b0c00000002067369676e6572051677a52718ba90\",\n\t\t\t\"fca67984166b2a084edb9b3bd8f10677656967687401000000000000000000000000000000030c00000002067369676e\",\n\t\t\t\"65720516a54a20479b3b65a461a427b9161b78e64db58ba70677656967687401000000000000000000000000000001a9\",\n\t\t\t\"0c00000002067369676e65720516bc1a58c2a058a9e4150db25562e8331ef8a4267c0677656967687401000000000000\",\n\t\t\t\"000000000000000000060c00000002067369676e657205161091d2da4c9ee17a340171c0d23c4304b54ef43f06776569\",\n\t\t\t\"67687401000000000000000000000000000000680c00000002067369676e6572051654d01a0973ed139736a1a43032a6\",\n\t\t\t\"a18d9295ec7206776569676874010000000000000000000000000000008d0c00000002067369676e657205160c49f5b6\",\n\t\t\t\"c62f1163ddbb21f92aba86f17f7be4880677656967687401000000000000000000000000000000680c00000002067369\",\n\t\t\t\"676e65720516ad16c79ac56b58f0797f78c5343853674606268006776569676874010000000000000000000000000000\",\n\t\t\t\"00680c00000002067369676e657205169689e56df00385b6bd81fb6b7769d5b04088acb8067765696768740100000000\",\n\t\t\t\"0000000000000000000000ad0c00000002067369676e65720516a4f7f81412f4413771a48825cfbe2062a774d4e90677\",\n\t\t\t\"656967687401000000000000000000000000000003090c00000002067369676e65720516ed73a7398f1c3eb566f3bd7f\",\n\t\t\t\"4bd43f52adf33d8f0677656967687401000000000000000000000000000000680c00000002067369676e65720516937b\",\n\t\t\t\"3b43e0d94c9ef8f171892bce949709e1d41f0677656967687401000000000000000000000000000000250c0000000206\",\n\t\t\t\"7369676e6572051631542aacfd6e04858181c3067b5eb07399ba89df0677656967687401000000000000000000000000\",\n\t\t\t\"0000005b0c00000002067369676e6572051649f034cd1662a222dbc38a6acd64008ba7e5576606776569676874010000\",\n\t\t\t\"00000000000000000000000000060c00000002067369676e65720516a20f660dea498c169897a39cb89ce0d98856e572\",\n\t\t\t\"0677656967687401000000000000000000000000000000090c00000002067369676e6572051652d58897b3678f3a758f\",\n\t\t\t\"a4b9270744fec0605b210677656967687401000000000000000000000000000000680c00000002067369676e65720516\",\n\t\t\t\"31733264626dc5fef36eb683a5069d89f63b64cc0677656967687401000000000000000000000000000000090c000000\",\n\t\t\t\"02067369676e65720516d80db618c2def577604cd8e40a3940b5b639b1ac067765696768740100000000000000000000\",\n\t\t\t\"00000000000a0c00000002067369676e657205162042a380d946a82866465af8521a273efe6d2a600677656967687401\",\n\t\t\t\"000000000000000000000000000000490c00000002067369676e6572051635e1b36efc22bc607db92f9100cb08e3473d\",\n\t\t\t\"602506776569676874010000000000000000000000000000006b0c00000002067369676e657205164843b97054e43dd1\",\n\t\t\t\"a8571fc1e72949c5bedfb7e906776569676874010000000000000000000000000000004d0c00000002067369676e6572\",\n\t\t\t\"05164883355670025c19ecae644ffa20e75ce1d730ad0677656967687401000000000000000000000000000000090c00\",\n\t\t\t\"000002067369676e65720516089ffd0e0ecd61d9e3c8ee42ef94148acf88aa8806776569676874010000000000000000\",\n\t\t\t\"0000000000000015\",\n\t\t].join(\"\"),\n\t},\n\tbitcoin: {\n\t\theight: 967680,\n\t\theader:\n\t\t\t\"00000030410ccb1cba623e26f2e02f3fcb0e7f06f66998b68cb5010000000000000000003d16ae2558e8ec7b8dd369ee29bb2733fbd39bcc1058c681970a36a7f1a2bdea1135ae6ac51e0217480c3581\",\n\t},\n};\n",
16
- "// Proof data sources. Everything a source returns is untrusted: verifyBlock\n// checks every byte against the checkpoint, so a lying source can make a\n// check fail but never pass.\nimport { type Bytes, unhex } from \"./bytes.ts\";\n\n/** Sortition preimage behind a consensus hash. */\nexport interface BurnPreimage {\n\tpreimage: Bytes;\n\t/** The source's claimed burn height: a hint for how far to sync Bitcoin headers, never trusted. */\n\tburnHeight: number;\n}\n\n/** Node RPC `/v2/clarity/marf/<path>?proof=1` answer. */\nexport interface MarfProofResponse {\n\t/** Value string as Clarity stored it (hex for Clarity values), 0x prefix tolerated. */\n\tdata: string;\n\t/** Consensus-serialized TrieMerkleProof. */\n\tproof: Bytes;\n}\n\n/** One storage-layer MARF write (`state_writes` row), in block write order. */\nexport interface StateWrite {\n\t/** Null for block-level writes outside any transaction. */\n\ttx_index: number | null;\n\tordinal: number;\n\t/** Full MARF key, e.g. `vm::<contract>::0::<map>::<key hex>`. */\n\tkey: string;\n\t/** Hex of the stored value string's UTF-8 bytes. */\n\tvalue_hex: string;\n}\n\n/** A `vm_events` write row, as the Index API serves it. */\nexport interface VmEventRow {\n\tevent_type: \"var_set\" | \"map_set\" | \"map_insert\" | \"map_delete\";\n\t/** The row's ordinal within the block. */\n\tevent_index: number;\n\ttx_id?: string;\n\ttx_index?: number;\n\tcontract_id: string;\n\tvar_name?: string | null;\n\tmap?: string | null;\n\traw_key?: string | null;\n\traw_value?: string | null;\n}\n\n/** An epoch 2.x header and the consensus hash its index block hash commits to. */\nexport interface Epoch2HeaderResponse {\n\t/** Consensus-serialized StacksBlockHeader. */\n\theader: Bytes;\n\tconsensusHash: Bytes;\n}\n\nexport interface ProofSource {\n\t/** Raw Nakamoto block bytes (header first), by block id or height. */\n\tgetBlock(ref: string | number): Promise<Bytes>;\n\t/**\n\t * Epoch 2.x block header by index block hash: blocks below the checkpoint\n\t * from before Nakamoto. Without it only Nakamoto blocks verify.\n\t */\n\tgetEpoch2Header?(blockId: string): Promise<Epoch2HeaderResponse>;\n\t/**\n\t * MARF inclusion proof for a 32-byte path at `tipId`; null when the key is\n\t * absent. Blocks below the checkpoint also ask for\n\t * `__MARF_BLOCK_HEIGHT_TO_HASH::<height>`, whose value is no stored string:\n\t * only `proof` is read for it.\n\t */\n\tgetMarfProof(\n\t\tpathHex: string,\n\t\ttipId: string,\n\t): Promise<MarfProofResponse | null>;\n\t/** State witness (wire v3) for a block. */\n\tgetWitness(blockId: string): Promise<Bytes>;\n\tgetBurnPreimage(consensusHash: string): Promise<BurnPreimage>;\n\t/** Raw 80-byte Bitcoin headers (hex or bytes) from height `from`. */\n\tgetBitcoinHeaders(from: number, count: number): Promise<(string | Bytes)[]>;\n\t/**\n\t * Every MARF write of the block, in ordinal order; null (or empty) when\n\t * the source has none for it. Names the block's diff.\n\t */\n\tgetStateWrites?(height: number): Promise<StateWrite[] | null>;\n\t/** Indexed vm_events write rows of the block, checked against its proven diff. */\n\tgetVmEvents?(height: number): Promise<VmEventRow[]>;\n}\n\nexport class SourceError extends Error {\n\toverride readonly name = \"SourceError\";\n\tconstructor(\n\t\treadonly url: string,\n\t\treadonly status: number | null,\n\t\tdetail: string,\n\t) {\n\t\tsuper(`${url}: ${detail}`);\n\t}\n}\n\ntype Fetch = (url: string, init?: RequestInit) => Promise<Response>;\n\ninterface HttpOptions {\n\theaders?: Record<string, string>;\n\tfetch?: Fetch;\n}\n\nconst MAX_ATTEMPTS = 3;\nconst MAX_RETRY_SECONDS = 10;\n\n/** GET with retries on 503 (honoring retry-after); null on 404. */\nasync function get(\n\turl: string,\n\topts: HttpOptions,\n\tattempt = 1,\n): Promise<Response | null> {\n\tconst doFetch = opts.fetch ?? fetch;\n\tlet res: Response;\n\ttry {\n\t\tres = await doFetch(url, { headers: opts.headers });\n\t} catch (err) {\n\t\tthrow new SourceError(url, null, (err as Error).message);\n\t}\n\tif (res.status === 404) return null;\n\tif (res.status === 503 && attempt < MAX_ATTEMPTS) {\n\t\tconst header = res.headers.get(\"retry-after\");\n\t\tconst seconds = header === null ? 1 : Number(header);\n\t\tconst wait = Number.isFinite(seconds)\n\t\t\t? Math.min(Math.max(seconds, 0), MAX_RETRY_SECONDS)\n\t\t\t: 1;\n\t\tawait new Promise((r) => setTimeout(r, wait * 1000));\n\t\treturn get(url, opts, attempt + 1);\n\t}\n\tif (!res.ok) throw new SourceError(url, res.status, `HTTP ${res.status}`);\n\treturn res;\n}\n\nasync function getJson<T>(url: string, opts: HttpOptions): Promise<T | null> {\n\tconst res = await get(url, opts);\n\treturn res ? ((await res.json()) as T) : null;\n}\n\nasync function getBytes(url: string, opts: HttpOptions): Promise<Bytes | null> {\n\tconst res = await get(url, opts);\n\treturn res ? new Uint8Array(await res.arrayBuffer()) : null;\n}\n\nconst required = <T>(url: string, v: T | null): T => {\n\tif (v === null) throw new SourceError(url, 404, \"not found\");\n\treturn v;\n};\n\nconst trimSlash = (s: string) => s.replace(/\\/+$/, \"\");\n\ntype MarfJson = { data: string; proof?: string; marf_proof?: string };\n\ntype HeadersJson = { header?: unknown; consensus_hash?: unknown }[];\n\n/** The first entry of a node `/v2/headers/1?tip=<id>` answer: the tip itself. */\nconst toEpoch2 = (url: string, j: HeadersJson | null): Epoch2HeaderResponse => {\n\tconst tip = required(url, j)[0];\n\tif (typeof tip?.header !== \"string\" || typeof tip.consensus_hash !== \"string\")\n\t\tthrow new SourceError(url, 200, \"answer needs header and consensus_hash\");\n\treturn {\n\t\theader: unhex(tip.header),\n\t\tconsensusHash: unhex(tip.consensus_hash),\n\t};\n};\n\nconst toMarf = (url: string, j: MarfJson | null): MarfProofResponse | null => {\n\tif (j === null) return null;\n\tconst proof = j.proof ?? j.marf_proof;\n\tif (typeof proof !== \"string\" || typeof j.data !== \"string\")\n\t\tthrow new SourceError(url, 200, \"MARF answer needs data and proof\");\n\treturn { data: j.data, proof: unhex(proof) };\n};\n\nexport interface SecondlayerSourceOptions {\n\t/** API origin, e.g. `https://api.secondlayer.tools`. */\n\tbaseUrl: string;\n\t/** Account key, sent as `Authorization: Bearer`. */\n\tapiKey: string;\n\tfetch?: Fetch;\n}\n\nconst VM_WRITE_TYPES = [\n\t\"var_set\",\n\t\"map_set\",\n\t\"map_insert\",\n\t\"map_delete\",\n] as const;\nconst PAGE = 1000;\n\n/** Follow `next_cursor` until a page comes back empty. Null when the first page 404s. */\nasync function pages<T>(\n\tfield: string,\n\turl: string,\n\thttp: HttpOptions,\n): Promise<T[] | null> {\n\tconst out: T[] = [];\n\tlet cursor: string | null = null;\n\tfor (;;) {\n\t\tconst page: string = cursor\n\t\t\t? `${url}&cursor=${encodeURIComponent(cursor)}`\n\t\t\t: url;\n\t\tconst j = await getJson<Record<string, unknown>>(page, http);\n\t\tif (j === null) return cursor === null ? null : out;\n\t\tconst rows = j[field];\n\t\tif (!Array.isArray(rows))\n\t\t\tthrow new SourceError(page, 200, `answer has no ${field} array`);\n\t\tout.push(...(rows as T[]));\n\t\tconst next = j.next_cursor;\n\t\tif (rows.length < PAGE || typeof next !== \"string\" || next === cursor)\n\t\t\treturn out;\n\t\tcursor = next;\n\t}\n}\n\n// Both sources keep their origin and account key in constructor closures, not\n// fields: nothing leaks through a spread, a log or JSON.stringify.\n\n/**\n * Every proof input from the Secondlayer API: `/v1/proofs/*` (free, rate\n * limited) for blocks, epoch 2.x headers, MARF proofs, witnesses, burn\n * preimages, Bitcoin headers and each block's state writes; the Index API\n * (metered rows) for vm_events, read only when verifyBlock gets `rows: true`.\n * Methods are own properties, so a partial source spreads over it:\n * `{ ...new SecondlayerProofSource(o), ...new NodeRpcProofSource(n) }`.\n */\nexport class SecondlayerProofSource implements ProofSource {\n\tgetBlock: (ref: string | number) => Promise<Bytes>;\n\tgetEpoch2Header: (blockId: string) => Promise<Epoch2HeaderResponse>;\n\tgetMarfProof: (\n\t\tpathHex: string,\n\t\ttipId: string,\n\t) => Promise<MarfProofResponse | null>;\n\tgetWitness: (blockId: string) => Promise<Bytes>;\n\tgetBurnPreimage: (consensusHash: string) => Promise<BurnPreimage>;\n\tgetBitcoinHeaders: (from: number, count: number) => Promise<string[]>;\n\tgetStateWrites: (height: number) => Promise<StateWrite[] | null>;\n\tgetVmEvents: (height: number) => Promise<VmEventRow[]>;\n\n\tconstructor(opts: SecondlayerSourceOptions) {\n\t\tconst base = trimSlash(opts.baseUrl);\n\t\tconst http: HttpOptions = {\n\t\t\theaders: { authorization: `Bearer ${opts.apiKey}` },\n\t\t\tfetch: opts.fetch,\n\t\t};\n\n\t\tthis.getBlock = async (ref) => {\n\t\t\tconst url =\n\t\t\t\ttypeof ref === \"number\"\n\t\t\t\t\t? `${base}/v1/proofs/block/height/${ref}`\n\t\t\t\t\t: `${base}/v1/proofs/block/${ref}`;\n\t\t\treturn required(url, await getBytes(url, http));\n\t\t};\n\n\t\tthis.getEpoch2Header = async (blockId) => {\n\t\t\tconst url = `${base}/v1/proofs/epoch2-header/${blockId}`;\n\t\t\treturn toEpoch2(url, await getJson<HeadersJson>(url, http));\n\t\t};\n\n\t\tthis.getMarfProof = async (pathHex, tipId) => {\n\t\t\tconst url = `${base}/v1/proofs/marf/${pathHex}?tip=${tipId}`;\n\t\t\treturn toMarf(url, await getJson<MarfJson>(url, http));\n\t\t};\n\n\t\tthis.getWitness = async (blockId) => {\n\t\t\tconst url = `${base}/v1/proofs/witness/${blockId}`;\n\t\t\treturn required(url, await getBytes(url, http));\n\t\t};\n\n\t\tthis.getBurnPreimage = async (consensusHash) => {\n\t\t\tconst url = `${base}/v1/proofs/burn/${consensusHash}`;\n\t\t\tconst j = required(\n\t\t\t\turl,\n\t\t\t\tawait getJson<{ burn_height: number; preimage: string }>(url, http),\n\t\t\t);\n\t\t\treturn { preimage: unhex(j.preimage), burnHeight: j.burn_height };\n\t\t};\n\n\t\tthis.getBitcoinHeaders = async (from, count) => {\n\t\t\tconst url = `${base}/v1/proofs/bitcoin-headers?from=${from}&count=${count}`;\n\t\t\tconst j = required(\n\t\t\t\turl,\n\t\t\t\tawait getJson<{ from: number; headers: string[] }>(url, http),\n\t\t\t);\n\t\t\tif (j.from !== from)\n\t\t\t\tthrow new SourceError(url, 200, `headers start at ${j.from}`);\n\t\t\treturn j.headers;\n\t\t};\n\n\t\tthis.getStateWrites = async (height) => {\n\t\t\tconst url = `${base}/v1/proofs/writes/${height}`;\n\t\t\tconst j = await getJson<{ state_writes?: unknown }>(url, http);\n\t\t\tif (j === null) return null;\n\t\t\tif (!Array.isArray(j.state_writes))\n\t\t\t\tthrow new SourceError(url, 200, \"answer has no state_writes array\");\n\t\t\treturn j.state_writes as StateWrite[];\n\t\t};\n\n\t\tthis.getVmEvents = async (height) => {\n\t\t\tconst out: VmEventRow[] = [];\n\t\t\tfor (const type of VM_WRITE_TYPES) {\n\t\t\t\tconst url = `${base}/v1/index/events?event_type=${type}&from_height=${height}&to_height=${height}&limit=${PAGE}`;\n\t\t\t\tout.push(...((await pages<VmEventRow>(\"events\", url, http)) ?? []));\n\t\t\t}\n\t\t\treturn out.sort((a, b) => a.event_index - b.event_index);\n\t\t};\n\t}\n}\n\nexport interface NodeRpcSourceOptions {\n\t/** Stacks node RPC origin, e.g. `http://localhost:20443`. */\n\tnodeUrl: string;\n\tfetch?: Fetch;\n}\n\n/**\n * Blocks, epoch 2.x headers and MARF proofs straight from a Stacks node's RPC.\n * Witnesses, burn preimages and Bitcoin headers need another source: spread\n * this over one.\n */\nexport class NodeRpcProofSource\n\timplements Pick<ProofSource, \"getBlock\" | \"getEpoch2Header\" | \"getMarfProof\">\n{\n\tgetBlock: (ref: string | number) => Promise<Bytes>;\n\tgetEpoch2Header: (blockId: string) => Promise<Epoch2HeaderResponse>;\n\tgetMarfProof: (\n\t\tpathHex: string,\n\t\ttipId: string,\n\t) => Promise<MarfProofResponse | null>;\n\n\tconstructor(opts: NodeRpcSourceOptions) {\n\t\tconst base = trimSlash(opts.nodeUrl);\n\t\tconst http: HttpOptions = { fetch: opts.fetch };\n\n\t\tthis.getBlock = async (ref) => {\n\t\t\tconst url =\n\t\t\t\ttypeof ref === \"number\"\n\t\t\t\t\t? `${base}/v3/blocks/height/${ref}`\n\t\t\t\t\t: `${base}/v3/blocks/${ref}`;\n\t\t\treturn required(url, await getBytes(url, http));\n\t\t};\n\n\t\tthis.getEpoch2Header = async (blockId) => {\n\t\t\tconst url = `${base}/v2/headers/1?tip=${blockId}`;\n\t\t\treturn toEpoch2(url, await getJson<HeadersJson>(url, http));\n\t\t};\n\n\t\tthis.getMarfProof = async (pathHex, tipId) => {\n\t\t\tconst url = `${base}/v2/clarity/marf/${pathHex}?tip=${tipId}&proof=1`;\n\t\t\treturn toMarf(url, await getJson<MarfJson>(url, http));\n\t\t};\n\t}\n}\n",
16
+ "// Proof data sources. Everything a source returns is untrusted: verifyBlock\n// checks every byte against the checkpoint, so a lying source can make a\n// check fail but never pass.\nimport { type Bytes, unhex } from \"./bytes.ts\";\n\n/** Sortition preimage behind a consensus hash. */\nexport interface BurnPreimage {\n\tpreimage: Bytes;\n\t/** The source's claimed burn height: a hint for how far to sync Bitcoin headers, never trusted. */\n\tburnHeight: number;\n}\n\n/** Node RPC `/v2/clarity/marf/<path>?proof=1` answer. */\nexport interface MarfProofResponse {\n\t/** Value string as Clarity stored it (hex for Clarity values), 0x prefix tolerated. */\n\tdata: string;\n\t/** Consensus-serialized TrieMerkleProof. */\n\tproof: Bytes;\n}\n\n/** One storage-layer MARF write (`state_writes` row), in block write order. */\nexport interface StateWrite {\n\t/** Null for block-level writes outside any transaction. */\n\ttx_index: number | null;\n\tordinal: number;\n\t/** Full MARF key, e.g. `vm::<contract>::0::<map>::<key hex>`. */\n\tkey: string;\n\t/** Hex of the stored value string's UTF-8 bytes. */\n\tvalue_hex: string;\n}\n\n/** A `vm_events` write row, as the Index API serves it. */\nexport interface VmEventRow {\n\tevent_type: \"var_set\" | \"map_set\" | \"map_insert\" | \"map_delete\";\n\t/** The row's ordinal within the block. */\n\tevent_index: number;\n\ttx_id?: string;\n\ttx_index?: number;\n\tcontract_id: string;\n\tvar_name?: string | null;\n\tmap?: string | null;\n\traw_key?: string | null;\n\traw_value?: string | null;\n}\n\n/** An epoch 2.x header and the consensus hash its index block hash commits to. */\nexport interface Epoch2HeaderResponse {\n\t/** Consensus-serialized StacksBlockHeader. */\n\theader: Bytes;\n\tconsensusHash: Bytes;\n}\n\nexport interface ProofSource {\n\t/** Raw Nakamoto block bytes (header first), by block id or height. */\n\tgetBlock(ref: string | number): Promise<Bytes>;\n\t/**\n\t * Epoch 2.x block header by index block hash: blocks below the checkpoint\n\t * from before Nakamoto. Without it only Nakamoto blocks verify.\n\t */\n\tgetEpoch2Header?(blockId: string): Promise<Epoch2HeaderResponse>;\n\t/**\n\t * MARF inclusion proof for a 32-byte path at `tipId`; null when the key is\n\t * absent. Blocks below the checkpoint also ask for\n\t * `__MARF_BLOCK_HEIGHT_TO_HASH::<height>`, whose value is no stored string:\n\t * only `proof` is read for it.\n\t */\n\tgetMarfProof(\n\t\tpathHex: string,\n\t\ttipId: string,\n\t): Promise<MarfProofResponse | null>;\n\t/** State witness (wire v3) for a block. */\n\tgetWitness(blockId: string): Promise<Bytes>;\n\tgetBurnPreimage(consensusHash: string): Promise<BurnPreimage>;\n\t/** Raw 80-byte Bitcoin headers (hex or bytes) from height `from`. */\n\tgetBitcoinHeaders(from: number, count: number): Promise<(string | Bytes)[]>;\n\t/**\n\t * Every MARF write of the block, in ordinal order; null (or empty) when\n\t * the source has none for it. Names the block's diff.\n\t */\n\tgetStateWrites?(height: number): Promise<StateWrite[] | null>;\n\t/** Indexed vm_events write rows of the block, checked against its proven diff. */\n\tgetVmEvents?(height: number): Promise<VmEventRow[]>;\n}\n\nexport class SourceError extends Error {\n\toverride readonly name = \"SourceError\";\n\tconstructor(\n\t\treadonly url: string,\n\t\treadonly status: number | null,\n\t\tdetail: string,\n\t) {\n\t\tsuper(`${url}: ${detail}`);\n\t}\n}\n\ntype Fetch = (url: string, init?: RequestInit) => Promise<Response>;\n\ninterface HttpOptions {\n\theaders?: Record<string, string>;\n\tfetch?: Fetch;\n}\n\nconst MAX_ATTEMPTS = 3;\nconst MAX_RETRY_SECONDS = 10;\n\n/** GET with retries on 429 and 503 (honoring retry-after); null on 404. */\nasync function get(\n\turl: string,\n\topts: HttpOptions,\n\tattempt = 1,\n): Promise<Response | null> {\n\tconst doFetch = opts.fetch ?? fetch;\n\tlet res: Response;\n\ttry {\n\t\tres = await doFetch(url, { headers: opts.headers });\n\t} catch (err) {\n\t\tthrow new SourceError(url, null, (err as Error).message);\n\t}\n\tif (res.status === 404) return null;\n\tif ((res.status === 503 || res.status === 429) && attempt < MAX_ATTEMPTS) {\n\t\tconst header = res.headers.get(\"retry-after\");\n\t\tconst seconds = header === null ? 1 : Number(header);\n\t\tconst wait = Number.isFinite(seconds)\n\t\t\t? Math.min(Math.max(seconds, 0), MAX_RETRY_SECONDS)\n\t\t\t: 1;\n\t\tawait new Promise((r) => setTimeout(r, wait * 1000));\n\t\treturn get(url, opts, attempt + 1);\n\t}\n\tif (!res.ok) throw new SourceError(url, res.status, `HTTP ${res.status}`);\n\treturn res;\n}\n\nasync function getJson<T>(url: string, opts: HttpOptions): Promise<T | null> {\n\tconst res = await get(url, opts);\n\treturn res ? ((await res.json()) as T) : null;\n}\n\nasync function getBytes(url: string, opts: HttpOptions): Promise<Bytes | null> {\n\tconst res = await get(url, opts);\n\treturn res ? new Uint8Array(await res.arrayBuffer()) : null;\n}\n\nconst required = <T>(url: string, v: T | null): T => {\n\tif (v === null) throw new SourceError(url, 404, \"not found\");\n\treturn v;\n};\n\nconst trimSlash = (s: string) => s.replace(/\\/+$/, \"\");\n\ntype MarfJson = { data: string; proof?: string; marf_proof?: string };\n\ntype HeadersJson = { header?: unknown; consensus_hash?: unknown }[];\n\n/** The first entry of a node `/v2/headers/1?tip=<id>` answer: the tip itself. */\nconst toEpoch2 = (url: string, j: HeadersJson | null): Epoch2HeaderResponse => {\n\tconst tip = required(url, j)[0];\n\tif (typeof tip?.header !== \"string\" || typeof tip.consensus_hash !== \"string\")\n\t\tthrow new SourceError(url, 200, \"answer needs header and consensus_hash\");\n\treturn {\n\t\theader: unhex(tip.header),\n\t\tconsensusHash: unhex(tip.consensus_hash),\n\t};\n};\n\nconst toMarf = (url: string, j: MarfJson | null): MarfProofResponse | null => {\n\tif (j === null) return null;\n\tconst proof = j.proof ?? j.marf_proof;\n\tif (typeof proof !== \"string\" || typeof j.data !== \"string\")\n\t\tthrow new SourceError(url, 200, \"MARF answer needs data and proof\");\n\treturn { data: j.data, proof: unhex(proof) };\n};\n\n/** The hosted API. */\nexport const DEFAULT_API_URL = \"https://api.secondlayer.tools\";\n\nexport interface SecondlayerSourceOptions {\n\t/** API origin. Defaults to {@link DEFAULT_API_URL}. */\n\tbaseUrl?: string;\n\t/**\n\t * Optional. Proofs are keyless; a key raises the rate limit. Required for\n\t * `rows: true` (metered Index reads). Sent as `Authorization: Bearer`.\n\t */\n\tapiKey?: string;\n\tfetch?: Fetch;\n}\n\nconst VM_WRITE_TYPES = [\n\t\"var_set\",\n\t\"map_set\",\n\t\"map_insert\",\n\t\"map_delete\",\n] as const;\nconst PAGE = 1000;\n\n/** Follow `next_cursor` until a page comes back empty. Null when the first page 404s. */\nasync function pages<T>(\n\tfield: string,\n\turl: string,\n\thttp: HttpOptions,\n): Promise<T[] | null> {\n\tconst out: T[] = [];\n\tlet cursor: string | null = null;\n\tfor (;;) {\n\t\tconst page: string = cursor\n\t\t\t? `${url}&cursor=${encodeURIComponent(cursor)}`\n\t\t\t: url;\n\t\tconst j = await getJson<Record<string, unknown>>(page, http);\n\t\tif (j === null) return cursor === null ? null : out;\n\t\tconst rows = j[field];\n\t\tif (!Array.isArray(rows))\n\t\t\tthrow new SourceError(page, 200, `answer has no ${field} array`);\n\t\tout.push(...(rows as T[]));\n\t\tconst next = j.next_cursor;\n\t\tif (rows.length < PAGE || typeof next !== \"string\" || next === cursor)\n\t\t\treturn out;\n\t\tcursor = next;\n\t}\n}\n\n// Both sources keep their origin and account key in constructor closures, not\n// fields: nothing leaks through a spread, a log or JSON.stringify.\n\n/**\n * Every proof input from the Secondlayer API: `/v1/proofs/*` (free, rate\n * limited) for blocks, epoch 2.x headers, MARF proofs, witnesses, burn\n * preimages, Bitcoin headers and each block's state writes; the Index API\n * (metered rows) for vm_events, read only when verifyBlock gets `rows: true`.\n * Methods are own properties, so a partial source spreads over it:\n * `{ ...new SecondlayerProofSource(o), ...new NodeRpcProofSource(n) }`.\n */\nexport class SecondlayerProofSource implements ProofSource {\n\tgetBlock: (ref: string | number) => Promise<Bytes>;\n\tgetEpoch2Header: (blockId: string) => Promise<Epoch2HeaderResponse>;\n\tgetMarfProof: (\n\t\tpathHex: string,\n\t\ttipId: string,\n\t) => Promise<MarfProofResponse | null>;\n\tgetWitness: (blockId: string) => Promise<Bytes>;\n\tgetBurnPreimage: (consensusHash: string) => Promise<BurnPreimage>;\n\tgetBitcoinHeaders: (from: number, count: number) => Promise<string[]>;\n\tgetStateWrites: (height: number) => Promise<StateWrite[] | null>;\n\tgetVmEvents: (height: number) => Promise<VmEventRow[]>;\n\n\tconstructor(opts: SecondlayerSourceOptions = {}) {\n\t\tconst base = trimSlash(opts.baseUrl ?? DEFAULT_API_URL);\n\t\tconst http: HttpOptions = {\n\t\t\theaders: opts.apiKey ? { authorization: `Bearer ${opts.apiKey}` } : {},\n\t\t\tfetch: opts.fetch,\n\t\t};\n\n\t\tthis.getBlock = async (ref) => {\n\t\t\tconst url =\n\t\t\t\ttypeof ref === \"number\"\n\t\t\t\t\t? `${base}/v1/proofs/block/height/${ref}`\n\t\t\t\t\t: `${base}/v1/proofs/block/${ref}`;\n\t\t\treturn required(url, await getBytes(url, http));\n\t\t};\n\n\t\tthis.getEpoch2Header = async (blockId) => {\n\t\t\tconst url = `${base}/v1/proofs/epoch2-header/${blockId}`;\n\t\t\treturn toEpoch2(url, await getJson<HeadersJson>(url, http));\n\t\t};\n\n\t\tthis.getMarfProof = async (pathHex, tipId) => {\n\t\t\tconst url = `${base}/v1/proofs/marf/${pathHex}?tip=${tipId}`;\n\t\t\treturn toMarf(url, await getJson<MarfJson>(url, http));\n\t\t};\n\n\t\tthis.getWitness = async (blockId) => {\n\t\t\tconst url = `${base}/v1/proofs/witness/${blockId}`;\n\t\t\treturn required(url, await getBytes(url, http));\n\t\t};\n\n\t\tthis.getBurnPreimage = async (consensusHash) => {\n\t\t\tconst url = `${base}/v1/proofs/burn/${consensusHash}`;\n\t\t\tconst j = required(\n\t\t\t\turl,\n\t\t\t\tawait getJson<{ burn_height: number; preimage: string }>(url, http),\n\t\t\t);\n\t\t\treturn { preimage: unhex(j.preimage), burnHeight: j.burn_height };\n\t\t};\n\n\t\tthis.getBitcoinHeaders = async (from, count) => {\n\t\t\tconst url = `${base}/v1/proofs/bitcoin-headers?from=${from}&count=${count}`;\n\t\t\tconst j = required(\n\t\t\t\turl,\n\t\t\t\tawait getJson<{ from: number; headers: string[] }>(url, http),\n\t\t\t);\n\t\t\tif (j.from !== from)\n\t\t\t\tthrow new SourceError(url, 200, `headers start at ${j.from}`);\n\t\t\treturn j.headers;\n\t\t};\n\n\t\tthis.getStateWrites = async (height) => {\n\t\t\tconst url = `${base}/v1/proofs/writes/${height}`;\n\t\t\tconst j = await getJson<{ state_writes?: unknown }>(url, http);\n\t\t\tif (j === null) return null;\n\t\t\tif (!Array.isArray(j.state_writes))\n\t\t\t\tthrow new SourceError(url, 200, \"answer has no state_writes array\");\n\t\t\treturn j.state_writes as StateWrite[];\n\t\t};\n\n\t\tthis.getVmEvents = async (height) => {\n\t\t\tconst eventsUrl = (type: string) =>\n\t\t\t\t`${base}/v1/index/events?event_type=${type}&from_height=${height}&to_height=${height}&limit=${PAGE}`;\n\t\t\tif (!opts.apiKey)\n\t\t\t\tthrow new SourceError(\n\t\t\t\t\teventsUrl(VM_WRITE_TYPES[0]),\n\t\t\t\t\t401,\n\t\t\t\t\t\"rows: true reads metered Index events and needs an apiKey\",\n\t\t\t\t);\n\t\t\tconst out: VmEventRow[] = [];\n\t\t\tfor (const type of VM_WRITE_TYPES) {\n\t\t\t\tconst url = eventsUrl(type);\n\t\t\t\tout.push(...((await pages<VmEventRow>(\"events\", url, http)) ?? []));\n\t\t\t}\n\t\t\treturn out.sort((a, b) => a.event_index - b.event_index);\n\t\t};\n\t}\n}\n\nexport interface NodeRpcSourceOptions {\n\t/** Stacks node RPC origin, e.g. `http://localhost:20443`. */\n\tnodeUrl: string;\n\tfetch?: Fetch;\n}\n\n/**\n * Blocks, epoch 2.x headers and MARF proofs straight from a Stacks node's RPC.\n * Witnesses, burn preimages and Bitcoin headers need another source: spread\n * this over one.\n */\nexport class NodeRpcProofSource\n\timplements Pick<ProofSource, \"getBlock\" | \"getEpoch2Header\" | \"getMarfProof\">\n{\n\tgetBlock: (ref: string | number) => Promise<Bytes>;\n\tgetEpoch2Header: (blockId: string) => Promise<Epoch2HeaderResponse>;\n\tgetMarfProof: (\n\t\tpathHex: string,\n\t\ttipId: string,\n\t) => Promise<MarfProofResponse | null>;\n\n\tconstructor(opts: NodeRpcSourceOptions) {\n\t\tconst base = trimSlash(opts.nodeUrl);\n\t\tconst http: HttpOptions = { fetch: opts.fetch };\n\n\t\tthis.getBlock = async (ref) => {\n\t\t\tconst url =\n\t\t\t\ttypeof ref === \"number\"\n\t\t\t\t\t? `${base}/v3/blocks/height/${ref}`\n\t\t\t\t\t: `${base}/v3/blocks/${ref}`;\n\t\t\treturn required(url, await getBytes(url, http));\n\t\t};\n\n\t\tthis.getEpoch2Header = async (blockId) => {\n\t\t\tconst url = `${base}/v2/headers/1?tip=${blockId}`;\n\t\t\treturn toEpoch2(url, await getJson<HeadersJson>(url, http));\n\t\t};\n\n\t\tthis.getMarfProof = async (pathHex, tipId) => {\n\t\t\tconst url = `${base}/v2/clarity/marf/${pathHex}?tip=${tipId}&proof=1`;\n\t\t\treturn toMarf(url, await getJson<MarfJson>(url, http));\n\t\t};\n\t}\n}\n",
17
17
  "// Steps 6-8 of verifyBlock: a block's state witness against its authenticated\n// header root, every leaf of its trie named, and indexed rows against the diff.\nimport { type Bytes, bytesEqual, hex, unhex } from \"./bytes.ts\";\nimport { dataVarKey } from \"./keys.ts\";\nimport {\n\tMARF_VALUE_SIZE,\n\theightToHashKey,\n\tmarfPath,\n\tmarfValue,\n} from \"./marf.ts\";\nimport type { StateWrite, VmEventRow } from \"./source.ts\";\nimport {\n\ttype WitnessLeaf,\n\tclassifyBlockDiff,\n\tparseWitness,\n} from \"./witness.ts\";\n\nexport interface DiffWrite {\n\t/** MARF key, when a state_writes row names the leaf. */\n\tkey?: string;\n\t/** Leaf path, hex. */\n\tpath: string;\n\t/** sha512/256 of the stored value string, hex. */\n\tvalueHash: string;\n\t/** Transaction of the last write; null for block-level writes. */\n\ttxIndex?: number | null;\n\t/** The stored value string (hex of a Clarity value) the leaf holds; named writes only. */\n\tvalue?: string;\n\t/** False when the source had no state_writes: the leaf may also be a carried copy. */\n\tnamed: boolean;\n}\n\nexport interface DiffLeaf {\n\tkey?: string;\n\tpath: string;\n\tvalueHash: string;\n}\n\nexport interface ProvenDiff {\n\t/** Every leaf is named (state_writes served) and classified. */\n\tnamed: boolean;\n\twrites: DiffWrite[];\n\t/** Unchanged values copied forward from the parent (proven at the parent). */\n\tcarried: DiffLeaf[];\n\t/** `__MARF_BLOCK_*` bookkeeping. */\n\tinternal: DiffLeaf[];\n}\n\nexport type StateFailureCode =\n\t| \"malformed\"\n\t| \"root-mismatch\"\n\t| \"bad-write\"\n\t| \"hidden-write\"\n\t| \"missing-write\"\n\t| \"key-not-written\"\n\t| \"value-mismatch\"\n\t| \"bad-row\";\n\nexport interface StateFailure {\n\tstep: \"witness\" | \"names\" | \"rows\";\n\tcode: StateFailureCode;\n\tmessage: string;\n\tkey?: string;\n\tpath?: string;\n\tordinal?: number;\n}\n\nexport interface BlockStateInput {\n\t/** MARF height of the block (its Stacks chain length). */\n\theight: number;\n\t/** Parent block id from the authenticated header. */\n\tparentBlockId: Bytes;\n\t/** state_index_root from the authenticated header. */\n\tstateRoot: Bytes;\n\twitness: Bytes;\n\t/** The block's state_writes; null when the source has none (names unavailable). */\n\twrites: StateWrite[] | null;\n\t/** Indexed rows to prove against the diff. */\n\trows?: VmEventRow[];\n\t/**\n\t * Leaves of the parent's own trie, from a parent witness whose root the\n\t * caller checked against the parent header: each is the parent state's\n\t * value at its path. Resolves carried leaves without a proof per leaf.\n\t */\n\tparentLeaves?: WitnessLeaf[];\n\t/**\n\t * True iff the leaf's value is stored at its path in the parent's state\n\t * (proven by the caller). Asked only with state_writes, for leaves the\n\t * parent's own trie does not explain.\n\t */\n\tparentHolds?: (leaf: WitnessLeaf) => Promise<boolean>;\n}\n\nexport interface BlockStateResult {\n\tdiff?: ProvenDiff;\n\trowsChecked: number;\n\tnotes: string[];\n\tfailures: StateFailure[];\n}\n\nconst INTERNAL = {\n\tself: \"__MARF_BLOCK_HEIGHT_SELF\",\n\thashToHeight: \"__MARF_BLOCK_HASH_TO_HEIGHT\",\n} as const;\n\n/** MARFValue of a u32 height: little-endian in the first 4 bytes. */\nconst heightValue = (h: number): string => {\n\tconst v = new Uint8Array(MARF_VALUE_SIZE);\n\tnew DataView(v.buffer).setUint32(0, h, true);\n\treturn hex(v);\n};\n/** 40-byte MARFValue hex of a 32-byte hash or block id (zero tail). */\nconst padded = (b32: Bytes): string => `${hex(b32)}${\"00\".repeat(8)}`;\n\n/**\n * The `__MARF_BLOCK_*` entries block `height` writes (stacks-core index/marf.rs).\n * The parent's are fixed by the header. The block's own id is not known while\n * its trie is built, so `HEIGHT_TO_HASH::{height}` holds a temporary hash; its\n * value is taken from the witness and must map back to `height`.\n */\nfunction internalEntries(\n\theight: number,\n\tparentBlockId: Bytes,\n\tleaves: WitnessLeaf[],\n): [key: string, valueHex: string][] {\n\tconst out: [string, string][] = [[INTERNAL.self, heightValue(height)]];\n\tconst ownKey = heightToHashKey(height);\n\tconst ownPath = marfPath(ownKey);\n\tconst own = leaves.find((l) => bytesEqual(l.path, ownPath));\n\tif (own) {\n\t\tout.push([ownKey, padded(own.valueHash)]);\n\t\tout.push([\n\t\t\t`${INTERNAL.hashToHeight}::${hex(own.valueHash)}`,\n\t\t\theightValue(height),\n\t\t]);\n\t}\n\tif (height > 0) {\n\t\tout.push([heightToHashKey(height - 1), padded(parentBlockId)]);\n\t\tout.push([\n\t\t\t`${INTERNAL.hashToHeight}::${hex(parentBlockId)}`,\n\t\t\theightValue(height - 1),\n\t\t]);\n\t}\n\treturn out;\n}\n\nconst utf8 = new TextDecoder(\"utf-8\", { fatal: true });\nconst strip0x = (s: string) => (s.startsWith(\"0x\") ? s.slice(2) : s);\nconst leafHex = (l: WitnessLeaf): DiffLeaf => ({\n\tpath: hex(l.path),\n\tvalueHash: hex(l.valueHash),\n});\n\n/** Last write per key, in ordinal order, with its value as the stored string. */\nfunction lastWrites(\n\twrites: StateWrite[],\n\tfailures: StateFailure[],\n): Map<string, { value: string; txIndex: number | null }> {\n\tconst out = new Map<string, { value: string; txIndex: number | null }>();\n\tfor (const w of [...writes].sort((a, b) => a.ordinal - b.ordinal)) {\n\t\ttry {\n\t\t\tout.set(w.key, {\n\t\t\t\tvalue: utf8.decode(unhex(strip0x(w.value_hex))),\n\t\t\t\ttxIndex: w.tx_index,\n\t\t\t});\n\t\t} catch {\n\t\t\tfailures.push({\n\t\t\t\tstep: \"names\",\n\t\t\t\tcode: \"bad-write\",\n\t\t\t\tmessage: `state write ${w.ordinal} value is not UTF-8 hex`,\n\t\t\t\tkey: w.key,\n\t\t\t\tordinal: w.ordinal,\n\t\t\t});\n\t\t}\n\t}\n\treturn out;\n}\n\n/** The MARF key and stored value string a vm_events row writes (mirrors clarity_db.rs). */\nfunction rowWrite(row: VmEventRow): [key: string, value: string] {\n\tconst need = (v: string | null | undefined, name: string): string => {\n\t\tif (!v) throw new Error(`${row.event_type} row has no ${name}`);\n\t\treturn v;\n\t};\n\tif (row.event_type === \"var_set\")\n\t\treturn [\n\t\t\tdataVarKey(row.contract_id, need(row.var_name, \"var_name\")),\n\t\t\tstrip0x(need(row.raw_value, \"raw_value\")).toLowerCase(),\n\t\t];\n\tconst key = `vm::${row.contract_id}::0::${need(row.map, \"map\")}::${strip0x(need(row.raw_key, \"raw_key\")).toLowerCase()}`;\n\tif (row.event_type === \"map_delete\") return [key, \"09\"];\n\t// put_value stores map entries as (some value).\n\treturn [key, `0a${strip0x(need(row.raw_value, \"raw_value\")).toLowerCase()}`];\n}\n\n/**\n * Rows against the block's leaves: every row's key must be a leaf, and the\n * last row per key must carry the leaf's value.\n */\nfunction checkRows(\n\trows: VmEventRow[],\n\tleaves: WitnessLeaf[],\n\tfailures: StateFailure[],\n): number {\n\tconst byPath = new Map(leaves.map((l) => [hex(l.path), l]));\n\tconst named: { row: VmEventRow; key: string; path: string; value: string }[] =\n\t\t[];\n\tfor (const row of [...rows].sort((a, b) => a.event_index - b.event_index)) {\n\t\ttry {\n\t\t\tconst [key, value] = rowWrite(row);\n\t\t\tnamed.push({ row, key, path: hex(marfPath(key)), value });\n\t\t} catch (err) {\n\t\t\tfailures.push({\n\t\t\t\tstep: \"rows\",\n\t\t\t\tcode: \"bad-row\",\n\t\t\t\tmessage: (err as Error).message,\n\t\t\t\tordinal: row.event_index,\n\t\t\t});\n\t\t}\n\t}\n\tconst last = new Map(named.map((n, i) => [n.path, i]));\n\tnamed.forEach((n, i) => {\n\t\tconst leaf = byPath.get(n.path);\n\t\tconst at = { key: n.key, path: n.path, ordinal: n.row.event_index };\n\t\tif (!leaf)\n\t\t\tfailures.push({\n\t\t\t\tstep: \"rows\",\n\t\t\t\tcode: \"key-not-written\",\n\t\t\t\tmessage: `${n.row.event_type} row ${n.row.event_index} names a key the block did not write`,\n\t\t\t\t...at,\n\t\t\t});\n\t\telse if (\n\t\t\tlast.get(n.path) === i &&\n\t\t\tpadded(leaf.valueHash) !== hex(marfValue(n.value))\n\t\t)\n\t\t\tfailures.push({\n\t\t\t\tstep: \"rows\",\n\t\t\t\tcode: \"value-mismatch\",\n\t\t\t\tmessage: `${n.row.event_type} row ${n.row.event_index} value differs from the block's leaf`,\n\t\t\t\t...at,\n\t\t\t});\n\t});\n\treturn named.length;\n}\n\n/**\n * Verify block state against an authenticated header: the witness must\n * recompute `stateRoot`, then every leaf is classified. With state_writes,\n * any leaf that is not a named write, a carried parent value or MARF\n * bookkeeping is a hidden write. Without them the diff is still proven\n * (every leaf is in the block): carried leaves are told apart only through\n * `parentLeaves`, and the remaining writes come back unnamed.\n */\nexport async function verifyBlockState(\n\tinput: BlockStateInput,\n): Promise<BlockStateResult> {\n\tconst out: BlockStateResult = { rowsChecked: 0, notes: [], failures: [] };\n\tlet witness: ReturnType<typeof parseWitness>;\n\ttry {\n\t\twitness = parseWitness(input.witness);\n\t} catch (err) {\n\t\tout.failures.push({\n\t\t\tstep: \"witness\",\n\t\t\tcode: \"malformed\",\n\t\t\tmessage: (err as Error).message,\n\t\t});\n\t\treturn out;\n\t}\n\tif (!bytesEqual(witness.root, input.stateRoot)) {\n\t\tout.failures.push({\n\t\t\tstep: \"witness\",\n\t\t\tcode: \"root-mismatch\",\n\t\t\tmessage: `witness root ${hex(witness.root)} != header state_index_root ${hex(input.stateRoot)}`,\n\t\t});\n\t\treturn out;\n\t}\n\tconst { leaves } = witness;\n\tconst internal = internalEntries(input.height, input.parentBlockId, leaves);\n\tconst named = input.writes !== null;\n\tconst last = lastWrites(input.writes ?? [], out.failures);\n\tconst writes = [...last].map(([k, w]): [string, string] => [k, w.value]);\n\t// First pass with no parent values finds the leaves that need one.\n\tconst first = classifyBlockDiff({\n\t\tleaves,\n\t\twrites,\n\t\tinternal,\n\t\tparentValue: () => undefined,\n\t});\n\tconst inParent = new Map(\n\t\t(input.parentLeaves ?? []).map((l) => [hex(l.path), hex(l.valueHash)]),\n\t);\n\tconst carried = new Map<string, string>();\n\tfor (const leaf of first.hidden) {\n\t\tconst pathHex = hex(leaf.path);\n\t\tif (\n\t\t\tinParent.get(pathHex) === hex(leaf.valueHash) ||\n\t\t\t(named && (await input.parentHolds?.(leaf)))\n\t\t)\n\t\t\tcarried.set(pathHex, padded(leaf.valueHash));\n\t}\n\tconst d = classifyBlockDiff({\n\t\tleaves,\n\t\twrites,\n\t\tinternal,\n\t\tparentValue: (p) => carried.get(p),\n\t});\n\tout.diff = {\n\t\tnamed,\n\t\twrites: named\n\t\t\t? d.writes.map((l) => ({\n\t\t\t\t\t...leafHex(l),\n\t\t\t\t\tkey: l.key,\n\t\t\t\t\ttxIndex: last.get(l.key)?.txIndex ?? null,\n\t\t\t\t\tvalue: last.get(l.key)?.value,\n\t\t\t\t\tnamed: true,\n\t\t\t\t}))\n\t\t\t: // Without names every unexplained leaf is a write we cannot label.\n\t\t\t\td.hidden.map((l) => ({ ...leafHex(l), named: false })),\n\t\tcarried: d.carried.map(leafHex),\n\t\tinternal: d.internal.map((l) => ({ ...leafHex(l), key: l.key })),\n\t};\n\tif (!named)\n\t\tout.notes.push(\n\t\t\t`source has no state_writes for block ${input.height}: ${d.hidden.length} written leaves are proven in the block but unnamed`,\n\t\t);\n\telse {\n\t\tfor (const l of d.hidden)\n\t\t\tout.failures.push({\n\t\t\t\tstep: \"names\",\n\t\t\t\tcode: \"hidden-write\",\n\t\t\t\tmessage: `leaf ${hex(l.path)} is not a named write, a carried parent value or MARF bookkeeping`,\n\t\t\t\tpath: hex(l.path),\n\t\t\t});\n\t\tfor (const key of d.missing)\n\t\t\tout.failures.push({\n\t\t\t\tstep: \"names\",\n\t\t\t\tcode: \"missing-write\",\n\t\t\t\tmessage: `state write ${key} has no leaf holding its value`,\n\t\t\t\tkey,\n\t\t\t\tpath: hex(marfPath(key)),\n\t\t\t});\n\t}\n\tif (input.rows) out.rowsChecked = checkRows(input.rows, leaves, out.failures);\n\treturn out;\n}\n",
18
18
  "// A Nakamoto block's transactions against its header's tx_merkle_root\n// (stacks-common util/hash.rs MerkleTree, MerkleHashFunc = Sha512Trunc256Sum).\nimport { sha512_256 } from \"@noble/hashes/sha2.js\";\nimport { splitTransactions } from \"@secondlayer/stacks/transactions\";\nimport { type Bytes, bytesEqual, concat, hex } from \"./bytes.ts\";\nimport type { NakamotoHeader } from \"./header.ts\";\n\nexport interface BlockTransaction {\n\t/** sha512/256 of the transaction bytes, hex. */\n\ttxid: string;\n\t/** The consensus-serialized transaction. */\n\traw: Bytes;\n}\n\nconst LEAF_TAG = new Uint8Array([0x00]);\nconst NODE_TAG = new Uint8Array([0x01]);\n\n/**\n * tx_merkle_root over txids: leaf = H(0x00 ‖ txid), node = H(0x01 ‖ l ‖ r),\n * an odd level duplicates its last node, and a lone leaf is still paired with\n * itself (one-tx blocks hash H(0x01 ‖ leaf ‖ leaf)).\n */\nexport function txMerkleRoot(txids: Bytes[]): Bytes {\n\tif (txids.length === 0) throw new Error(\"no transactions\");\n\tlet level = txids.map((t) => sha512_256(concat([LEAF_TAG, t])));\n\tdo {\n\t\tif (level.length % 2 === 1) level.push(level[level.length - 1] as Bytes);\n\t\tconst next: Bytes[] = [];\n\t\tfor (let i = 0; i < level.length; i += 2) {\n\t\t\tnext.push(\n\t\t\t\tsha512_256(\n\t\t\t\t\tconcat([NODE_TAG, level[i] as Bytes, level[i + 1] as Bytes]),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tlevel = next;\n\t} while (level.length > 1);\n\treturn level[0] as Bytes;\n}\n\nexport class TransactionsError extends Error {\n\tconstructor(\n\t\treadonly code: \"malformed\" | \"tx-root-mismatch\",\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t}\n}\n\n/**\n * The block's transactions, each hashed to its txid, checked against the\n * header's tx_merkle_root. The body after `header.byteLength` is a u32 count\n * then the transactions back to back. Null when the bytes are the header\n * alone (a source that serves headers only): nothing to check. Throws\n * {@link TransactionsError} on a malformed body, trailing bytes or a root\n * mismatch.\n */\nexport function blockTransactions(\n\traw: Bytes,\n\theader: NakamotoHeader,\n): BlockTransaction[] | null {\n\tconst body = raw.subarray(header.byteLength);\n\tif (body.length === 0) return null;\n\tif (body.length < 4)\n\t\tthrow new TransactionsError(\"malformed\", \"block body has no tx count\");\n\tconst count = new DataView(\n\t\tbody.buffer,\n\t\tbody.byteOffset,\n\t\tbody.byteLength,\n\t).getUint32(0);\n\tif (count === 0)\n\t\tthrow new TransactionsError(\"malformed\", \"block has no transactions\");\n\tlet txs: Bytes[];\n\ttry {\n\t\ttxs = splitTransactions(body.subarray(4), count);\n\t} catch (err) {\n\t\tthrow new TransactionsError(\n\t\t\t\"malformed\",\n\t\t\t`transactions do not parse: ${(err as Error).message}`,\n\t\t);\n\t}\n\tconst used = txs.reduce((n, t) => n + t.length, 4);\n\tif (used !== body.length)\n\t\tthrow new TransactionsError(\n\t\t\t\"malformed\",\n\t\t\t`${body.length - used} bytes after the block's ${count} transactions`,\n\t\t);\n\tconst ids = txs.map((t) => sha512_256(t));\n\tconst root = txMerkleRoot(ids);\n\tif (!bytesEqual(root, header.txMerkleRoot))\n\t\tthrow new TransactionsError(\n\t\t\t\"tx-root-mismatch\",\n\t\t\t`transactions hash to ${hex(root)}, header tx_merkle_root is ${hex(header.txMerkleRoot)}`,\n\t\t);\n\treturn txs.map((t, i) => ({ txid: hex(ids[i] as Bytes), raw: t }));\n}\n",
19
19
  "// verifyBlock: the end-to-end trustless check for one Stacks block.\n//\n// At or above the checkpoint, forward:\n// checkpoint ─▶ bitcoin headers (PoW) ─▶ burn height ─▶ cycle ─▶ signer set[cycle] (MARF-proven)\n// ─▶ header N (signatures ≥ 70%) ─▶ txs N (tx merkle root) ─▶ witness N (root)\n// ─▶ named diff ─▶ indexed rows\n//\n// Below it, backward: a trusted descendant's id commits to every ancestor by\n// hash, so no signatures are needed:\n// checkpoint ─▶ id N (parent links, or one MARF proof of __MARF_BLOCK_HEIGHT_TO_HASH::N)\n// ─▶ header N (hashes to id N) ─▶ txs N ─▶ witness N (root) ─▶ named diff ─▶ indexed rows\n//\n// Every input comes from an untrusted ProofSource; only the checkpoint is trusted.\nimport { uintCV } from \"@secondlayer/stacks/clarity\";\nimport { HeaderChain, HeaderValidationError } from \"./bitcoin/chain.ts\";\nimport {\n\tMAINNET_PREPARE_LENGTH,\n\tcycleStart,\n\trewardCycle,\n\tverifyConsensusPreimage,\n} from \"./burn.ts\";\nimport { type Bytes, bytesEqual, hex, unhex } from \"./bytes.ts\";\nimport { MAINNET_CHECKPOINT, type VerifyCheckpoint } from \"./checkpoint.ts\";\nimport {\n\ttype Epoch2Header,\n\ttype NakamotoHeader,\n\ttype StacksHeader,\n\tblockId,\n\tisEpoch2Header,\n\tparseEpoch2Header,\n\tparseNakamotoHeader,\n\tsignerSignatureHash,\n} from \"./header.ts\";\nimport { mapEntryKey } from \"./keys.ts\";\nimport {\n\tMARF_VALUE_SIZE,\n\theightToHashKey,\n\tmarfPath,\n\tmarfProofAncestors,\n\tmarfProofValue,\n\tmarfValue,\n\tverifyMarfProof,\n} from \"./marf.ts\";\nimport {\n\tSIGNERS_CONTRACT,\n\ttype SignerSet,\n\tdecodeSignerSet,\n\tverifySignerSignatures,\n} from \"./signers.ts\";\nimport type { BurnPreimage, ProofSource, StateWrite } from \"./source.ts\";\nimport {\n\ttype ProvenDiff,\n\ttype StateFailureCode,\n\tverifyBlockState,\n} from \"./state.ts\";\nimport {\n\ttype BlockTransaction,\n\tTransactionsError,\n\tblockTransactions,\n} from \"./txs.ts\";\nimport { type WitnessLeaf, parseWitness } from \"./witness.ts\";\n\nexport type VerifyStep =\n\t| \"ancestry\"\n\t| \"block\"\n\t| \"bitcoin\"\n\t| \"burn\"\n\t| \"signer-set\"\n\t| \"signatures\"\n\t| \"txs\"\n\t| \"witness\"\n\t| \"names\"\n\t| \"rows\";\n\nexport type VerifyFailureCode =\n\t| StateFailureCode\n\t/** The source could not serve something the step needs. */\n\t| \"unavailable\"\n\t| \"id-mismatch\"\n\t/** The block's transactions do not hash to its header's tx_merkle_root. */\n\t| \"tx-root-mismatch\"\n\t| \"height-mismatch\"\n\t| \"invalid-header\"\n\t| \"preimage-mismatch\"\n\t| \"burn-not-in-chain\"\n\t| \"before-checkpoint\"\n\t/** The block is not the checkpoint chain's block at its height. */\n\t| \"not-ancestor\"\n\t| \"ancestry-proof-invalid\"\n\t| \"anchor-not-found\"\n\t| \"anchor-outside-window\"\n\t| \"anchor-unsigned\"\n\t| \"set-proof-invalid\"\n\t| \"below-threshold\"\n\t| \"unknown-signer\"\n\t| \"duplicate-signer\"\n\t| \"bad-signature\";\n\nexport interface VerifyFailure {\n\tstep: VerifyStep;\n\tcode: VerifyFailureCode;\n\tmessage: string;\n\t/** Reward cycle being proven (signer-set step). */\n\tcycle?: number;\n\t/** Block the failure is about, when not the target. */\n\tblockId?: string;\n\tkey?: string;\n\tpath?: string;\n\tordinal?: number;\n}\n\n/** How a block below the checkpoint was tied to it. */\nexport interface Ancestry {\n\t/** Trusted descendant it was proven from: the checkpoint, or a block proven below it earlier. */\n\tfromHeight: number;\n\tfromBlockId: string;\n\t/**\n\t * `parents`: each header hashes to the parent id its child commits to.\n\t * `marf`: one MARF proof of `__MARF_BLOCK_HEIGHT_TO_HASH::<height>` against\n\t * the descendant's state root.\n\t */\n\tvia: \"parents\" | \"marf\";\n}\n\nexport interface BlockVerification {\n\t/**\n\t * Every step passed. At or above the checkpoint: header, burn binding,\n\t * signatures, state root, names and rows. Below it: ancestry, header,\n\t * state root, names and rows (and the burn binding when Bitcoin reaches it).\n\t */\n\tok: boolean;\n\theight?: number;\n\tblockId?: string;\n\t/** Nakamoto block hash (the header's signer sighash), hex. Absent for epoch 2.x. */\n\tblockHash?: string;\n\t/** The header's consensus hash, hex. */\n\tconsensusHash?: string;\n\t/** Nakamoto header timestamp, Unix seconds. Absent for epoch 2.x. */\n\ttimestamp?: number;\n\t/** The header's state_index_root, hex: what the witness must hash to. */\n\tstateRoot?: string;\n\t/** Set for blocks below the checkpoint, which need no signatures. */\n\tancestry?: Ancestry;\n\tcycle?: number;\n\tburnHeight?: number;\n\t/** Display-order hex. */\n\tbitcoinBlockHash?: string;\n\tsignerWeight?: bigint;\n\ttotalWeight?: bigint;\n\tthreshold?: bigint;\n\t/**\n\t * The block's transactions, checked against the header's tx_merkle_root.\n\t * Absent for epoch 2.x blocks and when the source served the header only.\n\t */\n\ttransactions?: BlockTransaction[];\n\tdiff?: ProvenDiff;\n\t/** Every state_writes row the names step checked, in ordinal order. */\n\twrites?: StateWrite[];\n\t/** vm_events rows proven against the diff. */\n\trowsChecked?: number;\n\tnotes: string[];\n\t/** Empty when ok. The first entry is the first broken link. */\n\tfailures: VerifyFailure[];\n}\n\nexport interface VerifyOptions {\n\tsource: ProofSource;\n\t/** Defaults to MAINNET_CHECKPOINT. */\n\tcheckpoint?: VerifyCheckpoint;\n\t/**\n\t * Also prove the block's indexed vm_events rows against its diff: reads\n\t * the source's `getVmEvents`, which bill as Index rows on the Secondlayer\n\t * API. Off by default. Naming the diff's writes (`getStateWrites`, free on\n\t * `/v1/proofs`) is always on when the source has them.\n\t */\n\trows?: boolean;\n}\n\nclass Broken extends Error {\n\tconstructor(readonly failure: VerifyFailure) {\n\t\tsuper(failure.message);\n\t}\n}\n\nconst fail = (f: VerifyFailure): never => {\n\tthrow new Broken(f);\n};\n\n/** Run a source call; a throw becomes an `unavailable` failure of `step`. */\nasync function fetchFor<T>(\n\tstep: VerifyStep,\n\twhat: string,\n\tcall: () => Promise<T>,\n\textra: Partial<VerifyFailure> = {},\n): Promise<T> {\n\ttry {\n\t\treturn await call();\n\t} catch (err) {\n\t\tif (err instanceof Broken) throw err;\n\t\treturn fail({\n\t\t\tstep,\n\t\t\tcode: \"unavailable\",\n\t\t\tmessage: `${what}: ${(err as Error).message}`,\n\t\t\t...extra,\n\t\t});\n\t}\n}\n\nconst BITCOIN_BATCH = 2016;\n/**\n * Below the checkpoint, ancestors this close to a trusted block are reached by\n * parent links (one block fetch each); farther ones by one MARF proof, which\n * costs the proof plus a header per ancestor trie it crosses.\n */\nconst MAX_WALK = 16;\n\n/** A block position for the anchor search; `burn` is a source hint. */\nexport interface SearchPoint {\n\theight: number;\n\tburn?: number;\n}\n\n/**\n * Find a block whose burn height lies in `[window[0], window[1])`, between\n * `lo` and `hi` (exclusive). Interpolates on burn height, falling back to\n * bisection whenever a probe fails to halve the bracket. Burn heights here\n * are unproven hints: the caller authenticates whatever this returns.\n */\nexport async function findAnchor<T extends SearchPoint & { burn: number }>(\n\tlow: SearchPoint,\n\thigh: SearchPoint,\n\twindow: readonly [number, number],\n\tprobe: (height: number) => Promise<T>,\n\tmaxProbes = 32,\n): Promise<T | null> {\n\tlet [lo, hi] = [low, high];\n\tconst target = (window[0] + window[1]) / 2;\n\tlet bisect = false;\n\tfor (let i = 0; i < maxProbes; i++) {\n\t\tconst span = hi.height - lo.height;\n\t\tif (span <= 1) return null;\n\t\tlet h = Math.floor((lo.height + hi.height) / 2);\n\t\tif (\n\t\t\t!bisect &&\n\t\t\tlo.burn !== undefined &&\n\t\t\thi.burn !== undefined &&\n\t\t\thi.burn > lo.burn\n\t\t)\n\t\t\th =\n\t\t\t\tlo.height +\n\t\t\t\tMath.round(((target - lo.burn) * span) / (hi.burn - lo.burn));\n\t\th = Math.min(Math.max(h, lo.height + 1), hi.height - 1);\n\t\tconst p = await probe(h);\n\t\tif (p.height <= lo.height || p.height >= hi.height) return null;\n\t\tif (p.burn >= window[0] && p.burn < window[1]) return p;\n\t\tif (p.burn < window[0]) lo = p;\n\t\telse hi = p;\n\t\tbisect = hi.height - lo.height > span / 2;\n\t}\n\treturn null;\n}\n\ninterface Probe extends SearchPoint {\n\tburn: number;\n\theader: NakamotoHeader;\n\tid: string;\n}\n\n/**\n * Verifies blocks from one checkpoint against one source, caching the Bitcoin\n * header chain, proven signer sets and fetched headers across calls.\n */\nexport class BlockVerifier {\n\tprivate readonly source: ProofSource;\n\tprivate readonly checkpoint: VerifyCheckpoint;\n\tprivate readonly rows: boolean;\n\tprivate readonly chain: HeaderChain;\n\t/** Proven signer sets by cycle. */\n\tprivate readonly sets = new Map<number, SignerSet>();\n\t/** Where each proven set was anchored: the lower bound for the next search. */\n\tprivate readonly anchors = new Map<number, SearchPoint>();\n\t/** Headers fetched by id, each checked to hash to it. */\n\tprivate readonly headers = new Map<string, StacksHeader>();\n\t/** Blocks proven on the checkpoint's chain below it, by height. */\n\tprivate readonly below = new Map<\n\t\tnumber,\n\t\t{ id: string; ancestry: Ancestry }\n\t>();\n\tprivate readonly burns = new Map<\n\t\tstring,\n\t\t{ burnHeight: number; hash: string }\n\t>();\n\t/** Unverified source answers by consensus hash. */\n\tprivate readonly preimages = new Map<string, BurnPreimage>();\n\t/** Raw bytes of the last few blocks fetched, so the txs step reuses the\n\t * block an ancestry walk just read. Bounded: blocks can be megabytes. */\n\tprivate readonly raws = new Map<string, Bytes>();\n\tprivate readonly start: { header: NakamotoHeader; id: string };\n\n\tconstructor(opts: VerifyOptions) {\n\t\tthis.source = opts.source;\n\t\tthis.checkpoint = opts.checkpoint ?? MAINNET_CHECKPOINT;\n\t\tthis.rows = opts.rows ?? false;\n\t\tconst { stacks } = this.checkpoint;\n\t\tconst header = parseNakamotoHeader(unhex(stacks.header));\n\t\tthis.start = { header, id: hex(blockId(header)) };\n\t\tthis.headers.set(this.start.id, header);\n\t\tthis.sets.set(stacks.cycle, decodeSignerSet(stacks.signerSet));\n\t\tthis.chain = HeaderChain.fromCheckpoint(this.checkpoint.bitcoin);\n\t}\n\n\t/** Verify one block by id (hex) or height. Never throws for bad source data. */\n\tasync verify(ref: string | number): Promise<BlockVerification> {\n\t\tconst out: BlockVerification = { ok: false, notes: [], failures: [] };\n\t\ttry {\n\t\t\tawait this.run(ref, out);\n\t\t} catch (err) {\n\t\t\tif (!(err instanceof Broken)) throw err;\n\t\t\tout.failures.unshift(err.failure);\n\t\t}\n\t\tout.ok = out.failures.length === 0;\n\t\treturn out;\n\t}\n\n\tprivate async run(\n\t\tref: string | number,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tconst start = Number(this.start.header.chainLength);\n\t\tif (typeof ref === \"number\" && ref < start)\n\t\t\treturn this.runBelow(ref, undefined, out);\n\t\tlet header: StacksHeader;\n\t\tif (typeof ref === \"string\") {\n\t\t\tconst id = ref.replace(/^0x/, \"\").toLowerCase();\n\t\t\theader = await this.header(id, \"block\");\n\t\t\tconst height = Number(header.chainLength);\n\t\t\tif (height < start) return this.runBelow(height, id, out);\n\t\t\tif (isEpoch2Header(header))\n\t\t\t\tfail({\n\t\t\t\t\tstep: \"block\",\n\t\t\t\t\tcode: \"invalid-header\",\n\t\t\t\t\tmessage: `epoch 2.x block ${id} claims height ${height}, at or above the checkpoint`,\n\t\t\t\t});\n\t\t} else {\n\t\t\tconst raw = await fetchFor(\"block\", `block ${ref}`, () =>\n\t\t\t\tthis.source.getBlock(ref),\n\t\t\t);\n\t\t\theader = parseHeader(raw, \"block\");\n\t\t\tthis.rememberRaw(hex(blockId(header)), raw);\n\t\t}\n\t\tconst id = hex(blockId(header));\n\t\tconst height = Number(header.chainLength);\n\t\tif (typeof ref === \"number\" && height !== ref)\n\t\t\tfail({\n\t\t\t\tstep: \"block\",\n\t\t\t\tcode: \"height-mismatch\",\n\t\t\t\tmessage: `source returned height ${height} for ${ref}`,\n\t\t\t});\n\t\tawait this.runForward(header as NakamotoHeader, id, out);\n\t}\n\n\t/** At or above the checkpoint: Bitcoin, burn binding, signer set, signatures, state. */\n\tprivate async runForward(\n\t\theader: NakamotoHeader,\n\t\tid: string,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tconst height = Number(header.chainLength);\n\t\tout.height = height;\n\t\tout.blockId = id;\n\t\tdescribeHeader(header, out);\n\n\t\tconst burn = await this.bindBurn(header, \"burn\");\n\t\tconst cycle = rewardCycle(burn.burnHeight);\n\t\tout.burnHeight = burn.burnHeight;\n\t\tout.bitcoinBlockHash = burn.hash;\n\t\tout.cycle = cycle;\n\n\t\tconst set = await this.signerSet(cycle, {\n\t\t\theight,\n\t\t\tburn: burn.burnHeight,\n\t\t});\n\t\tconst sig = verifySignerSignatures(header, set);\n\t\tout.signerWeight = sig.signedWeight;\n\t\tout.totalWeight = sig.totalWeight;\n\t\tout.threshold = sig.threshold;\n\t\tif (!sig.valid) fail(signatureFailure(sig, \"signatures\", cycle));\n\t\tawait this.checkTransactions(header, id, out);\n\t\tawait this.verifyState(header, id, out);\n\t}\n\n\t/**\n\t * Below the checkpoint: prove the checkpoint chain's id at `height` (and\n\t * that it is `claimed`, when the caller asked by id), then the header that\n\t * hashes to it, then its state. Signatures add nothing to a header pinned\n\t * by hash from a trusted descendant.\n\t */\n\tprivate async runBelow(\n\t\theight: number,\n\t\tclaimed: string | undefined,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tout.height = height;\n\t\tconst { id, ancestry } = await this.ancestor(height);\n\t\tout.ancestry = ancestry;\n\t\tif (claimed !== undefined && claimed !== id)\n\t\t\tfail({\n\t\t\t\tstep: \"ancestry\",\n\t\t\t\tcode: \"not-ancestor\",\n\t\t\t\tmessage: `block ${claimed} is not on the checkpoint's chain: its block at height ${height} is ${id}`,\n\t\t\t\tblockId: claimed,\n\t\t\t});\n\t\tconst header = await this.header(id, \"block\");\n\t\tif (Number(header.chainLength) !== height)\n\t\t\tfail({\n\t\t\t\tstep: \"block\",\n\t\t\t\tcode: \"height-mismatch\",\n\t\t\t\tmessage: `block ${id} claims height ${header.chainLength}, proven at ${height}`,\n\t\t\t});\n\t\tout.blockId = id;\n\t\tdescribeHeader(header, out);\n\t\tawait this.bindBurnBelow(header, out);\n\t\tawait this.checkTransactions(header, id, out);\n\t\tawait this.verifyState(header, id, out);\n\t}\n\n\tprivate rememberRaw(id: string, raw: Bytes): void {\n\t\tthis.raws.delete(id);\n\t\tthis.raws.set(id, raw);\n\t\twhile (this.raws.size > 4) {\n\t\t\tconst oldest = this.raws.keys().next().value as string;\n\t\t\tthis.raws.delete(oldest);\n\t\t}\n\t}\n\n\t/**\n\t * The block's transactions against the authenticated header's\n\t * tx_merkle_root: binds every txid, sender, type and call target to the\n\t * signed (or hash-linked) header.\n\t */\n\tprivate async checkTransactions(\n\t\theader: StacksHeader,\n\t\tid: string,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tif (isEpoch2Header(header)) {\n\t\t\tout.notes.push(\"epoch 2.x: transactions not checked\");\n\t\t\treturn;\n\t\t}\n\t\tconst raw =\n\t\t\tthis.raws.get(id) ??\n\t\t\t(await fetchFor(\"txs\", `block ${id}`, () => this.source.getBlock(id)));\n\t\tlet txs: BlockTransaction[] | null;\n\t\ttry {\n\t\t\ttxs = blockTransactions(raw, header);\n\t\t} catch (err) {\n\t\t\tif (!(err instanceof TransactionsError)) throw err;\n\t\t\treturn fail({ step: \"txs\", code: err.code, message: err.message });\n\t\t}\n\t\tif (txs === null) {\n\t\t\tout.notes.push(\n\t\t\t\t`transactions not checked: the source served block ${id}'s header only`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tout.transactions = txs;\n\t}\n\n\t/**\n\t * The checkpoint chain's block id at `height`, from the nearest trusted\n\t * block above it: parent links when within MAX_WALK, else one MARF proof.\n\t */\n\tprivate async ancestor(\n\t\theight: number,\n\t): Promise<{ id: string; ancestry: Ancestry }> {\n\t\tconst known = this.below.get(height);\n\t\tif (known) return known;\n\t\tconst from = this.nearestAbove(height);\n\t\tif (from.height - height <= MAX_WALK) {\n\t\t\tconst walked = await this.walk(from, height);\n\t\t\tif (walked) return walked;\n\t\t}\n\t\treturn this.jump(this.nearestAbove(height), height);\n\t}\n\n\t/** The lowest trusted block above `height`: the checkpoint or one proven below it. */\n\tprivate nearestAbove(height: number): { height: number; id: string } {\n\t\tlet best = {\n\t\t\theight: Number(this.start.header.chainLength),\n\t\t\tid: this.start.id,\n\t\t};\n\t\tfor (const [h, { id }] of this.below)\n\t\t\tif (h > height && h < best.height) best = { height: h, id };\n\t\treturn best;\n\t}\n\n\t/**\n\t * Follow parent ids down from `from`: each parent header must hash to the\n\t * id its child committed to. Null when a 2.x header stops the walk: it\n\t * commits to its parent's block hash, not the parent's id.\n\t */\n\tprivate async walk(\n\t\tfrom: { height: number; id: string },\n\t\theight: number,\n\t): Promise<{ id: string; ancestry: Ancestry } | null> {\n\t\tconst ancestry: Ancestry = {\n\t\t\tfromHeight: from.height,\n\t\t\tfromBlockId: from.id,\n\t\t\tvia: \"parents\",\n\t\t};\n\t\tlet child = await this.header(from.id, \"ancestry\");\n\t\tfor (let h = from.height - 1; h >= height; h--) {\n\t\t\tif (isEpoch2Header(child)) return null;\n\t\t\tconst id = hex(child.parentBlockId);\n\t\t\tconst parent = await this.header(id, \"ancestry\", { blockId: id });\n\t\t\tif (Number(parent.chainLength) !== h)\n\t\t\t\tfail({\n\t\t\t\t\tstep: \"ancestry\",\n\t\t\t\t\tcode: \"height-mismatch\",\n\t\t\t\t\tmessage: `parent ${id} claims height ${parent.chainLength}, expected ${h}`,\n\t\t\t\t\tblockId: id,\n\t\t\t\t});\n\t\t\tthis.below.set(h, { id, ancestry });\n\t\t\tchild = parent;\n\t\t}\n\t\treturn this.below.get(height) ?? null;\n\t}\n\n\t/**\n\t * Read the id at `height` from `from`'s state: block `height + 1` wrote it\n\t * to `__MARF_BLOCK_HEIGHT_TO_HASH::<height>`, and the proof must recompute\n\t * `from`'s state root through the header of every trie it crosses.\n\t */\n\tprivate async jump(\n\t\tfrom: { height: number; id: string },\n\t\theight: number,\n\t): Promise<{ id: string; ancestry: Ancestry }> {\n\t\tconst at = { blockId: from.id };\n\t\tconst tip = await this.header(from.id, \"ancestry\", at);\n\t\tconst key = heightToHashKey(height);\n\t\tconst path = marfPath(key);\n\t\tconst answer = await fetchFor(\n\t\t\t\"ancestry\",\n\t\t\t`${key} at ${from.id}`,\n\t\t\t() => this.source.getMarfProof(hex(path), from.id),\n\t\t\tat,\n\t\t);\n\t\tif (!answer)\n\t\t\treturn fail({\n\t\t\t\tstep: \"ancestry\",\n\t\t\t\tcode: \"unavailable\",\n\t\t\t\tmessage: `source has no MARF proof of ${key} at block ${from.height}, ${from.height - height} blocks up; parent links reach ${MAX_WALK}`,\n\t\t\t\t...at,\n\t\t\t});\n\t\t// A block id fills the first 32 bytes of the MARFValue; the tail is zero.\n\t\tconst value = marfProofValue(answer.proof) ?? new Uint8Array();\n\t\tconst proven =\n\t\t\tvalue.length === MARF_VALUE_SIZE &&\n\t\t\tvalue.subarray(32).every((b) => b === 0) &&\n\t\t\t(await this.proveAt(tip, path, value, answer.proof, \"ancestry\", at));\n\t\tif (!proven)\n\t\t\treturn fail({\n\t\t\t\tstep: \"ancestry\",\n\t\t\t\tcode: \"ancestry-proof-invalid\",\n\t\t\t\tmessage: `${key} is not proven in block ${from.height}'s state`,\n\t\t\t\t...at,\n\t\t\t});\n\t\tconst ancestry: Ancestry = {\n\t\t\tfromHeight: from.height,\n\t\t\tfromBlockId: from.id,\n\t\t\tvia: \"marf\",\n\t\t};\n\t\tconst found = { id: hex(value.subarray(0, 32)), ancestry };\n\t\tthis.below.set(height, found);\n\t\treturn found;\n\t}\n\n\t/**\n\t * Below the checkpoint the hash chain already pins the block; still bind\n\t * its burn block when the Bitcoin checkpoint reaches it. The burn height\n\t * here is the source's hint, so a low one only skips this extra check.\n\t */\n\tprivate async bindBurnBelow(\n\t\theader: StacksHeader,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tlet hint: number;\n\t\ttry {\n\t\t\thint = await this.burnHint(header);\n\t\t} catch (err) {\n\t\t\tout.notes.push(`burn block not checked: ${(err as Error).message}`);\n\t\t\treturn;\n\t\t}\n\t\tif (hint < this.chain.checkpointHeight) {\n\t\t\tout.notes.push(\n\t\t\t\t`burn block not checked: its height ${hint} is below the Bitcoin checkpoint ${this.chain.checkpointHeight}`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst burn = await this.bindBurn(header, \"burn\");\n\t\tout.burnHeight = burn.burnHeight;\n\t\tout.bitcoinBlockHash = burn.hash;\n\t}\n\n\t/** Witness against the authenticated header's root, then the named diff and rows. */\n\tprivate async verifyState(\n\t\theader: StacksHeader,\n\t\tid: string,\n\t\tout: BlockVerification,\n\t): Promise<void> {\n\t\tconst src = this.source;\n\t\tconst height = Number(header.chainLength);\n\t\tconst witness = await fetchFor(\"witness\", `witness ${id}`, () =>\n\t\t\tsrc.getWitness(id),\n\t\t);\n\t\tconst writes = await this.stateWrites(height, out.notes);\n\t\tif (writes) out.writes = writes;\n\t\tconst { getVmEvents }: Partial<ProofSource> = this.rows ? src : {};\n\t\tconst rows = getVmEvents\n\t\t\t? await fetchFor(\"rows\", `vm_events ${height}`, () =>\n\t\t\t\t\tgetVmEvents.call(src, height),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tconst parent = isEpoch2Header(header)\n\t\t\t? epoch2ParentId(witness, header)\n\t\t\t: header.parentBlockId;\n\t\tconst parentId = parent && hex(parent);\n\t\tconst state = await verifyBlockState({\n\t\t\theight,\n\t\t\t// Null only when the witness fails its root check, which fails the block.\n\t\t\tparentBlockId: parent ?? new Uint8Array(32),\n\t\t\tstateRoot: header.stateIndexRoot,\n\t\t\twitness,\n\t\t\twrites,\n\t\t\trows,\n\t\t\tparentLeaves: parentId\n\t\t\t\t? await this.parentLeaves(parentId, out.notes)\n\t\t\t\t: undefined,\n\t\t\tparentHolds: async (leaf) =>\n\t\t\t\tparentId ? this.parentHolds(parentId, leaf) : false,\n\t\t});\n\t\tout.diff = state.diff;\n\t\tif (rows) out.rowsChecked = state.rowsChecked;\n\t\tout.notes.push(...state.notes);\n\t\tout.failures.push(...state.failures);\n\t}\n\n\t/**\n\t * The block's state writes, to name its diff. Optional evidence: a source\n\t * with none for the block (404, empty) or that fails leaves the diff\n\t * proven but unnamed, with a note, never a failure.\n\t */\n\tprivate async stateWrites(\n\t\theight: number,\n\t\tnotes: string[],\n\t): Promise<StateWrite[] | null> {\n\t\tconst { getStateWrites } = this.source;\n\t\tif (!getStateWrites) return null;\n\t\ttry {\n\t\t\tconst writes = await getStateWrites.call(this.source, height);\n\t\t\treturn writes?.length ? writes : null;\n\t\t} catch (err) {\n\t\t\tnotes.push(\n\t\t\t\t`state writes for block ${height} unavailable: ${(err as Error).message}`,\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/** Header by id, from the cache or the source; it must hash to `id`. */\n\tprivate async header(\n\t\tid: string,\n\t\tstep: VerifyStep,\n\t\textra: Partial<VerifyFailure> = {},\n\t): Promise<StacksHeader> {\n\t\tconst known = this.headers.get(id);\n\t\tif (known) return known;\n\t\tconst header = await this.fetchHeader(id, step, extra);\n\t\tif (hex(blockId(header)) !== id)\n\t\t\tfail({\n\t\t\t\tstep,\n\t\t\t\tcode: \"id-mismatch\",\n\t\t\t\tmessage: `source returned another block for ${id}`,\n\t\t\t\tblockId: id,\n\t\t\t\t...extra,\n\t\t\t});\n\t\tthis.headers.set(id, header);\n\t\treturn header;\n\t}\n\n\t/**\n\t * A Nakamoto block by id, or when the source has none (epoch 2.x blocks are\n\t * not served as Nakamoto blocks) its epoch 2.x header.\n\t */\n\tprivate async fetchHeader(\n\t\tid: string,\n\t\tstep: VerifyStep,\n\t\textra: Partial<VerifyFailure>,\n\t): Promise<StacksHeader> {\n\t\tconst src = this.source;\n\t\tlet raw: Bytes;\n\t\ttry {\n\t\t\traw = await src.getBlock(id);\n\t\t\tthis.rememberRaw(id, raw);\n\t\t} catch (err) {\n\t\t\tconst reason = `block ${id}: ${(err as Error).message}`;\n\t\t\tconst { getEpoch2Header } = src;\n\t\t\tif (!getEpoch2Header)\n\t\t\t\treturn fail({ step, code: \"unavailable\", message: reason, ...extra });\n\t\t\tconst e2 = await fetchFor(\n\t\t\t\tstep,\n\t\t\t\t`${reason}; epoch 2.x header`,\n\t\t\t\t() => getEpoch2Header.call(src, id),\n\t\t\t\textra,\n\t\t\t);\n\t\t\ttry {\n\t\t\t\treturn parseEpoch2Header(e2.header, e2.consensusHash);\n\t\t\t} catch (parseErr) {\n\t\t\t\treturn fail({\n\t\t\t\t\tstep,\n\t\t\t\t\tcode: \"invalid-header\",\n\t\t\t\t\tmessage: `epoch 2.x header ${id} does not parse: ${(parseErr as Error).message}`,\n\t\t\t\t\t...extra,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn parseHeader(raw, step);\n\t}\n\n\t/**\n\t * Prove `value` at `path` in `tip`'s state, fetching the header of every\n\t * ancestor trie the proof crosses.\n\t */\n\tprivate async proveAt(\n\t\ttip: StacksHeader,\n\t\tpath: Bytes,\n\t\tvalue: Bytes,\n\t\tproof: Bytes,\n\t\tstep: VerifyStep,\n\t\textra: Partial<VerifyFailure> = {},\n\t): Promise<boolean> {\n\t\tconst headers = [tip];\n\t\tfor (const id of marfProofAncestors(proof))\n\t\t\theaders.push(await this.header(id, step, extra));\n\t\treturn verifyMarfProof({\n\t\t\tproof,\n\t\t\tpath,\n\t\t\tvalue,\n\t\t\troot: tip.stateIndexRoot,\n\t\t\theaders,\n\t\t});\n\t}\n\n\t/**\n\t * The parent's own trie leaves, from its witness checked against the\n\t * parent header. Optional evidence: when the source cannot serve it,\n\t * carried leaves fall back to per-leaf proofs (named) or stay unlabeled.\n\t */\n\tprivate async parentLeaves(\n\t\tparentId: string,\n\t\tnotes: string[],\n\t): Promise<WitnessLeaf[] | undefined> {\n\t\ttry {\n\t\t\tconst parent = await this.header(parentId, \"names\");\n\t\t\tconst w = parseWitness(await this.source.getWitness(parentId));\n\t\t\tif (bytesEqual(w.root, parent.stateIndexRoot)) return w.leaves;\n\t\t\tnotes.push(`parent witness ${parentId} root does not match its header`);\n\t\t} catch (err) {\n\t\t\tnotes.push(\n\t\t\t\t`parent witness ${parentId} unavailable: ${(err as Error).message}`,\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * A carried leaf holds the parent's value. The parent header is\n\t * authenticated by hash: its id is committed in the authenticated child\n\t * (its header, or for 2.x its own trie).\n\t */\n\tprivate async parentHolds(\n\t\tparentId: string,\n\t\tleaf: WitnessLeaf,\n\t): Promise<boolean> {\n\t\tconst parent = await this.header(parentId, \"names\");\n\t\tconst pathHex = hex(leaf.path);\n\t\tconst answer = await fetchFor(\"names\", `MARF ${pathHex} at parent`, () =>\n\t\t\tthis.source.getMarfProof(pathHex, parentId),\n\t\t);\n\t\tif (!answer) return false;\n\t\tconst value = new Uint8Array(MARF_VALUE_SIZE);\n\t\tvalue.set(leaf.valueHash);\n\t\treturn this.proveAt(parent, leaf.path, value, answer.proof, \"names\");\n\t}\n\n\t/** Consensus hash -> PoW-verified burn block, via the sortition preimage. */\n\tprivate async bindBurn(\n\t\theader: StacksHeader,\n\t\tstep: VerifyStep,\n\t\textra: Partial<VerifyFailure> = {},\n\t): Promise<{ burnHeight: number; hash: string }> {\n\t\tconst ch = hex(header.consensusHash);\n\t\tconst known = this.burns.get(ch);\n\t\tif (known) return known;\n\t\tconst bp = await fetchFor(\n\t\t\tstep,\n\t\t\t`burn preimage ${ch}`,\n\t\t\t() => this.preimage(ch),\n\t\t\textra,\n\t\t);\n\t\tconst hash = verifyConsensusPreimage(header.consensusHash, bp.preimage);\n\t\tif (!hash)\n\t\t\treturn fail({\n\t\t\t\tstep,\n\t\t\t\tcode: \"preimage-mismatch\",\n\t\t\t\tmessage: `preimage does not hash to consensus hash ${ch}`,\n\t\t\t\t...extra,\n\t\t\t});\n\t\tif (bp.burnHeight < this.chain.checkpointHeight)\n\t\t\tfail({\n\t\t\t\tstep,\n\t\t\t\tcode: \"before-checkpoint\",\n\t\t\t\tmessage: `burn height ${bp.burnHeight} is below the Bitcoin checkpoint ${this.chain.checkpointHeight}`,\n\t\t\t\t...extra,\n\t\t\t});\n\t\tawait this.syncBitcoin(bp.burnHeight);\n\t\tconst burnHeight = this.chain.heightOf(hash);\n\t\tif (burnHeight === undefined)\n\t\t\treturn fail({\n\t\t\t\tstep,\n\t\t\t\tcode: \"burn-not-in-chain\",\n\t\t\t\tmessage: `burn block ${hash} is not in the verified Bitcoin chain (synced ${this.chain.checkpointHeight}..${this.chain.tip.height})`,\n\t\t\t\t...extra,\n\t\t\t});\n\t\tconst bound = { burnHeight, hash };\n\t\tthis.burns.set(ch, bound);\n\t\treturn bound;\n\t}\n\n\t/** Extend the Bitcoin chain to `height`, validating PoW, retarget and MTP. */\n\tprivate async syncBitcoin(height: number): Promise<void> {\n\t\twhile (this.chain.tip.height < height) {\n\t\t\tconst from = this.chain.tip.height + 1;\n\t\t\tconst count = Math.min(BITCOIN_BATCH, height - from + 1);\n\t\t\tconst headers = await fetchFor(\"bitcoin\", `bitcoin headers ${from}`, () =>\n\t\t\t\tthis.source.getBitcoinHeaders(from, count),\n\t\t\t);\n\t\t\tif (headers.length === 0)\n\t\t\t\tfail({\n\t\t\t\t\tstep: \"bitcoin\",\n\t\t\t\t\tcode: \"unavailable\",\n\t\t\t\t\tmessage: `source has no Bitcoin headers from ${from}`,\n\t\t\t\t});\n\t\t\ttry {\n\t\t\t\tthis.chain.append(headers);\n\t\t\t} catch (err) {\n\t\t\t\tif (!(err instanceof HeaderValidationError)) throw err;\n\t\t\t\tfail({ step: \"bitcoin\", code: \"invalid-header\", message: err.message });\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * The proven signer set for `cycle`. Walks forward from the checkpoint:\n\t * set c+1 is read from an anchor block in c+1's prepare phase, whose\n\t * header set c signed.\n\t */\n\tprivate async signerSet(\n\t\tcycle: number,\n\t\ttarget: SearchPoint,\n\t): Promise<SignerSet> {\n\t\tconst known = this.sets.get(cycle);\n\t\tif (known) return known;\n\t\tconst first = this.checkpoint.stacks.cycle;\n\t\tif (cycle < first)\n\t\t\tfail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"before-checkpoint\",\n\t\t\t\tmessage: `cycle ${cycle} precedes the checkpoint's cycle ${first}`,\n\t\t\t\tcycle,\n\t\t\t});\n\t\tlet lo = await this.startPoint();\n\t\tfor (let c = first; c < cycle; c++) {\n\t\t\tconst next = this.sets.get(c + 1);\n\t\t\tif (next) {\n\t\t\t\tlo = this.anchors.get(c + 1) ?? lo;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst anchor = await this.locateAnchor(c + 1, lo, target);\n\t\t\tthis.sets.set(c + 1, await this.proveNextSet(c + 1, anchor));\n\t\t\tthis.anchors.set(c + 1, anchor);\n\t\t\tlo = anchor;\n\t\t}\n\t\treturn this.sets.get(cycle) as SignerSet;\n\t}\n\n\t/** The checkpoint block as a search bound; its burn height is a source hint. */\n\tprivate async startPoint(): Promise<SearchPoint> {\n\t\tconst { header } = this.start;\n\t\tconst height = Number(header.chainLength);\n\t\ttry {\n\t\t\treturn { height, burn: await this.burnHint(header) };\n\t\t} catch {\n\t\t\treturn { height };\n\t\t}\n\t}\n\n\tprivate async burnHint(header: StacksHeader): Promise<number> {\n\t\tconst ch = hex(header.consensusHash);\n\t\treturn (\n\t\t\tthis.burns.get(ch)?.burnHeight ?? (await this.preimage(ch)).burnHeight\n\t\t);\n\t}\n\n\tprivate async preimage(ch: string): Promise<BurnPreimage> {\n\t\tlet bp = this.preimages.get(ch);\n\t\tif (!bp) {\n\t\t\tbp = await this.source.getBurnPreimage(ch);\n\t\t\tthis.preimages.set(ch, bp);\n\t\t}\n\t\treturn bp;\n\t}\n\n\tprivate async locateAnchor(\n\t\tcycle: number,\n\t\tlo: SearchPoint,\n\t\thi: SearchPoint,\n\t): Promise<Probe> {\n\t\tconst start = cycleStart(cycle);\n\t\tconst window = [start - MAINNET_PREPARE_LENGTH, start] as const;\n\t\tconst probe = async (h: number): Promise<Probe> => {\n\t\t\tconst raw = await fetchFor(\n\t\t\t\t\"signer-set\",\n\t\t\t\t`block at height ${h}`,\n\t\t\t\t() => this.source.getBlock(h),\n\t\t\t\t{ cycle },\n\t\t\t);\n\t\t\tconst header = parseHeader(raw, \"signer-set\");\n\t\t\tconst id = hex(blockId(header));\n\t\t\tthis.headers.set(id, header);\n\t\t\tconst burn = await fetchFor(\n\t\t\t\t\"signer-set\",\n\t\t\t\t`burn hint for block ${id}`,\n\t\t\t\t() => this.burnHint(header),\n\t\t\t\t{ cycle, blockId: id },\n\t\t\t);\n\t\t\treturn { height: Number(header.chainLength), burn, header, id };\n\t\t};\n\t\tconst anchor = await findAnchor(lo, hi, window, probe);\n\t\tif (!anchor)\n\t\t\treturn fail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"anchor-not-found\",\n\t\t\t\tmessage: `no block with a burn height in ${window[0]}..${window[1] - 1} (cycle ${cycle} prepare phase) between heights ${lo.height} and ${hi.height}`,\n\t\t\t\tcycle,\n\t\t\t});\n\t\treturn anchor;\n\t}\n\n\t/**\n\t * Set `cycle` from `anchor`: the anchor must be bound to a burn block in\n\t * `cycle`'s prepare phase, be signed by the set of the cycle that burn\n\t * height dictates (`cycle - 1`), and hold set `cycle` in its state (MARF\n\t * proof). Adjacent sets overlap enough that one block can clear both, so\n\t * the set is always chosen by proven burn height, never by which passes.\n\t */\n\tprivate async proveNextSet(cycle: number, anchor: Probe): Promise<SignerSet> {\n\t\tconst at = { cycle, blockId: anchor.id };\n\t\tconst { burnHeight } = await this.bindBurn(anchor.header, \"signer-set\", at);\n\t\tconst start = cycleStart(cycle);\n\t\tif (burnHeight < start - MAINNET_PREPARE_LENGTH || burnHeight >= start)\n\t\t\tfail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"anchor-outside-window\",\n\t\t\t\tmessage: `anchor burn height ${burnHeight} is outside cycle ${cycle}'s prepare phase ${start - MAINNET_PREPARE_LENGTH}..${start - 1}`,\n\t\t\t\t...at,\n\t\t\t});\n\t\tconst signing = rewardCycle(burnHeight);\n\t\tconst sig = verifySignerSignatures(\n\t\t\tanchor.header,\n\t\t\tthis.sets.get(signing) as SignerSet,\n\t\t);\n\t\tif (!sig.valid)\n\t\t\tfail({\n\t\t\t\t...signatureFailure(sig, \"signer-set\", signing),\n\t\t\t\t...at,\n\t\t\t\tcode: \"anchor-unsigned\",\n\t\t\t});\n\n\t\tconst path = marfPath(\n\t\t\tmapEntryKey(SIGNERS_CONTRACT, \"cycle-signer-set\", uintCV(cycle)),\n\t\t);\n\t\tconst answer = await fetchFor(\n\t\t\t\"signer-set\",\n\t\t\t`signer set ${cycle} at ${anchor.id}`,\n\t\t\t() => this.source.getMarfProof(hex(path), anchor.id),\n\t\t\tat,\n\t\t);\n\t\tconst value = answer?.data.replace(/^0x/, \"\") ?? \"\";\n\t\tconst proven =\n\t\t\tanswer !== null &&\n\t\t\t(await this.proveAt(\n\t\t\t\tanchor.header,\n\t\t\t\tpath,\n\t\t\t\tmarfValue(value),\n\t\t\t\tanswer.proof,\n\t\t\t\t\"signer-set\",\n\t\t\t\tat,\n\t\t\t));\n\t\tif (!proven)\n\t\t\tfail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"set-proof-invalid\",\n\t\t\t\tmessage: `signer set ${cycle} is not proven in anchor ${anchor.id}'s state`,\n\t\t\t\t...at,\n\t\t\t});\n\t\tlet set: SignerSet;\n\t\ttry {\n\t\t\tset = decodeSignerSet(value);\n\t\t} catch (err) {\n\t\t\treturn fail({\n\t\t\t\tstep: \"signer-set\",\n\t\t\t\tcode: \"set-proof-invalid\",\n\t\t\t\tmessage: `signer set ${cycle}: ${(err as Error).message}`,\n\t\t\t\t...at,\n\t\t\t});\n\t\t}\n\t\treturn set;\n\t}\n}\n\n/** The authenticated header's identity fields, for callers that rebuild the block. */\nfunction describeHeader(header: StacksHeader, out: BlockVerification): void {\n\tout.stateRoot = hex(header.stateIndexRoot);\n\tout.consensusHash = hex(header.consensusHash);\n\tif (!isEpoch2Header(header)) {\n\t\tout.blockHash = hex(signerSignatureHash(header));\n\t\tout.timestamp = Number(header.timestamp);\n\t}\n}\n\nfunction parseHeader(raw: Bytes, step: VerifyStep): NakamotoHeader {\n\ttry {\n\t\treturn parseNakamotoHeader(raw);\n\t} catch (err) {\n\t\treturn fail({\n\t\t\tstep,\n\t\t\tcode: \"invalid-header\",\n\t\t\tmessage: `block bytes do not parse: ${(err as Error).message}`,\n\t\t});\n\t}\n}\n\n/**\n * A 2.x header commits only to its parent's block hash; the parent's id is in\n * the block's own trie at `__MARF_BLOCK_HEIGHT_TO_HASH::<height - 1>`. Read\n * from a witness whose root matches the header, else null.\n */\nfunction epoch2ParentId(witness: Bytes, header: Epoch2Header): Bytes | null {\n\tconst height = Number(header.chainLength);\n\tif (height === 0) return null;\n\ttry {\n\t\tconst w = parseWitness(witness);\n\t\tif (!bytesEqual(w.root, header.stateIndexRoot)) return null;\n\t\tconst path = marfPath(heightToHashKey(height - 1));\n\t\treturn w.leaves.find((l) => bytesEqual(l.path, path))?.valueHash ?? null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction signatureFailure(\n\tsig: ReturnType<typeof verifySignerSignatures>,\n\tstep: VerifyStep,\n\tcycle: number,\n): VerifyFailure {\n\tconst weight = `${sig.signedWeight}/${sig.totalWeight} signed, threshold ${sig.threshold}`;\n\tif (sig.unknown.length)\n\t\treturn {\n\t\t\tstep,\n\t\t\tcode: \"unknown-signer\",\n\t\t\tmessage: `${sig.unknown.length} signer(s) not in cycle ${cycle}'s set (${weight})`,\n\t\t\tcycle,\n\t\t};\n\tif (sig.duplicates.length)\n\t\treturn {\n\t\t\tstep,\n\t\t\tcode: \"duplicate-signer\",\n\t\t\tmessage: `${sig.duplicates.length} duplicate signature(s) (${weight})`,\n\t\t\tcycle,\n\t\t};\n\tif (sig.invalid)\n\t\treturn {\n\t\t\tstep,\n\t\t\tcode: \"bad-signature\",\n\t\t\tmessage: `${sig.invalid} signature(s) do not recover (${weight})`,\n\t\t\tcycle,\n\t\t};\n\treturn {\n\t\tstep,\n\t\tcode: \"below-threshold\",\n\t\tmessage: `cycle ${cycle} signers: ${weight}`,\n\t\tcycle,\n\t};\n}\n\n/** One-shot: verify a block from a checkpoint (MAINNET_CHECKPOINT by default). */\nexport const verifyBlock = (\n\tref: string | number,\n\topts: VerifyOptions,\n): Promise<BlockVerification> => new BlockVerifier(opts).verify(ref);\n"
20
20
  ],
21
- "mappings": "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",
22
- "debugId": "AFAA56E81913DBC664756E2164756E21",
21
+ "mappings": "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",
22
+ "debugId": "14EE5CF6A37C9A0B64756E2164756E21",
23
23
  "names": []
24
24
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@secondlayer/verify",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Check a Stacks block yourself: Bitcoin headers, signer signatures and MARF state proofs, from one trusted checkpoint.",
5
5
  "license": "MIT",
6
6
  "repository": {