Écriture et lecture de données dans la blockchain Bitcoin

Il est possible d'écrire dans la blockchain de bitcoin non seulement les transactions financières, mais aussi presque toutes les données. Les données enregistrées dans la blockchain Bitcoin deviennent publiques et il est presque impossible de les supprimer ou de les modifier. Cette fonctionnalité peut être utilisée, par exemple, pour créer des sites décentralisés qui ne se prêtent à aucun blocage.

En utilisant la bibliothèque blockchaindata-lib, l'écriture et la lecture de données sur la blockchain peuvent être organisées en quelques lignes de code.

Les outils


La bibliothèque blockchaindata-lib est écrite dans node.js. Le code source avec des exemples est disponible sur github.com/3s3s/blockchaindata-lib github. Pour ajouter une bibliothèque à votre projet, exécutez simplement une commande dans la console

npm install blockchaindata-lib 

Pour travailler avec la blockchain, vous devez configurer l'accès RPC au portefeuille de Bitcoin ou à un fork compatible avec Bitcoin (Litecoin, Dogecoin, etc.). Par défaut, blockchaindata-lib tentera d'accéder au serveur RPC aux détails suivants:

 : http://127.0.0.1:18332 : rpc_btc_test : rpc_btc_password_test 

Les valeurs par défaut peuvent être modifiées par la fonction de bibliothèque

 updateNetwork(url, user, password) 

Ainsi, afin de travailler avec la bibliothèque, la première chose que vous devez faire est de lancer un portefeuille de test Bitcoin:

  1. Téléchargez le portefeuille Bitcoin (ou une fourchette compatible.)
  2. Créez le fichier ~ / .bitcoin / bitcoin.conf (ou dans Windows% APPDATA% / Bitcoin / bitcoin.conf)
  3. Dans le fichier bitcoin.conf, écrivez les paramètres suivants

     testnet=1 server=1 rpcbind=127.0.0.1 rpcallowip=127.0.0.1 rpcuser=rpc_btc_test rpcpassword=rpc_btc_password_test txindex=1 

  4. Enregistrez les modifications dans bitcoin.conf et exécutez bitcoind (ou dans windows bitcoin-qt.exe)
  5. Attendez la synchronisation de la blockchain

Avec les paramètres ci-dessus, le portefeuille se lancera dans le réseau de test Bitcoin.

Enregistrement des données


Dans le bitcoin, les transactions sans frais sont interdites. Par conséquent, avant d'écrire quelque chose dans la blockchain Bitcoin, vous devrez certainement reconstituer votre portefeuille. Des bitcoins pour un réseau de test peuvent être obtenus gratuitement si vous recherchez sur Google quelque chose comme «robinet bitnet testnet». Lorsque le portefeuille est réapprovisionné, vous pouvez enfin enregistrer des données.

La bibliothèque a plusieurs fonctions pour l'enregistrement des données:

 SaveTextToBlockchain( dataString ) SaveJSONToBlockchain( objectJSON ) SaveFileToBlockchain( data ) 

En principe, ce que font ces fonctions ressort clairement du nom. Résultat de la fonction - Objet
  {résultat: <vrai |  false>, message: <string>, txid: <string>} 


Prenons un exemple d'utilisation:

 'use strict'; const blockchaindata = require('blockchaindata-lib') async function test1() { try { //    const ret1 = await blockchaindata.SaveTextToBlockchain("     "); if (ret1.result == false) throw new Error("SaveTextToBlockchain failed, message: "+ret1.message); console.log("SaveTextToBlockchain success! txid="+ret1.txid+"\n--------------------------") } catch (e) { console.log(e.message) } } test1(); 

Si ce code est exécuté sans erreur, le hachage de transaction sera affiché dans la console. Vous pouvez lire les données de ce hachage.

Lecture des données


Pour lire les données enregistrées plus tôt dans la blockchain, il vous suffit de connaître le hachage de la transaction. Le portefeuille peut être vide, c'est-à-dire que si vous souhaitez uniquement lire les données, il n'est pas nécessaire de reconstituer le portefeuille.

Exemple de code

 'use strict'; const blockchaindata = require('blockchaindata-lib'); async function test2() { //    try { const savedObject = await blockchaindata.GetObjectFromBlockchain("8af6633160b982a0b0b4d4962ad28e0d5b3dd97e05e27cc2dd64ec0c56820df5"); if (savedObject.type == 'error') throw new Error(savedObject.message) if (savedObject.type == 'text') console.log(Buffer.from(savedObject.base64, 'base64').toString('utf8')); else console.log(savedObject.base64); } catch(e) { console.log(e.message) } } test2(); 

Si ce code fonctionne sans erreur, le texte html de la page que j'ai précédemment enregistré sur la blockchain sera affiché dans la console.

Où postuler?


Dans la blockchain, par exemple, vous pouvez enregistrer un site statique. Ce site sera pratiquement impossible à supprimer ou à bloquer. Cependant, pour lire un tel site, vous aurez besoin d'un logiciel supplémentaire: un nouveau navigateur ou une extension de navigateur.

L'extension de navigateur est la solution la plus simple. Un exemple d'une telle extension peut être trouvé ici github.com/3s3s/blockchaindata

Vous pouvez télécharger et installer cette extension pour Firefox ici: yadi.sk/d/a3xM9BCepP4nBw
Après l'installation, Firefox interceptera et traitera les liens vers des sites au format
  http: // tbtc / <txid> 


Par exemple, un tel lien fonctionnera http: // tbtc / 8af6633160b982a0b0b4d4962ad28e0d5b3dd97e05e27cc2dd64ec0c56820df5

Efficacité


La bibliothèque blockchaindata-lib compresse les données avant de les placer sur la blockchain en utilisant l'algorithme de dégonflage, donc cette méthode est particulièrement efficace pour écrire des documents texte. Pendant les tests, j'ai réussi à écrire jusqu'à 70 ko de données compressées dans la blockchain. Bien qu'il n'y ait aucune restriction sur la taille des données entrantes, des erreurs sur les grands ensembles de données apparaissent en raison de l'implémentation interne du code bitcoin.

Lors de l'écriture de données dans la blockchain, il faut également prendre en compte la composante financière. La lecture et l'écriture de données sur le réseau de test Bitcoin à l'aide de la bibliothèque blockchaindata-lib est simple et gratuite. Cependant, si vous souhaitez écrire des données sur le réseau de bitcoin en fonctionnement, vous devrez prendre en compte le prix non nul du bitcoin.

Source: https://habr.com/ru/post/fr470884/


All Articles