1
概要
此项目旨在了解区块链,包括概念、原理及了解可供学习及使用的开源项目平台。此文是整合诸多前辈们的文章而来,特此声明,参考的文章链接在本文末尾。
2
区块链概念及原理
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。
区块链本质上是一种去中心化的分布式数据库。任何人只要架设自己的服务器,接入区块链网络,都可以成为这个庞大网络的一个节点。(下图引用的原文链接在文章最下方的文章中)
![1620](https://i-blog.csdnimg.cn/blog_migrate/446d9ccfccc9d7faad1500f0be167460.jpeg)
区块链本质是数据库,存储的基本单元为“区块(Block)”,一个区块分为两大部分:
- 区块体存储着这个区块的详细数据(Data),这个数据包含若干行记录,可以是交易信息,也可以是其他某种信息。
- 区块头
区块头里面存储着区块的头信息,包含上一个区块的哈希值(PreHash),本区块体的哈希值(Hash),以及时间戳(Timestamp)等等。 - 区块体
- 区块头
- 区块链就是由许许多多的区块所组成的链式结构
![1620](https://i-blog.csdnimg.cn/blog_migrate/3a63a1d4809746818aeeb6de5308a485.png)
- MD5是典型的哈希算法,可以把一串任意长度的明文转化成一串固定长度(128bit)的字符串,这个字符串就是哈希值。而区块链中,采用的是一种更为复杂的哈希算法,叫做SHA256。最新的数据信息经过一系列复杂的计算,最终会通过这个哈希算法转化成长度为256bit的哈希值字符串,也就是区块头当中的Hash。
- 区块与Hash是一一对应的,Hash可以当做是区块的唯一标识。不同的区块之间依靠Hash和PreHash来关联。每一个区块的PreHash和前一个区块的Hash值是相等的。
- 挖矿 就是计算最新数据的哈希值,生成新区块的过程。
- 计算最新Hash值的过程并不是简单的一次运算,而是需要海量的尝试性计算。例如:Hash = SHA-256(最后一个区块的Hash + 新区块基本信息 + 交易记录信息 + 随机数) ,这里关键的计算难点在于随机数的生成。猥琐的区块链发明者为了增大Hash的计算难度,要求Hash结构前72bit必须都是0,这个几率太小。
- 由于(最后一个区块的Hash + 新区块基本信息 + 交易记录信息)是固定的,所以能否获得符合要求的Hash,完全取决于随机数的值。挖矿者必须经过海量计算,反复生成随机数进行“撞大运”一般的尝试,才有可能得到正确的Hash,从而挖矿成功。同时,区块头内还包含着一个动态的难度系数,当全世界的硬件计算能力越来越快的时候,区块链的难度系数也会水涨船高,使得全网平均每10分钟才能产生出一个新区块。
3
区块链的应用
- 区块链最著名的应用就是[比特币]
- 比特币(BitCoin) 的概念最初由中本聪于2008年提出,而后根据这一思路设计发布了开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。什么是P2P网络呢?传统的货币都是由中央银行统一发行,所有的个人储蓄由银行统一管理,这是典型的中心化系统。而比特币则是部署在一个全世界众多对等节点组成的去中心化网络之上。每一个节点都有资格对这种数字货币进行记录和发行。
- 基于比特币底层的数据存储,正是基于了区块链技术。比特币的每一笔交易,都对应了区块体数据中的一行,交易记录的每一行都包含时间戳、交易明细、数字签名。
- 比特币协议规定:挖到新区块的矿工将获得奖励,从2008年起是50个比特币,然后每4年减半,目前2018年是12.5个比特币。流通中新增的比特币都是这样诞生的。
4
区块链的优劣
- 优势:
- 区块内的数据是无法篡改的,一旦数据遭到篡改哪怕一点点,整个区块对应的哈希值就会随之改变,不再是一个有效的哈希值,后面链接的区块也会随之断裂。
- 区块链不依赖于某个中心节点,整个系统的数据由全网所有对等节点共同维护,都可以进行数据的存储和检验。这样一来,除非攻击者黑掉全网半数以上的节点,否则整个系统是不会遭到破坏的。
- 去中心化
- 信息不可篡改
- 劣势:
- 以比特币为例,任何一笔交易数据都需要同步到其它所有节点,同步过程中难免会受到网络传输延时的影响,带来较长的耗时。
- 想要生成一个新的区块,必须要大量服务器资源进行大量无谓的尝试性计算,严重耗费电能。
- 过度消耗能源
- 信息的网络延迟
5
主流区块链技术平台(供参考)
区块链平台主要包括:比特币、以太坊、Hyperledger Fabric、Sawtooth Lake、R3 Corda、Chain、BigchainDB。开发者可以根据这些开源项目学习、使用区块链做应用。
比特币
- 比特币作为区块链的第一个也是目前为止最成功、最重要的样板工程,已经上线运行了八年多,本身没有发生任何严重的安全和运维事故,其稳定与强悍堪称当代软件系统典范。
- 比特币Bitcoin Core是一个代码质量高、文档良好的开源软件,从学习区块链原理、掌握核心技术的角度来说,Bitcoin Core是最佳切入点,能够学到原汁原味的区块链技术。
- Bitcoin Core使用C++写的,而且用了一些C++11和Boost库机制。还可以对接繁荣的比特币技术社区。
- 比特币作为一个典型的区块链1.0系统,是不是支撑其他类型区块链应用的最佳技术平台,存在争议。另外,也不是所有人都有能力和必要精通区块链底层技术,所以对于基于冲到区块链领域做事的人来说,可以直截了当的学习目标是以太坊和Hyperledger Fabric。
- 可供参考链接:https://bitcoin.org/en/bitcoin-core/
以太坊
- 在以太坊上面用Solidity进行的智能合约开发是切入区块链开发最简单的方式,没有之一。
- 以太坊的理想非常宏大,由于配备了强大的图灵完备的智能合约虚拟机,因此可以成为一切区块链项目的母平台,是驮住整个区块链世界的大乌龟。在以太坊上开发一个类似比特币的加密货币,是一个不折不扣的小目标。一般有经验的开发者在文档指导下,半天到一天即可入门。问题在于,入门以后又如何?靠写Solidity是否就可以包打天下?这是大大存疑的。我们也可以反过来说,如果以太坊+Solidity是区块链的终极解决方案,那么怎么还会出现那么多区块链技术门派呢?特别是,以太坊似乎并没有给现实世界中巨型的中心化组织们留下一条活路,这种彻底不妥协的革命态度有可能也成为以太坊推广的障碍。
- 当前以太坊项目的开发进展并不顺利。一个比较突出的问题是项目过多,力量分散,导致项目质量参差不齐。但尽管如此,跟其他区块链2.0平台相比,以太坊提供的开发环境是最简单最完善的。初学区块链的人绝对有必要学习以太坊,从而对区块链和智能合约建立起一个最“正宗”的认识。
- 可供参考链接:https://www.ethereum.org/
Hyperledger Fabric
- 主流区块链技术平台的第三支就是Fabric,它是Hyperledger的第一个也是最知名的孵化项目。
- Fabric最早来自IBM的Open Blockchain项目,到2015年11月,IBM将当时已经开发完成的44,000行Go语言代码交给Linux基金会,并入Hyperledger项目之中。在2016年3月一次黑客马拉松中,Blockstream和DAH两家公司将各自的代码并入Open Blockchain,随后改名为Fabric。到目前为止,Fabric与Intel提供的SawtoothLake并列为Hyperledger的一级孵化项目,但前者得到的关注远超后者。
- 从技术角度来说,Fabric思路不错,重点是满足企业商用的需求,比如解决交易量问题。众所周知,比特币最大的短板是它每秒钟7个交易的上限,完全无法满足现实需要。而Fabric目标是实现每秒钟10万交易,这个量接近刚刚过去的双十一交易量瞬时峰值,完全可以满足正常条件下的行业级应用。Fabric用Go语言开发,也提供多种语言的API。特别值得一提的是,Fabric比较充分地运用了容器技术,比如其智能合约就运行在容器当中。这也是Go语言带给Fabric的一项福利,因为Go语言静态编译部署的特征很适合开发容器中的程序。
- Fabric还有一些特点,比如其membership服务可以设置节点准入审查,这是典型的联盟链特征。再比如其共识算法是可定制的。Fabric自带PBFT共识算法实现,但是PBFT的算法效率是O(n²),其中n是节点数量。因此PBFT用在节点数量受限的联盟链里是没有问题的,但用在公有链里效率过低。
- Fabric的短板是体系较为复杂,虽有文档,但缺少经验的开发者学习起来障碍比较大。然而由于其定位清楚,迎合了不少企业的心态,所以已经有多家机构在基于Fabric秘密研发行业内的联盟链项目。
- 可供参考链接:https://cn.hyperledger.org/
6
小众门派
上述区块链开发的三大主流平台,从活跃度、受关注和参与人数来说,远远超过其他平台。但俗话说莫欺少年穷,一些眼下还默默无闻的平台也不容忽视。
- Sawtooth Lake:
- Hyperledger的另一个一级孵化项目Sawtooth Lake是Intel开发的区块链平台,是一个有想法的区块链项目,设计十分精心。它以数字金融资产管理为目标,整体架构清晰,模块化程度高,因此可定制能力也强。概念上独创了“交易族(transaction family)”概念,而且还支持PoET和Quorum两种共识机制。当节点数量很多(公有链环境)时,使用第6代Intel Core CPU所提供的SGX扩展功能提供一种称为时间流逝证明(PoET)的机制来形成共识,这种机制与比特币所采用的PoW同属“抽彩票”式的共识算法,但杜绝了通过ASIC专用硬件“作弊”的可能性,排除了比特币出现的算力过于集中的隐患,可靠性由Intel CPU硬件来保障,是公有链系统里很有价值的一个共识机制。另一方面,当节点数量少且受控时,Sawtooth Lake可以采用Quorum共识机制,这是由Ripple提出并验证的共识机制,非常适合于联盟链场景,这样Sawtooth Lake就摇身一变成为很好用的联盟链了。
- Sawtooth Lake采用Python开发,并提供了Java SDK。由于这两种语言的流行度,实际上它应该有很大的潜在开发者人群。事实上,R3 CEV曾经测试过Sawtooth Lake并进行了成功的证券交易实验。当前它主要的问题是受关注度不足,不知Intel是否有足够的耐心和毅力坚持到底。如果Intel战略更明确一些,支持力度更大一些,我建议大家可以对它投以更多的关注。
- 可供参考链接:https://sawtooth.hyperledger.org/docs/core/releases/latest/index.html
- Corda:
- 是一个备受关注的分布式账本项目。 R3是由数十家银行和金融机构支持的区块链企业,融资上亿美元,号称汇集了一票高手,潜心研究符合金融行业需求的分布式账本系统。Corda是R3分布式账本系统中的核心,也正式开源。
- Corda采用JetBrain原创的小众语言Kotlin开发,对Java世界敞开大门,这是令人点赞的。此外,Corda更重要的特色是其与现有世界里大银行、大型中心机构的全面妥协、全面合作的姿态,这与以太坊革命无罪、造反有理的形象形成鲜明对比。Corda在设计中有多项独特考虑,就是为了对接现有的业务规则。比如在其他几乎所有区块链平台里,每一个交易对于各节点来说都是可见的,可见才能验证,能验证才谈得上共识,所以交易的全网可见性是顺理成章的。但是现实世界里金融机构之间的交易,只有交易相关方才能看到交易详情,工行与建行的一笔交易,绝无必要让招行看到。为了对接这个现实,Corda设计了与众不同的机制,牺牲了交易验证的全局可见性,确保只有交易相关方才能看到和验证交易本身。可是另一方面,银行业务是被重度监管的业务,不能因为你用了区块链系统,就把洋洋洒洒的巴塞尔协议晾在一边,监管机构的职能如何体现?这是其他区块链系统里考虑不多的。而Corda设计了独特的Notary和Oracle节点,为监管体系进入留下了空间。仔细品味,这些都是给现实世界当中的大机构预留的美差。这些设计上的考虑,无疑大大增强了Corda被现有大型金融机构采纳的机会。不过这一切看上去很美好,但目前Corda的实现基本上是个花架子,设想的种种,不少处于TODO状态。
- 参考链接:https://www.corda.net/zh-hant/
- 另外两个值得点名的区块链门派分别是Chain和BigchainDB。前者跟Visa有合作,后者是一个基于RethinkDB开发的分布式账本,两者各有各的思路和特色,也拿到了为数可观的投资,不排除未来能有大的发展。
原文发布时间为:2018-03-19
本文作者:java思维导图
本文来源:腾讯云 云+社区,如需转载请联系原作者。