Conversation
NameStone は 2026-08-03 に営業を停止し、REST API も CCIP-read ゲートウェイ (gateway.namestone.com) も応答しない。toban.eth の resolver は NameStone のもの (0xA87361C4E58B619c390f469B9E6F27d759715125) のままなので、既存の *.toban.eth は オンチェーンからもアプリからも解決できず、レコードの退避手段も残っていない。 副作用としてアプリ側も 8/3 から壊れていた。/api/namestone/* がタイムアウトせず ハングするため、名前・アバターの表示が止まり、login.tsx の 5 秒フォールバックが 既存ユーザーを全員 /signup へ送り、その /signup も set-name が死んでいて完了できない。 そのため二重書き込みや段階的な読み込み切替は行わず、Namespace (@thenamespace/offchain-manager) への単純な置き換えとする。既存の名前は復旧不能なので、 ユーザーには再登録してもらう。 - app/.server/ens/ に NameProvider インタフェースと NamespaceProvider を追加。 .server/ なので API キーがクライアントバンドルへ漏れない - HTTP 入口を /api/namestone/* から /api/ens/* へ移動 - NameData / TextRecords を types/ens に定義。形は従来どおりなので消費側 約30 ファイルは import 元の変更のみ - SDK の実装バグを回避: 書き込みは createSubname のみ(updateSubname 等は owner を 落とす)、getSingleSubname は 404 で throw するため provider 側で吸収 - 409 が 500 に化けるバグを修正(try 内の throw data() をやめ NameApiError 経由に) - 自分の名前を再登録すると 409 になるバグを修正 - 上流無応答でハングしないよう SDK にタイムアウト(既定 8s)を設定 - #527: 名前解決に失敗・タイムアウトしたときは /signup ではなく /workspace へ。 解決できなかっただけの既存ユーザーにとって /signup は行き止まりになる - VITE_NAMESTONE_API_KEY を廃し、サーバー専用の NAMESPACE_API_KEY / NAMESPACE_MODE / ENS_PARENT_NAME / NAMESPACE_TIMEOUT_MS へ。dev では vite.config.ts が .env から process.env へ橋渡しする - frontend に Vitest を追加し、provider と API ルートの契約テストを 19 件用意 Refs #555, #557, #527. Closes は API キー投入と疎通確認の後。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
疎通確認完了 — 未検証項目はすべて解消しました本番 1. API キー / エンドポイント
staging が使えないため、以降の検証はすべて mainnet の空テナントに対して実施し、都度削除しました。 2.
|
| # | 検証 | 結果 |
|---|---|---|
| 1 | set-name 新規登録 |
✅ 200 |
| 2 | resolve-names(アドレス→名前) |
✅ NameData 互換シェイプで返却 |
| 3 | resolve-addresses(exact_match) |
✅ 200 |
| 4 | 同一アドレスによる自分の名前の再登録 | ✅ 200(旧実装の 409 バグが直っていることを確認) |
| 5 | 別アドレスからの同名登録 | ✅ 409(500 に化けない) |
| 6 | update-name による改名 |
✅ 200 |
| 7 | 旧名の自動削除 | ✅ 旧名は [[]]、新名のみ残存 |
| 8 | description: "" でのレコード削除 |
✅ text_records が空に |
| 9 | .split 形式の set-name |
✅ 200・name=zzz-e2e.split で解決 |
| 10 | 未知の operation | ✅ 404 |
avatar: "" が送られたケースでレコードが作られないことも確認しました(空文字はレコード削除として扱う仕様どおり)。
サーバー専用の環境変数(VITE_ 無し)が vite.config.ts の橋渡しで dev サーバーに渡ることも、この E2E で併せて確認できています。
残る作業
コード側はこれでマージ可能です。残りは #558 の toban.eth の resolver を Namespace Hybrid Resolver へ差し替え(owner は NameWrapper 経由)のみ。旧 resolver 0xA87361C4E58B619c390f469B9E6F27d759715125 はロールバック用に記録済みです。
Refs #555, #557, #527
背景 — 移行ではなく作り直しになりました
調査の結果、NameStone は 2026-08-03 に営業を停止済みでした。
namestone.xyz/api/public_v1/*gateway.namestone.comtoban.ethの resolver(mainnet)0xA87361C4E58B619c390f469B9E6F27d759715125= NameStone の resolver のままtoban.ethowner0xD4416b13d2b3a9aBae7AcD5D6C2BbDBE25686401(ENS NameWrapper)既存の
*.toban.ethレコード(name / address / avatar / description)は復旧できません。 #556(データ退避・投入・突合)は成立しないのでクローズ相当です。副作用: 本番アプリも 8/3 から壊れていた
/api/namestone/*はタイムアウトせずハングするため、login.tsxの 5 秒フォールバックが既存ユーザーを全員/signupへ送る(fix(frontend): login.tsx misroutes returning users to /signup on slow / failing namestone #527 が全ユーザーで恒常発生)/signupもset-nameが死んでいて完了できないという詰み方をしていました。
そのため #557 の Phase 3(二重書き込み)/Phase 5(段階的な読み込み切替・ロールバックフラグ)はすべて不要になり、Namespace への単純な置き換えとしています。失われた名前はユーザーに再登録してもらう方針です。
変更内容
app/.server/ens/にNameProviderとNamespaceProvider。.server/は React Router の Vite プラグインが強制するため、API キーがクライアントバンドルに混入しない/api/namestone/*→/api/ens/*NameData/TextRecordsをtypes/ensへ。形は従来どおりなので消費側 約30 ファイルは import 元の変更のみcreateSubnameのみ(updateSubname等はownerを落とす)。getSingleSubnameは型に反して 404 で throw するので provider 側で吸収try内のthrow data()をNameApiError経由に)/自分の名前を再登録すると 409 になる件/signupではなく/workspaceへ。解決できなかっただけの既存ユーザーにとって/signupは行き止まりになるVITE_NAMESTONE_API_KEYを廃止 → サーバー専用のNAMESPACE_API_KEY/NAMESPACE_MODE/ENS_PARENT_NAME/NAMESPACE_TIMEOUT_MS検証済み
pnpm frontend test— 19 passedpnpm frontend typecheck— passpnpm frontend build— passnpx biome check .— passbuild/client/に含まれないことを確認未検証(API キー待ち)
staging.offchain-manager.namespace.ninja)foo.split.toban.eth形式(ドット入りラベル)が通るか。 OpenAPI にドット禁止の記述は無く SDK もバリデーションしていないが docs に "nested" の記述は 0 件で動作保証がない。provider はdto.labelではなくfullNameから label を導出するので、API 側で再パースされても名前は壊れない作りにしてあるマージ後に必要な作業
toban.ethowner ウォレットで)→ Vercel にVITE_無しで登録。未設定だと/api/ens/*は 503 を返すtoban.ethの resolver を Hybrid Resolver へ差し替え([ens] toban.eth の resolver を Namespace Hybrid Resolver へ差し替え #558)。投入完了待ちというブロッカーは消滅した(今の resolver は死んでいるので失うものが無い)。旧アドレス0xA87361C4E58B619c390f469B9E6F27d759715125はロールバック用に記録済み🤖 Generated with Claude Code