B-2 Peers onchain


peer が二度と動かせない(B-1)だけでは、まだ半分です。固定された配線が正しい相手を指していなければ、橋は別の岸に架かったまま固まってしまう。この項目では、live V1 の設定済み peer がすべて「正しいチェーンの正しい契約」を指し、しかも往復で噛み合っているかを、メッシュ全体で一本ずつ照合します。

やさしく言うと

B-1 が「配線を後から動かせない」ことなら、B-2 は「その固定された配線が正しい相手を指しているか」です。電話交換機でいえば、各回線がちゃんと意図したオフィスにつながっていて、しかも往復どちらからかけても噛み合うかを確かめる作業です。

8本の配線3チェーン間

1本ずつ照合往復で

全部一致8/8

3つのチェーンの間に張られた8本の配線すべてを一本ずつ照合し、全部が正しい契約を指していることを確認しました(8/8 一致)。「動かせない(B-1)」と「正しく繋がっている(B-2)」が揃って、初めて橋は信頼できます。

このページは検証台帳B-2 項目の詳細記録です。B-1 と対になります。B-1 は「動かせない」を、B-2 は「正しく繋がっている」を担保します。

1. 主張(検証対象)

各 OApp の設定済み peer が、意図された相手チェーンの、意図された契約アドレスを指していること。さらに、その配線が往復で一致している(A が B を指すなら B も A を指す)こと。誤配線・取り違え・片側だけの配線がないこと。

2. 検証方法

1

意図トポロジを確定

「どの配線が正しいか」を deploy のクロスチェーン配線から確定。設計上のメッシュは2系統――プロファイル網(L1 ハブ ↔ 各 L2 スポーク)と、不正証明網(一方の relay ↔ 他方の archive のクロス L2 ペア)。

2

全エッジの peers() をオンチェーンで読む

3チェーン(Sepolia 40161 / Base Sepolia 40245 / Arbitrum Sepolia 40231)にまたがる全 8 有向エッジについて peers(eid) を読み出し、下位20バイト(相手アドレス)を取り出す。

3

期待アドレスと突き合わせ、往復を確認

各エッジを live V1 の相手契約アドレスと照合(PASS / FAIL)。さらに4つの往復ペアが双方向で一致するかを確認。

3. 判定

メッシュ整合を確認
全8有向エッジ・4往復ペアが、意図どおりの相手契約を指す。誤配線・取り違え・片側配線はゼロ。

  • 8/8 PASS 全8エッジが、意図された相手契約をそのまま指していた。誤配線・取り違えはゼロ。
  • 往復一致 4つのペアすべてが双方向で噛み合う。片側配線・非対称はなし。

系統ごとに見ると――プロファイル網は、L1 の CawProfile が各 L2 の CawProfileL2 と往復で繋がり、ハブ&スポークが正しく閉じています。不正証明網は、一方のチェーンの CawChallengeRelay が他方の CawActionsArchive を指し、その archive も相手の relay を指し返す――relay と archive がクロス L2 で正しく対になっています。

B-1 の「この配線は二度と動かせない」と併せて、メッシュは正しく繋がった状態のまま凍結されている――これが結論です。

4. receipt(公開証明)

全8エッジの照合結果です。2行ずつが1つの往復ペア(A が B を指し、B が A を指し返す)。

# 読み出し元 OApp(チェーン) peers(eid) 指すべき相手 判定
1 CawProfile(Sepolia) 40245 CawProfileL2_L2 PASS
2 CawProfileL2_L2(Base Sepolia) 40161 CawProfile_L1 PASS
3 CawProfile(Sepolia) 40231 CawProfileL2_L2b PASS
4 CawProfileL2_L2b(Arb Sepolia) 40161 CawProfile_L1 PASS
5 CawChallengeRelay_L2(Base Sepolia) 40231 CawActionsArchive_L2b PASS
6 CawActionsArchive_L2b(Arb Sepolia) 40245 CawChallengeRelay_L2 PASS
7 CawActionsArchive_L2(Base Sepolia) 40231 CawChallengeRelay_L2b PASS
8 CawChallengeRelay_L2b(Arb Sepolia) 40245 CawActionsArchive_L2 PASS

対象アドレス(live V1):CawProfile_L1 0x9fcbb3…74bF/ProfileL2_L2 0x0c3e24…b11d/ProfileL2_L2b 0xbB9c2A…2941/Relay_L2 0x8195A9…6639/Archive_L2 0x3b2A9a…3C05/Relay_L2b 0x454450…3075/Archive_L2b 0x5bCbB3…79E5

再現は、各エッジについて peers(eid) の下位20バイトを相手契約アドレスと突き合わせるだけです。

peers(eid) を3チェーン8エッジ分読む再現は、自分のノードと同じ ethers v6(node) 版を、下のツールの「コマンドで確認」にコピー安全な形で用意しています(返り値の下位20バイトが相手契約アドレス)。

▶ ブラウザでこの検証を再現する(別窓)

押すと、3チェーン8エッジの peers(eid) を読み、各エッジが正しい相手を指すか一括照合します。あるチェーンのRPCが届かない場合は「未到達」と表示し、不一致とは区別します。弾かれる場合はツール内「コマンドで確認」へ(Chrome で出ないときは Edge かシークレットウィンドウでも)。 さらに「わざと壊す」で全期待値を改変すると到達済みエッジが実際に赤くなる(=常に合格ではない)ことや、生の返り値・叩いたリクエスト、開発者ツールの Network タブで実通信を確認できます。

5. 注記・限界

この項目(B-2)が担保するのは「peer ルーティング表が正しい相手を指していること」です。peer が動かせないことは B-1 で別途確認済み。なお LayerZero のセキュリティスタック(DVN・確認数などの side-channel 設定)の妥当性は配線の整合性とは別の論点で、ここでは扱いません。

補足として、L1 上には CawProfileL2_L1(ミラー)も存在しますが、これは bypassLZ=true で LayerZero peer を持たないローカル用途の契約(A-5 参照)で、本メッシュ照合の対象外です。

固定されているだけでは、橋にならない。
正しい岸へ架かって、初めて橋になる。それを、一本ずつ確かめた。

A peer being un-movable (B-1) is only half of it. If the fixed wiring points to the wrong counterpart, the bridge ends up frozen onto the wrong bank. This item checks that every configured peer in live V1 points to “the right contract on the right chain,” and that each is matched round-trip — verifying the whole mesh, one wire at a time.

In plain terms

If B-1 is “the wiring can’t be moved later,” B-2 is “does that fixed wiring point to the right counterpart?” In switchboard terms, it’s checking each line is actually connected to the intended office, and that it matches whichever direction you call from.

8 wiresacross 3 chains

check eachround-trip

all match8/8

We checked all 8 wires strung between the three chains, one by one, and confirmed they all point to the correct contract (8/8 match). Only when “can’t be moved (B-1)” and “connected correctly (B-2)” are both true is the bridge trustworthy.

This page is the detailed record for item B-2 of the Verification Ledger. It pairs with B-1. B-1 secures “can’t be moved”; B-2 secures “connected correctly.”

1. Claim (what is verified)

That each OApp’s configured peer points to the intended contract address on the intended counterpart chain. Furthermore, that the wiring is matched round-trip (if A points to B, then B points to A). That there is no mis-wiring, mix-up, or one-sided wiring.

2. Method

1

Fix the intended topology

Determine “which wiring is correct” from the deploy cross-chain wiring. The intended mesh is two networks — the profile network (L1 hub ↔ each L2 spoke) and the fraud-proof network (one chain’s relay ↔ the other chain’s archive, a cross-L2 pair).

2

Read peers() for every edge on-chain

For all 8 directed edges across the three chains (Sepolia 40161 / Base Sepolia 40245 / Arbitrum Sepolia 40231), read peers(eid) and take the low 20 bytes (the counterpart address).

3

Reconcile with expected addresses and check the round-trip

Reconcile each edge with the live V1 counterpart address (PASS / FAIL). Then check that the four round-trip pairs match in both directions.

3. Verdict

Mesh wiring verified
All 8 directed edges and 4 round-trip pairs point to the intended counterpart contract. Zero mis-wiring, mix-ups, or one-sided wiring.

  • 8/8 PASS All 8 edges point to the intended counterpart contract as-is. Zero mis-wiring or mix-ups.
  • round-trip All four pairs mesh in both directions. No one-sided wiring, no asymmetry.

Per network — the profile network has L1’s CawProfile connected round-trip with each L2’s CawProfileL2, so the hub-and-spoke closes correctly. The fraud-proof network has one chain’s CawChallengeRelay pointing to the other’s CawActionsArchive, and that archive pointing back to the counterpart relay — relay and archive correctly paired cross-L2.

Together with B-1‘s “this wiring can never be moved,” the mesh is frozen in a correctly-connected state — that is the conclusion.

4. Receipt (public proof)

The reconciliation of all 8 edges. Each pair of rows is one round-trip pair (A points to B, B points back to A).

# Read-from OApp (chain) peers(eid) Should point to Result
1 CawProfile (Sepolia) 40245 CawProfileL2_L2 PASS
2 CawProfileL2_L2 (Base Sepolia) 40161 CawProfile_L1 PASS
3 CawProfile (Sepolia) 40231 CawProfileL2_L2b PASS
4 CawProfileL2_L2b (Arb Sepolia) 40161 CawProfile_L1 PASS
5 CawChallengeRelay_L2 (Base Sepolia) 40231 CawActionsArchive_L2b PASS
6 CawActionsArchive_L2b (Arb Sepolia) 40245 CawChallengeRelay_L2 PASS
7 CawActionsArchive_L2 (Base Sepolia) 40231 CawChallengeRelay_L2b PASS
8 CawChallengeRelay_L2b (Arb Sepolia) 40245 CawActionsArchive_L2 PASS

Target addresses (live V1): CawProfile_L1 0x9fcbb3…74bF, ProfileL2_L2 0x0c3e24…b11d, ProfileL2_L2b 0xbB9c2A…2941, Relay_L2 0x8195A9…6639, Archive_L2 0x3b2A9a…3C05, Relay_L2b 0x454450…3075, Archive_L2b 0x5bCbB3…79E5.

To reproduce, just match each edge’s peers(eid) low 20 bytes against the counterpart contract address.

Reproducing peers(eid) for all 8 edges — the same ethers v6 (node) — is provided copy-safe under “CLI” in the tool below (the low 20 bytes of each return are the counterpart address).

▶ Reproduce this check in your browser (new tab)

Reads peers(eid) for all 8 edges across 3 chains and checks each points to the right counterpart. If a chain’s RPC is unreachable, that edge shows as “unreachable” — kept distinct from a mismatch. If blocked, use “CLI commands” inside the tool (or try Edge / an incognito window). You can also hit “Sanity-break” to corrupt every expected value and watch the reached edges turn red (not always-pass), and inspect the raw returns and the real traffic in the DevTools Network tab.

5. Notes & limits

What this item (B-2) secures is that “the peer routing table points to the right counterpart.” That the peer cannot be moved is confirmed separately in B-1. The validity of the LayerZero security stack (DVN, confirmation counts, and other side-channel config) is a separate question from wiring integrity and is not covered here.

As a note, on L1 there is also a CawProfileL2_L1 (mirror), but it runs with bypassLZ=true and holds no LayerZero peer — a local-use contract (see A-5) outside this mesh reconciliation.

Being fixed in place does not make a bridge.
Only by reaching the right bank does it become one — and we checked that, one wire at a time.
Copyright ©  CAW JAPAN.com All Rights Reserved.
PAGE TOP
夜の薔薇園へ