La Blockchain dans le contexte Business pour les entreprises est précieuse pour les entités qui effectuent des transactions entre elles. Grâce à la technologie de grand livre distribué, les participants autorisés peuvent accéder aux mêmes informations en même temps pour améliorer l'efficacité, renforcer la confiance et éliminer les frictions. La Blockchain offre ces avantages basés sur quatre attributs uniques à la technologie :
Consensus : les registres partagés ne sont mis à jour qu'après la validation de la transaction par tous les participants concernés.
Réplication : une fois qu'un bloc - l'enregistrement d'un événement - est approuvé, il est automatiquement créé dans tous les registres pour tous les participants de ce canal. Chaque partenaire du réseau voit et partage une seule « réalité de confiance » des transactions.
Immuabilité : plus de blocs peuvent être ajoutés, mais pas supprimés, de sorte qu'il existe un enregistrement permanent de chaque transaction, ce qui augmente la confiance entre les parties prenantes.
Sécurité : seules les entités autorisées sont autorisées à créer des blocs et à y accéder. Seuls les partenaires de confiance reçoivent l'autorisation d'accès.
Blockchain est l’architecture ou le paradigme sous-jacent à Ethereum, et les contrats intelligents (Smart Contracts) sont issus de l’environnement Ethereum.
Les contrats intelligents sont simplement des programmes stockés sur une Blockchain qui s'exécutent lorsque des conditions prédéterminées sont remplies. Ils sont généralement utilisés pour automatiser l'exécution d'un accord afin que tous les participants puissent être immédiatement certains du résultat, sans intervention d'un intermédiaire ni perte de temps. Ils peuvent également automatiser un flux de travail, déclenchant l'action suivante lorsque les conditions sont remplies.
Dans cette formation, vous allez vous familiariser avec les notions fondamentales de fonctionnement des Smart Contracts, l’un des outils qui se font au sein de d’une Blockchain.
3. Une formation
Introduction
1. Introduction de la notion des Smart Contracts
2. Installer et configurer le Framework Truffle
3. Installer et configurer le client Blockchain Ganachi-CLI
4. Installer le compilateur Solc
5. Explorer Remix IDE
6. Installer MetaMask
7. Développer votre Smart Contract avec Solidity Créer votre propre
Token avec Solidity
8. Implémenter un DNS décentralisé avec Solidity
Conclusion
Plan de la formation
4. Une formation
Toute personne désireuse de savoir le fonctionnement de
la Blockchain et plus précisément la notion des Smart
Contracts
Responsable innovation / digital voulant implémenter des
projets Blockchain en se basant sur les Smart Contracts
Architecte et développeur désirant savoir plus sur cette
technologie pour développer des Smart Contracts
Public concerné
9. Une formation
Caractéristiques techniques de la machine Lab
Pour une configuration optimale
Windows 10 Professionnel (ou bien un Linux ou Mac)
Système d’exploitation 64 bits, processeur x64
Processeur Intel(R) Core(TM) i5-4340M CPU @
2.90GHz
Mémoire RAM installée 16,0 Go
10. Une formation
Les produits logiciels nécessaires à la
formation
Truffle Suite : Outils Open Source pour Blockchain
MetaMask
Embarquer
Web3j
Prysm
Projet Remix
11. Une formation
Liens de téléchargements
Vous trouverez tous les liens des produits
logiciels dans la rubrique Ressources de ce
cours
16. En gros, un grand avenir pour les Smart Contracts
Une formation
La Blockchain pourrait bien être la technologie phare dans de nombreux
autres domaines
La banque
Les paiements et les transferts d’argent
La cybersécurité
L’authentification des diplômes
Le vote
La location ou vente de voitures
L’internet des objets
Les contrats intelligents
Les prévisions
La musique en ligne
Le co-voiturage
Le trading en ligne
19. Une formation
Ethereum est une plate-forme blockchain
décentralisée qui établit un réseau peer-to-peer qui
exécute et vérifie en toute sécurité le code
d'application, appelé contrats intelligents
Les contrats intelligents permettent aux participants
d'effectuer des transactions entre eux sans autorité
centrale de confiance
L’Ethereum
20. Une formation
Le programmeur Vitalik Buterin
découvre les cryptomonnaies avec le Bitcoin en 2011 et
décide de créer un nouveau protocole utilisant un langage
Turing-Complet plutôt que d'alourdir la structure du
Bitcoin, l'idée d'Ethereum naissait
Un article intéressant sur le créateur d’Ethereum se trouve
dans la page ressources de ce cours
Origine et lancement
21. Une formation
Ethereum est un accès ouvert à la monnaie numérique et à
des services conviviaux pour tout le monde, qui que vous
soyez
C'est une technologie construite par la communauté
derrière la cryptomonnaie ether (ETH) et des milliers
d'applications que vous pouvez utiliser dès aujourd'hui
Présentation de Ethereum
22. Services bancaires pour tous
Un internet plus respectueux de la vie privée
Un réseau P2P
Résistant à la censure
Garanties de commerce
La compatibilité avant tout
Ethereum promet ces postulats
23. Une formation
Solidity, Kesako ?
Solidity est un langage de haut niveau orienté objet
pour la mise en œuvre de contrats intelligents
Les contrats intelligents sont des programmes qui
régissent le comportement des comptes dans l'état
Ethereum
24. Une formation
Présentation de Solidity
Solidity est un langage conçu pour cibler la machine
virtuelle Ethereum (EVM)
Il est influencé par C++, Python et JavaScript
Solidity est typé statiquement, prend en charge l'héritage,
les bibliothèques et les types complexes définis par
l'utilisateur, entre autres fonctionnalités
Avec Solidity, vous pouvez créer des Smart Contracts pour
des utilisations telles que le vote, le financement
participatif, les enchères à l'aveugle et les portefeuilles
multi-signatures
26. Une formation
La Suite Truffle sont un ensemble d’outils Open
Source pour Blockchain
Pour info : le terme Open Source réfère à la
particularité d’un logiciel qui est un code conçu pour
être accessible au public
n'importe qui peut voir, modifier et distribuer le
code à sa convenance
La suite Truffle
27. Une formation
Dans notre machine Lab, nous avons tous, ou
quelques un, une machine Windows 10
Vu le fait que Windows s’est ouvert aux applications
Open Source, il est possible d’installer la suite Truffle
sur notre Lab Windows 10
La suite Truffle sous Windows
28. Une formation
Vous n’avez pas besoin de connaissances particulière pour suivre
ce tutoriel, nous allons voir ensembles tout ce dont vous aurez
besoin pour développer votre premier smart-contract avec
Solidity et Truffle
Malgré tout, des spécifications techniques sont requises,
notamment un ordinateur possédant
Window, MacOS
NodeJS > la version actuelle est node-v16.15.0-x64
Prérequis
29. Mettre en place notre environnement via le lancement en mode Administrateur le Power Shell de
Windows
Préparation de l’environnement
30. Commençons par installer Truffle, lancez simplement dans une console la commande suivante
npm install truffle -g
Installation de Truffle
31. Projet HelloWorld
Une fois Truffle installé, nous pouvons créer notre projet HelloWorld
mkdir HelloWorld-Tutoriel
33. Une formation
La suite Truffle sous Windows
Vous voilà avec un projet Truffle, qui contient plusieurs fichiers et
dossiers prêts à l’emploi que nous allons voir ensemble
le dossier contracts qui accueillera nos futurs smart-contracts,
avec l’extension .sol pour Solidity
le dossier migrations qui contiendra les différents script de
déploiement sur la blockchain
test qui nous permettra de réaliser des tests unitaires sur nos
contrats
et enfin truffle-config que l’on utilisera notamment pour
définir la/les blockchains sur lesquels déployer nos contrats
35. Pour notre Lab en version Linux, nous allons le faire avec la distribution Linux UBUNTU
Pour rendre l’expérience très simple, nous avons deux moyens
soit via l’installation d’ubuntu via le logiciel Oracle VirtualBox
Soit en passant par une installation d’Ubuntu 20.04 LTS sous Windows avec WSL
La suite Truffle sous Linux
36. Une formation
Pour des besoins de grande mémoire qui nécessite un
espace intantiné plus conséquent selon la machine de tout
un chacun, j’ai choisi la façon d’installation d’Ubuntu 20.04
LTS sous Windows avec WSL, qui est plus légère et qui ne
prend pas de mémoire sur sa machine
Une fiche explicative de l’installation Utilisation
d’Ubuntu 20.04 LTS sous Windows avec WSL, dans la
rubrique ressources, sous le nom : utilisation d’Ubuntu
20.04 LTS sous Windows avec WSL.pdf
La suite Truffle sous Linux
37. Une formation
Nous allons nous concentrer, après installation totale
via WSL sur Windows, sur le point le plus important,
c’est-à-dire, l’installation de la suite Truffle
Installation de la suite Truffle sous Linux
40. Une formation
Présentation Ganache
Ganache est une Blockchain personnelle pour le
développement Ethereum que vous pouvez utiliser pour
déployer des Smart contracts, développer vos applications
et exécuter des tests
Il est disponible à la fois comme application de bureau et
comme outil de ligne de commande (anciennement connu
sous le nom de TestRPC)
Ganache est disponible pour Windows, Mac et Linux
41. Une formation
Téléchargez à partir de la source
https://trufflesuite.com/ganache/
Installation Ganache sous Windows
43. Une formation
Installation des paquets Ganache depuis la source
https://github.com/trufflesuite/ganache-ui/releases
Commandes
$ wget https://github.com/trufflesuite/ganache-
ui/releases/download/v2.5.4/ganache-2.5.4-linux-x86_64.AppImage
$ sudo ./ganache-2.5.4-linux-x86_64.AppImage --appimage-extract-and-
run --disable-gpu-sandbox
Ou tout simplement :
npm install -g ganache
Installation de Ganache-CLI et ses dépendances
46. Une formation
On se connecte via notre PowerShell, en basculant
en batch, pour lancer la commande
$ sudo npm install -g solc
Etape 1
47. Une formation
On continue avec ces commandes
$ sudo add-apt-repository ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install solc
Etape 2
48. Une formation
Nous revenons à notre répertoire HelloWorld-Tutoriel, et
vue que nous avons créer suite à Truffle et à Ganache, et
nous tappons la commande
$ sudo truffle migrate
Etape 3
49. Une formation
Nous allons continuer les étapes en suivant les étapes de
https://github.com/ethereum/solc-js
Etape 4
50. Une formation
Utilisez npm” pour un moyen pratique et portable
d’installer `solcjs”, un compilateur Solidity
Le programme `solcjs a moins de fonctionnalités que le
compilateur
Le projet solc-js est dérivé du projet C++ solc
solc-js peut être utilisé directement dans les projets
JavaScript (comme Remix)
Veuillez vous référer au dépôt solc-js pour les instructions
$ npm install -g solc
Notes
54. Une formation
Hardhat est un environnement de développement pour compiler,
déployer, tester et déboguer votre logiciel Ethereum
Il aide les développeurs à créer des contrats intelligents et des
dApps localement avant de les déployer sur la chaîne en direct
À l'intérieur de notre projet hello-world, exécutez
$ npm install --save-dev hardhat
$ nethereum-waffle pm install --save-dev
@nomiclabs/hardhat-waffle chai @nomiclabs/hardhat-ethers
ethers
Créer HARDHAT PROJECT
$ npx hardhat
Comprendre le fichier helloWorld.sol
60. Une formation
Il s'agit de notre premier contrat intelligent, nous le
déploierons sur un réseau de test local afin qu'il ne
vous coûte rien de le déployer et de jouer autant
que vous le souhaitez
Introduction
61. Une formation
Rédaction de notre contrat
La première étape consiste à visiter Remix et à créer
un nouveau fichier
Dans la partie supérieure gauche de l'interface
Remix, ajoutez un nouveau fichier et entrez le nom
de fichier souhaité
63. Une formation
Déploiement de notre contrat
Comme nous avons écrit notre tout premier contrat
intelligent, nous allons maintenant le déployer sur la
blockchain pour pouvoir jouer avec
Déployer le contrat intelligent sur la blockchain
consiste en fait à envoyer une transaction contenant
le code du contrat intelligent compilé sans spécifier
de destinataires
64. Nous allons d'abord compiler le contrat en cliquant sur l'icône de compilation
sur le côté gauche
Déploiement de notre contrart - première étape
65. Déploiement de notre contrart - deuxième étape
Cliquez ensuite sur le bouton compiler
67. Une formation
Introduction
Ethereum est une plate-forme de crypto-monnaie
sur le marché tout comme Bitcoin
Il s’agit d’une blockchain open source et
décentralisée qui travaille sur des contrats
intelligents
Il a sa propre crypto-monnaie connue sous le nom
d’éther
Les contrats intelligents dans Ethereum sont écrits
en langage Solidity
68. Une formation
TestRPC L’Ethereum
TestRPC est comme un émulateur manuel pour
blockchain
Il fournit une interaction blockchain sans s’exécuter
sur un nœud Ethereum réel
Il fournit également toutes les fonctionnalités
nécessaires au test de votre blockchain
Il est basé sur Node.js
69. Une formation
Web3js
Web3.js est une API JavaScript basée sur Ethereum
qui nous permet d’interagir avec un nœud Ethereum
local ou distant en utilisant différents serveurs tels
que HTTP
Il interagit avec la blockchain Ethereum et peut
récupérer des données de la blockchain selon les
besoins du développeur
78. Déployer votre smart contract en Test
Ropsten avec Remix et MetaMask
Une formation
Youssef LRHCHA
79. Une formation
Introduction
Nous allons voir comment déployer un contrat
intelligent sur la plateforme Ethereum
Nous créerons ce contrat sur la chaîne de blocs test
d’Ethereum appelée Ropsten
Ainsi vous n’aurez pas besoin de dépenser de l’ether
pour déployer et utiliser votre contrat puisque nous
utiliserons des ethers tests qui n’ont pas de valeurs
80. Une formation
Les étapes
Étape 1 : Obtenir de l’ether sur Ropsten
avec MetaMask
Étape 2 : Rédiger un contrat intelligent sur
Remix
Étape 3 : Déployer un contrat intelligent sur
la chaîne de blocs
92. Les mémoires dans la machine EVM
Stack Memory
Consiste en des données poussées et extraites de la Pile EVM
Disponible dans le scope de la fonction
Memory
Semblable à la mémoire Heap dans les programmes normaux
Disponible dans le cadre de l'appel Smart Contract
Storage
Semblable au stockage externe dans les programmes normaux
Persiste entre les appels Smart Contract
Calldata
Mémoire spéciale pour le stockage des métadonnées l'appel de fonction
Une formation
93. Les types de mémoires
La mémoire solidity est représentée par un
tableau linéaire d'octets
L'arithmétique permet de manipuler des
éléments à l'intérieur de la mémoire
Exemple
les éléments d'un tableau
Une formation
94. Opérations de traitement de la mémoire
mload(address)
récupérer la valeur à une adresse donnée
mstore(adresse, valeur)
valeur du magasin à une adresse donnée
Msize
Taille actuelle de la mémoire
Peut être utilisé pour l'attribution de nouvelles
éléments de la mémoire
Une formation
95. Les types de Storage
Le stockage se fait sous la forme d'un Merkle-Patricia Tree
Les éléments ne peuvent pas être consultés de façon linéaire
comme dans le type de mémoire
Chaque variable en mémoire, a un slot et un offset, où elle peut
être trouvée
Pour une variable x, ils peuvent être accessibles sous les noms
x_slot et x_offset
sload(slot + offset) - valeur de la charge provenant du
stockage
sstore(slot + offset, valeur) - stocker la valeur dans le stockage
Une formation
96. Le type Calldata
Mémoire read-only spéciale pour le stockage des métadonnées
de fonction
Signature de la fonction, paramètres...
L'endroit où se trouvent les msg.sender et autres variables
spéciales similaires sont stocké également
Copié en mémoire sur les appels de fonction publique
Non copié et en lecture seule sur les appels de fonction externes
Par conséquent, l'appel de fonctions externes lors du passage de
tableaux de grandes données est bénéfique
Une formation
119. Une formation
L'addition, la soustraction et la multiplication ont la
sémantique habituelle, avec deux modes différents en ce
qui concerne la sur- et débordement
Par défaut, toute l'arithmétique est vérifiée pour le
dépassement inférieur ou supérieur, mais cela peut être
désactivé à l'aide du bloc non coché, ce qui entraîne dans
l'arithmétique d'enveloppement
Addition, soustraction et multiplication
120. Une formation
L'expression -x est équivalente à (T(0) - x) où T est le type de x
Il ne peut être appliqué qu'aux types signés
La valeur de -x peut être positif si x est négatif
Il y a une autre mise en garde résultant également de la
représentation en complément à deux
Si vous avez int x = type(int).min;, alors -x ne correspond
pas à la plage positive
Cela signifie que unchecked {assert(-x == x); }
fonctionne et l'expression -x lorsqu'elle est utilisée en mode
coché entraînera une assertion défaillante
Addition, soustraction et multiplication
121. Une formation
Comme le type du résultat d'une opération est toujours le
type de l'un des opérandes, la division sur des entiers
donne toujours un nombre entier
Dans Solidity, la division arrondit vers zéro
Cela signifie que int256(-5) / int256(2) == int256(-2)
Notez qu'en revanche, la division sur les littéraux (literals)
donne des valeurs fractionnaires de précision arbitraire
Division
122. Une formation
La division par zéro provoque une erreur de de type Panic
error
Cette vérification ne peut pas être désactivée en
décochant { ... }
L'expression type(int).min / (-1) est le seul cas où la
division provoque un débordement
En arithmétique vérifiée mode, cela entraînera une
assertion défaillante, tandis qu'en mode wrapping, la
valeur sera type(int).min
Remarque
123. Une formation
L'opération modulo a % n donne le reste r après la division de
l'opérande a par l'opérande n, quand q = int(a / n) et r = a - (n *
q)
Cela signifie que modulo donne le même signe que son opérande
gauche (ou zéro) et a % n == -(-a % n) vaut pour moins a
— int256(5) % int256(2) == int256(1)
— int256(5) % int256(-2) == int256(1)
— int256(-5) % int256(2) == int256(-1)
— int256(-5) % int256(-2) == int256(-1)
Modulo
124. Une formation
Modulo avec zéro provoque une erreur de type
Panic error
Cette vérification ne peut pas être désactivée en
décochant { ... }
Remarque
125. Une formation
L'exponentiation n'est disponible que pour les types non
signés dans l'exposant
Le type résultant d'une exponentiation est toujours égal au
type de la base
Veuillez veiller à ce qu'il soit suffisamment grand pour
contenir le résultat et vous préparer à une éventuelle
affirmation défaillances ou comportement d'emballage
Exponentiation
126. Une formation
En mode coché, l'exponentiation n'utilise que l'opcode
exp relativement meilleur pour les petites bases
Pour les cas de x**3, l'expression x*x*x pourrait être
meilleure
Dans tous les cas, des tests de coût du gaz et l'utilisation
de l'optimiseur sont conseillés
Remarque
127. Sécuriser son code contre
les overflow/underflow avec SafeMath
Une formation
Youssef LRHCHA
133. Certaines variables et fonctions spéciales existent
toujours dans l’espace de nom global, et sont
principalement utilisées pour fournir des
informations sur la blockchain, ou sont des fonctions
utilitaires d’usage général
Une formation
Introduction
134. Les variables spéciales
blockhash(uint blockNumber) retourne (bytes32) : hachage du bloc
donné si blocknumber est l’un des 256 blocs les plus récents ; sinon
retourne zéro
block.basefee (uint) : la redevance de base du bloc actuel (EIP-3198 et
EIP-1559)
block.chainid (uint) : identifiant de la chaîne actuelle
block.coinbase (address payable) : adresse du mineur du bloc actuel
block.difficulty (uint) : difficulté actuelle du bloc
block.gaslimit (uint) : limite de gaz du bloc actuel
block.number (uint) : numéro du bloc actuel
Une formation
135. Les variables spéciales - Suite
block.timestamp (uint) : horodatage du bloc actuel en secondes depuis
l’époque unix
gasleft() returns (uint256) : gaz résiduel
msg.data (bytes calldata) : données d’appel complètes
msg.sender (address) : expéditeur du message (appel en cours)
msg.sig (bytes4) : les quatre premiers octets des données d’appel
(c’est-à-dire l’identifiant de la fonction)
msg.value (uint) : nombre de wei envoyés avec le message
tx.gasprice (uint) : prix du gaz de la transaction
tx.origin (address) : expéditeur de la transaction (chaîne d’appel
complète)
Une formation
136. L’interface binaire d’application de contrat
ABI est le moyen standard d’interagir avec les contrats
dans l’écosystème Ethereum, à la fois depuis l’extérieur de
la blockchain et pour l’interaction entre les contrats, de
l’extérieur de la blockchain que pour l’interaction entre
contrats
Les données sont codées en fonction de leur type, comme
décrit dans cette spécification, l’encodage n’est pas
autodécrit et nécessite donc un schéma pour être décodé
Une formation
137. Fonctions de codage et de décodage de l’ABI
abi.decode(bytes memory encodedData, (...)) retourne (...) :
ABI-décode les données, tandis que les types sont donnés entre
parenthèses comme deuxième argument. Exemple : (uint a, uint[2]
memory b, bytes memory c) = abi.decode(data, (uint, uint[2],
bytes))
abi.encode(...) returns (bytes memory) : ABI-encode les
arguments donnés
abi.encodePacked(...) returns (bytes memory) : Effectue
l’encodage emballé des arguments donnés
Notez que l’encodage emballé peut être ambigu !
Une formation
138. Fonctions de codage et de décodage de l’ABI - Suite
abi.encodeWithSelector(bytes4 selector, ...) retourne (bytes memory)
ABI-encode les arguments
donnés en commençant par le deuxième et ajoute en préambule le
sélecteur de quatre octets donné
abi.encodeWithSignature(string memory signature, ...) retourne
(bytes memory) : Équivalent à
abi.encodeWithSelector(bytes4(keccak256(bytes(signature))), ...)
abi.encodeCall(function functionPointer, (...)) retourne (bytes
memory) : ABI-encode un appel à functionPointer avec les arguments
trouvés dans le tuple
Effectue un contrôle de type complet, en s’assurant que les types
correspondent à la signature de la fonction
Le résultat est égal à abi.encodeWithSelector(functionPointer.selector, (...))
Une formation
154. La fonction assert
La fonction assert crée une erreur de type Panic(uint256),
Assert ne doit être utilisée que pour tester les erreurs internes et pour
vérifier les invariants
Un code qui fonctionne correctement ne devrait jamais créer un Panic,
même pas sur une entrée externe invalide
Si cela se produit, alors il y a un bogue dans votre contrat que vous devez
corriger
Les outils d’analyse du langage peuvent évaluer votre contrat pour
identifier les conditions et les appels de fonction qui provoquent une
panique
Une exception de panique est générée dans les situations suivantes
Le code d’erreur fourni avec les données d’erreur indique le type de
panique
Une formation
155. La fonction assert - Suite
0x00 : Utilisé pour les paniques génériques insérées par le compilateur
0x01 : Si vous appelez assert avec un argument qui évalue à false
0x11 : Si une opération arithmétique résulte en un débordement ou un
sous-débordement en dehors d’un bloc « non vérifié { …. }``
0x12 : Si vous divisez ou modulez par zéro (par exemple, 5 / 0 ou 23 % 0)
0x21 : Si vous convertissez une valeur trop grande ou négative en un type
d’enum
0x22 : Si vous accédez à un tableau d’octets de stockage qui est
incorrectement codé
0x31 : Si vous appelez .pop() sur un tableau vide
0x32 : Si vous accédez à un tableau, à bytesN ou à une tranche de tableau
à un index hors limites ou négatif (c’est-à-dire x[i] où i >= x.length ou i < 0)
0x41 : Si vous allouez trop de mémoire ou créez un tableau trop grand
0x51 : Si vous appelez une variable zéro initialisée de type fonction interne
Une formation
162. Présentation des événements Solidity
Une formation
Les événements Solidity offrent une abstraction au-dessus de la
fonctionnalité de journalisation de l’EVM, ils peuvent s’abonner et
écouter ces événements via l’interface RPC d’un client Ethereum
Ils sont des membres héritables des contrats, lorsque vous les
appelez, ils font en sorte que les arguments dans le journal de la
transaction, une structure de données spéciale dans la blockchain
Le journal et ses données d’événement ne sont pas accessibles à
partir des contrats (même pas depuis le contrat qui les a créés)
167. Une formation
Lors de sa création, chaque transaction est chargée d’une certaine quantité
de gaz, dont le but est de limiter la quantité de travail nécessaire pour
exécuter la transaction et de payer en même temps pour cette exécution
Pendant que l’EVM exécute la transaction, le gaz est progressivement
épuisé selon des règles spécifiques
Le prix du gaz est une valeur fixée par le créateur de la transaction, qui
doit payer « prix du gaz * gaz » à l’avance à partir du compte d’envoi
S’il reste du gaz après l’exécution, il est remboursé au créateur de la même
manière
Si le gaz est épuisé à un moment donné (c’est-à-dire qu’il serait
négatif), une exception pour épuisement du gaz est déclenchée, ce qui
rétablit toutes les modifications apportées à l’état dans la trame
d’appel actuelle
Présentation du Gas
168. Une formation
Considérez la plus petite unité d'éther - wei - comme un sou
Il faut tout un tas de wei pour fabriquer un éther. 10^18 wei, pour
être exact
10^9 wei est un Gwei
Gwei est le plus couramment utilisé lorsqu'il s'agit de gaz (frais de
transaction réseau)
Plutôt que de dire que votre coût en gaz est de 0,000000001
éther, vous pouvez dire 1 gwei
Que vous commenciez par wei et montiez, ou commenciez par
ether et descendiez, les dénominations suivent les préfixes
métriques standard
Le Gas
169. Une formation
Le gaz, un moyen unique de mesurer la puissance de calcul dans
Ethereum
La blockchain qui utilise le protocole Preuve de travail (PoW), ils
travaillent tous sous le même principe
Pour que vous puissiez effectuer une transaction acceptée et
incluse dans la blockchain, une commission doit être payée
pour que les mineurs prennent votre transaction et l'incluent
dans un bloc
Une fois sur place, ladite transaction sera validée par le réseau,
puis, les commandes qui sont dans la transaction seront
exécutées, alors seulement vous pourrez dire qu'elle a été
acceptée et confirmée
Mesurer la puissance de calcul dans Ethereum
181. L’utilité des oracles
Avec une blockchain comme Ethereum, tous les nœuds du réseau
sont nécessaires pour pouvoir rejouer chaque transaction et finir
avec le même résultat garanti
Les APIs introduisent des données potentiellement variables
Si vous envoyez un montant d'ETH basé sur une valeur convenue
en $USD via une API de prix, la requête retournera un résultat
différent d'un jour sur l'autre
Sans parler du fait que l'API pourrait être piratée ou dépréciée,
dans ce cas, les nœuds du réseau ne pourraient pas se mettre
d'accord sur l'état actuel d'Ethereum, brisant ainsi le consensus
Une formation
182. Résoudre ce problème
Les oracles résolvent ce problème en publiant les données
sur la blockchain
Ainsi, tout nœud rejouant la transaction utilisera les
mêmes données immuables qui ont été publiées pour que
tout le monde puisse les voir
À cette fin, un oracle comprend généralement un contrat
intelligent et des composants hors chaîne qui peuvent
interroger les APIs, puis envoyer périodiquement des
transactions pour mettre à jour les données du contrat
intelligent
Une formation
183. Le problème de L’oracle
Comme nous l'avons mentionné, les transactions Ethereum
ne peuvent accéder directement aux données hors chaîne
En même temps, compter sur une seule source de vérité
pour fournir des données n'est pas sûr et invalide la
décentralisation d'un contrat intelligent
Ceci est connu comme le problème de l'oracle
Nous pouvons éviter le problème de l'oracle en utilisant un
oracle décentralisé qui s'appuie sur de multiples sources
de données
Une formation
184. A savoir sur l’oracle
Un oracle est aussi sûr que le sont ses sources de données
Si une dapp utilise Uniswap comme oracle pour son flux
de prix ETH/DAI, il est possible pour un attaquant de
déplacer le prix sur Uniswap afin de manipuler la
compréhension du prix actuel par la dapp
Un exemple de façon de combattre cela est l'utilisation
d'un système de flux comme celui de MakerDAO qui
rassemble les données de prix à partir d'un certain nombre
de flux externes de prix au lieu de dépendre d'une seule
source
Une formation
191. Currency Tokens
Les currency Token sont construits sur leurs propres chaînes de blocs indépendantes
Ils ne sont pas basés sur des actifs, au contraire, leur valeur est directement liée au
mécanisme même qui les distribue
193. Utility Tokens
Donnent un accès futur à un produit ou un service donné, tandis que l'argent
que vous avez payé pour eux permet aux startups de lever suffisamment de
capital pour développer réellement ce produit
197. ERC-721 est une norme ouverte et gratuite qui décrit comment créer des jetons non
fongibles ou uniques sur la blockchain Ethereum
Alors que la plupart des jetons sont fongibles (chaque jeton est identique à tous les
autres jetons), les jetons ERC-721 sont tous uniques
Considérez-les comme des objets de collection rares et uniques
Qu'est-ce que l'ERC-721 ?
198. ERC-721 définit une interface minimale qu'un contrat intelligent doit implémenter
pour permettre la gestion, la propriété et l'échange de jetons uniques
Il n'impose pas de norme pour les métadonnées de jeton ni ne limite l'ajout de
fonctions supplémentaires
Le standard
200. Une formation
ERC-721 a commencé comme un brouillon EIP écrit par @dete
(https://github.com/dete ) et a pris vie pour la première fois dans
le projet CryptoKitties d'Axiom Zen
https://www.axiomzen.com/
ERC-721 est depuis sorti de la version bêta et est devenu une
spécification v1 formalisée par la communauté, prise en charge et
approuvée par un grand nombre de projets de l'ensemble de
l'écosystème crypto
Ce EIP ne serait pas possible sans le temps et le dévouement d'un
certain nombre de membres de la communauté
Le début de ERC-721
201. Une formation
Grâce aux NFT, la blockchain a été découverte par le grand public
C'est l'occasion rêvée de comprendre cet engouement en publiant
votre propre NFT (jeton ERC-721) sur la blockchain Ethereum !
Alchemy est extrêmement fier d'alimenter les plus grands noms
du monde des NFT, notamment Makersplace (qui a récemment
établi un record de ventes d'œuvres d'art numériques chez
Christie's pour 69 millions de dollars), Dapper Labs (créateurs de
NBA Top Shot & Crypto Kitties), OpenSea (la plus grande place de
marché NFT du monde), Zora, Super Rare, NFTfi, Foundation,
Enjin, Origin Protocol, Immutable, et bien d'autres
Comment écrire & déployer un NFT
205. Une formation
« Frapper un NFT » (Minting an NFT) est l'acte de publier
une instance unique de votre jeton ERC-721 sur la
blockchain
En utilisant notre contrat intelligent de la partie
Comment écrire & déployer un NFT, nous allons
développer nos compétences en Web3 et frapper un NFT
À la fin de ce tutoriel, vous serez en mesure de frapper
autant de NFT que vous, (ou votre portefeuille) le désirez !
Comment minter le NFT
206. Une formation
Félicitations ! Vous avez réussi la partie la plus courte et la
plus simple de notre série de tutoriels NFT - comment voir
votre NFT fraîchement créé sur un portefeuille virtuel
Nous utiliserons MetaMask pour cet exemple, car nous
l'avons utilisé dans les deux parties précédentes
En prérequis, vous devriez déjà avoir MetaMask installé sur
votre mobile, et ce dernier devrait inclure le compte sur
lequel vous avez miné votre NFT
vous pouvez télécharger l'application gratuitement sur iOS
ou Android
Comment voir votre NFT dans votre portefeuille
207. Implémenter un DNS décentralisé avec Solidity
Planification et design
Une formation
Youssef LRHCHA
208. Une formation
DNS dans la Blockchain ?
Le DNS, système de noms de domaine, est un service au
cœur du fonctionnement d’Internet
Il est fondamental pour le fonctionnement de nombreux
services tels que les sites web, les serveurs mails, la
téléphonie VoIP et bien d’autres
La technologie Blockchain pourrait être une évolution
considérable pour le DNS, en apportant plusieurs
avantages et nouvelles fonctionnalités
209. Une formation
Disponibilité : une indisponibilité du service DNS
entraînerait une coupure de services
Intégrité : les données présentes sur le DNS (associées à
un nom de domaine) ne doivent pas être corrompues
Confidentialité : pour protéger la vie privée des
utilisateurs, le DNS implémente différentes solutions qui
permettent d’accroître la confidentialité des requêtes DNS
Si les requêtes ne sont pas confidentielles, il est possible
d’analyser les informations de navigation des utilisateurs
Avantages du DNS
210.
211.
212. Une formation
Répondre aux exigences du DNS
Disponibilité : un réseau décentralisé et pair à pair ne
peut pas être arrêté
Intégrité : le protocole de consensus d’une Blockchain
garantit, par nature, l’intégrité des données
De plus, les données ne peuvent pas être modifiées
Confidentialité : Les requêtes effectuées pour lire les
données de la Blockchain peuvent être encapsulées dans
un canal HTTPS de la même manière que le protocole DNS
over HTTPS (DoH)
213. Une formation
A noter
Les résolveurs DoH sont aujourd’hui peu nombreux,
donc le trafic est centralisé autour d’un nombre
limité d’acteurs
L’utilisation d’une Blockchain offrirait la possibilité
d’interroger n’importe quel nœud du réseau, et
limiterait donc ainsi la centralisation et les SPF
(single point of failure)
214. Une formation
De nouveaux besoins
Ces dernières années, avec l’émergence des
technologies Blockchain, de nouveaux moyens
d’échange de valeurs se sont développés,
notamment avec la tokenisation, les crypto-actifs et
les applications décentralisées (dapps)
On parle de Web 3.0, ou de l’Internet de la valeur
215.
216. Une formation
Say Hi to ENS
L'Ethereum Name Service (ENS) est un système de nommage
distribué, ouvert et extensible basé sur la blockchain Ethereum
Le travail d'ENS consiste à mapper des noms lisibles par l'homme
comme "alice.eth" à des identifiants lisibles par machine tels que
des adresses Ethereum, d'autres adresses de crypto-monnaie, des
hachages de contenu et des métadonnées
ENS prend également en charge la «résolution inverse»,
permettant d'associer des métadonnées telles que des noms
canoniques ou des descriptions d'interface à des adresses
Ethereum
218. L’architecture d’un ENS
La résolution d'un nom dans ENS est un processus en deux étapes
Premièrement, demandez au registre quel résolveur est responsable du nom
Deuxièmement, demandez à ce résolveur la réponse à votre requête
220. Une formation
Si vous souhaitez déployer ENS sur votre
propre réseau ou déployer votre propre
copie d'ENS sur un réseau public, le parties
qui vont suivre vont vous expliquer
comment procéder
Introduction
221. Pour cet exercice, il faut utiliser Javascript, Web3 et Hardhat (https://hardhat.org/) avec npm pour simplifier les
choses
Notez bien que les frameworks existants tels que
Waffle (https://ethereum-waffle.readthedocs.io/en/latest/ens.html) et
Embark (https://framework.embarklabs.io/docs/naming_configuration.html) sont supportés pour le
déploiement ENS local
Exercice
223. Une formation
Les contrats intelligents essentiels sont publiés sous forme
de modules npm
Vous pouvez les installer dans votre projet npm avec
npm install @ensdomains/ens-contracts
Maintenant, vous pouvez les exiger dans un script de
migration comme suit
voir la documentation Truffle sur l'utilisation des
artefacts de contrat et npm pour plus de détails
Introduction
224. Les inclure dans votre contrat intelligent comme suit
Prochaine étape
225. Une formation
ENS ne contient qu'une interface
alors que ENSRegistry inclut
l'implémentation réelle
A noter
236. Une formation
Nous pouvons combiner les étapes ci-dessus dans
un seul fichier « migration file » de hardhat
Cela nous permet de déployer ENS en une seule fois
Introduction
237.
238.
239. Une formation
Pour exécuter migration file sur hardhat, exécutez la
ligne de commande suivante
npx hardhat run scripts/deploy.js
A noter
241. Une formation
Vous pouvez déployer un « test registrar » et ses
dépendances avec une seule transaction
Ceci est utile par exemple dans les tests unitaires où
vous souhaitez repartir de zéro à chaque test
Dans de nombreux cas, cela sera également plus
rapide que l'envoi d'une série de transactions
distinctes
Introduction
242. Une formation
Cela peut être fait en déployant un nouveau contrat
qui crée et configure tous les autres contrats dans
son constructeur
Le code ci-dessous crée tous les contrats ENS et
attribue le TLD eth au registraire FIFS afin que tout
domaine eth puisse être enregistré dans les tests
unitaires
A noter
246. Une formation
Installer et configurer le Framework Truffle
Installer et configurer le client Blockchain ganache-CLI
Installer le Compilateur Solc
Explorer Remix IDE
Installer MetaMask
Développer votre Smart Contract avec Solidity
Créer votre propre Token avec Solidity
Implémenter un DNS décentralisé avec Solidity
Bilan