{
 "date": "2026-08-24",
 "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-24.csv.gz",
  "sha256": "1cd53639e163d1531aaff92d21f2eb29391ba173622b5a99d47f68ce6cdb4466",
  "bytes": 145438,
  "rows": 23175,
  "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": "4b3de2231bf54a29c89fc97865bf1d054176d7da5c4ac4773fbe621ce74db73d",
 "prev_chained_root": "f6e3c7267289a915b11095aafe9230ef69c9fe03d93b05f4cc2cf5e311ff7e35",
 "chained_root": "cc5df2d2b5184240f834c27b2445b52b4ca3526ba6be2c63a852937b22d56c83",
 "rows": 23175,
 "anchored_at": 1787675584,
 "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-24.txt",
  "sha256": "1dccda59da092a2edb9e429067aa7b2ca5be4227acd25c2fb41f2ebf0104d594"
 },
 "proof": {
  "url": "/data/roots/2026-08-24.txt.ots",
  "sha256": "d48a8e263e832c2ec1fe719c9b1a7f48a757c90d4ebbd81ca2e15865dc31a306",
  "verify": "ots verify <file>  (OpenTimestamps client)"
 },
 "reproduce": [
  "curl -sO https://compute.pangle.online/data/days/gpu-price-tape-2026-08-24.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"
 ]
}