不学区块链的都该枪毙
INTRODUCTION
- 非对称密码学
- 分布式共识算法
存在的挑战
- scalability:每个块1MB,每10分钟出块,每秒7个交易
- 无法处理高频交易
- 区块越大,存储空间越大,产生速度越慢,更少的用户愿意维护大型的链
- tradeoff between block size and security
- selfish mining带来的区块分支较多
- 前提矿工具备算力优势,挖出节点后不立刻公布,继续在私有链挖矿,当其他人公布1个新的节点时,立即公布2个节点
- privacy leakage
- pow or pos 存在的问题:浪费电力/富者愈富
BLOCKCHAIN ARCHITECTURE
Block
每一个区块包含两部分:
- 区块头
- block version:主要用于确定遵循的区块验证规则
- Merkle树根节点的哈希
- Timestamp:时间戳
- nBits:有效的区块哈希的长度
- Nonce:4字节,从0开始随每次哈希计算增加
- 父区块的哈希:256bit,指向前一个区块
- 区块主体
- 交易:可以容纳的交易的最大数量取决于区块的大小和每个交易的大小
- 交易计数器
Digital signature
每个用户都有一对公私钥,私钥用于签名并向整个网络公布
经典方案是ECDSA
key Characteristics of Blockchain
- 去中心化:传统的中心化交易系统每笔交易都需要可信机构来验证,不可避免地带来了额外开销和中央服务器的性能瓶颈的问题;区块链中的共识算法取代了第三方来提供数据一致性
- 持久性:交易可以快速验证,无效的交易不会被诚实的节点接受,当交易添加到区块链之后几乎不可能删除或者回滚交易;包含无效交易的区块会被立即发现
匿名性:用户使用生成的地址与区块链交互,不会泄露用户真实身份;区块链无法保证完美的隐私保护
可审计性:比特币区块链使用Unspent Transaction Output(UTX-O)存储用户的余额,任何交易需要涉及到之前未使用的交易,一旦当前的交易被记录在区块链中,涉及到的未使用的交易的状态就从未使用转换为已使用,因此交易可以容易地验证和跟踪
Taxonomy of blockchain systems
粗略地分为:
- 公开链:所有数据公开,每个人都可以参与共识过程
- 私有链:中心化,仅仅那些来自特定组织的节点将会被允许加入共识过程
- 联盟链:半中心化,只有一部分预先选择的节点参与共识过程
- 共识决定:在联盟链中只有一部分节点对验证区块负责,私有链全部由一个组织决定
- 读权限:联盟链和私有链具体分析
- 不变性:记录保存在节点处,因此在联盟链和私有链上可以轻易篡改
- 效率:由于公链节点数量多因此导致了交易量受限、延迟较高
- 中心化:是最大的不同,只有公开链是去中心化的
- 共识过程:公链所有用户均可加入;私有链和联盟链需要权限
公开链对全世界开放,能够吸引众多用户,活跃;联盟链可以应用在商业场景
CONSENSUS ALGORITHMS
在互不信任和节点中达成共识是Byzantine Generals(BG)问题的同义转换
Proof of Work
比特币网络使用的共识策略,在去中心化的网络中需要选择一个节点来记录交易;随机选取是一种自然的方法,但是容易受到攻击,因此需要在发布交易之前证明节点不准备作恶
每个节点计算一个区块头的的hash值,必须满足小于某个值(前面有多少个0),header包含一个nonce
当一个节点计算出了hash值,将广播这个区块,其他所有节点需要验证这个节点的正确性;被验证后其他矿工会把该节点加入到自己的区块链中
矿工是指计算hash值的节点,PoW的过程叫做挖矿
在去中心化的网络中,当许多节点几乎同时发现了合适的nonce时,有效的区块可能被同时产生,导致了可能存在许多分支,协议的设计使得两个相互竞争的分支不会同时产生下一个区块。在POW中,较长的链被认为是可信的链(authentic chain)
在PoW中矿工需要做许多计算机计算,然而这些运算浪费了很多资源。为了减少损失,一些PoW协议中的运算可以有额外的应用。比如Primecoin中的PoW可以被用作数学研究
Proof of Stake
PoS是PoW的节约能源的替代,矿工需要证明拥有一定数量的货币。我们相信拥有更多货币的人不太可能攻击网络。这样的选择是不公平的,最富有的人会统治网络。结果是许多方案都结合了权益大小来决定谁来产生下一个块。与PoW相比,PoS节约了能源并且更加高效。但是由于挖矿成本几乎为0,后果是可能存在攻击。许多Pow的链正在逐渐向PoS转变,ethereum已经于2022年全面弃用了PoW。
PBFT
可实现拜占庭容错(Practical byzantine fault tolerance)是一种拜占庭容错算法的复现。Hyperledger Fabric使用了PBFT作为共识算法,因为PBFT可以处理多达1/3的恶意节点。
每轮产生一个新区块,将按照一定规则选出每轮的候选人,候选人对交易排序负责,整个过程可以分为预准备、准备和执行三个阶段。在每个阶段如果节点获得了超过2/3的节点的投票,因此PBFT要求每个节点对网络都是已知的。
与PBFT类似,Stellar Consensus Protocol(SCP)同样是拜占庭共识协议。在PBFT中1每个节点需要询问其他节点,然而SCP给了参与者权利来选择相信哪些参与者的子集。dBFT(delegated)中一些专业的节点被投票选出来记录交易。
DPOS
代理权益证明(Delegated proof of stake)和Pos的区别在于代表民主和直接民主。权益持有者选举他们的代表来产生有效的区块。由于参与确认的区块显著减少,认证的过程更加快速,带来了交易的快速交易。同时,代表也可以调整网络的参数,例如区块大小和区块时间间隔。此外,用户不需要担心不诚实的代表因为他们可以被轻易地投票淘汰
Ripple
Ripple共识算法利用了在大规模网络中相互信任的子网。在网络中节点被分为两类:服务端和客户端。服务端参与共识过程,客户端只传递资金,每个服务端都有一个唯一节点列表Unique Node List (UNL),当觉得是否将交易放进账本时,服务端将询问UNL中节点如果接受到一致的节点超过了80%,交易将被打包进入账本。对于一个节点,只要在UNL中的恶意节点少于20%,账本将会保证正确
Tendermint
拜占庭共识协议,每轮产生一个新的区块,申请人将被选出来广播一个未经确认的区块。可以分为3个步骤:
- 预投票步:验证者选择是否为提议的区块广播预投票
- 预执行步:如果节点收到了提议的区块的超过2/3预投票,为该区块广播预执行;如果节点收到超过超过2/3的预执行,进入执行阶段
- 执行步:节点验证区块并广播对区块的执行,如果节点收到了2/3的执行,就接受该区块。和PBFT相比,节点需要锁定他们的币来成为验证者;如果一个验证者被发现是不诚实,将会被惩罚
Consensus algorithms comparison
- PBFT需要在每轮选择候选人;Tendermint需要提前了解验证者来选举每轮的申请人。两者更适用于商业场景而不是公开场景
Pos同样需要做hash,对区块头做哈希来搜索目标值,但是工作量受限;
consensus speed
- blocks generation rate & security
CHALLENGES & RECENT ADVANCES
Scalability
随着交易量增加,区块链变得臃肿。每个节点都需要存储许多交易来确保当前交易确实是未花费的。除此之外,由于对区块大小和出块时间的限制,比特币只能处理大概每秒7个交易,无法满足现实需求。由于区块的容量有限,许多小数值的交易可能会延迟因为矿工更倾向于有高额手续费的交易。解决此类问题的主要由两种方法:
Storage optimization of blockchain
节点运行账本的完整拷贝变得困难,Bruce提出了网络将旧的交易记录忘记的方案。采用一个叫做account tree的数据库来保存所有非空地址的余额。除此之外轻量的客户端也能够解决这个问题。VerSum允许轻量级客户端外包对于大的输入上昂贵的计算,通过对比多个服务器上的结果来保证结果的正确性
redesigning blockchain
Bitcoin-NG将传统的区块分离成两部分:key block负责进行领导选举;micro block负责存储交易。协议将时间分为时期,在每个时期,矿工需要哈希生成key block。一旦生成了key block,节点称为leader负责生成micro blocks。Bitcoin-NG同时扩展了最长链的策略,其中micro blocks没有权重。这种设计解决了区块大小和网络的安全的平衡。
Privacy leakage
区块链无法保证交易的隐私(transactional privacy)因为交易的数值和公钥绑定关系是公开可见的,用户的交易可能泄露用户的个人信息;可能存在和IP之间的映射关系;每个用户都可以被该用户连接的节点来定义。提高区块链匿名性的方法可以分为两类:
- 混淆:在区块链中,用户的地址是匿名的,但是当许多用户和同一个地址频繁交易时,仍然可能将地址与真实的身份连接起来。混淆是一种在多个输入地址和多个输出地址之间转移资金提供匿名性的操作
- 存在的问题:
- 输入输出之间的交易必须是等额面值;
- 混淆者可能不诚实:混淆者清楚具体的映射关系,可以进行追踪;可能携款而逃,将交易转移到自己的地址上去
- 存在的问题:
- 匿名性:使用零知识证明,矿工只需要验证币属于有效的币的列表即可。
- Zerocoin Zerocash zero-knowledge Succinct Non-interactive Arguments of Knowledge (zk-SNARKs) 提供这方面的解决思路
- 陕西师范大学老师的录屏也可以参考
Selfish mining
区块链容易受到合谋的自私矿工的攻击。在自私挖矿策略中,自私的矿工将已挖出的区块保存起来而不广播,知道满足某些条件时再公布私链,由于私链比其他现有的公开链长,它会被所有矿工承认。在私链公开发布致歉,诚实的矿工都在浪费资源在无用的分支上,然而自私的矿工在自己的私链上挖矿没有竞争者,因此更容易获得更多利润。
顽固挖矿(stubborn mining)中矿工可以通过不平凡地将挖矿攻击和网络层的日蚀攻击结合起来增加收益。trail-stubbornness是一种顽固挖矿的策略,尽管私链长度已经落后的情况下还继续挖矿。
如何应对自私挖矿:诚实的矿工选择跟随分支时倾向于选择有更多新鲜的区块的分支(时间戳和beacon,但是可能伪造该时间戳);ZeroBlock提出每个区块必须在一定时间内被网络接受,此时自私的矿工获益不会超过期望值。
POSSIBLE FUTURE DIRECTIONS
Blockchain testing
截止目前有约700种加密货币,一些开发者可能伪造区块链的性能表现来吸引投资者获益,当用户需要将区块链和业务结合起来时,需要连接哪个区块链符合用户的需求,因此需要区块链测试机制来解决问题
区块链测试可以被分为两个阶段:标准化阶段和测试阶段。在标准化阶段需要协商设立所有标准,当区块链产生之后,将会被协商好的标准进行测试和验证是否像开发者宣称的那样正常运行。在测试阶段,区块链将会在不同的标准下执行,如吞吐量等。
Stop the tendency to centralization
区块链被设计为去中心化系统,然而存在矿工在矿池中心化的趋势。迄今为止,前5的矿池拥有Bitcoin超过51%的算力。自私挖矿的策略在算力超过总算力的25%即可获得比平均股权更多的收益,因此理智的矿工将被吸引进入自私的矿池并且最终矿池将轻易超过51%的算力。区块链并不是只为若干组织设计的,因此需要有方法来解决这样的问题。
Big data analytics
- data management:区块链可以用来存储重要的数据
- 因为去中心化和安全的特性
- 可以保证数据是原始的
- data analytics
- 交易可以用来分析用户的交易习惯
- 预测用户的交易行为
Block applications
目前多数区块链被应用在金融领域,越来越多在不同领域的应用正在复现。传统企业可以应用区块链来提高系统化,例如可以存储用户信誉。新兴行业可以使用区块链来提高性能。
智能合约是执行合同内容的计算机化的交易协议,目前已经被区块链实现。在区块链中智能合约是代码碎片可以被矿工自动化执行。智能合约在许多领域都有变革性的潜力。
CONCLUSION
本文首先给出区块链技术的概述,包括区块链的体系架构和区块链的关键特征。然后讨论了区块链中使用的典型的共识算法,在不同方面分析和比较了这些协议。此外,列出了一些阻碍区块链开发的挑战和问题,并汇总了一些现有的方法来解决这些问题,也提出了一些可能的未来方向。