Bitcoin: transactions et contrats sur la cha®ne

download Bitcoin: transactions et contrats sur la cha®ne

of 30

Embed Size (px)

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

  1. 1. Bitcoin: transactions et contrats sur la chane Erwan Martin Lyon Bitcoin Meetup public@fzwte.net June 30, 2015 Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 1 / 30
  2. 2. Plan 1 Rappels Adresses et cls publiques Blocks Transactions Scripts 2 Contrats Escrow Campagne de nancement Dpt de garantie 3 pilogue Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 2 / 30
  3. 3. Rappels Table of Contents 1 Rappels Adresses et cls publiques Blocks Transactions Scripts 2 Contrats Escrow Campagne de nancement Dpt de garantie 3 pilogue Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 3 / 30
  4. 4. Rappels Adresses et cls publiques Adresses et cls 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. 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
  6. 6. 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
  7. 7. Rappels Transactions Transactions Tx #42 Tx #88 Input 1 Input 2 Input 3 Input 4 Output 1 2 BTC Output 2 5 BTC Output 3 1 BTC Output 4 3 BTC Tx #33 Output 1 0.5 BTC Output 2 0.5 BTC Output 3 8 BTC Output 1 3 BTC Output 2 4 BTC Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 7 / 30
  8. 8. 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
  9. 9. Rappels Scripts Scripts: principe Tx #42 Tx #88 ???A + B= 42 scriptSig scriptPubKey Script scriptSig, scriptPubKey ???, A + B = 42 Rsolution A = 40, B = 2, A + B = 42 Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 9 / 30
  10. 10. Rappels Scripts Scripts: Pay to Public Key Hash Tx #42 Tx #88 sig pubKeyOP_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
  11. 11. Rappels Scripts Execution Script sig pubKey OP_DUP OP_HASH160 pubKeyHash OP_EQUALVERIFY OP_CHECKSIG Pile avant [vide]. Pile aprs sig. Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 11 / 30
  12. 12. Rappels Scripts Execution Script sig pubKey OP_DUP OP_HASH160 pubKeyHash OP_EQUALVERIFY OP_CHECKSIG Pile avant sig. Pile aprs pubKey sig Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 12 / 30
  13. 13. Rappels Scripts Execution Script sig pubKey OP_DUP OP_HASH160 pubKeyHash OP_EQUALVERIFY OP_CHECKSIG Pile avant pubKey sig Pile aprs pubKey pubKey sig Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 13 / 30
  14. 14. Rappels Scripts Execution Script sig pubKey OP_DUP OP_HASH160 pubKeyHash OP_EQUALVERIFY OP_CHECKSIG Pile avant pubKey pubKey sig Pile aprs pubHashA pubKey sig Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 14 / 30
  15. 15. Rappels Scripts Execution Script sig pubKey OP_DUP OP_HASH160 pubKeyHash OP_EQUALVERIFY OP_CHECKSIG Pile avant pubHashA pubKey sig Pile aprs pubKeyHash pubHashA pubKey sig Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 15 / 30
  16. 16. Rappels Scripts Execution Script sig pubKey OP_DUP OP_HASH160 pubKeyHash OP_EQUALVERIFY OP_CHECKSIG Pile avant pubKeyHash pubHashA pubKey sig Pile aprs pubKey sig Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 16 / 30
  17. 17. Rappels Scripts Execution Script sig pubKey OP_DUP OP_HASH160 pubKeyHash OP_EQUALVERIFY OP_CHECKSIG Pile avant pubKey sig Pile aprs true Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 17 / 30
  18. 18. Contrats Table of Contents 1 Rappels Adresses et cls publiques Blocks Transactions Scripts 2 Contrats Escrow Campagne de nancement Dpt de garantie 3 pilogue Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 18 / 30
  19. 19. Contrats Escrow Escrow Tx #42 Tx #88 OP_FALSE sig1 sig2OP_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
  20. 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. 21. Contrats Campagne de nancement Campagne de nancement: implmentation 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. 22. Contrats Campagne de nancement Campagne de nancement: implmentation 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 cre une transaction en fusionnant toutes celles qu'il a reu. Utilisation du drapeau SIGHASH_ANYONECANPAY. Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 22 / 30
  23. 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 dpenser les satoshis associs comme il lui semble en rajoutant des inputs et des outputs. Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 23 / 30
  24. 24. Contrats Dpt de garantie Dpt de garantie: cahier des charges Cahier des charges Une somme provenant de l'utilisateur est bloque pendant une dure dtermine. la n du temps, la somme est automatiquement re-transfre 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. 25. Contrats Dpt de garantie Dpt de garantie: implmentation Gnration de cls L'utilisateur et le fournisseur de service s'changent chacun une cl publique: pubKeyUser et pubKeyService. Premire transaction L'utilisateur gnre une transaction destination du fournisseur ncessitant les deux signatures associes. 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. 26. Contrats Dpt de garantie Dpt de garantie: implmentation Transaction retour Le fournisseur gnre une deuxime transaction qui dpense la premire 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 dure voulue du dpt, et le numro de squence de l'input est mis 0. Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 26 / 30
  27. 27. Contrats Dpt 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 recrer une transaction retour avec des modalits direntes, en incrmentant le Sequence Number. Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 27 / 30
  28. 28. pilogue Table of Contents 1 Rappels Adresses et cls publiques Blocks Transactions Scripts 2 Contrats Escrow Campagne de nancement Dpt de garantie 3 pilogue Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 28 / 30
  29. 29. pilogue Mais encore? Laverie Pour brouiller les pistes dans les transactions. Micro paiement Mme principe que pour le dpt 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. 30. pilogue Fin 1 Rappels Adresses et cls publiques Blocks Transactions Scripts 2 Contrats Escrow Campagne de nancement Dpt de garantie 3 pilogue Erwan Martin (Bitcoin Lyon) Bitcoin contracts June 30, 2015 30 / 30