200行代码实现一个可追溯的文件系统

2019-11-09 11:13 栏目:经验之谈 来源: 查看()
难篡改、可追溯,这两个性质是区块链被广泛认可的良好特性。 最早比特币只实现了交易转账的可追溯,如果要实现数据变更的可追溯,就需要编写智能合约来实现了,可惜大多数区块链系统的合约开发都不是很好用,这个门槛把很多试图体验区块链的人挡在了门外。 如果能把区块链变成一块硬盘,放在里面的文件自动就具备了“难篡改、可追溯”的性质,是不是很酷?本文将介绍如何基于百度超级链来来实现这样一个文件系统,主要的代码只有200行左右。

传统文件系统是操作系统的一部分,通常在内核中实现。区块链系统正在用户状态下运行。如何将区块链变成存储磁盘?这将使用熔丝(用户空间中的文件系统)。简单地说,它是一个用户状态文件系统框架。只要您的程序实现了一系列接口,如打开、读取、写入等。您可以虚拟化文件系统。

200行代码实现一个可追溯的文件系统

在超级链中,数据可以通过智能契约的put_object存储在区块链,通过get_object查询,通过new_iterator查询。 设计理念 一个简单而大胆的想法是使用文件的名称作为关键字,然后使用文件的内容作为值,并借助智能契约(如put _ object ("/mydir/1.txt "、"长话短说")将其存储在区块链。读取文件就是调用get _ object ("/mydir/1.txt ")。列出目录就是在迭代器中循环遍历new _迭代器("/mydir "),以获得所有前缀的文件名。让我们按我们说的做,立即写一个超级链契约来实现我们文件系统的核心。

200行代码实现一个可追溯的文件系统

读者可能会问,与redis和leveldb等键值存储相比,本合同的功能有什么特别之处?这是关于超级链的XuperModel模型。 超级链中的交易模型是XuperModel,它是从经典的UTXO模型演化而来的。经典的UTXO模型只能描述传输场景,而XuperModel的创新之处在于它可以描述更一般的数据变化。

200行代码实现一个可追溯的文件系统

超级链底部数据多版本机制的实现也不同于数据库。数据库的一般方法是将逻辑密钥+版本号拼接到物理密钥中,但是这种方法扫描只保留有限数量的版本。一旦有太多版本,间隔查询迭代将会很慢,因为将会扫描大量无用的旧版本。超级链使用链哈希的多版本接口。在状态树中,对应于键的值只是一个散列指针,指向书中事务的输出字段。要追溯以前的版本,只需要事务的输入指针向前追溯。当事务或块需要回滚时,产生的输入输出开销也非常低。 接下来,为了实现一个模块,该模块充当一个“桥梁”,并将区块链智能合同存储映射到一个磁盘中。这是本文开头提到的保险丝。

200行代码实现一个可追溯的文件系统

为了简单起见,让我们用python实现它,它有一个库python-fuse,可以帮助我们编写更少的代码。下图显示了主代码逻辑。当前实现不进行块管理。文件是一个整体。随机读写的实现相对简单和粗糙。

200行代码实现一个可追溯的文件系统

见证了这一刻的奇迹,让我们看看XFS· 的效果。首先启动xchain独立节点。 nohup。/xchain //启动grpc服务 nohup。/xchain-httpgw //启动http服务 然后创建空目录:mkdir–p/tmp/myxfs 部署合同,python3.6 deploy_fs.py 最后,启动xfs以将合同装载到/tmp/myxfs:python 3.6 xfs _ demo . py-f/tmp/myxfs/

200行代码实现一个可追溯的文件系统

同时,在xfs_demo的控制台上,我们看到了由系统调用触发的以下输出。我们可以看到,写操作导致了区块链上的事务,事务标识为: 303 c 867 e 195 ba 464778250 B2 E7 f 21 a 841 c 1825 da Abe 35728 c 02 a 04 ECC 7289 f 22。

200行代码实现一个可追溯的文件系统

此交易可通过xchain-cli查询。/xchain-clittxquery 303 c 867 e 195 ba 464778250 B2 E7 f 21 a 841 c 1825 dabe 35728 c 02 a 04 ECC 7289 f 22,实际上存储在区块链。

200行代码实现一个可追溯的文件系统

即使是sqlite: 也可以在此文件系统上运行

200行代码实现一个可追溯的文件系统

200行代码实现一个可追溯的文件系统

可追溯的文件系统 最后,重点看看这个文件系统和传统文件系统不同的地方:可追溯。 首先,产生一个文件,里面写上“Hello World”,然后,再次在这个文件后面追加一行:”I will be back”。这个可追溯文件系统支持用户在文件名后面加个版本号,比如

200行代码实现一个可追溯的文件系统

1表示最新的版本,
微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发