A-6 username NFT


CAW のユーザー名は、ひとつの NFT です。誰が発行でき、名前はどこに保存され、その「見た目(メタデータ・画像)」は何に依存しているのか――ここが運営のサーバーや IPFS に依存していれば、「オンチェーンのアイデンティティ」という主張は静かに崩れます。この項目では、ユーザー名 NFT 契約 CawProfile を、標準・保存場所・発行経路・メタデータ生成の4点で確かめます。

やさしく言うと

CAW のユーザー名は、譲渡できる NFT(標準の ERC-721)です。確かめたのは「名前そのものと、その表示が、本当にチェーンの中だけで完結しているか」。結果は――名前はチェーン上に保存され、表示(画像・メタデータ)もチェーン上で描画(IPFS もサーバーも不要)、発行はCAW を持つ人なら誰でも(先着・未使用の名前のみ)でした。

ひとつだけ混同しないでほしい点:ここで「完全オンチェーン」なのはユーザー名 NFTです。プロフィールのアバター画像や投稿画像はオフチェーンで、それは別項目(C-1)で正直に扱います。

このページは検証台帳A-6 項目の詳細記録です。CawProfile 契約そのものの健全性(コード一致・所有権・非プロキシ・来歴・配線)は A-1A-5 で検証済みで、A-6 はそれを「ユーザー名 NFT」という観点で要約・補強します。

1. 主張(検証対象)

ユーザー名 NFT 契約 CawProfile が、(1) 標準の ERC-721(譲渡可能な NFT)であり、(2) ユーザー名をオンチェーンに保存し、(3) 発行がパーミッションレス(運営の許可不要)で、(4) メタデータ・画像をオンチェーンで生成し外部(IPFS・サーバー)に依存しないこと。

2. 検証方法

1

標準と保存場所をソースで確認

継承(ERC721EnumerableOAppOwnable)と、ユーザー名の保存先(string[] public usernames、tokenId→username)を読む。

2

発行経路を確認

mint が誰から呼べるか(CawProfileMinter 経由)、その minter が誰でも使えるか、minter の差し替えが封じられているか(setMinteronlyOnce)。

3

メタデータ生成を確認

tokenURI が何を返すか。CawProfileURI がオンチェーンのフォントデータ(FontDataA/FontDataB)から data:application/json;base64,… を生成しているか、IPFS/http 参照が無いか。

3. 判定

ユーザー名 NFT は、名前も見た目も完全オンチェーン
標準 ERC-721。ユーザー名はチェーン上に保存。発行はパーミッションレス(CAW を持つ人なら誰でも、未使用・有効な名前を先着で)。メタデータ・画像は CawProfileURI がオンチェーンのフォントから描画し、IPFS・サーバーに依存しません。

  • 標準 CawProfile is ERC721Enumerable, Ownable, OApp。ユーザー名は譲渡可能な標準 NFTです。
  • オンチェーン ユーザー名は string[] public usernames に保存(tokenId→username)。誰でもチェーンから読めます
  • パーミッションレス 発行は CawProfileMinter.mint から誰でも可能(onlyOwner なし)。未使用かつ有効(小文字英数1〜255字)な名前を先着で。minter は onlyOnce一度きり設定・以後不変
  • オンチェーン描画 tokenURICawProfileURI.generate が返す data:application/json;base64,…。オンチェーンのフォント(FontDataA/FontDataB)から SVG を描画し、IPFS・http・サーバーへの参照はありませんuriGeneratoronlyOnce で固定。

つまり、ユーザー名というアイデンティティは、名前・所有・表示のすべてがチェーンの中だけで完結しています。運営のサーバーや IPFS が消えても、ユーザー名 NFT は読み出せ、表示でき、譲渡できます。

4. 正直な但し書き ── 「ユーザー名」と「画像」は別

ここで「完全オンチェーン」と言えるのは ユーザー名 NFT(名前+その名前を描いた SVG)です。一方、プロフィールのアバター画像や投稿に添える画像はオフチェーン(ローカルディスク/Filebase=IPFS 前段)に保存されます。「コンテンツは消せない」はテキストとユーザー名には当てはまりますが、画像には当てはまりません。この区別はノードの独立性(C-1)で正直に扱います。

また、発行には CAW(トークン)の支払いが要ります(costOfName)。これは「許可制」ではなく「対価制」で、許可者は存在しません。経済フロー(ステーキング・手数料)の妥当性は別項目(E-1)で扱います。

5. receipt(公開証明)

誰でも再現できます。ユーザー名・メタデータ・発行経路を、それぞれ直接読み出すだけです(対象は L1 の CawProfile)。

PROFILE=0x9fcbb3d6880cD3293F1a731Fe6c958a6621a74bF

# ユーザー名はオンチェーン(tokenId=1 → usernames[0])
cast call $PROFILE "usernames(uint256)(string)" 0 --rpc-url <Sepolia RPC>

# メタデータはオンチェーン生成(data:application/json;base64,… が返る)
cast call $PROFILE "tokenURI(uint256)(string)" 1 --rpc-url <Sepolia RPC>

# 発行経路(minter)と描画器(uriGenerator)。いずれも onlyOnce で固定
cast call $PROFILE "minter()(address)"       --rpc-url <Sepolia RPC>
cast call $PROFILE "uriGenerator()(address)"  --rpc-url <Sepolia RPC>

# 期待:usernames が文字列/tokenURI が data:application/json;base64,…(IPFS/http 無し)
PASS(名前=オンチェーン/メタデータ=オンチェーン生成/発行=パーミッションレス)

minter は CawProfileMinter0x8D65…90D9)、uriGenerator は CawProfileURI0x9CEf…274f)で、後者は FontDataA0xB7ec…B8cf)/FontDataB0x1D08…fBf3)からフォントを読みます。発行の入口 CawProfileMinter.mintpublic payableonlyOwner 修飾子はありません(=パーミッションレス)。

6. 注記・限界

この項目(A-6)は「ユーザー名 NFT という観点での確認」です。CawProfile 契約そのものの健全性――コード一致(A-1)、所有権(A-2)、非プロキシ(A-3)、来歴(A-4)、配線(A-5)――は各項目で検証済みで、A-6 はそれを前提にしています。画像のオフチェーン性は C-1、経済フローは E-1 で扱います。

名前も、その姿も、チェーンの中だけで立っているか。
「オンチェーンのアイデンティティ」を、名乗りではなく読み出しで確かめる。

A CAW username is an NFT. Who can issue it, where the name is stored, and what its “look” (metadata / image) depends on — if any of that depends on the operator’s server or IPFS, the claim of “on-chain identity” quietly collapses. This item checks the username NFT contract CawProfile on four points: standard, storage, mint path, and metadata generation.

In plain terms

A CAW username is a transferable NFT (a standard ERC-721). We checked whether the name itself and its display truly live entirely on-chain. The result: the name is stored on-chain, the display (image / metadata) is rendered on-chain too (no IPFS, no server), and minting is open to anyone holding CAW (first-come, for an unused name).

One thing not to conflate: what is “fully on-chain” here is the username NFT. Profile avatar images and post images are off-chain, and we handle that honestly in a separate item (C-1).

This page is the detailed record for item A-6 of the Verification Ledger. The integrity of the CawProfile contract itself (code match, ownership, non-proxy, provenance, wiring) is verified in A-1A-5; A-6 summarizes and reinforces it from the “username NFT” angle.

1. Claim (what is verified)

That the username NFT contract CawProfile is (1) a standard ERC-721 (a transferable NFT), (2) stores usernames on-chain, (3) has permissionless minting (no operator permission), and (4) generates metadata/image on-chain with no external (IPFS / server) dependency.

2. Method

1

Confirm standard & storage in source

Read the inheritance (ERC721Enumerable, OApp, Ownable) and where usernames are stored (string[] public usernames, tokenId→username).

2

Confirm the mint path

Who can call mint (via CawProfileMinter), whether that minter is open to anyone, and whether swapping the minter is sealed (setMinter is onlyOnce).

3

Confirm metadata generation

What tokenURI returns. Whether CawProfileURI builds a data:application/json;base64,… from on-chain font data (FontDataA/FontDataB), with no IPFS/http reference.

3. Verdict

The username NFT — name and look — is fully on-chain
Standard ERC-721. Usernames stored on-chain. Minting is permissionless (anyone with CAW, first-come, for an unused & valid name). Metadata/image is rendered by CawProfileURI from on-chain fonts, with no IPFS/server dependency.

  • standard CawProfile is ERC721Enumerable, Ownable, OApp. The username is a standard, transferable NFT.
  • on-chain Usernames are stored in string[] public usernames (tokenId→username). Anyone can read them from the chain.
  • permissionless Minting is open via CawProfileMinter.mint (no onlyOwner). An unused & valid name (1–255 lowercase alphanumeric) on a first-come basis. The minter is set once and immutable thereafter (onlyOnce).
  • on-chain render tokenURI returns the data:application/json;base64,… from CawProfileURI.generate. It renders the SVG from on-chain fonts (FontDataA/FontDataB), with no IPFS/http/server reference. uriGenerator is also fixed via onlyOnce.

So the username identity is self-contained on-chain — name, ownership, and display all within the chain. Even if the operator’s server or IPFS disappeared, the username NFT can still be read, displayed, and transferred.

4. An honest caveat — “username” vs “image”

What is “fully on-chain” here is the username NFT (the name plus the SVG that draws it). Profile avatar images and post images are off-chain (local disk / Filebase = IPFS front). “Content can’t be deleted” holds for text and usernames, but not for images. We handle this distinction honestly in node independence (C-1).

Also, minting requires payment in CAW (costOfName). This is a “price,” not a “permission” — there is no gatekeeper. The validity of the economic flow (staking / fees) is handled in a separate item (E-1).

5. Receipt (public proof)

Anyone can reproduce it. Just read the username, the metadata, and the mint path directly (target: CawProfile on L1).

PROFILE=0x9fcbb3d6880cD3293F1a731Fe6c958a6621a74bF

# username is on-chain (tokenId=1 → usernames[0])
cast call $PROFILE "usernames(uint256)(string)" 0 --rpc-url <Sepolia RPC>

# metadata is generated on-chain (returns data:application/json;base64,…)
cast call $PROFILE "tokenURI(uint256)(string)" 1 --rpc-url <Sepolia RPC>

# mint path (minter) and renderer (uriGenerator). Both fixed via onlyOnce
cast call $PROFILE "minter()(address)"       --rpc-url <Sepolia RPC>
cast call $PROFILE "uriGenerator()(address)"  --rpc-url <Sepolia RPC>

# expected: usernames is a string; tokenURI is data:application/json;base64,… (no IPFS/http)
PASS (name = on-chain / metadata = on-chain render / mint = permissionless)

The minter is CawProfileMinter (0x8D65…90D9); the uriGenerator is CawProfileURI (0x9CEf…274f), which reads fonts from FontDataA (0xB7ec…B8cf)/FontDataB (0x1D08…fBf3). The entry point CawProfileMinter.mint is public payable with no onlyOwner modifier (= permissionless).

6. Notes & limits

This item (A-6) is “verification from the username-NFT angle.” The integrity of the CawProfile contract itself — code match (A-1), ownership (A-2), non-proxy (A-3), provenance (A-4), wiring (A-5) — is verified in those items and assumed here. The off-chain nature of images is handled in C-1, the economic flow in E-1.

Does the name, and its very shape, stand entirely within the chain?
We confirm “on-chain identity” by reading it out, not by being told.
Copyright ©  CAW JAPAN.com All Rights Reserved.
PAGE TOP
夜の薔薇園へ