区块链数据管理员BitDb——解读BitDb系列协议(一)
第0章 引言
比特币除了当货币用,还能用来干啥?BTC的社区共识是专心做一个货币,对花里胡哨的应用(Dapp)没多大兴趣。BCH和BSV希望做货币也希望通过创建各种应用(Dapp)来为货币找到场景。
_unwriter是一个开发者,他在BSV上搞了一个BitDb,然后又做了一系列的变种,是一个创造力极强的人。今天分享下他的系列产品。
第1章 区块链是一堆数据
区块链的本质是一个将无序交易存储为有序交易的数据处理机。就是说,用户通过钱包发送交易,这些交易当然是随机发送的,经过矿工打包后,在区块链上按特定的排列永久性地不可篡改性地存储好用户的交易数据。
用户的交易可以包括很多信息,这些信息可以分为不同维度。一般我们能想到的就是转账的金额,来自哪个地址,目的地址,在哪个区块高度上确认等。这些属于交易数据。这个一般在区块链浏览器上非常容易查询的到。
更复杂一点还可以是在每一笔交易中包含一个OP_Return输出,这个输出可以存储任意的信息,比如你可以写首诗存进去。更更复杂的还可以是按特定协议发送的交易,比如在BSV上有一个叫Tokenized的协议,按此协议发送的BSV交易都是呈现出特定独特的数据规则,在BCH上也有虫洞协议,都是类似。这一类数据区块链浏览器只会做非常简单的展示,并且往往是使用十六进制这种机器才能看的懂的形式来展示。
还有一类数据是脚本数据。脚本里会包含很多代码和数据。
使用过比特币的人一般会接触到钱包和区块浏览器。钱包上会展示最基本的信息,比如只会给用户展示历史交易等信息。钱包不会给用户显示交易在哪个区块高度里,也不会展示OP_Return,更不会显示属于哪个协议等。
而区块浏览器会呈现更多一些维度的信息,比如用户可以通过区块浏览器来查询OP_Return信息,脚本信息等。但目前区块浏览器会解读的信息是非常非常很少的,而区块链上事实存储的信息是非常多的,维度也非常丰富。
无论是钱包还是区块链,都属于是用户和程序之间对区块链信息的交互,钱包使用某种方式将交易、余额等信息呈现给用户,用户通过在区块链浏览器上查询地址或txid来查阅交易的细节。这都是某种信息的交互。除了人和区块链信息的交互之外,还包括了程序和区块链信息之间的交互,本质上,区块链上的信息处理绝大多数是程序自己处理,也就是程序自己和信息进行特定的交互。
对于电脑来说,所有的交易信息都是二进制,它们无所谓哦,给它们代码和数据就可以了,不矫情。但对于给我们人看的信息,就必须使用一些方便我们看的格式来展示,我们肯定看不懂二进制了,我们只能看汉字字母等。我们人特别矫情。
人的矫情包括了要程序如何给我们人展示信息,还包括了让我们人如何命令程序展示哪些信息。
如何让用户(可以是程序)和区块链里信息进行友好地交互,就是BitDb的工作。
第2章 Bitdb是一个加工区块链数据的工具
BSV区块链上存着所有的交易数据,不可篡改,永不删除,但这些数据对人是不友好的,我们压根读不懂这里面都是些啥,我们更难命令这堆数据给我们呈现特定的信息。比如百度和谷歌这样的搜索引擎可以让我们以特定的关键字去命令互联网给我们呈现特定的信息。而区块链呢?假如你想找到一个在OP_return输出里带有你姓名的交易,你怎么办?(Mongodb不是_unwriter设计的,mongodb是现成的产品,很多互联网产品都在用。)
Bitdb就是一个软件,或者叫一套代码,任何人都可以租用一台服务器运行Bitdb。运行的bitdb会从网络中读取BSV区块链数据,所有历史区块都会读取,并且按特定规则进行加工处理。
处理过后的数据会被叫MongoDB的数据库存储起来。MongoDb就是一个数据库,这和比特币使用的LevelDb数据库类似。
然后第三组件BitQuery是负责供人或程序查询和调用MongoDB里的数据。
总结,BSV区块链是一组有序的不可删除不可篡改的用户不友好性数据,Bitdb就是按特定规则读取并处理区块链数据,然后以MongoDB存储,从而允许用户或程序使用BitQuery和区块数据进行友好地交互。
第3章 如何使用Bitdb?
我们叫Bitdb一般是包含了上面说的三个组件。
一般来说,我们普通的终端使用用户是不会接触到Bitdb的,Bitdb是一个可实际使用的应用的后台的一部分。Bitdb这三个组件都是给应用开发者准备的。
应用开发者想利用区块链上的数据做一个应用的话,才会去使用Bitdb。比如oyo.cash就是一个基于bitdb搭建的搜索区块链上数据的搜索引擎。
应用开发者想明白业务逻辑层,然后使用Bitdb来实现整个逻辑。所谓的业务逻辑层就是你想让你的应用程序做什么,用户界面是什么,需要用户输入什么,给用户呈现什么。
比如oyo.cash,业务逻辑层就是一个类似谷歌的搜索引擎,用户输入关键词,然后反馈给用户区块链上包含此关键字的交易列表。开发出oyo.cash大概包含设计好业务层,设计好一个类似爬虫一样的程序将区块链里的数据全部索引好,再设计好一个高性能的数据库来保存这些可检索的数据,然后再设计好一套类似数据库的“增删查”的程序。而Bitdb就是把后面这些程序都给你做好了,应用开发者只需要关心业务层。
_unwriter为了尽可能给开发者准备完善的解决方案,他自己搭建了一个服务器bitdb.network。在服务器运行了BitDb的三个组件,并且通过一个API向应用开发者提供数据检索服务。但毫无疑问,这个服务器的性能不会特别好,比如一秒只能提供有限的查询次数。
Bitdb这三个组件也是开源的,如果你作为一个应用开发者,完全可以将自己的demo版本先在bitdb.network上试运行,如果业务成功的话,自己再租用服务器,自己运行Bitdb组件,就可以大大提高性能。
第4章 Bitdb应用案例
本质上Bitdb是一个区块链数据处理程序,我们可以把它想象成是一个管理区块链数据的工具。但凡是你想开发和区块链数据相关的业务,都可能可以利用Bitdb。
在_unwriter的推特上经常可以看到一些人艾特他告诉他的Bitdb帮他们实现了什么。
BitcoinFiles.org是一个可以上传文件、发布长文、甚至时上传一个网页到BSV链上的应用,用户界面就是一个网站,后台就包括了Bitdb三个组件。因为可以用来上传一个网页,网页可以用来实现很多逻辑,比如可以做成小游戏,而这些游戏都是保存在BSV链上的。也有人实现了一个链上的计算器。
不过要讲明白的是,这里所谓的链上游戏只是代码保存在链上,并且被bidb读到了它的服务器上,然后代码是使用浏览器来运行的,而不是说运行在BSV链上。
可以使用Bitdb实现一个链上的书签,可以永久保存网站收藏夹,并且是在“云端”,可以移植到任意平台和终端,只要联网就行。
_unwriter还发布了一个发布链上RSS的想法,也是使用Bitdb来架构的。
浏览_unwriter的推特,你会发现很多奇思妙想的点子。
第5章 结束语
给_unwriter封个官,就叫首席区块链数据管理员,CDO。
下一篇写Bitsoket。(感谢老刘给我讲解bitdb)
作者:黄世亮
欢迎关注微信公众号:闪电HSL