{
 "date": "2026-08-23",
 "sealed": true,
 "note": "Everything below is content-addressed. Fetch each file, check its sha256 against this manifest, and nothing a cache or a mirror does can change what you are verifying.",
 "tape": {
  "url": "/data/days/gpu-price-tape-2026-08-23.csv.gz",
  "sha256": "91589750de09bb195186d488acf8701157e95133ff3a23f541aa6efe5db466d2",
  "bytes": 75120,
  "rows": 12301,
  "header": "snapshot_ts_utc_epoch,provider,gpu_model,offer_class,offer_count,min_price_per_gpu_hr_usd,median_price_per_gpu_hr_usd"
 },
 "merkle_root": "644ebadc36b50e59621bf6c7474cb4de15b6c44695e7b0132ddf7e87d8f92a17",
 "prev_chained_root": "0000000000000000000000000000000000000000000000000000000000000000",
 "chained_root": "f6e3c7267289a915b11095aafe9230ef69c9fe03d93b05f4cc2cf5e311ff7e35",
 "rows": 12301,
 "anchored_at": 1787675472,
 "method": {
  "day_boundary": "00:00:00Z to 24:00:00Z, TRUE UTC \u2014 snapshot_ts >= start AND < start+86400",
  "leaf": "sha256 of the row's line from gpu-price-tape.csv.gz, verbatim, with the line terminator (CR and/or LF) stripped and nothing else changed",
  "leaf_order": "leaves sorted ASCENDING as lowercase hex strings, before any pairing",
  "tree": "binary merkle over the sorted leaves: sha256 of the two child hex strings concatenated as text; on a level with an odd count the LAST node is duplicated and paired with itself",
  "chain": "sha256(prev_chained_root + merkle_root), both lowercase hex, ASCII concatenation",
  "genesis": "0000000000000000000000000000000000000000000000000000000000000000"
 },
 "root_file": {
  "url": "/data/roots/2026-08-23.txt",
  "sha256": "3c96ab660f737c73c8c0f8072854bb1271956981c1a2d89c91cb51401103abf8"
 },
 "proof": {
  "url": "/data/roots/2026-08-23.txt.ots",
  "sha256": "14c517c1ad39ddff10ddcde453b428517d8c847c7e91163e4d851b2ef7e5bdde",
  "verify": "ots verify <file>  (OpenTimestamps client)"
 },
 "reproduce": [
  "curl -sO https://compute.pangle.online/data/days/gpu-price-tape-2026-08-23.csv.gz",
  "sha256sum the file and compare with tape.sha256 above",
  "gunzip -c it, drop the header, strip CR/LF from each line",
  "sha256 each line; sort those hex digests ascending",
  "pair and hash upward, duplicating the LAST node on odd levels",
  "the result is merkle_root; sha256(prev_chained_root + merkle_root) is chained_root"
 ]
}