Chapitre 05 : Les transactions avancées
Voici quelques informations supplémentaires sur les transactions Bitcoin.
Multi-signature.
Une adresse multi-signature (utilisée notamment pour le lighting network) est en fait un script de verrouillage où X clés publiques sont enregistrées et au moins Y d’entre elles (Y étant inférieur à X) sont nécessaires pour déverrouiller les fonds.
Si par exemple, on crée une adresse multi-signature 2-de-3 cela veut dire que deux des trois clés sont nécessaires pour déverrouiller les fonds.
Un script multi-signature ressemble à cela :
M <Public Key 1> <Public Key 2> ... <Public Key N> N CHECKMULTISIG
N est le nombre total de clés et M est le nombre de signatures minimum requise.
- Exemple de script de locking :
2 <Public Key A> <Public Key B> <Public Key C> 3 CHECKMULTISIG
. - Exemple de script de unlocking :
<Signature B> <Signature C>
. - Exemple de script
exécuté :
<Signature B> <Signature C> 2 <Public Key A> <Public Key B> <Public Key C> 3 CHECKMULTISIG
Pay-to-Script-Hash.
Avec les paiements P2SH, le script peut être remplacé par son empreinte (hash). Quand une transaction va essayer d’utiliser l’output ayant un script P2SH, il doit présenter un script dont le hash correspond à celui de l’output en plus de son script de déverrouillage.
Le script de verrouillage s’appelle le redeem script. Pour faire simple, si vous fournissez le script dont le hash est stocké sur l’ouput, vous pouvez utiliser l’input. Il faudra donc fournir le script correspondant au hash et le script de déverrouillage.
Un des gros avantage est que vous pouvez encoder les scripts sous forme d’adresses. Mais surtout, à mon avis, c’est que vous ne révélez rien sur le script de déverrouillage avant que l’output soit dépensé!
Note : Les adresses Bitcoin utilisant le format P2SH sont identifiables, car elles commencent par le chiffre “3”.
Data Recording Output (RETURN).
Dans la version 0.9 du client Bitcoin Core, un compromis a été trouvé avec l’introduction de l’opérateur RETURN. RETURN permet aux développeurs d’ajouter 80 octets de données de non-paiement à une sortie de transaction. Cependant, contrairement à l’utilisation de “faux” UTXO, l’opérateur RETURN crée une sortie explicitement non dépensable, elles n’est donc pas stockée dans les UTXO (ce qui économise le pool de mémoire UTXO et ne surcharge pas les nœuds complets).
Time lock.
Les blocages horaires sont des restrictions sur les transactions qui permettent de ne pouvoir les utiliser qu’après un
certain temps. Ceci est implémenté par le champ nLocktime
dans une transaction. Deux nouvelles fonctionnalités de
timelock ont été introduites fin 2015 et mi-2016 qui offrent des timelocks au niveau des UTXO. Ces méthodes sont
CHECKLOCKTIMEVERIFY
et CHECKSEQUENCEVERIFY
.
Les blocages horaires sont utiles pour postdater les transactions et verrouiller les fonds à une date future.
Segregated witness
En cryptographie, le terme “témoin” est utilisé pour décrire une solution à un puzzle cryptographique. Pour Bitcoin, le “témoin” satisfait une condition cryptographique placée sur une sortie de transaction non dépensée (UTXO). Le terme " témoin" est un terme plus général pour un “script de déverrouillage”.
Avant l’introduction de segwit, chaque entrée d’une transaction était suivie des données qui la déverrouillait.
Segregated Witness est une modification du bitcoin qui a déplacé les données témoins du champ scriptSig (script de déverrouillage) d’une transaction vers une structure de données distincte qui accompagne une transaction.
Les avantages de segwit sont nombreux :
- Le hash de la transaction ne porte désormais plus sur les données témoin. On peut donc connaître à l’avance le hash qu’aura une transaction dans la blockchain peu importe les scripts de déverrouillage qui seront ajoutés par les différents tiers (Hyper important pour le lighting network).
- Une version de script a été ajouté pour mieux gérer les mises à jour.
- Une fois validée, on peut supprimer les données témoin. Il n’y a plus besoin de les stocker ou de les transmettre.
Encore une fois, Segwit est un changement qui porte sur l’output d’une transaction. Quand une transaction utilise un output, elle doit fournir un witness. Dans une transaction classique, le witness est fourni dans la partie input de la nouvelle transaction. Dans le cas de segwit, le témoin peut-être en dehors des données de la transaction.
Si on reprend un exemple basique de paiement à une adresse, le script de verrouillage sera:
DUP HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 EQUALVERIFY CHECKSIG
Avec P2WPKH (Pay-to-Witness-Public-Key-Hash), on va avoir :
0 ab68025513c3dbd2f7b92a94e0581f5d50f654e7
- Le premier élément (0) est la version du script.
- Le deuxième élément est le script de verrouillage appelé
witness programm
.
Le script de déverrouillage en temps normal serait :
“Vin” : [
"txid": "0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2",
"vout": 0,
"scriptSig": “<Bob’s scriptSig>”,
]
Et voici la transaction avec, comme vous pouvez le voir, le champs scriptSig de la transaction est vide, les informations se trouvent dans les données témoins.
[...]
“Vin” : [
"txid": "0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2",
"vout": 0,
"scriptSig": “”,
]
[...]
“witness”: “<Bob’s witness data>”
[...]
Le format d’adresse segwit natif est défini dans BIP-173. BIP-173 encode uniquement les scripts témoins (P2WPKH
et
P2WSH
). Elles commencent par bc1
.
Identifiants de transaction
Avec Segregated Witness, les transactions ont deux identifiants :
txid
: Double-SHA256 hachage de la transaction sérialisée, sans les données témoins.wxtxid
: Double-SHA256 hachage de la transaction sérialisée, avec les données témoins.
Le txid
traditionnel est calculé exactement de la même manière qu’avec une transaction non segwit. Cependant, étant
donné qu’une transaction segwit pure (une transaction qui ne contient que des entrées segwit) a des scriptSigs vides
dans chaque entrée, aucune partie de la transaction ne peut être modifiée par un tiers. Par conséquent, dans une
transaction segwit pure, le txid
est immuable, même lorsque la transaction n’est pas confirmée.