皮卡丘说:会玩口袋妖怪,你就懂区块链
翻译 | 王柯凝
提起皮卡丘,小编心里一直有个怨念,比小编至今无法在国内玩上 Pokemon Go 的怨念还深,那就是口袋妖怪的卡牌,尤其是那张喷火龙!
不过,怨念归怨念,儿时的集换式卡牌游戏到底是教会了我们交易的规则和原理,而中本聪最初在比特币白皮书中通篇用词也是“点对点交易”。这两者之间又有什么关联呢?
最近,区块链和口袋妖怪的双重爱好者 Jack Dossman 用这个卡牌游戏仔细解释了一番比特币的交易原理,区块链不过就是另一种游戏——我们从小一直都在玩的游戏。
口袋妖怪之于区块链,正如皮卡丘在电影预告中那句台词,“我们能搞定它!”难道不是吗?不信你读一读全文:
穿越时空的长廊,我们突然变成了两个10岁的孩子,坐在操场上,手里拿着心爱的皮卡丘卡牌,那可是我们费尽千辛万苦才积攒起来的心爱之物。
恰好,我们手里都有一张对方梦寐以求的卡牌,所以我们决定交换。这很简单,在我们看来这两张卡牌价值相当,是一笔非常公平的交易,我给你我的卡,你给我你的卡。OK,成交!
作为两名10岁的孩子,在没有老师的监督下,我们也能保证卡牌交易顺利得进行。最后,我们都得到了那张梦寐以求的卡牌,所以,这是一次很成功的交易。
是不是很简单?我们都得到了自己想要得到的东西。现在,我们来想象一下,如果我们交易的是数字皮卡丘卡牌,会发生什么?
在这场游戏中,假设我手里有一张最贵的卡牌,并且整个游戏中有且只有这一张,现在,我想拿这张卡牌跟你交易。
第一版喷火龙——这可是最有价值的卡牌哟!
现在问题来了,由于是数字卡牌,你怎么确定我转让给你的时候没有备份一份?如果备份了,它的价值肯定就会降低。如果我制作了一千个副本,然后将这一千份都当做是全世界唯一的版本卖掉……
你没办法保证我不这样做。这对整个社区来说简直就是一场灾难,曾经稀有的卡牌就因为供过于求就变得毫无价值可言了。
这种做法有个学名,叫做“双重支付”。也就是说,在交换数字产品时,你怎么知道对方没有同时向两个人发送同一份资产?又怎么确保对方没有备份我们交易过得那张皮卡丘卡牌?。
针对“双重支付”这一问题,我们有一个对策:使用分类账(交易记录)跟踪我们的交易。通过分类账,任天堂游戏公司就可监督和跟踪每个皮卡丘卡牌的交易,保证没有人存储卡牌副本。
但是,没有绝对完美的对策,同样,分类账也存在缺点。现在,我们不再是学校的的那两个孩子了,得需要通过第三方的监督来完成这笔交易,即中间人。
我们得信得过这个第三方,相信他不会篡改分类账。那么问题又来了:你怎么保证我转让给你的那张卡牌,任天堂游戏公司的员工没有私下里送给别人?
这就尴尬了:我们没办法100%的确定没人篡改过分类账。
这里有一个特别不可思议的想法:任天堂游戏公司并不只是把分类账保存在总部的某台计算机上,而是将分类账副本分发给每个皮卡丘卡牌的交易者,这样可以吗?
全世界有成千上万的皮粉们,如果每个人都有分类账副本的话,当我将这张稀有卡牌转让给你的时候,每个人都会收到交易通知。
分类账中有记录:我们交易的这张卡牌全世界有且只有一张。因此,如果我私下里复制一个副本的话,我的分类账副本就无法跟别人的匹配,这个卡牌副本也就不可能再交易。
这样,就解决了卡牌副本这一问题。
但是,问题又来了:网络如何验证我们的卡牌或者其他交易是否正确呢?
这就有点复杂了。在解决这个问题之前,我们先看一个例子:假设有1000台计算机参与了皮卡丘卡牌交易网络,我们称参与交易网络中的这1000台计算机为1000个网络节点。
这1000个节点(计算机)都共享分类账副本,并且都运行了允许与网络上其他节点(计算机)通信的免费软件。
这1000个节点都需要认可共享分类账上记录的这笔交易,那么,他们是如何实现的呢?
很简单,我们两个人的交易会放入一个待验证的临时交易池中,等待各个节点确认交易。
然后,给定一个时间,比如是10分钟,这些节点在这个时间内竞相验证所有待验证的交易事务。
这些节点又叫做“矿工”,他们都希望自己成为第一个验证交易的“矿工”,因为第一个验证交易的“矿工”可以获得奖励——皮卡丘卡牌。
若干个等待验证的交易事务称为一个“块”,皮卡丘卡牌所有的的交易历史都存储在这些“块”的“链”上,构成共享分类账,这个“链”就是“区块链”。
接下来,“矿工”们就开始相互竞争,他们都想成为第一个验证新区块的节点,因为有奖励呀!他们花费大量的计算力解决一个个加密难题,从而验证新区快。
是不是听起来很古怪?但事实的确是这样。
“矿工”们花费大量的计算力验证“块”,这其中蕴含的数学问题比较复杂。我们只需要知道,这些“矿工”们为了验证“块”,做了很多艰苦的工作。你可不要妄想弄乱分类账,因为代价实在是太大了!
一旦“矿工”找到了待验证“块”的加密解决方案,就会使用数字签名对“块”进行签名,证明这个“块”已经被验证了,然后告知网络上的其他“矿工”,并将已验证的“块”分发给他们,以便对分类账副本进行更新。同时,这个“矿工”也会得到皮卡丘卡牌奖励。
但是,网络上没有哪个节点是彼此相互信任的,因此,每当有新的块出现时,每个节点都会根据自己现有的分类账副本,检查块中的每个交易事务,来检验这个卡牌有没有重复交易。
这就是网络达成共识的方式。
现在,我还想吃一顿美味的午餐,得需要一张卡牌和你交易。这时候,我还是使用刚刚已经和你交易过的那张卡牌,可以吗?
将已经转让给你的A卡牌,再当做B卡牌给你,这就是非法双重支付。
网络其实也不知道A卡牌和B卡牌到底哪个是对的,那么,网络是如何做决策的呢?
A卡牌和B卡牌这两笔交易都会被放入待验证的交易池中,一般来说,交易是按照时间顺序排序,但也有特殊情况。
由于“矿工”们也是按照时间顺序进行验证,也就是说交易越靠前越安全,如果B卡牌交易先被验证了,那么分类账副本持有者就将B卡牌交易看做真实交易,A卡牌交易就是非法双重支付。
如何知道哪个交易是合法的呢?这时候,最好的办法就是等待。
这两个交易不可能都被网络认可,总会有一个交易是无效的。我们只需要等待,看看“区块链”中下一个新“块”包含哪一笔交易。
一般来说,等了10多分钟后,有时候甚至需要更长时间,就可以检查网络是否验证了B卡牌交易,如果验证了B卡牌交易,你就拥有了皮卡丘卡牌,然后就可以放心的为我提供午餐了。
如果我特别贪婪的想避开这些规则,进行双重支付,会怎样?
我从分类账中找到刚刚完成的卡牌交易并删除,这样,我就可以再次使用这张卡牌进行交易,获得更多的午餐了,我简直就是天才!
由于交易存储在块中,并按照时间顺序线性连接,所以现在可能有一堆块连接在它后边了。
假设在我交易后,“区块链”上已经添加了9个新“块”,那么我就可以往前找,找到第10个“块”,这就是我交易所存储的地方,把这个“块”删除,OK,搞定!
现在高兴可是为时过早了!
你可别忘了,每个“块”上都有数字签名,数字签名是根据“块”中的信息自动生成的。如果删除了交易,“块”中的数据就会改变,数字签名也会随之改变。
更糟糕的是,后续每个“块”的数字签名都由前一个“块”决定,如果某个“块”的数字签名改变了,那么在这之后新产生的“块”的数字签名都会随之改变。
所以,你不仅要修复第10个“块”上的数字签名,还得修复后续9个“块”的数字签名。这可是一个相当大的工程!
这还不是最糟糕的,还有更麻烦的事呢。
现在,你只是修改了自己持有的分类账副本,而其他分类账副本已经认可了之前的交易。为了得到网络上多数节点的共识,你还得修改该网络上50%以上的分类账副本。
要想修改这所有的数字签名,就意味着需要大量的计算力重新计算网络中多个“块”的数字签名。更直白点来说,就是得需要好几个仓库的计算机,7*24小时全天候不停的运行。天呢,这得需要多大的工作量!
很明显,你还是放弃吧!
就这样,我们创建了一个开放、去中心化、不可逆的防篡改数字网络,来交易有价值的资产。这就是比特币和区块链技术的原理,我们可以看到,区块链技术赋予了比特币无与伦比的迷人特性。
读到这里,我想为你点个赞,只需要弄懂口袋妖怪卡牌游戏,你对区块链的理解就已经超过了 95% 的入门者。
简单吧?皮卡丘说的没错!
原文链接:https://medium.com/s/story/blockchain-explained-with-pokemon-cards-ecdd90e4297a