Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit...

32
PREMIER EVENEMENT EUROPEEN LIBRE & OPEN SOURCE #OSSPARIS16 Implémenter un serveur de micro-transactions en Bitcoin Théorie et Pratique : retour sur 2 implémentations Track « Blockchain et systèmes distribués » Par Vidal CHRIQUI @vidal007 Mercredi 16 novembre 2016

Transcript of Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit...

Page 1: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

PREMIER EVENEMENT EUROPEEN

LIBRE & OPEN SOURCE#OSSPARIS16

Implémenter un serveur de

micro-transactions en BitcoinThéorie et Pratique : retour sur 2 implémentations

Track « Blockchain et systèmes distribués »

Par Vidal CHRIQUI

@vidal007Mercredi 16 novembre 2016

Page 2: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Introduction

Quelques rappelset pré-requis

Page 3: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Protocole et Monnaie

5

Attention : le même terme est utilisé pour désigner un protocole et une monnaie

La monnaie bitcoin Le protocole Bitcoin

Utilisée pour des échanges de biens et services• par des marchands et e-commerçants• par des individus

Utilisée à travers des portefeuilles (wallets)

Transferts « instantanés » dans le monde

Désigné par l’acronyme BTC (ou XBT)

Monnaie déflationniste et divisible jusqu’au satoshi (10-8 BTC)

Un ensemble de règles permettant aux différents nœuds du réseau Bitcoin de fonctionner ensemble• L’architecture générale• L’algorithme de consensus et les

messages que les nœuds peuvent échanger

• Le fonctionnement des wallets• La façon d’utiliser les clés publiques et

clés privées• Les règles d’émission monétaires• etc…

Page 4: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Le chainage des transactions

Tx 0 Tx 0

out 0

out 1

In 0100k

satoshis

Tx 1 Tx 1

out 0In 040k

satoshis

Tx 2 Tx 2

out 0

out 1

In 0

50k

satoshis

Tx 3 Tx 3

out 0In 030k

satoshis

Tx 4 Tx 4

out 0In 020k

satoshis

Tx 5 Tx 5

out 0In 0

20k

satoshis

Tx 6 Tx 6

out 0In 010k

satoshis

10k

UTXO

In 1

10k

satoshis

20k

UTXO

Page 5: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Frais de transactions

Principes

Les frais de transactions ne sont pas renseignés explicitementdans la transaction. Il s’agit du montant d’unité de compte bitcoinnon affecté dans un transaction output.

La pratique dans l’univers bitcoin est que les frais detransactions sont supportés par le payeur

Les frais de transactions ne sont pas obligatoires dans leprotocole. Toutefois, les utilisateurs sont encouragés à payer depetits frais de transaction sur une base volontaire pour uneconfirmation plus rapide et pour rémunérer les mineurs.Cela sert également de protection contre les utilisateursémettant des transactions pour surcharger le réseau.

Tx 0 Tx 0

out 0

out 1

In 01

BTC

0,1

BTC

0,899

BTC

Frais de transactions : 1- 0.1 – 0.899 = 0.001 BTC

Page 6: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Frais de transactions

Montants des frais de transaction

En pratique, ce sont les portefeuilles (wallets) qui calculent lesfrais de transactions optimaux en fonction du degréd’encombrement du réseau au moment du transfert.

Les mineurs traitent les transactions par ordre de priorité qui estfonction du montant, de l’ancienneté et de la taille de transaction

La tarification actuelle- Tarif de 0.00001 BTC/kb sur la taille (en octets) de latransaction- Exemple : 0.0001 BTC pour une transaction à 0.001 BTC

priority =𝑆𝑈𝑀 𝑖𝑛𝑝𝑢𝑡_𝑣𝑎𝑙𝑢𝑒_𝑖𝑛_𝑏𝑎𝑠𝑒_𝑢𝑛𝑖𝑡𝑠 ∗ 𝑖𝑛𝑝𝑢𝑡_𝑎𝑔𝑒

𝑠𝑖𝑧𝑒_𝑖𝑛_𝑏𝑦𝑡𝑒𝑠

Source bitcoin Wikihttps://en.bitcoin.it/wiki/Transaction_fees

Page 7: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Introduction

Micro-paiement

La problématique

des micro-paiements

Page 8: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Micro-paiements

Problématiques

Le micro-paiement on-chain s’avère peu pratique :

• Envoyer beaucoup de transactions trop rapidement induira une diminution de priorité voire un non relai des transactions en raison du mécanisme de protection « anti flooding » du réseau Bitcoin

• Il y a implicitement un montant minimal de transaction induit par les frais de transactions à minima d’une transaction

• La personne qui reçoit trop de paiement à faibles montants se retrouve avec des « dusts » difficiles (frais) à dépenser

Page 9: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Micro-paiements

Use cases

Micro-achat de contenu web• Achat d’un article• Visionnage vidéo

Paiement à l’usage sans créer de compte• Appel téléphonique• Consommation Wifi• Recharge électrique• Appel d’API• Etc…

Page 10: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Micro-paiements

Le principe de canal de paiement

Page 11: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Payment Chanel

Analogie – L’ardoise dans un café ou un hôtel

Principe- Le client donne une emprunte bancaire par rapport à un

montant maximal de dépense (exemple 100 euros)- Il consomme au fur et à mesure et à chaque consommation

il signe pour confirmer son solde et dans la limite du montant maximal défini (hors réseau CB)

- Quand il finit, il paie son solde

Intérêt du procédé- Le réseau de paiement (ici réseau de CB) ne voit que 2

transactions, la première et la dernière et aucune de toutes les autres « micro » transactions intermédiaires

- On ne paie moins de commissions de transactions que de consommations effectuées.

Mettez

cette

dépense

sur ma

chambre

Mettez

cette

dépense

sur ma

chambre

Page 12: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Canal de paiement

Le canal de paiement en pratique

Un protocole en 3 étapes clés

Documenté dans le wiki bitcoinhttps://bitcoin.org/en/developer-guide#micropayment-channel

Une implémentation de référence dans la libraire Java BitcoinJ

D’autres variantes et implémentations et notamment : - 21 Inc (Python) - Your Network (node.js) - JoyStream (C++/QT)- Et tout ceux qui travaillent sur le réseau Lightning (8)

Illustration extraite de https://bitcoin.org/en/developer-guide#micropayment-channel

Page 13: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Pour le détail du protocole, je vais faire appel aux célébrités crypto ……………

Page 14: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Pour le détail du protocole, je vais faire appel aux célébrités crypto Alice et Bob

Page 15: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

11

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

Page 16: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

22

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

ContractContract

Out-contract

5000 satoshis

Out-contract

5000 satoshis

InputInput

2 - Alice soumet un contrat (non signé) avec output multi-sig

Page 17: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

33

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

ContractContract

Out-contract

5000 satoshis

Out-contract

5000 satoshis

InputInput

2 - Alice soumet un contrat (non signé) avec output multi-sig

RefundRefund

Out-contract

5000 satoshis

Out-contract

5000 satoshis

5000 satoshis5000 satoshis

3 - Alice soumet un refund (non signé) qui rembourse l’output

Page 18: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

44

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

ContractContract

Out-contract

5000 satoshis

Out-contract

5000 satoshis

InputInput

2 - Alice soumet un contrat (non signé) avec output multi-sig

RefundRefund

Out-contract

5000 satoshis

Out-contract

5000 satoshis

5000 satoshis5000 satoshis

4 – Bob signe le refund timelocké à 24h

3 - Alice soumet un refund (non signé) qui rembourse l’output

Page 19: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

55

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

ContractContract

Out-contract

5000 satoshis

Out-contract

5000 satoshis

InputInput

2 - Alice soumet un contrat (non signé) avec output multi-sig

RefundRefund

Out-contract

5000 satoshis

Out-contract

5000 satoshis

5000 satoshis5000 satoshis

4 – Bob signe le refund timelocké à 24h

5 - Alice vérifie, signe et publie la transaction « contract »

3 - Alice soumet un refund (non signé) qui rembourse l’output

Page 20: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

6.16.1

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

ContractContract

Out-contract

5000 satoshis

Out-contract

5000 satoshis

InputInput

2 - Alice soumet un contrat (non signé) avec output multi-sig

RefundRefund

Out-contract

5000 satoshis

Out-contract

5000 satoshis

5000 satoshis5000 satoshis

4 – Bob signe le refund timelocké à 24h

5 - Alice vérifie, signe et publie la transaction « contract »

3 - Alice soumet un refund (non signé) qui rembourse l’output

Payment 1Payment 1

Out-contract

5000 satoshis

Out-contract

5000 satoshis

4900 satoshis4900 satoshis

100 satoshis100 satoshis

6 – (N fois) Alice crée un paiement comparable à un refund partiel

6 – (N fois) Bob vérifie la signature et continue à fournir le service

Page 21: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

6.26.2

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

ContractContract

Out-contract

5000 satoshis

Out-contract

5000 satoshis

InputInput

2 - Alice soumet un contrat (non signé) avec output multi-sig

RefundRefund

Out-contract

5000 satoshis

Out-contract

5000 satoshis

5000 satoshis5000 satoshis

4 – Bob signe le refund timelocké à 24h

5 - Alice vérifie, signe et publie la transaction « contract »

3 - Alice soumet un refund (non signé) qui rembourse l’output

Payment 2Payment 2

Out-contract

5000 satoshis

Out-contract

5000 satoshis

4800 satoshis4800 satoshis

200 satoshis200 satoshis

6 – (N fois) Alice crée un paiement comparable à un refund partiel

6 – (N fois) Bob vérifie la signature et continue à fournir le service

Page 22: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

6.N6.N

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

ContractContract

Out-contract

5000 satoshis

Out-contract

5000 satoshis

InputInput

2 - Alice soumet un contrat (non signé) avec output multi-sig

RefundRefund

Out-contract

5000 satoshis

Out-contract

5000 satoshis

5000 satoshis5000 satoshis

4 – Bob signe le refund timelocké à 24h

5 - Alice vérifie, signe et publie la transaction « contract »

3 - Alice soumet un refund (non signé) qui rembourse l’output

Payment NPayment N

Out-contract

5000 satoshis

Out-contract

5000 satoshis

4000 satoshis4000 satoshis

1000 satoshis1000 satoshis

6 – (N fois) Alice crée un paiement comparable à un refund partiel

6 – (N fois) Bob vérifie la signature et continue à fournir le service

Page 23: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

7.17.1

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

ContractContract

Out-contract

5000 satoshis

Out-contract

5000 satoshis

InputInput

2 - Alice soumet un contrat (non signé) avec output multi-sig

RefundRefund

Out-contract

5000 satoshis

Out-contract

5000 satoshis

5000 satoshis5000 satoshis

4 – Bob signe le refund timelocké à 24h

5 - Alice vérifie, signe et publie la transaction « contract »

3 - Alice soumet un refund (non signé) qui rembourse l’output

Payment NPayment N

Out-contract

5000 satoshis

Out-contract

5000 satoshis

4000 satoshis4000 satoshis

1000 satoshis1000 satoshis

6 – (N fois) Alice crée un paiement comparable à un refund partiel

6 – (N fois) Bob vérifie la signature et continue à fournir le service

7.1 – (normal) Clôture du canal, Bob signe et publie le paiement N

Page 24: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Alice(Acheteur)

Bob(Marchand)

7.27.2

1 - Alice génère une clé (pub) et demande une clé (pub) à Bob

ContractContract

Out-contract

5000 satoshis

Out-contract

5000 satoshis

InputInput

2 - Alice soumet un contrat (non signé) avec output multi-sig

RefundRefund

Out-contract

5000 satoshis

Out-contract

5000 satoshis

5000 satoshis5000 satoshis

4 – Bob signe le refund timelocké à 24h

5 - Alice vérifie, signe et publie la transaction « contract »

3 - Alice soumet un refund (non signé) qui rembourse l’output

Payment NPayment N

Out-contract

5000 satoshis

Out-contract

5000 satoshis

4000 satoshis4000 satoshis

1000 satoshis1000 satoshis

6 – (N fois) Alice crée un paiement comparable à un refund partiel

6 – (N fois) Bob vérifie la signature et continue à fournir le service

7.1 – (normal) Clôture du canal, Bob signe et publie le paiement N

7.2 – (absence) Clôture du canal (24h), Alice signe et publie

Page 25: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Focus sur le refund

Script de timelocking

OP_IF <Bob's public key>

OP_CHECKSIGVERIFY

OP_ELSE

1452955945 OP_CHECKLOCKTIMEVERIFY OP_DROP

OP_ENDIF

<Alice's public key> OP_CHECKSIG

Page 26: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Micro-paiements

Implémentation en Python via 21co

Page 27: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Implementation via 21

Utilisation de la librairie python -

OP_IF <Bob's public key>

OP_CHECKSIGVERIFY

OP_ELSE

1452955945 OP_CHECKLOCKTIMEVERIFY OP_DROP

OP_ENDIF

<Alice's public key> OP_CHECKSIG

Page 28: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Micro-paiements

Implémentation Java via bitcoinJ

Page 29: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS
Page 30: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Micro-paiements

Pour aller plus loin …

Page 31: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

Pour aller plus loin

Variantes et évolutions du protocole décrit

• Duplex Micropayement channelCanal de paiement similaire à celui décrit dans cette conférence ave un aspect bi-directionnel

• Lightning networkRéseau de paiement offchain basé sur un ensemble de canaux bidirectionnels ouverts et qui réalisent de la compensation de paiement

Page 32: Développer un serveur de micropayment bitcoin - REX sur 2 implémentations - Open Source Summit PARIS

#OSSPARIS16

Merci de votre attention

THANK YOU

Partagez vos commentaires sur #OSSPARIS2016

Retrouvez moi sur twitter @vidal007

Merci à @OSS_PARIS