比特币与区块链的大众科普文

后传

很多朋友看了本文后,有一些不理解的地方,为了保持原文,我把问题解释以及勘误附在了最后。如果还没有看过本文,请跳过这一节。如果看过了本文,就直接跳到本文最后的”问题解释“那一节。

前言

本文相对稍微长一点。

近日区块链重新又火了起来,自 2013 年到现在结识这个概念已经 4 年,最近大家都在聊这个,我也参与进来,然而这是一个很难的东西,没有人能把区块链的技术讲明白,不管是各种博客文章,书籍,都好似在说区块链技术多么厉害。这些资料看完之后,很多人都会觉得这完全就是一个新的领域...搞 IT 的没看懂,搞金融的看不懂,评论反倒很多,好像每个人都挺懂。

区块链技术难吗?其实不难,我发现区块链里面所有的组成元素都是现有的东西,在 技术的本质一书中,作者提到组合现有的技术会出现多么令人惊奇的事情,确实是这样,区块链就是这么一件令人惊奇的事情。那为什么区块链以及构建于其上的比特币看起来如此的晦涩?

今天休息,跟老婆讲讲比特币,只要她能听明白,我就写出来,于是拿着本子画了几个图,讲了几句,然后老婆竟然懂了!我的讲法比较特殊,我没说什么哈希函数,ECC 之类,一说那个我估计就讲不下去了,我用指纹,带锁的存钱罐来代替这类概念,没想到还挺成功。

本文主要是把给老婆讲比特币的内容写出来。希望对别人也能有所帮助。在我看来,比特币仅仅需要三大构件即可,包括一个基础构件 P2P 网络,另外两个核心构件包括一张交易网和一条区块链,我慢慢引入概念,至于基础构件 P2P 网络,我甚至通篇没提到,但不影响理解核心。

首先明确要解决的问题

首先我们看一下基于货币的交易过程(相对于以物易物来讲)需要哪些必须要做的事情:

1.交易是否可行

这个问题就是在问,交易前,你有没有足够的钱来进行这次交易,即必须要保证你有钱。

2.如何证明交易是有效的

这个问题就是在问,交易后,如何防止这笔钱再进行另一笔交易,即必须要保证钱花完了就没了。

基于纸币的交易可行性

先从纸币交易开始讨论,然后再看下银行转账,最后切入到电子货币的交易。

我们日常的纸币交易中,这两个问题几乎不是问题,因为纸币是物理的,且不可伪造,它拿在你手里就是你的,交给别人那就不是你的了,一手交钱,一手交货。

对于银行转账,比如在 ATM 机上转账,没有任何物理物品的交易,只是在按键上按捺一些数字,好像问题变得很难。但是由于有银行这个机构,问题似乎也能很容易解决。当你要给李明转账1000 元时,这个消息会发送到银行,银行会查你的账户里面是否有 1000 元的余额,然后查询李明这个账户是否存在,如果都通过,银行会在转账前锁定你的账户,在转账完毕前你不能用这个账户进行任何交易,然后将钱转入李明的账户,最终在解除锁定前,你的账户中会少 1000 元,而李明的账户中会多 1000元,这个过程非常容易理解。

电子货币情况下如何证明你有足够的钱交易

所有的电子货币交易在网络上只是一系列数字的传输而已。问题来了,在数字信息可以随意复制的前提下,如何来证明你有足够的钱可以用来交易?

回归本源。在网络上模拟一下纸币的交易。

当我们用纸币交易时,其实我们无意中构建了一个交易网。考虑到从 ATM 取款,支付宝,微信支付会让事情变得复杂,假设全部以现钞来交易,那么对于每个人,当你花钱时,你手里的钞票必然是另一个人给你的,而不是你凭空制造的!你没有能力凭空让钞票产生,这一点非常重要。

即便你买个鱼缸和牛肉,交易也会像下面的样子形成一张网:

这实则就是一张网。之所以我们平时不会注意这张网的存在完全是因为钞票拿在自己的手里然后交到别人手里,一张钞票在自己手里,你可能会担心别人抢走它,因为钞票是匿名的,谁占有它就是谁的,所以会有抢劫,也因此国家把抢劫定为重罪。如果我们忽略央行,那么这张交易网就是完全理想的交易网。

假设货币的总量是固定的,且我们从来不把钱存入银行,也从来不从银行贷款,仅仅是用纸币来交易,我们不需要银行为我们保有余额,我们只需要知道自己能否进行当前的一笔交易就行。

这张网是完美的!没什么人或机构可以完全控制这张网,这张网会自然伸缩,其形状和伸缩速率完全取决于供求关系。我们现在要在互联网上重建这张网!用电子货币代替纸币。

先看下这张网有什么特点呢?

0. 货币的总量是一定的(我已经假设可以忽略央行滥印钞票);
1.对于花钱的人,每一笔花出去的钱都要有一个确定的来源;
2.对于收钱的人,任何发给自己的钱都可以无条件接收;
3.如果你的一笔钱花出去了,就不能再次花出去。

以上的两个特点可以把每一次的交易结果抽象成一个交易单,如下图所示:

非常清晰的交易过程。在物理世界中,纸币是一个物理实体,不可复制,不可伪造,在谁手里就是谁的,这很容易理解,自从有了交换以来,我们的世界也一直都是这么运行的,问题是,在基于数字技术的互联网虚拟世界中,如何构造这张交易网?!

首先来看看这张网是什么样子的?

这张网是所有人一起构建的,涉及到参与电子货币交易的每个人,这个和纸币交易网是完全一样的,在纸币交易中,由于纸币的物理属性,这张网是唯一的,在数字世界,我们又如何来保证这张网的唯一性呢?貌似不可能,然而试想如果每一次交易都让所有的人都知道,最终大家是否能够建立共识呢?而这种共识的输出就是这张唯一的网。当然,如果有个别的人不接纳某笔交易,那也无所谓,只要大多数人产生共识能继续相信这张共同的网可以继续膨胀下去即可继续交易下去。

每当发生一笔交易,所有的人都会被公示到,如果你”凭空造出了一些货币“,那么所有人(绝大多数)都不会认可,你的这笔交易便不会被纳入到交易网中,这种欺骗如下图所示:

如果你透支自己当前拥有的可用货币,别人也不会认可,这笔交易也不会被纳入到网中,如下图:

你把比特币看成互联网上的”纸币“即可,为了消除数字信息可复制性带来的影响,需要用全网的共识来替代物理属性的真实。在数字网络中,你自己复制一份信息是没人知道的,但是全网的信息总量是一定的,如果你复制一份信息,虽然没人知道到底是谁复制的,但是可以知道的是,确实多了一份信息,这个信息自然得不到认可,这就是达成全网共识的重要性。

问题到此貌似全部解决了!只要所有人达成共识,那你的任何行为都不可抵赖。在电子货币领域,共识就是一张几乎所有人都认可的交易网络,大家都认可它,那它就是可信赖的。所有人共享一个账本。

电子货币交易的不可抵赖性

在宏观上,我已经展示了这张交易网是什么样子的。但是在细节上,一个人到底应该怎样付款给另一个人的呢?怎么证明付款者就是其本人呢?

如果人们可以用笔在每笔交易上签署个个人签名或者按一个自己的拇指纹的话,问题就可以解决。在电子货币领域,问题就是这么解决的!

接下来我们看下如果A付给 B 一些钱,怎么证明这些钱就是A付给B的,而不是 A' 付给 B 的。

感谢有了非对称加密技术!这项技术理解起来非常简单(虽然它的数学过程会非常复杂),即你有一对密钥,一个是私钥,无论何时何地都只有你自己保有,另一个是公钥,可以公开给全世界。这对密钥的特点是:

设 Pub 为公钥,Pri 为私钥,一段消息 M 用 Pub 加密后有且只有用 Pri 可以解密到 M,反过来也一样,有且只有用 Pri 加密后用 Pub 可以解密。

用户 A 可以把自己的公钥 PubA 公开给全世界,当其要付款给 B 时,用自己的私钥给付款消息进行加密(术语叫做签名),然后 B 收到消息后,用 A 的 PubA 对消息进行解密(术语叫做验签),即可以证实是否付款消息来自 A:

这就解决了谁是付款人以及确认收款人的问题。

到此为止,从宏观到细节,我们都有了大致的轮廓,看起来问题真的全部解决了。

但是我们真的把所有的问题都考虑到了吗?

试想下面的一个场景,我要向温州皮鞋厂买一双皮鞋,我付钱给了皮鞋厂老板,他很快收到了我的电子货币,然而同时我又把同一笔钱付给了西装厂老板,间隔一段时间后,我才将这两笔交易通知给所有人,而此时两位老板均已经收到了我的电子货币并分别寄来了皮鞋和西装,然而随后当大家均收到了我的两笔交易单,来自同一笔钱,那么到底是买西装有效还是买皮鞋有效呢?不管哪个有效,总之,皮鞋厂老板和西装厂老板总有一个要损失。这就是问题。这是一个交易发生和交易核对的时间差问题。

怎样才能证明一个交易已经生效?

一笔钱花多次的问题如何解决(双花问题)

到此处为止,我一直努力尝试用非技术的话来阐述一个很技术的话题,区块链的设计非常类似Linux 内核中两阶段可睡眠的 RCU 锁,两者总体思想是完全一致的。RCU 中最终 Update 的时机就是所有进入 Copy 前的 Reader 全部撤出的时机,采用两阶段的递减计数器,靠计数器变为 0 来触发阶段性 Update 任务的提交确认,这个正和区块链靠把交易单囊入区块来提交确认是一致的。

回到交易确认问题。在时间的流逝方向上,构建了一个接着一个的区块,每一个区块囊括了一些交易单,所有被区块囊括的交易单便被认为是有效的交易。而没有被区块囊括的交易单怎被认为是暂时无法确认的交易单,需要继续等待其被区块囊括:

在上图中,交易单 a-i 均已经被区块囊括,因此这些交易单是可以 100% 被信任的,然而交易单 j-p 则是游离的交易单,没有被区块囊括,所以它们是未被确认的,所有的交易者必须等待自己的交易单包括在区块中,才可以认为这笔交易是安全的,否则便可能出现前面说的西装皮鞋的事情。现在的问题是,区块是如何生成并囊括交易单的呢?为什么被区块囊括的交易单就一定是有效的呢?区块到底有何神秘之处呢?

上图中任何节点都可以创建区块并链入链表中,节点 A 可以,B 可以,Q 也可以,问题是谁有这个能力。如果大家都有这个能力轻易生成区块,那么问题就成了到底信任谁的问题,似乎这里成了一个圈,问题是不可解的,但是由于区块的巧妙构造,让这个问题的解法变得十分耐人询问。

看一下区块的结构:

可以看到,到处都是指纹。

说起指纹,可以想到的是,它有认证的功能,有保证信息完整性的功能,因为每个消息体的指纹几乎是唯一的,哪怕消息有微小的变化,其指纹就会发生变化,这意味着只要囊括进区块的交易单,是不容更改的,因为稍微改一点,指纹就会不一致,就会被查出来,这个想法非常好。现在来看,区块中的各个指纹是怎么生成的。

当一个节点要试图产生一个区块并链入区块链的时候,它要做的是:
1.取出当前区块链尾端的最后一个区块的指纹,保存为M1;
2.抓取一批尚未被确认的未囊入区块中的交易单;
3.计算这些交易单的指纹,算出一个总的指纹保存为M2;
4.取出那个固定的指纹,保存为M3;
5.求解那个待填充的数字N,使得(M1,M2,M3,N)的指纹为M2。

是不是很容易呢?这个问题对于文科生来讲似乎太简单不过了,可是对于程序员来讲,当看到第5步的时候,就爆了。换个说法来给文科生解释,即给定一个指纹,让你找出那个人是谁。这似乎也不难啊,警察不天天在干这个吗?是的,警察天天干这个,但他们除了采集你的指纹之外还会登记你的身份证,住址等信息并关联起来啊。如果全世界人每个人仅仅留下自己的一个指纹然后走人,现在有一个指纹,问它是哪个人的,请问有什么好的办法可以快速定位?事实上,没有好办法,除非一个一个人去比对,当然,我们排除掉地理位置因素,姑且认为每个人每天都去一趟月球,然后这个指纹是在月球发现的吧。

生成一个区块,也要解这么一个难题,除非你有强大的电脑并且有钱交电费做这种无聊的事情,否则还是不要往自己身上揽这种活儿的好啊。如果你真的有兴趣做这个工作,那么你的电脑将不停地下面的工作:
fingerprint(M1,M2,M3,0)等于M3吗?哦,不等于!
fingerprint(M1,M2,M3,1)等于M3吗?哦,不等于!
fingerprint(M1,M2,M3,2)等于M3吗?哦,不等于!
fingerprint(M1,M2,M3,3)等于M3吗?哦,不等于!
fingerprint(M1,M2,M3,4)等于M3吗?哦,不等于!
fingerprint(M1,M2,M3,5)等于M3吗?哦,不等于!
fingerprint(M1,M2,M3,6)等于M3吗?哦,不等于!
....
fingerprint(M1,M2,M3,852042125687985453212)等于M3吗?哈哈,等于!!!

这多多少少有些运气因素在里面,事实上也是,就像买彩票一样,你可以将这活儿看成赌博,有时会天降大运,然而实际上更多时候,这就是一个蛮力活儿,所谓的重体力劳动!虽然体力的消耗不再是人力了,而变成 CPU 了...只要你算出那个数字 N,把 N 填入你构造的区块N的占位符那个位置,就可以把区块挂入到当前区块链的尾部并通知所有人你又确认了一组交易单了!!是的,确认又一组交易单成交,这就是做这件事情的意义。但这个意义重大,如果交易无法确认,就难免会出现西装皮鞋的问题,整个系统就是不可用的,要想让系统变得可用,就需要这种完全的确认机制。

前面说过,这是一件十分消耗 CPU 体力又十分无聊的活儿,谁会去干?!答案是每个人都想干,因为会有收益!

看看《闯关东》了解一下淘金就会知道,淘金这绝对是一件重体力活,开山,涉水,细筛...然而回报颇丰,因为你挖取的货币啊!所以说对于电子货币而言,当你完成了一个区块的生成之后,会得到一笔电子货币,你叫比特币也行,叫什么都行,反正就是大家都认可,可流通的,上面图中交易单里可转账使用的货币了。可以把整个未确认的交易单看作是矿上,你生成区块的过程就是在淘金,在挖矿。现在你应该已经知道什么叫传说中的挖矿了。

区块链技术如何避免攻击

有了这个区块链机制,我们再来看一笔钱买了皮鞋又想买西装的问题:

1.同一个矿工一个批次抓取了皮鞋西装两个交易单

假设某个挖矿成功的矿工一把同时抓取了买皮鞋和买西装的交易单,那么它在验证后抓取的那个单子时,姑且认为是皮鞋单子吧,它会看到这笔钱已经买过西装了,故会把皮鞋交易单作废:

2.在不同的批次被相同的矿工抓取两个交易单

这个情况更好理解,后一个批次抓取的那个会作废,理由同上。

3.同一个批次不同的矿工同时解决了指纹难题,一个抓取了皮鞋交易单另一个抓取了西装交易单

这个问题有点棘手了,在不同的地方看,区块链似乎是不同的,假设两矿工分别为 A 和 B,那么 A 和 B 两个矿工看到的区块链分别是下面的样子:

到底是西装还是皮鞋?4 号区块后面到底该是 a 块还是 b 块呢?这确实难以抉择,并且 A 和 B 均会通知所有人自己的区块链是对的,在大多数的其它节点,大家会收到这样子的区块链:

发生这种情况,不要急着抉择皮鞋 OR 西装,而是继续等待下一个区块的生成,不管是哪个矿工,下一个区块生成后它不是链接到 a,就是链接到 b,链接到哪个,那么就以哪个为准并把另一个区块已经囊括的交易单子释放,假设矿工 C 生成的区块 c 链接到了 a,那么区块 b 将会废掉,同时西装交易单也会被重新释放到未确认交易单中,这样当它下次被某个矿工抓取到时,可以直接验证失败取消交易并作废:

如果恰好又有两个矿工 c 和 d 同时完成区块的生成呢?比如 c 看到的是 a,d 看到的是 b 呢?这种情况确实概率极低,但也不是不可能,发生这种情况就再等呗,直到两条子链长度分出胜负为止!最终的收敛是一定的。

4.买皮鞋西装的坏人自己改区块链

刚才说过,区块链在发生分叉时以最长的那个子链为准,那么攻击者是不是可以自己构造长子链呢?理论上是可以的,所有计算机能完成的工作,都是 step by step,我们来看下构造这个玩意儿的具体步骤,稍微改一下场景,贪心者不再同时买皮鞋和西装了,而是分两次,第一次,他先买了皮鞋,同时自己默默构造一条更长的子链,待皮鞋老板发货后将这条子链通知出去,把钱退给自己,取消皮鞋老板收到的钱,然后再用同样的策略买西装。先看下构造好后的效果:

看上图,这是可行的,我们把区块放大,看看构造这个长链的具体工作:
1.针对X1,解决上面提到的那个fingerprint难题;
2.针对X2,解决上面提到的那个fingerprint难题;
3.针对X3,解决上面提到的那个fingerprint难题;
...

取决于攻击者想构造多长的链,就要解决多少次 fingerprint 难题,鉴于一次解题的成本,浪费大量的电费,时间,为了一双皮鞋,值得吗?攻击者能做的仅仅是把买东西的钱退给自己,他几乎不能修改别人的交易单,因为所有的修改操作必须通知所有人,如果改了别人的交易单,别人是不会认可的,毕竟没人想给攻击者转账汇钱,这意味着,即便仅仅是想不花钱穿皮鞋,攻击者也必须默默进行上述 N 次的 fingerprint 难题求解,因为一旦他把 X1 通知出去了,皮鞋厂老板知道了也就不会发货了吧...

也许你会觉得,有这么麻烦吗?难道不能仅仅修改攻击者到皮鞋老板的交易单就成了吗?将收款人改成自己不就好了吗?其实不然,我们看下图:

不管怎样,为了构造子链,花费大力气去计算若干个 fingerprint 难题是必不可少的,取决于你要构造的子链有多长!

为了一双皮鞋或者西装,这样做是不值得的,如果是为了一座房子,可能值得,但是在你雄厚的计算资本之后,不是还有法律的吗?

到此为止,我把攻击者的攻击场景也描述了,结论就是,攻击者只能攻击自己的交易,即便如此也要消耗巨资电力,这里没有算法的问题,因为没有任何算法可以快速解决那个 fingerprint 难题,如果出现了这样的算法,那意味着必须出新的难题,总之,就是要让解题的成本大于攻击的收益。

我们知道,银行里只有几名保安,而且这些保安还真不一定很能打,但是为什么没人抢银行,因为抢银行是重罪!会被追查到底。如果说少数的那些抢银行的完全是受制于冲动的话,那么攻击区块链就只能纯粹靠蛮力成本了,当然这里面有运气因素,如果你真的连续 5 次第一次猜就解开了 fingerprint 难题,那么你就可以不花钱穿一双温州皮鞋,但想穿第二双就很难!区块链里连保安都没有!哪怕你冲动了又能如何呢?

比特币区块链总结

以上讨论的电子货币就是比特币,这是一种特殊的电子货币,和以往的电子货币完全不同。区块链是比特币的底层技术。根据本文最开始绪论,我说比特币最核心的就是三大构件,P2P 网络,一张交易网,一条区块链,在整个比特币系统持续运转的过程中,发生着下面的事情:持续性的挖矿行为促使一个个交易子网持续性的纳入到某个区块,该区块接入到区块链中。该过程如下图所示:


其实区块链技术还可以构建更多好玩的东西,比如目前我正在设计的一个日志系统,另外,在物流,资源调配等领域中也可以使用区块链这种底层技术。上文中,我根本就没有提到 P2P 网络,加解密算法等,这些都是底层具体的实现技术,与思想无关。

在继续讨论我对比特币区块链的形而上看法前,我想大致列一个有关比特币的技术提纲,指示比特币使用的底层技术,但是,仍然不会细讲。

1.P2P网络

我前文一直提到把交易单通知给大家,怎么通知的呢?就是使用P2P技术。我们比较熟悉的电驴,迅雷下载使用的就是P2P下载,这种下载的风格是,文件切成小的片段,每个主机上只存一份,然后每个主机同时上传和下载。具体的思路请看我的为什么P2P模式下载的人越多速度越快,为什么P2P伤害机械硬盘

在比特币的场景下,我们知道有两条链,一条是交易链,一条是区块链,多条交易链形成一张完整的交易网,这张交易网维护着货币的属主信息,而区块链则维护者交易的有效性信息,不管是交易网还是区块链,都必须让全网都认可才能达成共识,形成信任。因此这张交易网和这条区块链就是通过 P2P 网络广播到全网的每一个节点的,理想情况下,每一个节点都会有这张交易网和这条区块链。但实际实施中,并非如此理想,总是有一些优化,这里就不再赘述了。

2.非对称算法与比特币钱包

非对称算法的发明绝对是一个创举,这里不再赘述这类算法的细节。对于比特币场景而言,由于每一个人都可以随意生成一对密钥,其中公钥的意义让其十分适合做钱包的地址,举个例子来讲,公钥就相当于一个存钱罐,而私钥则相当于打开存钱罐的那个钥匙,谁都可以往存钱罐里放钱,但是只有自己可以把里面的钱取出来。

比特币使用的非对称算法是 ECC 算法,这个算法相比 RSA 而言,同样的加密强度所需要的密钥长度要短很多,ECC 单位安全强度很高,这特别适合内存受限的嵌入式环境。

3.哈希算法,摘要算法

这个要说的是,就在前段时间 2月23日,Google公布了一例SHA-1碰撞的实例,如果这个实例发生在比特币当前的交易网或者区块链中,将会有多少利用的方案呢?

4.比特币的匿名性

由于在比特币环境中,对于收钱的人,任何发给自己的钱都可以无条件接收,那么只需要随时生成新的公私钥对,然后公开公钥作为钱包收钱即可,这样就使得交易轨迹很难被追踪了,这也在一定程度上保证了匿名性,就像你使用的是人民币一样。但是比特币也好,人民币也罢,都不是真正完全匿名的。对于比特币而言,意思是说,你可以随时随地创建自己新的钱包来收钱。

5.如果构建数学难题

计算的结果集必须是一个均匀的分布,只有这样要想得到特定的答案,就必须要一个数字一个数字的猜。这就意味着没有投机取巧的方案,除了遍历,没有什么算法可以利用。因此,一个逆哈希的过程将会是一个合适的难题,前提是哈希函数一定要好,哈希结果分布一定要均匀。

6.比特币的生成

首先有一个初始的创世区块确认了一笔从天而降的初试交易额,然后由这笔钱开始交易,其余所有的新产生的比特币均产生于挖矿。类似于物理世界的淘金,比特币挖矿也有挖完了的时候,按照设计,每过 4 年挖矿所得就会减半,这样最终肯定会把比特矿挖空,此时世界上的比特币总量就是 2100 万个!这个和黄金特别相似。金矿在地球上的黄金储备量是一个定值,所以说黄金的总量一定有一个上限,黄金本身不会通货膨胀,引发通货膨胀的是与其直接挂钩的美钞,关键看 1 美元怎么定义,是一美元的含金量为 0.888671 克黄金呢?还是说一美元的含金量为 1.888671 克黄金,这对世界的影响绝对不同,这就是金本位的弊端。看看比特币的情况,虽然比特币本身的数量是固定的,但是它的基本单位却可以几乎无限向下分割的,比如即便总量只有1个比特币,还是可以用 0.0000000000001 作为比特币的基本单位来主导支付,关键看名字怎么叫了。因此我觉得,说比特币是一种紧缩货币是不正确的,该出问题的时候还是会出问题。

现在说一下当比特矿挖完了后,新的比特币不再产生,矿工们靠什么激励继续去解那些 fingerprint 难题,很简单,靠交易手续费。如果还想让比特币系统继续运转下去,那就在交易的时候付给别人足够的手续费,这样别人才会解决 fingerprint 难题从而帮你将你的交易囊入区块形成共识。

7.如何确保比特币交易绝对安全

没有绝对的安全!囊入越新的区块的交易越不安全,因为攻击者需要解决的fingerprint难题越少,到底等待几个区块才确认交易完成是合适的呢?并无定论,简单点说就是交易的金额越大,越值得你多花点时间来等待更多的区块被挂入区块链以保证安全。

8.区块链技术和PKI有何本质区别

这是温州老板问的,区块链不就是解决认证,完整性,不可抵赖这种问题的吗?

PKI 体系不是已经很成熟了吗?并不是这样。PKI 需要一个信任中心,而区块链完全靠技术解决了本应该需要人介入的问题。我反问,要是根 CA 里工作的人都是坏人或者别人策反了怎么办呢?它签发的证书还可以相信吗?即便不是根 CA,随便一级的 CA 被人为干预,它下面的各级 CA 签发的证书均将失去信任。然而区块链是一种共识机制。区块链网络中如果大多数是坏人,就能发动所谓的 51% 攻击,而这种动员,在某些国家非常容易,集中力量办大事。

我说这样做没有意义,等于说玉石俱焚,区块链上的比特币将不再被信任,体系将会彻底被摧毁,谁也没收益,相反大家都会有损失。

其实这就是为什么51%攻击迟迟不会发生的原因吧...

9.挖矿能力的集中

本初,每个几点用CPU共享均等的挖矿能力,逐渐,挖矿能力开始拉开差距,从 CPU 挖矿到GPU,FPGA,再到专业的 ASIC 芯片,在利益的驱使下,本应该平摊的挖矿能力逐渐集中化。这是否跟社会主义贫富分化是一个道理呢?

10.如何快速验证交易单的数据完整性

其实,区块中的比特币的交易单哈希并不是叠加在一起计算的,而是组织成了一棵树,叫做 Merkle 树,它的结构非常简单:

这么做的目的在于可以快速进行完整性校验操作。校验从根部开始进行,按照二叉树的时间复杂度 O(logn) 进行,最终的校验失败会把出问题的交易单范围局限在某个子树上。在空间利用上,由于每一个节点实际上并不需要传输整个交易网和整个区块链,这种只校验 HASH 的方式也会减少数据的传输量,特别适合广播频繁的比特币 P2P 网络。

我对比特币的态度

现在,比特币已经运行了 7 年有余,我试着改变一下 4 年前对它的厌恶。早在 2013 年,我就了解比特币的原理,但那时我并不想去写一个我及其厌恶的东西,所以直到本文之前,我几乎没有提到过比特币的概念。同样重量的热炒概念是 AI,AI 就因为去年那场围棋,掀起了一股风,时间的朋友跨年演讲中也不得不折服于 AI 那巨大的煽动力,说得好像《机械公敌》里场景马上就到来了似的。比特币的创举在去中心化!然而中心化真的有那么糟糕吗?比特币的去中心理想虽然好,但很难实现。

其实,对于人类文明而言,中心化是一个收敛的趋势,你看看那些比特币矿池,不都是违背了去中心化的初衷了吗?虽然按照博弈理论,矿池的算力总是会无限趋近但不会超过 50%,但即便达到全网算力的 30%,也就有了足够的话语权和控制权,事实上,人们普遍需要一个核心。去中心化就跟仇富心理一样,表示的并不是一种理想,更多的是一种抗争。这不,在比特币区块链去中心化的同时,那一边的 SDN 不是正在搞中心化控制器吗?拼命搞北向,南向接口,东西向接口却发展乏力,这正是在走向中心化。

在任何领域,都不存在去中心化的例子,人类历史10万年,经历了一个又一个从一个中心到另一个中心的平移或者转换,但从来都没有去中心。

我来用世界历史和地缘政治来说一个观点,以下的文字来自于我对一则朋友圈评论。

欧洲中心论和华夷秩序都是某种中心主义,其背后都有经济基础,欧洲中心论的欧洲是交换中心,事实上欧洲是在大航海之后抢了伊斯兰交换中心的地位,而华夷秩序的经济基础则是在于中国作为分配中心在起作用。现在来看 MSL,其实他们也希望做交换中心,去抢夺曾经本属于他们的东西。中东几千年来都是南亚,中西亚,北非,欧洲的交换中心,在几千年来里,地理中心往往就是交换中心然而美洲纳入交换体系后,地理上的中心必然西移到欧洲,这个区域东到中国西疆,西到夏威夷,如果你仔细观察一下 xx 自己 YY 的地图,其实很容易看出,它们想要的地方就是从 xx 到东欧以及北非,南亚,中亚,西亚这片历史上的交换网络。东亚东南亚由于地理隔绝形成了另一种秩序,就是华夷秩序,这个区域相对小,内部彼此不是那么易接近,民族相对单一,且气候类型少,不易形成交换网络...

然而即便没有交换中心,也并不意味着这些区域就是老死不相往来或者绝对平等共产的,这里会形成另一种中心,即分配中心,这个在网络上叫做星形拓扑,古罗马王政和共和国交替的那个年代,对于意大利半岛上军事同盟的改组就是将平等共产的星环状拓扑改成了纯星形拓扑,罗马共和国曾经也是一个意大利半岛的分配中心。不管是哪种中心,如今当这个具备分配中心的东亚东南亚子网纳入整个交换网络的时候,其效率上的优势便逐步体现。

虽然我说的并不一定对,但至少也算能自圆其说了,我的观点是不管以那种方式去了中心,最终都还是会收敛出一个新的中心。

比特币区块链的另一个问题在于资源的浪费,不仅仅是 PoW 这种挖矿资源,还有更多的存储资源,带宽资源,目前一个区块要 10 分钟产生,且随着交易量的越来越多,对效率的要求越来越高,P2P 网络的广播开销,存储开销,挖矿开销将会快速增长,最终的效果就是二氧化碳的排放,有报道说,一比特币等于 1.6 吨的二氧化碳,这么做的目的仅仅是为了一种所谓的去中心理想,而这种理想如我前文所述还很难实现,这么做到底值得吗?

不管怎样,比特币以及其底层的区块链技术,在技术思想层面上绝对是一种创举,但并不意味着一定就可以短时间内取代各国法定货币成为通货,利用相同的思想,大家倒不如想象一下区块链技术还能用在什么其它的方向。

不过在否定比特币对传统金融系统的颠覆前,需要给它点时间,任何新的东西总是有能让人诟病的星星点点,但是事情总是会过去。近些天,新能源汽车也是接连事故,但这并不意味着技术要被否定,因为早晚你也会习惯曾经新鲜被人诟病最终却取得胜利的事物的。想想我们一开始对智能手机的态度。

后记

已经过午夜了,经过将近四个小时疾书连同画图,终于写完了!其中肯定有语言不通顺的地方和逻辑错乱,也是难免,毕竟一气呵成的,瑕疵肯定是有的,但至少是 ”我纯手工制作“ 的吧。

在写这篇文章之前,我在纠结是写成一篇大众科普呢还是写成一篇技术科普。最终我决定写成大众科普,所以我通篇几乎没有列那些技术术语,但是,对于作者而言,这种文章更是难写。写到ECC,RSA 那一节时,有种释放的感觉,总算可以写点自己懂的了,但意识到本文的初衷,马上就打住了,不能深入细节。

问题解释

1.在比特币网络里到底什么是钱?

首先看现实中什么是钱。现实中拿在你手上的真钞才是钱,至于股票,存在银行的钱,家里的黄金,你的学识,知识产权,房屋...这些都不是钱,这些只是有价值的可兑换成钱的东西,可以用来投资,但不可以直接流通,即便是股票,交易的时候也要看当日当时的价格,以可以流通的货币作计价,而对于 POS 机刷卡,它实际上扣除的也是你的货币计价,相当于替你完成了取真钞给你,你把真钞给对方,对方把真钞存银行这个过程。所以说,本文中所谓的钱就是可以马上流通的真钞票,就是纸币或者硬币。

那么看比特币网络中对应的钱是什么。这个还要从比特币交易网中去寻找。钱是什么呢?钱就是交易网中不被任何交易单引用的交易单上的”所得金额“:


至于说那些已经被引用的交易单,都是曾经花钱的记录,而不是真钱:


花钱的过程就是交易单中”所得金额“被引用的过程。
        问题解决了。

2.怎么确认钱的归属?

每一张交易单上都会卡上两个戳,一个是收钱者的公钥,另一个是付钱者的签名,表明这笔钱是谁付的,两个戳是纠缠在一起的,就像邮戳一样,会卡在邮票和信纸之间。比特币的公钥代表了钱包,而私钥指示谁付的钱以及谁可以花这笔新收到的钱:

3.修改一张交易单很难吗?

很简单。但是修改了之后的交易单不会被确认。为什么呢?因为确认交易单的过程是一个”挖矿“的过程,正文里讲过这有多么严格。

4.既然每一笔交易都完整记录,是不是反洗很容易呢?

是的!虽然记录每一笔交易只是在虚拟的数字世界里达成共识的一种手段,但是无意中为追查洗涤线索提供了便利,在物理世界,如果你拿用真钞进行洗涤犯罪,是很难被追踪的,但是大额的真钞又没有,只能通过银行,所以...

但在比特币世界,交易是准匿名的,公钥代表你的钱包,也即是存钱罐,公私钥对可以离线生成密钥对,很容易就重新搞一个存钱罐,这种特性让追踪变得困难。但是由于交易单是完备的,除非这些钱永远不花出去(这就失去了钱的意义),否则通过大数据分析,就可追到蛛丝马迹。

浙江温州皮鞋湿,下雨进水不会胖。

  • 21
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值