dApp 接続とディープリンク

接続と署名のシートは Casa を主役にします。その色、その家、その名前、そのアドレス。Casa Tookan は、どの Casa がどのサイトに接続したかをこの端末に記録します。適切な Casa を提案しますが、勝手に切り替えることはなく、適切な Bitcoin アドレスを選びます。同じシートが、アプリ内ブラウザ、WalletConnect、そして casatookan:// リンクでログインするアプリに応答します。

流れ

例のウォレット:2 つのエステートに 3 つの Casa、さらにインポートした鍵。「Casa Yodark」は Farcaster アカウント @yodark を所有し、すでに Velocimon に接続しています。アクティブな Casa は「Ma Casa」です。

1この Casa の初めての接続
9:41●●● 5G
V
Velocimon
farcaster.velocimon.com

Velocimonに接続しますか?

署名に使うCasa変更
Ma Casa
メインのエステート · Ethereum
0x3fA2…91c0
このサイトは初めてです
Casa YodarkはすでにVelocimonを利用しています最終利用:3日前
✓このCasaのEthereumアドレスの閲覧
✓署名やトランザクションのたびに確認

シートの主役は Casa です。ユーザーの操作なしには何も変わりません。アクティブな Casa が選ばれたままで、そのサイトをすでに知っている Casa をワンタップで提案します。

2別の Casa を選ぶ
9:41●●● 5G
‹ 戻る署名に使うCasa

Velocimonには選んだCasaのアドレスが表示されます。

メインのエステート
Ma Casa0x3fA2…91c0
✓
Casa Art0x77b1…0e2d
Farcaster エステート
Casa Yodark0x1614…1313
✓ このサイトに接続済み@yodark
インポートした鍵
EVM 10x9858…Ea94
BTC 1Bitcoinのみ対応。VelocimonはEthereumを求めています。

選択は同じシートの中(‹ 戻る)で行われ、リクエストは失われません。各行には、このサイトにとってその Casa の何が特別かが表示されます。互換性のない Casa は消えずに、理由とともに表示されたままです。

3既知の Casa · Farcaster サインイン
9:41●●● 5G
Casa Yodarkで署名します元に戻す
V
Velocimon
farcaster.velocimon.com

Velocimonにサインイン

Y
@yodarkShaban Shaame · Farcaster ID 399250
署名するCasa変更
Casa Yodark
Farcaster エステート · @yodarkを所有
0x1614…1313
✓ 10月5日からこのサイトに接続済み
署名する内容 · 無料、ネットワーク手数料なし›

「使う」をタップすると、トーストが切り替えを知らせ、元に戻すこともできます。ボタンには「承認」のような汎用の文言の代わりに、使うアイデンティティ(@yodark)が表示されます。

4この Casa には Farcaster アカウントがない
9:41●●● 5G
V
Velocimon
farcaster.velocimon.com

Velocimonにサインイン

VelocimonはFarcasterアカウントでサインインします。

署名に使うCasa変更
Ma Casa
メインのエステート
0x3fA2…91c0
Farcasterアカウントなし
Casa Yodarkは@yodarkを所有しています。このCasaでサインインするか、別のCasaを選んでください。

説明のない無効ボタンはありません。メインのアクションが解決策になります。Farcaster アカウントを持つ Casa がない場合は「Farcasterアカウントをインポート」(リカバリーフレーズ)になります。

5Bitcoin · 初めての接続
9:41●●● 5G
O
ORBital
orbital.market

ORBitalに接続しますか?

署名に使うCasa変更
Casa Art
メインのエステート · Bitcoin
このサイトは初めてです
共有するアドレス
SegWit · おすすめ
bc1q9h7…kx4z
手数料が安く、ほとんどのサイトで使えます
Legacy
1BvBM…NVN2
古いサイトとCounterparty向け
Taproot
bc1p5d…8x2q
Ordinalsとインスクリプション向け

履歴がない場合は SegWit があらかじめ選択されます。各タイプにはアドレスの先頭(bc1q、1、bc1p)が表示されるので、サイトに表示されるアドレスと見比べられます。

6Bitcoin · Legacy を使用中
9:41●●● 5G
O
ORBital
orbital.market

ORBitalに接続しますか?

署名に使うCasa変更
Ma Casa
メインのエステート · Bitcoin
このサイトは初めてです
共有するアドレス
Legacy · アセットはこちら
1Ca5a…T00k
12件のアセット · 0.0042 BTC
SegWit
bc1qx2…7mnp
空
Taproot
bc1pw8…q0lz
空

Legacy にコインや Counterparty アセットがあり、SegWit が空の場合は、Legacy があらかじめ選択され、その理由がはっきり表示されます(「12件のアセット · 0.0042 BTC」)。ユーザーはいつでも変更できます。

7メッセージ署名、Casa は接続済み
9:41●●● 5G
farcaster.velocimon.com
Casa Yodark
V
Velocimon
farcaster.velocimon.com

署名リクエスト

Casa Yodark0x1614…1313
🔒 接続済み
VelocimonがOrisでのあなたの存在を記録しようとしています。 Nonce: 8f2c41d9
署名すると、このCasaの所有者であることを証明できます。何も送信されず、費用もかかりません。

署名とトランザクションは、すでにアドレスを知っているサイトから届きます。Casa は固定され、「変更」はありません。アカウントを切り替えるには、アドレスバーの Casa ピルをタップします。

8設定 · 接続済みサイト
9:41●●● 5G
V
Velocimon最終利用: 3日前
Casa YodarkOld Casa
›
O
ORBital最終利用: 今日
Ma Casa · Legacy
›
W
Wakweli最終利用: 2週間前
Casa Art
›

この端末にのみ保存されます。エステートを削除しても残るため、どのアドレスをサイトが知っているかを確認できます。

インデックスは端末内にのみ保存され、エステートを削除しても残ります。消えた Casa は、最後に知られた名前でグレー表示のまま一覧に残ります。

9サイトの詳細
9:41●●● 5G
Casa Yodark0x1614…1313
Ethereum · @yodark
10月5日に接続 · 最終利用: 3日前
切断
削除したエステートから
Old Casa0xa41c…77e0
Ethereum · エステートは削除済み(10月1日)
8月12日に接続
削除

切断すると、Casaはこのアドレスでこのサイトに応答しなくなります。ただし、サイト側のサーバーには記録が残っている場合があります。

ユーザーはサイトがどのアドレスを知っているかを正確に確認できます。「切断」は接続を終了し、「削除」は消えた Casa の行を消去します。

10別のアプリからのログイン · casatookan:// リンク
9:41●●● 5G
C
ctserver.everdreamsoft.com
https://ctserver.everdreamsoft.com

ctserver.everdreamsoft.comにサインイン

署名に使うCasa変更
Ma Casa
メインのエステート · Bitcoin + Ethereum
このサイトは初めてです
✓BitcoinとEthereumのアドレスを共有し、このメッセージに署名します。
Login to ctserver.everdreamsoft.com 3f9a1c07

アプリや Web ページは getaddress で Casa のアドレスを求めます。同じシート、同じルールです。リクエスト元はコールバック(アプリのスキーム、または https ページのホスト)で表示され、Casa は変更でき、応答は接続済みサイトに記録されます。

ルール

状況ごとに Casa Tookan があらかじめ選択するもの。ユーザーがタップしない限り、Casa を切り替えることはありません。

状況あらかじめ選択される Casaユーザーに表示される内容
アクティブな Casa がすでにサイトに接続済みアクティブな Casa緑のチップ「…からこのサイトに接続済み」。提案はなし。
アクティブな Casa はサイトが初めてで、別の Casa がそのサイトを知っているアクティブな Casaチップ「このサイトは初めてです」と、提案がひとつ:このサイトで最後に使われた Casa と「使う」。他の Casa はピッカー内で示されます。
どの Casa もサイトを知らないアクティブな Casaチップ「このサイトは初めてです」、提案はなし。
既知の Casa が削除したエステートに属しているアクティブな Casa提案はなし(もう署名できないため)。設定 › 接続済みサイトには表示されたままです。
Farcaster サインインで、Casa がそのアカウントを所有していないアクティブな Casa警告と、メインボタン「<アカウントを所有する Casa>を使う」。所有する Casa がない場合は「Farcasterアカウントをインポート」。
サイトが Ethereum を求めていて、Casa が Bitcoin 専用の鍵(またはその逆)なしその行はピッカーに無効の状態で残り、理由が表示されます。
接続済みサイトからの署名またはトランザクション接続済みの Casa(固定)「変更」はなし:サイトはこのアドレスを想定しています。アカウントはアドレスバーの Casa ピルから切り替え、サイトはそのとき accountsChanged を受け取ります。
このサイトとこの Casa で Bitcoin アドレスがすでに選ばれている同じタイプ記憶された選択(変更可能)。
Bitcoin アドレス、初めてBTC か Counterparty アセットがあり、SegWit が空なら Legacy。それ以外は SegWit。選択の下に理由(「12件のアセット · 0.0042 BTC」)。Taproot があらかじめ選択されることはありません。

適用範囲

サイトやアプリがウォレットにアクセスするあらゆる方法に、ひとつのシートとひとつの接続インデックスが使われます。

アプリ内ブラウザ

  • 注入されたプロバイダー(EIP-1193、sats-connect、web3XCP)は、接続、署名、トランザクションのたびにシートを開きます。
  • Casa ピル:アドレスバーの右に常に表示され、アクティブな Casa の家を示します。緑の点は、開いているサイトに接続済みの Casa を示します。タップすると、このサイトに見せる Casa を切り替えられます。

WalletConnect

  • セッションは同じシートと同じインデックスを使います。サイトはペアリングのメタデータ(オリジン、名前、アイコン)で識別されます。
  • via: "walletconnect" として記録されます。

casatookan:// リンク

  • 他のアプリや Web ページからの Web3 ログイン(getaddress、signForAddress)も同じシートを使います。ディープリンクを参照してください。
  • via: "deeplink" として、アプリのスキーム(sogapp://)またはページのオリジンの下に記録されます。
  • 別の Casa で署名しても、アクティブな Casa は変わりません。アプリはその Casa のアドレスを受け取り、ウォレットはそのままです。

接続インデックス

端末(AsyncStorage)に、保管庫やエステートとは別に保存されます。Casa はインデックス番号ではなくアドレスで識別されます。インデックス番号はエステートを削除すると変わるためです。名前、色、エステートは接続時にコピーされるので、消えた Casa も表示できます。インデックスは空の状態から始まります。それ以前の接続は移行されないため、各 Casa はサイトごとに一度「初めて」になります。

// key: "dappConnections.v1"
{
  "https://farcaster.velocimon.com": {
    "origin": "https://farcaster.velocimon.com",
    "name": "Velocimon",
    "icon": "https://farcaster.velocimon.com/…/icon.png",
    "via": "browser",                // "browser" | "walletconnect" | "deeplink"
    "connections": [{
      "chain": "evm",                  // "evm" | "bitcoin"
      "address": "0x1614…1313",        // stable identity
      "btcPurpose": null,              // "segwit" | "legacy" | "taproot"
      "farcasterFid": 399250,
      "casa": {                        // copied at connection time
        "name": "Casa Yodark",
        "color": "#9B59B6",
        "estateName": "Farcaster estate",
        "ghost": false                 // imported key
      },
      "connectedAt": "2026-10-05T18:12:00Z",
      "lastUsedAt":  "2026-10-05T19:40:00Z",
      "disconnectedAt": null
    }]
  }
}

使われ方

  • サイトの読み込み時:そのオリジンの接続を検索します。アクティブな Casa に接続がある場合、ブリッジは再確認せずに eth_accounts と getAddresses に直接応答します。
  • 存在する Casa か、消えた Casa か:アドレスを、現在あるエステートのアカウントと照合します。一致しなければ「削除したエステートから」です。
  • 更新:承認された接続、署名、トランザクションのたびに、lastUsedAt と Casa のスナップショット(名前、色)が更新されます。
  • 消去:「切断」は disconnectedAt を設定し、「削除」は行を取り除きます。ウォレットを削除するとインデックス全体が消去されます。
  • インデックスに決して入らないもの:鍵や残高。Casa を識別するのに必要な情報だけです。

Casa Tookan は iOS と Android で casatookan:// スキームを登録します。他のアプリや Web ページはこれを使って、ウォレット内で dApp を開いたり、署名済みチャレンジでユーザーをログインさせたりします(初代 Casa Tookan の web3XCP x-callback-url プロトコル)。ウォレットのロックが解除されている必要があります。ロック中は、browse と getaddress のリンクは無視され、キューにも入りません。

リンクパラメーター動作
https://casatookan.com/open?url={url}&ref={app}url:開く https ページ(URL エンコード)。ref:ユーザーを送った人(任意)。Universal Link / App Link:dApp ブラウザでページを開きます。ロック中なら解除の後に。アプリがなければ、ストアとブラウザのページ。
casatookan://browse/{url}url:開くページ(URL エンコード)。アプリ内の dApp ブラウザでページを開きます。
casatookan://x-callback-url/getaddress?x-success={callback}&msg={message}x-success:応答の送り先(下記参照)。
msg:署名するチャレンジ(URL エンコード)。
Bitcoin + Ethereum での Web3 ログイン:署名シートがユーザーに確認し、Casa Tookan が選ばれた Casa で msg に署名してコールバックを呼び出します。
casatookan://x-callback-url/signForAddress?chain={chains}&x-success={callback}&msg={message}chain:カンマ区切りのチェーン ID(例:bitcoin,base)。bitcoin またはウォレットで有効な任意の EVM チェーン(ethereum、base、polygon…)。getaddress と同じ動作を、指定したチェーンで、その順番で行います。

応答の送り先:x-success

アプリのスキーム

  • x-success=myapp(英字、数字、+ . -)。
  • Casa Tookan は myapp://sendaddress?address=…&msg=…&sig=… を開きます。
  • 値は初代 Casa Tookan とまったく同じく、URL エンコードせずそのまま書き込まれるので、既存の web3XCP アプリはそのまま動作します。クエリは URL パーサーではなく、&address=、&msg=、&sig= で分割してください。

Web ページ

  • x-success=https://example.com/login(リンク内では URL エンコード)。
  • Casa Tookan はブラウザで https://example.com/login?address=…&msg=…&sig=… を開きます。既存のクエリ文字列は保持され(& を使用)、#fragment も保持されます。
  • 各値は URL エンコードされます(base64 の署名には + と / が含まれるため)。URLSearchParams で読み取ってください。
  • https のみ。http:// やその他の送り先は拒否されます。署名が平文で送られてしまうためです。

応答

address = chain:bitcoin;1Ca5a…T00k;;separator;;chain:ethereum;0x1614…1313
msg     = the challenge, unchanged
sig     = chain:bitcoin;H8k2…=;;separator;;chain:ethereum;0x5f1c…1b

形式

  • チェーンごとに chain:{id};{value} のエントリーがひとつ、リクエストされた順に並び、;;separator;; で連結されます。address と sig のエントリーは順番が対応しています。
  • アドレスは、ユーザーがシートで承認した Casa のものです。アクティブな Casa とは異なる場合があります。

Bitcoin の署名

  • BIP-137 署名メッセージ(base64)。
  • Counterparty アセットを保有する、Casa の Legacy(P2PKH)アドレスで署名されます。パスは m/0'/0/{casa}。任意の BIP-137 検証ツールで、返されたアドレスに対して検証してください。

EVM の署名

  • keccak256(utf8(msg)) の生の secp256k1 署名で、0x{r}{s}{v}(v = 27 + recid)としてシリアライズされます。EIP-191 ではありません。personal_sign の検証ツールでは拒否されます。
  • keccak ダイジェストから直接署名者を復元し(例:ethers の SigningKey.recoverPublicKey(keccak256(toUtf8Bytes(msg)), sig))、返されたアドレスと比較してください。パスは m/44'/60'/0'/0/{casa}。

承認と履歴

テスター

Casa Tookan をインストールしたスマートフォンでディープリンクテスターを開いてください。上記のすべてのリンクを作成し、Casa Tookan の応答とともに自身に戻り(x-success = 自身の URL)、それをデコードして Ethereum の署名を検証します。