区块链(Blockchain)简单介绍
概要
此项目旨在了解区块链,包括概念、原理及了解可供学习及使用的开源项目平台。此文是整合诸多前辈们的文章而来,特此声明,参考的文章链接在本文末尾。
区块链概念及原理
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。
区块链本质上是一种去中心化的分布式数据库。任何人只要架设自己的服务器,接入区块链网络,都可以成为这个庞大网络的一个节点。(下图引用的原文链接在文章最下方的文章中)
区块链本质是数据库,存储的基本单元为“区块(Block)”,一个区块分为两大部分:
区块头
区块头里面存储着区块的头信息,包含上一个区块的哈希值(PreHash),本区块体的哈希值(Hash),以及时间戳(Timestamp)等等。
区块体
- 区块体存储着这个区块的详细数据(Data),这个数据包含若干行记录,可以是交易信息,也可以是其他某种信息。
区块链就是由许许多多的区块所组成的链式结构
- MD5是典型的哈希算法,可以把一串任意长度的明文转化成一串固定长度(128bit)的字符串,这个字符串就是哈希值。而区块链中,采用的是一种更为复杂的哈希算法,叫做SHA256。最新的数据信息经过一系列复杂的计算,最终会通过这个哈希算法转化成长度为256bit的哈希值字符串,也就是区块头当中的Hash。
- 区块与Hash是一一对应的,Hash可以当做是区块的唯一标识。不同的区块之间依靠Hash和PreHash来关联。每一个区块的PreHash和前一个区块的Hash值是相等的。
挖矿 就是计算最新数据的哈希值,生成新区块的过程。
- 计算最新Hash值的过程并不是简单的一次运算,而是需要海量的尝试性计算。例如:Hash = SHA-256(最后一个区块的Hash + 新区块基本信息 + 交易记录信息 + 随机数) ,这里关键的计算难点在于随机数的生成。猥琐的区块链发明者为了增大Hash的计算难度,要求Hash结构前72bit必须都是0,这个几率太小。
- 由于(最后一个区块的Hash + 新区块基本信息 + 交易记录信息)是固定的,所以能否获得符合要求的Hash,完全取决于随机数的值。挖矿者必须经过海量计算,反复生成随机数进行“撞大运”一般的尝试,才有可能得到正确的Hash,从而挖矿成功。同时,区块头内还包含着一个动态的难度系数,当全世界的硬件计算能力越来越快的时候,区块链的难度系数也会水涨船高,使得全网平均每10分钟才能产生出一个新区块。
区块链的应用
- 区块链最著名的应用就是[比特币]
- 比特币(BitCoin) 的概念最初由中本聪于2008年提出,而后根据这一思路设计发布了开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。什么是P2P网络呢?传统的货币都是由中央银行统一发行,所有的个人储蓄由银行统一管理,这是典型的中心化系统。而比特币则是部署在一个全世界众多对等节点组成的去中心化网络之上。每一个节点都有资格对这种数字货币进行记录和发行。
- 基于比特币底层的数据存储,正是基于了区块链技术。比特币的每一笔交易,都对应了区块体数据中的一行,交易记录的每一行都包含时间戳、交易明细、数字签名。
- 比特币协议规定:挖到新区块的矿工将获得奖励,从2008年起是50个比特币,然后每4年减半,目前2018年是12.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提供的Sawtooth
Lake并列为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/
小众门派
上述区块链开发的三大主流平台,从活跃度、受关注和参与人数来说,远远超过其他平台。但俗话说莫欺少年穷,一些眼下还默默无闻的平台也不容忽视。
本文参考原文,链接如下,特此声明
如有不妥之处,欢迎批评指正,本人链接如下:
https://my.oschina.net/llzhang/blog