{
 "date": "2026-08-25",
 "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-25.csv.gz",
  "sha256": "bf6ef64f9d1b7638b79cb1e354c4fd2994f5d2106a3b902967a2ca1db8e90ac8",
  "bytes": 117434,
  "rows": 19606,
  "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": "32625d489e1704025ae3cdd3451d112b2d117622375691d82e8cfd1652424462",
 "prev_chained_root": "cc5df2d2b5184240f834c27b2445b52b4ca3526ba6be2c63a852937b22d56c83",
 "chained_root": "bb5e0fd0486fb9c2d04601dece327e91f8c2b83a8493ac1284bd5a357c5ec500",
 "rows": 19606,
 "anchored_at": 1787704912,
 "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-25.txt",
  "sha256": "87cf00252a459fb85c2d4b2131ee70ffa6c4cda28585a9eb1c33b41b04bced27"
 },
 "proof": {
  "url": "/data/roots/2026-08-25.txt.ots",
  "sha256": "967dcfe163f7896f3729ad4bdcf89c8cbf0530cf55214b46e99043c63705ef27",
  "verify": "ots verify <file>  (OpenTimestamps client)"
 },
 "reproduce": [
  "curl -sO https://compute.pangle.online/data/days/gpu-price-tape-2026-08-25.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"
 ]
}