Accédez aux données de la blockchain à partir des contrats intelligents Bitcoin sans oracles


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

Les contrats intelligents n’ont aucune connaissance du monde extérieur et doivent s’appuyer sur des oracles pour importer des données externes en général. Nous avons déjà montré deux manières d’importer des données à partir d’oracles, basées sur la signature Rabin et l’ECDSA. Dans cet article, nous montrons qu’il est possible d’accéder à un type spécifique de données externes, c’est-à-dire des données sur la blockchain (comme les en-têtes de blocs et les transactions), en l’absence d’oracles, tout en maintenant l’intégrité des données. En permettant aux contrats intelligents d’accéder aux données en chaîne avec une confiance minimale, cela ouvre des opportunités infinies pour tous les nouveaux types de contrats intelligents sur Bitcoin.

En-têtes de bloc d’accès

La blockchain Bitcoin se compose d’une chaîne de blocs, comme son nom l’indique. Un bloc comporte deux parties : un en-tête de bloc et des transactions.

Un bloc et son en-tête
Légende : Un bloc et son en-tête

Un en-tête de bloc contient les métadonnées du bloc, avec six champs comme indiqué ci-dessous.

L'en-tête du bloc bitcoin
Légende : L’en-tête du bloc Bitcoin

Il convient de noter que les en-têtes Bitcoin font partie de l’algorithme de consensus de preuve de travail de Bitcoin. Plus précisément, le hachage d’un en-tête de bloc sérialisé ne doit pas dépasser la cible de difficulté (c’est-à-dire le nombre de zéros non significatifs). Grâce à la nature sans confiance de la preuve de travail, il est extrêmement coûteux de produire un en-tête de bloc valide, en particulier lorsque la difficulté est élevée. Mais il est très facile de vérifier si un en-tête de bloc donné est valide. C’est exactement comment nous importons un en-tête de bloc dans un contrat intelligent illustré ci-dessous, sans compter sur aucun oracle.

Légende : contrat de blockchain

isBlockHeaderValid () à la ligne 22 vérifie si un en-tête de bloc est valide. bits2Cible() à la ligne 31 calcule la cible de difficulté à partir d’une forme compacte (un champ de 4 octets généralement appelé nBits). Nous hachons simplement l’en-tête du bloc à la ligne 23 et nous nous assurons qu’il atteint l’objectif de difficulté à la ligne 27.

Faux en-têtes de bloc

Nous vérifions également que la cible de difficulté n’est pas plus grande que la blockchainCible paramètre à la ligne 27, pour contrôler la difficulté de produire un faux en-tête de bloc. Sinon, un attaquant peut facilement créer un en-tête de bloc, dont le hachage rencontre la cible de difficulté à l’intérieur (par exemple, n’a que 2 zéros non significatifs). Comme pour de nombreux autres aspects de Bitcoin tels que 0-conf, la sécurité de l’importation des en-têtes de bloc de cette manière est économique, pas seulement technique. Cela signifie qu’en pratique, il est impératif qu’un contrat intelligent reposant sur un en-tête de bloc réel ne bloque pas plus de pièces qu’il n’en coûte pour produire un faux en-tête.

Accéder aux opérations

Une fois qu’un en-tête de bloc est disponible, nous pouvons facilement accéder à n’importe quelle transaction dans le bloc. En effet, l’en-tête de bloc contient la racine de l’arbre Merkle de toutes les transactions. Semblable à SPV, nous passons la transaction et son chemin Merkle dans un contrat intelligent et vérifions qu’il correspond au hachage racine dans l’en-tête de bloc. txInBlock () à la ligne 17 le démontre.

Un arbre de Merkle et une preuve de Merkle
Légende : Un arbre de Merkle et une preuve de Merkle

Une étude de cas : utiliser la blockchain pour générer des nombres aléatoires

En général, il est considéré comme un problème difficile de générer des nombres pseudo-aléatoires dans une blockchain de manière sûre et équitable, car la blockchain est à la fois déterministe et transparente. Nous exploitons les données de la blockchain, en particulier le nonce champ d’un en-tête de bloc, comme source d’entropie.

Alice et Bob verrouillent tous les deux la même quantité de bitcoins dans le contrat suivant. Une fois la transaction contenant le contrat diffusée, elle sera extraite dans un futur bloc. En fonction du nonce du bloc, qui est difficile à prévoir et peut être considéré comme aléatoire, un gagnant est déterminé et prend tous les bitcoins verrouillés.

Image BlochainPRNG
Légende : contrat BlockchainPRNG

Les lignes 17 et 20 utilisent la technique OP_PUSH_TX pour obtenir le txid de la transaction contenant le contrat. La ligne 23 vérifie que l’en-tête de bloc est légitime et la ligne 26 vérifie que la transaction précédente s’y trouve. Si le champ nonce est impair, Alice gagne ; sinon, Bob gagne.

Résumé

Nous avons montré comment accéder aux données de la blockchain dans les contrats intelligents Bitcoin avec une confiance minimale. Étant donné qu’un en-tête bitcoin sérialisé ne fait que 80 octets de long et que la preuve Merkle évolue de manière logarithmique, cette technique est extrêmement efficace (identique au SPV).

Nous avons également montré un exemple d’utilisation des données de la blockchain pour générer des nombres pseudo-aléatoires. Ce n’est que le début de ce qui est possible, que nous explorerons dans les prochains articles. Restez à l’écoute.

Mettre à jour

Il existe d’autres façons de modifier le hachage de bloc, en plus de manipuler le nonce. C’est-à-dire qu’un mineur peut définir le nonce sur une valeur donnée (par exemple, impair dans le contrat PRNG) et modifier l’extraNonce ou l’horodatage jusqu’à ce que le hachage du bloc atteigne la cible. Le mineur peut ainsi manipuler le résultat sans perdre les blocs trouvés avec succès, sans frais supplémentaires. Utilisez le hachage de bloc, au lieu de nonce, si vous souhaitez minimiser le risque de collusion avec les mineurs.

Remerciements

Ce travail est inspiré du travail de Ying Chen maintenant à Cambridge Cryptographic.

Regardez : Présentation de CoinGeek New York, Smart Contracts & Calcul on Bitcoin

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 *