在比特币区块链中写入和读取数据

不仅可以将金融交易而且几乎所有数据都写入比特币的区块链。 记录在比特币区块链中的数据是公开的,几乎不可能删除或更改它。 例如,此功能可用于创建不适合任何阻止的分散站点。

使用blockchaindata-lib库,只需几行代码即可组织在blockchain上的数据读写。

工具


blockchaindata-lib库是用node.js编写的。 带有示例的源代码可在github.com/3s3s/blockchaindata-lib github上找到。 要将库添加到项目中,只需在控制台中运行一个命令

npm install blockchaindata-lib 

要使用区块链,您必须配置对比特币钱包或与比特币兼容的分叉(Litecoin,Dogecoin等)的RPC访问。 默认情况下,blockchaindata-lib将尝试通过以下详细信息访问RPC服务器:

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

默认值可以通过库函数进行更改

 updateNetwork(url, user, password) 

因此,为了使用该库,您需要做的第一件事是启动一个比特币测试钱包:

  1. 下载比特币钱包(或兼容的叉子。)
  2. 创建〜/ .bitcoin / bitcoin.conf文件(或在Windows%APPDATA%/ Bitcoin / bitcoin.conf中)
  3. 在bitcoin.conf文件中,编写以下设置

     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. 将更改保存到bitcoin.conf并运行bitcoind(或在Windows bitcoin-qt.exe中)
  5. 等待区块链同步

通过以上设置,钱包将在比特币测试网络中启动。

数据记录


在比特币中,禁止没有费用的交易。 因此,在您向比特币区块链中写入内容之前,您肯定必须补充您的钱包。 如果您在Google上搜索“ bitcoin testnet faucet”之类的内容,则可以免费获得用于测试网络的比特币。 补充钱包后,您终于可以记录数据了。

该库具有几个用于记录数据的功能:

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

原则上,这些功能的作用从名称中就很清楚。 函数结果-对象
  {结果:<true |  false>,消息:<string>,txid:<string>} 


考虑一个使用示例:

 '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(); 

如果执行此代码没有错误,则交易哈希将显示在控制台中。 您可以从此哈希读取数据。

读取数据


为了读取早先记录在区块链中的数据,您只需要知道交易的哈希值即可。 钱包可能是空的,也就是说,如果您只想读取数据,则无需补充钱包。

代码示例

 '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(); 

如果此代码正常运行,那么我先前保存在区块链上的页面的html文本将显示在控制台中。

在哪里申请?


例如,在区块链中,您可以保存静态站点。 该站点实际上是无法删除或以某种方式阻止的。 但是,要阅读这样的网站,您将需要其他软件:新的浏览器或浏览器扩展。

浏览器扩展是最简单的解决方案。 可以在github.com/3s3s/blockchaindata找到此类扩展的示例

您可以在此处下载并安装Firefox扩展程序: yadi.sk/d/a3xM9BCepP4nBw
安装后,Firefox将以以下格式拦截并处理指向网站的链接
  http:// tbtc / <txid> 


例如,这样的链接将适用于http:// tbtc / 8af6633160b982a0b0b4d4962ad28e0d5b3dd97e05e27cc2dd64ec0c56820df5

实效


由于使用deflate算法,blockchaindata-lib库在压缩数据之前先将其压缩,因此该方法对于编写文本文档特别有效。 在测试期间,我设法将多达70 kb的压缩数据写入区块链。 尽管对传入数据的大小没有限制,但是由于内部实施了比特币代码,因此出现了大数据集错误。

在将数据写入区块链时,还必须考虑财务要素。 使用blockchaindata-lib库读取和写入数据到比特币测试网络既简单又免费。 但是,如果您想将数据写入工作中的比特币网络,那么您将需要考虑比特币的非零价格。

Source: https://habr.com/ru/post/zh-CN470884/


All Articles