跳转至

Vol.112 区块链到底是什么?

嗨,拜年了。你给我转 200 块,我给每羊转 100,每羊给郭冬临转 500,呃,余额不足。

每过去一秒,微信就得处理 1.4 万笔这样的转账。你能正常转账的前提,是因为微信知道你有多少钱,而这些钱又放在人民银行的专户里记账。而你也相信微信和银行体系背后的无数员工,不会搞错你的余额。

但如果没有这些可信任的第三方,在一个完全匿名的去中心化网络里,你怎么给我打钱?

2008 年 10 月 31 号,署名为 Satoshi Nakamoto 的 ID 用一篇 9 页的论文解决了这个问题。

现在我们知道,这个被称作中本聪的神秘人和这 9 页纸凭空创造了相当于 10000 亿人民币的比特币,和支持比特币运转的技术——区块链(blockchain)。

没有可信任第三方之后,最大的问题是我们每一个人都无法互相信任的。

所以,区块链的世界,转账就得发广播,目的是让所有人都得知道网络里的每一个人每一笔钱的来龙去脉。

大家会通过电子签名验证这句话确实是我说的,再把这笔转账记在账本上,我就少了 100,每羊就多了这 100 。

但大家怎么知道我真的有 100 块呢?你的账本会帮你确认。

这个账本,就是区块。把区块连起来,就是区块链。

它记录了比特币从创立到今天所有的交易记录,现在大概有 60 万个区块,每个区块里记录了 两三千笔交易,包括你我在内的每一个账户有多少钱,从哪里来,花到哪去,都记得一清二楚,透明公开。

在区块链网络里,所有人都拿着一份相同且实时更新的账本。所以我说要给每羊付 100 块的时候,大家手里的账本就会开始回溯检查我到底有没有 100 块,如果没有,转账就无效。

不难发现,账本的可靠性是数字货币的基石,如果账本出了问题,什么币都不好使。

但这就引出了两个新问题:谁来给大家记账?怎么保证账本不被造假?

如果每一个人都能记账,那每个区块里包含的交易和交易顺序可能都不一样,如果有故意记假账的,那就更乱了。不可能得到一个大家都接受的账本。

所以,记账的人得让所有人都接受,这样大家的账本才能统一。这也被称为共识机制。

今天各种区块链有各种不同的共识机制,而中本聪的方案是做题。谁先把答案算出来,谁就有权利记账。这一机制被称为 PoW : Proof-of-Work,工作量证明。

工作量证明的本质是穷举,你的设备算力越强,算出答案的可能性就越高。

为了做到这一点,需要用到哈希加密。

以 SHA256 算法为例,任何一串字符用它加密后都能得到一串独一无二的 256 位二进制数。而原输入只要有任何一点轻微改动,哈希加密后的数字都会完全不同。

打开一个区块,我们能看到记录在这个区块里的交易数量、交易详情,区块头等信息。

区块头是一个区块的标签,包含了时间戳、默尔克树树根哈希值、随机数和上一个区块的哈希值等信息,而把区块头做二次 SHA256 计算,就能得到这个区块的哈希值。

想要记账,就得把区块里的各种信息打包好,再修改区块头里的这个随机数,让输入值能够在哈希计算后得到一个前 n 个数都是 0 的哈希值。

其实每一位数也就两种可能:1 和 0,所以每改变一次随机数的成功概率就是 2 的 n 次方分之一。比如n 是 1,也就是只要第一个数是 0 就行,那那成功率就是 2 分之 1。

而网络里参与计算的算力越强,要算的 0 就越多,工作量证明的难度也越大。

今天比特币网络里的 n 大概是 76,那成功率就是 2 的 76 次方分之一,差不多是 755 万亿亿分之一。

用一块 8000 元的 RTX 2080Ti 显卡大概要算 1407 年。

要算对确实不容易,但只要你算出来了,所有人就可以在瞬间验证你算没算对。如果确实没问题,大家就会把这个区块连接到账本上,开始打包计算下一个区块。

这样,网络里的所有人就都有一份相同且实时更新的账本了。

而为了让大家有动力做题记账,第一个完成区块打包的节点会获得系统奖励,现在是 12.5 个比特币,差不多是 60 万人民币。这个过程,也被称为挖矿。

另一方面,为了防止账本被篡改,每一个新加入的区块都需要在区块头里记录上一个区块的哈希值,也被称为哈希指针。这样一个不断向前的指针最终会指向第一个创始区块,把所有的区块紧紧链在一起。

如果你修改任何一个区块里的任何一个字符,都会改变这个区块的哈希值,让下一个区块的哈希指针失效。

所以你必须修改下一个区块的哈希指针,但这又会影响这个区块的哈希值,所以还需要重新计算随机数,完成计算后,还得接着修改这个区块的下一个区块,直到修改完这个区块后的所有区块,非常麻烦。

这样,即使记账人想记造假也是做不到的。因为有电子签名,记账者不能伪造别人给自己的转账,又因为历史账本的存在,也不能凭空变一笔钱出来。

但这就引出了一个新的问题:如果两个人同时完成了计算,打包出了一个新区块,那该听谁的?

答案是谁长听谁的,现在所有人都可以在这两个区块后面接着打包。比如下一轮最先完成计算的的哥们选择接在 B 上,那么 B 链就更长了,其他人也会更愿意接在 B 后面。

打包 6 块之内一般就能分出胜负,被废弃的链上交易会被撤回,重新放到交易池等待打包。

但既然是谁最长听谁的,只要你比大家都能算,算力大于 51% ,就能自己一个人算出最长链,进而控制账本。

所以比特币世界里的矿工算力越强,大家要算的 0 就越多,保证谁都不能控制记账权。

但参与者不多的其他区块链就不好说了,比如 2018 年 5 月 15 日,一个叫比特黄金的数字货币就遭遇了 51% 攻击。

攻击者先是把自己的价值 1000 万美金的比特黄金转给交易所,这笔转账被记录在区块 A 上。同时,攻击者秘密准备了一个这笔转账没有发生的区块 B,并在区块 B 之后计算新的区块。

等 A 链上的转账确认后,攻击者就可以把在交易所的比特黄金提现。但因为攻击者的算力大于全网 51%,B 链的长度终将大于 A 链,这时只要向全网发布更长的 B 链,历史就会被改写。B 链会替代 A 链成为真正主链,而区块 A 里转给交易所转账也会被撤回,攻击者白赚 1000 万。

今天,对于没有算力的普通人,获得数字货币最简单的方式就是去交易所购买,再提现到钱包地址。

这个地址来自你的私钥,私钥加密后会得到公钥,公钥加密后会得地址。

在区块链这样的匿名网络里,只有私钥才能证明你是你,只要转账时附上你私钥生成的电子签名,大家就能确认这笔转账有效。所以如果私钥泄露,谁都可以冒充你把钱转走。

比如 2013 年一位叫 Adam 的男士就在电视直播里收到了相当于今天 1500 元的比特币。开心的向镜头展示私钥后,这笔钱就被当场偷走了。

该文件编辑日志

  • Mar 29, 2020. By Zhao-Robert
    创建文件 & Markdown 格式化