Proof-of-stake(POS)是如何工作的

以太坊昨天完成了从pow到pos的升级,这将大大节省资源,但同时也可能隐含巨大的隐患

什么是共识机制

区块链本质上是一个数据库,它满足以下特性:

  1. 它同时有多个管理者,只有他们有权修改数据库,每个管理者手上都有该数据库的备份。
  2. 对数据库做任何修改操作都将获得奖励。
  3. 必须保证任何时候都有一半以上的管理者手上是数据库备份是一致的。因此,对数据库任何的修改请求都必须获得大多数管理者的同意。

故,一旦有人发起了修改数据库的请求,所有的管理者都会抢着作为该请求的负责人。问题来了,到底该让谁负责该次请求,这就需要所有的管理者达成一个共识。

POW vs POS

一种做法是,当一个请求来的时候,让所有管理者猜字谜(挖矿),谁猜到就让谁负责,当然,谁负责谁就受益。并且,由于这是大家都同意的竞选方式,所有人都需要跟着该负责人一同修改数据库。这种猜字谜选择负责人的方式就是 POW。

由此可以想象,假如某个管理者有很多的随从(显卡),那他就可以让这些人一起帮他猜。哪个管理者的随从多,谁就更可能猜出这个字谜。

另一种做法是,当一个请求来的时候,随机从所有的管理者中选取一个来负责。这样就不需要管理者有很多随从了。这种做法就是 POS。

当然,这里的随机肯定不是普通的随机,它必须是所有人都认可的一种随机方法

POS

pow机制中,任何人都可以当管理者,反正都是猜字谜,各凭本事即可。但若想成为pos中的管理者,则至少需要交一定量的保证金(比如38ETH)。只有你交完保证金成为管理者后,你才有机会被选中当作某次修改数据库的负责人。

如果你被选中了负责某次修改请求,你就必须校验该次请求是否合法(验证区块内的交易是否都合法),这其中也包括对之前以及提交的请求的校验。若没问题,你就可以向数据库提交修改了,同时其他管理者也需随你一同修改自己身上的数据库。

倘若你胡乱修改数据库,被后续其他负责人发现的话,你的保证金就没了,同时后续的选举你也无缘了。

如果你尽职尽责带领所有管理者完成了该次修改请求,那么你将获得一定量(但远小于保证金)的奖励。

pow验证者的选举

有些人他就要富贵险中求,不就是38ETH嘛,没了就没了,但要是没被发现,那就赚大了。所以pow还规定,谁交的保证金多,谁就更有机会成为责任人。

这就是一个博弈的过程了,由于大家都希望成为责任人得到奖励,所以大家的保证金也就越交越多。保证金多的话再去作弊那就不划算了。所以就必须老老实实,尽职尽责。

但如果只是这样的话,有钱的是不是就越来越有钱了。因为我有钱能交更多保证金 —> 我就更有机会成为责任人获得奖励 —> 我就又有更多钱交保证金 —>…

确实是这样的,为了解决这个问题就引入币龄的概念。币龄 = 你的保证金 * 持保证金天数。其使用方式如下:

例如你交了100保证金,我交了200保证金。第一天,我成为责任人的几率是你的两倍(因为我保证金是你的两倍,同时我们的持币天数都是0。注:真实情况不一定是两倍,可能是其他概率算法)。

假设第一天我当选了,那么第二天你的币龄就是 100*1=100,加上你本身有100保证金,两者相加就是200。而由于我第一天当选了负责人,规定当选负责人的后一天持币天数又从0开始记。所以第二天我的币龄还是 100*0=0。我只有200保证金,而你币龄加保证金也有200,故我俩当选为责任人的概率是一样的。

假如第二天还是我当了责任人,那么第三天,我就还是只有200保证金,而你两者加起来则有 100*2+100=300,显然,此时你当选责任人的概率就比我高了。

如此,就算你交的保证金不多,也是有机会成为责任人的

51%攻击

对于pow来说,只要你拥有了大于全网51%的算力(一半以上管理者联合起来一同作弊),你就可以完全控制该区块链。

对于pos来说,只要你拥有大于全网51%的保证金,你就有可能成功作弊,因为下一个负责人验证上一个负责人的工作,只要你能连续两次当上负责人,你就可以成功作弊了。但这需要你能有数额巨大巨大巨大的保证金,对于以太坊这样的链基本上不可能。

参考

https://www.youtube.com/watch?v=M3EFi_POhps
https://www.youtube.com/watch?v=YudpU58uYuM

Leave a Comment