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://.
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 ».
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.
Velocimon verra l’adresse de la casa que vous choisissez.
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.
Après « L’utiliser », un toast confirme le changement et permet de l’annuler. Le bouton nomme l’identité utilisée (@yodark).
Velocimon vous connecte avec un compte Farcaster.
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).
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.
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.
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.
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.
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.
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.
Ce que Casa présélectionne dans chaque situation. Elle ne change jamais de casa sans un geste de l’utilisateur.
| Situation | Casa présélectionnée | Ce que voit l’utilisateur |
|---|---|---|
| La casa active est déjà connectée au site | La casa active | Puce verte « Connectée ici depuis le… ». Aucune suggestion. |
| La casa active est nouvelle sur le site, une autre casa le connaît | La casa active | Puce « 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 site | La casa active | Puce « Première visite sur ce site », aucune suggestion. |
| La casa connue appartient à un domaine supprimé | La casa active | Aucune suggestion (elle ne peut plus signer). Elle reste visible dans Réglages › Sites connectés. |
| Connexion Farcaster, la casa ne possède pas le compte | La casa active | Un 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 objet | La ligne reste dans le sélecteur, désactivée, avec la raison. |
| Signature ou transaction depuis un site connecté | La casa connectée, verrouillée | Pas 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 casa | Le même type | Le choix retenu, modifiable. |
| Adresse Bitcoin, première fois | Legacy 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. |
Une seule feuille et un seul index des connexions servent toutes les façons dont un site ou une app peut atteindre le portefeuille.
via: "walletconnect".getaddress, signForAddress) utilisent la même feuille. Voir Deep links.via: "deeplink", sous le scheme de l’app (sogapp://) ou l’origine de la page.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
}]
}
}
eth_accounts et getAddresses, sans redemander.lastUsedAt et l’instantané de la casa (nom, couleur).disconnectedAt, « Oublier » supprime la ligne. Supprimer le portefeuille efface tout l’index.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.
| Lien | Paramètres | Effet |
|---|---|---|
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. |
x-successx-success=myapp (lettres, chiffres, + . -).myapp://sendaddress?address=…&msg=…&sig=….&address=, &msg=, &sig=, sans passer par un parseur d’URL.x-success=https://example.com/login, encodée en URL dans le lien.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.+ et /) : lisez-les avec URLSearchParams.http:// et toute autre cible sont refusés : la signature circulerait en clair.address = chain:bitcoin;1Ca5a…T00k;;separator;;chain:ethereum;0x1614…1313 msg = le défi, inchangé sig = chain:bitcoin;H8k2…=;;separator;;chain:ethereum;0x5f1c…1b
chain:{id};{value} par chaîne, dans l’ordre demandé, reliées par ;;separator;;. Les entrées de address et de sig se correspondent.m/0'/0/{casa}. Vérifiez-la avec n’importe quel vérificateur BIP-137 face à l’adresse renvoyée.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.SigningKey.recoverPublicKey(keccak256(toUtf8Bytes(msg)), sig)) et comparez avec l’adresse renvoyée, chemin m/44'/60'/0'/0/{casa}.sogapp://) ou l’origine de la page, avec l’adresse Bitcoin Legacy et l’adresse Ethereum qui ont été partagées.chain, un x-success manquant ou une liste de chaînes vide rendent le lien invalide : rien n’est affiché et rien n’est envoyé.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.