Accéder aux données de la blockchain à partir des contrats intelligents Bitcoin : Partie 4


Cet article a été publié pour la première fois sur Medium.

Le nombre total de transactions dans un bloc est une information importante. Nous montrons comment l’obtenir sans tiers de confiance, ce qui était considéré comme impossible auparavant.

Varier

Notons la longueur d’un chemin de Merkle comme m. Le nombre de feuilles, c’est-à-dire le nombre de transactions dans un bloc, est compris entre 2^(n-1) + 1 et 2^n. Pour voir cela, un arbre binaire parfait¹ de hauteur m a exactement 2^n feuilles. La longueur d’un chemin Merkle est la même que la hauteur de l’arbre Merkle.

Accéder aux données de la blockchain à partir des contrats intelligents Bitcoin : Partie 4 - 1
Un arbre parfait de hauteur 2

Nombre exact

Trouver la dernière transaction

Dans le dernier article, nous avons accédé à la première transaction coinbase d’un bloc. Si nous pouvions également accéder à la dernière transaction, nous pouvons en déduire le nombre total de transactions. Nous pouvons identifier la première transaction/la plus à gauche en vérifiant que tous les nœuds sur son chemin Merkle sont sur la branche droite. Il est tentant de trouver la dernière transaction/la plus à droite de la même manière en exigeant que tous les nœuds de chemin Merkle soient sur la branche gauche. Malheureusement, cela peut ne pas être toujours vrai.

Si nous avons un arbre Merkle parfait, tous les nœuds sur le chemin Merkle de la dernière transaction sont en effet sur la branche gauche, comme indiqué ci-dessous.

Accéder aux données de la blockchain à partir des contrats intelligents Bitcoin : Partie 4 - 2
Chemin de Merkle coloré pour la dernière transaction

Cependant, ce n’est pas le cas lorsque l’arbre n’est pas parfait. Par exemple, l’arbre suivant a 5 feuilles et le chemin Merkle pour la dernière transaction se compose de tous les nœuds de couleur orange. Deux d’entre eux se trouvent sur la branche droite, seul le haut sur la gauche.

Accéder aux données de la blockchain à partir des contrats intelligents Bitcoin : Partie 4 - 3
Merkle Path pour la première et la dernière transaction colorées en rouge et orange, respectivement

Pour surmonter ce problème, nous remarquons que lorsqu’il y a un nombre impair de nœuds dans une seule couche de l’arbre de Merkle, le dernier nœud est dupliqué. Cela implique que si un nœud sur le chemin Merkle de la dernière transaction se trouve sur la branche droite, il doit être copié à partir de la branche gauche actuelle, comme le montre le graphique ci-dessous.

Accéder aux données de la blockchain à partir des contrats intelligents Bitcoin : Partie 4 - 4

Le code suivant implémente directement l’algorithme.

Accéder aux données de la blockchain à partir des contrats intelligents Bitcoin : Partie 4 - 5
Contrat de blockchain

Du chemin Merkle à l’index des transactions

Pour dériver l’index d’une transaction, nous suivons son chemin Merkle de la racine à la feuille qui la représente. Lorsqu’un nœud sur le chemin est sur la branche gauche, nous allons à droite (c’est-à-dire binaire 1); sinon, on va à gauche (binaire 0). Il est facile de voir que nous pouvons obtenir une représentation binaire de son indice de cette façon. Dans l’exemple ci-dessous, nous appliquons cette règle à la dernière transaction, et nous allons tout à droite et obtenons 111 en binaire, qui est exactement son indice 7 en décimal.

Accéder aux données de la blockchain à partir des contrats intelligents Bitcoin : Partie 4 - 6
Un arbre avec toutes les feuilles indexées en binaire

Ce code est présenté ci-dessous :

Accéder aux données de la blockchain à partir des contrats intelligents Bitcoin : Partie 4 - 7
Contrat de blockchain

Obtenez le nombre exact de transactions

Enfin, nous pouvons combiner les deux fonctions en blockTxCount (), qui renvoie le nombre exact de transactions dans un bloc.

Accéder aux données de la blockchain à partir des contrats intelligents Bitcoin : Partie 4 - 8
Contrat de blockchain

Résumé

Une fois que nous pouvons accéder au nombre de transactions dans un bloc, nous pouvons l’utiliser pour construire des contrats intelligents jugés impossibles auparavant. Nous n’énumérons ci-dessous que quelques exemples :

  • Placez un contrat de prime qui ne paie que lorsqu’un bloc contient plus d’un million de transactions, pour parrainer un test de résistance.
  • En combinant les informations de synchronisation obtenues auparavant, soit l’horodatage dans un en-tête de bloc ou la hauteur de bloc, les transactions par seconde (TPS) peuvent être calculées fidèlement et utilisées dans un contrat. Par exemple, un contrat qui ne se débloque que si le TPS atteint 100 000.

Nous sommes impatients de voir quels types de nouveaux contrats passionnants vous pourrez proposer.

Remerciements

Cet article est inspiré du travail de shilch.

Regardez: Panel CoinGeek New York, Une meilleure expérience Internet en utilisant Blockchain

Nouveau sur Bitcoin? Découvrez CoinGeek Bitcoin pour les débutants section, le guide de ressources ultime pour en savoir plus sur Bitcoin—comme envisagé à l’origine par Satoshi Nakamoto—et la blockchain.



Source de l’article

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *