Casa Tookan 開発者向け
Wallet App Manifest

Casa Tookan アプリを作る。

すでにお持ちの Web マニフェストに wallet メンバーをひとつ加えるだけで、あなたのサイトは Casa Tookan で独自の名前、アイコン、バナー、スプラッシュ画面を持てます。

概要

ひとことですでにお持ちの Web App Manifest に wallet メンバーを追加します。これが、どのウォレットでも読めるオープンなフォーマット Wallet App Manifest です。すると Casa Tookan は、あなたのサイトを独自の名前とアイコンで表示し、読み込み中はスプラッシュ画面を、ブラウザ › アプリにはバナー付きのカードを表示し、Casa Tookan が提供していないものが必要なときはお知らせを表示します。
Casa Tookan のブラウザ › マイアプリ:アプリとして保存された Dev Playground。バナー、アイコン、名前、サブタイトル付き
ブラウザ › マイアプリプレイヤーが保存すると、あなたのバナー、アイコン、名前、サブタイトルが表示されます。
Dev Playground への接続を求める Casa Tookan のシート
署名シートすべてのリクエストにあなたの名前とアイコンが表示されます。
Casa Tookan のブラウザで動作し、接続済みの Dev Playground
接続されたアプリCasa のピルに、サインイン中のユーザーが表示されます。
あなたが宣言するものCasa Tookan が表示するもの
name, iconsアドレスバーと、ユーザーが署名を承認するシートに表示される名前とアイコン
wallet.splashImageUrl, background_colorwindow.wallet.ready() を呼ぶまで、アプリの読み込み中に表示されるスプラッシュ画面
wallet.heroImageUrl, wallet.subtitle, start_urlユーザーがアプリを保存すると ブラウザ › アプリ に表示されるカード。start_url で開きます
wallet.chains, wallet.capabilitiesCasa Tookan にないものを必須にしたときに表示される、閉じられるお知らせ。アプリはそのまま開きます
名前は Casa Tookan と書く必ず Casa Tookan / casatookan と省略せずに書いてください。Casa(casa.io)は無関係の Bitcoin ウォレットです。Casa Tookan の中では、Casa はユーザーのプロフィールのひとつで、切り替えて使う Bitcoin と EVM のアドレスのセットです。アプリからはアクティブな Casa が見えます。

マニフェスト

Casa Tookan は、どのウォレットでも読めるオープンなフォーマット Wallet App Manifest を読み込みます。中身は、あなたのサイトがおそらくすでに持っている W3C Web App Manifest に、標準にメンバーがないものだけを入れる wallet メンバーをひとつ加えたものです。

{
  "name": "Orb Quest",
  "short_name": "Orbs",
  "description": "A card game played with your Counterparty assets.",
  "start_url": "/play",
  "scope": "/",
  "background_color": "#101820",
  "categories": ["games", "trading-cards", "counterparty"],
  "icons": [{ "src": "/icon-1024.png", "sizes": "1024x1024", "type": "image/png" }],
  "screenshots": [{ "src": "/shots/duel.png", "sizes": "1284x2778", "form_factor": "narrow" }],
  "wallet": {
    "version": "1",
    "subtitle": "Duel with your orbs",
    "heroImageUrl": "/hero-1200x630.png",
    "splashImageUrl": "/splash-200.png",
    "chains": { "required": ["bip122:000000000019d6689c085ae165831e93"], "optional": ["eip155:8453"] },
    "capabilities": {
      "required": ["provider.counterparty", "wallet.ready"],
      "optional": ["casatookan:identity.ceid"]
    },
    "extensions": {
      "casatookan": { "identity": { "level": 1, "reason": "One player per device" } }
    }
  }}

W3C 標準 青色、変更なし · 追加 ハイライト部分:拡張のすべて。

アプリになるには wallet が必要ですwallet メンバーがないマニフェスト、または wallet.version が 1 / 1.x でないマニフェストでは、サイトはアプリになりません。スプラッシュも、アプリのカードもありません。それでも Casa Tookan は、マニフェストの name と最大のアイコンでサイトを表示します。ほとんどのサイトにはマニフェストがありますが、アプリとして表示されるのは希望したサイトだけです。

Casa Tookan が探す場所

  1. https://<your-domain>/.well-known/wallet-app.json:同じ JSON を単体で配信したもの。
  2. なければ、ホームページ(https://<your-domain>/)の <head> にある <link rel="manifest">。スクリプトで追加せず、配信される HTML に含めてください。

wallet メンバーを持つ最初のものがまるごと使われ、両者はマージされません。相対 URL は、マニフェストを取得した URL を基準に解決されます。

W3C 標準 そのまま再利用するメンバー

メンバーCasa Tookan での用途備考
nameアプリの名前最大 32 文字。超える場合は short_name(最大 32 文字)が表示されます。
iconsアプリのアイコンpurpose が any の最大のラスターアイコン。maskable は最後の手段としてのみ使われ、monochrome や SVG は使われません。画像を参照してください。
start_urlアプリとそのお気に入りが開く場所あなたのドメイン上である必要があり、そうでなければ無視されます。
scopeどのページがアプリかW3C のルールに従います:宣言されたスコープがあなたのドメイン上にあり start_url を含んでいればそのスコープ、そうでなければ start_url のディレクトリ。範囲外のページは通常の Web サイトとして表示されます。
background_colorスプラッシュ画面の背景16 進カラーのみ。
descriptionアプリのページ最大 170 文字、プレーンテキスト、絵文字なし。
categoriesカテゴリとタグ最大 5 個、各 20 文字まで、小文字、スペースなし。最初に対応づけられたものがカテゴリになります:Casa Tookan のカテゴリはそのまま、または utilities → utility, shopping → marketplace, photo → art-creativity。
screenshotsアプリのページスマートフォン用は form_factor: "narrow"。Casa Tookan ではまだ表示されません。

追加 wallet メンバー

フィールド型備考
version文字列必須:"1"。1.x はすべて 1 として読まれ、それ以外のメジャーバージョンは無視されます。
subtitle文字列最大 30 文字、絵文字なし。名前の下に 1 行で表示されます。
heroImageUrlURLブラウザ › アプリのバナー。画像を参照してください。
splashImageUrlURLスプラッシュ画像。省略時はアイコンが使われます。
chainsオブジェクトrequired / optional:CAIP-2 ID。チェーンを参照してください。
capabilitiesオブジェクトrequired / optional。ケイパビリティを参照してください。
associationオブジェクトドメインがあなたのものである証明。下記を参照してください。
extensionsオブジェクトウォレットごとにオブジェクトをひとつ。Casa Tookan は extensions.casatookan を読み、他は無視します。

すべてのフィールドは寛容に読み込まれます。チェックに通らないフィールドは無視され、残りはそのまま適用されます。

Casa Tookan のみ extensions.casatookan

identity:アプリがプレイヤーの Casa Estates ID に求めてよいもの:level(0–3)、reason(理由)、そして addresses(CAIP-2 チェーンごとに、アプリが求めることのあるアドレスの最大数。[{ "chain": "…", "max": 1–5, "reason": "…" }])。CEID を参照してください。

association

任意のブロックチェーンアカウントで署名した、ドメインがあなたのものである証明:

"association": {
  "account": "eip155:1:0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
  "payload": "eyJkb21haW4iOiJvcmJxdWVzdC5nYW1lIn0",
  "type": "eip191",
  "signature": "0x…"
}
  • account:CAIP-10 アカウント。
  • payload:base64url でエンコードした JSON { "domain": "your-domain", "issuedAt": "…" }。
  • type:署名の種類(EVM は eip191、Bitcoin は bip322-simple)。
  • signature:仕様で定義されたメッセージの署名。

Casa Tookan は保存しますが、まだ検証はしていません。今後、あなたのドメインに紐づく機能にはこれが必要になります。

画像

画像メンバーサイズ形式
アイコンicons、purpose any1024 × 1024(最低 512)PNG、不透明
バナーwallet.heroImageUrl1200 × 630(1.91:1)、トリミングなしで表示PNG または JPEG
スプラッシュwallet.splashImageUrl200 × 200PNG、透過可
スクリーンショットscreenshots、form_factor: "narrow"1284 × 2778 縦向き、最大 3 枚表示PNG または JPEG

Farcaster ミニアプリと同じサイズなので、1 セットのファイルで両方に対応できます。アイコンは明るい背景にも暗い背景にも、丸いマスクの中にも置かれます。透過ではなく独自の背景を付け、絵柄は中央の 80 % 内に収めてください。SVG は使えません:多くのネイティブの画像ビューでは描画できないためです。バナーがない場合、ブラウザは Farcaster マニフェストの画像(3:2 のものは 1.91:1 にトリミング)を使い、それもなければ、ぼかした自身のコピーの上にアイコンを重ねて表示します。

チェーン

CAIP-2 ID。それ以外は無視されます。

チェーンID
Bitcoin メインネットbip122:000000000019d6689c085ae165831e93
Ethereumeip155:1
Baseeip155:8453
Kaiaeip155:8217
Optimism · Arbitrum · Polygon · BNB Chain · Avalanche · Gnosiseip155:10 · 42161 · 137 · 56 · 43114 · 100
CounterpartyCounterparty は Bitcoin の上で動いており、独自のチェーンはありません。Bitcoin と provider.counterparty ケイパビリティを必須にしてください。

ケイパビリティ

ケイパビリティページで使えるもの
provider.ethereumCasa の EVM アカウントでの window.ethereum(EIP-1193、EIP-6963 で通知)。
provider.bitcoinCasa の Bitcoin アカウント(segwit、taproot、legacy)での sats-connect、Wallet Standard、window.unisat。
provider.counterpartylegacy アドレスでの window.webXCP / window.web3xcp。Counterparty の PSBT はデコードされ、署名前にユーザーに表示されます。
wallet.readywindow.wallet.ready():スプラッシュ画面を参照してください。
casatookan:identity.ceid Casa Tookan のみwindow.casaTookan.ceid:プレイヤーの Casa Estates ID でサインインさせます。CEID を参照してください。
casatookan:tookans.spend Casa Tookan のみwindow.casaTookan.tookans.spend({ offer }):プレイヤーの Tookan でアイテムを販売します。シートにアイテム、価格、残高が表示され、ページには署名付きのレシートが届きます。
casatookan:identity.estate Casa Tookan のみ予約済み、まだ利用できません。

provider.* ケイパビリティと wallet.ready は、仕様のオープンレジストリに由来します。アプリをホストするどのウォレットでもそのまま提供できる名前です。Casa Tookan だけが提供するものには casatookan: プレフィックスが付き、他のウォレットはそれを無視します。旧名も引き続き有効です:casatookan.ready(現在は wallet.ready)、identity.ceid と identity.estate(現在はプレフィックス付き)。

Casa Tookan にない必須のチェーンやケイパビリティがあると、ユーザーに閉じられるお知らせが表示されます。アプリはそのまま開きます。任意のものは参考情報です。

ページ内

あなたのスクリプトより先に注入されます。署名は上記の標準プロバイダーを通して行います:Casa Tookan 専用の署名 API はありません。

window.wallet = {
  ready(),        // hide the splash screen (the neutral name)
};

window.casaTookan = {   // Casa Tookan’s own
  isCasaTookan: true,
  version: '1',
  ready(),        // the same, by its former name
  ceid,           // Casa Estates ID sign-in
};

if (window.casaTookan?.isCasaTookan) {
  // running inside Casa Tookan: ceid is there
}

window.wallet?.ready() を呼べば、それを提供するどのウォレットでもアプリが動きます。Casa Tookan かどうかを判定するのは、Casa Tookan 独自の機能を使うときだけにしてください。あなた自身のスクリプトが定義した window.wallet には手を加えません。

スプラッシュ画面

  • 最初から、background_color の上に wallet.splashImageUrl(またはアイコン)で表示されます。
  • wallet.ready を宣言すると、window.wallet.ready() を呼ぶまで表示され続けます(最大 10 秒)。
  • 宣言しない場合、読み込み後にページが 2.5 秒アイドル状態になると消えます。
  • ready() は最初の画面を描画し終えてから呼んでください。それより前には呼ばないでください。

Casa

  • ユーザーはあなたのページを開いたまま Casa を切り替えられます:プロバイダーの通常の accountsChanged が届きます(window.ethereum と window.unisat)。
  • Casa ごとに独自のストレージがあります:localStorage、sessionStorage、IndexedDB は Casa ごとに分けて保持されるので、セッションはそれを開いた Casa に残ります。
window.addEventListener('load', () => {
  renderFirstScreen();
  window.wallet?.ready();
});

Casa Tookan による読み込み

状況起こること
取得のタイミングあなたのサイトから直接、ドメインごと・アプリの起動ごとに 1 回:変更は次回の起動で反映されます。
形式application/json で配信してください。ステータス 200 の HTML ページ(SPA のフォールバック)は「マニフェストなし」とみなされます。
404 / 410マニフェストなし。
CORS/.well-known/ 以下のすべてのレスポンスに、404 も含めて Access-Control-Allow-Origin: * を付けてください。スマートフォンのアプリには不要ですが、Casa Tookan の Web 版(devapp.casatookan.com)と下のバリデーターには必要です。これがないとブラウザはファイルを読めず、ファイルがないのかネットワークエラーなのかも区別できません。
ネットワークエラー、タイムアウト、403、5xx「判断できない」:Casa Tookan は既知の情報を保持し、障害を理由にアプリを格下げすることはありません。ファイルをボット対策のチャレンジの後ろに置かないでください。
場所/.well-known/wallet-app.json とホームページの <link rel="manifest"> を並行して取得します。Casa Tookan が読めないホームページ(ボット対策のチャレンジ、403)は「リンクされたマニフェストなし」とみなされます。
画像こちらもボット対策のチャレンジやログインの後ろに置かず、クロスオリジンで読めるようにしてください(Access-Control-Allow-Origin: *)。新しい画像は新しい URL で公開してください:ウォレットがキャッシュすることがあります。
どのページがアプリかscope 内のページです。ドメイン内のそれ以外の場所では、Casa Tookan は通常の Web サイトを、マニフェストの名前とアイコンで表示します。
保存されたアプリドメインごとにお気に入りがひとつ、start_url に置かれ、訪問のたびに更新されます:新しい名前、バナー、start_url には追従し、削除したフィールドは削除され、マニフェストが完全になくなると通常のブックマークに戻ります。

Farcaster ミニアプリ

Casa Tookan は /.well-known/farcaster.json も読み込み、アクティブな Casa が Farcaster アカウントを持っている場合、@farcaster/miniapp-sdk で作られたミニアプリをホストします:コンテキスト、Sign In With Farcaster、ウォレット、触覚フィードバック。両方のマニフェストを配信すると、フィールドごとに、Wallet App Manifest を優先してマージされます。Wallet App Manifest が必要なのは、Casa Tookan で異なる部分を上書きしたいときか、Bitcoin と Counterparty を宣言したいときだけです。farcaster.json だけで宣言されたドメインは、その homeUrl 以下だけがアプリになります。

未対応:ミニアプリの追加とその通知(通知サーバーなし)、キャストの投稿(farcaster.xyz に引き渡し)。

プレイグラウンド

マニフェストを編集すると、Casa Tookan がそれをどう扱うかが入力に合わせて表示されます:アプリが行うチェック、あらゆるサイズのアイコン、ユーザーが目にする画面。最初は本物のマニフェスト、ctserver.everdreamsoft.com/.well-known/wallet-app.json で公開中の Dev Playground のものが入っています。名前、バナー、色を変えたり、自分のドメインから読み込んだり、マニフェストを貼り付けたりしてみてください。仕様の完全なチェックには、仕様のバリデーターを使ってください。

画像はあなたのサーバーから読み込まれ、サイズが測定されます。

Dev Playground は icon-1024.png(1024 × 1024)、hero-1200x630.jpg、splash-200.png(200 × 200)を配信しています:アドレスバー、ブラウザ、アプリのページ、スプラッシュに 1 セットのファイルで対応しています。ctserver.everdreamsoft.com/playground から Casa Tookan で開いてみてください。