金融科技FinTech

区块链 - 比特币的决共识机制

2017-01-19  本文已影响3485人  Cuist

也许你低估了共识的重要性

哪怕是协商共识问题,人们也愿意花费巨大的成本来解决。银行大概是最容易被提到的例子了。

公司将工资打入中国银行卡,而我的支付宝绑定的是工行卡,因此每隔一段时间我都要把钱转入到工行卡里。试想如果是直接转账,通常的做法是怎样的: 每个银行都有自己的账本,并且在银行间实现发送以及接收的接口。听起来很熟悉,没什么大不了的。但如果是很多家银行呢? 这些银行两两之间都要做接口。而且各账本独立维护,发生数据不一致怎么办? 每隔一段时间要互相对账,这样一来每个银行都要投入巨大的成本,整天忙着对账了。

现实中清算中心应运而生

在VISA和万事达等这样的信用卡组织出现之前,跨行结算复杂度高,成本高,速度极慢。信用卡组织出现后,形成中心清算的模式,所有银行和该中心建立清算接口,所有跨行之间的交易都汇总到该清算中心。清算组织的出现提升了跨行清算的速度,并降低了清算的成本
目前,国际上三大信用卡上市公司VISA、万事达、美国运通2015年营业收入合计达到543亿美元。区块链技术实现分布式记账的结算之后,能为整个银行业节省一大笔费用。
———摘自《区块链,从数字货币到信用社会》

实际上除了数字货币,银行大概是对区块链技术最热心,并首先尝试区块链应用的了。

如果是人们的意见有分歧,那么人们可能会尝试投入包括生命在内更加巨大的成本来达成共识,哪怕有一方是被迫的。这么严肃的问题就不在这里讨论了,而且有点偏题。

比特币的共识机制

开胃菜结束,下来讲讲比特币中如何达成共识

拜占庭将军问题

拜占庭将军问题是比两军问题更加一般化的问题。相关资料百度百科就有,这里只简述一下:拜占庭有10个将军要攻击一个繁华强大的城邦,由于某种原因他们要分开行军和驻扎。这个城邦虽然没有拜占庭强大,但也足以打败少于半数的拜占庭联军。拜占庭的将军们必须有超过半数一起攻打,不然就会失败,因此他们需要商定是否在约定时间攻击。他们需要面临的问题是,信使可能没有到达,也可能某几个将军是叛徒,会发不同的决定给不同的将军,误导他们使得最终无法统一行动。

这其实是个分布式系统部分节点下线或发生错误的问题,涉及分布式算法,也是区块链共识机制可能依赖到的底层技术,感兴趣的童鞋请自行踩坑。这里我们只讲比特币是如何解决拜占庭问题的

专业术语叫BFT(Byzantine Fault Tolerance)算法/协议。实际上是相当重要的知识。

区块链(BlockChain)

谈起比特币的共识机制,工作量证明POW(proof of work)非常有名,但是我觉得解释比特币如何达到共识绕不开区块链,这解释了POW为何有效。

把比特币比作账本,区块链就是账本的组成方式。比特币由挖矿产生(稍后解释挖矿),比特币在一定时间段的交易信息被打包,形成一个数据块,这些数据块每个都和相邻的前后数据块绑定,就是区块链,好像被铁链串成一条的很多积木块。而区块链之间的绑定是依赖于数学的,每个区块都包含上个区块的哈希(单向散列函数值),因此要改变区块链中的任意一个块意味着要重新生成这个块的所有后续块,不然依次重新校验哈希立刻就发现篡改。因此区块链是对修改有防御性的数据结构,加上比特币账本是所有节点都持有的,这样每个节点都不用担心篡改伪造历史记录,或某恶意节点提供了一个篡改后的版本。

工作量证明 - POW

POW中的工作量就是指挖矿了,挖矿就是把网络上传来的交易信息组织起来,随机添加一些无意义的数据生成哈希值,生产的哈希值的前n个字节必须为零也就是哈希值要小于某个阀值才算合法。因为无法预测和控制生成哈希值,平均需要进行几十亿次哈希运算才能获得被所有节点承认的哈希,比特币整个网络的运算能力大概平均每10分钟算出一个,也就是产出一个块。而每个节点验证哈希合法却是轻而易举。计算哈希的工作被类比为挖贵金属矿,做计算的节点叫矿工,生成合法哈希然后产生新的区块将被奖励比特币。这种生成非常困难但是验证轻而易举的非对称运算协议就是所谓的POX了,除了POW,还有POS,DPOS,POA等等其它协议。

比特币节点只会承认包含了满足阀值的哈希值的新区块,这就是所谓工作量证明。虽然产生新区块相对困难,但还是有可能有两个矿工在网络延时内产生了两个新块,在新块基础上还有可能各自追加新块,造成分叉,比特币遵循取最长链原则。如果在当前块的基础上又生成一个新块叫一个确认,比特币上的交易要6个确认后才被承认。由于每个确认也就是产生块的时间是遵循泊松分布的概率数字,同时出现两条6个确认持续竞争的的分支链几乎为零,因为那意味着两个分支每次确认的时间都几乎一致。

历史上曾出现过5个确认的分支,是由于包括大矿池的部分节点未及时升级软件造成的。从出块速度来看,有过20分钟出60个块,连续两次15秒就出块且块中未包含交易,也有很长时间未能出块的,这些都是小概率事件。比特币的共识机制也正是依赖于这种不确定性。

小结一下

比特币每个节点都包含完整的账本,即所有的交易记录,且用区块链存储,单个节点想要伪造记录并追上当前交易进度意味着这个节点的算力是整个比特币网络的好几倍,因此篡改和伪造历史记录几乎不可能。而每个节点都拥有完整的数据,也就可以随时对账本进行对账清算。交易发生后被节点广播到网络上,矿工们不停地对交易信息进行哈希计算,直到产生合法哈希,然后将生成的新块广播到网络上。各节点只接收包含合法哈希的新块,并立即验证交易数据,对账和清算是即时完成的。如果出现了竞争分支,长链胜出,6个确认后交易才被承认。

从每个比特币节点,以及矿工节点(也就是活跃节点)的角度来看,需要的运算和信息传递规则都很清晰简单,且最终达到了所有节点共识

能够破坏比特币的就是全网承认新块的时候,由于校验简单,而产生新块依赖于运算力,这样有力量进行攻击的节点还不如选择维护比特币系统,挖矿获得收益。恶意节点只能同网络中的矿工的集体竞争算力,博弈结果是维护比特币系统才是最佳选择。

区块链实施的问题

读到这里你心中一定疑惑,6个确认才承认意味着平均要等1小时,要是买瓶水也等1小时就恕不奉陪了。即时性是比特币的缺陷之一,不适合买个棒冰这种交易,或者要借助于bitpay这类服务。

比特币的区块大小是有限制的,加上出块速度有限制,每秒支持的交易量有严重限制。

比特币挖矿耗能太过严重,统计总耗能已经超过了一个大都市的总和。由于算力这种资源可由现实中资源兑换(专门做哈希运算的矿机),逐渐出现了专职矿工,后来运营十几台几十台机器的矿工也不能保证收益,又出现了矿工联合的矿池。据说现在大部分算力都在中国了。这很讽刺,一个去中心的系统,却在系统外的现实中因资源集中形成了中心,一旦有了中心,政府影响和控制就是分分钟的事情了。从小就听两个大胡子讲那个很糟的故事,有生之年还想共产主义能实现吗?

另外由于比特币所有节点都持有完整账本,运行到现在已经几个G了。空间浪费,验证成本升高也是个问题。

客户端升级也面临很多新问题

比特币只是个开始

回到开头的清算中心场景,在区块链的世界里,各银行都有总账,且新交易被加入到总账时立刻被对账,极大地降低了银行的清算成本。对于清算中心来说,科技进步导致失业啊。

还有不少问题

比特币所校验的账本信息包括所有比特币都是系统产生的,而系统外进入的信息如何保证有效呢?不然就陷入 garbage in, garbage out 的陷阱了。

供应链系统并不要求匿名,该选择什么样的共识机制(协议)呢?

各节点都有总账,如何保护各节点隐私呢?

如果要开发区块链系统,该如何开始,有哪些前置条件和风险,成本有多高呢?

没有多米诺骨牌,只有一个坡接着一个坡,走在正确的方向已是万幸了。

上一篇下一篇

猜你喜欢

热点阅读