JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
Bitcoin: transactions et contrats sur la chaîne
1. Bitcoin: transactions et contrats sur la chaîne
Erwan Martin
Lyon Bitcoin Meetup
public@fzwte.net
June 30, 2015
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 1 / 30
2. Plan
1 Rappels
Adresses et clés publiques
Blocks
Transactions
Scripts
2 Contrats
Escrow
Campagne de nancement
Dépôt de garantie
3 Épilogue
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 2 / 30
3. Rappels
Table of Contents
1 Rappels
Adresses et clés publiques
Blocks
Transactions
Scripts
2 Contrats
Escrow
Campagne de nancement
Dépôt de garantie
3 Épilogue
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 3 / 30
4. Rappels Adresses et clés publiques
Adresses et clés publiques
02fb825c6f28169d255c4e7472fb8cb81a290b2119a387a6db9172542b2ac7e164
bcf3fdce6250ad4eb8fc60afc50b5aeb9a6aa034fc2c25b891248c8b88f83512
Public Key:
SHA256
9a3f8d58f9b04e7ceb7be4fdc44a84d1a5d44233
RIPEMD160
00 9a3f8d58f9b04e7ceb7be4fdc44a84d1a5d44233 be6e1301
1F4bCDsVtiJMVfoFkZy8FUMv7NieY2X9EG
UnBase58
Bitcoin Address:
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 4 / 30
5. Rappels Blocks
Blocks
Magic no
Block size
Block header
Version
hashPrevBlock
hashMerkleRoot
Time
Bits
Nonce
Transaction counter
Transaction
Transaction
Transaction
...
Block
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 5 / 30
20. Contrats Campagne de nancement
Campagne de nancement: principe
Cahier des charges
Le fondateur a besoin de 20 BTC.
4 participants doivent donner 5 BTC.
S'il n'y a pas assez de participants, personne ne paye.
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 20 / 30
21. Contrats Campagne de nancement
Campagne de nancement: implémentation
Tx #42 Tx #88
Input 1
Output 1
5 BTC
Output 1
20 BTC
Tx #43 Tx #89
Input 1
Output 1
5 BTC
Output 1
20 BTC
Alice:
Bob:
Promesses de don
Chaque participant créé une transaction avec comme sortie une adresse du
fondateur, mais avec le montant total de la campagne.
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 21 / 30
22. Contrats Campagne de nancement
Campagne de nancement: implémentation
Tx #42 Tx #105
Input 1
Output 1
5 BTC
Output 1
20 BTCTx #43
Input 2
Output 1
5 BTC
Alice:
Bob:
Input 3
Input 4
Phase de collecte
Le fondateur crée une transaction en fusionnant toutes celles qu'il a reçu.
Utilisation du drapeau SIGHASH_ANYONECANPAY.
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 22 / 30
23. Contrats Campagne de nancement
Quelques types de signatures
SIGHASH_ALL|SIGHASH_ANYONECANPAY
Signe tous les outputs et seulement cet input. N'importe qui peut
contribuer des satoshis à la transaction, mais sans changer où ils vont.
SIGHASH_SINGLE|SIGHASH_ANYONECANPAY
Signe seulement ce couple input/output. Permet à n'importe qui de
rajouter des inputs et des outputs.
SIGHASH_NONE|SIGHASH_ANYONECANPAY
Signe seulement cet input. N'importe qui peut dépenser les satoshis
associés comme il lui semble en rajoutant des inputs et des outputs.
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 23 / 30
24. Contrats Dépôt de garantie
Dépôt de garantie: cahier des charges
Cahier des charges
Une somme provenant de l'utilisateur est bloquée pendant une durée
déterminée.
À la n du temps, la somme est automatiquement re-transférée à
l'utilisateur.
Les deux parties peuvent annuler/modier le contrat à loisir, mais
ensemble.
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 24 / 30
25. Contrats Dépôt de garantie
Dépôt de garantie: implémentation
Génération de clés
L'utilisateur et le fournisseur de service s'échangent chacun une clé
publique: pubKeyUser et pubKeyService.
Première transaction
L'utilisateur génère une transaction à destination du fournisseur nécessitant
les deux signatures associées.
Tx #42
OP_2 pubUser pubKeyService OP_2 OP_CHECKMULTISIGInput 1
Tx #37
Output 1
10 BTC
Il envoie au fournisseur l'empreinte de cette transaction.
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 25 / 30
26. Contrats Dépôt de garantie
Dépôt de garantie: implémentation
Transaction retour
Le fournisseur génère une deuxième transaction qui dépense la première et
la renvoi à l'utilisateur.
Tx #42
OP_2 pubUser pubKeyService OP_2 OP_CHECKMULTISIGInput 1
Tx #37
Output 1
10 BTC
Tx #63
OP_DUP OP_HASH160 pubKeyLocataire OP_EQUALVERIFY OP_CHECKSIG
OP_FALSE 0 sigService
LockTime: 6 mois
Sequence number: 0
Le LockTime est conguré selon la durée voulue du dépôt, et le numéro de
séquence de l'input est mis à 0.
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 26 / 30
27. Contrats Dépôt de garantie
Signature du contrat
Signature du contrat
L'utilisateur ajoute sa signature dans la transaction retour, puis publie les
deux transactions.
Fin normale du contrat
À la n du contrat, la transaction est inclue dans un bloc, et les bitcoins
retournent à l'utilisateur.
Modication du contrat
Les deux utilisateurs peuvent recréer une transaction retour avec des
modalités diérentes, en incrémentant le Sequence Number.
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 27 / 30
28. Épilogue
Table of Contents
1 Rappels
Adresses et clés publiques
Blocks
Transactions
Scripts
2 Contrats
Escrow
Campagne de nancement
Dépôt de garantie
3 Épilogue
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 28 / 30
29. Épilogue
Mais encore?
Laverie
Pour brouiller les pistes dans les transactions.
Micro paiement
Même principe que pour le dépôt de garantie.
Loterie
Andrychowicz, Dziembowski, Malinowski, Mazurek.
Secure Multiparty Computations on Bitcoin
Cryptology ePrint Report 2013/784.
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 29 / 30
30. Épilogue
Fin
1 Rappels
Adresses et clés publiques
Blocks
Transactions
Scripts
2 Contrats
Escrow
Campagne de nancement
Dépôt de garantie
3 Épilogue
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 30 / 30