Livre blanc Ethereum, expliqué. Partie 1

Dans les articles de blog suivants, nous disséquerons le livre blanc Ethereum en le décrivant en termes simples. Comme le journal est trop long pour tenir dans un article de blog, nous le divisons en plusieurs sections. Nous essaierons d’expliquer de la manière la plus simple possible les détails de niche mentionnés dans le livre blanc Ethereum.

Introduction et concepts existants

Nous savons tous que le développement de Bitcoin par Satoshi Nakamoto a donné naissance à la technologie monumentale connue sous le nom de - Blockchain. J'espère que vous connaissez déjà la technologie Blockchain, grâce à nos précédents articles.

Il existe de nombreuses autres applications de la technologie Blockchain, parmi lesquelles figurent les pièces de couleur, les propriétés intelligentes, les noms de communes, les contrats intelligents ou les DAO (organisations autonomes décentralisées). Ces applications sont complexes à construire sur la blockchain Bitcoin. Pour résoudre ce problème, Ethereum propose un langage de programmation complet de Turing qui peut être utilisé pour créer des contrats intelligents ou coder des fonctions complexes. Un langage complet de Turing peut essentiellement être utilisé pour simuler une machine de Turing. Une machine de Turing est un modèle capable de simuler n'importe quel algorithme informatique, quelle que soit sa complexité.

La fondation Ethereum propose que tout ce qui précède puisse être réalisé facilement en quelques lignes de code. Nous allons valider cette affirmation plus loin dans ce blog et dans les prochains articles.

Histoire

Les monnaies numériques en tant que concept prévalent depuis des décennies. Dans les années 80 et 90, une technique de cryptographie appelée Blindage Chaumian a été utilisée. Cependant, ils ont fait appel à un intermédiaire centralisé, ce qui a clairement brisé l'accord. Puis vint B-money qui proposa un système de consensus décentralisé, mais la façon dont cela serait réalisé était discutable. Hal Finney a ensuite proposé des preuves de travail réutilisables qui, une fois combinées au concept de B-money, semblaient prometteuses au début, mais les tentatives visant à impliquer une telle solution ont été infructueuses.

Satoshi Nakamoto a rassemblé tous ces concepts avec d'autres technologies primitives établies pour la gestion de la propriété par le biais de techniques de cryptographie. L'algorithme de consensus utilisé par la chaîne de blocs Bitcoin pour suivre les pièces s'appelle la preuve du travail.

Le mécanisme de consensus relatif à la preuve du travail a constitué une avancée majeure dans ce domaine dans la mesure où il a résolu deux problèmes principaux.

  1. Les nœuds du réseau pourraient désormais facilement s’entendre sur l’utilisation de l’algorithme de consensus pour entrer des transactions dans le grand livre distribué.
  2. Le problème de savoir qui décide de l'entrée dans le grand livre distribué a été résolu en utilisant la puissance de calcul que chaque nœud est disposé à dépenser.

Pour les mineurs, cela signifie essentiellement: - Plus de puissance de calcul = Plus de blocs extraits = Plus de récompenses cryptographiques.

Un autre concept appelé preuve d’enjeu calcule le poids d’un nœud dans le processus de vote en fonction du nombre de pièces qu’il détient et non seulement de ressources de calcul.

Systèmes de transition d'état

Le registre de toute crypto-monnaie est essentiellement un système de transition d'état qui, à tout moment, contient des informations sur le nombre de pièces contenues dans des portefeuilles individuels et sur les transactions effectuées par ces portefeuilles.

Dans le diagramme ci-dessous, il y a trois blocs principaux à considérer

Etat - Il s'agit de toutes les informations de propriété contenues dans le grand livre, cryptées par cryptographie.

Transaction - Le bloc Transaction définit le montant du transfert initié dans le système. Il comprend également une signature définie par l'expéditeur.

State ’- Cet état se compose des informations de propriété finales réparties sur tous les nœuds. Cet État »agira alors en tant qu’État lors de la prochaine transaction.

Dans un contexte traditionnel de banque fiduciaire, les états sont des bilans individuels et lorsque les fonds sont envoyés de A à B, leurs enregistrements individuels sont mis à jour.

Évidemment, en utilisant des banques traditionnelles, nous ne pouvons pas envoyer plus d’argent que nous en avons dans nos comptes individuels. Une logique similaire a été appliquée ici, qui est définie par la fonction suivante.

APPLIQUER (S, TX) -> S ’ou ERROR

Pour illustrer cela dans le contexte de l'exemple bancaire, nous pouvons le traduire dans l'expression suivante.

CRYPTO

APPLIQUER (S, TX) -> S ’

BANQUES

APPLY ({Alice: 50 $, Bob: 50 $}, "envoyer 20 $ d’Alice à Bob") = {Alice: 30 $, Bob: 70 $}

Ici S est l'état initial où Alice et Bob ont chacun 50 $ dans leurs comptes.

TX est la transaction qui définit «envoyer 20 $ d'Alice à Bob»

S ’est l’état final qui reflète les soldes mis à jour d’Alice et de Bob.

Avant de passer au scénario suivant, nous devons comprendre comment la possession de pièces dans des comptes individuels est calculée.

Un «état» bitcoin regroupe toutes les pièces existantes ainsi que la clé publique de leur propriétaire. La collection de ces pièces est déterminée par le total UTXO associé à l'adresse. UTXO est une sortie de transaction non dépensée qui, comme son nom l'indique, n'a pas été dépensée par le propriétaire. Ces sorties sont mesurées en vérifiant si les pièces provenant de l'ancien propriétaire étaient également UTXO, pour commencer. Ceci est confirmé par la vérification de l’UTXO du propriétaire précédent et par l’appariement avec la signature cryptographique produite par la clé privée du propriétaire précédent.

Maintenant, laissez-nous analyser ce qui se passe si vous essayez de vendre des pièces que vous n’avez pas?

CRYPTO

APPLY (S, TX) -> ERREUR

BANQUES

APPLY ({Alice: 50 $, Bob: 50 $}, "envoyer 70 $ d'Alice à Bob") = ERREUR

1. Vérifiez la valeur mentionnée dans TX (70 $)

une. Si cette valeur n'est pas vérifiée par UTXO du propriétaire, elle n'est pas présente sur son compte. Renvoyer une erreur.

b. Si la signature cryptographique mentionnée ne correspond pas à la signature du propriétaire, renvoyez une erreur.

2. Si la somme de tous les UTXO du propriétaire est inférieure au chiffre mentionné dans TX, renvoyez une erreur.

3. Si la transaction est valide, transférez des fonds au destinataire. Ce transfert se produit en supprimant l’entrée UTXO de l’expéditeur et en l’ajoutant sous l’adresse de clé publique du destinataire.

L'étape 1a empêche l'expéditeur d'envoyer des pièces qui n'existent pas et l'étape 1b empêche les expéditeurs d'envoyer des pièces d'autres personnes.

L'étape 2 vérifie qu'il y a suffisamment de pièces chez l'expéditeur avant de procéder à la transaction.

L’étape 3 termine le processus en soustrayant les valeurs de l’expéditeur et en les ajoutant au portefeuille du destinataire.

Maintenant, ces étapes peuvent sembler faciles à visualiser, mais dans les coulisses, il se passe beaucoup de choses.

L'exemple suivant devrait vous aider à mieux comprendre.

Supposons que vous alliez acheter un tas de bananes. Maintenant, pour une raison vague, 1 banane coûte 75 $. Dans une configuration traditionnelle, pour voir si vous pouvez vous permettre cette précieuse banane trop chère, vous allez ouvrir votre portefeuille et vérifier le solde. Vous avez deux billets de 50 $ chacun totalisant 100 $ (50 + 50 = 100, duh!). Ta mère t'a donné ces deux notes pour acheter des bananes.

Pour pouvoir acheter cette banane, vous devez donner vos billets de 50 USD au vendeur de bananes. Celui-ci vous remboursera 25 USD en utilisant une combinaison de valeurs en dollars US. Vous êtes maintenant un fier propriétaire de cette banane super chère. Le vrai problème qui vous attend maintenant est d’expliquer à votre mère le prix d’une banane.

Ceci est relativement simple à comprendre. Voyons maintenant ce qui se passe dans une transaction crypto-monnaie typique.

Considérons qu'Alice veut envoyer 75 BTC (oui, Alice est très riche) à Bob. Pour commencer, elle vérifiera d'abord si elle a 75 BTC dans son portefeuille. Pour vérifier cela, elle doit résumer toutes ses UTXO (entrées de valeur). Considérez cet UTXO comme les deux billets de 50 $ de l'exemple précédent. Cependant, Alice a deux valeurs UTXO dans son portefeuille de 50 BTC chacune. Cela implique qu'Alice a reçu deux transactions dans son portefeuille. Chaque UTXO vaut 50 BTC.

Nous savons maintenant que vous ne pouvez pas diviser un billet de 100 $ en deux parties pour le diviser en deux billets de 50 $, ce qui rendrait le billet de 100 $ sans valeur. Cependant, dans la crypto-monnaie, vous pouvez effectuer des microtransactions en divisant une pièce de monnaie en dix pièces de 0,1. Cette division n’est cependant pas simple.

Pour transférer 75 BTC à Bob, Alice créera une transaction avec les deux entrées 50 BTC pour donner deux sorties. Une sortie sera donnée à Bob, un autre solde sera transféré dans le portefeuille d’Alice.

50BTC + 50BTC → 75BTC à Bob + 25BTC à Alice

Dans ce scénario, Bob n’est pas chargé de renvoyer le solde par rapport à l’exemple précédent. La transaction gère plutôt le retour du solde restant à Alice.

Exploitation minière

Dans une société idéale où nous pourrions faire confiance à un système centralisé pour toutes les transactions, cette étape serait totalement inutile. Mais nous essayons de créer un système de consensus décentralisé susceptible de perturber le monopole des banques sur nos économies. L’exploitation minière est une méthode qui permet de combiner le système de transition d’état avec un système consensuel de sorte que tous les nœuds du réseau s’accordent sur les transactions. Ces transactions sont combinées et regroupées en blocs, comme indiqué dans la figure ci-dessous.

Le réseau Bitcoin produit 1 bloc toutes les 10 minutes. Chaque bloc a un horodatage, un nonce (un nombre arbitraire non répétable), une référence au bloc précédent mentionné dans le diagramme ci-dessus, Prevhash, ainsi que la liste de toutes les transactions ayant eu lieu après l'extraction du bloc précédent. Cette interminable chaîne de blocs représente toujours le dernier état du grand livre distribué et acquiert ainsi son nom - la Blockchain.

Les étapes suivantes vérifient la validité d'un bloc:

  1. Vérifiez si le bloc précédent référencé par le bloc existe et est valide.
  2. Vérifiez que l'horodatage du bloc est supérieur à celui du bloc précédent et inférieur à 2 heures dans le futur.
  3. Vérifiez que la preuve de travail sur le bloc est valide.
  4. Soit S [0] l’état à la fin du bloc précédent.
  5. Supposons que TX soit la liste de transactions du bloc avec n transactions. Pour tout i dans 0… n-1, définissez S [i + 1] = APPLY (S [i], TX [i]) Si une application renvoie une erreur, quittez et renvoyez false.
  6. Renvoie true et enregistre S [n] en tant qu'état à la fin de ce bloc.

Les points 1 à 3 sont simples. Cependant, les 3 prochains points peuvent sembler un peu déroutants. Laissez-nous comprendre comment cela fonctionne.

Comme mentionné au point 4, soit S [0] l'état à la fin du bloc 5624.

Au point 5, il est mentionné que pour chaque transaction n, il existe un état particulier, comme suit:

Donc, par la fonction → S [i + 1] = APPLIQUER (S [i], TX [i])

Nous avons les éléments suivants:

S [1] = APPLIQUER (S [0], TX [0]) ← Première transaction

S [2] = APPLIQUER (S [1], TX [1]) ← Deuxième transaction

.

.

S [n] = APPLIQUER (S [n-1], TX [n-1]) ← nième transaction

Si vous vous souvenez de la fonction que nous avons lue dans la rubrique précédente. Nous devrions pouvoir revenir en arrière sur la valeur de S ’en fonction de la fonction Apply.

APPLIQUER (S, TX) -> S ’

Ceci est principalement utilisé pour lier diverses transactions et blocs. Ainsi, chaque transaction dans le bloc définit une transition d'état valide à l'aide des fonctions ci-dessus d'une transaction à l'autre. Toutefois, l’état n’est stocké nulle part dans le bloc et est calculé correctement en partant de l’état de la genèse de ce bloc, pour chaque transaction de ce bloc. Ceci donne finalement une sortie de S [n] qui agira comme S [0] pour le bloc suivant.

L'ordre des transactions est primordial car si B crée une transaction impliquant des fonds (UTXO) qui ont été envoyés (créés) par A, la transaction effectuée par A doit précéder B pour que le bloc soit valide.

La condition de preuve de travail requise est que le hachage double SHA256 de chaque bloc représentant un nombre de 256 bits doit être inférieur à une cible ajustée dynamiquement. Ces cibles dynamiques varient de temps en temps, de sorte que les mineurs fournissent une puissance de calcul suffisante pour confirmer leur preuve de travail. De plus, comme la fonction SHA256 est complètement pseudo aléatoire et imprévisible, la seule façon de la résoudre consiste à effectuer de simples essais et erreurs ou à recourir à la force brutale.

Supposons que la cible dynamique soit définie à environ 2150, le réseau doit alors atteindre une moyenne de 2 (256 à 150), ce qui équivaut à 2 066 tentatives avant qu'un bloc valide ne soit trouvé. Cette cible dynamique est réinitialisée tous les 2016 blocs et étalonnée à la nouvelle valeur cible. Un nouveau bloc en moyenne est produit toutes les dix minutes sur le réseau Bitcoin. Malgré tous les efforts lourds que les mineurs font en facilitant nos transactions et en résolvant des problèmes mathématiques complexes, les Bitcoins sont récompensés. La récompense initiale était de 25 BTC par bloc extrait. Actuellement, la récompense est de 12,5 BTC par bloc miné. C'est ainsi que les bitcoins entrent en circulation. Les Bitcoins attribués aux mineurs sont de nouveaux bitcoins en cours de déblocage à partir des 21 000 000 Bitcoins, ce qui est la limite stricte du nombre de Bitcoins pouvant être en circulation.

Que se passe-t-il en cas d'attaque?

Analysons maintenant les avantages de l’exploitation minière et comment elle prévient les attaques. Les lignes suivantes ont été tirées du livre blanc Ethereum car le texte est assez explicite.

"La stratégie de l'attaquant est simple:

  1. Envoyez 100 BTC à un commerçant en échange d'un produit (de préférence un bien numérique à livraison rapide)
  2. Attendez la livraison du produit
  3. Produire une autre transaction en envoyant les mêmes 100 BTC à lui-même
  4. Essayez de convaincre le réseau que sa transaction pour lui-même a été la première.

Une fois l’étape (1) effectuée, au bout de quelques minutes, un mineur inclura la transaction dans un bloc, par exemple le bloc 270. Au bout d’une heure environ, cinq autres blocs auront été ajoutés à la chaîne après ce bloc. ces blocs pointant indirectement vers la transaction et donc la "confirmant". À ce stade, le commerçant acceptera le paiement tel que finalisé et livrera le produit; comme nous supposons qu'il s'agit d'un bien numérique, la livraison est instantanée. L’attaquant crée maintenant une autre transaction qui lui envoie le 100 BTC. Si l'attaquant le libère simplement dans la nature, la transaction ne sera pas traitée; les mineurs tenteront d'exécuter APPLY (S, TX) et remarqueront que TX consomme un UTXO qui n'est plus dans l'état. Au lieu de cela, l’attaquant crée donc une «fourchette» de la blockchain, en commençant par extraire une autre version du bloc 270 pointant vers le même bloc 269 en tant que parent mais avec la nouvelle transaction à la place de l’ancienne. Les données de blocage étant différentes, il est nécessaire de rétablir la preuve de travail. De plus, la nouvelle version du bloc 270 de l’attaquant a un hachage différent, donc les blocs 271 à 275 originaux ne «pointent» pas dessus; ainsi, la chaîne d'origine et la nouvelle chaîne de l'attaquant sont complètement séparées. La règle veut que, dans une fourchette, la plus longue blockchain soit considérée comme la vérité, de sorte que les mineurs légitimes travailleront sur la chaîne 275 alors que le seul attaquant travaille sur la chaîne 270. Pour que l'attaquant fasse plus longue chaîne de blocs, il aurait besoin de plus de puissance de calcul que le reste du réseau combiné pour rattraper son retard (d'où «une attaque de 51%»). "

Le texte ci-dessus montre comment prendre le contrôle de la blockchain. L'attaquant doit disposer de plus de puissance de traitement que 51% de la blockchain totale, ce qui est probablement impossible pour les meilleures pièces.

Merkle Trees

Les arbres à Merkle aident à maintenir l'unicité d'un bloc. Les arbres de Merkle sont un arbre binaire dans lequel chaque nœud a deux enfants, et cela va jusqu'au fond pour avoir des nœuds feuilles individuels qui consistent en des données de transaction. Comme indiqué dans la figure ci-dessous, ces nœuds feuilles se superposent et se terminent par un «hachage». Ce hachage d'un bloc se compose d'un horodatage, d'un nonce, d'un hachage de bloc précédent et du hachage racine de l'arbre de Merkle, comme indiqué dans l'image de gauche.

Maintenant, la beauté des fonctions cryptographiques réside dans le fait que, même si un bit d’entrée est modifié, tout le schéma de cryptage est modifié et la sortie de la valeur de hachage intermédiaire est différente. Cela modifie la sortie de valeur de hachage du bloc global et est rejeté par la chaîne de blocs car il ne dispose pas d'une preuve de travail valide. La sortie d'une arborescence Merkle est un hachage unique suffisamment sécurisé pour agir en tant qu'assurance pour les nœuds.

Ces nœuds comparent ce hachage d’une source à une autre petite partie de l’arbre de Merkle d’une autre source pour valider l’authenticité du bloc. Un scénario similaire est présenté dans la partie droite de l'image ci-dessus lorsqu'un nœud refuse un bloc car son hachage ne correspond pas aux données de l'arborescence Merkle.

Les données stockées dans la blockchain de bitcoin étant en augmentation constante, il sera un moment où les ordinateurs de bureau moyens ne seraient plus en mesure de stocker toutes les données. C’est là qu’un protocole appelé «vérification de paiement simplifiée» (SPV) entre en jeu. Ce protocole permet aux nœuds de vérifier la preuve de travail en utilisant le hachage dans des blocs individuels. Ces nœuds sont également appelés «nœuds légers». Ces nœuds lumineux téléchargent les en-têtes de bloc, vérifient la preuve de travail sur les en-têtes de bloc, puis téléchargent uniquement les «branches» associées aux transactions qui les concernent. Les nœuds légers garantissent ainsi que les transactions sont légitimes malgré le téléchargement d'une très petite partie de la blockchain.

Applications de Blockchain alternatives

  1. NameCoin
    NameCoin vous permet d’enregistrer des noms sur une base de données décentralisée.
  2. Pièces colorées
    Les pièces de couleur servent de protocole pour permettre aux gens de créer leurs propres devises numériques sur la Blockchain Bitcoin.
  3. Métacoins
    Le protocole Metacoin est stocké au-dessus de Bitcoin mais utilise une fonction de transition d'état différente de celle de Bitcoin. Ils fournissent un mécanisme pour créer un protocole de crypto-monnaie arbitraire.

Il existe deux manières de construire un système blockchain. Le premier est la construction d'un réseau indépendant et le second comprend la construction d'un protocole sur Bitcoin. La première approche est difficile à mettre en œuvre à cause des coûts impliqués. De plus, le nombre d'applications pouvant s'exécuter sur la chaîne de chaînes ne nécessite pas un réseau indépendant à part entière. Les exigences de ces applications nécessitent relativement moins d’informatique.

L’approche basée sur Bitcoin a le défaut de ne pas hériter des fonctionnalités simplifiées de vérification des paiements de Bitcoin. SPV fonctionne pour Bitcoin car il peut utiliser la profondeur de la blockchain comme proxy pour la validité. à un moment donné, une fois que les ancêtres d'une transaction remontent assez loin en arrière, il est sûr de dire qu'ils faisaient légitimement partie de l'État. Une implémentation entièrement sécurisée du méta-protocole SPV aurait besoin d'effectuer un balayage en arrière jusqu'au début de la chaîne de blocs Bitcoin pour déterminer si certaines transactions sont valides ou non.

Scripting

Le protocole Bitcoin gère une version primitive d’un concept appelé "contrats intelligents". UTXO en Bitcoin peut appartenir non seulement à une clé publique, mais également à un script compliqué exprimé dans un langage de programmation simple. Dans ce scénario, après une transaction, UTXO doit fournir des données satisfaisant le script. Après tout, même le mécanisme de base de propriété de la clé publique est implémenté via un script qui est vérifié à l'aide de signatures à courbe elliptique. Le script retourne 1 si la vérification est réussie et renvoie 0 sinon.

Cela peut être contrôlé davantage pour écrire un script qui requiert des signatures de deux clés privées sur trois à valider («multisig»). Il s’agit d’un cas d’utilisation pour les grands comptes d’entreprise, les comptes sécurisés et les comptes bloqués. Ces scripts de contrat intelligents peuvent être modifiés pour effectuer de nombreuses actions en fonction du cas d'utilisation.

Cependant, le langage de script Bitcoin comporte plusieurs limitations:

  1. Manque de complétude de Turing - Les boucles ne sont pas disponibles pour éviter des situations de boucle infinie, mais rédiger un contrat intelligent dans un langage qui n'est pas complet peut être extrêmement décourageant.
  2. Valeur aveuglement - Le script UTXO n'est pas en mesure de déterminer si la valeur de BTC a changé par rapport à USD.
  3. Manque d'état - Un UTXO peut être dépensé ou non dépensé. Il est impossible de créer des contrats intelligents complexes pouvant inclure une vérification cryptographique en deux étapes sur le réseau Bitcoin.
  4. Blanchissement de la chaîne de blocs - UTXO n'a également pas accès à la nonce, à l'horodatage ou au hachage de bloc précédent. Cela limite l'application de Bitcoin dans de nombreux domaines.

«Ethereum propose de créer un cadre alternatif offrant des gains encore plus importants en termes de facilité de développement et de propriétés de clients légers encore plus puissants, tout en permettant aux applications de partager un environnement économique et une sécurité blockchain.

Ceci conclut l’interprétation de la partie 1 du livre blanc Ethereum. En résumé, cet article nous a donné un aperçu général du fonctionnement de Bitcoin, la toute première Crypto-monnaie. Nous allons maintenant analyser la différence entre Ethereum et le protocole Bitcoin.