#!/usr/bin/env python3 """Montana explorer JSON API — читает state files docker-volume montana-data.""" import os, sys, json, struct, glob, time from http.server import BaseHTTPRequestHandler, HTTPServer from urllib.parse import urlparse, parse_qs DATA_DIR = os.environ.get("MT_DATA_DIR", "/var/lib/docker/volumes/montana-data/_data") PROPOSALS = os.path.join(DATA_DIR, "proposals") ACCOUNTS_BIN = os.path.join(DATA_DIR, "accounts.bin") NODES_BIN = os.path.join(DATA_DIR, "nodes.bin") CANDIDATES_BIN = os.path.join(DATA_DIR, "candidates.bin") META_LAST = os.path.join(DATA_DIR, "meta_last_cemented.bin") CURRENT_WIN = os.path.join(DATA_DIR, "current_window.bin") ACCOUNT_SZ = 2059 NODE_SZ = 2098 CANDIDATE_SZ = 2082 PROPOSAL_SZ = 3722 # header; cemented envelope may be larger def read_u64_le(path): try: with open(path, "rb") as f: return struct.unpack("= 3724 else 0), } def parse_node_record(buf): if len(buf) < NODE_SZ: return None return { "node_id": buf[0:32].hex(), "suite_id": struct.unpack("