可以用xchain-cli查询一下这个生意业务,./xchain-cli tx query 303c867e195ba464778250b2e7f21a841c1825daabe35728c02a04ecc7289f22,这简直是存储在区块链上的。
同时,,在xfs_demo的节制台上,看到了如下输出,这个是系统挪用触发的,我们可以看到一次写入操纵发生了区块链上的一个生意业务,有生意业务id: 303c867e195ba464778250b2e7f21a841c1825daabe35728c02a04ecc7289f22。
首先,发生一个文件,内里写上“Hello World”,然后,再次在这个文件后头追加一行:”I will be back”。这个可追溯文件系统支持用户在文件名后头加个版本号,好比@1暗示最新的版本,@2暗示倒数第二个版本。可追溯的结果如下图:
许多版本打点东西,如Git也可以实现同样的结果,然而借助区块链,我们实现了去中心化的数据一致性、难改动等特性,而且只用了200行阁下的代码,这一切只是超等链本领的冰山一角。我们会一连完善基于智能合约的开拓框架和东西链,敬请存眷。
最后, 启动xfs 把合约mount到/tmp/myxfs:python3.6 xfs_demo.py -f /tmp/myxfs/
可追溯的文件系统
在超等链中,可以通过智能合约的put_object把数据存储到区块链上,通过get_object查询,也可以通过new_iterator遍历查询。
见证古迹的时刻,运行XFS
nohup ./xchain & //启动grpc处事
简朴起见,我们用python来实现,python有个库python-fuse可以辅佐我们少写许多代码。下图贴出了主要的代码逻辑,今朝的实现没有做chunk打点,一个文件就是一个整体。对付随机读、随机写的实现较量简朴粗暴。
一个简朴而斗胆的想法,就是用文件的名字作为key,然后把文件的内容作为value,借助智能合约存储到区块链上,好比put_object(“/mydir/1.txt”, “a long story”)。读取该文件,就是挪用get_object(“/mydir/1.txt”)。列出目次,就是通过new_iterator(“/mydir”)轮回遍历迭代器,拿到所有该前缀的文件名。说干就干,顿时写出一个超等链合约,实现我们这个文件系统的内核。
传统的文件系统是操纵系统的一部门,一般是在内核内里实现的。区块链系统都运行在用户态,如何把区块链酿成一块存储盘呢?这就要用到Fuse(Filesystem in Userspace)了,简朴来说它是一个用户态文件系统框架,只要你的措施实现了open、read、write等等一系列接口,就可以虚拟出一个文件系统。
接下来,要实现一个模块,这个模块起到“桥梁”的浸染,把区块链智能合约存储映射成一块盘,这个就是用到了文章开头提到的Fuse。假如能把区块链酿成一块硬盘,放在内里的文件自动就具备了“难改动、可追溯”的性质,是不是很酷?本文将先容如何基于百度超等链来来实现这样一个文件系统,主要的代码只有200行阁下。在超等链内里的事务模子是XuperModel,它是基于经典的UTXO模子演化而来,经典的UTXO模子只能描写转账场景,而XuperModel创新之处在于可以描写越发通用的数据改观。附,文中的代码地点:https://github.com/fxsjy/xuper_python设计思路
甚至,可以在这个文件系统上跑一个sqlite:
超等链底层的数据多版本机制实现也与数据库差异。数据库的一般做法是将逻辑Key+版本号拼接成物理Key,可是这个方法只能保存有限个版本,一旦版本太多,就会导致区间查询迭代很慢,因为要Scan大量无用的老版本。超等链用了一种链式哈希的多版本接口,在状态树中Key对应的Value只是哈希指针,指向账本中事务的Output字段,要回溯之前的老版本也只需要通过事务的Input指针再往前回溯。当需要回滚事务或区块的时候,发生的IO开销也极低。
让我们看看结果。首先启动xchain单机节点。
陈设合约,python3.6 deploy_fs.py
列位看官大概会问,这个合约的成果和redis、leveldb等key-value存储对比,有什么非凡之处呢?这个就要说到超等链的XuperModel模子了。
最早只实现了生意业务转账的可追溯,假如要实现数据改观的可追溯,就需要编写智能合约来实现了,惋惜大大都区块链系统的合约开拓都不是很好用,这个门槛把许多试图体验区块链的人挡在了门外。
nohup ./xchain-httpgw & //启动http处事
难改动、可追溯,这两本性质是被遍及承认的精采特性。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。