-
Notifications
You must be signed in to change notification settings - Fork 6
HPB共识算法简介与比较
HPB是一套基于特定硬件设备的高性能区块链基础设施。其运行在分布式的网络上——各个节点通过P2P的邻居节点相连,各类节点之间独立维护自己各自的区块。HPB的共识算法为系统的核心,共识算法负责协调各类节点以保障整个系统的交易和智能合约的数据一致性。
HPB的算法是一种基于委托投票的POA提升算法。 Proof of Authority [1] 是运行可信区块链节点上的一种共识算法,其更轻量的消息交换机制使其在共识效率上远高于其他共识算法。POA最初由Ethereum [2] 团队提出。 POA中每个节点我们称为Authority,每个节点存在一个唯一的标识ID,我们假设大多数的(N/2 + 1)节点是诚实的。各个Authority的交易序列来保证交易的顺序,POA采用轮流 “挖矿” 的模式,每个Authority自行生成区块,进行 “挖矿” 之后立即进行广播。为了避免并发广播可能造成的网络流量瞬间拥塞,每个区块对于每个Authority的优先级别不同,优先级别高的Authority优先生成区块并立即进行广播,优先级根据一定的运算关系在不同的Authority中进行轮转。
传统的POA模式运行在可信节点上,可信节点意味着各个节点之间相互信任,但在实际的运行环境中网络环境错综复杂,无法保证节点的可信关系。同时传统POA节点之间关系无法自动化管理,缺乏对系统网络治理的办法。HPB的算法将传统的POA方案,硬件加速,与基于智能合约的选举方案相结合,旨在提升POA性能的同时,解决其自身安全性和系统自治性的问题。HPB共识算法在基于POA的总体原则上,从网络,存储,处理效率等方面对优化和提升。具体的讲,HPB采用了硬件验签,硬件TCP/IP协议栈,硬件LevelDB [3] 的合并操作优化的方式对算法的效率进行了优化,同时HPB采用了硬件伪随机的形式保证了“挖矿”的不可预测性。
HPB的共识算法将区块链系统分成4类角色,客户端,同步节点,候选节点和高性能节点。如下图1所示,所有的候选节点与高性能节点将直接相连,减少了P2P网络中的邻居发现时间; 同步节点与若干候选节点或高性能节相连,客户端直接同步节点相连。同步节点不参与区块链系统维护过程。我们将各个角色的主要功能描述如下:
图1: 系统的角色描述图
- 客户端:负责交易的组建, 查询,与其他业务处理,客户端是用户直接进行沟通的介质。此处的客户端代表交易所,Dapp [4] 程序,钱包等。
- 同步节点:同步节点主要负责对主网上的数据进行实时同步,以供客户端的交互使用。
- 候选节点:候选节点为社区通过投票选出的节点,候选节点与高性能节点周期性根据实时表现(带宽,持币数,投票数)进行替换,候选节点不进行区块的生成,主要负责辅助高性能节点传播区块和交易。
- 高性能节点:高性能节点主要完成有交易到区块的固化,高性能节点根据硬件随机数在周期内进行挖矿轮转。
HPB算法工作的总体流程如图1所示,社区通过智能合约选举出最优的候选节点,候选节点通过区块的历史指标数据(带宽,持币数,当日投票结果等)选举出下一轮次的高性能节点群组。高性能节点群组负责生成区块同时可获得系统奖励。
图2:HPB共识算法整体设计方案
候选节点的选举过程有智能合约自动完成,其中智能合约的代码透明并且可审计。系统每隔三个月是重新发布一个新合约,社区的人员会依据新合约选出当前3个月内的候选节点;同时,智能合约支持对当期的候选节点进行持续投票,系统最终在当日根据当日的选举结果计算当日的收益。
高性能节点的选举有区块中的历史数据进行自动化选举获得。其中选举指标包含:实时的投票数量Pv ,实时的持币量Pb ,带宽系数 Pn 。其中投票数通过调用智能合约直接获取,候选节点的持币数目通过查询本地数据库直接获取,带宽数据通过区块数据的统计获取(更详细的说,系统自动回溯区块,获取最近的2000个区块中携带的带宽数据的平均值),
加权公式:
$$
Ri = ViPv + biPb + ni*Pn
$$
通过以上公式的计算,最终会获取高性能节点列表,硬件的随机数序列决定了高性能列表的出块优先级顺序,其随机性保证了高性能节点出块的优先级的不可预测性。所有高性能节点的硬件随机数采用相同的随机算法,且初始值相同,确保了每个轮次所获取的随机值一致。同时对随机值的调用频次进行了限制,进而使后续的随机值无法被预测。
图3:HPB 硬件随机数的产生过程
总结:持续运行的智能合约保证了高性能节点的流动性,解决了原有POA算法中可信节点固定的问题,硬件随机数解决了出块优先顺序被预测的问题。
HPB算法中提出了创新性的BOE模块。BOE系统分为四个子模块,TOE网络接口、Pcie主机接口、TSU任务调度单元和FAP函数加速单元。系统主要实现三个功能,第一提供硬件识别功能,芯片中的ECC签名模块会对接收到的信息进行签名,通过签名可以验证目标系统是否具有BOE板卡;第二用硬件实现TCP/IP协议栈,减少TCP连接数据拷贝次数和通道延迟,也降低对主机CPU和内存的占用;第三对软件处理非常耗时的函数进行加速。出于安全的考虑,对所有的交易和区块都需要经过签名和验证的处理过程,现在软件只能做到每秒上千次验签,远远达不到性能需求,因此在BOE硬件中设计了多个验签模块并发工作,可以支持到每秒20000次验签。另外在区块链系统中,智能合约和交易数量越多,数据库合并就越频繁,软件操作LevelDB [3] 的合并会占用大量CPU和内存资源,并严重影响访问数据速度,HPB使用硬件对LevelDB的合并操作进行加速处理,极大减轻CPU负担并加快访问速度。
图4:BOE功能框图
POW共识机制最初有比特币 [5] 采纳,由算力决定记账权,按照持有的算力占总算力的百分比来决定获得该次记账权的概率。节点需要不断消耗算力工作,进行哈希计算,以找到期望的随机数。验证节点被称为“矿工”,随机数查找过程称为“挖矿”。“挖矿”有三个重要功能:发行新的货币、维护系统的支付功能、通过算力保障系统安全。POS即权益证明机制,最早出现在点点币的白皮书中 [7],其核心思想是将货币持有人的数目和持有的时间累计作为被选为共识节点的资本。DPOS共识机制是一种基于投票选举的共识算法,类似于代议制民主。在POS的基础上,DPOS先选举若干代理人,由代理人验证和记账,代理人之间轮流出块。DPOS相比POS能大幅度提升选举效率,在牺牲一部分去中心化特性的情况下得到性能提升。BFT算法首先在Lamport,Shostak和Pease于1982提出 [6]。但是Lamport等人只在同步环境中(所有的消息总是及时到达)演示了算法的理论可行性。本质上,BFT共识算法的目的是在不信任网络中(如万维网)的节点间建立信任,而是如何保持分布式系统的一致性和高可用性。POA 运行在一组可信节点中。在POA中,验证者(validator)是整个共识机制的关键。 验证者不需要昂贵的显卡,也不需要足够的资产,但他必须具有已知的,并且已获得验证的身份。验证者通过放置这个身份来获得担保网络的权利,从而换取区块奖励。
POW | POS | DPOS | BFT | POA | HPB | |
---|---|---|---|---|---|---|
交易速度 | 慢 | 中 | 快 | 中 | 快 | 快 |
一致性 | 最终一致 | 最终一致 | 最终一致 | 立即一致 | 最终一致 | 最终一致 |
硬件加速 | 否 | 否 | 否 | 否 | 否 | 是 |
安全性 | 高 | 中 | 中 | 低 | 低 | 高 |
节点规模 | 大 | 中 | 小 | 小 | 中 | 可支持大规模 |
中心化 | 弱 | 中 | 强 | 强 | 强 | 中 |
能源消耗 | 高 | 低 | 低 | 低 | 低 | 低 |
应用案例 | Bitcoin, Ethereum, Litecoin | NXT, Tezos, soon Ethereum | EOS, BitShares | Hyperledger | Kovan, Rinkeby, Giveth | HPB |
分析:有以上对比,可知HPB的共识算法在性能,安全性,和去中心化的程度上都有了大幅度的提升。HPB共识算法是基于POA的算法,在继承了POA的优点的基础上改进了其安全隐患和提升了其TPS。在性能方面,HPB采用了硬件加速的方案,使交易的验签的速度指数级增长,同时对TCP/IP的协议栈进行了优化,分开处理的机制增加了交易数据与区块数据网络处理速度。在安全性上,HPB采用了硬件伪随机序列的方式保证了高性能节点出块的不可预测性。最后HPB采用了透明合约投票的方式,解决了不同节点类型之间的角色转换。
[1]. De Angelis, Stefano, Leonardo Aniello, Roberto Baldoni, Federico Lombardi, Andrea Margheri, and Vladimiro Sassone. "PBFT vs proof-of-authority: applying the CAP theorem to permissioned blockchain." (2018).
[2]. Wood, Gavin. "Ethereum: A secure decentralised generalised transaction ledger." Ethereum project yellow paper 151 (2014): 1-32.
[3]. Ghemawat, Sanjay, and Jeff Dean. "LevelDB." URL: https://github. com/google/leveldb,% 20http://leveldb. org(2011).
[4]. Raval, Siraj. Decentralized Applications: Harnessing Bitcoin's Blockchain Technology. " O'Reilly Media, Inc.", 2016.
[5]. Nakamoto, Satoshi. "Bitcoin: A peer-to-peer electronic cash system." (2008).
[6]. Lamport, Leslie, Robert Shostak, and Marshall Pease. "The Byzantine generals problem." ACM Transactions on Programming Languages and Systems (TOPLAS) 4, no. 3 (1982): 382-401.
[7]. King, Sunny, and Scott Nadal. "Ppcoin: Peer-to-peer crypto-currency with proof-of-stake." self-published paper, August 19 (2012).
|中文(简体)版本 | |English Version|
Basics
R&D
- HPB-Consensus-Algorithm-Election-Mechanism
- HPB-BOE-Introduction
- HPB-Consensus-Algorithm--Compare
- HPB-Gas-Mechanism
- HPB-P2P-NetWork
- HPB-JSON-RPC-API-Index
- RLP-Agreement-Extended-Reading
- Interface-of-HPB-hardware-random-number-generator
- HPB-hardware-random-number-service
HPB Dapp Development
- Quick-Start-For-HPB-Developer
- HPB-Dapps-Introductions
- HPB-EVM-Contracts-Introductions
- HPB-Extended-Reading-on-EVM-Development
- An-Introduction-to-EVM-Virtual-Machines
- HPB-Smart-Contracts-Extended-Doc
- Best-Practice-of-Accessing-HPB-Main-Network-in-JS-version
- Best-Practice-of-HPB-Main-Network-Access-Java-Version
- Best-Practice-of-HPB-Smart-Contract
- Case-of-Transmission-from-Ethereum-DAPP-to-HPB-blockchain
- How-to-Write-a-Contract-Extended-Reading
- Development-Tool--Remix-Extended-Reading
- Solidity-Language-Extended-Reading
- Token-issuance-on-HPB-MainNet
- Migrating-a-Ethereum-DApp-to-the-HPB-MainNet
HPB Wallet Development
- An-Introduction-to-HPB-Wallet
- HPB-Wallet-for-Xcode-Integration
- Creating-the-HPB-Wallet
- Generating-Mnemonics-for-HPB Wallet
- HPB-Wallet-and-Middleware-Interface
HPB Mainnet/TestNet Entry
- HPB-Development-Node-Construction-Guild
- Guide-to-Server-Security-Reinforcement
- Build Node With Docker
- HPB-Private-Chain-Building-Guide
Developer Community