经《IPFS原理与实践》主要作者董天一、戴嘉乐,以及华章出版社孙海亮老师的授权,在微信公众号“乐生活与爱IT”首发。

上一篇是《什么是IPFS - BlockChain Storage 区块链存储 (1)》,本篇是书籍第1章的第2节,原标题为 IPFS与区块链的关系

第1章 认识IPFS

第2节

1.2 IPFS与区块链的关系

现在提到IPFS就一定会提到区块链,那么区块链和IPFS之间到底有什么关系呢?在介绍二者关系之前,我们需要先来了解一下区块链。

1.2.1 区块链基础

那么区块链又是什么呢?在最早期,区块链就被认为是比特币的底层技术之一,是一种不可篡改的链式数据结构;经过几年的发展,区块链被越来越多的人熟知,它也从单纯的数据结构变成分布式账本的一系列技术总称,整合了加密,共识机制,点对点网络等技术;近些年,区块链的非帐本类应用开始逐渐兴起,大家开始描述区块链为分布式的数据库,是价值传递网络,它逐渐被赋予了更多的内涵。

在技术方面来讲,区块链是一种分布式数据库,旨在各个互相不信任的节点中维护数据库的一致性,并且不可篡改。信用和记录会被保存到区块链上,每一个新的区块中存有上一个区块的数字指纹,该区块的信用和记录和生成新区块的时间戳。这样一来,区块链会持续增长,并且很难被篡改,一旦修改区块链上任意一个区块的信息,那么后续区块的数字指纹也就全部失效了。

链式数据结构使得区块链历史很难被篡改,而在各个互不信任的节点之间保持数据的一致性,则需要共识机制完成,它是网络预先设定的规则,以此判断每一笔记录以及每一个区块的真实性,只有那些判断为真的区块会被记录到区块链中;相反,不通过共识机制的新区块会被网络抛弃掉,区块里记录的信息也就不再被网络认可。目前常见的共识机制包括是POW工作量证明,POS权益证明,BPFT实用拜占庭容错等

比特币,以太币,比特币现金以及大部分加密数字货币使用的是POW工作量证明。维护比特币帐本的节点我们称它为矿工,矿工每次在记录一个新区块的时候,会得到一定比特币的奖励。因此,矿工们会为自己的利益,尽可能多的去争夺新的区块记账权利,并获得全网的认可。

工作量证明要求新的区块哈希值必须拥有一定数量的前导0。矿工们把交易信息不断地与一个新的随机数进行SHA-256运算,计算得到区块的哈希值。一旦这个哈希值拥有要求数目的前导0,这一个区块就是合法的,矿工会把它向全网广播确认。而其他的矿工收到这一新的区块,会对这一区块的合法性检查,如果合法,新的区块会写入其他矿自己的帐本中。这一结构如图1-3所示。

图1-3 比特币的区块结构

POS权益证明,与要求证明人执行一定量的计算工作不同,权益证明要求证明人提供一定数量加密货币的所有权即可。权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例把一些币发送给矿工本身。

权益证明机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。这种共识机制可以加快共识,也因矿工不再继续竞争算力,网络能耗会大大降低,但也有专家指出,POS权益证明牺牲部分网络去中心的程度

目前POW和POS机制是加密数字货币的主流算法,其他的几个常见的共识机制有DPOS和BPFT,限于篇幅,这里不再进一步展开了。有兴趣的读者可以参考DPOS、BPFT的相关文章。至此,我想对于区块链起步的同学也对其是如何工作的有了大致的理解吧。

1.2.2 区块链发展

1976年,是区块链的密码学基础奠定的一年,这一年Whitfield Diffie 与 Martin Hell首次提出Diffie-Hellman算法,并且证明了非对称加密是可行的。与对称算法不同,非对称算法会拥有两个密钥,公钥和私钥,公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

这是后来比特币加密算法的核心之一,我们使用比特币钱包生成私钥和地址时,能通过椭圆曲线加密算法,生成一对公钥和私钥,有了私钥我们可以对一笔转账签名,而公钥则可以验证这一笔交易是由这个比特币钱包的所有者签名过的,是合法的。将公钥通过SHA256哈希运算,可以计算出我们的钱包地址。

图1-4 右一为Diffie,右二为Hellman

1980年,Martin Hell的学生,Merkle Ralf提出了Merkle-Trees数据结构和生成算法。Merkle-Tree最早是要建立数字签名证书的公共目录,能够确保,在点对点网络中传输的数据块是完整的,并且没有被篡改的。我们前面提到在比特币网络中,每一个区块都包含了交易信息的哈希值。这一哈希值并不是直接将交易顺序连接,然后计算它们的哈希,而是通过默克尔树生成的。

默克尔树如图1-5所示。默克尔树生成算法,会将每笔交易做一次哈希,然后两两将计算后的哈希值再做哈希,直到计算到默克尔根。而这个默克尔根,就包含了全部的交易信息。这样,能大大节省钱包的空间占用。例如在轻钱包中,我们只需下载与自己钱包对应的交易信息,需要验证的时候,只需找到一条从交易信息的叶节点到根结点的哈希路径即可,而不需要下载区块链的全部数据。在IPFS项目里,也借鉴了哈希树的思想。数据分块存放在有向无环图中,如果数据被修改了,那么只需要修改对应默克尔有向无环图的点,而不需要向网络重新更新整个文件。值得一提的是,Merkle在提出Merkle Tree时,分布式技术尚未成型,更别提数字货币了,而他能在当时就能察觉并提出这样的方法,实在是令人赞叹。

图1-5 Merkle-Tree 结构

非对称加密算法和Merkle-Tree数字结构是后续数字货币和区块链的理论基础了。真正将密码学用于数字货币的尝试,则晚了许多。数字货币兴起于1990年的数字朋克(CyberPunk)运动。它是由一批热爱网络的极客们推动的,数字朋克们大多是密码学的专家,对于个人隐私和人生自由十分向往。希望建立一套与现实中的国家、等级制度以外的空间。

其中最典型的代表是David Chaum, 他最早提出了盲签名技术并将其应用到了Digit Cash项目(又名Ecash)。盲签名是一种保护隐私的签名方式,它的签名者对其签署的消息不可见。比如,用户需要签署一个转账信息,而这一信息需要银行签名,用户为了保护隐私,不希望银行看到其具体的转账对象,就可以使用盲签名。

David在它的论文中提出了用盲签名实现匿名货币的想法,具体方式是用户在本地计算机的ecash程序以数字格式存储现金,再交给银行进行盲签名。这套系统已经与当时的银行系统非常接近了,差一点获得了成功。但是Digit Cash始终需要中心化的银行服务器支持。在后续,没有一家银行愿意再支持他的项目,最终项目失败了。

图1-6 Ecash Logo

表1-1 数字朋克运动中诞生的系统及关键的人物

数字朋克运动人物

系统名称

项目简介

Tim C May

Cypherpunk Mailing List

邮件中使用强密码保护隐私

David Chaum

Digit Cash

中心化清算的加密货币

Hal Finney

Rpow

可信硬件和工作量证明货币

Phil Zimmermann

PGP encryption

基于RSA的邮件加密协议

Wei Dai

B Money

分布式匿名电子现金

Nick Szabo

Bit Gold

比特币的原型

John Gilmore

Cypherpunk Mailing list

邮件中使用强密码保护隐私

Adam Back

Hash Cash

工作量证明

Julian Assange

Wikileaks

维基解密

在Digit Cash失败后的几年里,人们几乎放弃了数字现金的构想。仅有少数数字朋克继续着研究。一个名为hashcash的想法,是在1997年由当时同为数字朋克的博士后研究员Adam Back独立发明。Hashcash的想法很简单:它没有后门,也不需要中心第三方,它只使用哈希函数而不是数字签名。

Hashcash基于一个简单的原理:哈希函数在某些实际用途中表现为随机函数,这意味着找到哈希到特定输出的输入的唯一方法是尝试各种输入,直到产生期望的输出为止。而且,为了找到这样一个符合条件的输入,唯一方法是再次逐个尝试对不同的输入进行哈希。所以,如果让你尝试找到一个输入,使得哈希值前10位是0,你将不得不尝试大量的输入,你会每次尝试成功的机会是(1/2)10。这意味着你将不得不尝试210个输入的顺序,或大约1000个哈希计算。没错,这就是工作量证明的早期来源,也是矿工们每天在重复做的事情。他甚至在技术设计上做了一些修改,使其看起来更像一种货币。但显然,他的方案不能检验节点是否作弊,不能作为真正的数字现金。

还有两位有杰出贡献的数字朋克是Hal Finney和Nick Szabo,他们重新考虑将技术整合了起来。Nick Szabo他不仅是一位计算机科学家,同时精通法律。Szabo受到David Chaum的启发后,希望利用密码协议和安全机制,提出了数字合约的构想。数字合约能在网络上,没有第三方协助,利用程序验证并执行合同。它与传统合同相比更安全,并且减少了相关成本。这在后续的加密数字货币设计上有着极大的影响。比特币网络可以提供非图灵完备的脚本语言实现部分智能合约功能;以太坊则进一步,在EVM上运行Solidity语言,提供了图灵完备的智能合约环境,这也为后续分布式APP奠定了基础。

Nick做出的贡献还不只是发明了智能合约,在2008年,Nick Szabo发起了Bit Gold项目。在项目计划书中,Nick阐述的Bit Gold架构,这现在的比特币完全相同,同样是工作量证明机制,同样是链式网络结构,同样的新区块包含旧区块的数字指纹,包含时间戳等诸多特性。然而,Bit Gold项目最终工程还是没有顺利完成。目前Bit Gold可查寻的源头只有在Bitcoin Talk论坛的帖子,后续的可查证资料就很少了。有一些比特币爱好者们一度认为Szabo就是中本聪本人,不仅因为Bit Gold与Bitcoin的相似之处令大家充满想象,甚至是在词法和句法上,中本聪的比特币论文与Bit Gold论文相似之处,而且Nick家不远的地方,有一位叫中本聪的日本人,大家猜测这是Nlick为了掩人耳目而故意隐藏自己的身份。Nick本人都对此表示否认并觉得这是个很搞笑的八卦,当然这也成为数字货币里最大谜团,究竟中本聪是谁呢?

再之后,到了2009年,中本聪发表了比特币论文。他提出了一整套加密协议,而不仅仅是加密货币。比特币使用计算机程序控制货币的发行,发行总量2100万枚。比特币的帐本记录在成千上万个电脑上,黑客无法入侵;每个账户都是加密地址,你不知道谁在花钱,但是每个比特币的流通都被记录,你知道他的来源和去向的地址。比特币是第一个到达上述全部思想的第一个项目,整合了之前三十多年的技术积累。关于比特币的相关知识,我们在之前已经详细介绍,再次就不在赘述了。

比特币在设计之时,考虑到网络的稳定性和抵御恶意攻击,它使用的是非图灵完备的脚本语言(主要不能使用循环语句)。2013年,Vitalik Buterin 认为,比特币需要一种图灵完备的脚本语言用来支持多样的应用开发。这个思路没有被比特币社区支持,于是 Buterin考虑用更通用的脚本语言开发一个新的平台,这就是后来的以太坊。

以太坊在大致思路上与比特币相似,在账户状态,UTXO,地址形式上进行了一些优化。其最大的亮点在于,他们开发了Solidity智能合约编程语言和以太坊虚拟机(EVM)这一以太坊智能合约的运行环境,用于按照预期运行相同的代码。正因EVM和Solidity,区块链的平台应用(DAPP)迅速兴起了。以太坊平台提出了许多新用途,包括那些不可能或不可行的用途例如金融,物联网服务,供应链服务,电力采购和定价以及博彩等。时至今日,基于DAPP的各类应用还在迅速展开,新的市场和需求在进一步发现。后续区块链会如何发展,我们拭目以待。

1.2.3 IPFS为区块链带来了什么改变

区块链的诞生本是为了做到去中心化,没有中心机构下达到共识,共同维护一个账本。它在设计动机本就不是为了高效,低能耗抑或是拥有可扩展性(如果追求高效,低能耗和扩展性,中心化程序可能是更好的选择)。

IPFS与区块链协同工作,能够补充区块链的两大缺陷:

•             区块链存储效率低,成本极高。

•             跨链需要各个链之间协同配合,难以协调。

针对第一个问题,区块链网络要求全部的矿工维护同一个账本,需要每一个矿工留有一个账本的备份在本地。那么在区块链中存放的信息,为了保证其不可篡改,也需要在各个矿工手中留有一份备份。这样是非常不经济的,设想现在全网有1万个矿工,即便我们希望在网络保存1M信息,全网消耗的存储资源是10GB。

目前,也有折中的方案缓解这一问题。在搭建去中心化应用DAPP时,大家广泛采取的方式是,仅在区块链中存放哈希值,将需要存储的信息存放在中心化数据库中,而这样,存储又成为去中心化应用中的一个短板,是网络中脆弱的一环。

IPFS则提出了另一个解决方法:我们可以使用IPFS存储文件数据,并将唯一永久可用的IPFS地址放置到区块链事务中,而不必将数据本身放在区块链中。针对第二个问题,IPFS能协助各个不同的区块链网络传递信息和文件。

比特币和以太坊区块结构不同,通过IPLD可以定义不同分布式数据结构。这一功能目前还在开发中,目前的IPLD组件,已经实现了将以太坊智能合约代码通过IPFS存储,在以太坊交易中只需存储这个链接,EVM运行的时候可以解析到IPFS网络中。

1.2.4 Filecoin:基于IPFS技术的区块链项目

在前面1.1节,我们讲到了IPFS的结构介绍。Filecoin是IPFS的激励层

我们知道,IPFS网络需要稳定运行需要用户贡献他们的存储空间,网络带宽,如果没有恰当的奖励机制,那么巨大的资源开销很难让网络持久运转。受到比特币网络的启发,Filecoin作为IPFS的激励层就是一种解决方案了。

对于用户,Filecoin能提高存取速度和效率,能带来去中心化等应用;对于矿工,贡献网络资源可以获得一笔不错的收益;而对于业务伙伴,例如数据中心,也能贡献他们的空闲计算资源用于获得一定的报酬。Filecoin会用于支付存储,检索和网络中的交易。

与比特币类似,它的代币总量有上限,为20亿枚,其中70%会通过网络挖矿奖励贡献给矿工,15%为团队自持代币,10%份额给投资人,剩下5%作为Filecoin基金会持有。投资人和矿工获得的代币按照区块发放,而基金会和团队的代币,按照6年时间线性发放。

Filecoin与比特币挖矿机制完全不同。我们前面提到,为了避免攻击,比特币通过POW工作量证明机制,要求矿工挖出下一个满足哈希值包含多个前导0的新区块。这个过程会需要大量的哈希运算。Filecoin使用的是复制证明(Proof of Replication)。复制证明主要是为了防止攻击矿工实际存储的数据大小要比声称存储的数据小,这样攻击矿工就能获得本不该他获得的报酬。要避免矿工攻击,网络中的验证节点会随机检查是否矿工在作弊。如果矿工不能提供一份拷贝,那么它将会扣除一定的Filecoin作为惩罚。相比于POW机制带来算力竞争,PoRep显得环保的多。

未完待续,欢迎持续关注微信公众号 乐生活与爱IT

上一篇是《什么是IPFS - BlockChain Storage 区块链存储 (1)》

若有赞赏,将全部转给作者们

购买书籍可扫描二维码,或者打开左下角“阅读原文”

IPFS与区块链的关系 - BlockChain Storage 区块链存储 (2)相关推荐

  1. A survey on challenges and progresses in blockchain technologies区块链综述

    目录 摘要 Introuduction 2.关键技术 2.1 分布式账本 2.2 密码学 2.4.智能合约 2.5 基准 3.挑战和最先进的进步 3.1 性能关注区块链 3.2 安全问题 3.3.性能 ...

  2. BaaS(区块链即服务Blockchain as a Service)

    BaaS(区块链即服务Blockchain as a Service)  BaaS(区块链即服务Blockchain as a Service) 1. 什么是区块链服务? 区块链服务是指利用区块链 ...

  3. BlockChain:区块链技术基础概念综合理解——个人总结

    BlockChain:区块链技术基础概念综合理解--个人总结 目录 区块链的进阶与意义 1.区块链技术的进阶 2.区块链技术三大意义-传递价值.建立可信用环境.提高效率和降低成本 1.传递价值 2.建 ...

  4. BlockChain:区块链/加密数字货币落地技术应用高质量相关文章

    BlockChain:区块链/加密数字货币落地技术应用高质量相关文章 目录 区块链 加密币 BTC 区块链 这家以色列的公司以区块链技术为底层,打造去中心化无人驾驶出行平台 加密币 主流加密货币201 ...

  5. BlockChain:区块链入门课程 -- 区块链应用于能源 POWER LEDGER案例

    BlockChain:区块链入门课程-- 区块链应用于能源 POWER LEDGER案例 Power Ledger:如何启用区块链 概述能源部门的现状,将区块链作为关键推动因素之一. 3.1 欢迎来到 ...

  6. BlockChain:区块链入门课程 -- 区块链之类型 、应用程序、技术挑战和潜力

    BlockChain:区块链 类型 .应用程序.面临挑战和潜力 区块链的类型 不同类型的区块链协议概述.我们将深入探讨共识方法,了解公共区块,财团区块和私有区块链之间的差异; 他们的用途和价值主张. ...

  7. ICO和区块链的关系

    2017-08-09 10:46 在讲ICO之前,先讲这样一个故事. 有一个人开了一间赌场,每个赌徒要来赌场玩,必须先换一些筹码,才能参与赌场内的赌局.赌场内所有赌局都是实时利用筹码结算的.这间赌场服 ...

  8. 物联网区块链研究综述 Blockchain for Internet of Things A Survey

    Blockchain for Internet of Things: A Survey Dai H N, Zheng Z, Zhang Y. Blockchain for Internet of Th ...

  9. BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》(一)

    BlockChain:2020年7月10日世界人工智能大会WAIC<链智未来 赋能产业区块链主题论坛>(一) 导读: 以人工智能.大数据.物联网.区块链等为代表的数字技术正 深刻改变着人们 ...

最新文章

  1. 使用 NCS2 加速推断识别图片
  2. 一周时间摸清一个行业
  3. linux zfs功能,linux – 有没有办法一次设置多个ZFS文件系统属性?
  4. 【Spring】Spring boot 中文乱码
  5. JavaScript案例一:Window弹窗案例
  6. 关于 WPF 在主窗口中用多线程打开的子窗口关闭后进程还存在,这个问的题的解决方法。...
  7. Apache Flink 1.9.0 为什么将支持 Python API ?
  8. 用VC6.0实现上位机串口通信
  9. 3dmax最基础的建模教程,初学者福利
  10. MySql大批量生成测试数据
  11. 分区表怎么修复【转】
  12. 古代常见文学常识汇总
  13. 从MOSSE到KCF,再从KCF到C-COT,再从C-COT到ECO梳理
  14. echarts markline X轴 Y轴 添加标识线
  15. linux学习工具:工欲善其事必先利其器(2)
  16. 0809 电子科学与技术一级学科简介
  17. 青蛙的约会解题报告(转)
  18. 2022年全球市场总线插头总体规模、主要生产商、主要地区、产品和应用细分研究报告
  19. 说话人识别VAD算法概述
  20. 华为nova5i计算机有计算记录吗,华为nova5i评测 值不值得买

热门文章

  1. c# 调用mysql存储过程 返回值_C#调用MySQL存储过程,函数的最佳方法
  2. html css img标签鼠标事件,HTML+CSS入门 img标签学习
  3. 积分管理系统项目小结
  4. 中国地面气候资料日值数据集(V3.0)数据说明以及数据处理
  5. Java static关键字你了解多少?
  6. 浅谈IC卡、ID卡、M1卡和CPU卡
  7. 三子棋(五子棋)可拓展棋盘版
  8. Java中将对象中属性值为空字符串设置为null
  9. Linux磁盘分区介绍
  10. Linux磁盘分区格式化