未来智讯 > 区块链论文 > 区块链核心技能演进之路

区块链核心技能演进之路

发布时间:2018-11-28 01:06:01 文章来源:未来智讯    
    区块链核心技能演进之路作者: 周邺飞   (四川省区块未来科技有限责任公司 ,四川 成都 610000)   摘 要:介绍区块链共识机制的基本功能,阐述事务量表明(Proof-of-Work,POW)和权益表明(Proof-of-Stake,POS)的基本原理,对比分析两种共识机制的优缺点――POW机制大略、平安,但浪费能源;POS机制环保、共识快,但其平安性缺乏严格的数学表明。
  关键词:区块链;共识机制;POW;POS
  一般而言,在介绍区块链时都会提到两个核心要点:一是分布式账本,二是拜占庭将军问题(Byzantine Generals Problem)。使用分布式账本目的是让每个节点都可以验证交易,而拜占庭将军问题与账本的一致性有关,即本文要讨论的共识机制(consensus)。
  区块链上的共识机制主要解决由谁来记账,以及如何维护账本统一的问题,该问题的理论基础是拜占庭容错(Byzantine Fault Tolerant,BFT)。拜占庭容错从20世纪80年代起初被研讨,目前已经是一个被研讨得对照透彻的理论,存在解的前提条件及具体实现都有现成算法。本文不计划从BFT说起,因为要分析的是区块链共识机制的演进之路,而中本聪并没有选取BFT,其实在笔者研讨比特币伊始,即便在理解了POW(Proof-of-Work,事务量表明方式)机制之后的很长一段时间,并不明白拜占庭将军问题。下文在分析 HyperLedger Fabric的PBFT(Practical Byzantine Fault Tolerant)算法以及小蚁项目的DBFT算法时再全面阐述拜占庭将军问题及传统分布式一致性算法(PAXOS、RAFT)。
  POW
  其实“共识机制”一词在这一两年才被频繁使用,从前一般叫表明方式(Proof),因为比特币选取事务量表明方式(POW)。随着各位对分布式账本一致性问题的不时探索,很多算法被提出来,尤其近期有很多项目回归了对传统BFT算法的改进,在算法思绪上已经跳出了“表明”的语义,进一步高度概述为共识机制。笔者记得第一次碰到POW这一观念时感到很费解,对这种表述方式很头疼,掌握了POW机理后才真正了解其本意为“通过事务以获得指定成果,用成果来表明曾经付出的努力”。其实我们日常事务生活中经常使用POW,比如学生考试成绩、毕业证、驾照等,这种表明方式的一个显著特征是往往需要很大的事务量才能拿到指定成果,且这个成果很容易验证。之所以如此是因为我们一般很难去实时监督一个人是否真的付出了这些事务量。
  再回到比特币的设计思绪,中本聪已经使用非对称密码解决了电子货币的所有权问题,用区块时间戳解决了交易的存在性问题,用分布式账本解决了剔除第三方结构后交易的验证问题,剩下需要解决的问题是双重支付,这要求所有节点账本统一,而真正的平等又必须赋予人人都有记账的权利,记账是一件大略的事情,每个人都能够做,显然最后会存在众多大同小异的账本,而其实我们只需要其中的一个账本就够了。
  中本聪想到给记账投入成本,总账本由各个分页按照时间先后排序,�o每个账本分页设立一个评判标准,以区分账本分页是否合格,这给记账增加了难度,同时给每个账本分页投入一个随机元素,用以调节记账难度以保证一定时间段内惟有一个人生成合格的账本分页。增加的成本便是事务量,合格的账本分页便是事务量表明。对于比特币而言,所谓的账本分页便是一个区块,区块通过巧妙设计变成区块链,合格的区块能够表述为
  F(Nonce)   很显然,POW的核心要义为算力越大,挖到块的几率越大,维护区块链平安的权重越大。相对其他共识机制而言,POW逻辑大略,容易实现,容错达50%,其平安有严格的数学论证。
  POS
  POW缺点也很明显,其中被指责最多的主要有两点,一是浪费能源,二是风险和收益博弈必然导致结合挖矿,而大算力矿池可能会对系统的去中心化构成威胁。
  于是在2011年,一个名为Quantum Mechanic的数字货币爱好者在Bitcointalk论坛提出Proof-of-Stake(POS)表明机制,该机制被充分讨论之后表明具有可行性。如果说POW主要比拼算力,算力越大,挖到一个块的几率越大,POS则是比拼余额,通俗说便是自己的手里的币越多,挖到一个块的几率越大。POS合格区块的评判标准能够表述为
  F(Timestamp)   txPrev.block.nTime:txPrev所在区块的时间戳,一笔交易被纳入区块的时间是交易倡议者不能确定的,节点有可能通过提前计算预估到未来对自己有利的时间戳,这个参数便是为了防止节点利用这种预估优势提前世成大批交易。
  txPrev.offset:txPrev在区块中的偏移量,用以降低网路节点同时生成Coinstake的几率。
  txPrev.nTime:txPrev构造时间,设计指标如txPrev.offset。
  txPrev.vout.n:Kernel在txPrev中的输出下标,设计指标如txPrev.offset。
  bnTarget:全网当前指标难度基准值,类似POW中的当前难度值,由nbits记录。
  nCoinDayWeight:Kernel消耗的币龄,投入了一个时间权重。
  从以上公式能够看出,Sunny King一方面希望能给所有POS矿工足够的随机性,另一方面,搜索空间始终抑制在只局限于Coinstake的时间戳Time,影响找到合格区块链最大的因素是Kernel消耗的币龄。
  节点在锻造区块时,最初从自己所有的UTXO中选定一个作为Kernel,构造Coinstake,计算hash,如果不合格,重新构造Coinstake,此时Time已经改变,也能够改变Kernel,以得到不同的Coinstake,如此来去,直到找到合格区块。
  Coinage
  上面提到了币龄,也叫币天,假设1.5个币存在于区块链中10天,币龄数值为
  Coinage = 1.5×10 = 15
  PPC选取币龄,而不是直接选取余额(Balance)来计算。
  stakeReward
  权益激励,俗称获得利息,计算公式为
  stakeReward = Coinage × 33 / (365 ×33 + 8) ×0.01 ×COIN
  公式(4)可简化为
  stakeReward = (0.01 ×Coinage / 365) × COIN
  其中,Coinage即上文�f的币龄,COIN可理解为“币”,1 COIN即常常所说的1个币,性子是一个常量,中本聪在比特币系统里定义为100 000 000,如此设计主要是为了避免浮点数运算,比特币支持8位小数源于此。
  由公式(4)、(5)可知,收益按输入币龄总和的1%年利率计算。
  POS一并解决了POW浪费能源和算力集中两个痛点,理论上还能缩短了共识时间,但同时也抛弃了POW的某些优势,因此更容易分叉,一笔交易需要等待更多确认才能确保平安,而POS最大的问题是其平安性和容错性还没有得到严格的数学论证。
  (编辑: 彭远红 )
  专栏作者简介:周邺飞,男,币创网结合创始人,技能副总裁,中国科学院智能抑制博士生,DACA区块链协会讲师,小企链(icochain)研发者,参与《区块链讲义》一书撰写,最早一批热衷区块链的技能极客,对比特币、区块链及智能合约有深入研讨,zhouyefei@bichuang.com。
转载请注明来源。原文地址:https://www.7428.cn/page/2018/1128/48038/
 与本篇相关的热门内容: