Glossaire / Adresses et clés
Adresse P2SH
Aussi appelé Pay-to-Script-Hash, Sortie P2SH, Adresse Pay-to-Script-Hash.
- Qu'est-ce qu'une adresse P2SH ?
- Une adresse P2SH commence par 3 et engage le hachage d'un script de rachat, de sorte que les conditions de dépense restent secrètes jusqu'à ce que quelqu'un révèle le script.
Spécifié dans BIP-16.
Pay to script hash est arrivé avec le BIP-16, appliqué à partir du bloc 173 805 le 1er avril 2012, et il a changé qui supporte le coût de la complexité. Avant, un expéditeur devait écrire tout le contrat dans la sortie. Après, l'expéditeur écrit 23 octets et le destinataire paie pour révéler le script plus tard, ce qui explique qu'une adresse 3 puisse dissimuler un coffre à cinq clés ou un simple portefeuille à clé unique.
Comment cela fonctionne
Le script de sortie est court et identique pour chaque adresse P2SH : OP_HASH160 suivi d'un hachage de 20 octets et OP_EQUAL, soit 23 octets au total. Le hachage engage un script de rachat que seul le destinataire connaît.
La dépense se déroule en deux passes. Le scriptSig fournit les arguments dont le script de rachat a besoin, puis le script de rachat sérialisé lui-même comme dernier élément. Un nœud hache ce dernier élément, le compare à la valeur engagée, et si elles correspondent il désérialise le script et l'exécute contre tout ce qui reste sur la pile. Les deux étapes doivent réussir.
Deux limites déterminent ce qui tient. Un script de rachat est un seul élément de pile, il ne peut donc pas dépasser la limite de push de 520 octets que Bitcoin Core définit comme MAX_SCRIPT_ELEMENT_SIZE. La politique de relais ajoute un second plafond de 15 opérations de signature par entrée P2SH. Ensemble, elles plafonnent l'arrangement bien en dessous de ce que le langage de script autorise en général, où la limite est un script de 10 000 octets.
L'adresse elle-même est du Base58Check avec un octet de version 0x05, ce qui produit le 3 initial et une chaîne de 34 caractères. Le BIP-13 a défini ce format, séparément de la règle de consensus du BIP-16.
Où le voir
Les formulaires de retrait des plateformes d'échange qui décrivent une option comme « SegWit » sans dire « native » désignent généralement une adresse 3. Les coffres multisig construits avant 2018 les utilisent. Les échanges atomiques et les contrats à verrouillage temporel haché qui ont besoin d'un script mais veulent une adresse qu'un portefeuille ordinaire peut payer en font autant.
La conséquence de cette conception est l'ambiguïté, et elle est totale. Une sortie 3 non dépensée ne révèle qu'un hachage, un explorateur de blocs ne peut donc pas vous dire si elle contient une clé unique encapsulée ou un quorum d'entreprise, et l'expéditeur ne le peut pas non plus. L'information n'apparaît que dans la transaction de dépense.
Cette ambiguïté comporte un vrai mode de perte. Récupérer des bitcoins depuis une sortie P2SH nécessite le script de rachat, pas seulement les clés privées. Une phrase de récupération seule ne reconstruira pas un script arbitraire, tout arrangement P2SH plus élaboré qu'une dérivation de portefeuille standard doit donc être sauvegardé sous forme de descripteur ou des octets du script eux-mêmes. Des personnes ont perdu des bitcoins en possédant toutes les clés et aucun script.
Adresse P2SH vs multisig P2SH
Le multisig P2SH est une chose que vous pouvez mettre dans une adresse P2SH, pas un synonyme du format. L'adresse est un conteneur, et le script de rachat qui s'y cache peut être un multisig m-sur-n, un hachage de clé SegWit imbriqué, une clause de récupération à verrouillage temporel, ou un script que personne d'autre n'a jamais écrit. Lire une adresse 3 comme « une adresse multisig » est une supposition qui échoue souvent, car le SegWit encapsulé a fait du 3 le format à clé unique par défaut pendant plusieurs années après 2017 et a laissé des millions de portefeuilles ordinaires derrière ce préfixe.