区块链技术的一些疑问

sjjt-202

下面是我在学习了解区块链技术过程中产生的疑问,思考问题的过程中也会让自己对这项技术理解得更深刻。我不算初学者(知道区块链已有五年之久了),但一直也没有深入学习,不能算链圈的专业人士,所以可能孤陋寡闻,不能确认这些问题是不是已经被解决了,或者根本就是问得毫无意义,权当学习笔记。

1. 区块链只适合执行低频高价的交易?

单纯的链式结构未必会产生分叉,但考虑到去中心化和网络的不稳定性,分叉就是不可避免的。而合理的链又不能容忍分叉,规避的办法是多走几轮后看哪个分叉能走得更远。这样,区块在刚产生时并不能确认自己是否在最长链上,必须多等几轮才知道。也就是说,交易不可能立即被确认,这是去中心化链式结构的一个基本特征。

至于高价,主要是针对现在较成熟的 POW 共识机制。POW 需要较高算力才能执行下去,这本身是有成本的,如果这个成本大于交易本身价值时,比如支付 1 块钱需要花 10 块钱来确认,那这个交易原则上是进行不下去的。特别地,象比特币这种日渐稀少的奖金规则,会逐步彻底拒绝低价交易。

当然,低频高价的交易也有很多,比如房产、大宗商品。不过日常的现金交易和股票交易可能就无法应用了。

2. 区块链记帐真有隐私性?

区块在全网公开,任何人可以查询到任何地址的交易过程并计算出余额。虽然地址本身是匿名的,但只要交易过一次就会知道交易对方的地址,虽然对方可能有多个地址,但我起码能知道对方至少有多少钱。而一般人也不会搞太多的地址,毕竟管理很复杂。即使有多个地址,因为转帐记录是公开的,这种关联性用现代的大数据分析技术也不难找出来。这还有什么隐私可言呢?

3. 区块链是分布式数据库吗?

区块链经常被说成是一个无中心的分布式数据库,无中心没问题,但这玩意儿是分布式吗?

我们平常说的分布式数据库,是指数据被分散存储在多台机器上,处理工作量太大时可由多台机器分摊,过程中要确保某些机器失效时整个体系仍能继续工作,以及多个机器的处理结果必须是一致合理的。对于分布式数据库,分摊工作量是关键性的目标。而区块链的体系则是每台矿机都存储一样的数据,也是在做同样的计算,最后只有一个计算结果是有效的,毫无分摊工作量的作用。这和分布式的目标基本不粘边,充其量只能叫热备。

4. 区块链如何更新签名算法?

显然,我们不能假定当前使用的签名算法能一直有效下去,万一哪天密码学界宣布这个算法不再安全了呢?

一个简单的想法,就是全网约定从某个时刻起都启用新算法(其实没这么简单,不过姑且这么假定)。但这会碰到一个新的共识问题:哪个时刻合适,换什么算法,由谁说了算呢?而且,就算有了结论,对于 POW 机制的链,又如何保证超过半数的算力到时候都会执行呢?(否则新算法就启用不了)

我们把引出的共识及共识的执行问题先放一下,看看还有没别的路子。

不用一刀切,那有没可能设计出一个平滑过渡的方案呢?即让新旧算法并存,使用哪个算法做的签名都可以被确认,吸引更多算力逐步支持新算法。

在 POW 机制下,似乎不可以!

新算法一定比旧算法计算量更大(否则没有必要更新),那么使用旧算法出矿的概率会更大。新算法长远来讲能保护所有人的利益,但旧算法对于眼前更有利,这时候人会怎么选择呢?

另外,新旧算法混签的区块链是其实不能用的,如果旧算法被攻破(可以低成本根据签名倒算原文),就可以伪造出无法辨别真假的历史区块了。在启用新算法时要把链中仍然有效的旧算法签名区块重新签一下并形成链才行,这会进一步加大新算法的计算成本。

5. 达成更多共识的共识机制?

再回到 4 中提到的引出共识问题。

投票解决?那得有个计票委员会吧,否则各人计出的票不相同又该听谁的?计票委会员这帮人不会作弊吗?当然,可能为更新签名算法去作弊的动力不足,不过,如何无论,一个去中心的体系必须依赖某个中心来维护了,这似乎有点不合适了。

一条提供某种共识机制的区块链,还需要一种达成新共识的共识机制来支持,这需要另一条区块链?还是有什么区块链协议可以用来制订它本身的共识机制?这象个哲学问题,我也回答不了。

说了不少 POW 的缺点,好象万恶都是 POW 造成的。其实不然,POW 还真是一个无中心且互相监督的共识机制。其它机制的去中心化程度和监督力度比 POW 差了很多,其本身的共识机制都可能是个问题。那些不是全网竞争的机制,少数几个被某种规则选中的块生产者会不会造一个对自己有利的假块(不是分叉)?谁来认定这些块的真假?怎么才算是真的?这些问题都不容易回答。

不过,我们还是可以期待能出现一种即无中心可监督且没有 POW 这些缺点的共识机制,有些正在研究的方案可能有戏。

6. 区块链只适合有限生命周期的事务?

这是问题 4,5 的推论。

如果限定为处理有限生命周期的事务,那么不需要更新签名算法,整个协议都不用改,只要在事务生命周期中这些算法和协议还有效就行,当然也用不着去达成什么新共识。但如果要处理无限生命周期的事务(这是目前区块链的主要设计应用场景),上面这些事就不可避免了,麻烦事就多很多。

7. 新共识如何强制执行?

问题 4 中提到的,就算达成了新共识,又如何保证执行呢?这要把希望寄托在大多数算力都是活雷锋上,如上面分析,采用新算法对整个体系更有利,但对于先动手的那个却是不利的,每个矿机都会这么想,也会想别人是不是也在这么想,结果的动作是谁也不动手。

要确保只要达成了共识之后就能被强制执行,这容易想到智能合约机制。那么问题来了:智能合约能不能用来规定挖矿中的采用签名算法这种复杂的事情?又如何保证执行效率不大打折扣?

8. 描述智能合约用图灵完备有意义吗?

以太坊的智能合约宣称是图灵完备的,那么理论上当然用来规定并执行上面的签名算法都没有问题(且先不管效率)。

但是,我看到图灵完备这个词,立即就会想到另一个词:病毒!

没错,图灵完备意味着这个机器强大到可以计算病毒的地步!如果虚拟机提供了基础的 IO 方法,那一定能写出病毒来。智能合约即使都以开源形式提交也无法避免。靠人来检查?又会出现上述的新共识问题,哪个委员会来认定这段程序是个病毒?靠机器来检查?这需要先做个智能合约来规定什么算病毒,这玩意儿恐怕难度太大了吧。

即算是把 IO 能力封掉而写不出可传染的病毒,写出死循环对于智能合约也不可接受,而对于图灵完备的机器这就是小菜,还是检查不出来(这是著名的图灵停机问题)。

智能合约还是不合适图灵完备吧,但上面的问题又来了:它的计算能力还足够用来规定挖矿中的签名算法吗?


最后谈一下对区块链技术的看法:

现在很多人在讨论区块链时把目标的伟大性归结成手段的伟大性,无中心的数字货币体系是个伟大目标,但区块链技术能不能实现这个目标仍然很难说。在上面这些问题没有很好的解决方案之前,我很难认同区块链技术是下一次革命的说法。

如果类比一下,我愿意把它比做三十年前的 prolog 语言(现在年轻人可能都不知道这东西了),要解决的问题也很伟大,但解决方案一样过于沉重而不可实用。

不过,区块链技术告诉我们,这个理想还有实现的可能性,至少在一定的限定条件下已经实现了。这会激发更多优秀的人投入其中,也许将来可行的解决方案中已经看不到区块和链了,但它仍然功不可没。从这个意义上讲,以太坊可能真会是信息领域的“以太”。

还是要向区块链和以太致敬!