ActualitésCryptoLa mise à niveau de Zcash verrouille les coins Sprout même avec les bonnes clés

La mise à niveau de Zcash verrouille les coins Sprout même avec les bonnes clés

Auteur: Coindoo·

Points clés

  • •L'activation de la mise à niveau NU7 au bloc 3 543 405 mettra fin aux dépenses Sprout, aucun des formats de transaction restant valides ensuite — versions 5 et 6 — ne prenant en charge ce pool.
  • •Les détenteurs de Sprout devront dépendre d'outils de récupération tiers comme l'application Argos de Sovright, car le zcashd abandonné était le dernier logiciel maintenu capable de construire des transactions Sprout.
  • •La vitesse de récupération dépend de la sauvegarde : les fichiers de wallet contenant des données de notes dépensables peuvent être balayés en quelques secondes, tandis que les clés brutes exigent des scans de toute la chaîne d'environ 26 Go qui durent des heures.
  • •Les fonds Sprout laissés derrière ne sont pas brûlés et restent dans l'offre émise de Zcash, et le ZIP 2003 indique que les dépenses Sprout pourraient ne jamais revenir.
  • •La confirmation de tout transfert Sprout doit venir d'un logiciel de nœud prêt pour NU7 tel que Zebra 7.0.0, car des nœuds obsolètes peuvent rester en ligne et suivre une chaîne pré-NU7.
La mise à niveau de Zcash verrouille les coins Sprout même avec les bonnes clés

Environ 12 226 ZEC restaient dans le pool blindé Sprout de Zcash jeudi matin, contre environ 22 263 une semaine plus tôt, selon les chiffres de ZecStats cités dans le rapport de CoinDesk. L'essentiel de cette sortie s'est produite dimanche, lorsque près de 9 094 ZEC ont quitté le pool. Au prix de 1 300 $ par coin utilisé par CoinDesk, ce qui reste vaut environ 16 millions de dollars.

L'échéance est le bloc 3 543 405 — la hauteur d'activation sur le Mainnet définie dans le ZIP 259, la spécification de déploiement de la mise à niveau du réseau NU7, et reprise dans l'avis de release Zebra 7.0.0 de la Zcash Foundation. CoinDesk rapportait que Blockchair montrait la chaîne au bloc 3 542 391 à 05h24 UTC jeudi, ce qui, avec l'objectif actuel de blocs de 75 secondes, plaçait l'activation vers 02h30 UTC vendredi. Les mineurs fixent le rythme réel, cette estimation peut donc varier dans les deux sens. La date constitue donc une frontière de validité de consensus plutôt qu'une échéance de service garantie : l'événement décisif est l'extraction du bloc, tandis que les wallets et dépositaires peuvent appliquer leurs propres limites opérationnelles.

Deux défaillances qui se ressemblent dans un wallet

La règle derrière cette échéance dépasse le cadre de Sprout. Le ZIP 2003 interdit toutes les transactions de version 4 à partir de NU7, et le ZIP 259 précise que cela inclut les paiements transparents uniquement et ceux de Sapling. Sprout est touché parce qu'aucun des formats survivants ne le prend en charge : la version 5, introduite avec NU5, et la version 6, introduite avec NU6.3.

Un wallet qui refuse d'envoyer peut donc être confronté à l'un ou l'autre de deux problèmes, et un seul d'entre eux survit à l'activation :

Des coins toujours dans Sprout. Ce qui casse : le seul format de transaction capable de les dépenser cesse d'être valide. Après le bloc : aucun format de remplacement pris en charge n'existe. La fenêtre se ferme au bloc 3 543 405.

Des ZEC transparents ou Sapling dans un wallet obsolète. Ce qui casse : le logiciel construit des paiements de version 4 que le réseau rejette. Après le bloc : le solde reste dépensable, et un logiciel construisant des versions 5 ou 6 peut recréer le paiement — re-signer l'ancien ne fonctionne pas. La fenêtre reste ouverte avec un logiciel à jour.

Les paiements préparés à l'avance exigent leur propre vérification. Le ZIP 259 avertit que les transactions de version 5 et 6 ne sont pas automatiquement valides à travers l'activation non plus, car leurs signatures s'engagent sur un ID de branche de consensus. Un paiement enregistré ou signé hors ligne avant la mise à niveau peut échouer s'il atteint un bloc après l'échéance, quel que soit son format.

Les soldes détenus par des tiers relèvent de la plateforme qui les garde. L'avis de la Zcash Foundation s'adresse directement aux wallets, exchanges et autres services concernant la règle de la version 4, car ils construisent les transactions pour le compte de leurs utilisateurs.

Le matériel de récupération fixe l'horloge

Pour les détenteurs de Sprout, le problème le plus difficile est de trouver un logiciel capable encore de construire le transfert. Le ZIP 2003 note que la dépréciation de zcashd, peu avant NU6.3, a retiré le seul logiciel maintenu offrant encore des fonctionnalités de wallet Sprout. Les règles de consensus acceptent les dépenses Sprout jusqu'à l'activation, mais les détenteurs doivent se rabattre sur des outils de récupération tiers pour les créer.

Identifier les coins vient d'abord. La documentation des adresses de Zcash liste les adresses blindées Sprout avec le préfixe zc et les adresses Sapling avec zs. Le préfixe indique à quel pool appartient une adresse, pas si un solde y demeure.

La sauvegarde en dit plus que l'adresse. Les instructions de sauvegarde de Zcash traitent les clés blindées historiques séparément de la seed derrière les adresses Sapling. Le développeur de l'application de récupération Argos ajoute deux précisions dans sa documentation : une seed ZecWallet Lite ne peut pas reconstruire les clés Sprout que ce wallet a générées indépendamment, et un wallet.dat de zcashd n'a pas de seed maîtresse du tout, car ses clés sont stockées une par une — seules les clés contenues dans le fichier peuvent en être récupérées.

Ce que contient la sauvegarde détermine aussi la durée du sauvetage. Selon les notes de release d'Argos 1.2.0, un fichier de wallet qui stocke déjà des données de notes Sprout dépensables peut être balayé sans scan, en quelques secondes. Les clés sans ces données de notes, comme les clés de dépense autonomes ou les clés importées dans zcashd sans rescan, nécessitent un scan qui tente de déchiffrer chaque transaction blindée de l'historique de la chaîne, car aucun index d'adresses Sprout n'existe. Le site du développeur estime un scan Sprout à partir de clés brutes à environ 26 Go de transfert sur le Mainnet et avertit que les scans durent des heures. Avec une échéance mesurée en heures, cet écart peut décider si un transfert est possible ou non.

La destination est également fixe. La valeur Sprout ne peut se déplacer que vers le pool Sapling ; les notes de release exigent donc une adresse zs1 ou une adresse unifiée avec un récepteur Sapling. Déplacer ensuite les fonds vers Orchard est une transaction distincte que le détenteur effectue après coup.

Évaluer un outil de sauvetage sous pression d'échéance

Argos est une application de bureau tierce de Sovright, construite après l'arrêt de la maintenance de ZecWallet Lite. Le site du développeur indique que l'application a été auditée de manière indépendante par Least Authority, traite les seeds et les clés localement, et ne se connecte à internet que pour lire les données de blocs publics et envoyer le balayage final. Pour les soldes importants, le développeur recommande un ordinateur flambant neuf, car une réinitialisation d'usine n'élimine pas les malwares au niveau du firmware d'une machine longtemps utilisée.

Avant d'appuyer sur sweep :

  • Le téléchargement. Les builds macOS et Windows sont signés par code. Chaque release GitHub comporte un fichier SHA256SUMS et une attestation de build, vérifiable avec gh attestation verify <file> --repo sovright/argos.
  • La répartition. La revue du balayage inclut un don facultatif à Sovright, par défaut à 10 %. Les deux montants apparaissent avant confirmation ; fixez ce chiffre délibérément.
  • Le canal. Le développeur affirme que son support ne demandera jamais une seed, un fichier de wallet, une phrase secrète ou une clé. Toute demande en ce sens, sur quelque plateforme que ce soit, est une arnaque.

Une fois un balayage confirmé, le développeur conseille de retirer l'ancien matériel de récupération, un malware sur la machine de récupération ayant pu le capturer. Le fichier de wallet d'origine doit être conservé jusqu'à ce que chaque pool qu'il couvre ait été vidé.

Seul un nœud à jour peut confirmer le transfert

Un transfert Sprout signé et diffusé ne compte qu'une fois inclus dans un bloc avant la hauteur d'activation. L'endroit où cette confirmation est lue importe également. Le ZIP 259 renonce à l'exigence habituelle que les anciens logiciels de nœud expirent avant une mise à niveau, et avertit que des nœuds non pris en charge peuvent rester en ligne et suivre une branche pré-NU7. L'avis de la Zcash Foundation indique que les nœuds non mis à niveau suivront une autre chaîne. Un détenteur vérifiant un nœud obsolète pourrait voir un transfert que le réseau mis à niveau ne reconnaît pas ; la confirmation doit donc venir d'un logiciel prêt pour NU7 tel que Zebra 7.0.0, la première release stable de Zebra avec le support NU7 sur le Mainnet.

La sortie est aussi publique. La section confidentialité du ZIP 2003 note que la valeur quittant Sprout modifie le solde visible du pool, et qu'une brève période de sortie rend le timing et les montants distinctifs plus faciles à relier à des détenteurs précis. Avec seulement environ 40 ZEC en mouvement mercredi, un retrait tardif dispose de peu de trafic environnant où se fondre.

Les coins laissés derrière restent comptabilisés

Le ZIP 2003, rédigé par Daira-Emma Hopwood, ne désémet ni ne brûle les fonds Sprout. Le solde du pool à l'activation reste dans l'offre émise de Zcash, y compris pour les calculs du Network Sustainability Mechanism dans le ZIP 237. La comptabilité d'offre de Zcash continue donc de compter des coins qui ne peuvent actuellement pas bouger.

La proposition laisse une voie théorique de retour — soit réactiver les transactions de version 4, soit ajouter un autre mécanisme de récupération si la communauté le juge utile. Elle indique aussi que les dépenses Sprout pourraient ne jamais revenir.

La justification de l'acceptation de ce coût repose sur la sécurité des nœuds. Le ZIP 2003 note que Sprout partage le système de preuve Groth16 de Sapling et les courbes BLS12-381 depuis la mise à niveau Sapling. Son circuit JoinSplit et sa gestion des nullifiers et des engagements de notes alourdissent toujours le code qui accepte de nouvelles transactions, notamment comme surface d'attaque par déni de service. Sprout étant presque inutilisé, les implémentations de nœuds ont peu de raisons d'optimiser ce chemin. La manière dont le périmètre de la mise à niveau a été arrêté est couverte dans le rapport de Coindoo sur le vote des détenteurs de coins NU7.

Le coût pèse sur un groupe restreint : les détenteurs dont les clés Sprout gisent dans des sauvegardes qu'ils n'ont pas vérifiées, ou perdues. Le solde public du pool ne permet pas de distinguer les deux. Le chiffre qui clôt l'histoire sera la valeur du pool Sprout dans les données ZecStats une fois le bloc 3 543 405 extrait, qui montrera combien de ZEC la mise à niveau a laissés derrière elle. Un ZIP ultérieur proposant un mécanisme de récupération serait le seul signe qu'un accès pourrait revenir.

Source : Coindoo