{
  "schema_version": "2026-06-01",
  "generated_at_utc": "2026-06-10T03:07:48Z",
  "generated_by": "generate_all_v5.py",
  "filename": "explorer.html",
  "module_url": "modules/explorer.html",
  "module_public_url": "https://msgchain.org/whitepaper/modules/explorer.html",
  "export_url": "module_exports/explorer.json",
  "export_public_url": "https://msgchain.org/whitepaper/module_exports/explorer.json",
  "title": "生态层: 区块浏览器与数据索引 (Explorer)",
  "status": "partial",
  "status_label": "部分实现",
  "group": "ecosystem",
  "group_label": "生态与路线",
  "tags": [
    "注册中心",
    "规范键",
    "铸造",
    "奖励",
    "结算",
    "接口",
    "查询",
    "P2P"
  ],
  "outlinks": [
    "indexer_data_plane.html",
    "rpc.html",
    "sdk_dev_surface.html",
    "evidence_index.html"
  ],
  "backlinks": [
    "indexer_data_plane.html",
    "credibility.html",
    "overview.html",
    "evidence_coverage.html"
  ],
  "related": [
    "indexer_data_plane.html",
    "rpc.html",
    "nodeops.html",
    "world_computer.html",
    "scaling_cost.html",
    "keplr.html",
    "ai_registry_market.html",
    "ai_world_computer_roadmap.html"
  ],
  "content_excerpt": "🔍 现状: 本地 Explorer 子门禁与 hash search fail-closed 已补强 🔍 边界: live/public Explorer 仍待部署 flowchart TD subgraph CurrentQuery[\"当前已具备的链上查询面\"] Node[\"MSG 全节点\"] --> RPC[\"Tendermint RPC / JSON-RPC / REST / gRPC\"] RPC --> Status[\"/api/v1/status\"] RPC --> Balance[\"/api/v1/bank/balances\"] RPC --> Tx[\"/broadcast tx commit / tx 查询\"] RPC --> ContractList[\"/api/v1/contracts\"] RPC --> CanonicalList[\"/api/v1/contracts?source=canonical\"] RPC --> GetLogs[\"JSON-RPC eth getLogs\"] RPC --> HashSearch[\"/api/v1/search?q= \"] REST[\"pkg/api/rest/server.go\"] --> Node end subgraph CurrentIndexBase[\"当前已存在的索引与事件基础\"] Listener[\"pkg",
  "content_text": "🔍 现状: 本地 Explorer 子门禁与 hash search fail-closed 已补强 🔍 边界: live/public Explorer 仍待部署 flowchart TD subgraph CurrentQuery[\"当前已具备的链上查询面\"] Node[\"MSG 全节点\"] --> RPC[\"Tendermint RPC / JSON-RPC / REST / gRPC\"] RPC --> Status[\"/api/v1/status\"] RPC --> Balance[\"/api/v1/bank/balances\"] RPC --> Tx[\"/broadcast tx commit / tx 查询\"] RPC --> ContractList[\"/api/v1/contracts\"] RPC --> CanonicalList[\"/api/v1/contracts?source=canonical\"] RPC --> GetLogs[\"JSON-RPC eth getLogs\"] RPC --> HashSearch[\"/api/v1/search?q= \"] REST[\"pkg/api/rest/server.go\"] --> Node end subgraph CurrentIndexBase[\"当前已存在的索引与事件基础\"] Listener[\"pkg/indexer/event listener.go\"] --> Poll[\"轮询区块高度 / 拉取区块\"] Poll --> Parse[\"解析交易与事件\"] Parse --> Swap[\"SwapEvent / DEX 事件处理\"] Swap --> WS[\"WSHub 广播\"] WS --> WSFilter[\"WS logs address/topics 过滤\"] end subgraph LocalExplorer[\"本地已闭环的 Explorer 子门禁\"] SourceMeta[\"合约 source/interface/wasm metadata\"] SourceVerify[\"source verification state\"] SelectedEvents[\"选中合约事件查询\"] CommittedIndex[\"committed block/tx hash index\"] CanonicalCheck[\"命中后重读 committed block 做 canonical 校验\"] FailClosed[\"索引 stale/mismatch -> HTTP 503 fail-closed\"] end subgraph TargetExplorer[\"完整 Explorer 目标形态\"] Fetcher[\"通用 Indexer / Block / Tx / Event Fetcher\"] Parser[\"通用 Decoder / Parser\"] DB[(PostgreSQL)] Redis[(Redis)] API[\"Explorer API\"] Web[\"Subscan-like / Mintscan-like UI\"] end ContractList --> SourceMeta CanonicalList --> SourceMeta HashSearch --> CommittedIndex CommittedIndex --> CanonicalCheck CanonicalCheck --> FailClosed SourceMeta --> SourceVerify GetLogs --> SelectedEvents WSFilter --> SelectedEvents RPC --> Fetcher REST --> Fetcher Parse --> Fetcher Fetcher --> Parser Parser --> DB Parser --> Redis API --> DB API --> Redis Web --> API SourceVerify --> Boundary[\"边界: live/public Explorer / indexed logs / release signing 仍待完成\"] SelectedEvents --> Boundary FailClosed --> Boundary × 📄 当前基础: 20260530 + 20260605 已补强的本地 Explorer 子门禁 // 当前已被真实代码 + 测试 + raw 证据关闭的本地子门禁： // 1. Contract source metadata： // - /api/v1/contracts 透传 registry version / interface hash / capabilities / // source / source hash / wasm hash / active algorithm version / // metadata complete / missing metadata fields // // 2. Canonical source query： // - /api/v1/contracts?source=canonical 优先使用 registry canonical mappings // 的同等 metadata，再 fallback 到旧内存 canonical map // // 3. Selected-contract event query： // - Explorer UI 可通过 JSON-RPC eth getLogs 查询选中合约事件 // // 4. WS logs filter： // - WebSocket logs subscription 按 address/topics 过滤 // - malformed filter fail-closed // // 5. Hash search committed-index fail-closed： // - /api/v1/search?q= 不再每次全链扫描 // - 先命中 committed block/tx hash index，再重读 committed block 做 canonical 校验 // - stale/mismatch / missing index metadata 时 HTTP 503 fail-closed // // 6. 最小 raw 证据： // - logs/re-service/20260530-explorer-contract-source-and-log-filtering/ // - go test jsonrpc ws log filtering 20260530.txt // - go test quantum contract list registry metadata 20260530 after canonical rerun.txt // - npm test explorer contracts 20260530 after canonical.txt (22 tests PASS) // - logs/re-service/20260515-mainnet-readiness/tendermint-explorer-search-hash-committed-index-failclosed-20260605/ // - go test quantum tendermint explorer search hash committed index failclosed 20260605.txt // // 因此 explorer 页不能再写成“仅有抽象路线图”；当前更准确的口径是： // “本地 Explorer contract/source/log-filtering/hash-search fail-closed 子门禁已补强，但完整 live/public 浏览器仍未完成”。 × 📄 缺口边界: 完整 Explorer 仍属生态部署项 // 当前仍待补齐的部分： // - real live/public Explorer deployment 与浏览器原始证据 // - real indexed logs backend / retention / pagination / schema / SLO // - public RPC / WS / Indexer conformance 与 error model // - release artifact signing / checksum / deployment runbook // - SDK / Wallet / Explorer production path 与独立审计 // // 当前可信结论： // - 可以证明“Explorer 本地 contract/source/log-filtering/hash-search fail-closed 子门禁已闭环” // - 不能证明“Subscan 级 live/public 浏览器服务已完整上线” // - 不能把 20260530/20260605 的本地补强，偷换成 MSG 主网 ready Explorer 交叉校验 状态：部分实现 可证：contract source metadata / canonical source query / selected-contract event query / WS logs filter 新增： /api/v1/search?q= 已切到 committed hash index，stale/mismatch 时 HTTP 503 fail-closed 边界：本地子门禁已关闭，但 live/public Explorer、真实 indexed logs、发布签名仍未关闭 数据平面：看 Indexer 与可检索数据层 接口底座：看 JSON-RPC / REST / gRPC 查询面 开发者表面：看 Explorer 对接 SDK / Wallet 的边界 证据入口：回原始日志 / query / 测试样本",
  "code_refs": [
    "pkg/api/rest/server.go",
    "pkg/indexer/event_listener.go"
  ],
  "evidence_refs": [
    "logs/re-service/20260530-explorer-contract-source-and-log-filtering/",
    "logs/re-service/20260515-mainnet-readiness/tendermint-explorer-search-hash-committed-index-failclosed-20260605/"
  ],
  "document_refs": [],
  "boundary_clauses": [
    "🔍 边界: live/public Explorer 仍待部署",
    "SourceVerify --> Boundary[\"边界: live/public Explorer / indexed logs / release signing 仍待完成\"]",
    "// 因此 explorer 页不能再写成“仅有抽象路线图”；当前更准确的口径是：",
    "// “本地 Explorer contract/source/log-filtering/hash-search fail-closed 子门禁已补强，但完整 live/public 浏览器仍未完成”。",
    "📄 缺口边界: 完整 Explorer 仍属生态部署项",
    "// 当前仍待补齐的部分：",
    "// - 不能证明“Subscan 级 live/public 浏览器服务已完整上线”",
    "// - 不能把 20260530/20260605 的本地补强，偷换成 MSG 主网 ready"
  ]
}