Aller au contenu

Adresse de custody et clés d'application

Deux sortes de clés interviennent. L’adresse de custody possède votre fid. Une clé d’application signe vos messages de tous les jours : casts, réactions, follows. casty utilise l’adresse de custody une seule fois, pour ajouter une clé d’application, et ne garde que la clé d’application. La custody signe soit dans un portefeuille, depuis la page (Portefeuilles et clés), soit dans un terminal, à partir de la phrase de récupération que demande casty init.

C’est un compte Ethereum, dérivé de votre phrase de récupération. Elle peut ajouter et supprimer des clés d’application et déplacer le fid, si bien que casty ne la stocke jamais : casty init lit la phrase, signe une demande, et met la phrase à zéro. casty key revoke la demande de nouveau, parce que supprimer une clé avec l’adresse de custody exige une nouvelle signature.

Une clé Ed25519 que casty génère sur votre machine. Elle signe des messages pour votre fid, et les nœuds les acceptent tant que la clé est enregistrée et n’a pas expiré.

Depuis la version 16 du moteur, Snapchain enregistre ces clés avec un message KEY_ADD au lieu d’une transaction on-chain : pas de gas, et la clé est utilisable dès que le message est fusionné. casty le construit avec les fonctions utilitaires makeKeyAddBody et makeKeyAdd de @farcaster/core. Voir writing messages dans la documentation de Snapchain. Les anciens tutoriels, dont l’exemple hello-world de hub-monorepo, ajoutent encore la clé par une transaction vers le contrat KeyGateway sur OP Mainnet : cela coûte du gas, demande un portefeuille approvisionné et un RPC, et casty n’utilise pas cette voie.

Un KEY_ADD porte trois signatures :

  • la signature de l’application demandeuse sur une demande de clé, faite par l’adresse de custody du fid de l’application (--app-fid, votre propre fid par défaut) ;
  • la signature de l’adresse de custody sur la clé, ses scopes, sa durée de vie, un nonce et une date limite ;
  • l’enveloppe du message, signée par la nouvelle clé elle-même, ce qui prouve que casty détient sa moitié privée.

Le nonce est propre à chaque fid et doit augmenter à chaque changement de clé : casty lit le nonce actuel sur le nœud et ajoute 1. Si un autre changement arrive en premier, le nœud refuse le message, et casty init réessaie une fois avec un nouveau nonce.

Une clé sans gas liste les types de messages qu’elle peut signer. casty demande ceux-ci par défaut :

Nom pour --scopes Types de messages
cast CAST_ADD, CAST_REMOVE
reaction REACTION_ADD, REACTION_REMOVE
link LINK_ADD, LINK_REMOVE

user-data (USER_DATA_ADD, votre profil) n’est ajouté que si vous le demandez. KEY_ADD et KEY_REMOVE ne peuvent jamais faire partie des scopes d’une clé, si bien qu’une clé d’application ne peut ni ajouter de clés ni supprimer d’autres clés ; elle ne peut que se supprimer elle-même.

--ttl fixe combien de temps la clé vit sans utilisation : 30 jours par défaut, au plus 90. Chaque message signé par la clé et fusionné fait repartir la période, si bien qu’une clé que vous utilisez n’expire pas. casty init affiche la date à laquelle elle expirerait si elle restait inutilisée. Un fid peut détenir au plus 1000 clés sans gas actives.

Chaque clé enregistre le fid de l’application qui l’a demandée. Un cast porte la clé publique qui l’a signé, si bien que le fil peut dire de quelle application il vient : casty cherche le signataire dans la liste des clés de l’auteur, prend le fid demandeur et affiche le nom d’utilisateur de ce fid après via. --only-app et --exclude-app filtrent dessus, et casty clients --fid <fid> liste les clés de n’importe quel compte avec leurs applications. Les clés ajoutées on-chain portent la même demande, et casty les lit de la même façon.

Commande Signée par Exige
casty key revoke <key> l’adresse de custody la phrase de récupération
casty key revoke <key> --self la clé d’application elle-même la clé dans le magasin de casty

Les deux envoient un KEY_REMOVE et attendent que le nœud ne liste plus la clé. Les clés ajoutées on-chain se suppriment on-chain, dans le contrat KeyRegistry ; casty ne le fait pas.