Upload
erwan-martin
View
51
Download
0
Embed Size (px)
Citation preview
Bitcoin: transactions et contrats sur la chaîne
Erwan Martin
Lyon Bitcoin Meetup
June 30, 2015
Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 1 / 30
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
É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
É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
É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