Bitcoin: transactions et contrats sur la chaîne

30

Transcript of Bitcoin: transactions et contrats sur la chaîne

Page 1: Bitcoin: transactions et contrats sur la chaîne

Bitcoin: transactions et contrats sur la chaîne

Erwan Martin

Lyon Bitcoin Meetup

[email protected]

June 30, 2015

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 1 / 30

Page 2: Bitcoin: transactions et contrats sur la chaîne

Plan

1 RappelsAdresses et clés publiquesBlocksTransactionsScripts

2 ContratsEscrowCampagne de �nancementDépôt de garantie

3 Épilogue

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 2 / 30

Page 3: Bitcoin: transactions et contrats sur la chaîne

Rappels

Table of Contents

1 RappelsAdresses et clés publiquesBlocksTransactionsScripts

2 ContratsEscrowCampagne de �nancementDépôt de garantie

3 Épilogue

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 3 / 30

Page 4: Bitcoin: transactions et contrats sur la chaîne

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

Page 5: Bitcoin: transactions et contrats sur la chaîne

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

Page 6: Bitcoin: transactions et contrats sur la chaîne

Rappels Transactions

Transactions

Version no

In-counter

Input

Input

Input

...

Out-counter

Output 1

Output 2

Output 3

...

Transaction

Value

Txout-script length

Txout-script

Output

Previous TxHash

Previous Txout-index

Txin-script length

Input

Txin-script

Sequence number

Lock time

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 6 / 30

Page 7: Bitcoin: transactions et contrats sur la chaîne

Rappels Transactions

Transactions

Tx #42

Tx #88

Input 1

Input 2

Input 3

Input 4

Output 12 BTC

Output 25 BTC

Output 31 BTC

Output 43 BTC

Tx #33

Output 10.5 BTC

Output 20.5 BTC

Output 38 BTC

Output 13 BTC

Output 24 BTC

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 7 / 30

Page 8: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Scripts: où?

Tx #42 Tx #88

Input scriptOutput script

Script = Input script + Output script

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 8 / 30

Page 9: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Scripts: principe

Tx #42 Tx #88

???A + B= 42

scriptSig

scriptPubKey

Script

<scriptSig>, <scriptPubKey>

???, A + B = 42

Résolution

A = 40, B = 2, A + B = 42

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 9 / 30

Page 10: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Scripts: Pay to Public Key Hash

Tx #42 Tx #88

<sig> <pubKey>OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

Script

<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash>OP_EQUALVERIFY OP_CHECKSIG

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 10 / 30

Page 11: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Execution

Script

⇒ <sig><pubKey>OP_DUPOP_HASH160<pubKeyHash>OP_EQUALVERIFYOP_CHECKSIG

Pile avant

[vide].Pile après

<sig>.

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 11 / 30

Page 12: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Execution

Script

<sig>⇒ <pubKey>OP_DUPOP_HASH160<pubKeyHash>OP_EQUALVERIFYOP_CHECKSIG

Pile avant

<sig>.

Pile après

<pubKey><sig>

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 12 / 30

Page 13: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Execution

Script

<sig><pubKey>⇒ OP_DUPOP_HASH160<pubKeyHash>OP_EQUALVERIFYOP_CHECKSIG

Pile avant

<pubKey><sig>

Pile après

<pubKey><pubKey><sig>

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 13 / 30

Page 14: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Execution

Script

<sig><pubKey>OP_DUP⇒ OP_HASH160<pubKeyHash>OP_EQUALVERIFYOP_CHECKSIG

Pile avant

<pubKey><pubKey><sig>

Pile après

<pubHashA><pubKey><sig>

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 14 / 30

Page 15: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Execution

Script

<sig><pubKey>OP_DUPOP_HASH160⇒ <pubKeyHash>OP_EQUALVERIFYOP_CHECKSIG

Pile avant

<pubHashA><pubKey><sig>

Pile après

<pubKeyHash><pubHashA><pubKey><sig>

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 15 / 30

Page 16: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Execution

Script

<sig><pubKey>OP_DUPOP_HASH160<pubKeyHash>⇒ OP_EQUALVERIFYOP_CHECKSIG

Pile avant

<pubKeyHash><pubHashA><pubKey><sig>

Pile après

<pubKey><sig>

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 16 / 30

Page 17: Bitcoin: transactions et contrats sur la chaîne

Rappels Scripts

Execution

Script

<sig><pubKey>OP_DUPOP_HASH160<pubKeyHash>OP_EQUALVERIFY⇒ OP_CHECKSIG

Pile avant

<pubKey><sig>

Pile après

true

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 17 / 30

Page 18: Bitcoin: transactions et contrats sur la chaîne

Contrats

Table of Contents

1 RappelsAdresses et clés publiquesBlocksTransactionsScripts

2 ContratsEscrowCampagne de �nancementDépôt de garantie

3 Épilogue

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 18 / 30

Page 19: Bitcoin: transactions et contrats sur la chaîne

Contrats Escrow

Escrow

Tx #42 Tx #88

OP_FALSE <sig1> <sig2>OP_2 <pubKey1> <pubKey2> <pubKey3> OP_3 OP_CHECKMULTISIG

Script

OP_FALSE <sig1> <sig2> OP_2 <pubKey1> <pubKey2><pubKey3> OP_3 OP_CHECKMULTISIG

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 19 / 30

Page 20: Bitcoin: transactions et contrats sur la chaîne

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

Page 21: Bitcoin: transactions et contrats sur la chaîne

Contrats Campagne de �nancement

Campagne de �nancement: implémentation

Tx #42 Tx #88

Input 1Output 15 BTC

Output 120 BTC

Tx #43 Tx #89

Input 1Output 15 BTC

Output 120 BTC

Alice:

Bob:

Promesses de don

Chaque participant créé une transaction avec comme sortie une adresse dufondateur, mais avec le montant total de la campagne.

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 21 / 30

Page 22: Bitcoin: transactions et contrats sur la chaîne

Contrats Campagne de �nancement

Campagne de �nancement: implémentation

Tx #42 Tx #105

Input 1Output 15 BTC

Output 120 BTCTx #43

Input 2

Output 15 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

Page 23: Bitcoin: transactions et contrats sur la chaîne

Contrats Campagne de �nancement

Quelques types de signatures

SIGHASH_ALL|SIGHASH_ANYONECANPAY

Signe tous les outputs et seulement cet input. N'importe qui peutcontribuer des satoshis à la transaction, mais sans changer où ils vont.

SIGHASH_SINGLE|SIGHASH_ANYONECANPAY

Signe seulement ce couple input/output. Permet à n'importe qui derajouter des inputs et des outputs.

SIGHASH_NONE|SIGHASH_ANYONECANPAY

Signe seulement cet input. N'importe qui peut dépenser les satoshisassociés comme il lui semble en rajoutant des inputs et des outputs.

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 23 / 30

Page 24: Bitcoin: transactions et contrats sur la chaîne

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éedéterminée.

À la �n du temps, la somme est automatiquement re-transférée àl'utilisateur.

Les deux parties peuvent annuler/modi�er le contrat à loisir, maisensemble.

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 24 / 30

Page 25: Bitcoin: transactions et contrats sur la chaîne

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écessitantles deux signatures associées.

Tx #42

OP_2 <pubUser> <pubKeyService> OP_2 OP_CHECKMULTISIGInput 1

Tx #37

Output 110 BTC

Il envoie au fournisseur l'empreinte de cette transaction.

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 25 / 30

Page 26: Bitcoin: transactions et contrats sur la chaîne

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 etla renvoi à l'utilisateur.

Tx #42

OP_2 <pubUser> <pubKeyService> OP_2 OP_CHECKMULTISIGInput 1

Tx #37

Output 110 BTC

Tx #63

OP_DUP OP_HASH160 <pubKeyLocataire> OP_EQUALVERIFY OP_CHECKSIGOP_FALSE 0 <sigService>

LockTime: 6 mois

Sequence number: 0

Le LockTime est con�guré selon la durée voulue du dépôt, et le numéro deséquence de l'input est mis à 0.

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 26 / 30

Page 27: Bitcoin: transactions et contrats sur la chaîne

Contrats Dépôt de garantie

Signature du contrat

Signature du contrat

L'utilisateur ajoute sa signature dans la transaction retour, puis publie lesdeux transactions.

Fin normale du contrat

À la �n du contrat, la transaction est inclue dans un bloc, et les bitcoinsretournent à l'utilisateur.

Modi�cation du contrat

Les deux utilisateurs peuvent recréer une transaction retour avec desmodalités di�érentes, en incrémentant le Sequence Number.

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 27 / 30

Page 28: Bitcoin: transactions et contrats sur la chaîne

Épilogue

Table of Contents

1 RappelsAdresses et clés publiquesBlocksTransactionsScripts

2 ContratsEscrowCampagne de �nancementDépôt de garantie

3 Épilogue

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 28 / 30

Page 29: Bitcoin: transactions et contrats sur la chaîne

É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 BitcoinCryptology ePrint Report 2013/784.

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 29 / 30

Page 30: Bitcoin: transactions et contrats sur la chaîne

Épilogue

Fin

1 RappelsAdresses et clés publiquesBlocksTransactionsScripts

2 ContratsEscrowCampagne de �nancementDépôt de garantie

3 Épilogue

Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 30 / 30