知世金融网专注于股票行情,期货开户,外汇储备等最新相关资讯信息提供投资者参考学习!

当前位置:网站首页 > 区块链 > 正文

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

原创
文章作者
知世-金融领域资深作者
知名金融领域作者,从事金融超过十余年,在行业内有一定影响力。
金融风险管理师认证证书 常识职业资格认证 特许金融分析师 国际金融理财师认证证书
发布时间:2020-02-16 19:42:08 发布来源:百度超级链 文章点击:104

难篡改、可追溯,这两个性质是区块链被广泛认可的良好特性。 最早比特币只实现了交易转账的可追溯,如果要实现数据变更的可追溯,就需要编写智能合约来实现了,可惜大多数区块...

目录

    本文标题200行代码实现一个可追溯的文件系统,作者:知世,本文有1119个文字,大小约为5KB,预计阅读时间3分钟,请您欣赏。知世金融网众多优秀文章,如果想要浏览更多相关文章,请使用网站导航的搜索进行搜索。本站虽然不乏优秀之作,但仅作为投资者学习参考。

    难篡改、可追溯,这两个性质是区块链被广泛认可的良好特性。

    最早比特币只实现了交易转账的可追溯,如果要实现数据变更的可追溯,就需要编写智能合约来实现了,可惜大多数区块链系统的合约开发都不是很好用,这个门槛把很多试图体验区块链的人挡在了门外。

    如果能把区块链变成一块硬盘,放在里面的文件自动就具备了“难篡改、可追溯”的性质,是不是很酷?本文将介绍如何基于百度超级链来来实现这样一个文件系统,主要的代码只有200行左右。

    传统的文件系统是操作系统的一部分,一般是在内核里面实现的。区块链系统都运行在用户态,如何把区块链变成一块存储盘呢?这就要用到Fuse(Filesystem in Userspace)了,简单来说它是一个用户态文件系统框架,只要你的程序实现了open、read、write等等一系列接口,就可以虚拟出一个文件系统。

    在超级链中,可以通过智能合约的put_object把数据存储到区块链上,通过get_object查询,也可以通过new_iterator遍历查询。

    设计思路

    一个简单而大胆的想法,就是用文件的名字作为key,然后把文件的内容作为value,借助智能合约存储到区块链上,比如put_object(“/mydir/1.txt”, “a long story”)。读取该文件,就是调用get_object(“/mydir/1.txt”)。列出目录,就是通过new_iterator(“/mydir”)循环遍历迭代器,拿到所有该前缀的文件名。说干就干,马上写出一个超级链合约,实现我们这个文件系统的内核。

    各位看官可能会问,这个合约的功能和redis、leveldb等key-value存储相比,有什么特殊之处呢?这个就要说到超级链的XuperModel模型了。

    在超级链里面的事务模型是XuperModel,它是基于经典的UTXO模型演化而来,经典的UTXO模型只能描述转账场景,而XuperModel创新之处在于可以描述更加通用的数据变更。

    超级链底层的数据多版本机制实现也与数据库不同。数据库的一般做法是将逻辑Key+版本号拼接成物理Key,但是这个方式只能保留有限个版本,一旦版本太多,就会导致区间查询迭代很慢,因为要Scan大量无用的老版本。超级链用了一种链式哈希的多版本接口,在状态树中Key对应的Value只是哈希指针,指向账本中事务的Output字段,要回溯之前的老版本也只需要通过事务的Input指针再往前回溯。当需要回滚事务或区块的时候,产生的IO开销也极低。

    接下来,要实现一个模块,这个模块起到“桥梁”的作用,把区块链智能合约存储映射成一块盘,这个就是用到了文章开头提到的Fuse。

    简单起见,我们用python来实现,python有个库python-fuse可以帮助我们少写很多代码。下图贴出了主要的代码逻辑,目前的实现没有做chunk管理,一个文件就是一个整体。对于随机读、随机写的实现比较简单粗暴。

    见证奇迹的时刻,运行XFS

    让我们看看效果。首先启动xchain单机节点。
    nohup ./xchain & //启动grpc服务
    nohup ./xchain-httpgw & //启动http服务
    然后, 创建一个空目录:mkdir –p /tmp/myxfs
    部署合约,python3.6 deploy_fs.py
    最后, 启动xfs 把合约mount到/tmp/myxfs:python3.6 xfs_demo.py -f /tmp/myxfs/

    同时,在xfs_demo的控制台上,看到了如下输出,这个是系统调用触发的,我们可以看到一次写入操作产生了区块链上的一个交易,有交易id: 303c867e195ba464778250b2e7f21a841c1825daabe35728c02a04ecc7289f22。

    可以用xchain-cli查询一下这个交易,./xchain-cli tx query 303c867e195ba464778250b2e7f21a841c1825daabe35728c02a04ecc7289f22,这的确是存储在区块链上的。

    甚至,可以在这个文件系统上跑一个sqlite:

    可追溯的文件系统

    最后,重点看看这个文件系统和传统文件系统不同的地方:可追溯。

    首先,产生一个文件,里面写上“Hello World”,然后,再次在这个文件后面追加一行:”I will be back”。这个可追溯文件系统支持用户在文件名后面加个版本号,比如@1表示最新的版本,@2表示倒数第二个版本。可追溯的效果如下图:

    很多版本管理工具,如Git也可以实现同样的效果,然而借助区块链,我们实现了去中心化的数据一致性、难篡改等特性,并且只用了200行左右的代码,这一切只是超级链能力的冰山一角。我们会持续完善基于智能合约的开发框架和工具链,敬请关注。

    附,文中的代码地址:https://github.com/fxsjy/xuper_python

    本文相关推荐:

    以上便是知世金融网给大家分享的关于200行代码实现一个可追溯的文件系统/qkl/28183.html的相关信息了,希望能帮助到大家,更多金融相关信息,敬请关注知世金融网!

    网站内容均来自互联网,如侵害您的利益联系客服进行删除!

    关键词:文件系统
    (0)
    (0)

    上一篇:区块链和供应链

    下一篇:加密学:乌托邦式的幻想与现实

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

    本文地址:/index.php?s=article&c=search&keyword=%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F

    金融知名领域

    南方财富网 | 金融界 | 金融界 |

    更多推荐

    • 茅台吃饱,经销商哭倒
      茅台吃饱,经销商哭倒
    • 汇金的五次增持从短期看具有一定的“稳定器“作用,但从市场表现看效果逐次递减
      汇金的五次增持从短期看具有一定的“稳定器“作用,但从市场表现看效果逐次递减
    • 158亿元!比亚迪收购!
      158亿元!比亚迪收购!
    • 9月价格回落近五成 “冷静期”酒店业备战“十一”市场
      9月价格回落近五成 “冷静期”酒店业备战“十一”市场
    • 2023哈马博览会哈尔滨银行展区精彩纷呈
      2023哈马博览会哈尔滨银行展区精彩纷呈
    • 大额解禁撂倒股价 医疗影像龙头跌出千亿俱乐部 葛兰二季度大幅减仓
      大额解禁撂倒股价 医疗影像龙头跌出千亿俱乐部 葛兰二季度大幅减仓
    • A股,又上了热搜!数字要素概念走高多股涨停,锂电池板块走低恩捷股份大举跌停
      A股,又上了热搜!数字要素概念走高多股涨停,锂电池板块走低恩捷股份大举跌停
    • 最新!巨头出手,加仓宁王51%
      最新!巨头出手,加仓宁王51%
    • 600亿巨头暴雷
      600亿巨头暴雷
    • 一天32家!科创板回购潮涌来
      一天32家!科创板回购潮涌来
    • 提振信心实招来了!30余家上市公司密集出手 最高要买10亿
      提振信心实招来了!30余家上市公司密集出手 最高要买10亿
    • 高盛再发50年后预测:2075年印度股市全球市值占比将升4倍 中国升3成
      高盛再发50年后预测:2075年印度股市全球市值占比将升4倍 中国升3成

    新闻资讯栏目

    站长QQ: 2397470084