17
Développements de smart contract sur Ethereum 30 mars 2017 Mehdi Amari

Dev smart-contract ethereum

Embed Size (px)

Citation preview

Page 1: Dev smart-contract ethereum

Développements de smart contract sur Ethereum

30 mars 2017

Mehdi Amari

Page 2: Dev smart-contract ethereum

2

Le smart contract, késako ?

Smart-contract par-ci, Smart-contract par-là: mais qu’est ce qu’un

Smart-contract ?

Comment les développer ?

Comment publier les Smart-contract dans la blockchain ?

Comment interagir avec les Smart-contract?

Page 3: Dev smart-contract ethereum

3

Prélude: Origines et définitions

Nick Szabo 1993Vérifier et exécuter une opération d’un contrat grâce à des protocoles cryptographiques d’identifications.

Apporter de la confiance dans les échanges commerciaux à l’ère du numérique.

I. Origines

Simple programme étant exécuté sur tous les nodes de la blockchain (pas forcément de notion légale)

II. Smart contract sur Ethereum

Page 4: Dev smart-contract ethereum

4

Qu’allons-nous voir aujourd’hui ?

1. Le development en solidity2. La compilation et le déploiement3. L’EVM et les nodes Ethereums

4. Interaction avec le smart contract avec Web3.js5. All-in-the-box: Truffle framework

Page 5: Dev smart-contract ethereum

5

Qu’allons-nous voir aujourd’hui ?

Compilation Déploiement

Propagation surtous les nodes

Intéractions et authentifications

1

2 3

4

Page 6: Dev smart-contract ethereum

6

1 - Le développement en solidity (1/2)

Language “Turing complet” haut-niveau inspiré du javascript.

Trés typé, supporte l’héritage.

Characteristique

Page 7: Dev smart-contract ethereum

7

1 - Le développement en solidity (2/2)

On définit des contracts (similaire à une classe):● Attribut (state)● Fonctions● Authentification ● Peuvent recevoir et envoyer

des ether.● Event (logs)

Composition d’un “contract” en solidity

Page 8: Dev smart-contract ethereum

8

2 - La compilation et le déploiement (1/4)

Transforme le code solidity en language machine pour l’EVM

Solc

...PUSH1 0x04DUP1POPPOPPUSH2 0x0424JUMPJUMPDESTPUSH1 0x40MLOADDUP1DUP3ANDDUP2MSTOREPUSH1 0x20ADDSWAP2POPPOPPUSH1 0x40....

Compilation

Page 9: Dev smart-contract ethereum

9

2 - La compilation et le déploiement (2/4)

Déploiement avec browser solidity & metamask

Page 10: Dev smart-contract ethereum

10

2 - La compilation et le déploiement (3/4)

Déploiement via un node en localGeth: GoParity: Rust

Page 11: Dev smart-contract ethereum

11

2 - La compilation et le déploiement (4/4)

Contrat associé à une adresse sur ethereum, en mode stateless.

Page 12: Dev smart-contract ethereum

12

3. L’EVM et les nodes ethereums (1/2)

Evm: Ethereum Virtual Machine

● Peut exécuter tout ce qui pouvait être exécuté par un téléphone portable de 1999.

● Consomme du gas (fees payés en ether) pour chaque opération (anti DoS, éviter les boucles infinis)

● Gère des variables d’environnement (gasPrice, blockNumber, timestamp..)

● Attend des inputs (transactions) pour modifier son états(base de données des smart contract).

● Peut être simplement lus comme une database

Page 13: Dev smart-contract ethereum

13

3. L’EVM et les nodes ethereums ( 2/2 )

Node ethereumGeth: GoParity: Rust

Source: https://medium.com/blockchannel/tools-and-technologies-in-the-ethereum-ecosystem-e5b7e5060eb9

Page 14: Dev smart-contract ethereum

14

4. Intéraction avec le smart contract avec Web3.js (1/2)

Librairies javascript pour communiquer avec un node ethereum.

web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

Ethereum compatible Javascrit API

var balance = web3.eth.getBalance("0x407d73d8a49eeb85d32cf465507dd71d507100c1");

console.log(balance.toNumber()); // 1000000000000

Page 15: Dev smart-contract ethereum

15

4. Interaction avec le smart contract avec Web3.js (2/2)

Transforme un smart contract en objet javascript, permettantles intéractions depuis une application.

var simplestorageContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"}]);

Ethereum compatible Javascrit API

var myContractInstance = simplestorageContract.at(‘0xC30025C475083D956CB66051C4f082f79338f305’);

// envoyer une transaction à une fonction

myContractInstance.set(42);

// appeler une fonction constantevar result = myContractInstance.get();

console.log(result.toNumber()) // ‘42’

Consomme du gas, car modification de l’état

Pas de gas, car pas de modification

Page 16: Dev smart-contract ethereum

16

5. All-in-the-box: Truffle framework

● Gère la compilation et déploiement● Script de test automatisé● Permet de déployer sur différentes blockchain

(testnet, mainet, privée..)● Librairies de smart contract “safe”● Met à disposition librairies● Intégration à divers environnement de dév (appli

web, appli mobile). Peut être intégré à différents environnement de développement (web, appmobile..)

Framework de développement Ethereum

Page 17: Dev smart-contract ethereum

Développement de smart contract sur Ethereum

MERCI DE VOTRE ATTENTION !

Questions ?