Ethereum

Une plateforme informatique décentralisée basée sur la blockchain

Une blockchain
Une plateforme smart contracts
Un langage
Des outils de développement
Le frontend
Des outils de debug et de tests
Des infrastructures
Avantages
Limitations
Le futur

La blockchain : un registre public, anonyme et infalsifiable

Registre des transactions : un fichier qui contient toutes les informations depuis le premier bloc
Théories des jeux : l'ensemble de règles de consensus
P2P: un réseau de noeuds parlant le protocole et gardant une trace des transactions
TCP/IP : l'infrastructure Internet

Un peu de crypto : les adresses EOA

  • Clé privée de 32 octets
  • Clé publique ECDSA 512
  • Addresse dérivée de la clé publique (20 derniers octets de l'empreinte Keccak-256)

Une chaîne immutable

  • Chaque noeud a une copie de la chaîne.
  • Chaque bloc a un espace de stockage limité.
  • Chaque bloc contient le hash du bloc précédent.
  • Une modification malicieuse de la chaîne provoque l'exclusion du noeud incriminé.
  • Difficulté (impossibilité) de modifier l'information.

Une plateforme smart contracts

Smart contracts : des opérations plus compliquées que des simples transactions
Registre des transactions : un fichier qui contient toutes les informations depuis le premier bloc
Théories des jeux : l'ensemble de règles de consensus
P2P: un réseau de noeuds parlant le protocole et gardant une trace des transactions
TCP/IP : l'infrastructure Internet
  • Contract Account, code machine sur la blockchain.
  • Ethereum virtual machine, sur tous les noeuds.
  • Turing complet, déterministe, isolée.
  • Instructions exécutées par tous les noeuds.
  • Notion de gaz pour inciter à l'optimisation, empêcher les exécutions trop longues et rémunérer les mineurs.
  • Gaz: Ether (ETH). Paiement des utilisateurs de la plateforme aux machines exécutant les requêtes.

Un langage : Solidity


            pragma solidity ^0.4.22;
            /* Un langage objet */
            contract Mortal {
                address owner;

                constructor() public { owner = msg.sender; }
                function kill() public { if (msg.sender == owner) selfdestruct(owner); }
            }

            /* De l'héritage */
            contract AramisGreeter is Mortal {
                string private greeting;

                constructor() public {
                    greeting = "10ème journée - Aramis 2018" ;
                }

                function greet() public constant returns (string) {
                    return greeting;
                }
            }
         

Des outils de développement

Le frontend

Du javascript : web3.js

              var Web3 = require('web3');
              web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/cHbRZrapth8QaiDXVxyK"));

              abi=[{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]

              var AramisGreeter = web3.eth.contract(abi);
              var myContractInstance = AramisGreeter.at('0xa317e1e75379ccab2451d7a506dde86763fe5c86');
              var greet = myContractInstance.greet.call();

              document.getElementById('greet').innerText = greet;
            
 <span id="greet"><span> 
  • Truffle+webpack et/ou react
  • Truffle Drizzle: collection de libraires frontend (Redux)
Metamask : coffre-fort pour les comptes.

Des outils de debug et de tests

Truffle :
  • framework de test (en JS ou Solidity).
  • debugger.
  • chaînes de test locales : testrpc, ganache.
Remix IDE et debugger https://remix.ethereum.org

Chaînes de tests

  • ropsten
  • rinkeby/kovan

Des infrastructures

Avantages

  • véritable décentralisation
  • réseau résilient
  • open source
  • gouvernance
  • très forte communauté
  • dynamisme

Limitations

  • défauts de jeunesse
  • bugs: DAO et Parity MultiSigWallet * 2
  • POW
  • lent : 8-10 tx/seconde, ~800000 tx/jour
  • un nouveau langage à apprendre
  • spéculation et bruit !

Le futur

  • évolutions du protocole : casper, sharding
  • state channel : μraiden et raiden
  • chaîne fille : plasma
  • ENS, IPFS, swarm
  • un nouveau langage: vyper

Merci !