1
Blockchain:
révolution
ou
évolution ?
Nicolas Marchand
nicolas.marchand@scalian.com
30 Juin 2017
2
Découverte et exemples
Sous le capot BC
Clés pour démarrer
Perspectives
AGENDA
https://www.youtube.com/watch?v=lytxafTXg6c
Richard Feynman explique le sentiment de confusion
« Lorsque vous pensez à quelque
chose que vous ne comprenez pas,
vous avez un inconfortable
sentiment appelé confusion (...) »
3
« La blockchain va clairement
transformer notre industrie, mais
personne ne sait encore exactement
quand, où et comment »
Stéphane Boujnah, directeur général d’Euronext, Avril 2017
http://www.latribune.fr/entreprises-finance/banques-finance/la-blockchain-a-le-potentie
de-transformer-le-trading-actions-selon-moody-s-686575.html
4
Le problème de la confiance
Pour collaborer, nous nous appuyons
sur des autorités de confiance
En étant factuel, ces tiers sont trop souvent
Compromis (Google/Facebook&co vs NSA)
Biaisés (Visa/Mastercard/Paypal vs Wikileaks)
Incompétents (Yahoo vs les voleurs)
Corrompus (Supply Chain)
Non disponibles (AWS S3)
Inconnus (SSL)
https://notepad-plus-plus.org/news/notepad-7.3.3-fix-cia-hacking-issue.html
https://techcrunch.com/2017/02/28/amazon-aws-s3-outage-is-breaking-things-for-a-lot-of-websites-and-apps/
https://www.bloomberg.com/news/articles/2017-01-19/data-breaches-hit-record-in-2016-as-dnc-wendy-s-co-hacked
https://www.theregister.co.uk/2015/09/21/symantec_fires_workers_over_rogue_certs/
“Trust is like a
mirror, you can fix it
if it's broken, but
you can still see the
crack in that mother
fucker's reflection.”
Lady Gaga explique la confiance
5
C’est quoi la
blockchain ?
C’est une technologie de stockage et de transmission
d’informations sécurisée et transparente qui
fonctionne sans organe central de contrôle
registre sécurisé transparent décentralisé
6
Que fait la
blockchain ?
Elle stocke des enregistrements
ordonnés chronologiquement et
immuables.
immuableregistre sécurisé transparent décentralisé
7
Et concrètement à quoi ça ressemble ?
immuableregistre sécurisé transparent décentralisé
8
D’ou cela provient-il ?
2008
‘Bitcoin: A Peer-to-Peer
Electronic Cash System’
Satoshi Nakamoto
https://www.lrb.co.uk/v38/n13/andrew-ohagan/the-satoshi-affair
immuableregistre sécurisé transparent décentralisé
9
La blockchain permet de
s’échanger
de la valeur
de pair à pair
sans intermédiaire
Et en quoi est-ce une révolution ?
immuableregistre sécurisé transparent décentralisé
10
appellés “smart contracts”
La blockchain permet de
déclencher des contrats
intelligents automatiquement
Mais encore ?
qui exécute des contrats intelligentsimmuableregistre sécurisé transparent décentralisé
"code is law"
11
Quels impacts ?
Crypto-monnaie
E-commerce, paiements,
prêts P2P, micro finance
Actifs
Equity, marchés privés,
dette, crowdfunding
Smart Contracts
Droits numérique,
intermédiaires
Mise sous séquestre
Enregistrement des titres,
propriété, vote, propriété
intellectuelle
qui exécute des contrats intelligentsimmuableregistre sécurisé transparent décentralisé
12
Quelques exemples
Echanges d’électricité pair à pair
Bouygues Immo : Quartier Lyon Confluence
Energie
Simplification administrative
BC Delaware Initiative : actes de sociétés
Administration
Trade Finance PME Intl.
Consortium Trade Chain (HSBC, Natixis, SG, …)
Commerce
Know Your Customer
Consortium R3 (60 Membres, BC Corda)
Banque
Lutte contre la fraude aux impressions
MetaX: adChain
Publicité
Accélerer les déclarations/remboursements
Dynamis : IoT / Smart Contracts
Assurance
https://www.cbinsights.com/blog/industries-disrupted-blockchain/
qui exécute des contrats intelligentsimmuableregistre sécurisé transparent décentralisé
13
3 typologies de cas d’usages
REGISTRE
MEDIACHAIN
PROPRIETE INTELLECTUELLE
POUR LES MEDIAS
TRANSFERT
D’ACTIFS
BITLAND
TRANSFERT DE PROPRIETÉ
SMART
CONTRACTS
LENDERBOT
MICRO-ASSURANCE
Cadastre pour l’Afrique
80% des biens non enregistrés
Impact pour le e-commerce
Registre global des droits
Proteger les artistes
Racheté par Spotify en 2017
Déclenchement instantané
Faciliter les déclarations
Assurance entre particuliers
landing.bitland.world mediachain.io stratumn & deloitte
qui exécute des contrats intelligentsimmuableregistre sécurisé transparent décentralisé
14
OpenBazaar, la marketplace blockchainisée
Réseau décentralisée de commerce en ligne (en bitcoin) sans commissions ni restrictions
« Notre objectif est que les
acheteurs et vendeurs aient
une expérience meilleure en
utilisant OpenBazaar qu’en
utilisant les anciennes
plates-formes centralisées. »
En cas de litige ?
‘2-or-3 multisig’ : 3 personnes doivent etre
d’accords pour accepter le transfert ‘bitcoin’,
un vendeur, un acheteur et un modérateur
Frais de modération: 2%
https://blog.openbazaar.org/how-moderators-and-dispute-resolution-work-in-openbazaar
15
Sous le capot blockchain :
décryptage du fonctionnement de la blockchain
OU
16
Fonctionnement de la blockchain
17
Fonctionnement intéractif de la blockchain
https://anders.com/blockchain
18
Cartographie des blockchains majeures
Description
Blockchain généraliste
2016
Blockchain généraliste
2015
Blockchain de paiement
2009
Type Permissioned
Permissioned
Permissionless
Permissionless
Gouvernance Linux Foundation Enterprise Ethereum Alliance Développeurs Bitcoin
Monnaie Aucune Ether BTC
Gratification mineurs N/A Oui Oui
Consensus Byzantine fault-tolerance Mining (Preuve d’enjeu) Mining (Preuve de travail)
Réseau Privé (par défaut) ou Public Public (par défaut) ou Privé Public
Anonymat De Ouvert à Privé Ouvert Ouvert
Smart Contrats
Multiples langages de
programmation
Langage ‘Solidity’ Possible, mais pas évident
19
Maturité du développement Blockchain
Avons-nous tous les outils en 2017 ?
Web 2.0
Web 3.0 (dApps)
en 2014
Web 3.0 (dApps)
en 2017
Maturité
Calcul à l’échelle Amazon EC2 ? Ethereum, Truebit En cours
Stockage fichiers Amazon S3 ? IFPS/Filecoin, Storj En cours
Données externes API 3rd parties ? Oracles (Augur) En cours
Monétisation Pub ? Modèle de token Prêt
Paiement
Carte de crédit,
paypal
Bitcoin Ethereum, Bitcoin Prêt
20
Focus sur les applications décentralisées (dApps)
Un app store déjà disponible
https://dapps.ethercasts.com/
21
Développer une dApp Ethereum
Anatomie : app classique
22
Développer une dApp Ethereum
Anatomie : app decentralisée
23
Développer une dApp Ethereum
Anatomie : app decentralisée
24
Développer une dApp de vote
UI
https://github.com/maheshmurthy/ethereum_voting_dapp
25
Développer une dApp de vote
Chaine de développement
1/ Blockchain en local
• Ligne de commande: goethereum (geth) ou ethereumjs-testrpc ou ethereum-cpp
• Mist pour la gestion du Wallet
2/ Librairies
• Node.js pour node et npm
• Web3.js (connection à la BC en JSON-RPC)
• Solidity pour le dév des Smart Contract
• Truffle pour accélérer le dev (scaffolding, tests unitaires)
3/ Outils
• Browser-solidity : https://ethereum.github.io/browser-solidity/
• Ethereum Studio : https://live.ether.camp
4/ Process de dev
• Développer le smart contract en Solidity: compiler et déployer dans la blockchain de test
• Développer la dApp en HTML/JS: tester avec le smart contract déployé dans la blockchain de test
• Déployer le smart contract dans la blockchain live, tester puis livrer la dApp
26
Développer une dApp de vote
1/ Smart Contract pragma solidity ^0.4.6; // We have to specify what version of compiler this code will compile with
contract Voting {
/* mapping field below is equivalent to an associative array or hash. */
mapping (bytes32 => uint8) public votesReceived;
bytes32[] public candidateList;
/* This is the constructor which will be called once when you deploy the contract to the blockchain.
When we deploy the contract, we will pass an array of candidates who will be contesting in the election
*/
function Voting(bytes32[] candidateNames) {
candidateList = candidateNames;
}
// This function returns the total votes a candidate has received so far
function totalVotesFor(bytes32 candidate) returns (uint8) {
if (validCandidate(candidate) == false) throw;
return votesReceived[candidate];
}
// This function increments the vote count for the specified candidate.
function voteForCandidate(bytes32 candidate) {
if (validCandidate(candidate) == false) throw;
votesReceived[candidate] += 1;
}
function validCandidate(bytes32 candidate) returns (bool) {
(…) }
}
Voting.sol
27
Développer une dApp de vote
2/ Déploiement
SmartContract
node
// Connexion à la blockchain
> Web3 = require('web3')
> web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
// Visualisation des comptes utilisateurs
> web3.eth.accounts
['0x9c02f5c68e02390a3ab81f63341edc1ba5dbb39e',
'0xc26bda5f3370bdd46e7c84bdb909aead4d8f35f3']
// Compilation du contrat
>code = fs.readFileSync('Voting.sol').toString()
>contract = web3.eth.compile.solidity(code)
// Deploiement du contrat
>VotingContract = web3.eth.contract(contract.info.abiDefinition)
>deployedContract = VotingContract.new(['Rama','Nick','Jose'],{data: contract.code, from:
web3.eth.accounts[0], gas: 4700000})
// Récupération du contrat dans la BC
>contractInstance = VotingContract.at(deployedContract.address)
// 2 Votes pour Rama
>contractInstance.voteForCandidate('Rama', {from: web3.eth.accounts[0]})
>contractInstance.voteForCandidate('Rama', {from: web3.eth.accounts[0]})
// Recupération des résultats
>contractInstance.totalVotesFor.call('Rama').toLocaleString()
'2'
En ligne de commande
28
Développer une dApp de vote
3/ Code HTML <!DOCTYPE html>
<html>
<head>
<title>Hello World DApp</title>
<link href=‘//fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
<link href=‘//maxcdn.bootstrapcdn.com/bootstrap/bootstrap.min.css' rel='stylesheet' type='text/css'>
</head>
<body class="container">
<h1>A Simple Hello World Voting Application</h1>
<div class="table-responsive">
<table class="table table-bordered">
<thead><tr><th>Candidate</th><th>Votes</th></tr></thead>
<tbody>
<tr><td>Rama</td><td id="candidate-1"></td></tr>
<tr><td>Nick</td><td id="candidate-2"></td></tr>
<tr><td>Jose</td><td id="candidate-3"></td></tr>
</tbody>
</table>
</div>
<input type="text" id="candidate" />
<a href="#" onclick="voteForCandidate()" class="btn btn-primary">Vote</a>
</body>
<script src="https://cdn.rawgit.com/ethereum/web3.js/develop/dist/web3.js"></script>
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
<script src="./index.js"></script>
</html>
index.html
29
Développer une dApp de vote
4/ Code JS web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
abi =
JSON.parse('[{"constant":false,"inputs":[{"name":"candidate","type":"bytes32"}],"name":"totalVotesFor","o
utputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs »:
(…)
[{"name":"candidateNames","type":"bytes32[]"}],"payable":false,"type":"constructor"}]')
VotingContract = web3.eth.contract(abi);
contractInstance = VotingContract.at('0x2a9c1d265d06d47e8f7b00ffa987c9185aecf672');
candidates = {"Rama": "candidate-1", "Nick": "candidate-2", "Jose": "candidate-3"}
function voteForCandidate(candidate) {
candidateName = $("#candidate").val();
contractInstance.voteForCandidate(candidateName, {from: web3.eth.accounts[0]}, function() {
let div_id = candidates[candidateName];
$("#" + div_id).html(contractInstance.totalVotesFor.call(candidateName).toString());
});
}
$(document).ready(function() {
candidateNames = Object.keys(candidates);
for (var i = 0; i < candidateNames.length; i++) {
let name = candidateNames[i];
let val = contractInstance.totalVotesFor.call(name).toString()
$("#" + candidates[name]).html(val);
}
});
index.js
30
Limites de la blockchain
SECURITE
• Obsolescence des algorithmes cryptographiques
utilisés
• "Code is Bug"
TECHNIQUE
• Passage à l’échelle
DROIT
• Responsabilité des clés privées sans autorité de
certification identifiée
• Reconnaissance juridique des smart contracts
http://www.usine-digitale.fr/article/la-blockchain-pose-de-serieux-problemes-de-
confiance-de-droit-et-de-securite.N401527
31
Smart Ideas
For Your Money
A cool way to represent your
information
Comment
démarrer ?
Les clés pour bâtir
vos premiers cas
d’usage
La blockchain.
32
Comprendre où la blockchain apportera de la valeur
Et comment …
1/
Réfléchir
Trouver le cas
d’usage
2/
Dompter
POC
3/
Expérimenter
Essai terrain
4/
Se lancer
Mise en
production
• Réunir l’équipe
• Mesurer la valeur
• Evaluer la faisabilité
• Fixer les KPIs de succès
• Réaliser un premier cas
• Découvrir les technologies
• Naviguer dans l’écosystème
• Trouver les partenaires
• Intégrer un consortium
• Valider le business model
• Itérer sur la roadmap stratégique
33
8 caractéristiques pour choisir le cas d’usage
Base de données
De multiples
contributeurs
Absence de
confiance
Désintermédiation
Présence de
transactions liées
Présence de règles
métiers
Présence de
validateurs
Présence d’actifs
Le cas d’usage devrait respecter au moins trois de ces caractéristiques
http://www.multichain.com/blog/2015/11/avoiding-pointless-blockchain-project/
34
Blockchain : hyper hype ou pas ?
Une technologie à
fort potentiel,
mais qui doit
encore gagner en
maturité
35
Un écosystème bouillant
Source : Fintech Control Tower, BCG
se structurant autour des grandes familles de cas d’usages
36
Le bon timing pour se lancer
37
Révolution ou évolution
« Le mode de fonctionnement coopératif d’Internet
n’est pas conçu pour offrir des services
commerciaux. »
1994. rapport Théry, intitulé « Les autoroutes de l’information »
https://philippesilberzahn.com/2013/01/07/les-trois-erreurs-prediction-rapport-thery-autoroutes-information-1994/
38
Quelques références
INTROS
https://blockchainfrance.net/
https://www.ethereum-france.com/
https://etherchain.org/
https://blockgeeks.com/guides/what-is-ethereum/
CODING
https://marmelab.com/blog/2016/04/28/blockchain-for-
web-developers-the-theory.html
https://auth0.com/blog/an-introduction-to-ethereum-
and-smart-contracts/
https://github.com/maheshmurthy/ethereum_voting_d
app
MOOC
https://fr.coursera.org/learn/cryptocurrency
(fr) http://www.moocblockchain.com/
https://www.udemy.com/ethereum-developer/
39
Merci pour
votre
écoute

Blockchain : révolution ou évolution ?

  • 1.
  • 2.
    2 Découverte et exemples Sousle capot BC Clés pour démarrer Perspectives AGENDA https://www.youtube.com/watch?v=lytxafTXg6c Richard Feynman explique le sentiment de confusion « Lorsque vous pensez à quelque chose que vous ne comprenez pas, vous avez un inconfortable sentiment appelé confusion (...) »
  • 3.
    3 « La blockchainva clairement transformer notre industrie, mais personne ne sait encore exactement quand, où et comment » Stéphane Boujnah, directeur général d’Euronext, Avril 2017 http://www.latribune.fr/entreprises-finance/banques-finance/la-blockchain-a-le-potentie de-transformer-le-trading-actions-selon-moody-s-686575.html
  • 4.
    4 Le problème dela confiance Pour collaborer, nous nous appuyons sur des autorités de confiance En étant factuel, ces tiers sont trop souvent Compromis (Google/Facebook&co vs NSA) Biaisés (Visa/Mastercard/Paypal vs Wikileaks) Incompétents (Yahoo vs les voleurs) Corrompus (Supply Chain) Non disponibles (AWS S3) Inconnus (SSL) https://notepad-plus-plus.org/news/notepad-7.3.3-fix-cia-hacking-issue.html https://techcrunch.com/2017/02/28/amazon-aws-s3-outage-is-breaking-things-for-a-lot-of-websites-and-apps/ https://www.bloomberg.com/news/articles/2017-01-19/data-breaches-hit-record-in-2016-as-dnc-wendy-s-co-hacked https://www.theregister.co.uk/2015/09/21/symantec_fires_workers_over_rogue_certs/ “Trust is like a mirror, you can fix it if it's broken, but you can still see the crack in that mother fucker's reflection.” Lady Gaga explique la confiance
  • 5.
    5 C’est quoi la blockchain? C’est une technologie de stockage et de transmission d’informations sécurisée et transparente qui fonctionne sans organe central de contrôle registre sécurisé transparent décentralisé
  • 6.
    6 Que fait la blockchain? Elle stocke des enregistrements ordonnés chronologiquement et immuables. immuableregistre sécurisé transparent décentralisé
  • 7.
    7 Et concrètement àquoi ça ressemble ? immuableregistre sécurisé transparent décentralisé
  • 8.
    8 D’ou cela provient-il? 2008 ‘Bitcoin: A Peer-to-Peer Electronic Cash System’ Satoshi Nakamoto https://www.lrb.co.uk/v38/n13/andrew-ohagan/the-satoshi-affair immuableregistre sécurisé transparent décentralisé
  • 9.
    9 La blockchain permetde s’échanger de la valeur de pair à pair sans intermédiaire Et en quoi est-ce une révolution ? immuableregistre sécurisé transparent décentralisé
  • 10.
    10 appellés “smart contracts” Lablockchain permet de déclencher des contrats intelligents automatiquement Mais encore ? qui exécute des contrats intelligentsimmuableregistre sécurisé transparent décentralisé "code is law"
  • 11.
    11 Quels impacts ? Crypto-monnaie E-commerce,paiements, prêts P2P, micro finance Actifs Equity, marchés privés, dette, crowdfunding Smart Contracts Droits numérique, intermédiaires Mise sous séquestre Enregistrement des titres, propriété, vote, propriété intellectuelle qui exécute des contrats intelligentsimmuableregistre sécurisé transparent décentralisé
  • 12.
    12 Quelques exemples Echanges d’électricitépair à pair Bouygues Immo : Quartier Lyon Confluence Energie Simplification administrative BC Delaware Initiative : actes de sociétés Administration Trade Finance PME Intl. Consortium Trade Chain (HSBC, Natixis, SG, …) Commerce Know Your Customer Consortium R3 (60 Membres, BC Corda) Banque Lutte contre la fraude aux impressions MetaX: adChain Publicité Accélerer les déclarations/remboursements Dynamis : IoT / Smart Contracts Assurance https://www.cbinsights.com/blog/industries-disrupted-blockchain/ qui exécute des contrats intelligentsimmuableregistre sécurisé transparent décentralisé
  • 13.
    13 3 typologies decas d’usages REGISTRE MEDIACHAIN PROPRIETE INTELLECTUELLE POUR LES MEDIAS TRANSFERT D’ACTIFS BITLAND TRANSFERT DE PROPRIETÉ SMART CONTRACTS LENDERBOT MICRO-ASSURANCE Cadastre pour l’Afrique 80% des biens non enregistrés Impact pour le e-commerce Registre global des droits Proteger les artistes Racheté par Spotify en 2017 Déclenchement instantané Faciliter les déclarations Assurance entre particuliers landing.bitland.world mediachain.io stratumn & deloitte qui exécute des contrats intelligentsimmuableregistre sécurisé transparent décentralisé
  • 14.
    14 OpenBazaar, la marketplaceblockchainisée Réseau décentralisée de commerce en ligne (en bitcoin) sans commissions ni restrictions « Notre objectif est que les acheteurs et vendeurs aient une expérience meilleure en utilisant OpenBazaar qu’en utilisant les anciennes plates-formes centralisées. » En cas de litige ? ‘2-or-3 multisig’ : 3 personnes doivent etre d’accords pour accepter le transfert ‘bitcoin’, un vendeur, un acheteur et un modérateur Frais de modération: 2% https://blog.openbazaar.org/how-moderators-and-dispute-resolution-work-in-openbazaar
  • 15.
    15 Sous le capotblockchain : décryptage du fonctionnement de la blockchain OU
  • 16.
  • 17.
    17 Fonctionnement intéractif dela blockchain https://anders.com/blockchain
  • 18.
    18 Cartographie des blockchainsmajeures Description Blockchain généraliste 2016 Blockchain généraliste 2015 Blockchain de paiement 2009 Type Permissioned Permissioned Permissionless Permissionless Gouvernance Linux Foundation Enterprise Ethereum Alliance Développeurs Bitcoin Monnaie Aucune Ether BTC Gratification mineurs N/A Oui Oui Consensus Byzantine fault-tolerance Mining (Preuve d’enjeu) Mining (Preuve de travail) Réseau Privé (par défaut) ou Public Public (par défaut) ou Privé Public Anonymat De Ouvert à Privé Ouvert Ouvert Smart Contrats Multiples langages de programmation Langage ‘Solidity’ Possible, mais pas évident
  • 19.
    19 Maturité du développementBlockchain Avons-nous tous les outils en 2017 ? Web 2.0 Web 3.0 (dApps) en 2014 Web 3.0 (dApps) en 2017 Maturité Calcul à l’échelle Amazon EC2 ? Ethereum, Truebit En cours Stockage fichiers Amazon S3 ? IFPS/Filecoin, Storj En cours Données externes API 3rd parties ? Oracles (Augur) En cours Monétisation Pub ? Modèle de token Prêt Paiement Carte de crédit, paypal Bitcoin Ethereum, Bitcoin Prêt
  • 20.
    20 Focus sur lesapplications décentralisées (dApps) Un app store déjà disponible https://dapps.ethercasts.com/
  • 21.
    21 Développer une dAppEthereum Anatomie : app classique
  • 22.
    22 Développer une dAppEthereum Anatomie : app decentralisée
  • 23.
    23 Développer une dAppEthereum Anatomie : app decentralisée
  • 24.
    24 Développer une dAppde vote UI https://github.com/maheshmurthy/ethereum_voting_dapp
  • 25.
    25 Développer une dAppde vote Chaine de développement 1/ Blockchain en local • Ligne de commande: goethereum (geth) ou ethereumjs-testrpc ou ethereum-cpp • Mist pour la gestion du Wallet 2/ Librairies • Node.js pour node et npm • Web3.js (connection à la BC en JSON-RPC) • Solidity pour le dév des Smart Contract • Truffle pour accélérer le dev (scaffolding, tests unitaires) 3/ Outils • Browser-solidity : https://ethereum.github.io/browser-solidity/ • Ethereum Studio : https://live.ether.camp 4/ Process de dev • Développer le smart contract en Solidity: compiler et déployer dans la blockchain de test • Développer la dApp en HTML/JS: tester avec le smart contract déployé dans la blockchain de test • Déployer le smart contract dans la blockchain live, tester puis livrer la dApp
  • 26.
    26 Développer une dAppde vote 1/ Smart Contract pragma solidity ^0.4.6; // We have to specify what version of compiler this code will compile with contract Voting { /* mapping field below is equivalent to an associative array or hash. */ mapping (bytes32 => uint8) public votesReceived; bytes32[] public candidateList; /* This is the constructor which will be called once when you deploy the contract to the blockchain. When we deploy the contract, we will pass an array of candidates who will be contesting in the election */ function Voting(bytes32[] candidateNames) { candidateList = candidateNames; } // This function returns the total votes a candidate has received so far function totalVotesFor(bytes32 candidate) returns (uint8) { if (validCandidate(candidate) == false) throw; return votesReceived[candidate]; } // This function increments the vote count for the specified candidate. function voteForCandidate(bytes32 candidate) { if (validCandidate(candidate) == false) throw; votesReceived[candidate] += 1; } function validCandidate(bytes32 candidate) returns (bool) { (…) } } Voting.sol
  • 27.
    27 Développer une dAppde vote 2/ Déploiement SmartContract node // Connexion à la blockchain > Web3 = require('web3') > web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); // Visualisation des comptes utilisateurs > web3.eth.accounts ['0x9c02f5c68e02390a3ab81f63341edc1ba5dbb39e', '0xc26bda5f3370bdd46e7c84bdb909aead4d8f35f3'] // Compilation du contrat >code = fs.readFileSync('Voting.sol').toString() >contract = web3.eth.compile.solidity(code) // Deploiement du contrat >VotingContract = web3.eth.contract(contract.info.abiDefinition) >deployedContract = VotingContract.new(['Rama','Nick','Jose'],{data: contract.code, from: web3.eth.accounts[0], gas: 4700000}) // Récupération du contrat dans la BC >contractInstance = VotingContract.at(deployedContract.address) // 2 Votes pour Rama >contractInstance.voteForCandidate('Rama', {from: web3.eth.accounts[0]}) >contractInstance.voteForCandidate('Rama', {from: web3.eth.accounts[0]}) // Recupération des résultats >contractInstance.totalVotesFor.call('Rama').toLocaleString() '2' En ligne de commande
  • 28.
    28 Développer une dAppde vote 3/ Code HTML <!DOCTYPE html> <html> <head> <title>Hello World DApp</title> <link href=‘//fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'> <link href=‘//maxcdn.bootstrapcdn.com/bootstrap/bootstrap.min.css' rel='stylesheet' type='text/css'> </head> <body class="container"> <h1>A Simple Hello World Voting Application</h1> <div class="table-responsive"> <table class="table table-bordered"> <thead><tr><th>Candidate</th><th>Votes</th></tr></thead> <tbody> <tr><td>Rama</td><td id="candidate-1"></td></tr> <tr><td>Nick</td><td id="candidate-2"></td></tr> <tr><td>Jose</td><td id="candidate-3"></td></tr> </tbody> </table> </div> <input type="text" id="candidate" /> <a href="#" onclick="voteForCandidate()" class="btn btn-primary">Vote</a> </body> <script src="https://cdn.rawgit.com/ethereum/web3.js/develop/dist/web3.js"></script> <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script> <script src="./index.js"></script> </html> index.html
  • 29.
    29 Développer une dAppde vote 4/ Code JS web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); abi = JSON.parse('[{"constant":false,"inputs":[{"name":"candidate","type":"bytes32"}],"name":"totalVotesFor","o utputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs »: (…) [{"name":"candidateNames","type":"bytes32[]"}],"payable":false,"type":"constructor"}]') VotingContract = web3.eth.contract(abi); contractInstance = VotingContract.at('0x2a9c1d265d06d47e8f7b00ffa987c9185aecf672'); candidates = {"Rama": "candidate-1", "Nick": "candidate-2", "Jose": "candidate-3"} function voteForCandidate(candidate) { candidateName = $("#candidate").val(); contractInstance.voteForCandidate(candidateName, {from: web3.eth.accounts[0]}, function() { let div_id = candidates[candidateName]; $("#" + div_id).html(contractInstance.totalVotesFor.call(candidateName).toString()); }); } $(document).ready(function() { candidateNames = Object.keys(candidates); for (var i = 0; i < candidateNames.length; i++) { let name = candidateNames[i]; let val = contractInstance.totalVotesFor.call(name).toString() $("#" + candidates[name]).html(val); } }); index.js
  • 30.
    30 Limites de lablockchain SECURITE • Obsolescence des algorithmes cryptographiques utilisés • "Code is Bug" TECHNIQUE • Passage à l’échelle DROIT • Responsabilité des clés privées sans autorité de certification identifiée • Reconnaissance juridique des smart contracts http://www.usine-digitale.fr/article/la-blockchain-pose-de-serieux-problemes-de- confiance-de-droit-et-de-securite.N401527
  • 31.
    31 Smart Ideas For YourMoney A cool way to represent your information Comment démarrer ? Les clés pour bâtir vos premiers cas d’usage La blockchain.
  • 32.
    32 Comprendre où lablockchain apportera de la valeur Et comment … 1/ Réfléchir Trouver le cas d’usage 2/ Dompter POC 3/ Expérimenter Essai terrain 4/ Se lancer Mise en production • Réunir l’équipe • Mesurer la valeur • Evaluer la faisabilité • Fixer les KPIs de succès • Réaliser un premier cas • Découvrir les technologies • Naviguer dans l’écosystème • Trouver les partenaires • Intégrer un consortium • Valider le business model • Itérer sur la roadmap stratégique
  • 33.
    33 8 caractéristiques pourchoisir le cas d’usage Base de données De multiples contributeurs Absence de confiance Désintermédiation Présence de transactions liées Présence de règles métiers Présence de validateurs Présence d’actifs Le cas d’usage devrait respecter au moins trois de ces caractéristiques http://www.multichain.com/blog/2015/11/avoiding-pointless-blockchain-project/
  • 34.
    34 Blockchain : hyperhype ou pas ? Une technologie à fort potentiel, mais qui doit encore gagner en maturité
  • 35.
    35 Un écosystème bouillant Source: Fintech Control Tower, BCG se structurant autour des grandes familles de cas d’usages
  • 36.
    36 Le bon timingpour se lancer
  • 37.
    37 Révolution ou évolution «Le mode de fonctionnement coopératif d’Internet n’est pas conçu pour offrir des services commerciaux. » 1994. rapport Théry, intitulé « Les autoroutes de l’information » https://philippesilberzahn.com/2013/01/07/les-trois-erreurs-prediction-rapport-thery-autoroutes-information-1994/
  • 38.
  • 39.