Intégration d`une solution de paiement en monnaie virtuelle
Transcription
Intégration d`une solution de paiement en monnaie virtuelle
Intégration d’une solution de paiement en monnaie virtuelle Stage de deuxième année Clément CARDI 2A – Informatique Monétique Année universitaire 2014/2015 Suivi entreprise : Charles TAURINES Suivi ENSICAEN : Wilfried AUBRY ENSICAEN 6, boulevard Maréchal Juin – CS 45 053 – F- 14050 Caen Cedex 4 Tél. +33 (0)2 31 45 27 50 Fax +33 (0)2 31 45 27 60 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 1 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN REMERCIEMENTS Je tiens tout d’abord à remercier M. Alain LACOUR, PDG de Lyra Network, pour m’avoir accepté au sein de son entreprise, et pour l’intérêt qu’il portait personnellement sur ce projet. Je remercie également Charles TAURINES, mon encadrant de stage, ainsi que Frédéric BABEL, pour m’avoir suivi et aidé tout au long de cette période. Je remercie ensuite le support pour leurs interventions, et enfin l’intégralité de l’entreprise Lyra Network pour leur accueil. 2 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN TABLE DES MATIERES Remerciements 2 Table des matières 3 I. Introduction 5 II. Présentation de l’entreprise 6 III. Comparaison des principales crypto-monnaies 7 IV. Diffusion sur les plateformes de paiement en France 9 V. Fonctionnement de Bitcoin 10 1 Différences entre Bitcoin et les systèmes préexistants 10 2 Les transactions 11 3 La « blockchain » 12 4 Le Minage 14 5 La double dépense 15 6 Les « forks » 15 7 La confidentialité 16 8 Le portefeuille Bitcoin, ou « Wallet » 17 9 Le « Simplified Payment Verification » 18 VI. Etude des différentes solutions de paiement en bitcoins 19 1 Paymium 19 2 Coinbase 21 3 Intégration « manuelle » 22 VII. Intégration de l’API Paymium 24 1 24 Développement d’une application web 3 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN a Le Web Client 25 b La Web App 27 c La Simulation 28 2 Utilisation via un module Prestashop 29 VIII. Intégration dans PayZen 30 1 Fonctionnement de la VAD 30 2 Fonctionnement d’un paiement 31 3 Démonstration de l’application 34 4 Problèmes rencontrés 37 IX. Conclusion 38 Annexes 40 4 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN I. INTRODUCTION Dans cette ère où la protection de la vie privée et la surveillance de masse inquiètent de manière grandissante, les crypto-monnaies attirent de plus en plus grâce à leurs principaux arguments : anonymat et décentralisation. Mais au-delà de cet aspect, les crypto-monnaies sont avant tout une innovation ouvrant la porte à de nombreuses possibilités. Leur utilisation croissante attise l’intérêt de nombreuses entreprises, et plusieurs plateformes de paiement commencent à proposer des paiements via monnaies virtuelles. Le PSP (Payment Service Provider) PayZen propose un nombre important de moyens de paiement, offrant ainsi un maximum de choix à ses clients. Dans cette optique, Lyra Network souhaite y intégrer une monnaie virtuelle. Le choix de cette monnaie se fera à l’issue d’une comparaison des principales crypto-monnaies, afin de déterminer celle étant la plus utilisée, et ayant une pérennité conséquente. J’ai donc intégré l’équipe consacrée aux moyens de paiement, dirigée par Charles TAURINES, qui est aussi mon encadrant, pour une période s’étalant du 4 mai au 14 août 2015. 5 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN II. PRESENTATION DE L’ENTREPRISE Basée à Labège, près de Toulouse, l’entreprise Lyra Network est un opérateur monétique français qui sécurise depuis 2001 les flux bancaires entre commerçants et banques. Leader en France, Lyra Network est présent en Europe (France et Allemagne), mais également en Amérique (Brésil), en Asie (Inde) et en Afrique (Algérie), grâce à ses différentes filiales. Figure 1 - Siège de Lyra Network (Labège, France) Lyra Network propose notamment PayZen, une solution de paiement en ligne innovante et sécurisée. PayZen est une Plateforme de Paiement Sécurisée qui propose de nombreux types et moyens de paiement pour le paiement à distance. Figure 2 - Positionnement de Lyra Network en tant qu'opérateur monétique 6 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN III. COMPARAISON DES PRINCIPALES CRYPTO-MONNAIES Une crypto-monnaie, ou monnaie virtuelle, est une monnaie électronique décentralisée utilisant la cryptographie pour valider les transactions ainsi que sa génération. Bitcoin est devenue la première monnaie virtuelle décentralisée en 2009. Elle fut suivie de nombreuses « altcoins », ou « bitcoin alternatives », des monnaies directement dérivées du Bitcoin. Les principales monnaies virtuelles (classées par capitalisation boursière, au 19/06) sont : - Bitcoin (BTC) - Ripple (XRP) - Litecoin (LTC) - Dogecoin (DOGE) - BitShares (BTS) - Stellar (STR) - Dash (DASH) - Nxt (NXT) Monnaie Virtuelle Année de Lancement Capitalisation ($) Valeur Unitaire ($) Quantité Actuelle (+Ajout Annuel) Quantité Maximale Bitcoin Ripple Litecoin Dogecoin BitShares Stellar Dash Nxt 2009 2012 2011 2013 2014 2014 2014 2013 3 565 m 355 m 115 m 21 m 20.6 m 18 m 16 m 14 m 249.50 0.01117 2.88 0.000212 0.008186 0.003775 2.95 0.014134 14.3 m 31.9 M 40 m 99.9 M (+ 5.25 M) 2.5 M 100.8 M (+1%) 5.5 m 1M 21 m 100 M 84 m ∞ ? ∞ 22 m 1M Tableau 1 - Comparatif des principales monnaies virtuelles 7 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN La capitalisation boursière d’une monnaie est un bon moyen d’observer son importance, mais toutes ces monnaies fluctuant beaucoup, d’autres données sont à prendre en compte. L’évolution du nombre de transactions par jour en fait partie, elle permet d’évaluer son utilisation de manière pertinente. Figure 3 - Nombre de transactions journalières du Bitcoin, Litecoin, Dogecoin, Dash Le graphe ci-dessus nous permet de constater que sur un an, le nombre de transactions journalières du Bitcoin a plus que doublé, alors que ses 3 concurrentes (Litecoin, Dogecoin, Dash) n’ont au final pas vu d’augmentation sur le long terme. Cette donnée n’est pas directement comparable avec Ripple, BitShares, Stellar et Nxt, car ces monnaies sont non minables, c’est-à-dire qu’elles ne sont pas distribuées de la même manière : c’est pour certaines une entité centrale qui les contrôle. Le Bitcoin est donc de loin la monnaie virtuelle la plus utilisée, et connaît une utilisation croissante. De plus, son adaptabilité lui permet aussi d’intégrer des innovations intéressantes dont une nouvelle monnaie pourrait faire preuve, assurant ainsi sa pérennité. Bitcoin n’étant pas contrôlé par une entité, tout changement lui étant apporté nécessite un consensus de sa communauté. 8 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN IV. DIFFUSION SUR LES PLATEFORMES DE PAIEMENT EN FRANCE Nous allons nous intéresser à la diffusion des différentes crypto-monnaies sur les principaux PSP présents sur le marché français. Au niveau des PSP appartenant à des banques françaises, nous retrouvons : - Merc@net (BNP Paribas) - E-transactions (Crédit Agricole) - Webaffaires (Crédit du Nord) - Scellius (La Banque Postale) - Sherlock’s (Le Crédit Lyonnais/LCL) - Sogenactif (Société Générale) - Citelis (Crédit Mutuel/CIC) - CyberPlusPaiement (PayZen sous marque blanche, par Banque Populaire) - SPPlus (Caisse d’Epargne) A cette liste s’ajoutent ensuite : - Adyen - Paybox - ATOS Wordline - PayPal - BrainTree (PayPal) - Stripe - Ogone - Ingenico Parmi tous ces PSP, seul Stripe permet officiellement le paiement en bitcoins. En effet, BrainTree n’est qu’en phase bêta d’intégration, via Coinbase ; tout comme Adyen qui l’est via BitPay. Il y a toutefois Ingenico qui le permet en paiement de proximité, via la solution Paymium. Il y a donc peu de PSPs proposant le paiement en bitcoins, et aucune autre monnaie virtuelle n’est supportée. 9 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN V. FONCTIONNEMENT DE BITCOIN Conçu en 2009 par un développeur ou groupe de développeurs non identifié utilisant le pseudonyme de Satoshi Nakamoto, Bitcoin désigne un système de paiement à travers le réseau Internet et le bitcoin est l’unité de compte utilisée par ce système de paiement. Il y existe actuellement environ 14,4 millions de bitcoins, sur un maximum de 21 millions. Il est estimé que ce maximum sera atteint aux alentours de 2140. De plus, le bitcoin possède huit décimales, repoussant sa limite unitaire à 2.099.999.997.690.000 satoshis (nom utilisé pour désigner 10-8 bitcoin). 1 DIFFERENCES ENTRE BITCOIN ET LES SYSTEMES PREEXISTANTS Bitcoin est différent des systèmes préexistants, il s’en distingue sur les points suivants : • Contrairement aux devises classiques, Bitcoin n’est pas contrôlé par une autorité centrale, mais par l’ensemble de ses utilisateurs. Sa valeur est déterminée par son usage économique, et son émission monétaire est définie par un procédé suivant des règles cryptographiques. • Bitcoin se différencie des autres systèmes de paiement par le fait qu’il soit totalement décentralisé, et l’ensemble des transactions est public. • Bitcoin utilise un protocole cryptographique pour empêcher les doubles paiements ainsi que pour rendre impossible la falsification du stock de bitcoins figurant dans les porte-monnaie électroniques. 10 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 2 LES TRANSACTIONS Figure 4 - Transaction Bitcoin Un bitcoin en tant que tel n’existe pas. Une adresse Bitcoin ne « contient » pas vraiment de bitcoins, et il n’existe pas de fichier les « contenant ». Les bitcoins sont le résultat de suites de transactions. Pour établir le solde d’une adresse, il faut faire le total de toutes les transactions impliquant cette adresse. Ceci est rendu possible par la chaine de blocs (appelée blockchain) qui est un grand livre comptable partagé qui contient toutes les transactions, lesquelles sont donc publiques. De ce fait, chaque nœud du réseau Bitcoin qui conserve cette chaine peut connaitre le solde de chaque adresse. Une transaction ne traite pas directement des adresses mais plutôt des transactions antérieures (Cf. Figure 5). Par conséquent, les entrées sont des références à des transactions existantes, qui indiquent d'où provient la somme totale qui va maintenant être dépensée, vers une ou plusieurs adresses. Figure 5 - Liens entre transactions Bitcoin 11 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Une fois la transaction créée, elle va être chiffrée grâce à la clé privée de l’émetteur, et envoyée sur le réseau Bitcoin. Chaque nœud va vérifier, grâce aux différentes signatures et à la clé publique de l’émetteur, que la transaction est valide. Si c'est le cas, elle sera ajoutée à la blockchain et propagée de nœud en nœud. 3 LA « BLOCKCHAIN » Pour être entérinée, chaque transaction doit être incluse dans un bloc de transactions. Un bloc n'est rien d'autre qu'une structure de données qui contient une liste de transactions récentes ainsi qu'un hash du bloc précédent. Chaque nouveau bloc est donc ajouté au bout d'une longue chaine de blocs, la « blockchain », qui remonte jusqu’à la création de Bitcoin, quand le premier bloc a été créé par les inventeurs du protocole. Figure 6 - Chaine de blocs Le contrôle d'intégrité des blocs est inclus dans la structure de données même. Un nœud ne peut pas modifier une transaction sans modifier le hash du bloc (Cf. Figure 6), car cela invaliderait tous les blocs suivants. Lorsqu'une transaction est créée, elle est diffusée de nœud en nœud dans le réseau. Chaque nœud cherche à créer un bloc avec toutes les transactions valides reçues récemment. Quand un bloc est créé, il est immédiatement transmis au réseau. 12 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Quand un nœud reçoit un bloc en provenance d'un autre nœud, il stoppe son propre travail de création de bloc et le vérifie. Si le nouveau bloc est valide, il est intégré à la blockchain, et le travail reprend sur cette nouvelle base. En quelques minutes, l'information s'est propagée et tous les nœuds ont intégré ce nouveau bloc à la fin de leur copie locale de la blockchain. La création d’un bloc est rendue volontairement très difficile, sa difficulté varie pour faire en sorte qu’un bloc ne puisse être créé que toutes les 10 minutes en moyenne. Le procédé qui consiste à créer un bloc à partir d'une liste de transactions s'appelle le minage. C’est un système de consensus distribué utilisé pour confirmer les transactions. Il consiste à trouver une valeur arbitraire (nonce) qui, intégrée au contenu du bloc, produise un hash ayant une certaine caractéristique. Figure 7 - Découverte d'un nonce conforme Le but est de trouver une valeur de nonce telle que le hash du bloc soit inférieur à une certaine valeur. En pratique, cela implique que le hash doit commencer par un certain nombre de zéros (Cf. Figure 7). Il est impossible de calculer la bonne valeur de nonce, les nœuds testent donc des valeurs aléatoires, jusqu’à trouver une valeur correcte sur des milliards, en concurrence avec tous les autres nœuds du réseau. On appelle cela la preuve de travail. Au 22/07/2015, la totalité du réseau Bitcoin a une capacité de calcul d’environ 380 PH/s (Péta hash par seconde), soit 380 billiards, ou encore, 380 millions de milliards de hash par seconde. 13 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 4 LE MINAGE Comme indiqué précédemment, le minage consiste à effectuer de nombreux calculs pour trouver une valeur. Ces calculs sont coûteux en ressources, notamment en électricité pour les mineurs qui disposent parfois de véritables plateformes dédiées au minage. Alors qu’y gagnent-ils ? Figure 8 - Plateforme de minage Le minage est le procédé par lequel de nouveaux bitcoins sont injectés dans le réseau. Les quatre premières années, chaque bloc rapportait 50 BTC, les quatre suivantes, 25, et ainsi de suite. Un bloc étant miné toutes les 10 minutes environ, cela signifie qu’actuellement, 3600 nouveaux bitcoins sont injectés dans le réseau chaque jour. Mais ce n’est pas tout, les mineurs récupèrent aussi les frais des transactions incluses dans leur bloc. Chaque utilisateur est libre de rajouter ou non des frais à chacune de ses transactions. Cependant, dans la mesure où rien n’oblige un mineur à inclure une transaction particulière dans un bloc, prévoir des frais de transaction assure l’émetteur que sa transaction sera traitée rapidement. Il est estimé que le dernier bitcoin sera miné aux alentours de 2140, portant ainsi le nombre de bitcoins à 21 millions. Le bitcoin étant divisible jusqu’à la huitième décimale, cette limite ne pose pas vraiment de problèmes. 14 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 5 LA DOUBLE DEPENSE La double dépense est l’utilisation d’un même argent pour effectuer plusieurs transactions. C’est un problème qui a longtemps empêché l’émergence des monnaies virtuelles. Bitcoin s’en protège de la manière suivante : Figure 9 – Cas d’une tentative de double dépense Un acheteur diffuse deux transactions, l’une au vendeur A, l’autre au vendeur B. Chacun des deux vendeurs l’ajoute dans un bloc qu’il essaie de créer. Imaginons que le vendeur A parvienne le premier à créer ce bloc. Ce bloc, qui contient une des deux transactions, est immédiatement diffusé. Le vendeur B reçoit le bloc, le reconnait comme valide, et est maintenant capable de détecter que la deuxième transaction de l’acheteur est invalide. 6 LES « FORKS » Plaçons-nous dans le cas où les deux blocs ont été créés en même temps. Les deux transactions ont été confirmées, alors que se passe-t-il ? Figure 10 - Exemples de forks possibles 15 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Chaque nœud va arbitrairement choisir de considérer l’un ou l’autre bloc comme le véritable dernier bloc, et continuer la chaine au bout de ce dernier. Un bloc va ensuite être créé par un de ces nœuds, rendant ainsi une des chaines plus longues que l’autre. Le protocole Bitcoin stipulant que la chaine la plus longue est la chaine officielle, l’autre est abandonnée (Cf. Figure 9). Et si quelqu’un souhaitait créer sa propre chaine, et dépasser la chaine officielle, il lui faudrait miner plus rapidement que le réseau. Concrètement, cela implique qu’il lui faudrait plus de la moitié de la puissance de calcul de tout le réseau. 7 LA CONFIDENTIALITE En ce qui concerne la confidentialité, ce système sépare les transactions des identités, contrairement au système classique (Cf. Figure 11). Figure 11 - Modèles de confidentialité Comme énoncé précédemment, l’intégralité des transactions est visible, ce qui comprend les montants et adresses d’échange, cela pourrait poser problème. Toutefois, la création d’adresse est privée et anonyme. Cela signifie qu’à partir du moment où quelqu’un parvient à faire un lien entre une personne et une certaine adresse, il devient possible de tracer tout l’historique de toutes les transactions concernant cette adresse, et d’en extraire certaines informations. Il est donc possible de garder un certain niveau de confidentialité en utilisant le Bitcoin, mais cela nécessite de la prudence. 16 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 8 LE PORTEFEUILLE BITCOIN, OU « WALLET » Bitcoin utilise la cryptographie asymétrique : une adresse publique Bitcoin peut être utilisée pour recevoir des bitcoins mais il faut connaître la clé privée associée pour pouvoir les dépenser. De plus, pour des raisons de protection de la vie privée, il est conseillé de créer une nouvelle adresse pour chaque transaction. En manipulant Bitcoin régulièrement, un utilisateur peut donc rapidement se retrouver avec des bitcoins répartis sur un grand nombre d’adresses. C’est là que le portefeuille Bitcoin trouve son intérêt : il s’agit d’un logiciel permettant de manipuler des bitcoins. Il permet donc de consulter facilement son solde total, ainsi que d’effectuer des paiements sans avoir à gérer les adresses individuellement. Un portefeuille Bitcoin peut également fournir d'autres fonctionnalités : génération de nouvelles adresses, chiffrement et sauvegarde des adresses privées, génération de QR codes, etc. Il en existe beaucoup, en application Web, mobile, ou logicielle, chacun pouvant proposer des fonctionnalités différentes. Figure 12 - Portefeuille Bitcoin mobile 17 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 9 LE « SIMPLIFIED PAYMENT VERIFICATION » Figure 13 - Fonctionnement du Simplified Payment Verification Il existe notamment les portefeuilles utilisant le SPV (Simplified Payment Verification), permettant de ne télécharger que les en-têtes de la blockchain. Cela permet de porter des portefeuilles sur des appareils plus limités en espace de stockage, comme les smartphones. Un client n’ayant que les entêtes de la blockchain ne peut pas vérifier les transactions, mais en la plaçant dans la chaîne, il peut vérifier que le réseau l’accepte. 18 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN VI. ETUDE DES DIFFERENTES SOLUTIONS DE PAIEMENT EN BITCOINS D’une manière générale, un utilisateur souhaitant payer en bitcoins verra un montant, une adresse, et un QR Code, comme dans l’image ci-dessous. Figure 14 - Page de paiement Bitcoin En France, il existe peu de solutions permettant à un marchand d’accepter le paiement en bitcoins et de pouvoir recevoir des euros. 1 PAYMIUM Paymium, société française, est une place de marché en ligne bitcoins – euros. Ils proposent aussi un service permettant aux ecommerçants d'accepter les paiements Bitcoin sur leurs sites. Les règlements qu'ils encaissent peuvent être immédiatement convertis en euros, rendant l'utilisation d'une monnaie alternative totalement transparente pour eux. Figure 15 - Logo de Paymium 19 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Le fonctionnement du système est également très accessible pour l'acheteur : au moment de régler son achat, dont le prix reste affiché en euros, il choisit l’option « Payer en bitcoins » et se voit afficher une facture comportant la contrevaleur en bitcoins (calculée automatiquement selon le cours en vigueur) et l'adresse à laquelle il doit transférer les fonds. Une fois la transaction exécutée, la commande est validée et le compte du marchand est approvisionné du montant en euros initial lors de la première confirmation du réseau Bitcoin, toute éventuelle variation de cours dans l'intervalle étant prise en charge par Paymium. Figure 16 - Facture de Paymium Tout client chez Paymium se voit ouvrir un compte de paiement chez l’établissement de paiement Lemon Way lié à son compte. Chaque transaction reçue y est déposée en euros (Frais d’échanges de 0,59%) si le marchand souhaite recevoir des euros. Il est possible d’alimenter ce compte via virement SEPA sans commission, mais tout virement SEPA sortant présente une commission de 0,99 €. Le compte de paiement d’un client peut aussi stocker des bitcoins, qu’il peut retirer s’il le souhaite. Cependant, toute demande de retrait est effectuée trois fois par jour par Paymium, dans une limite journalière de 5 bitcoins. Il s’agit donc d’un portefeuille Bitcoin très limité, car peu pratique pour l’utilisateur. Pour les développeurs, une API publique et sa documentation technique sont disponibles sur GitHub. Ils proposent de plus un environnement de test ou « sandbox ». 20 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 2 COINBASE Coinbase est une société américaine proposant : - Une plateforme d’échange entre bitcoin et autres devises monétaires - Un portefeuille Bitcoin (Application web et mobile) - Une intégration aisée pour les marchands - Une API - Un environnement « sandbox » Figure 17 - Logo de Coinbase Avec cette solution, un marchand a le choix entre garder les bitcoins qu’il reçoit ou les échanger immédiatement en euros avec une commission de 1% + 0,15 €. Il n’y a aucun frais pour le premier 1.000.000 € de paiements en bitcoins, ensuite s’applique le tarif ci-dessus pour convertir instantanément des bitcoins en euros ou autre devise. Les transactions effectuées pendant la journée sont en réalité envoyées en fin de journée (2pm PST soit 23h GMT+2), et apparaissent directement sur le compte bancaire courant du marchand en 2 jours ouvrés. Le marchand a aussi la possibilité de ne garder qu’un montant minimum sur son portefeuille Bitcoin, le surplus reçu sera donc converti et envoyé en euros sur son compte. Il peut aussi garder un pourcentage de chaque transaction en bitcoins sur son portefeuille. 21 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Figure 18 - Facture de Coinbase 3 INTEGRATION « MANUELLE » L’intégration « manuelle », sans passer par un tiers, est plus technique, complexe, et long d’autant plus que Bitcoin ne présente pas de documentation officielle. Il existe cependant plusieurs librairies facilitant cette intégration, comme par exemple bitcoinj, une librairie java développée notamment par un développeur majeur de Bitcoin. Pour se passer d’un tiers, il faut permettre trois types de paiement : - Paiement BTC -> BTC : Paiement en bitcoins d’un produit vendu en bitcoins - Paiement (EUR) BTC -> BTC : Paiement en bitcoins d’un produit vendu en euros, le marchand reçoit des bitcoins - Paiement (EUR) BTC -> (BTC) EUR : Paiement en bitcoins d’un produit vendu en euros, le marchand reçoit des euros Pour permettre ces paiements, il faut développer un portefeuille Bitcoin relativement basique : création d’adresses, créations de transactions, etc. 22 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Il est très important de sécuriser ces portefeuilles, par exemple avec du stockage à froid (wallet déplacé sur clé USB, hardware wallet…), ou de la multi-signature (Nécessite plusieurs signatures pour l’envoi de bitcoins. Le plus populaire est le 2-3 : l’utilisateur possède une clé privée, l’entité hébergeant le wallet en possède une, et les deux possèdent la dernière qui est chiffrée avec un mot de passe connu uniquement de l’utilisateur ; deux clés sur les trois sont nécessaires pour permettre l’envoi de bitcoins). Enfin, sans être mineur, il est nécessaire de faire tourner un nœud, parmi ces types possibles : - Nœud complet avec port 8333 ouvert. Ce nœud contient la blockchain complète, se connecte au réseau et permet aux autres nœuds de se connecter à soi, relaie les transactions et d’autres données. Il valide de plus les blocs et transactions ce qui accroit la sécurité. Attention tout de même, l’ouverture du port acceptant les connexions extérieures, il est plus sûr de ne pas garder de données confidentielles sur cet ordinateur. - Nœud complet avec port 8333 fermé. Ce nœud contient la blockchain complète, mais ne transmet que peu de données car empêche les connexions entrantes. Il permet toujours de valider les blocs et transaction. - Nœud SPV. Ce nœud ne contient que les en-têtes de la blockchain, ce qui le rend dépendant des autres nœuds pour la vérification complète des transactions. Il ne transmet que peu de données. 23 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN VII. INTEGRATION DE L’API PAYMIUM Le choix de Paymium n’a pas été mien, il est provenu d’une communication déjà existante entre cette société et Lyra Network, ainsi que d’un léger sentiment de nationalisme, Paymium étant une société française ! 1 DEVELOPPEMENT D’UNE APPLICATION WEB Ma première mission a donc consisté à développer une application web indépendante de la plateforme PayZen, permettant l’utilisation de l’API Paymium. Cette API permet l’utilisation d’un compte pour créer et lire des paiements, consulter son solde, son activité, etc. Figure 19 - Architecture de l'application Afin de permettre l’intégration future dans la plateforme, mon développement s’est divisé en trois parties : - Le Web Client, qui envoie les requêtes vers Paymium ou la partie Simulation en fonction du type d’utilisation, et en récupère les réponses. - La Web App, qui comprend l’interface web ainsi que la connexion avec le Web Client - La partie Simulation, permettant simplement de vérifier le fonctionnement de l’application à travers des réponses préétablies. Cette partie était nécessaire notamment dû à des problèmes réseaux empêchant l’interconnexion avec Paymium. 24 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN a LE WEB CLIENT Comme dit précédemment le Web Client envoie les requêtes à Paymium et en récupère les réponses. Il doit donc créer des requêtes, y placer les paramètres adéquats, et l’envoyer à une adresse indiquée. Le tableau répertoriant les requêtes possibles est disponible en annexe (Cf. Tab. 2). Pour la majorité de ces requêtes, il est nécessaire de s’authentifier. Pour ce faire, il y a deux méthodes : - L’OAUTH2 (Open Authentication 2). Cette méthode est plus adaptée lorsque l’utilisateur souhaite donner temporairement l’accès à son compte à une application. Il peut de plus définir les permissions de cet accès. Figure 20 - Authentification par Open Authentication 2 En choisissant l’OAuth2, l’utilisateur doit entrer une clé publique, une clé privée, ainsi que choisir les permissions qu’il accorde à l’application pour cette session. Il envoie ensuite le formulaire à l’application, laquelle le redirige vers Paymium, pour qu’il autorise ou non l’application à utiliser son compte. Si l’utilisateur accepte, il est redirigé vers l’application avec un code. Cette dernière utilise le code avec les paramètres passés par l’utilisateur pour demander un token d’accès à Paymium. Paymium renvoie notamment un token d’accès et un refresh token, valides pendant 30 minutes. 25 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Pour réinitialiser cette durée pendant cette période, il est possible de rafraîchir l’authentification en renvoyant une requête à Paymium avec le refresh token. - L’API Token, ou HMAC (keyed-Hash Message Authentication Code) Authentication, est créé directement sur le site de Paymium, une fois connecté. Ce token n’a pas de limite dans le temps, et les permissions qu’il accorde sont définies lors de sa création. Paymium fournit une clé publique et une clé privée lors de la création d’un token. Figure 21 - Authentification par API Token En choisissant l’API Token, l’utilisateur entre sa clé publique et sa clé privée. L’application effectue ensuite les requêtes correspondantes aux permissions accordées, tant que le token n’est pas supprimé par l’utilisateur sur le site de Paymium. Pour utiliser ce token, il faut placer trois en-têtes dans les requêtes nécessitant une authentification : - Une nonce, qui est une valeur devant être unique pour chaque requête. Ici, l’application récupère l’heure actuelle en millisecondes. - La clé publique. - La signature HMAC-SHA256 de la nonce concaténée avec l’URL de la requête et le corps de la requête, chiffrée avec la clé privée. Cette méthode est donc la plus adaptée à une application devant être capable de créer des paiements à tout moment, telle qu’une application marchande. 26 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Par la suite, l’envoi de paramètres POST doit être effectué au format JSON, tout comme les réponses de Paymium le sont. Par exemple, la réponse de Paymium à une requête de lecture des informations du compte utilisateur est de la forme suivante : Figure 22 - Informations sur le compte utilisateur par Paymium b LA WEB APP La Web App comprend l’ensemble des fichiers permettant l’affichage web de l’application, ainsi que des servlets permettant la liaison avec chaque fonction du Web Client. L’interface permet un affichage relativement basique des résultats des requêtes, et propose sur la page d’accueil, une fois l’utilisateur authentifié, plusieurs exemples de produits achetables en bitcoins (Cf. Figure 23). L’interface a été entièrement développée de manière autonome, avec une légère utilisation de Bootstrap et de JQuery. L’application comprend également deux filtres : l’un forçant l’utilisation du protocole SSL sur le site, le second bloquant une large partie du site à tout utilisateur non authentifié. Seul l’accès aux requêtes Paymium ne nécessitant pas d’authentification n’ont pas de restriction. 27 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Figure 23 - Aperçu de l'application c LA SIMULATION La partie simulation n’a pas été développée très en profondeur. Elle permet simplement de simuler Paymium dans le contenu des échanges. Cela permet de tester une partie de l’application quand la sandbox de Paymium est hors-ligne ou quand seul l’affichage graphique a besoin d’être modifié. Aucune base de données n’est utilisée dans cette partie, les réponses sont arbitraires et ne dépendent que très peu des paramètres envoyés. 28 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 2 UTILISATION VIA UN MODULE PRESTASHOP Une fois la première partie effectuée, il m’a été demandé d’installer Prestashop, une application web permettant de créer une boutique en ligne e-commerce. Le but était d’utiliser le module Prestashop développé par Paymium pour le rediriger vers mon application afin d’effectuer le paiement, puis de rediriger vers Prestashop. Cette partie n’a donc pas d’intérêt particulier par rapport à une solution appelant Paymium directement via le module car elle perd en sécurité, mais est intéressante techniquement. Figure 24 - Fonctionnement du module Prestashop 29 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN VIII. INTEGRATION DANS PAYZEN Pour intégrer un nouveau moyen de paiement dans PayZen, j’ai inauguré une méthode qu’ils ont développée afin de pouvoir l’implémenter sans avoir l’application PayZen (appelée VAD pour Vente à Distance) installée sur mon poste. La VAD tournait donc sur un environnement de qualification accessible par le réseau. Cette méthode facilite l’intégration d’un nouveau moyen de paiement car elle évite d’avoir à installer et configurer la VAD sur son propre poste, ainsi que d’y former l’utilisateur. L’ajout d’un moyen de paiement dans la VAD consiste donc à développer une application dédiée qui communique depuis un poste vers un serveur contenant la VAD. 1 FONCTIONNEMENT DE LA VAD La VAD définit une SPI (Service Provider Interface) REST qui doit être implémentée dans l’application afin d’être appelée. L’application ne contacte pas directement la VAD, sa seule communication dans ce sens se limite à l’appel d’une URL « pingback » fournie par la VAD. En plus de la réalisation de l’API, l’application doit également fournir les fichiers nécessaires à l’affichage des pages spécifiques au moyen de paiement. Figure 25 - Liens entre la VAD et l'application 30 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN L’intégration de l’application s’intègre dans la cinématique de paiement de la façon suivante : 1. Soumission du formulaire de paiement 2. Choix du moyen de paiement 3. Création du contexte de paiement dans l'application dédiée 4. Prise en charge du paiement par l'application dédiée (cinématique, appels serveurs externes, etc.) 5. Reprise du contrôle par la VAD 6. Synchronisation des données entre VAD & Application dédiée 7. Finalisation du paiement & affichage du ticket Nous allons voir comment Bitcoin s’inscrit dans cette cinématique par rapport à un moyen de paiement classique. 2 FONCTIONNEMENT D’UN PAIEMENT Lors de la sélection du moyen de paiement Bitcoin, la VAD invoque l’application pour créer un PaymentResource à partir des éléments basiques du paiement. Ensuite, elle invoque de nouveau l’application pour créer un WebPaymentResource, qui est lié au PaymentResource mais contient des informations nécessaires à l’affichage de la page de paiement. Lors de sa création, l’application possède enfin tous les paramètres nécessaires à l’envoi d’une requête de création de paiement à Paymium, et l’effectue. Paymium nous répond donc avec les paramètres du paiement. Ils nous envoient également un callback que nous vérifions en leur envoyant une requête de lecture du paiement. Lors de l’affichage de la demande de paiement, la VAD effectue une lecture du WebPaymentResource afin de récupérer les données nécessaires. Elle utilise de plus un fichier modèle, un fichier JavaScript, et un fichier CSS, développés dans l’application. L’utilisateur n’a pas de formulaire à remplir, il doit créer une transaction Bitcoin et la transmettre au réseau. Lorsque le nœud contrôlé par Paymium la détecte, ils effectuent un callback nous indiquant le changement d’état du paiement (celui-ci passe de l’état « pending_payment » à « processing »). Suite à ce callback, nous envoyons tout d’abord une requête à Paymium pour s’assurer de la validité de ce callback, avant de mettre à jour le paiement et de prévenir la VAD. 31 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Cette dernière va alors envoyer une requête de lecture à l’application, puis valider le paiement. Ceci permettra de rediriger l’acheteur vers un ticket. Lors de la réception du callback de Paymium indiquant l’état « paid » du paiement (ceci a lieu après la première confirmation du réseau Bitcoin), et vérification de cette callback, l’application prévient de nouveau la VAD, qui, après une nouvelle requête de lecture à l’application, va confirmer le paiement. Si le paiement n’a pas été effectué par l’utilisateur, Paymium envoie un callback avec l’état « expired » et on décline le paiement. 32 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Figure 26 - Fonctionnement de l'application 33 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 3 DEMONSTRATION DE L’APPLICATION Figure 27 - Page de choix du moyen de paiement Lors de l’achat d’un produit, l’acheteur se verra proposé le moyen de paiement « Bitcoin » parmi les choix possibles. Figure 28 - Page de paiement Bitcoin avec montant initial en euros Une fois sélectionné, l’acheteur arrive sur la page ci-dessus. En plus du montant en euros toujours affiché sur la gauche, cette page contient aussi le logo Bitcoin, le montant correspondant en bitcoins, le nom du marchand, l’adresse Bitcoin du vendeur ainsi que son QR Code correspondant. 34 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Contrairement à la majorité des moyens de paiements, l’utilisateur ne soumet pas de formulaire car il n’a aucune donnée à fournir. Pour pouvoir payer, il doit créer une transaction Bitcoin, avec le montant et l’adresse correspondants. Pour ce faire, il doit utiliser un portefeuille Bitcoin : soit il scanne le QR Code, soit il rentre manuellement les informations affichées, soit il clique sur le QR Code s’il dispose d’un portefeuille installé sur son appareil (une demande d’ouverture d’un client Bitcoin sera affichée). Une fois la transaction créée et envoyée sur le réseau, l’application attend une réponse de Paymium pour pouvoir continuer. Figure 29 - Ticket d’un paiement Bitcoin Peu après l’envoi de la transaction sur le réseau Bitcoin, Paymium renvoie un callback nous indiquant que la transaction est en attente de confirmation. Nous affichons alors à l’acheteur un ticket récapitulant sa commande. 35 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Figure 30 - Page de paiement Bitcoin, avec montant initial en bitcoins Dans le cadre de l’achat d’un produit vendu en bitcoins, l’affichage est le même excepté la devise. En effet, nous affichons le montant dans la devise Bitcoin. Sur la figure ci-dessus, l’affichage devrait être 0,026 109 BTC, mais nous affichons à la place 26, 109 XXX pour des raisons expliquées dans la partie suivante. 36 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 4 PROBLEMES RENCONTRES Comme de nombreuses applications Java, la VAD utilise les librairies développées par Oracle. Une classe de cette librairie, « java.util.Currency », est utilisée pour traiter les devises. Elle pose plusieurs problèmes par rapport au Bitcoin. Le premier problème provient du fait que cette classe se base sur la norme ISO 4217 pour identifier les devises, or, Bitcoin n’est pas une devise reconnue et ne possède donc pas de code numérique ni de code alphanumérique officiels. De plus, le code « BTC » rentre en conflit avec ISO 4217 car les deux premières lettres sont « BT », correspondant au Bhoutan ; « XBT » serait mieux adapté et est utilisé par certaines entités, mais pas par la majorité de la communauté qui lui préfère « BTC ». L’utilisation du code numérique 999, correspondant au code « XXX » (et officiellement à l’absence de devise), a permis de contourner ce problème dans un cadre de test. Une solution plus pérenne devra être trouvée pour passer le projet en production, comme étendre la classe « Currency », si l’ISO n’intègre pas le Bitcoin. Le second problème, provenant de la même classe, est lié aux nombre de décimales. En effet, la classe Java ne permet que 3 décimales, ce qui est incompatible avec les 8 que possède le Bitcoin. Pour contourner ce problème, la VAD utilise les 3 décimales proposées, et affiche officieusement des millibitcoins. On ignore donc les 2 dernières décimales de la devise. Paymium les ignorant de même lors des réponses qu’ils émettent, cela n’a pas d’impact négatif pour le moment. 37 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN IX. CONCLUSION Ce stage a été une expérience unique qui m’a beaucoup apporté tant sur le plan professionnel que personnel. Ce fut une opportunité pour apprendre le fonctionnement du Bitcoin et son placement par rapport aux autres crypto-monnaies. Son implémentation en tant que moyen de paiement sur une plateforme aussi développée que PayZen fut très intéressante et enrichissante. L’enseignement en monétique de l’ENSICAEN fut une base solide pour comprendre le fonctionnement des moyens de paiement traditionnels et les comparer au Bitcoin. J’ai également eu l’occasion de mettre en pratique mes compétences en Java/J2EE ainsi que de les perfectionner. Ce projet ne pourra toutefois passer en production qu’après reconnaissance du Bitcoin comme devise ISO 4217 par l’Organisation Internationale de Normalisation, ou modifications au niveau de la plateforme, ce qui est plus envisageable. 38 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN 39 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN ANNEXES Annexe 1 - Sources http://www.lyra-network.com https://payzen.eu http://coinmarketcap.com http://cryptmarketcap.com https://bitinfocharts.com/comparison/transactions-btc-ltc-doge-dash.html https://stripe.com/bitcoin https://www.braintreepayments.com/features/coinbase https://www.adyen.com/home/about-adyen/press-releases/bitcoin-payments-for-jagex http://blog.paymium.com/2015/01/22/ingenico-group-and-paymium-team-up-to-integratebitcoin-payments-on-the-telium-tetra-next-generation-terminals https://bitcoin.org https://en.bitcoin.it/wiki/Main_Page http://blog.apollo-formation.com/bitcoin-monnaie-virtuelle-de-demain http://www.miximum.fr/bitcoin-comment-ca-marche.html http://www.miximum.fr/le-point-sur-les-portefeuilles-bitcoin.html https://wiki.unsystem.net/en/index.php/DarkWallet/Stealth http://www.ybrikman.com/writing/2014/04/24/bitcoin-by-analogy/ https://paymium.com/ http://cestpasmonidee.blogspot.fr/2014/07/paymium-invite-le-bitcoin-dans-le-e.html https://www.coinbase.com http://www.tigerdirect.com/bitcoin/help.asp https://en.wikipedia.org/wiki/ISO_4217 http://docs.oracle.com/javase/7/docs/api/java/util/Currency.html 40 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Annexe 2 – Evolution du prix du Bitcoin, en dollars Annexe 3 – Contenu d’un bloc Annexe 4 – Contenu d’un en-tête de bloc 41 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Annexe 5 – Requêtes Paymium possibles et leurs paramètres Request Method Parameters Address Response Read ticker GET None /api/v1/data/eur/ticker A ticker Read trades GET None /api/v1/data/eur/trades An array of trades Read market depth GET Nonne /api/v1/eur/depth An array of bids and an array of asks Read user info GET Authorization /api/v1/user A user info /api/v1/user/orders An array of orders /api/v1/user/orders/{UUID} An order /api/v1/user/orders An order /api/v1/user/orders An order /api/v1/user/orders/{UUID}/cancel None /api/v1/user/addresses/{btc_address} A bitcoin address Read user activity GET Read order GET Create trade order POST Withdraw POST Delete order DELETE Read bitcoin address GET Read bitcoin addresses Create bitcoin address Authorization and 4 optional parameters Authorization and 1 parameter in the path Authorization and 4-6 parameters Authorization and 3-4 parameters Authorization and 1 parameter in the path Authorization and 1 parameter in the path GET Authorization /api/v1/user/addresses An array of bitcoin addresses POST Authorization /api/v1/user/addresses A bitcoin address /api/v1/merchant/create_payment A payment /api/merchant/get_payment/{UUID} A payment Create payment POST Read payment GET Authorization and 3-6 parameters Authorization and 1 parameter in the path L’URL de base est https://sandbox.paymium.com 42 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI, 2A Informatique Monétique, ENSICAEN Annexe 6 – Diagramme de Gantt 43 / 46 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI 1/1 Intégration d’une solution de paiement en monnaie virtuelle Clément CARDI RESUME EN FRANÇAIS Ce rapport traite d’un stage sur les monnaies virtuelles et l’intégration du Bitcoin dans la plateforme de paiement PayZen, produit de l’opérateur monétique leader en France Lyra Network. Ce stage a débuté par une comparaison des principales monnaies virtuelles ainsi que leur diffusion sur les principaux Payment Service Providers présents en France. S’en est suivie une étude de la crypto-monnaie la plus importante et la plus utilisée, le Bitcoin, et une recherche sur les principaux moyens de l’intégrer en tant que moyen de paiement. Enfin, la partie développement a commencé par une application web indépendante implémentant l’API de la solution Paymium, suivie par la modification d’un module PrestaShop. La partie la plus importante étant finalement l’intégration de cette solution dans la plateforme PayZen. Mots clés : monétique, crypto-monnaie, Bitcoin, java SUMMARY This is internship report about cryptocurrencies and integration of Bitcoin in the payment platform PayZen, a product by the leader in France in routing bank-transactions, Lyra Network. This internship started with a comparison of the main cryptocurrencies and their spreading in the main Payment Service Providers available in France. This was accompanied by a study of the most important and most used cryptocurrency, Bitcoin, and a research on the main tools allowing its integration as a payment mean. Finally, the development part started with an independent web application implementing the Paymium API, followed by the modification of a PrestaShop module. The most important part being the integration of this solution in the PayZen platform. Keywords : e-banking, cryptocurrency, Bitcoin, java
Documents pareils
COMMUNIQUE DE PRESSE Optelo, la filiale micro
Optelo, la filiale micro-paiement du Groupe ADVERLINE, va
proposer une offre Bitcoin en partenariat avec Paymium
Optelo s’associe à Paymium pour distribuer à ses clients une offre de paiement Bitco...
Bitcoin : crypto-monnaie décentralisée ouverte et libre
Les mineurs effectuent avec leur matériel informatique des calculs
mathématiques (POW) pour le réseau Bitcoin afin de confirmer des
transactions et augmenter leur sécurité. Comme récompense pour le...