C-4 independence


C-1 が「運営の部品に頼らず再構築できる」、C-3 が「2ノードで同じレコードに到達」を示しました。C-4 はその下流の3層――検索索引・API・フロントエンド――が、それぞれ運営のプライベートサービスに依存せず独立に成立するかを、個別に証明します。レビュアーの §19 #19(FE 独立性)・#20(API 独立性)・#21(インデクサー再現性)への回答です。

やさしく言うと

チェーンから組み直した帳簿(C-1C-3)の下流には3つの設備があります――索引(カード目録)、API(受付窓口)、FE(閲覧室)。これらが運営の秘密設備を借りずに、自分の帳簿と自分のノードだけで立つか、を一つずつ確かめます。

チェーン由来の帳簿C-1/C-3

索引・API・FE下流3層

3層とも独立運営非依存

結果、3層すべて運営非依存。API は自ノードがチェーン由来のレコードを配信(価格すらオンチェーンの Uniswap 由来)、索引は自前 Elasticsearch がローカル DB から構築、FE は公開 repo からビルドして自ノードを向く。外に出るのは GIF や AI 画像など任意の機能だけで、しかも運営ではなく中立の第三者サービスです。

このページは検証台帳C-4 項目の詳細記録です。C-1(再構築手順・運営非依存)の棚卸しを土台に、FE/API/索引の個別証明(§19 #19–21)を担保します。

1. 主張(検証対象)

公開レコードの下流3層が、運営のプライベートサービスに依存せず独立に成立すること。すなわち #20 API=レコードをチェーンから組み立て自ノードが配信し運営 API に依存しない、#21 索引=自前インデクサーがローカル DB(チェーン由来)から再現可能に構築される、#19 FE=公開コードだけで独立フロントエンドが立つ、こと。

2. 検証方法

1

#20 API:レコードの組み立て元を追う

公開レコードがチェーン(RawEventsGatherer → ActionProcessor → PostgreSQL)から組まれ、Api が外向き配信であることを確認。周辺機能が運営 API を叩いていないかも棚卸し。

2

#21 索引:インデクサーの入力源を確認

Elasticsearch がローカル DB のドメインオブジェクトActionProcessorRawEvent から導出)から構築されること、すなわち運営フィードではなくチェーン由来 DB の決定論的射影であることを確認。

3

#19 FE:公開コードからの独立ビルド

FrontEnd が公開 repo 内に完結し、vite build でビルド可能で、API ベース URL が相対(自ノード)既定であることを確認。

3. 判定

検索索引・API・フロントエンドの3層とも、チェーン由来のレコードか自ノードから成立。運営のプライベートサービスへの依存はない。
API はチェーンから再構築したレコードを自ノードが配信(価格すらオンチェーンの Uniswap V2 由来)。索引は自前 Elasticsearch がローカル DB から構築=C-3 で再現性を示した DB の射影。FE は公開 repo から vite でビルドでき、自ノードを向く。

  • #20 API レコードはチェーンから再構築され、Api は外向き配信。FE は相対 URL で自ノードを叩く。価格すらオンチェーンの Uniswap V2 プール由来で、運営 API への依存はゼロ。
  • #21 索引 Elasticsearch は ActionProcessorローカル DB(RawEvent 由来)から投入。運営フィードではなく、C-3 で再現性を示した DB の決定論的射影
  • #19 FE FrontEnd は公開 repo に完結し tsc -b && vite build でビルド可。API ベースは API_HOST ?? ''相対(自ノード)で運営ドメインのハードコードなし。
この検証が示すこと/まだ示せないこと

示せたこと:下流3層とも、チェーン由来のレコードか自ノードだけで成立し、運営のプライベートサービスへの依存はゼロ。外部に出るのは GIF 検索(Giphy)・AI 画像(OpenAI/xAI)・リンクプレビューといった任意の UI 機能で、いずれも運営ではなく中立の第三者 APIを、各ノード運用者自身の API キーで呼ぶもの。公開レコードの構成要素ではなく、無効化しても record は成立します。

まだ示せないこと(open door):#21 は「再現性を示した DB(C-3)の決定論的射影」という論証で担保しており、ES インデックス自体のハッシュを2ノードで突き合わせる end-to-end 実測は将来の追加強化です。両ノードの運用者が同一である点は C-1C-3 と共通の open door。

結論:§19 #19・#20・#21 はいずれも満たされています。残るのは「任意 UI 機能が呼ぶ中立第三者 API(運営ではない)」と「索引ハッシュの実測」「第三者オペレータ再現」で、いずれもコアレコードの独立性を損なうものではありません。棚卸しは commit e2074718 時点・2026-06-23。

4. receipt(公開証明)

3層それぞれの独立性の根拠(ソース):

# 判定 根拠(ソース)
20 API 独立性 独立 レコードは RawEventsGatherer → ActionProcessor → PostgreSQLApi は外向き。価格は prices.ts=オンチェーン Uniswap V2 プール由来
21 インデクサー再現性 独立 ActionProcessorRawEvent(チェーン由来)からドメインオブジェクトを導出 → ES へ投入。ローカル DB の決定論的射影
19 FE 独立性 独立 FrontEnd/ は公開 repo に完結・vite build 可・API_HOST ?? ''=相対(自ノード)

外部に出る経路は、運営ではなく中立の第三者 API を「任意機能」のために呼ぶだけです(各自のキー):

# 任意の UI 機能 → 中立の第三者 API(運営ではない・各ノードのキーで呼ぶ)
routes/giphy.ts     → api.giphy.com            # GIF 検索(任意)
routes/ai-proxy.ts  → api.openai.com / api.x.ai # AI 画像生成(任意)
routes/og.ts        → ユーザ投稿リンクの OGP    # リンクプレビュー(任意)
# コアレコードは外部APIゼロ。価格すらオンチェーン由来:
routes/prices.ts    → Uniswap V2 プール(RPC)  # 第三者価格APIではない

FE は公開 repo からこの手順で独立ビルドでき、既定で自ノード(same-origin)を向きます:

cd client/src/services/FrontEnd && npm ci && npm run build   # tsc -b && vite build
# API_HOST = import.meta.env.VITE_API_HOST ?? ''  → 相対URL=自ノード

「索引が再現可能な DB の射影である」根拠は、その DB(RawEvent)が独立2ノードでバイト一致したこと(C-3:コンテンツ指紋 82651606…、309,672 件)に帰着します。

5. 注記・限界

GIF・AI 画像・リンクプレビューは任意の UI 機能で、中立の第三者 API(Giphy/OpenAI/xAI)を各ノード運用者のキーで呼びます。運営依存でも公開レコードの一部でもなく、無効化しても record は成立します(degrade するのは見た目の利便だけ)。

#21(インデクサー再現性)は「C-3 で再現性を実証した DB の決定論的射影」という形で担保しています。ES インデックス自体のハッシュを2ノードで突き合わせる実測は、必須ではないものの将来の追加強化です。

対象はオンチェーンのレコード。DM・画像はオフチェーン、Base L2 シーケンサ依存、両ノード運用者が同一である点は C-1C-3 と共通の open door です。

窓口も、目録も、閲覧室も、帳簿の下流にすぎない。
その帳簿をチェーンから組み直せる限り、下流は誰の手も借りずに立ち上がる。

C-1 showed “reconstructable without operator-only parts,” and C-3 showed “two nodes reach the same record.” C-4 proves, item by item, that the three downstream layerssearch index, API, and frontend — each stand independently, without depending on the operator’s private services. It is the answer to the reviewer’s §19 #19 (FE independence), #20 (API independence), and #21 (indexer reproducibility).

In plain terms

Downstream of the ledger rebuilt from the chain (C-1 / C-3) sit three facilities — the index (card catalogue), the API (the service window), and the FE (the reading room). We check, one by one, whether they stand on your own ledger and your own node, without borrowing the operator’s private equipment.

chain-derived ledgerC-1/C-3

index / API / FE3 downstream layers

all 3 independentno operator dep

The result: all three are operator-independent. The API serves the chain-derived record from your own node (even prices come from on-chain Uniswap), the index is built by your own Elasticsearch from the local DB, and the FE builds from the public repo and points at your own node. The only outbound calls are optional features like GIFs and AI images — and those go to neutral third-party services, not the operator.

This page is the detailed record for item C-4 of the Verification Ledger. Building on C-1‘s inventory (reconstruction procedure / operator-independence), it secures the itemized proofs for FE / API / index (§19 #19–21).

1. Claim (what is verified)

That the three downstream layers stand independently of the operator’s private services: #20 API — the record is assembled from the chain and served by the node’s own API, with no dependency on an operator API; #21 index — a self-hosted indexer builds reproducibly from the local (chain-derived) DB; #19 FE — an independent frontend stands up from the public code alone.

2. Method

1

#20 API: trace where the record is assembled

Confirm the public record is assembled from the chain (RawEventsGatherer → ActionProcessor → PostgreSQL) and that Api is an outbound serving layer. Inventory whether any peripheral feature calls an operator API.

2

#21 Index: confirm the indexer’s input source

Confirm Elasticsearch is built from the local DB’s domain objects (derived by ActionProcessor from RawEvent) — i.e. a deterministic projection of the chain-derived DB, not an operator feed.

3

#19 FE: independent build from public code

Confirm the FrontEnd is self-contained in the public repo, builds with vite build, and that the API base URL defaults to relative (own node).

3. Verdict

Search index, API, and frontend all stand on the chain-derived record or the node’s own host. No dependency on the operator’s private services.
The API serves the chain-reconstructed record from the own node (even prices come from on-chain Uniswap V2). The index is built by self-hosted Elasticsearch from the local DB — a projection of the DB C-3 proved reproducible. The FE builds from the public repo with vite and points at the own node.

  • #20 API The record is reconstructed from the chain; Api is outbound; the FE hits its own node via a relative URL. Even prices come from on-chain Uniswap V2 pools — zero dependency on an operator API.
  • #21 index Elasticsearch is populated by ActionProcessor from the local DB (derived from RawEvent). Not an operator feed, but a deterministic projection of the DB C-3 proved reproducible.
  • #19 FE The FrontEnd is self-contained in the public repo and builds with tsc -b && vite build. The API base is API_HOST ?? '' = relative (own node), with no hardcoded operator domain.
What this proves / what it does not yet prove

Proven: all three downstream layers stand on the chain-derived record or the own node, with zero dependency on operator private services. The only outbound calls are optional UI features — GIF search (Giphy), AI images (OpenAI / xAI), link previews — each to a neutral third-party API, not the operator, using each node operator’s own API key. They are not part of the public record; disable them and the record still stands.

Not yet proven (open door): #21 is secured by the argument that it is a deterministic projection of the DB whose reproducibility C-3 demonstrated; an end-to-end hash comparison of the ES index itself across two nodes is a future strengthening. That both nodes share one operator is the same open door as C-1 / C-3.

Conclusion: §19 #19, #20, #21 are all met. What remains — neutral third-party APIs called by optional UI features (not the operator), an empirical index-hash run, and third-party-operator reproduction — does not undermine the independence of the core record. Inventory at commit e2074718, 2026-06-23.

4. Receipt (public proof)

The evidence (source) for each of the three layers’ independence:

# Layer Result Evidence (source)
20 API independence independent record from RawEventsGatherer → ActionProcessor → PostgreSQL. Api is outbound. Prices via prices.ts = on-chain Uniswap V2 pools
21 indexer reproducibility independent ActionProcessor derives domain objects from RawEvent (chain-derived) → into ES. A deterministic projection of the local DB
19 FE independence independent FrontEnd/ self-contained in the public repo, builds with vite, API_HOST ?? '' = relative (own node)

The only outbound paths call neutral third-party APIs for “optional features” (with each node’s own keys):

# optional UI features → neutral third-party APIs (not the operator; each node's own key)
routes/giphy.ts     → api.giphy.com            # GIF search (optional)
routes/ai-proxy.ts  → api.openai.com / api.x.ai # AI image generation (optional)
routes/og.ts        → OGP of user-posted links  # link previews (optional)
# the core record makes zero external API calls. even prices are on-chain:
routes/prices.ts    → Uniswap V2 pools (RPC)    # not a third-party price API

The FE builds independently from the public repo and defaults to its own node (same-origin):

cd client/src/services/FrontEnd && npm ci && npm run build   # tsc -b && vite build
# API_HOST = import.meta.env.VITE_API_HOST ?? ''  → relative URL = own node

That “the index is a projection of a reproducible DB” reduces to the fact that this DB (RawEvent) matched byte-for-byte across two independent nodes (C-3: content fingerprint 82651606…, 309,672 rows).

5. Notes & limits

GIFs, AI images, and link previews are optional UI features calling neutral third-party APIs (Giphy / OpenAI / xAI) with each node operator’s keys. They are neither an operator dependency nor part of the public record; disable them and the record still stands (only the visual convenience degrades).

#21 (indexer reproducibility) is secured as “a deterministic projection of the DB whose reproducibility C-3 demonstrated.” An empirical hash comparison of the ES index itself across two nodes is a future strengthening, not a requirement.

The scope is the on-chain record. DMs and images off-chain, the Base L2 sequencer, and both nodes sharing one operator are the same open doors as C-1 / C-3.

The window, the catalogue, and the reading room are all downstream of the ledger.
As long as that ledger can be rebuilt from the chain, the downstream stands up with no one else’s help.
Copyright ©  CAW JAPAN.com All Rights Reserved.
PAGE TOP
夜の薔薇園へ