├── 区块链开发 └── 99~参考资料 │ └── 2017~《Node.js 区块链开发》 │ └── README.md ├── README.md └── 共识算法 ├── 主流共识算法.md └── README.md /区块链开发/99~参考资料/2017~《Node.js 区块链开发》/README.md: -------------------------------------------------------------------------------- 1 | # 《Node.js 区块链开发》 2 | 3 | 本书可以作为 Node.js 开发加密货币的入门书籍(正式出版《Node.js 区块链开发》),也可以作为亿书的官方开发文档。 4 | 5 | 本书分享的源码是 Ebookcoin,是亿书的强大动力。类似于以太坊具有侧链功能,可以承载多种去中心化的应用。因此,无论您是研究区块链,或者学习 Node.js 前后端开发技术,本书都值得参考。 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 区块链概述 2 | 3 | 区块链是难以篡改、可追溯的分布式账本,其包含了块子链、多独立拷贝、拜占庭容错协议等多种内容。区块链还分有公有链和许可链,公有链和许可链的技术、需求、架构差异非常大。 4 | 5 | 比特币是典型的第一代区块链,其使用公有链、公开账本记录交易历史信息,不记录账户余额信息。以太坊是典型的第二代区块链,其完成了从数字货币应用到平台的转型,维护了完整的账本信息,并且支持基于智能合约的二次开发。 6 | 7 | # 区块链分类 8 | 9 | Blockchain 是一个不断增长的记录列表,称为块,使用加密技术进行链接和保护。区块链是一种不可变的数据结构,称为块的顺序记录链。每个块都可以包含事务,文件或您喜欢的任何数据。可以创建数据分类帐并在独立方网络之间共享。有许多不同类型的区块链。 10 | 11 | - 公共区块链:公共区块链(如比特币)是通过本机令牌运行的大型分布式网络。它们对任何人都可以参与任何级别的开放,并且拥有社区所维护的开源代码。 12 | 13 | - 许可的区块链:允许的区块链,例如 Ripple,控制角色,个人可以在网络中发挥作用。它们仍然是使用本机令牌的大型分布式系统。他们的核心代码可能是也可能不是开源的。 14 | 15 | - 私有区块链:私有区块链往往较小,不使用令牌。他们的成员受到严密控制。这些类型的区块链受到拥有可信赖成员和交易机密信息的财团的青睐。 16 | 17 | # 行业应用 18 | 19 | ## 金融 20 | 21 | 2015 年初,欧洲银行联盟提出的一个区块链方案“万能一条链”,就是把所有的金融机构都连在一条链上面,链上作交易清算结算;不过这种巨石型架构需要极大的计算力与资源消耗,并且也没有隐私保障。 22 | -------------------------------------------------------------------------------- /共识算法/主流共识算法.md: -------------------------------------------------------------------------------- 1 | # 主流共识算法 2 | 3 | 在区块链发展初期,主流区块链网络都是基于 PoW 共识算法,包括 Bitcoin,Ethereum,Litecoin,Zcash 等。由于 PoW 存在挖矿的资源浪费问题,2017 年后基于 PoS 的共识算法研究得到了迅猛的发展,并在 2018 年各种基于 PoS 共识算法的公有链都逐步上线。 4 | 5 | 对于当前主流共识算法可以采用如下几种方式分类: 6 | 7 | 基于挖矿方式分类: 8 | 9 | 1)PoW : 所有节点通过解决某个计算难题(例如哈希难题)参与共识。包括:Bitcoin,Ethereum, Litecoin 10 | 11 | 2)PoS:所有节点通过质押代币的方式参与共识。包括:Ethereum-PoS,Tendermint,Algorand,EOS DPoS,DFINITY,VBFT 12 | 13 | 基于终局性分类: 14 | 15 | 1)GHOST:PoW,Ethereum-PoS 16 | 17 | 2)BFT:Tendermint,EOS DPoS,Algorand,DFINITY,VBFT 18 | 19 | 基于节点选择方式: 20 | 21 | 1)所有节点参与:PoW,Ethereum PoS,Tendermint 22 | 23 | 2)随机选择部分节点参与:Algorand,Dfinity,VBFT 24 | 25 | ![](https://ww1.sinaimg.cn/large/007rAy9hly1g0r2rsjc3wj30r90f9405.jpg) 26 | 27 | # 衍化过程 28 | 29 | 在 Bitcoin 创建了区块链技术时,创建了 PoW 共识算法,通过计算哈希难题和最长链规则,实现去中心化的共识算法。随着 Bitcoin 网络规模的增大,后续区块在网络中传播延迟的增加,基于最长链规则造成了大量伪分叉,极大的浪费了网络中的算力和 PoW 共识算法的性能。 30 | 31 | 针对于伪分叉的问题,区块链社区后续提出了通过 DAG 方式扩展 PoW 共识算法,比如 PHANTOM,Conflux 等。但是针对于 PoW 的算力浪费的问题,区块链社区后续更多转向了基于 PoS 的共识算法。 32 | 33 | Ethereum 也计划逐渐减少 PoW 激励,直至最终完全取消对 PoW 的共识激励,完成到 PoS 共识算法的切换。同时,也有大多数新兴区块链平台都采用了 PoS 的共识方式,其中最著名为 EOS 的 DPoS 共识算法。 34 | 35 | 与此同时,随着区块链应用的增加,区块链共识算法的扩展性问题也日益凸显。图灵奖获得者 Micali 教授提出了 Algorand 算法,提出基于 VRF 随机选择部分节点参与共识的方式,通过 BFT 的方式极大降低了共识算法的消息复杂度,在保证去中心化安全性的同时实现共识算法的可扩展性。 36 | 37 | 在此基础之上,VBFT 等共识算法增加了基于 PoS 治理机制,并基于此解决了随机节点选择的抽样陷阱问题,在保证算法扩展性的同时实现优秀的终局性性能。 38 | 39 | 混合共识算法也值得介绍,由于单一共识算法由于其本身具有的局限性,例如 PoW 共识速度偏慢等,区块链研究者尝试将两种或者多种共识算法融合起来,取长补短,来达到更好的共识特性。一般来说,混合共识有 PoW+PoS,PoW+BFT 以及 PoS+BFT 等种类。可以看到新一代的共识算法,比如 Algorand,DFINITY,BUMO 的 BU Firework 以及 Ontology 的 VBFT,都属于混合共识算法。 40 | 41 | # 发展方向 42 | 43 | 总体来看,目前主流共识算法逐渐由 PoW 转向 PoS 共识算法,并且采用 VRF 随机选择节点的方式实现算法的扩展性,即使 Ethereum 后续的宁静版本,也将是基于 PoS 的共识算法,并在其信标链中实现 VRF 随机选择验证者节点。另外,Avalanche 共识算法也是采用随机选择节点的方式实现区块链共识算法的扩展性,不过目前还没有上线的区块链采用此共识算法。 44 | 45 | 随着区块链社区对区块链共识算法的研究,技术社区已经发现在 Internet 规模的网络中可达到的性能上限不仅取决于共识算法的性能参数,更取决于在此规模的网络中完成消息传播的时间延迟等物理上限。因此,主流区块链的研究团队都将下一步区块链网络性能扩展方向投向了分片技术、状态通道和二层网络等方向。 46 | -------------------------------------------------------------------------------- /共识算法/README.md: -------------------------------------------------------------------------------- 1 | 共识算法主要是解决分布式系统中多个节点之间对某个状态达成一致性结果的问题。分布式系统都是由多个服务节点共同完成对事务的处理,分布式系统中多个副本对外呈现的数据状态需要保持一致性。 2 | 3 | 但是由于节点的不可靠性和节点间通讯的不稳定性,甚至节点作恶伪造信息进行恶意响应,节点之间就存在数据状态不一致性的问题。通过共识算法,可以实现将多个不可靠的单独节点组建成一个可靠的分布式系统,实现数据状态的一致性,提高系统的可靠性。 4 | 5 | 区块链系统本身是一个超大规模的分布式系统,但又与传统的分布式系统存在明显区别。区块链系统建立在去中心化的点对点网络基础之上,在整个系统中没有中央权威,并由共识算法实现在分散的节点间对交易的处理顺序达成一致,这是共识算法在区块链系统中起到的最主要作用。 6 | 7 | 另外,与企业分布式系统不同,区块链系统中的共识算法还承担着区块链系统中激励模型和治理模型中的部分功能,包括每个区块中对哪些矿工进行激励发放、网络中所有交易手续费的结算和分配、区块链网络共识周期的切换等。 8 | 9 | # 算法分类 10 | 11 | ## 容错程度 12 | 13 | 共识算法根据容错能力不同,即在考虑节点故障不响应的情况下,再考虑节点是否会伪造信息进行恶意响应,可以分为 CFT(Crash Fault Tolerance)类和 BFT(Byzantine Fault Tolerance)类共识算法。 14 | 15 | CFT 共识算法只保证分布式系统中节点发生宕机错误时整个分布式系统的可靠性,而当系统中节点违反共识协议的时候(比如被黑客攻占,数据被恶意篡改等)将无法保障分布式系统的可靠性,因此 CFT 共识算法目前主要应用在企业内部的封闭式分布式系统中,目前流行的 CFT 共识算法主要有 Paxos 算法及其衍生的 Raft 共识算法。 16 | 17 | 采用 BFT 共识算法的分布式系统,即使系统中的节点发生了任意类型的错误,只要发生错误的节点少于一定比例,整个系统的可靠性就可以保证。因此,在开放式分布式系统中,比如区块链网络,必须采用 BFT 共识算法。 18 | 19 | 在区块链网络发展前,BFT 共识算法主要为 PBFT 共识算法,目前部分联盟链采用 PBFT 共识算法。由于公有链的开放性,任意节点都可以随时参与和退出网络并都有作恶的可能,近两年公有链的快速发展也带动了 BFT 共识算法的巨大进步。 20 | 21 | ## 同步模型分类 22 | 23 | 另外,因为共识算法都建立在底层的网络模型基础上,所以从网络同步模型的角度来看,共识算法可以分为三种,即同步共识算法,半同步共识算法,和异步共识算法。 24 | 25 | 同步共识算法要求网络中任一消息能够在已知的限定时间内到达所有的共识节点,因此主要应用在限定规模的网络环境中,大多数联盟链采用同步共识算法。 26 | 27 | 异步共识算法对于消息在网络中的传播延迟没有任何限制,消息可以在无限长时间后才能发送到其他共识节点,由于 FLP 不可能定理(在网络可靠,存在节点失效,即便只有一个的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。),异步共识算法无法确定性保证共识终局,因此几乎没有高效的全异步共识算法,即使 Bitcoin 的 PoW 算法也是基于同步网络保证一致性,基于异步网络保证可用性。 28 | 29 | 半同步共识算法在前两者之间做了权衡,要求网络中消息某限定时间后到达所有共识节点的的概率与时间的关系是已知的,目前主流的区块链共识算法都是基于半同步的网络模型,即半同步共识算法。 30 | 31 | # 共识算法优劣 32 | 33 | 评价一个区块链共识算法的优劣,可以从以下四个方面进行,即容错性能、终局性性能、扩展性(消息复杂度)以及网络模型性能。 34 | 35 | 容错性能:指共识算法的容错能力,比如 Raft 只能支持节点故障错误。而在区块链中,特别公有链中,由于节点间存在利益博弈,同时又是一个非中心化的网络状态,其共识算法必须支持节点作恶的容错,所以区块链的共识算法必然是 BFT 算法。 36 | 37 | 终局性性能:指区块链网络对一个候选区块完成终局一致性所需要的时间,这对于面向用户的 DApp 应用是非常重要的参数。 38 | 39 | 扩展性:指随着区块链网络节点数目与共识算法性能的相关关系,比如 PBFT 算法随着节点数目增加,完成一轮共识需要在网络中传播的消息数目呈平方比例增加,因此 PBFT 算法的天然特性无法支持大规模网络。 40 | 41 | 共识算法的网络模型性能对其容错性能和终局性能都有很大的影响。在区块链大规模网络条件下,同步共识算法要求所有节点在规定时间内响应对其他节点的消息,否则将被认为是故障节点,因此受网络波动影响较大,从而进一步导致算法容错性能的降低;而由于 FLP 不可能定理,异步共识算法无法给出确定的终局性性能,所以当前主流区块链共识算法都是基于半同步模型。 42 | --------------------------------------------------------------------------------