IPFS给区块链带来的改变,Filecoin的作用
一、区块链的基础介绍
早在十年前,区块链仅仅是被人们理解是比特币的底层技术之一,是一种不可纂改的链式数据结构。经过这些年的迅速发展,区块链被越来越多的人熟知,从一开始的听都没听过,到现在的人人熟知,它也从单纯的数据结构,演变成分布式账本的一系列技术的总称。它整合了加密、共识机制、点对点的网络技术。这些年来,区块链的非账本类应用逐渐开始兴起,大家都开始将区块链描述为分布式的数据库,认为它是价值传递网络,它逐渐被赋予了更多更多的内涵。
我们从技术层面来讲的话,区块链是一种分布式数据库,旨在维护各个相互不信任的节点中数据库的一致性,并且是不能够被篡改的。我们的信用和记录会被保存到区块链上面,每一个新的区块当中,都存有上一个区块的数字指纹、该区块的信用和记录,以及生成新的区块时间戳。这样一来的话,区块链就会持续的增长,并且很难被篡改,一旦修改区块链上的任何一个区块信息,那么后续区块的数字指纹也就全部失效了。
链式的数据结构使得区块的历史很难被篡改,而且在各个互不信任的节点之间,保持数据的一致性,则需要共识机制的完成。共识机制是网络预先设定的规则,以此来判断每一笔记录及每一个区块的真实性,只有那些被判断为真实的区块,才会被记录到区块链中;相反的话,如果不能通过共识机制的新区块,则会被网络所抛弃,区块里记录的信息也就不会再被网络所认可。目前咱们常见的共识机制,包括PoW(工作量证明)、PoS(权益证明)、PBFT(实用拜占庭容错)等。
比特币、以太坊、比特现金以及绝大部分加密数字货币,都是使用的PoW工作量证明。我们维护比特币账本的节点,被称之为矿工,矿工每次在记录一个新的区块时候,会得到一定的比特币作为奖励。因此呢,矿工们则会为自己的利益,尽可能的去争夺新的区块记账权力,并获得全网的认可。工作量证明要求新区块的哈希值,必须拥有一定的数量前导0。矿工们把交易信息不断的与一个新的随机数进行哈希运算,计算得到区块的哈希值。一旦这个哈希值拥有要求数目的前导0,这个区块就是合法的,矿工们会把它向全网广播确认。而其他的矿工收到这一新的区块,会去检查这一区块的合法性,如果合法的话,新的区块会写入到该矿工自己的账本之中。
与要求证明人执行一定量的计算工作不同,PoS权益证明要求证明人,提供一定数量的加密货币所有权即可。权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例,把一些币发送给矿工。权益证明机制,根据每个节点拥有代币的比例和时间,依据算法等比例,降低节点的挖矿难度。这种共识机制可以加快共识,也因矿工不再继续竞争算力,网络能耗会大大降低。但也有专家指出,PoS权益证明牺牲部分网络去中心化的程度。
目前,PoW和PoS是加密数字货币的主流算法,其他几个常见的共识机制有DPoS和PBFT,限于篇幅,这里不再进一步展开了。
二、区块链的发展历程
1976年是奠定区块链的密码学基础的一年,这一年Whitfield Diffie与Martin Hellman首次提出Diffie-Hellman算法,并且证明了非对称加密是可行的。与对称算法不同,非对称算法会拥有两个密钥——公开密钥和私有密钥。公开密钥和私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的公开密钥才能解密;如果用私有的密钥对数据进行加密,那么只有用对应的公开密钥才能解密。这是后来比特币加密算法的核心之一,我们使用比特币钱包生成私钥和地址时,通过椭圆曲线加密算法,生成一对公钥和私钥。有了私钥我们可以对一笔转账签名,而公钥则可以验证这一笔交易是由这个比特币钱包的所有者签名过的,这是合法的。将公钥通过哈希运算,可以计算出我们的钱包地址。
1980年,Martin Hellman的学生Merkle Ralf提出了Merkle Tree(默克尔树)数据结构和生成算法。默克尔树最早是要建立数字签名整数的公共目录,能够确保在点对点网络中传输的数据块是完整的,并且是没有被篡改的。我们前面提到,在比特币网络中,每一个区块都包含了交易信息的哈希值。这一哈希值并不是直接将交易顺序连接,然后计算它们的哈希,而是通过默克尔树生成的。默克尔树生成算法会将每笔交易做一次哈希计算,然后两两将计算后的哈希值再做哈希,直到计算到默克尔根。而这个默克尔根就包含了全部的交易信息。这样,能大大节省钱包的空间占用。例如,在轻钱包中,我们只需下载与自己钱包对应的交易信息,需要验证的时候,只需找到一条从交易信息的叶节点到根节点的哈希路径即可,而不需要下载区块链的全部数据。在IPFS项目里,也借鉴了默克尔树的思想。数据分块存放在有向无环图中,如果数据被修改了,只需要修改对应默克尔有向无环图中的节点数据即可,而不需要向网络重新更新整个文件。值得一提的是,Merkle在提出默克尔树时,分布式技术尚未成型,更别提数字货币了,而他在当时就能察觉并提出这样的方法,实在是令人赞叹。
非对称加密算法和默克尔树数字结构是后续数字货币和区块链的理论基础。而真正将密码学用于数字货币的尝试,则晚了许多。数字货币兴起于1990年的数字朋克(CyberPunk)运动,它是由一批热爱网络的极客们推动的。数字朋克们大多是密码学的专家,对于个人隐私十分向往,希望建立一套独立于现实中的国家、等级制度以外的空间。其中最典型的代表是David Chaum,他最早提出了盲签名技术,并将其应用到了Digit Cash项目(又名Ecash)中。盲签名是一种保护隐私的签名方式,它的签名者对其签署的消息不可见。比如,用户需要签署一个转账信息,而这一信息需要银行签名,用户为了保护隐私,不希望银行看到其具体的转账对象,就可以使用盲签名。这套系统已经与当时的银行系统非常接近了,差一点获得了成功。但是Digit Cash始终需要中心化的银行服务器支持。在后续,没有一家银行愿意再支持他的项目,最终项目失败了。
在Digit Cash失败后的几年里,人们几乎放弃了数字现金的构想。仅有少数的数字朋克继续研究着。一个名为Hashcash的想法是在1997年由当时同为数字朋克的博士后研究员Adam Back独立发明的。Hashcash的想法很简单:它没有后门,也不需要中心第三方,它只使用哈希函数而不是数字签名。Hashcash基于一个简单的原理:哈希函数在某些实际用途中表现为随机函数,这意味着找到哈希到特点输出的输入的唯一方法是尝试各种输入,直到产生期望的输出为止。而且,为了找到这样一个符合条件的输入,唯一方法是再次逐个尝试对不同的输入进行哈希。所以,如果让你尝试找到一个输入,使得哈希值前10位是0,你将不得不尝试大量的输入,你每次尝试成功的机会是(1/2)10。这就是工作量证明的早起来源,也是矿工们每天在重复做的事情。他甚至在技术设计上做了一些修改,使其看起来更像一种货币。但显然,他的方案不能检验节点是否作弊,不能作为真正的数字现金。
还有两位有杰出贡献的数字朋克——Hal Finney和Nick Szabo,他们经过重新考虑将技术整合了起来。Nick Szabo不仅是一位计算机科学家,同时精通法律。Szabo受到David Chaum的启发后,希望利用密码协议和安全机制,提出了数字合约的构想。数字合约能在网络上不依靠第三方协助而是利用程序来验证并执行合同,它与传统合同相比更安全,并且减少了繁琐沟通的成本。这对后续的加密数字货币设计有着极大的影响。比特币网络可以提供非图灵完备的脚本语言,实现部分智能合约功能;以太坊则进一步在EVM上运行Solidity语言,提供了图灵完备的智能合约环境,这也为后续分布式应用开发奠定了基础。
Nick做出的贡献还不只是发明了智能合约,在2008年,他发起了Bit Gold项目。在项目计划书中,Nick阐述的Bit Gold架构与现在的比特币完全相同,同样是工作量证明机制,同样是链式网络结构,同样的新区块包含旧区块的数字指纹,包含时间戳等诸多特性。然而,最终Bit Gold项目还是没有顺利完成。目前,Bit Gold可查寻的源头只有在Bitcoin Talk论坛中的帖子,后续的可查证资料就很少了。有一些比特币爱好者们一度认为Szabo就是中本聪本人,不仅因为Bit Gold与Bitcoin的也相似之处令大家充满想象,甚至是在词法和句法上,中本聪的比特币论文与Bit Gold论文也有相似之处。而且Nick家不远的地方,有一位叫中本聪的日本人,大家猜测这是Nick为了掩人耳目而故意隐藏自己的身份。Nick本人对此表示否认,并觉得这是个很搞笑的八卦。当然这也成为数字货币里的最大谜团,究竟中本聪是谁呢?
再之后,到了2009年,中本聪发表了比特币论文。他提出一整套加密协议,而不仅仅是加密货币。比特币使用计算机程序控制货币的发行,发行总量2100万枚。比特币的账本记录在成千上万台计算机上,黑客无法入侵;每个账户都是加密地址,你不知道谁在花钱,但是每个比特币的流通都被记录,你知道它的来源和去向的地址。比特币是第一个达到上述全部思想的项目,整合了之前30多年的技术积累。
比特币在设计之时,考虑到网络的稳定性和抵御恶意攻击,它使用的是非图灵完备的脚本语言(主要不能使用循环语句)。2013年,Vitalik Buterin认为,比特币需要一种图灵完备的脚本语言,来支持多样的应用开发。这个思路没有被比特币社区支持,于是Buterin考虑用更通用的脚本语言,开发一个新的平台,这就是后来的以太坊。以太坊在大致思路上与比特币相似,在账户状态、UTXO、地址形式上进行了一些优化。其最大的亮点在于,开发了Solidity智能合约变成语言,和以太坊虚拟机(EVM)这一以太坊智能合约的运行环境,用于按照预期运行相同的代码。正因为EVM和Solidity,区块链的平台应用(DAPP)迅速兴起了。以太坊平台提出了许多新的用途,包括那些不可能或不可行的用途,例如金融、物联网服务、供应链服务、电力采购和定价及博彩等。时至今日,基于DAPP的各类应用还在迅速发展,新的市场和需求在进一步被发现。后续区块链会如何发展,我们拭目以待吧。
三、IPFS为区块链带来了什么样的改变呢
区块链的诞生本是为了做到去中心化,在没有中心机构的情况下达成共识,共同维护一个账本。它的设计动机并不是为了搞笑、低耗能,抑或是拥有可扩展性(如果追求高效、低能耗和扩展性,中心化程序可能是更好的选择)。IPFS与区块链协同工作,能够补充区块链的量大缺陷:
1)区块链存储效率低,成本高
2)跨链需要各个链之间协同配合,难以协调
针对第一个问题,区块链网络需求全部的矿工维护同一个账本,需要每一个矿工留有一个账本的备份在本地。那么在区块链中存放的信息,为了保证其不可篡改,也需要在各个矿工手中留有一份备份,这样是非常不经济的。设想一下,现在全网有一个矿工,即便我们希望在网络保存1MB信息,全网消耗的存储资源将是10GB。目前,也有折中的方案来缓解这一问题。在搭建去中心化应用DAPP时,大家广泛采取的方式是,仅在区块链存放哈希值,将需要存储的信息存放在中心化的数据库中。而这样,存储又成为去中心化应用的一个短板,是网络中脆弱的一环。IPFS则提出了另一个解决方法:可以使用IPFS存储文件数据,并将唯一永久可用的IPFS地址放置到区块链事务中,而不必将数据本身放在区块链中。针对第二个问题,IPFS能协助各个不同的区块链网络传递信息和文件。比特币和以太坊区块结构不同,通过IPLD组件,已经实现了将以太坊智能合约代码通过IPFS存储,在以太坊交易中只需存储这个链接即可。
四、Filecoin:基于IPFS技术的区块链项目
在上一篇文章《连载:学习了解IPFS知识》中我们介绍了IPFS的结构。Filecoin是IPFS的激励层。我们知道,IPFS网络要想稳定运行需要用户贡献他们的存储空间、网络带宽,如果没有恰当的奖励机制,那么巨大的资源开销很难维持网络持久运转。受到比特币网络的启发,将Filecoin作为IPFS的激励层就是一种解决方案了。对于用户而言,Filecoin能够提高存取速度和效率,能带来去中心化的应用;对于矿工,贡献网络资源可以获得一笔不错的收益;而对于业务伙伴,例如数据中心,也能贡献他们的空闲计算资源用于获得一定的报酬。Filecoin会用于支付存储、检索和网络中的交易。与比特币类似,它的代币总量为2亿枚,其中70%会通过网络挖矿奖励贡献给矿工,15%为开发团队持有,10%给投资人,剩下5%为Filecoin基金会持有。投资人和矿工获得的代币按照区块发放,而基金会和开发团队的代币按照6年时间线性发放。由此可见,Filecoin与比特币挖矿机制完全不同。我们前面提到,为了避免攻击,比特币通过PoW工作量证明机制,要求矿工挖出下一个满足哈希值包含多个前导0的新区块。这个过程会需要大量的哈希运算。Filecoin使用的是复制证明(Proof of Replication,RoRep)。复制证明是矿工算力证明形成的主要方式,证明矿工在自己的物理存储设备上实际存储了数据,可以防止恶意矿工的各种攻击,网络中的验证节点会随机检查矿工是否在作弊。如果矿工不能提供正确的复制证明,那么它将被扣除一定的Filecoin作为惩罚。相比于PoW机制带来的算力竞争,PoRep显得环保的多。想了解更多加suanlifeng666666