Connexions dApp & deep links

Les feuilles de connexion et de signature mettent la casa en avant : sa couleur, sa maison, son nom, son adresse. Casa retient, sur cet appareil, quelle casa s’est connectée à quel site. Elle suggère la bonne casa mais ne change jamais d’elle-même, et elle choisit la bonne adresse Bitcoin. La même feuille répond au navigateur intégré, à WalletConnect et aux apps qui connectent leurs utilisateurs par un lien casatookan://.

Parcours

Portefeuille d’exemple : trois casas réparties dans deux domaines, plus des clés importées. « Casa Yodark » possède le compte Farcaster @yodark et s’est déjà connectée à Velocimon. La casa active est « Ma Casa ».

1Première connexion de cette casa
9:41●●● 5G
V
Velocimon
farcaster.velocimon.com

Se connecter à Velocimon ?

Signer avecChanger
Ma Casa
Mon domaine principal · Ethereum
0x3fA2…91c0
Première visite sur ce site
Casa Yodark utilise déjà VelocimonDernière utilisation : il y a 3 jours
✓Voir l’adresse Ethereum de cette casa
✓Vous demander avant chaque signature ou transaction

La casa est au centre de la feuille. L’utilisateur décide : la casa active reste sélectionnée, et Casa propose, en un geste, la casa qui connaît déjà le site.

2Choisir une autre casa
9:41●●● 5G
‹ RetourSigner avec

Velocimon verra l’adresse de la casa que vous choisissez.

Mon domaine principal
Ma Casa0x3fA2…91c0
✓
Casa Art0x77b1…0e2d
Domaine Farcaster
Casa Yodark0x1614…1313
✓ Connectée ici@yodark
Clés importées
EVM 10x9858…Ea94
BTC 1Bitcoin uniquement. Velocimon demande Ethereum.

Le choix se fait dans la même feuille (‹ Retour), sans perdre la demande. Chaque ligne indique ce qui la distingue ici. Une casa incompatible reste visible dans la liste, avec la raison.

3Casa connue · connexion Farcaster
9:41●●● 5G
Signature désormais avec Casa YodarkAnnuler
V
Velocimon
farcaster.velocimon.com

Se connecter à Velocimon

Y
@yodarkShaban Shaame · Farcaster ID 399250
Signé parChanger
Casa Yodark
Domaine Farcaster · possède @yodark
0x1614…1313
✓ Connectée ici depuis le 5 oct.
Ce que vous signez · gratuit, sans frais de réseau›

Après « L’utiliser », un toast confirme le changement et permet de l’annuler. Le bouton nomme l’identité utilisée (@yodark).

4Cette casa n’a pas de compte Farcaster
9:41●●● 5G
V
Velocimon
farcaster.velocimon.com

Se connecter à Velocimon

Velocimon vous connecte avec un compte Farcaster.

Signer avecChanger
Ma Casa
Mon domaine principal
0x3fA2…91c0
Aucun compte Farcaster
Casa Yodark possède @yodark. Utilisez-la pour vous connecter, ou choisissez une autre casa.

L’action principale propose la solution : utiliser la casa qui possède le compte. Quand aucune casa ne possède de compte Farcaster, elle devient « Importer votre compte Farcaster » (phrase de récupération).

5Bitcoin · première connexion
9:41●●● 5G
O
ORBital
orbital.market

Se connecter à ORBital ?

Signer avecChanger
Casa Art
Mon domaine principal · Bitcoin
Première visite sur ce site
Adresse à partager
SegWit · recommandée
bc1q9h7…kx4z
Frais réduits, compatible avec la plupart des sites
Legacy
1BvBM…NVN2
Anciens sites et Counterparty
Taproot
bc1p5d…8x2q
Ordinals et inscriptions

Sans historique, SegWit est présélectionnée. Chaque type affiche le début de son adresse (bc1q, 1, bc1p), pour que l’utilisateur puisse la comparer avec ce qu’affiche le site.

6Bitcoin · Legacy déjà utilisée
9:41●●● 5G
O
ORBital
orbital.market

Se connecter à ORBital ?

Signer avecChanger
Ma Casa
Mon domaine principal · Bitcoin
Première visite sur ce site
Adresse à partager
Legacy · vos actifs sont ici
1Ca5a…T00k
12 actifs · 0,0042 BTC
SegWit
bc1qx2…7mnp
Vide
Taproot
bc1pw8…q0lz
Vide

Quand Legacy détient des bitcoins ou des actifs Counterparty et que SegWit est vide, Legacy est présélectionnée, avec la raison bien en vue (« 12 actifs · 0,0042 BTC »). L’utilisateur peut toujours la changer.

7Signature de message, casa déjà connectée
9:41●●● 5G
farcaster.velocimon.com
Casa Yodark
V
Velocimon
farcaster.velocimon.com

Demande de signature

Casa Yodark0x1614…1313
🔒 Connectée
Velocimon souhaite enregistrer votre présence dans Oris. Nonce: 8f2c41d9
Signer prouve que vous possédez cette casa. Cela n’envoie rien et ne coûte rien.

Les signatures et les transactions viennent d’un site qui connaît déjà une adresse : la casa est verrouillée, il n’y a pas de « Changer ». Pour changer de compte, touchez la pastille de la casa dans la barre d’adresse.

8Réglages · Sites connectés
9:41●●● 5G
V
VelocimonUtilisé il y a 3 jours
Casa YodarkAncienne Casa
›
O
ORBitalUtilisé aujourd’hui
Ma Casa · Legacy
›
W
WakweliUtilisé il y a 2 semaines
Casa Art
›

Enregistré sur cet appareil uniquement. Conservé quand vous supprimez un domaine, pour que vous puissiez toujours voir quelle adresse un site connaît.

L’index est propre à l’appareil et survit à la suppression d’un domaine : une casa disparue reste listée en gris, avec son dernier nom connu.

9Détail d’un site
9:41●●● 5G
Casa Yodark0x1614…1313
Ethereum · @yodark
Connecté le 5 oct. · utilisé il y a 3 jours
Déconnecter
D’un domaine supprimé
Ancienne Casa0xa41c…77e0
Ethereum · domaine supprimé le 1er oct.
Connecté le 12 août
Oublier

La déconnexion empêche Casa de répondre à ce site avec cette adresse. Le site peut néanmoins la garder en mémoire sur ses propres serveurs.

L’utilisateur voit exactement quelle adresse le site connaît. « Déconnecter » met fin à la connexion, « Oublier » efface la ligne d’une casa disparue.

10Connexion depuis une autre app · lien casatookan://
9:41●●● 5G
C
ctserver.everdreamsoft.com
https://ctserver.everdreamsoft.com

Se connecter à ctserver.everdreamsoft.com

Signer avecChanger
Ma Casa
Mon domaine principal · Bitcoin + Ethereum
Première visite sur ce site
✓Partage vos adresses Bitcoin et Ethereum et signe ce message.
Login to ctserver.everdreamsoft.com 3f9a1c07

Une app ou une page web demande les adresses de la casa avec getaddress. Même feuille, mêmes règles : le demandeur est nommé d’après son callback (un scheme d’app, ou l’hôte d’une page https), la casa peut être changée, et la réponse est retenue dans Sites connectés.

Règles

Ce que Casa présélectionne dans chaque situation. Elle ne change jamais de casa sans un geste de l’utilisateur.

SituationCasa présélectionnéeCe que voit l’utilisateur
La casa active est déjà connectée au siteLa casa activePuce verte « Connectée ici depuis le… ». Aucune suggestion.
La casa active est nouvelle sur le site, une autre casa le connaîtLa casa activePuce « Première visite sur ce site » et une seule suggestion : la casa utilisée le plus récemment sur ce site, avec « L’utiliser ». Les autres sont signalées dans le sélecteur.
Aucune casa ne connaît le siteLa casa activePuce « Première visite sur ce site », aucune suggestion.
La casa connue appartient à un domaine suppriméLa casa activeAucune suggestion (elle ne peut plus signer). Elle reste visible dans Réglages › Sites connectés.
Connexion Farcaster, la casa ne possède pas le compteLa casa activeUn avertissement, et le bouton principal « Utiliser <casa qui possède le compte> ». Quand aucune casa n’en possède : « Importer votre compte Farcaster ».
Le site demande Ethereum et la casa est une clé Bitcoin uniquement (ou l’inverse)Sans objetLa ligne reste dans le sélecteur, désactivée, avec la raison.
Signature ou transaction depuis un site connectéLa casa connectée, verrouilléePas de « Changer » : le site attend cette adresse. On change de compte depuis la pastille de la casa dans la barre d’adresse, et le site reçoit alors accountsChanged.
Adresse Bitcoin déjà choisie pour ce site et cette casaLe même typeLe choix retenu, modifiable.
Adresse Bitcoin, première foisLegacy quand elle détient des BTC ou des actifs Counterparty et que SegWit est vide. SegWit sinon.La raison sous le choix (« 12 actifs · 0,0042 BTC »). Taproot n’est jamais présélectionnée.

Où elle s’applique

Une seule feuille et un seul index des connexions servent toutes les façons dont un site ou une app peut atteindre le portefeuille.

Navigateur intégré

  • Les providers injectés (EIP-1193, sats-connect, web3XCP) ouvrent la feuille pour chaque connexion, signature et transaction.
  • Pastille de la casa : toujours affichée à droite de la barre d’adresse avec la maison de la casa active ; un point vert signale une casa connectée au site ouvert. La toucher change la casa que voit ce site.

WalletConnect

  • Les sessions utilisent la même feuille et le même index. Le site est identifié par les métadonnées de l’appairage (origine, nom, icône).
  • Enregistré avec via: "walletconnect".

Liens casatookan://

  • Les connexions web3 depuis d’autres apps et pages web (getaddress, signForAddress) utilisent la même feuille. Voir Deep links.
  • Enregistré avec via: "deeplink", sous le scheme de l’app (sogapp://) ou l’origine de la page.
  • Signer avec une autre casa ne change pas la casa active du portefeuille : l’app reçoit simplement les adresses de la casa choisie.

Index des connexions

Stocké sur l’appareil (AsyncStorage), hors du coffre et des domaines. Une casa est identifiée par son adresse. Son index ne sert pas d’identifiant, car il change quand un domaine est supprimé. Son nom, sa couleur et son domaine sont copiés au moment de la connexion, pour qu’une casa disparue puisse encore être affichée. L’index démarre vide : les connexions faites avant son existence ne sont pas migrées, si bien que chaque casa est « Première visite » une fois par site.

// clé : "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",        // identité stable
      "btcPurpose": null,              // "segwit" | "legacy" | "taproot"
      "farcasterFid": 399250,
      "casa": {                        // copié au moment de la connexion
        "name": "Casa Yodark",
        "color": "#9B59B6",
        "estateName": "Domaine Farcaster",
        "ghost": false                 // clé importée
      },
      "connectedAt": "2026-10-05T18:12:00Z",
      "lastUsedAt":  "2026-10-05T19:40:00Z",
      "disconnectedAt": null
    }]
  }
}

Comment il est utilisé

  • Au chargement d’un site : on cherche les connexions de son origine. Quand la casa active en a une, le bridge répond directement à eth_accounts et getAddresses, sans redemander.
  • Casa présente ou disparue : l’adresse est comparée aux comptes des domaines présents. Aucune correspondance = « D’un domaine supprimé ».
  • Mise à jour : chaque connexion, signature ou transaction approuvée rafraîchit lastUsedAt et l’instantané de la casa (nom, couleur).
  • Effacement : « Déconnecter » renseigne disconnectedAt, « Oublier » supprime la ligne. Supprimer le portefeuille efface tout l’index.
  • Absent de l’index : les clés et les soldes. L’index garde uniquement ce qu’il faut pour reconnaître une casa.

Casa enregistre le scheme casatookan:// sur iOS et Android. D’autres apps et pages web l’utilisent pour ouvrir une dApp dans le portefeuille ou pour connecter un utilisateur avec un défi signé (le protocole x-callback-url web3XCP du Casa Tookan d’origine). Le portefeuille doit être déverrouillé : tant qu’il est verrouillé, les liens browse et getaddress sont ignorés et ne sont pas mis en file d’attente.

LienParamètresEffet
https://casatookan.com/open?url={url}&ref={app}url : la page https à ouvrir, encodée en URL. ref : qui envoie l’utilisateur (facultatif).Universal Link / App Link : ouvre la page dans le navigateur de dApps, après le déverrouillage si le portefeuille est verrouillé. Sans l’app, une page avec les stores et le navigateur.
casatookan://browse/{url}url : la page à ouvrir, encodée en URL.Ouvre la page dans le navigateur de dApps intégré.
casatookan://x-callback-url/getaddress?x-success={callback}&msg={message}x-success : où va la réponse (voir plus bas).
msg : le défi à signer, encodé en URL.
Connexion web3 sur Bitcoin + Ethereum : la feuille du signataire demande à l’utilisateur, puis Casa signe msg avec la casa choisie et appelle le callback.
casatookan://x-callback-url/signForAddress?chain={chains}&x-success={callback}&msg={message}chain : identifiants de chaîne séparés par des virgules, par ex. bitcoin,base. bitcoin ou toute chaîne EVM activée dans le portefeuille (ethereum, base, polygon…).Comme getaddress, sur les chaînes listées, dans cet ordre.

Où va la réponse : x-success

Un scheme d’app

  • x-success=myapp (lettres, chiffres, + . -).
  • Casa ouvre myapp://sendaddress?address=…&msg=…&sig=….
  • Les valeurs sont écrites brutes, sans encodage URL, exactement comme dans le Casa Tookan d’origine, pour que les apps web3XCP existantes continuent de fonctionner. Découpez la query sur &address=, &msg=, &sig=, sans passer par un parseur d’URL.

Une page web

  • x-success=https://example.com/login, encodée en URL dans le lien.
  • Casa ouvre https://example.com/login?address=…&msg=…&sig=… dans le navigateur. Une query string existante est conservée (on utilise &), de même qu’un #fragment.
  • Chaque valeur est encodée en URL (les signatures base64 contiennent + et /) : lisez-les avec URLSearchParams.
  • https uniquement. http:// et toute autre cible sont refusés : la signature circulerait en clair.

La réponse

address = chain:bitcoin;1Ca5a…T00k;;separator;;chain:ethereum;0x1614…1313
msg     = le défi, inchangé
sig     = chain:bitcoin;H8k2…=;;separator;;chain:ethereum;0x5f1c…1b

Format

  • Une entrée chain:{id};{value} par chaîne, dans l’ordre demandé, reliées par ;;separator;;. Les entrées de address et de sig se correspondent.
  • Les adresses sont celles de la casa que l’utilisateur a approuvée dans la feuille, qui peut différer de la casa active.

Signature Bitcoin

  • Message signé BIP-137, en base64.
  • Signé par l’adresse Legacy (P2PKH) de la casa, celle qui détient les actifs Counterparty, chemin m/0'/0/{casa}. Vérifiez-la avec n’importe quel vérificateur BIP-137 face à l’adresse renvoyée.

Signature EVM

  • Signature secp256k1 brute de keccak256(utf8(msg)), sérialisée 0x{r}{s}{v} avec v = 27 + recid. Ce format diffère d’EIP-191 : les vérificateurs personal_sign la rejetteront.
  • Retrouvez le signataire directement à partir du digest keccak (par ex. avec ethers SigningKey.recoverPublicKey(keccak256(toUtf8Bytes(msg)), sig)) et comparez avec l’adresse renvoyée, chemin m/44'/60'/0'/0/{casa}.

Approbation et historique

Testeur

Ouvrez le testeur de deep links sur le téléphone où Casa est installée. Il construit chacun des liens ci-dessus, revient sur lui-même avec la réponse de Casa (x-success = sa propre URL), la décode et vérifie la signature Ethereum.