学习Nothingatstake攻击
尽量不用术语,
还得把事儿给说清楚了。
—白长老
很喜欢白长老的这句话,想起了昨天写的“丈母娘”系列,白长老的目标,看起来就像就是专为"丈母娘"服务:D。
然而想做到又是一件很困难的事,首先要自己很通,还要给别人讲通。
《咕噜插下的两个“假眼”》这篇文章,我感觉差不多是标准范文了,把网络效应讲的通俗易懂。
刚开头就跑偏了,回到题目,我昨天分享了两篇链接,关于Nothing at stake的,我自己也是刚学习,所以写出来学习学习,不准确或者不对的地方还望指正。
Nothing at stake,这是一个名词,不好懂的那种,也不好翻译的那种,翻译过来是“无利害关系”,如果你不知道这个词背后的意思的话,是怎么都不会从字面上理解了的。
区块链就是一个账本,pow或者pos都是在争夺记账权,pow是谁算力大谁来记账,pos是谁币多谁来记账。记账的意思就是在账本上记录,“张三给了李四多少钱,张三还剩多少钱”类似的东西。
每当一页记录完之后,需要开始新的一页,这时,就可能出现一种情况,有两个人同时开始新一页的记账工作,这就叫“分叉”,最后哪个账本有人记,哪个账本就是真实的账本,这就叫“最长链”,当然也可能都有人记,于是就分成了两个币,比如bch分成了bch和bcv。
在pow中,对于分叉的两条链,算力只可以选择其中的一条进行挖矿,选择了挖这条,那么算力就去不了那条了,就像每个记账人的记账笔都是独一无二的,只能在一个账本上记录,不能同时在两页纸上记录。
在pos中,对于分叉的两条链,因为是看币的数量,所以可以选择两条链同时“挖矿”,记账笔是可复制的,可以同时在两页纸上记录。
在pow中,投入算力成本巨大,如果挖了一个错误的链,最后是得不到奖励的,所以最好选择可能的最长链进行挖矿。
在pos中,有多少分叉链,我就在多少个分叉链上挖矿,总有一个活下来的链,然后我领取这个活下来的链的奖励就行了,其他链的死活,不用管。这里的无所谓利害,对于分叉链,全部选择支持,就是Nothing at stake。
这种情况的后果就是,如果因为一些原因链分叉了,矿工为了利益会在两条链上都挖矿,两条链就会一直存在,一直维持分叉状态,搞不清哪条是主链,再严重会出现更多的分叉链,手上有点权力的都自己记自己的帐,公说公有理婆说婆有理。
又或者本来就有矿工图谋不轨,发动有利于自己的分叉,比如在a链上卖出了一些币,接着在b链上进行追赶,超过a链成为主链(双花),而其他矿工处于“事不关己高高挂起”的状态,只要最后活下来的链2给奖励就好。
总结一下就是,在pos中,拥有记账权的人,作恶成本太低,而其他用户,只要所有分叉链都支持,最后就一定有奖励,导致这个区块链是不健康的。
一种解决办法是引入惩罚机制,像xtz和atom,想作恶,就扣除事先交的保证金,提高作恶成本,以此来防止攻击。