Escribir y leer datos en la cadena de bloques de Bitcoin

Es posible escribir en la cadena de bloques de bitcoin no solo las transacciones financieras, sino también casi cualquier dato. Los datos registrados en la cadena de bloques de Bitcoin se hacen públicos y es casi imposible eliminarlos o cambiarlos. Esta característica se puede usar, por ejemplo, para crear sitios descentralizados que no son susceptibles de ningún bloqueo.

Usando la biblioteca blockchaindata-lib, la escritura y lectura de datos en blockchain se puede organizar en solo unas pocas líneas de código.

Las herramientas


La biblioteca blockchaindata-lib está escrita en node.js. El código fuente con ejemplos está disponible en github.com/3s3s/blockchaindata-lib github. Para agregar una biblioteca a su proyecto, simplemente ejecute un comando en la consola

npm install blockchaindata-lib 

Para trabajar con blockchain, debe configurar el acceso RPC a la billetera de Bitcoin o un tenedor compatible con Bitcoin (Litecoin, Dogecoin, etc.). De forma predeterminada, blockchaindata-lib intentará acceder al servidor RPC con los siguientes detalles:

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

Los valores predeterminados se pueden cambiar mediante la función de biblioteca

 updateNetwork(url, user, password) 

Por lo tanto, para trabajar con la biblioteca, lo primero que debe hacer es lanzar una billetera de prueba de Bitcoin:

  1. Descargue la billetera Bitcoin (o una bifurcación compatible).
  2. Cree el archivo ~ / .bitcoin / bitcoin.conf (o en Windows% APPDATA% / Bitcoin / bitcoin.conf)
  3. En el archivo bitcoin.conf, escriba la siguiente configuración

     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. Guarde los cambios en bitcoin.conf y ejecute bitcoind (o en windows bitcoin-qt.exe)
  5. Espera la sincronización de blockchain

Con la configuración anterior, la billetera se lanzará en la red de prueba de Bitcoin.

Registro de datos


En bitcoin, las transacciones en las que no hay gastos están prohibidas. Por lo tanto, antes de escribir algo en la cadena de bloques de Bitcoin, definitivamente tendrá que reponer su billetera. Los bitcoins para una red de prueba se pueden obtener de forma gratuita si busca en Google algo como "bitcoin testnet faucet". Cuando se repone la billetera, finalmente puede registrar datos.

La biblioteca tiene varias funciones para registrar datos:

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

En principio, lo que hacen estas funciones es claro por el nombre. Resultado de la función - Objeto
  {resultado: <verdadero |  falso>, mensaje: <cadena>, txid: <cadena>} 


Considere un ejemplo de uso:

 '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 este código se ejecuta sin errores, el hash de la transacción se mostrará en la consola. Puede leer los datos de este hash.

Lectura de datos


Para leer los datos registrados anteriormente en la cadena de bloques, solo necesita conocer el hash de la transacción. La billetera puede estar vacía, es decir, si solo desea leer los datos, entonces no es necesario reponer la billetera.

Ejemplo de código

 '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 este código funciona sin errores, el texto html de la página que guardé previamente en la cadena de bloques se mostrará en la consola.

Donde aplicar


En blockchain, por ejemplo, puede guardar un sitio estático. Este sitio será prácticamente imposible de eliminar o bloquear de alguna manera. Sin embargo, para leer dicho sitio, necesitará un software adicional: un nuevo navegador o extensión de navegador.

La extensión del navegador es la solución más fácil. Un ejemplo de tal extensión se puede encontrar aquí github.com/3s3s/blockchaindata

Puede descargar e instalar esta extensión para Firefox aquí: yadi.sk/d/a3xM9BCepP4nBw
Después de la instalación, Firefox interceptará y procesará enlaces a sitios en el formato
  http: // tbtc / <txid> 


Por ejemplo, dicho enlace funcionará http: // tbtc / 8af6633160b982a0b0b4d4962ad28e0d5b3dd97e05e27cc2dd64ec0c56820df5

Efectividad


La biblioteca blockchaindata-lib comprime los datos antes de colocarlos en la cadena de bloques utilizando el algoritmo de desinflado, por lo que este método es especialmente efectivo para escribir documentos de texto. Durante las pruebas, logré escribir hasta 70 kb de datos comprimidos en la cadena de bloques. Aunque no hay restricciones en el tamaño de los datos entrantes, aparecen errores en conjuntos de datos grandes debido a la implementación interna del código bitcoin.

Al escribir datos en la cadena de bloques, también se debe tener en cuenta el componente financiero. Leer y escribir datos en la red de prueba de Bitcoin usando la biblioteca blockchaindata-lib es simple y gratuito. Sin embargo, si desea escribir datos en la red de trabajo de bitcoin, deberá tener en cuenta el precio distinto de cero de bitcoin.

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


All Articles