Aller au contenu
buybitcoinsmart

Glossaire / Transactions et frais

SIGHASH_NONE

Qu'est-ce que SIGHASH_NONE ?
SIGHASH_NONE est l'indicateur qui signe les entrées d'une transaction sans s'engager sur aucune de ses sorties, ce qui laisse la destination des fonds ouverte à quiconque les manipule.

Considérez-le comme un chèque en blanc. Une entrée SIGHASH_NONE autorise la dépense et ne dit rien sur la personne qui sera payée, si bien qu'un mineur ou n'importe quel nœud relayeur peut réécrire toutes les sorties avant que la transaction soit confirmée. Sa valeur est 2, aucun portefeuille grand public ne le propose, et si vous en voyez un dans votre propre transaction, quelque chose a mal tourné.

Comment cela fonctionne

Construire ce condensé signifie supprimer entièrement la liste des sorties avant le hachage.

Ce qui subsiste reste substantiel : la version de la transaction, l'outpoint de l'entrée signée, le numéro de séquence de cette entrée, le script qu'elle dépense et le locktime. Les numéros de séquence de toutes les autres entrées sont mis à zéro, une seconde marge de liberté, car cela permet aux cosignataires d'ajuster leurs propres délais relatifs après que cette signature existe déjà.

Ce qui ne subsiste pas, c'est tout l'intérêt. Sans sortie engagée, la signature dit seulement que ce bitcoin peut être dépensé dans une transaction de cette version à cette heure ou après. Celui qui détient la transaction à moitié construite choisit où va la valeur, et cela inclut quiconque la voit sur le réseau, puisqu'une transaction non confirmée est publique dès sa diffusion.

Ajoutez le modificateur ANYONECANPAY et l'octet devient 0x82, la signature la plus faible que bitcoin puisse produire : elle couvre une entrée et rien d'autre.

L'indicateur existe depuis la première version de janvier 2009 et n'a jamais été retiré, car le retirer laisserait des bitcoins bloqués par des scripts écrits avant que quiconque pense aux conséquences. Le BIP143 et le BIP341 l'ont tous deux réimplémenté fidèlement pour segwit et Taproot plutôt que de le supprimer discrètement.

Où le voir

SIGHASH_NONE n'apparaît presque nulle part, ce qui est exactement ce à quoi il faut s'attendre.

L'usage théorique est un protocole dans lequel une partie apporte des fonds et une contrepartie choisit la destination, cette contrepartie étant liée par quelque chose d'extérieur à la signature. Aucune application bitcoin largement utilisée ne fonctionne ainsi. Les constructions qui ont besoin d'entrées flexibles se tournent vers ANYONECANPAY, et celles qui ont besoin de sorties flexibles utilisent des solutions pré-signées où les destinations possibles sont fixées à l'avance.

Ainsi, une signature SIGHASH_NONE observée dans la nature est un bug ou un vol en cours. Les mempools sont surveillés en continu par des bots qui cherchent des anomalies dépensables, et une transaction qui en porte une n'y restera pas longtemps inaperçue. Quiconque écrit du code de signature devrait traiter cet indicateur comme un entier qu'il ne passe jamais, et quiconque audite un système de conservation devrait confirmer que l'indicateur est une constante et non un paramètre fourni par l'appelant.

Pour quelqu'un qui achète et conserve du bitcoin, la conclusion est brève : vous ne rencontrerez pas cela, votre portefeuille ne le proposera pas, et un logiciel qui vous demande de signer avec cet indicateur est un logiciel à fuir.

SIGHASH_NONE vs SIGHASH_SINGLE

SIGHASH_NONE s'engage sur zéro sortie ; SIGHASH_SINGLE s'engage sur exactement une, la sortie située au même index que l'entrée signée. Cette sortie engagée change complètement la nature de la signature. Avec SIGHASH_SINGLE, un signataire peut garantir son propre paiement tout en laissant le reste de la transaction ouvert, ce qui constitue une brique utilisable pour les échanges et les places de marché. SIGHASH_NONE ne garantit rien du tout au signataire, ce qui explique pourquoi l'un a de réelles applications et l'autre n'apparaît surtout que dans des rapports d'incident.

À ne pas confondre avec

Questions fréquentes

Quelqu'un peut-il voler des bitcoins signés avec SIGHASH_NONE ?

Oui, si la transaction atteint un mempool public. La signature ne s'engage sur aucune sortie, donc quiconque la voit peut substituer sa propre adresse et rediffuser la transaction. C'est la raison pour laquelle aucun portefeuille grand public n'expose cet indicateur.

Pourquoi bitcoin prend-il encore en charge un indicateur que personne n'utilise ?

Parce que le retirer serait un hard fork. Les bitcoins bloqués dans des scripts qui attendent que l'indicateur fonctionne deviendraient impossibles à dépenser, c'est pourquoi les deux réécritures ultérieures de l'algorithme de hachage des signatures l'ont réimplémenté plutôt que de le supprimer.

Termes associés

Plus de termes : Transactions et frais

Lire cette page en anglais