A-4 ownership-tx


A-2 は所有権の「現在値」を読みました。けれど現在値だけでは、「本当に正当な手順でそこへ到達したのか」という問いが残ります。この項目では、各契約の所有権が 0x0 → デプロイヤー という実在するトランザクションで生まれ、その後一度も移転していないことを、OwnershipTransferred イベントの履歴で裏付けます。スナップショットではなく、来歴(provenance)で語ります。

やさしく言うと

不動産の登記簿を思い浮かべてください。「今この契約の持ち主は誰か」を確かめたのが A-2(=登記簿の現在の名義)でした。でも名義は、誰かが後から書き換えたのかもしれません。そこで A-4 では、登記簿の履歴を最初から全部さかのぼります。

ブロックチェーンでは、所有権が動くたびに「誰から誰へ移ったか」の記録(OwnershipTransferred)が、消せない形で必ず残ります。それを並べると、どの Ownable 契約も例外なく、たった一本の線になっていました。

持ち主なし0x0

作った人デプロイヤー

以後は移転なしそのまま

記録は生成時の1件だけ。途中の移転や、見知らぬアドレスへの飛びは一切ありません。そして履歴の最後の行(=デプロイヤー)が、今の名義(owner())とぴたりと一致します。つまり A-2 で見た「単一のデプロイヤー所有」は、後から取り繕った状態ではなく、生成以来そのままの素性だ、と確かめたのが A-4 です。

このページは検証台帳A-4 項目の詳細記録です。所有権の所在(A-2)が「今どうなっているか」なら、A-4 は「どうやってそうなったか」を担保します。

1. 主張(検証対象)

A-2 で観測した所有権の状態(全 Ownable = 単一のデプロイヤー EOA)が、実在するオンチェーン・トランザクションに裏付けられていること。各 Ownable 契約の OwnershipTransferred0x0 → デプロイヤー1件のみで、以後の移転が無く、その newOwner が現在の owner() と一致すること。

2. 検証方法

1

OwnershipTransferred 履歴をオンチェーンで読む

各契約の OwnershipTransferred(address,address)(topic0 = 0x8be0079c…6457e0)を、デプロイブロックから現在まで取得。OpenZeppelin Ownable はデプロイ時に 0x0→デプロイヤー を必ず1件出します。

2

イベント件数と連鎖を確認

各契約のイベントがちょうど1件か、そして previousOwner=0x0 / newOwner=デプロイヤー か。2件目以降(移転・放棄)が存在しないことを確認する。

3

現在値と突き合わせる

その1件の newOwner が、A-2 で独立に読んだ現在の owner() と一致するかを照合。一致すれば、現在の単一所有者は実トランザクションに由来する生成以来の状態だと言える。

3. 判定

来歴はクリーン ── 0x0→デプロイヤーの1件のみ、以後の移転なし
全 Ownable 契約で OwnershipTransferred はちょうど1件(生成時の 0x0→デプロイヤー)。2件目以降は存在せず、その newOwner はすべて現在の owner() と一致。A-2 の単一所有者は、生成以来そのままの素性だと裏付けられました。

  • 一致 全 Ownable 契約で OwnershipTransferredちょうど1件0x0 → デプロイヤー)。生成時のみで、以後の移転イベントはゼロ。見知らぬアドレスへの飛びも、途中の中間所有者もありません。
  • 一致 その1件の newOwner(=デプロイヤー 0xF713…4a95)が、A-2 で独立に読んだ現在の owner()全件一致。現在の単一所有者は、後から取り繕った状態ではなく生成以来の素性です。
  • 注記 multisig 移管・renounce はまだ行われていません(移転イベントが1件で止まる)。これは A-2 §5 の「pre-mainnet チェックリストで予定」が未実行であることと整合します。欠落ではなく、「まだ閉じていない」という事実です。

つまり A-4 は、A-2 の所有権状態を来歴の面から裏付けると同時に、予定された移管がまだ起きていないことも(移転イベントの不在として)正直に示しています。

4. receipt(公開証明)

確認したのは「各契約の OwnershipTransferred が1件・0x0→デプロイヤー・以後なし」という事実です。txhash・ブロックは、下のクエリを実行すれば誰でもその場で取得できます(記憶値ではなく、生のイベントを引きます)。

対象 イベント newOwner = 現在の owner()
全 Ownable 契約(L1×4/L2×4/L2b×4) 1件(生成時) 0xF71338f3eAa483aA66125598B09BA1988e694a95

具体例として、L2(Base Sepolia)の各契約は隣接するデプロイブロックでこの1件を出しています(例:CawProfileL2_L2 は block 40,650,394)。再取得は次のとおり(chainid は Sepolia=11155111 / Base Sepolia=84532 / Arbitrum Sepolia=421614)。

TOPIC=0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

# Explorer のインデックス済み getLogs(生イベント。Verified バッジには依存しない)
curl -s "https://api.etherscan.io/v2/api?chainid=<id>&module=logs&action=getLogs&address=<contract>&topic0=$TOPIC&fromBlock=0&toBlock=latest&apikey=<KEY>" | jq -r '.result[] | "blk=\(.blockNumber) tx=\(.transactionHash) prev=0x\(.topics[1][26:]) new=0x\(.topics[2][26:])"'

# 期待:行はちょうど1つ。prev=0x0 / new=デプロイヤー(=現在の owner())
全 Ownable で 1件のみ(0x0 → デプロイヤー)/以後の移転なし

5. 注記・限界

この項目(A-4)が扱うのは「所有権の現在値に至る来歴(移転トランザクションの実在と不在)」です。その単一所有者にいま何ができ/できないか、移管がなぜ未実行かは A-2 が、ロジック差替えの不在は A-3 が扱います。所有者の状態は時点のもので、将来 multisig 移管/renounce が実行されれば、その移転イベントがここに2件目として現れます。そのときは本ページを更新します。

「今こうなっている」だけでは足りない。
「実在するトランザクションでそうなった」まで、自分で辿る。

A-2 read the “current value” of ownership. But the current value alone leaves the question: “did it really reach there by a legitimate path?” This item backs, via the OwnershipTransferred event history, that each contract’s ownership was born 0x0 → deployer as a real transaction and has never been transferred since. We speak with provenance, not a snapshot.

In plain terms

Think of a property title register. Confirming “who owns this contract now” was A-2 (the current name on the deed). But a name could have been rewritten later. So in A-4 we trace the register’s history all the way back.

On a blockchain, every time ownership moves, an indelible record of “who it passed from and to” (OwnershipTransferred) is left behind. Lining them up, every Ownable contract, without exception, formed a single line.

no owner0x0

the creatordeployer

no transfer sinceunchanged

The record is just one line, at construction. There is no mid-history transfer and no jump to an unfamiliar address. And the last line of the history (= the deployer) matches the current name on the deed (owner()) exactly. So the “single deployer ownership” seen in A-2 is not a state patched up after the fact, but the original provenance, unchanged since birth — that is what A-4 confirmed.

This page is the detailed record for item A-4 of the Verification Ledger. If where ownership sits (A-2) is “how it is now,” A-4 secures “how it got there.”

1. Claim under test

That the ownership state observed in A-2 (every Ownable = a single deployer EOA) is backed by real on-chain transactions. That each Ownable contract’s OwnershipTransferred is a single event, 0x0 → deployer, with no transfer since, and that its newOwner matches the current owner().

2. How we checked

1

Read the OwnershipTransferred history on-chain

Fetch each contract’s OwnershipTransferred(address,address) (topic0 = 0x8be0079c…6457e0) from its deploy block to now. OpenZeppelin Ownable always emits one 0x0→deployer event at deployment.

2

Confirm the count and the chain

Check that each contract has exactly one event, with previousOwner=0x0 / newOwner=deployer, and that no second event (transfer or renounce) exists.

3

Reconcile with the current value

Check that that single event’s newOwner matches the current owner() read independently in A-2. If it matches, the current single owner is the original, transaction-derived state.

3. Verdict

Provenance is clean — a single 0x0→deployer event, no transfers since
Every Ownable contract has exactly one OwnershipTransferred (the construction-time 0x0→deployer). No second event exists, and every newOwner matches the current owner(). A-2’s single owner is confirmed as the original provenance, unchanged since birth.

  • match Every Ownable contract has exactly one OwnershipTransferred (0x0 → deployer). Construction-time only, with zero transfers since. No jump to an unfamiliar address, no intermediate owner.
  • match That single event’s newOwner (= deployer 0xF713…4a95) matches the current owner() read independently in A-2 across the board. The current single owner is the original provenance, not a post-hoc patch.
  • note The multisig handoff / renounce has not yet happened (the transfer history stops at one event). This is consistent with A-2 §5’s “planned at the pre-mainnet checklist” being not yet executed. It is not an omission but the fact that it is “not yet closed.”

So A-4 both backs A-2’s ownership state from the provenance side and honestly shows (as the absence of a transfer event) that the planned handoff has not yet occurred.

4. Receipt (public proof)

What we confirmed is the fact that “each contract’s OwnershipTransferred is one event, 0x0→deployer, none since.” The txhash/block can be fetched on the spot by running the query below (it pulls raw events, not remembered values).

Subject Events newOwner = current owner()
All Ownable contracts (L1×4 / L2×4 / L2b×4) 1 (at construction) 0xF71338f3eAa483aA66125598B09BA1988e694a95

As a concrete example, each L2 (Base Sepolia) contract emits this single event in adjacent deploy blocks (e.g. CawProfileL2_L2 at block 40,650,394). Re-fetch as below (chainid: Sepolia=11155111 / Base Sepolia=84532 / Arbitrum Sepolia=421614).

TOPIC=0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

# explorer-indexed getLogs (raw events; does not rely on a Verified badge)
curl -s "https://api.etherscan.io/v2/api?chainid=<id>&module=logs&action=getLogs&address=<contract>&topic0=$TOPIC&fromBlock=0&toBlock=latest&apikey=<KEY>" | jq -r '.result[] | "blk=\(.blockNumber) tx=\(.transactionHash) prev=0x\(.topics[1][26:]) new=0x\(.topics[2][26:])"'

# expected: exactly one line. prev=0x0 / new=deployer (= current owner())
one event only per Ownable (0x0 → deployer) / no transfer since

5. Notes & limits

What this item (A-4) covers is the provenance leading to the current ownership value (the presence and absence of transfer transactions). What that single owner can / cannot do, and why the handoff is not yet done, are handled by A-2; the absence of a logic-swap path by A-3. The ownership state is point-in-time; if a multisig handoff / renounce is executed in the future, its transfer event will appear here as a second event, and we will update this page then.

“It is this way now” is not enough.
We trace it all the way to “it became this way by a real transaction” — ourselves.
Copyright ©  CAW JAPAN.com All Rights Reserved.
PAGE TOP
夜の薔薇園へ