Upload
mehdi-amari
View
117
Download
2
Embed Size (px)
Citation preview
Développements de smart contract sur Ethereum
30 mars 2017
Mehdi Amari
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?
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
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
5
Qu’allons-nous voir aujourd’hui ?
Compilation Déploiement
Propagation surtous les nodes
Intéractions et authentifications
1
2 3
4
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
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
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
9
2 - La compilation et le déploiement (2/4)
Déploiement avec browser solidity & metamask
10
2 - La compilation et le déploiement (3/4)
Déploiement via un node en localGeth: GoParity: Rust
11
2 - La compilation et le déploiement (4/4)
Contrat associé à une adresse sur ethereum, en mode stateless.
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
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
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
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
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
Développement de smart contract sur Ethereum
MERCI DE VOTRE ATTENTION !
Questions ?