2

突破区块链不可能三角(终)——分片(下)

 2 years ago
source link: https://learnblockchain.cn/article/3337
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本系列文章:


在Chainspace的分析中,有一个地方我们没有明说,只是大概地说了是写在智能合约里的——

一笔交易合法的证明是什么?

我们知道在比特币中,是整个账本。

而在Chainspace的举例中,我们说一笔从片A到片B的分片交易的证明是片A和片B的账本。这里,我们牺牲了安全性。

但这个证明一定得是全账本吗?

交易的证据

我们来考虑一个理想中的分片状况——

每个人都自己构成一个分片,每个人都仅储存自己发起的交易。

于是,我们假设每个人都自己构成一条自己的链,链上是一笔笔自己发起的交易。

那么,挖矿这个交易没有发起者要怎么算呢?我们假设有一条所有人像比特币一样,共同用共识算法维护一条记录着所有新币发行的链,称为“主链 ”。

我们来设想一下在这样的结构里交易应当如何进行。

  1. 先假设某一天,小刚挖出了一个比特币,于是,主链上,多了一条“上帝”给小刚1个比特币,记为【币9527】的记录。
  2. 然后他把这个比特币给了小明,也就是,小刚在自己的记录上记了一笔,“把【币9527】给小明”。
  3. 然后小明把这个币给小红,在自己的账本上记上了一笔“把【币9527】给小红”。
  4. 接下来,小红想要把这个比特币给Mike,她在自己的账本上记录下“把【币9527】给Mike”。

这个时候,假设你是Mike,你要怎么样才能被小红说服【币9527】真的归你了呢?

首先,小红会说:

“你看,我都记到我自己的小本本上啦!”

“但是这没有任何意义啊,你完全可以记了之后再把它擦了啊。”

“不,你看我的小本本用了区块链结构,是不能篡改的!”

“你当我没学过区块链吗?你这个只是区块+链,没有达成共识,谁知道你有几个账本?说不定你还有另外一个账本你写了一笔别的交易给了别人呢?”

“那这样吧!既然我们都对于主链上的共识没有异议,那么我们用它来做时间戳——我定期把某个区块的哈希到主链上达成共识,这就能保证我的链是无法篡改的啦。你看,这笔交易之后的某个区块的哈希达成了共识,所以,这个区块之前的记录都是真实的!”

“好吧,那你把你的小本本给我看看。”

于是小红把她所有的交易记录都拿给你看——你看完了最近的区块,的确,后面的区块的哈希达成了共识,那么前面的区块和交易都是不能篡改的了。

但是,当你再往前翻的时候,小红一把夺走了小本本:

“前面的部分是我的隐私,不给看啦!”

“但这就很可疑了——这样的话我怎么知道你在发给我之前没有给别人发过呢?”

于是,小红想了想说:

“那好吧,你要看多久的交易记录呢?”

“我要看从你收到这笔钱,到你付给我这笔钱之后达成共识的那个区块的交易记录,这样我才能确定你没有双花过这笔钱,而且无法篡改你付给我这笔钱的事实了。”

小红把她的交易记录给你之后,你仔细检查了一遍——的确,这笔钱之前没有被小红花过。

“这样总行了吧!”

“等等!”

你突然发现了盲点——

“这里显示你的钱是从小明那来的,那我怎么知道小明有没有在付给你钱的时候有没有花过这笔钱呢?你得管小明要然后给我看,我才相信你。”

小红听后微微一笑,拿出了一份小明的账本,恰好是小明收到这笔钱到小明付钱给小红并且达成共识的部分。

“你怎么会有这东西!”

“那当然了!要不然我怎么会相信小明的那笔钱转给我了呢?而且,我就知道你会要,所以我就一直保存下来了呗。”

“那小刚没有双花的证据呢?”

“那我当然也有啦!”

“你是管小刚要的?”

“你想什么呢!当然是和你一样,管小明要过来的啦!因为小明在收到钱的时候肯定保留了一份小刚的交易记录啊。”

于是,你被说服了小红这笔钱是真实的。

小红当然可以尝试双花这笔钱,但是由于在你收到的证据中,小红把钱给你的那笔交易已经被“封死”所以无法篡改,所以小红无法提供一个足以说服别人的证据证明这笔钱转给了别人,因为所有人都能在交易记录中看到钱已经转给了你。

然后,当你收到了这些证据,你自然会保留下这些证据以用于当下次交易的时候证明给【币9527】的接收方。

Mike需要检查三个部分:1,小红受到钱之前的证据;2,小红收到钱到付给自己钱这段时间的交易记录;3,所有这些证据是否都在主链上“锁死”了。如果是,Mike认为这笔钱是真的,并且将这些存下来作为未来自己付钱的证据的一部分。于是,在这样的区块链中,每个人只需要保留:

  1. 你自己做过的所有交易
  2. 一个令所有人达成共识的主链
  3. 此外,关于你拥有的每一笔钱,你需要拥有它们的真实性证明。而这个证明,是之前拥有过这笔钱的所有人在拥有这笔钱的这段时间内的所有交易记录 ,以证明这笔钱没有被双花过。而这个交易记录被“主链”盖上时间戳,即这些交易记录形成一个区块链的结构,而后面的某个区块的哈希在“主链”上达成了共识。

除此之外,你不需要接受、验证或者储存任何其他的交易了,甚至,你都不要再去储存你已花出去的钱的证明。

是不是听起来十分理想。

而更理想的事情是——让我们看看这种方案的安全性,也就是说,在什么情况下两个诚实节点之间可能出现不一致,例如,两个诚实节点对于此刻【币1234】的归属权判断不一致。

首先,在这个系统中,节点仅关心属于自己的钱的归属问题,换句话说,如果【币1234】此时属于小红,那么一位与【币1234】无关的诚实节点小明并不一定知道这一点,也自然不一定能够证明这一点。事实上,“获知和验证与自己无关的币的归属权”这件事本身就是“分片”这件事希望要减少的冗余。

因此,唯一会出现不一致的情况是两个诚实节点都认为自己是这笔钱当前的归属者:诚实节点小红认为【币1234】此时是她的,而诚实节点小刚认为【币1234】此时是他的。

那么,如果这种情况出现,那么两人一定都有【币1234】的真实性证明。也就是这个币从铸币到现在经手过的所有人的交易记录。首先,铸币是在一个已经达成共识的主链上的,而双方却都认为【币1234】在经过数次所有权转换之后,流向了自己手里。那么,双方就一定在这个交易链条上某一个人的交易记录那里出现了分歧。

但同时,所有能被诚实节点所接受的交易记录,都被一个在主链上达成共识的的哈希盖上无法篡改的时间戳。于是,哈希函数的安全性,和主链的共识,一定有某个地方出了错,才会导致两个诚实节点都能验证通过的某人的交易记录不一致。而换言之,就是只要哈希函数和主链共识没问题,【币1234】,乃至所有币在系统中的归属问题,都不会出现不一致。

也就是说,这个系统没有牺牲任何安全性。

而与其同时,我们也没有牺牲任何的去中心化——因为所有节点的地位都是平等的,我们并没有选出哪些节点来负责所有交易。

这个系统就是VAPOR。
https://www.springerprofessional.de/en/vapor-a-value-centric-blockchain-that-is-scale-out-decentralized/17265582

https://fc19.ifca.ai/preproceedings/125-preproceedings.pdf

交易证据的大小

于是,乍看上去,我们已经突破了不可能三角——在不牺牲安全性和去中心化的前提下,实现了无限扩展。

但等等,先别急着下结论,我们其实还完全没有论证到这种方法能够提升输出呢!

也许读者看到这里会有些挠头——

不是你说的:

在这样的区块链中,每个人只需要保留:
你自己做过的所有交易
一个令所有人达成共识的“主链”
此外,关于你拥有的每一笔钱,你需要拥有它们的真实性证明。而这个证明,是之前拥有过这笔钱的所有人在拥有这笔钱的这段时间内的所有交易记录,以证明这笔钱没有被双花过。

那根据之前对于无限扩展和分片的定义,我们的目的不是已经达到了吗?也就是——

“每笔交易不需要通过每个人的验证,或者说,每个人不需要去验证每一笔交易”

这不就是无限扩展么?

但其实并没有这么简单,你们只是被前文中那个“只需要”三个字骗了。

没错,每个人都“只需要”保留“这些交易”,但是“这些交易”也可能涵盖了整个交易的集合。

前文中第一个没有提到的,是盖时间戳的频率——这里是一对延迟和输出的权衡。盖时间戳越频繁,比如每次交易之后都盖,那么就意味着每笔交易都需要达成共识,实质上就相当于所有的交易都得通过主链达成共识(但不用记录在主链上)。但如果时间戳盖得不那么频繁,那么虽然需要通过主链达成的共识少了,但是每笔交易需要的延迟会变高。但总体而言,既然我们追求的是扩容,那么我们一定是希望以一个没那么高的频率,将许多笔交易写进一个本地的区块,然后一个区块整体发一个哈希上链。

那么,假设改时间戳的频率不那么高,而且改时间戳和主链带来的额外传输和交易本身来讲可以忽略不计,那么在这样的系统里,每个人需要获取,记录并验证哪些交易呢?

其实只要做一个很小的思维实验就清楚——假设有10个人围成一圈,每人初始有10个币,大家每分钟交易一次,随机把手中的一个币交易给左手边的节点。然后,我们假设一小时大家发一个哈希到链上,盖一个时间戳。

那么经过足够长的时间之后,每个人都还有10个币,但是这10个币的证据会包括哪些交易呢?

我们把小时m,节点n的所有交易集合记为Tx[m,n]。那么所有的交易集合就是所有m和n的Tx[m,n]的集合。

那我们考虑一下,在什么情况下,1号同学目前所记录的证据中不包括Tx[m,n],比如Tx[3,2]。

答案是,仅当目前1号同学的十个币,在第3小时的时候都不在2号同学手中的时候,我们可以粗略地估算概率为0.9^10=0.35。

换言之,经过了足够长的时间之后,每个节点大概只能够少验证和储存1/3的交易。

但这个估计还少考虑了另一点——

比如,尽管现在1号同学拥有的所有币的证据中不包括Tx[3,2],但很有可能他很快就会收到一笔钱,而这笔钱在第三小时的时候在2号同学手中。实际上,这并不是个未来时——因为已经经过了足够长的时间,所以实际上他一定已经收到过这样一笔钱了,于是,他也已经获取和验证过了Tx[3,2],只不过是没有储存下Tx[3,2]或者是由于花掉了这笔钱所有又删掉了Tx[3,2]而已,而储存反而是目前区块链中最不容易瓶颈的资源。因此,1号同学其实压根就没有必要删掉Tx[3,2]。

于是,实际上VAPOR其实没有提高在这种情况下的输出——基本上,因为一共只有100个币,经过足够长的时间,你实际上总会在获取到所有币,于是,你其实最终还是会需要接收,验证和储存整个账本。

但,以上这种并不是一个现实中的交易系统。

实际上我们非常清楚——拿现金为例,这世界上有无数的钞票,而每个人也拥有很多的钞票。我肯定没法知道我曾经拥有和现在拥有的所有的这些钞票曾经的主人都有谁,但我可以肯定的是,某位在非洲津巴布韦的Kevin应该从来没拥有过我拥有的这些钞票。于是,如果用VAPOR来实现钞票系统,至少我能够确认,我不需要知道他的交易记录。从这个角度看,其实我知道,这世界上不少人的交易记录我都不需要知道。

因此,在现实的交易系统中,VAPOR是有可能提高输出的,只不过,我们没法确定它能够提高多少输出,也没法知道它能不能达到无限扩展的条件,也即:在传统区块链中,每笔交易的消息复杂度至少是N(N是节点总数),因为它至少要被发给所有节点。现在,我们知道在VAPOR里,根据交易系统中实际发生的交易模式的不同,我们可能不需要N的消息复杂度,这个值也许是N/2,也许是N/3,但如果想要达到无限扩展,我们需要证明消息复杂度是o(N)。

VAPOR实际上并做不到这一点。

不过实际情况是,以上的所有分片算法都做不到这一点。

但是,VAPOR能保证的是,采用了VAPOR的交易系统,很有可能最终会达到无限扩展,因为一种叫做“自主分片”的效应。

继续刚才我和一位来自非洲的Kevin同学的例子。

假设某一天,命运突然让我们之间想要发生一笔交易,确切地说,我要付给他一笔钱,我应该会怎么做?

我手上有很多笔钱,但是没有一个是他曾经拥有过的。反过来讲,他为了验证自己现有的和曾有的钱,记录了许多别人的交易记录,但这些记录中能够作为验证某一笔我要支付给他的钱的证据的部分非常少。

于是,如果我要做这笔交易的话,无论如何,我都得提供一大堆的交易记录作为证据发给Kevin。

那么,作为一个理性的人,我想要尽量减少我的传输开销,于是我会问他:

“不如把你有的交易记录的编号告诉我吧。”

然后,根据Kevin提供的交易记录编号,我本地计算出一笔需要传输证据量最小的钱给他。

例如,我发现Kevin实际上在印度有业务来往,因为储存了很多印度的钞票的交易记录,而恰好我也有一笔从和印度有业务来往的人那里收到的钱,其中恰好有一些部分作为证据的交易记录Kevin已经有了,于是,我选择讲这笔钱转给Kevin——因为这是最容易说服他相信的一笔钱。

而在这之后,突然某一天,Kevin需要付给我一笔钱,那么毫无疑问,如果他足够理性,它会把我给他的这笔钱付给我。

但不仅如此,如果他不是需要付给我钱,而是需要和另一个中国人小白进行交易,他也许也会用我付给他的这笔钱。而如果小白最终又和我发生了交易,猜猜他又会选择哪一笔?

而且,在现实的交易场景中,大部分的交易场景都是有规律可循的——买东西、去餐厅、交房租……我们最多的日常交易对象都是固定的几个,而像我和Kevin之间的初次建立交易关系的场景其实并不多。

也就是说,其实大部分情况中,我并不需要去问Kevin都已经知道了哪些交易,而是我,小白和Kevin之间已经进行了很多次交易,于是我们很清楚对方都知道了哪些交易,我们也知道了应该用哪些钱去完成这次交易。

于是,实际上,在任何长期的,固定的交易模式中,如果大部分交易参与者是理性的,那么钱这个东西,最终不会被所有人获知,只会在一小群人中来回循环,或者说,它会因为验证开销的问题,“倾向于”在能够循环的最短路径中循环,而“倾向于”不被扩散到网络的其他部分。

而这就形成了自主分片的效果——由于所有人的理性,那么每笔钱都仅在很小的网络中循环,而每个人实际上所拥有的钱也仅仅是所有钱中的一小部分,那么最终,我们就会达到无限扩展的结果。

这里需要注意的是——这并不是一个理想化的结果,也不会出现类似“公地悲剧”的问题。也就是说,自主分片并不是需要“所有人都理性地去处理交易”才会出现的结果,而是只要有任何两个,或者一小群经常进行交易的人愿意去这么做,他们就能享受到自主分片带来的效率提升。

VAPOR的局限

似乎,我们这一回真的打破了不可能三角——

VAPOR实现了一个安全、去中心同时无限扩展的交易系统。

但这似乎又颠覆了之前我们对于区块链不可能三角的看法——不可能三角的逻辑似乎无懈可击,而且,虽然没有任何严格的证明,但是它的结论几乎已经被所有区块链的论文和书籍奉为圭臬。

所以,VAPOR到底是用了什么魔法?

问题的答案不是魔法,而是之前谈到的理性假设。

VAPOR牺牲的,是系统的功能性——也就是说,VAPOR之所以在上面的安全性分析中是正确的,是因为我们隐含了3个条件:

1,交易发起方有义务向交易接收方提供交易有效的证据;

2,理性的交易接收方也有动机去验证这个证据的真实性,并且;

3,保存证据直到这笔钱被交易给下一个人。

当且仅当这三个条件满足的时候,VAPOR才是安全的。

乍看上去这三个条件是理所当然的,而且,在前文中我们已经论证了,比特币也基于同样的假设,但为什么比特币不是无限扩展的呢?

这是因为比特币的系统设计中其实是有冗余的,它虽然基于这个假设,但是却并不限于这个假设。比特币的设计可以用来做交易,做安全的数值转换,但是又不仅限于做这个,可以说是这个原因才有了以太坊和区块链。比如,以太坊几乎完全继承了比特币的共识,但在以太坊上有许多交易的对象是智能合约而不是某个“人”,而实际上这类交易都不满足VAPOR的假设,因为交易接收者为智能合约的意思实际上是要求所有节点都接受、验证并且储存这笔交易。也正是因此,这个合约所改变的状态才会成为一个“全局的状态”,能够供其他的交易调用和改变,这也是以太坊能够作为一个“准图灵完备”的计算机的基础。

因此,VAPOR实际上牺牲的东西,是功能性——VAPOR并不是一个满足“伪图灵完备”的区块链,它并不能做为一个类似于以太坊系统的底层。但是,它对于一个数字货币够用了,或者,并不是不能支持智能合约,只要保证所有智能合约中定义的交易都满足以上三个条件,比如博彩或者DEX合约,这些交易里理性的交易发起方也有提交证据的动机,那么VAPOR适用。但如果有交易不符合以上三个条件,那么VAPOR这样的系统就无能为力了。比如某个合约需要调取另一个人的某个状态,那么那个人如果觉得自己并不能从提交这个状态中获益,自然就不会提供这个状态真实性的证明,于是这个合约就不能实现。

除此之外,VAPOR并不是总能无限扩展的,而是需要借助“自主分片”,而自主分片的条件是相对确定的交易模式和另一种“理性假设”,即,节点有降低交易开销的主观意愿,而这点往下深想的话,却又会带出一个非常复杂且关系到区块链基础的问题——

在VAPOR系统中,支付者有提供证据的义务,而接收者有接收、验证和储存证据的动机。

但如果我们要引入“降低成本的理性”这件事的话,就需要量化交易接受成本(接收、验证和储存证据的成本),那么,之前关于理性支付者和接受者的假设就没那么绝对了。

比如,支付者想要付100元,接收者发现交易接受成本加起来大概0.1元左右,可以忽略不记,这个时候支付者和接收者的理性是成立的。

但如果另一笔交易支付者只付0.1元,接受者就未必愿意花0.1元的成本来接受这笔钱了。

而另一方面,由于在VAPOR中每一笔交易的交易接受成本是不一样的——证据较小或者接收者已经有其中的大部分证据的,交易接受成本就小,而反之,交易接收成本就大。

于是,有可能出现的情况是,小明想要付给小红1块钱,而现在他有3笔钱,交易接受成本分别是0.1元,1元和10元,那么小红可能会拒收后两者,也就是说,也许小明做出了这笔交易,但由于成本问题,小红并不愿意去接收、验证和储存这笔交易真实性的证据。这就打破了之前对于交易的理性假设。

而这种情况在VAPOR中是可能发生的——实际上,按照自主分片的设想,实际上由于每笔钱都仅在一个小范围内流通,想要将这笔钱付给圈子之外的人的时候,这笔钱就获得了很高的交易接受成本,换句话说,它贬值了。于是,实际上我们最终发现,VAPOR中的每一笔钱由于交易接受成本的不同,它的价值不再是一致的,而对于不同的人、不同的时间而言,都是主观和浮动的。

但这点其实并没有那么难接受——反而非常写实。

比如交易接受成本——这就相当于同样100块钱,但你付一张100元的钞票接收者就会欣然接受,付一大堆有零有整的小钞就会受人白眼,那换成全是1元的硬币估计别人就觉得你是故意找茬要打你了。

而如果你去深究所有目前的扩容方案,无论是二层网络还是分片,其实最终都会有一个细思恐极的结论——就是其实所有的扩容方案都或多或少地提高了交易接受成本,比如闪电网络或者rollup,实际上都对收款人带来了额外的验证负担。唯一的区别在于,在其他的扩容方案里,这个额外的负担被汇总起来成了整个扩容方案的一部分,然后这部分机制的额外开销要么如同二层网络一样,由一些专门的节点由额外的经济模型来负担,要么像其他的分片项目那样,平摊给所有的矿工。比如一笔跨片交易和一笔片内交易,一个优秀的跨链项目希望会让用户在使用的时候感知不到两者的区别,但两者在验证开销上的差别是却是客观存在的。

这种验证开销差别的极端情况无非是——假设有某一组人总是做交易,那么按照自主分片的原则,他们就会倾向于始终用那些他们知道来源的钱,久而久之,这些钱就只会在这些人内部流通,它的流通记录的账本也会变得非常大。久而久之,这些钱开始很难与外部流通,因为验证它的开销变得很大。于是,对于外部而言,这笔钱的价值可能会和外面的钱有了些许偏差——相比于更容易验证的钱,这笔钱的价值变低了。但相比于其他的方案和现实中的情况,VAPOR至少给了一种这些在不同节点之间流通的钱互相验证的统一标准。

但同样的,如果你仔细想想这件事的话,会发现——这不和现实中发生的状况是一样的吗?无论是现实中不同法币之间的汇率,还是不同链上资产的互通,又或者是不同分片之间交易的验算,实际上都一样存在这样的情况——尽管两个货币从定义上没有区别,但是由于验证成本不同,之前的验证人不同,那么导致两个货币的价格产生了差别,这本来就是理所当然的事情。

所以,从这个角度讲,VAPOR实际上是把这些复杂的机制也好,这些机制带来的额外开销也好,这些额外开销之后造成的使用上的问题例如价值的差异也好,全都正本清源地按照交易的逻辑,算回到每笔交易的交易者和每笔钱本身上面。交易之间验证成本的不同也好,这种差距带来的使用上的麻烦也好,这些都不是VAPOR带来的问题,而VAPOR只是把这些交易中固有的问题更加不加修饰地凸显出来了而已。一方面,这些问题是交易逻辑本身就客观存在的,比如验证成本的问题,它们实际上并不影响使用;而另一方面,实际上其他的算法也存在同样的问题,只不过它们在交易者之间加了一层特殊的节点,比如矿工或者二层网络的验证者,而把这些问题全部转嫁给了他们。所以,从这个角度而言VAPOR完全可以引入一样的机制来解决这个问题。

VAPOR带来的启示——我们真的需要分片吗?

所以,从分片的角度讲,VAPOR到底带来了什么。

首先,分片从一开始从概念到思路都是自上而下的——

主要的原因是,分片的概念来自于分布式系统,所以“区块链提高性能需要分片”这个概念,本身就先将区块链看成了一个如同分布式系统的整体,然后考虑如何拆分它的功能。

在拆分的过程中,很多方案被提出来了,例如根据网络分片(最早的以太坊分片提议),随机分片(Omniledger),根据应用分片(Rchain)等,但正如前文介绍的那样,这些分片方案无一例外地都陷入到了底层机制的泥潭之中。而问题总结起来就是我们之前反复提到的——分片这个概念本身就和区块链八字不合,如果简单粗暴地按照网络(应用)分片,那么“大部分诚实”的假设会出问题,因为不同的分片之间的利益会出现差异;如果随机分片,首先由于可能会有大量的“跨片交易”导致未必能够提高多少输出,其次其实仍旧不能解决“大部分诚实”假设的问题。

想要彻底解决这两个问题,就必须得通过自下而上的方法——想要提高输出,就得让分片的方式更贴合应用本身形成的交易模式分布(transaction pattern),想要让分片之后的诚实大多数假设能够成立,就得分析交易逻辑中节点的“理性”究竟是什么。

但这个逻辑和自上而下的思路是冲突的,因为自上而下的思路是:

自上而下的思路是沿袭自传统中心化系统的:原本,这个系统是xx宝,现在这个系统是某条链,有了分片之后,这个系统是某个分片的链,而用户感知不到这些的区别而这里希望交易者和接收者感知不到系统的分片。所以,这里面,系统和分片的机制是将交易者和接收者排除在外的。所以说,无论在这个系统里尝试怎样的分片方法,按照网络也好,随机也好,按照应用也好,都是试图在不考虑具体交易逻辑的情况下对系统做优化,考虑怎么设计机制能够让每笔交易需要验证的节点最少,而牺牲的安全性最低——目前工程上最接近于成功的项目是NEAR,但另一方面,从理论上,NEAR并没有解决上面提到的两个问题,只是把它们打碎藏到了许多复杂的机制之中。

当人们逐渐发现单纯自上而下的方案行不通的时候,这里,Chainspace往后退了一步,做出了一个自下而上的尝试——将交易者和接收者考虑进了整个分片的模型中。于是,虽然仍旧保留了随机分片的方式,但其他的机制上得到了优化。

而VAPOR则给出了一个纯粹的,自下而上的方案——如果不考虑系统,只考虑交易的逻辑,那么:1,每个节点原本就不需要记录所有交易;2,分片会根据应用自然而然地发生;3,在不牺牲安全性和去中心化的前提下实现无限扩展是可能的。

自下而上的思路里,每个人的每一笔交易的验证都是不同的,需要自己按照交易逻辑去验证的,而不通过某个系统实际上,VAPOR未必是一个最实用的方案,因为VAPOR中还存在着几个问题:1,VAPOR里没有讨论这个“主链”的经济模型是什么;2,VAPOR的机制,比如自主分片,虽然从理论解释上很简单,但是如何在交易的时候选择验证开销最小的一笔钱并不是个显而易见的问题;3,最重要的一个问题,就是VAPOR实际上针对某种应用类型的逻辑关系之上的极致的性能(吞吐量)优化。而它虽然并不是完全没有普遍性,但针对其他的交易类型,想要做到这种极致的优化并不是很容易的事情。于是,如果想要扩展到其他应用,比如其他智能合约,最后采用的方法很可能是牺牲部分输出,然后采用更普适的方案——而实际上,这种方案也许又会变成传统的方案。

但VAPOR的意义在于,它给出了一个所有无限扩展机制,无论是分片还是二层网络,的理论边界——所有的无限扩展机制的本质都是试图在让每笔交易不需要通过所有节点的验证,而所有无限扩展机制改进的动力都是希望能够根据应用的类型,选出最合适的节点来验证这些交易,从而让机制更简单、开销更低、对安全性的影响更小……而VAPOR实际上描述出了这么做的边界——如果真的能够按照“交易”这个应用,或者另外的某个应用的逻辑量身定制一个分片方案的话,那么VAPOR是在能够不降低安全性的前提下能做到的极限。

然后,在有了VAPOR之后,我们就有了一个新的审视传统的分片方案的视角,于是很多分片中看起来一团乱麻的难题都会变得清晰起来:

  1. 激励机制:现在我们知道,理性的交易者应该负责提供证据。所以,在传统随机分片方案中,无论是发起者分片的验证者,还是接收者分片的验证者,或者跨片交易的验证者,实际上都在为交易者服务。所以,任何分片机制,如果交易费仅仅付给其中的一个人而不是以上的所有参与方的话,实际上都是激励不匹配的。
  2. 输出提升:实际上分片并不总能提高输出,比如在所有交易都有所有节点参与的极端情况,那么怎么分片都没有用。于是,根据某种交易的交易模式分布(transaction pattern),肯定会有一个最优的分片方案使得片内交易最多而跨片交易最少,在这种情况下输出提高最多。从这点看,随机分片是最坏的方案,因为它没有根据交易模式做优化,于是很有可能大部分交易都是跨片交易。网络分片或者应用分片都能够直觉上做出较好的优化,而VAPOR的自主分片在所有节点都有“降低交易成本”的理性的前提下,应该会自主地做出最理想的分片方案。
  3. 分片差异:VAPOR中,由于自主分片内的交易很少被外面的节点验证,于是分片之间自然会出现价值的差异。但VAPOR的启示是——实际上自主分片只是交易模式分布(transaction pattern)造成的自然结果,也就是说,由于本身人们的交易行为就是有固定模式的,就是有地域或者应用的差别的,而根据这个差别产生的分片并没有加剧这种现实的差别,而是通过某种方法把他们联系起来了。

而最后一点,不知道大家听起来是不是觉得耳熟。

分片vs.二层网络

二层网络和分片在外人看来是两个泾渭分明的概念,也许还要加上多链系统,这三者似乎从技术上是非常不同的。

(注:由于成文时间较久远,这里的二层网络指侧链方案,而rollup方案在过去被认为是1.5层网络,不在现在的讨论范围内)

但实际上,在刚才我们对于分片的分析之后,其实三者并没有差那么多。

  • 二层网络是将某些应用的交易挪到链下,它们只需要被部分节点获知和验证。
  • 而分片其实目前来看最能够提升输出的状态,其实也是根据交易模式分布,把部分相互之间关联紧密的交易放进一个分片。

从这个角度讲,两者其实并没有差很多。打个比方的话,二层网络好比是现在市场上对某个业务有需求,而某个公司现在在做这个业务上力不从心,于是投资了一个做这个业务的团队让他们并入公司的生态;而分片是把自己公司一部分本来就做这部分业务的人分出去一个部门,单独负责这个业务。实际上两者最终的结果虽然从独立性上有差异,但功能上其实类似,而且也没什么优劣之分。

而从安全的角度看:

  • 二层网络中的状态的安全性是由二层网络的验证者担保的,当它们放到一层网络上的时候,需要通过验证人的押金担保。
  • 分片的话,理论上来讲各个分片的安全性应该是一致的,是由算法保证的。但实际上由于大部分新的分片机制都去掉了跨片账本,所以实际上每个分片的交易的安全性仍旧是这个分片的验证者通过押金保证的。

似乎两者在这方面也没什么不同。

但两者实际上在安全性上是必须有区别的:

  • 二层网络的安全性是和主链无关的。这点大家都很清楚,二层网络有自己的保证安全性的机制,即便出现问题,不会影响到主链交易的安全。因此,主链上的1块钱并不等价于二层网络上的1块钱,因为二层网络上的1块钱在二层网络安全性失效的情况下,可能换不成主链上的1块钱。
  • 分片则不然,分片本身是第一层的机制,也就是说所有的安全性应该是由分片规则本身保证的。换言之,如果我在一个分片系统里收到一笔钱,那么无论我在哪个分片,它的价值都应该是一致的,因为分片算法保证它能够无摩擦地在所有分片中进行交换。

于是就出现了一个奇怪的现象——其实目的和实现形式其实都并没有那么大差异的方法,却产生了不一样的结果。

而其中,二层网络的结果实际上更顺其自然。或者换个说法——VAPOR的结果才最自然,而VAPOR最终自然分片形成的分片,实际上相比于我们理解的分片,其实更接近于二层网络,因为分片内的钱实际上和分片之外的钱产生了价值差异。也就是说,其实一个理想状态的分片,其实最终就是二层网络。

那么,相对的,分片的结果实际上就没那么自然,换言之,我们需要通过人为的方法来保证分片中价值相等可互换,而目前最接近实现的这种人为的方法,就是NEAR采用的——

定期轮换每个分片的验证者,并且轮换的时候需要同步全账本和当前状态。 但和随机分片一样,这种方案对于提升输出是最差的方案。因此,NEAR进一步在安全性上做出一些妥协(提高了跨片交易双花的指证和挑战的难度),并且做了一个额外的假设:假设有个不那么瓶颈的非即时的传输通道,可以用来传输压缩之后的历史数据。

通过这种机制,我们才能够从算法层面保证所有分片中的钱价值相等。


于是,二层网络和分片之争在我看来,虽然很多情况是路线和政治问题,但从理论上,其实归根结底是这么个哲学问题——

你相不相信世界大同。

你相不相信未来会是一个区块链的世界,所有经济活动都会发生在区块链上。

如果你相信区块链的未来,那么你相不相信有一条链会一统天下。

我并不相信,因为实际上人们在“区块链分片”技术上的尝试已经告诉了我们一件事,即便我们试图自上而下地作一个“可以无限扩展的链”,最终我们的结果还是会回到自下而上的逻辑上来,而自主分片就是说,最终这个分片系统最理想的状态,还是一个最符合人们交易模式,或者说是人们经济活动模式的样子。而二层网络和跨链的逻辑也同样如此,两者都是现实的经济活动在区块链世界的直观投影——比如,因为现实世界中我们需要效率,因此不需要交易都通过所有节点验证,所以我们直观地设计出了二层网络方案;跨链也同样,因为之所以有那么多不同定位的公链,就是因为我们天然更愿意相信不同的经济活动会发生在不同的链上。

但如果你相信未来所有的经济活动都会发生在一条链上,所有的经济活动中的价值可以被互认,在非洲某国的交易就应该和你我之间的交易获得一样的可信度,这样,未来当我们与他们之间发生交易的时候价值才可以更轻易地被互换。

如果未来是这样的,那么NEAR给出了一个目前看来最可行最优美的分片方案——通过前面所说的节点轮换+压缩历史数据+适当降低安全性的方式,强行地让所有在区块链里发生的价值全部相等。这相当于什么呢?相当于为了让世界大同,所有的人都该打破国界的限制,随机选一个国家住一段时间,找一份当地的工作,然后定期轮换。或者,让世界所有的管理者定期轮换,轮流管理世界上的国家一段时间?

我并不是在说NEAR的方案不好,而只是单纯地在思考世界大同的问题——

当比特币出现的时候,曾几何时,比特币的支持者们也梦想着它能称为世界的通行货币,直到现在,仍旧有人深信不疑。但它没有成为世界货币的问题,究竟是因为它的TPS太低了,还是其实狭隘的我们实际上根本不想要这样的货币呢?

本文首发于:https://zhuanlan.zhihu.com/p/451101810


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK