{
 "date": "2026-08-27",
 "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-27.csv.gz",
  "sha256": "cafd236f82894c51bd5c6a515aa50fec0274316efa1113ea1347c977df3076fe",
  "bytes": 101710,
  "rows": 16739,
  "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": "a0e0de0fadf85adb7ce86a146b7496b54fbd1ee4962e7ff0748cecefbab3ec2c",
 "prev_chained_root": "77008c99897bb9d95335ce8b40eb0995f796812ccbc67fd0fba2ce27a6fb746f",
 "chained_root": "06e2fb5991c9f9628ef9ee88e2ecee7f72450aad87a92f6578ef4e6414e08b02",
 "rows": 16739,
 "anchored_at": 1787877770,
 "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-27.txt",
  "sha256": "7cedb0b1018f3a9f98e23815f1360d57fca347b24996d72bf21be00e27e9767d"
 },
 "proof": {
  "url": "/data/roots/2026-08-27.txt.ots",
  "sha256": "6e10a13d962e439165a54e9f223e54c0c00fa207c20df6754063e397d07abf9f",
  "verify": "ots verify <file>  (OpenTimestamps client)"
 },
 "reproduce": [
  "curl -sO https://compute.pangle.online/data/days/gpu-price-tape-2026-08-27.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"
 ]
}