程序员的喵

白话比特币和去中心化

2022-06-09

最近我看了些区块链、以太坊和 Web3 相关的资料,倒不是因为想从事这方面的工作,但我想稍微了解些技术热点。

顺便写些文章锻炼一下费曼学习法,我想使用通俗易懂的语言来阐述自己的理解。如果我做到了让一个不懂计算机的人也大致明白了区块链是怎么回事,那我就成功了。

这是系列文的第一篇,为了使得该篇文章完整,我也会加上具体的针对技术人员的解释,以甄别自己的理解是否有误。

村庄里的交易

比特币已经不是新鲜事了,对于有技术背景的人来说比特币并不难理解,但对于计算机不太懂的人来说其实不容易理解。那么我们假设没有计算机,现实中货币和交易是如何运行的?

货币的出现,本质上是为了交易,是价值的交换。两个人要交易,从远古时代的以物换物,这样显然不方便。后来出现以贝壳等作为交换物,渐渐地人们开始使用贵重金属,比如使用黄金作为标准交换物。于是,黄金这类东西变成了标准货币,但黄金显然不便于携带,所以纸币就出现了。

现在的货币交易我们必须通过一个中心节点进行,这个节点就是银行,我们只需要理解为任何一个交易,都在一个巨大的中心上记录了一笔。

需要解决的一个本质问题是,我的每一分钱不能被花费两次。

现在假设一个村庄,为了进行交易,村庄有一个交易记录员,所有的的村民要进行交易都得通过这个人来记账。那这样会有什么问题呢?

假设 A 和 B 两个农民要进行交易,C 是交易记录员,A 和 C 私人交情很好,因此即使 A 转账了一笔钱给 B, C 并没有把钱从 A 的账户里扣掉,这样 A 就可能凭空多出来一笔钱。

C 作为一个中心点是不可靠的,任何单独的人都不值得信任,中心节点意味腐败和权力的滥用。虽然监督可能起到一定作用,但谁来负责监督机构没有问题。那我们如何才能打破中心点呢?

村庄里有个叫做中本聪的聪明小伙,他提出这么一个想法:

既然一个交易员不可靠,我们就需要多个交易员,任何人都可以成为这个角色,数量可以无限增多,并且他们的地位是平等的。

基于这个前提,如果有足够多的交易员,那理论上我们就可以信任这个交易机制。因为任何人都可以成为交易员,交易记录不止存储在某个人手里,而且也可以在其他人那里复核。

那具体如何实现呢?

他发明了一种虚拟币,如果某个村民想拥有这种币,那就成为虚拟货币交易员。每个交易员手里都拿着一个本子,里面记录了村庄的所有虚拟币的交易,这些交易员之间相互同步交易记录,比如 A 交易员现在手里已经记录了到目前为止的 99 页,而 B 交易员已经记录了 101 页,所以 A 会从 B 这里拷贝两页新的交易记录,那么最新的交易记录就在页码最长的那个页里。

可见这里面有很多重复的沟通,但是为了安全效率的问题先不考虑了。那如何防止交易记录被恶意纂改呢? 中本聪发明了一种彩票机,如果交易员把一页输入彩票机,彩票机就会根据页的内容计算出一个认证码。

交易本上的每一页上都附带这个认证码,并且每一页也附带着上一页的认证码,这样如果某个恶意交易员修改了记录,那也也得重新获取对应的认证码,但这样就无法和下一页连接起来,所以他得把接着的页也修改掉,并且让村里的大多数人认可这个改动。

好了,那接着的问题是谁来负责开始新的一页,如果每次都是固定的人,那必然还会出现中心节点的问题。因此中本聪规定,每周日是交易日,然后在一周的时间内,交易员们尽量在自己的新页内收集村里这期间发生的交易记录。

如果有多个交易员记录满了一页,如何决策哪个交易员的页为系统承认的新页?

中本聪还是利用彩票机,每次交易员把自己的页输入彩票机,然后按下摇色子的按钮,按下之后就会出现一个数字,如果连续 5 次都出现数字 1 的情况下才会生成对应的认证码。这样他就能把这个新页加入交易本,并且告知其他交易员。

可以预见,交易员们觉得摇色子的游戏无脑又无聊,于是中本聪就说,每次那个成功加入了新页的交易员能获得一笔虚拟币。

刚开始只有几个人在玩这种虚拟货币游戏,但随着时间的推移,认可这种货币的村民越来越多,有的人即使不成为交易员,但他们用钱买虚拟货币,这样也拥有了一些虚拟货币。

每天都有很多人在村头收集大家的交易,然后去彩票机摇色子。因为竞争过于激烈,中本聪第二个月就增加难度,要求连续 10 次摇出数字 1 才能新增页,并且以后每个月都递增,并且获得的虚拟币数量减半。

中本聪因此富了,村里其他人也按照类似的方式发了其他虚拟货币,有的人也富了,但有的人从楼顶上跳了下来。

一些技术细节

这就是我能想到的一个荒诞的比喻来描述比特币,因为从技术角度来说,比特币确实有那么点荒诞。每天有无数的高性能计算机在做着这样的猜谜语一样的计算,只是为了决定谁来记录新的交易。

安全,效率,去中心化这三个不能同时达到,很明显比特币为了去中心化和安全而牺牲了效率。比特币每 10 分钟左右会加入一个新的 block,而每个区块大小被中本聪限定最大为 1 兆,一个区块最多可以容纳 4096 (1024000/250) 笔交易,可以说效率极低。

我们看比特币里的一个 block 包含以下主要内容,Header 可用于验证该 block 是否合法,另外就是该 block 包含的交易记录:

挖矿的本质就是猜数字,猜出一个数字 (在 header 中称为 nonce) 和该 block 的交易内容进行 sha256 计算之后的结果 hash 的前 N 位为 0,block 也是以这个 hash 值串联起来。

当然这个猜数字的意义不限于决定谁来记录新的 block,更是为了证明工作量 (Proof of Work)。计算出一个合规的 block 需要耗费如此多的计算资源,可以说每一个 block 都是数字黄金。

另外这个工作量证明还有个特点,那就是验证很容易,因为只要知道了 nonce 和 block 的内容,进行一次 hash 计算就知道是否是合法的,这样其他节点就能很快地验证。

如果一个恶意攻击者想篡改 block 的内容,他也得按照这样的规则来生成合规的 block,所以也需要大量的计算量,并且得让大部分节点认同,这就使得恶意篡改的概率几乎没有了。

而随着时间的推移,这个 N 将变大,因此每此猜中的概率就会越低,挖矿的难度就越高。比特币初始化的时候一个设定的 2100 万个左右的总量,目前据说已经挖出了 90%,预计将于 2140 年将挖完。如果挖完之后,挖矿获得的奖励只能是手续费了,但那时候手续费是否还能让人们有欲望去挖矿,那就无人知晓了。

从目前上看,比特币的挖矿每年要耗费巨量的能源:

随着我国前段时间出来的禁止挖矿的政策,可以看到 network hashrate 的大头已经转移到美国了:

关于比特币具体的细节,你可以看看中本聪的原始论文 Bitcoin, A Peer-to-Peer Electronic Cash System

去中心化

比特币就是中本聪的一个乌托邦式情怀的实践,居然能成功破圈。但比特币成为世界货币的可能性极低,交易的效率低是一个原因,另一方面政府作为现实世界的中心,都不想让虚拟货币替代法币。比如美国希望继续捍卫美元的信用,这样才能继续收割,而中国则认为这种虚拟货币不可监管。

即使如此,近些年越来越多的人开始关注到区块链,去中心化成为人们对未来的期望。

如果你抛去对具体概念的偏执,现实中最大的区块链实践应该是 Git,Git 的所有提交都是可以追溯的,也是分布式的,我们通过 Git 客户端来提交新的记录 (也可以修改历史节点),但实践中 Git 通常是有中心节点的,比如 Linux 内核需要内核小组来维护世界上唯一的这个大家公认的分支。

我认为更重要的是共识基础上的平等和自由,区块链、去中心化、智能合约都是手段。

中心化和去中心化都是大自然的两类基本组织方式。自然界中,中心化的组织方式包括猴群、狼群、蜜蜂等,这些组织中有等级和分工。人类社会通常采用中心化的组织方式,一个国家、一个公司、一个互联网上的社交平台,都是有中心的。

而大自然中有的组织形式,比如鸟群、鱼群是没有无中心的,为什么海洋中的鱼群从个体上看都是随机、平等的,而从整体上看却是和谐的,如果来了捕食者,它们也能巧妙地避开。


这些鱼当中没有特定的领导,但是每个鱼都遵从相同的规则:不要远离同伴,但也不要离得太近,一直游,这就是它们的共识和自治。

你可以看看这两个视频里有趣的解释 :

虽然现在区块链、Web3 这些领域有很多问题还未解决,也有很多人冲进去是为了搞钱,有的人把一些现在的业务稍微包装一下看起来像是 Web3 的,但我对未来协作、社交的改变保持乐观,因为我们能看到中心化的弊端。

我们已经有了很多围墙包围的精美花园,现在需要的是任何人都能自由玩耍的大森林,未来的互联网应该是更公平和自由。

公号同步更新,欢迎关注👻