Bien que nous sachions que la signature de transactions avec un trop grand nombre d'UTXO peut entraîner des défaillances de l'appareil, cette déclaration générale soulève encore quelques questions : existe-t-il un nombre précis d'UTXO qui entraînerait la défaillance d'un portefeuille matériel lors de la signature ? Certaines UTXO peuvent-elles poser plus de problèmes que d'autres ?
En cherchant les réponses à ces questions, j'ai découvert que le temps et les efforts nécessaires à un portefeuille matériel pour signer une transaction ne dépendent pas uniquement du nombre d'UTXO envoyés et du nombre d'adresses de réception. Elle dépend également de détails similaires entourant les transactions antérieures dont chaque UTXO est issue, un phénomène que j'appelle "masse de signature". Je n'ai pas connaissance d'autres publications faisant référence à ce concept.
En d'autres termes, les UTXO ayant une masse de signature plus importante - expliquée plus en détail ci-dessous - peuvent être plus difficiles à signer que les autres. Même si deux UTXO utilisent la même quantité de données sur la blockchain, l'une d'entre elles peut nécessiter beaucoup plus de traitement pour être signée à l'aide d'un portefeuille matériel.
Ce fait s'étend au-delà des types d'adresses et des quorums multisig ; la signature d'une UTXO sur une adresse multisig 2 sur 3 peut demander beaucoup plus d'efforts que celle d'une autre UTXO sur cette même adresse (ou sur une adresse équivalente, et même si les montants en bitcoins et les adresses de destination sont exactement les mêmes).
Pour comprendre pourquoi deux UTXO d'apparence similaire peuvent avoir des masses de signature radicalement différentes, vous devez comprendre la méthode détournée utilisée par les portefeuilles matériels pour vérifier les montants saisis sans connexion internet et la manière dont la complexité des transactions peut varier selon les différentes méthodes de réception des bitcoins dans votre porte-monnaie.
Pour toute transaction en bitcoins, il est important de vérifier les montants des entrées, faute de quoi de grandes quantités de vos bitcoins pourraient être accidentellement versées à des mineurs. Pourquoi ? Parce que les frais prélevés par les mineurs ne sont pas indiqués explicitement _dans la transaction, mais calculés _implicitement en soustrayant la valeur des extrants de la valeur des intrants. Par conséquent, s'il y a une grande différence entre les deux chiffres, la taxe prélevée sera également importante.
Par exemple, si vous avez des UTXO totalisant 0,8 BTC et que vous les utilisez pour envoyer 0,3 BTC quelque part, si vous ne vous renvoyez pas les ~0,5 BTC restants comme monnaie, le mineur du bloc peut maintenant réclamer les 0,5 BTC comme faisant partie de ses frais gagnés.
Ne vous inquiétez pas ! Tous les outils bitcoins modernes et respectés comprennent des mécanismes de sécurité automatiques, de sorte qu'il serait très difficile (voire impossible) de commettre cette erreur. Le processus peut être aussi simple qu'une recherche dans la blockchain pour vérifier le montant des entrées, puis comparer leur total à la somme des sorties choisies pour déterminer si les frais sont raisonnables.
Mais bien sûr, les portefeuilles matériels sont conçus pour fonctionner indépendamment de l'internet, ce qui est particulièrement évident pour les appareils à air comprimé. Sans internet ou connexion à un nœud, la blockchain ne peut pas être observée. Par conséquent, la plupart des portefeuilles matériels doivent utiliser une méthode alternative et détournée pour vérifier les montants saisis. En fait, le dispositif doit non seulement importer les informations décrivant la transaction qu'il va signer, mais il doit également importer l'historique de l'origine de chaque entrée.
En d'autres termes, pour chaque UTXO déplacée, l'appareil voudra revérifier les détails de la transaction directement antérieure qui a conduit à la création de cette UTXO. Si cette transaction était complexe, elle impliquerait l'importation d'un plus grand nombre de données, ce qui se refléterait dans la taille d'un fichier PSBT. Examinons la complexité des transactions.
La plupart des gens reçoivent des bitcoins dans leur portefeuille de l'une des trois façons suivantes : par l'intermédiaire d'une bourse, d'un pool minier ou directement d'une autre personne dans le cadre d'une transaction de pair à pair (P2P). Les transactions de pair à pair sont généralement très peu complexes et les UTXO qui en résultent ont une masse de signature relativement faible.
Cependant, les bourses et les pools miniers ont tendance à distribuer les fonds par lots, en envoyant des bitcoins à plusieurs personnes à la fois au cours d'une même transaction. Ces transactions sont plus complexes et les UTXO qui en résultent auront une masse de signature plus importante.
J'ai étudié les tendances de distribution de plusieurs pools miniers et bourses populaires en Amérique, et mes conclusions sont présentées dans le tableau ci-dessous. Le nombre de sorties indique le nombre de personnes qui envoient généralement des bitcoins dans chaque distribution. Un nombre plus élevé signifie une plus grande complexité de la transaction et une charge de signature plus considérable pour les destinataires.
Ces chiffres sont des approximations au moment de la rédaction du présent document et sont susceptibles de changer en fonction de l'évolution des distributions de chaque pool ou échange à l'avenir.
Notez que les distributions des pools miniers sont généralement plus importantes que celles des bourses, et que certains pools miniers tels que F2Pool utilisent des distributions extraordinairement importantes. Par conséquent, si vous recevez un UTXO directement à partir d'un paiement F2Pool, cet UTXO est plus susceptible d'entraîner des difficultés de signature pour certains portefeuilles matériels.
En 2017, le soft fork de segregated witness a eu lieu, et le processus de signature a été modifié pour les transactions SegWit. Une exigence a été introduite pour inclure les montants saisis dans les données que les utilisateurs s'engagent à signer. Ainsi, toute tentative de tromperie d'un utilisateur ou d'un appareil pour qu'il signe par inadvertance une transaction avec des frais absurdement élevés serait empêchée. La plupart des fabricants de portefeuilles matériels ont agi en conséquence, en supprimant les contrôles de sécurité du montant d'entrée et en simplifiant le processus de signature pour les transactions SegWit.
Cependant, à la mi-2020, une vulnérabilité a été découverte dans le BIP 143, ce qui a incité de nombreux fabricants de portefeuilles matériels à réintroduire des contrôles de sécurité du montant d'entrée pour les transactions SegWit. Au moment de la rédaction du présent document, les contrôles de sécurité de la quantité d'entrée restent un processus normal lors de la signature d'un portefeuille matériel. La communauté discute de changements futurs qui pourraient supprimer plus efficacement la nécessité de contrôles de sécurité du montant des entrées, par exemple en rendant les frais explicites dans chaque transaction plutôt qu'implicites.
Les variations de la masse de signature signifient que lorsque vous essayez de retirer des bitcoins de votre portefeuille de stockage à froid, il y a un lien avec la façon dont vous avez obtenu les bitcoins au départ. Les méthodes que vous utilisez pour acquérir des bitcoins peuvent créer des différences lorsqu'il s'agit d'approuver des transferts.
Si vous détenez un UTXO qui a été transféré depuis un autre portefeuille que vous contrôlez ou qui a été reçu lors d'une transaction de pair à pair, il y a de fortes chances que la transaction ait été relativement simple. L'UTXO aura une masse de signature plus petite et sera plus facile à signer lors d'une prochaine dépense. En revanche, si vous avez reçu une UTXO directement d'un pool minier, ou plus particulièrement d'un pool minier qui effectue des distributions très importantes (comme le montre le graphique précédent), vous pouvez vous attendre à ce que cette UTXO soit plus difficile à signer.
Heureusement, si votre portefeuille matériel ne parvient pas à signer parce que vous essayez de déplacer simultanément un trop grand nombre d'UTXO à masse élevée, cela ne signifie pas que vos bitcoins sont définitivement bloqués. Une solution simple et rapide consiste à diviser votre transaction en plusieurs opérations, en transférant vos bitcoins en plusieurs fois. Chaque morceau ne contiendra qu'une fraction des données, et votre appareil aura plus de chances de fournir une signature avec succès.
Une autre stratégie consiste à prévenir les échecs de signature en contrôlant le nombre d'UTXO que vous détenez et la masse de signature de ces UTXO. Bien que vous ne puissiez pas changer la façon dont les pools miniers et les bourses distribuent les fonds, il est essentiel de se rappeler que la masse de signature d'une UTXO est déterminée par la transaction qui la précède immédiatement, et non par l'historique des transactions qui l'ont précédée. Cela signifie que vous pouvez recevoir un UTXO d'un pool minier et le transférer immédiatement vers un autre portefeuille ou une autre adresse que vous contrôlez, imitant ainsi une transaction de pair à pair. L'UTXO résultant à la nouvelle adresse aura une petite masse de signature plutôt qu'une grande.
Il est important de souligner que la masse de signature n'affecte que le temps et les efforts nécessaires à un portefeuille matériel pour signer une transaction, et non les frais de réseau que vous paierez. En effet, la masse de signature n'est pertinente que pendant le processus de signature et ne fera pas en sorte que votre transaction prenne plus de données sur la blockchain.
Cela signifie que vous ne paierez pas nécessairement plus de frais de transaction si vous recevez des bitcoins d'un pool minier tel que F2Pool, et que vos frais de transaction ne diminueront pas non plus si vous choisissez un service qui utilise moins de sorties pour ses distributions.
Bien que nous sachions que la signature de transactions avec un trop grand nombre d'UTXO peut entraîner des défaillances de l'appareil, cette déclaration générale soulève encore quelques questions : existe-t-il un nombre précis d'UTXO qui entraînerait la défaillance d'un portefeuille matériel lors de la signature ? Certaines UTXO peuvent-elles poser plus de problèmes que d'autres ?
En cherchant les réponses à ces questions, j'ai découvert que le temps et les efforts nécessaires à un portefeuille matériel pour signer une transaction ne dépendent pas uniquement du nombre d'UTXO envoyés et du nombre d'adresses de réception. Elle dépend également de détails similaires entourant les transactions antérieures dont chaque UTXO est issue, un phénomène que j'appelle "masse de signature". Je n'ai pas connaissance d'autres publications faisant référence à ce concept.
En d'autres termes, les UTXO ayant une masse de signature plus importante - expliquée plus en détail ci-dessous - peuvent être plus difficiles à signer que les autres. Même si deux UTXO utilisent la même quantité de données sur la blockchain, l'une d'entre elles peut nécessiter beaucoup plus de traitement pour être signée à l'aide d'un portefeuille matériel.
Ce fait s'étend au-delà des types d'adresses et des quorums multisig ; la signature d'une UTXO sur une adresse multisig 2 sur 3 peut demander beaucoup plus d'efforts que celle d'une autre UTXO sur cette même adresse (ou sur une adresse équivalente, et même si les montants en bitcoins et les adresses de destination sont exactement les mêmes).
Pour comprendre pourquoi deux UTXO d'apparence similaire peuvent avoir des masses de signature radicalement différentes, vous devez comprendre la méthode détournée utilisée par les portefeuilles matériels pour vérifier les montants saisis sans connexion internet et la manière dont la complexité des transactions peut varier selon les différentes méthodes de réception des bitcoins dans votre porte-monnaie.
Pour toute transaction en bitcoins, il est important de vérifier les montants des entrées, faute de quoi de grandes quantités de vos bitcoins pourraient être accidentellement versées à des mineurs. Pourquoi ? Parce que les frais prélevés par les mineurs ne sont pas indiqués explicitement _dans la transaction, mais calculés _implicitement en soustrayant la valeur des extrants de la valeur des intrants. Par conséquent, s'il y a une grande différence entre les deux chiffres, la taxe prélevée sera également importante.
Par exemple, si vous avez des UTXO totalisant 0,8 BTC et que vous les utilisez pour envoyer 0,3 BTC quelque part, si vous ne vous renvoyez pas les ~0,5 BTC restants comme monnaie, le mineur du bloc peut maintenant réclamer les 0,5 BTC comme faisant partie de ses frais gagnés.
Ne vous inquiétez pas ! Tous les outils bitcoins modernes et respectés comprennent des mécanismes de sécurité automatiques, de sorte qu'il serait très difficile (voire impossible) de commettre cette erreur. Le processus peut être aussi simple qu'une recherche dans la blockchain pour vérifier le montant des entrées, puis comparer leur total à la somme des sorties choisies pour déterminer si les frais sont raisonnables.
Mais bien sûr, les portefeuilles matériels sont conçus pour fonctionner indépendamment de l'internet, ce qui est particulièrement évident pour les appareils à air comprimé. Sans internet ou connexion à un nœud, la blockchain ne peut pas être observée. Par conséquent, la plupart des portefeuilles matériels doivent utiliser une méthode alternative et détournée pour vérifier les montants saisis. En fait, le dispositif doit non seulement importer les informations décrivant la transaction qu'il va signer, mais il doit également importer l'historique de l'origine de chaque entrée.
En d'autres termes, pour chaque UTXO déplacée, l'appareil voudra revérifier les détails de la transaction directement antérieure qui a conduit à la création de cette UTXO. Si cette transaction était complexe, elle impliquerait l'importation d'un plus grand nombre de données, ce qui se refléterait dans la taille d'un fichier PSBT. Examinons la complexité des transactions.
La plupart des gens reçoivent des bitcoins dans leur portefeuille de l'une des trois façons suivantes : par l'intermédiaire d'une bourse, d'un pool minier ou directement d'une autre personne dans le cadre d'une transaction de pair à pair (P2P). Les transactions de pair à pair sont généralement très peu complexes et les UTXO qui en résultent ont une masse de signature relativement faible.
Cependant, les bourses et les pools miniers ont tendance à distribuer les fonds par lots, en envoyant des bitcoins à plusieurs personnes à la fois au cours d'une même transaction. Ces transactions sont plus complexes et les UTXO qui en résultent auront une masse de signature plus importante.
J'ai étudié les tendances de distribution de plusieurs pools miniers et bourses populaires en Amérique, et mes conclusions sont présentées dans le tableau ci-dessous. Le nombre de sorties indique le nombre de personnes qui envoient généralement des bitcoins dans chaque distribution. Un nombre plus élevé signifie une plus grande complexité de la transaction et une charge de signature plus considérable pour les destinataires.
Ces chiffres sont des approximations au moment de la rédaction du présent document et sont susceptibles de changer en fonction de l'évolution des distributions de chaque pool ou échange à l'avenir.
Notez que les distributions des pools miniers sont généralement plus importantes que celles des bourses, et que certains pools miniers tels que F2Pool utilisent des distributions extraordinairement importantes. Par conséquent, si vous recevez un UTXO directement à partir d'un paiement F2Pool, cet UTXO est plus susceptible d'entraîner des difficultés de signature pour certains portefeuilles matériels.
En 2017, le soft fork de segregated witness a eu lieu, et le processus de signature a été modifié pour les transactions SegWit. Une exigence a été introduite pour inclure les montants saisis dans les données que les utilisateurs s'engagent à signer. Ainsi, toute tentative de tromperie d'un utilisateur ou d'un appareil pour qu'il signe par inadvertance une transaction avec des frais absurdement élevés serait empêchée. La plupart des fabricants de portefeuilles matériels ont agi en conséquence, en supprimant les contrôles de sécurité du montant d'entrée et en simplifiant le processus de signature pour les transactions SegWit.
Cependant, à la mi-2020, une vulnérabilité a été découverte dans le BIP 143, ce qui a incité de nombreux fabricants de portefeuilles matériels à réintroduire des contrôles de sécurité du montant d'entrée pour les transactions SegWit. Au moment de la rédaction du présent document, les contrôles de sécurité de la quantité d'entrée restent un processus normal lors de la signature d'un portefeuille matériel. La communauté discute de changements futurs qui pourraient supprimer plus efficacement la nécessité de contrôles de sécurité du montant des entrées, par exemple en rendant les frais explicites dans chaque transaction plutôt qu'implicites.
Les variations de la masse de signature signifient que lorsque vous essayez de retirer des bitcoins de votre portefeuille de stockage à froid, il y a un lien avec la façon dont vous avez obtenu les bitcoins au départ. Les méthodes que vous utilisez pour acquérir des bitcoins peuvent créer des différences lorsqu'il s'agit d'approuver des transferts.
Si vous détenez un UTXO qui a été transféré depuis un autre portefeuille que vous contrôlez ou qui a été reçu lors d'une transaction de pair à pair, il y a de fortes chances que la transaction ait été relativement simple. L'UTXO aura une masse de signature plus petite et sera plus facile à signer lors d'une prochaine dépense. En revanche, si vous avez reçu une UTXO directement d'un pool minier, ou plus particulièrement d'un pool minier qui effectue des distributions très importantes (comme le montre le graphique précédent), vous pouvez vous attendre à ce que cette UTXO soit plus difficile à signer.
Heureusement, si votre portefeuille matériel ne parvient pas à signer parce que vous essayez de déplacer simultanément un trop grand nombre d'UTXO à masse élevée, cela ne signifie pas que vos bitcoins sont définitivement bloqués. Une solution simple et rapide consiste à diviser votre transaction en plusieurs opérations, en transférant vos bitcoins en plusieurs fois. Chaque morceau ne contiendra qu'une fraction des données, et votre appareil aura plus de chances de fournir une signature avec succès.
Une autre stratégie consiste à prévenir les échecs de signature en contrôlant le nombre d'UTXO que vous détenez et la masse de signature de ces UTXO. Bien que vous ne puissiez pas changer la façon dont les pools miniers et les bourses distribuent les fonds, il est essentiel de se rappeler que la masse de signature d'une UTXO est déterminée par la transaction qui la précède immédiatement, et non par l'historique des transactions qui l'ont précédée. Cela signifie que vous pouvez recevoir un UTXO d'un pool minier et le transférer immédiatement vers un autre portefeuille ou une autre adresse que vous contrôlez, imitant ainsi une transaction de pair à pair. L'UTXO résultant à la nouvelle adresse aura une petite masse de signature plutôt qu'une grande.
Il est important de souligner que la masse de signature n'affecte que le temps et les efforts nécessaires à un portefeuille matériel pour signer une transaction, et non les frais de réseau que vous paierez. En effet, la masse de signature n'est pertinente que pendant le processus de signature et ne fera pas en sorte que votre transaction prenne plus de données sur la blockchain.
Cela signifie que vous ne paierez pas nécessairement plus de frais de transaction si vous recevez des bitcoins d'un pool minier tel que F2Pool, et que vos frais de transaction ne diminueront pas non plus si vous choisissez un service qui utilise moins de sorties pour ses distributions.