区块链技术浅析

存储架构 2017-04-03

区块链
是2016年起突然走红起来的一门技术,连国务院印发的 《“十三五”国家信息化规划》
也将其纳入。上周公司举办黑客马拉松的活动,有幸浅尝了一下区块链的应用,本文旨在记录并分享区块链的一些心得。

比特币(Bitcoin)

要说清楚区块链,首先需要了解 比特币
。2008年金融危机时,神秘的 中本聪
发表了一篇论文,详细描述了比特币。一年之后,他将其实现。再一年之后,他便把比特币交予社区维护,自己不再露面了。比特币其实就是一个文件,里面记载了所有人的账户及交易信息。这个文件只能往里增加数据而不能修改数据。比特币网络中的每一个人都拥有这个文件的备份。

我也可以写一个文件来表示所有人的帐户信息,但是它一文不值。为什么比特币就有价值呢?它存在价值是因为人们相信它有价值,就像印出来的钞票一样。而人们自发的信任是需要时间的。最初比特币也没有什么价值。第一笔交易发生在2010年,一位程序员在佛罗里达花了一万个比特币购买了价值25美元的披萨。截止本文发布,一个比特币大约是7000元人民币左右,可以在 OKCoin
上查看。随着比特币的流行,出现了不少类似的货币,如以太坊(Ethereum)、莱特币(Litecoin)等等。只要有人相信它,它就有价值。想当年刚听说比特币的时候,我心底还暗自嘲笑怎么会有人相信这种一点实体都没有的东西,事实证明我还是太naive了。

作为一种货币,需要能够向别人转账。假如邻居家老王要给你转10个比特币,他需要把这笔交易写入文件并告诉比特币网络的其他节点,让大家把交易添加进这个文件。所以每个人都能够得知这笔交易信息。现在问题来了,其它的节点怎么知道这笔转账是可信的,即老王提出的呢?要是每个人都发起从老王转账到自己的请求,那老王可就亏死了。其他人当然做不到。因为这笔交易需要用老王的私钥签名。公私钥的简介可以参考我写的 《证书的那些事儿》的非对称加密一节
。其他人拿不到老王的私钥,当然就无从伪造请求了。在比特币中,公钥也用于表示对方的地址。消费时,你需要用数字签名证明你拥有对应的私钥。比特币没有中心节点,所以如果老王转错账了,抱歉,要不回来了。你只知道对方的公钥(或者说是比特币的帐号或地址),并不知道对方的身份。

为了安全,比特币上并不会记载每个账户的余额是多少。每当要转账时,它需要提供至少一笔未消费的历史交易信息作为input,转完账后,剩余的部分称为零钱,可以转入你自己的公钥,或是你小号的公钥。至此,未消费的交易就变成了已消费,不能被再次使用了。所以多次重复的请求只有第一笔才能成功。比特币的转账并非立即生效,只有在解开一道数学题之后才行。解题的过程就叫挖矿。题目的难度由程序控制,程序会根据历史记录把解题时间控制在大约十分钟左右。

还有一个问题,由于网络传输的不确定性,你并不能保证老王的转账被及时同步到了所有的节点上。所以如果在这笔交易完全传播出去之前,老王又在这笔交易之前将本来作为input的历史交易转帐给他的小号呢?其它的节点根本判断不了哪个在前,哪个在后。所以顺序在这里至关重要。比特币是这么解决这个问题的:把交易分配到区块里(多对一),然后将区块链接起来,称为区块链。每个区块都会引用上一个区块,这样便实现了有序。同一区块内的交易被认为是同时发生的。由于同一时间可能会产生多笔交易,所以可能会产生多个区块。那如何知道应该以哪一个区块为准呢?事实上,每一个区块都包含了一道特殊的数学题,只有解开这道题才能使之有效。当一个节点解开了这道题,它便会向比特币网络广播自己的结果,并把交易排在区块链的下一位。如果偶尔有多人同时解出了结果,那么区块链便会产生不同的分支。两个分支开始竞争,看谁能够更快生成下一个区块。哪个分支更长,哪个分支就有效。这样的话,由于多人同时算出答案的概率很低,所以分支会在一定时间之后消失。如果你的交易在一个消失的分支的区块里,便会重新放到未确认的交易区里,等待加入下一个区块。那如果有人能快速计算多个区块,岂不是可以随心所欲了?话虽如此,但是要以个人之力来对抗全网,实在是非常困难的事情。除非控制了整个比特币网络上50%以上的运算力,才开始有可能做到。这样的成本是非常高的,对于一般的交易来说,实在是有些不值得。你也无法提前运算,因为下一个区块需要引用当前的区块和随机数,只有在当前区块完成之后,才能开始计算。所以说参与的机器越多,比特币或者说区块链就越安全。还有一点值得注意的是,越前面的区块就越安全,因为攻击所需的资源会越大。小规模的转账,等一个区块便可以了;大规模的话,最好多等几个,以降低分支消失的概率。

有意思的是,由于比特币网络上的机器是那么的多,导致个人很难能够挖到矿。所以采矿池(mining pool)应运而生,集多人的算力,挖到矿后根据贡献来分配。但是采矿池太大了也会带来安全问题,因为有可能超过了50%的运算力。有一家BTC Guild曾经能够独立解出一个链中的6个区块,所以这个采矿组织主动限制了规模和会员的数量,以减少比特币网络成员的不安。

区块链(blockchain)

上一节已经介绍了比特币的区块链了。其实区块链就是一个去中心化的存储。在这一点上,它与git是比较相似的。它们都是分布式、无中心的链式存储,但是在出现分支时的解决方式不一样。Git可以通过merge和rebase来解决冲突,而区块链则是通过链的长度来自动废弃分支,作废分支里的交易重新放到未确认的交易区里,以便下次再放入新区块里,这样的行为有些类似 git rebase

由于区块链不停地往里增加区块,势必导致文件越来越大。虽然可以控制区块的大小(最大1M)和增长速度(10分钟左右),但这么计算每年也有 365×24×6×1M=52G
左右的数据。长此以往,如何受得了?作为消费者来说,已经校验并消费过了的历史数据,可以仅保存其散列码,这样便能大大减少数据。比特币钱包用的是 Merkle Tree
来做验证。

区块链按照参与者的身份,可以分为公有链(Public blockchain)、联盟链(Consortium blockchain)和私有链(Private blockchain),公有链如比特币,是通过挖矿来达成共识(consensus),但是挖矿的计算需要消耗大量的电力资源。联盟链顾名思义,仅由联盟内部可写,外部经过授权可读。而私有链只有一个成员可写,类似传统的分布式数据库。联盟链和私有链由于成员并非匿名,可受部分信任,并且消耗运算力其实也是一种浪费,所以可以相对放松一些要求,不必非得挖矿,可以通过共识协议来达成共识。

使用区块链必须能够达成共识,否则就失去意义了。其实传统的分布式一致性算法也能解决达成共识的问题,只不过一般并不考虑恶意节点篡改数据的问题罢了,而且实际上使用的节点也不像区块链那么多。传统的常见算法有:ZooKeeper使用的Zab协议;etcd使用的Raft协议;当然还有大名鼎鼎的Paxos协议。限于篇幅,本文就不具体讨论它们的具体算法了。

区块链最主要的贡献,是解决了在不信任网络中的信任问题。与传统的解决方案相反,参与区块链的人越多则越安全。但是如果你的组织已经有足够的信誉,是否真的需要使用区块链来实现?当你想使用区块链技术来解决特定问题的时候,应该先问问自己,如果不用区块链,会有什么问题?如果回答不了这个问题,那可能你对区块链还不够了解,或者是区块链并不是你问题的最佳解决方案。相对于技术本身来说,更麻烦的问题是靠谱的想法和实施。别手里拿着个锤子看什么都是钉子哦。再考虑一下传统的方案吧。

除了金融领域以外,还有许多应用区块链的有趣想法:

您可能感兴趣的

比特币“挖矿”中国率先去产能 区块链应用加速落地... “之前比特币暴涨时,我买的矿机,本来预计4个半月回本,结果一个月就回本了。”某海外“矿工”近日告诉第一财经记者。 全世界逾70%的比特币算力集中于中国。自去年9月限制人民币交易比特币后,中国监管的矛头再次指向比特币等加密货币的生产,俗称“挖矿”。 尽管去年11月,相关电力部门对“全面禁止比特...
85万枚比特币不翼而飞!比特币的投资风险超乎你的想象!... 央视网消息:三年前,日本最大的比特币交易平台Mt.Gox宣布破产,价值数亿美元的比特币不翼而飞。7月11日,该公司的首席执行官卡伯勒因贪污和数据操控罪名在东京出庭受审。 今年32岁的卡伯勒在法庭上否认了全部指控。而一旦罪名成立,卡伯勒将面临最长5年监禁,或最高50万日元(约和4000美元)的罚款...
Bitcoin Cash Demand Shocked Us, Says Circle Tradin... The pace at which bitcoin cash – the cryptocurrency that forked off the main bitcoin blockchain earlier this year – gained trading volume was "shockin...
Bitcoin price falls but doesn’t flatline Those not looking at the Bitcoin markets lately will either gasp or smile. Bitcoin, down from its all time high of around $19,000, is now floating at ...
宏观经济学家:比特币价格正在被操纵... 近日,宏观经济学家Peter Tchir在《福布斯》的专栏上表示,如果比特币价格没被操纵,他会感到“震惊”。原因有三:持有大量比特币的投资者有动机推高价格,挖矿公司有动机推高价格,推高价格有利于交易者在分散的市场中套利。 发文时比特币价格 ¥48390.83 ...
0

责编内容来自:懒程序员改变世界 (本文源链)
阅读提示:酷辣虫无法对本内容的真实性提供任何保证,请自行验证并承担相关的风险与后果!
本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。