7 个步骤入门区块链

时间:2021-07-25 06:22编辑:未知

2021 年是BTC大爆发的一年。在潜水这么多年之后,BTC的价格一下子从 1000 USD左右飞涨至将近 20000 USD。多少人摇身一变,成了“密码学货币买卖专家”。

赶上好时候确实可以狠赚一笔,不过醒醒吧,盛宴已散。

尽管被人们肾上腺素爆棚的主要还是快速攀升的市值,但这波热潮刚开始还是由技术掀起的。区块链技术依旧有巨大潜力。目前正是业务开发职员、企业家和个人喜好者怀着一腔热血上车的时候。不过热血翻涌之余,第一还是应该增进一下对区块链技术的认知。

只可惜,现在解说区块链技术的文章不是涉及太多复杂的技术术语,就是太过肤浅,缺少深度。这两类型型的文章都不便于读者了解地理解文章内容。如何解决呢?我建议你可以就从这篇文章开始。只须 10 分钟,就能知道区块链技术为何这么具备颠覆性了。花这点时间还是物超所值的。祝阅读愉快。

引言

第一,区块链是一种电子化数据的存储办法。数据是以区块的形式出现的,想象一下有不少存储着数字化数据的区块。这部分区块都链接在了一块,为其内部数据赋予了不可变性。当一个数据块被链接到了这条链上,其内部数据就再也没办法更改了。一旦某个区块被添加到了链上,里面的数据对其他人都是公开可见的。这项技术具备非凡的改革意义,可以用来记录大家能想到的几乎所有数据(比如,产权、身份、余额、病历等等),同时没有被篡改记录的风险。假设我买了一套房屋,把产权证拍照上传到了区块链上,我就可以证明我在那个时刻享有这套房地产的所有权。一旦这个信息上链,就没人可以更改它(好吧,还是有方法更改的,这里有一篇进阶阅读材料,我建议你稍后阅读)。因此,区块链是一种存储数据且保证数据不被篡改的办法。这听上去很好,不过随之而来的问题是:大家是如何达成如此的技术的?

(校对注:吹毛求疵来讲,这一段表述并不是无懈可击,但姑且可以这么先记住。)

第一阶——买卖数据

好吧,大家先拿BTC区块链做个例子。BTC区块链是现存历史最悠久的区块链。在BTC区块链上,每一个区块的大小在 1 MB 左右。至截稿日,这条链上已经累积了 52.5 万个区块,链上存储的数据总量约为 52.5 万 MB 。(校对注:其实远远没 52.5 MB,由于在早期,不少区块都没打满 1MB。另,截到今天日(2021 年 4 月

24 日,已经积累了 57.3 万个区块,总数据量约 250 GB。)

BTC区块链上仅存储 BTC的买卖数据 。它就像是一个庞大的买卖记录库,可追溯至第一笔BTC买卖。在本文中,大家假设有一条存储买卖数据的区块链,就像BTC区块链那样。

第二阶——(通过哈希运算)链接区块

想象有三个存储着买卖数据的区块(如图一所示)。

这三个区块内都存有一些买卖数据。这没什么特别的。就好比是三个独立的 word 文档,里面描述了买卖的内容和余额变化状况。文档 1 会根据时间顺序从第一笔买卖开始记录,直到数据量达到 1 MB 为止,之后的买卖会记录在文档 2 中,直到数据量达到 1 MB 为止,以此类推。这部分文档就是数据块。它们一个接着一个联系(链接)在一块。为此,每一个区块会依据其内部数据串生成一个特殊的(数字)签名。假如这个区块中的数据发生任何变动,即便只改变了一个数字,这个区块的签名也会发生改变。这是怎么样达成的?欲知详细情况,请阅读步骤三中的 哈希运算 部分。

(校对注:如上文所述,实质情形中的区块并非个个都接近区块大小的上限,实质数据大小要看把区块打包上链的矿工在区块中记录了多少买卖,而他们并不会等到有了 1MB 买卖数据才开始动手。实质情形见下文)

假设区块 1 中记录了两笔买卖,分别是买卖 1 和买卖 2 。这两笔买卖的总数据量达到了 1 MB (事实上一个区块中包含的买卖笔数远不止这点)。依据这个区块内的数据串会生成一个签名。假设这个签名是 “X32” 。如下图所示:

请记住,即便区块 1 中存储的数据改动了一个数字,也会得到一个完全 不一样的签名 !只须将区块 1 的签名添加到区块 2 中,就可以将区块 1 的数据与区块 2 关联起来。区块 1 的签名也包含在区块 2 的数据串内,因此这个签名与区块 2 中的其它数据一样,成了区块 2 签名的数据基础。如下图所示:

正是这部分签名将区块链接在了一块,形成了一条区块链。目前加上区块 3 ,整条链的状况如下图所示:

目前,假设区块 1 中的数据被 更改 了。比如 Damian 和 George 之间的买卖被更改了。Damian 向 George 发送了 500 个而非 100 个BTC。因为区块 1 中的数据串改变了,其签名也相应改变了。更改过数据之后,区块 1 的签名不再是 “X32” ,而是变成了 “W10” ,如下图所示:

如此一来,区块 1 的新签名 “W10” 跟之前添加进区块 2 数据串的旧签名 “X32” 产生了冲突。区块 1 和区块 2 之间的链接就断了。这条链上的其他用户就会知晓区块 1 中的数据被更改了。为了维护区块链的不可变性,其他用户会拒绝同步更改后的买卖信息,依然保持原有些买卖记录(即 Damian 向 George 发送 100 比特币 )不变,整条链依然维持完整。这就意味着,要想不露痕迹地篡改买卖,需要将区块 2 数据串中区块 1 的旧签名替换成新签名。然而,一旦区块 2 中的数据串发生变化,区块 2 的签名也会随之发生变化。假设区块 2 的签名从 “9BZ” 变成了“PP4” 。那样区块 2 和区块 3 之间的链接就断了!

区块链上的区块对所有人都是可见的。因此,假如篡改者真想要不露痕迹地篡改买卖,就需要保证篡改之后的区块仍然都联系在一块(不然大家就比较容易发现什么区块跟其他区块并不相连,进而判断出该区块已经被改过了)。也就是说,改掉一个区块需要为后续的所有区块计算新的签名。可以觉得这几乎是不可能的,但要理解这是为何,请看下文。

第三阶——生成签名(哈希值)

那样,大家以区块 1 为例再画一个示意图。假设区块 1 只记录一笔买卖,即 Thomas 向 David 发送 100 比特币 。需要依据这个数据串生成一个签名。在区块链上,这个签名是通过密码学哈希函数生成的。密码学哈希函数是一个极其复杂的数学公式:将任意数据串作为输入值代入公式,可以得到一个与众不同的 64 位输出值。比如,你可以将 “Jinglebells” 一词代入这个哈希函数(哈希函数的类型有不少,这只不过其中一例),得到的输出为:

761A7DD9CAFE34C7CDE6C1270E17F773025A61E511酷有拿货网6F700D415F0D3E199868

只须这个输入中有一个字符发生变化,包括改变大小写或是增加空格和标点,就会得到完全不同的输出。假如你在这个输入后面加上一个句号变成了“Jinglebells.”,得到的输出就变成了:

B9B324E2F987CDE8819C051327966DD4071ED72D998E0019981040958FEC291B

假如大家把句号去掉,还是能得到跟之前一样的输入:

761A7DD9CAFE34C7CDE6C1270E17F773025A61E511酷有拿货网6F700D415F0D3E199868

对于同一个密码学哈希函数来讲,相同的输入一定会得到相同的输出,不一样的输入一定会得到不一样的输出。BTC区块链就是借助哈希函数为区块生成签名的,将区块中的数据作为输入,得到的输出就是区块的签名。大家再来看看只含有一笔买卖( Thomas 向 David 发送 100 比特币 )的区块 1 示意图。

假设区块 1 中的 数据串 如下所示:

Block 1 Thomas -100 David +100

将这个数据串输入哈希函数,得到的输出(签名)如下所示:

BAB5924FC47BB酷有拿货网7F4615230DDBC5675A81AB29E2E0FF85D0C0AD1C1ACA05BFF

这个签名会被添加进区块 2 的中。再假设目前 David 向 Jimi 转了 100 比特币 ,这笔买卖被打包进了区块 2 。那样如下图所示:

区块 2 的数据串如下所示:

Block 2 David -100 Jimi +100 BAB5924FC47BB酷有拿货网7F4615230DDBC5675A81AB29E2E0FF85D0C0AD1C1ACA05BFF

将这个数据串输入哈希函数,得到的输出(签名)如下所示:

25D8BE2650D7BC095D3712B14136608E096F060E32CEC7322D22E82E酷有拿货网26A3E5

这就是区块 2 的签名。每个区块都会通过这个密码学哈希函数生成一个数字签名。哈希函数多种多样,BTC区块链用的是 SHA-256 哈希算法。

但,(仅有上述手段显然还不够)假如有人想篡改区块中的数据,TA 可以在篡改之后生成新的签名,塞下一个区块中,然后逐个逐个区块生成新的签名,这部分改动后的区块还是形成了一条链,他人就没法分辨出数据已经被更改过了。怎么样预防这种情形呢?

答案是只有符合特定需要的哈希值(签名)才会被区块链同意。这就是第四阶中介绍的挖矿。

第四阶——啥是合格的签名?由哪个来签署区块?

并不是所有些签名都符合需要。区块链协议会预先确定一些需要,譬如,在BTC区块链上,只有以连续的零开头的数字签名相对应的区块才能上链。比如,只有在数字签名以不少于 连续 10 个零 开头的状况下,对应的区块才能上链。

然而,由第三小节可知,每一个数据串对应的哈希值都是 唯一 的。假如一个区块的签名(哈希值)开头少于 10 个零呢?为了获得符合条件的区块签名,需要反复改变输入的数据串,直到能生成以连续 10 个零开头的签名为止。但因为买卖数据和元数据(区块编号、时间戳等等)需要维持原样(不然意义就改变了),每一个区块里面还另外添加了一段特定长度的、可以改动的数据。想把区块添加到链上时,大家可以不断改变这段数据,直到找到一个合格的签名,然后确定下这段数据的具体值。这段数据就是区块的 nonce 。nonce 不是预先确定的数据,而是应实质需要而找出的一串完全随机的数字(注:图中所示的其他数据可以由任意字符组成,nonce 只能由数字组成)。

综上所述,区块包含:1)买卖数据;2)上一个区块的签名;3)nonce 。这种通过反复更改 nonce、对区块数据进行哈希运算、探寻合格签名的过程就叫做 挖矿 ,也就是 矿工 所做的事。矿工投入很多电力,转化成算力,不断代入 nonce 进行哈希运算,直到找到合格的签名(输出)为止。矿工手中学会的算力越多,哈希运算的速度就越快,抢先找到合格签名的可能性就越高。这是一种 反复试错 的过程,如下图所示:

区块链互联网上的任何用户都可以通过下载并启动 挖矿软件 来参与挖矿,事实上,这就是用他们的硬件计算能力来计算区块的 nonce 。以BTC区块链上的 Block #521,477 为例:

可以看出,这个区块的哈希值(签名)和上一个区块的哈希值都是以相同数目的零开头的。找到如此一个哈希值并不是易事,需要付出很多算力和时间,或者 运气爆棚 。没错,有时运气爆棚的矿工在几分钟之内就能算出合格的签名,花的算力也极少。Block #523034 就是一个极其罕见的例子。一个算力极少的小矿工非常快就找到了合格的签名,而其他矿工的算力加起来是他的 7 万亿倍。相比之下,取得 Powerball 彩票头奖的概率是 2.92 亿分之一,而这位幸运儿挖到矿的概率是中头奖的 1/24000 。

不要小看这部分零。这一小节的重点是,找到一个合格的签名非常 难。

第五阶——区块链的不可变性是怎么样是达成的?

正如第三阶中所述,更改某个区块会致使它的签名改变,与后续区块记录的对不上,从而与后面的区块断开链接。要想让互联网中的其他参与者同意这个被更改过的区块,就要把它跟后面的区块重新链接起来。也就是说,一个区块的签名变了,跟在它后面的所有区块的签名都要改变,才能让其他人感觉这是一条前后一致的链。

你想起啥事没?

如第四节所述,签名需要符合需要!虽然更改所有区块的签名看上去可行,但要花费不少本钱和时间,因此被觉得是不可能的,缘由如下:

假设有一个矿工 恶意 篡改了某个区块内的买卖,然后依据哈希运算为这个区块连同跟在它后面的所有区块生成了新的签名,以此让互联网中的其他参与者都同意被篡改过的买卖。问题在于,互联网中的其他矿工也在原来的链上不断为新的区块计算签名。伴随新的区块不断上链,作恶的矿工也要重新计算这部分区块的签名。他需要保证所有区块都链接在一块,包括不断被添加到链上的新区块。除非这个矿工拥有些算力超越全网别的人的总算力,不然他永远赶超不了其他矿工。

(校对注:这一段的实质意思是,只须矿工都在自己看到的最长区块链上挖矿,所有算力就会随时间自然汇聚到一条主链上,而攻击者只有制造出一条比目前主链更长的链,才能成功改变大伙一同认同的买卖记录。这种一直以最长链为主链(有效链)的原则,就是所谓的 “最长链规则”,是 Nakamoto Concensus(中本聪共识机制)的一部分。另,并非所有区块链都使用了中本聪共识。)

现在有数百万用户在BTC区块链上挖矿,由此可以推定某个恶意参与者或实体的算力是不可能超越全网剩余算力的。这就意味着互联网中的其他参与者不可能同意任何对区块链的修改,从而达成了区块链的不可变性。一旦数据被添加到区块链上,就没办法再修改了。

只有一种例外,就是恶意参与者的算力真的超越全网别的人的算力总和。从理论上来讲,这样的情况下是大概篡改区块链的(即改变大伙一同认同的历史记录)。这就叫做 51% 攻击(我写了另一篇文章来讲解这种情形),过去也有不少区块链遭受过这种攻击。

(校对注:现在为止,遭受过 51% 攻击的著名区块链有 bitGold、Verge、以太币ereum Classic。)

事实上,对BTC区块链发动 51% 攻击所能获得的收益远抵不上高昂的攻击本钱。要想获得足够多的算力,除去要负担硬件、冷却设施和存储空间方面的本钱,还要承担被千夫所指的风险,更要紧的是,会对被攻击区块链的生态系统导致很大的损害,攻击所得的收益也会大幅贬值。51% 攻击事实上就是以一己之力对抗区块链上的其他用户。这也就是为什么参与挖矿的用户人数越多,整条链的安全性就越高。

恭喜你已经又进了一阶!目前,你应该已经理解(大型)区块链被觉得具备不可更改性是什么原因了吧。不过目前又出现一个非常重要的问题:怎么样预防矿工将伪造的买卖数据添加到区块链上?从技术上来讲是做不到的。关于区块链买卖的详细讲解可参见这篇文章。

(校对注:只有私钥掌控者才能花费相应地址中的资金,而矿工并不知晓你的私钥,他人只能通过你公开的公钥来验证某笔买卖是否你发起的。所以伪造买卖并不可行)

第六阶——怎么样治理区块链?由哪个决定规则?

……区块链协议自动以最长链上的买卖记录为准,将这条链视为代表绝大部分参与者的链。塑造最长链需要消耗全网绝大多数算力。被篡改过的区块就与最长链断开了链接,因此会被全网绝大部分节点自动拒绝。

在BTC区块链上, 所有买卖历史和钱包余额都是公开可见的(blockchain.info)。其他人都可以查询任一钱包的余额状况,或是始自(2009 年 1 月 3 日的)第一笔买卖的所有买卖记录。虽然其他人都能查询钱包余额,但这部分钱包的所有者大多都是不为人知的。比如,一个钱包里存有 6.9 万个BTC,至本文截稿之时价值约 5 亿USD。这个钱包在 2021 年 4 月用过一次,之后就再也没过买卖。

(校对注:这一部分其实并没回答 “由哪个决定规则” 的问题,只大概说明了 “依据现有规则,这种技术是可以达成的”。公链治理是一个复杂的问题,也超出了这篇文章需要说明的范围了。)

第七阶——这部分对密码学货币有什么意义?

密码学货币从本质上来讲都是BTC的变体。绝大部分数字货币都是根据我们的区块链协议搭建的,遵循不同于BTC的规则。BTC应当被归类为一种货币,也就是说它明确拥有货币功能。XMR币也是一种具备相同功能的数字货币,不过它的区块链协议还增加了一些规则来增强隐私性(提升买卖溯源的困难程度)。

不过,用区块链发行的资产可以被赋予非常多种不一样的作用与功效,这点由发行方决定,这样发行的资产通常被叫做“代币”。这部分代币可以赋予其所有人某种权利,比如博彩执照、社交媒体途径、 水电等等。所有这部分资产买卖都记录在不一样的区块链上,并且可以通过Binance之类的交易平台进行线上买卖。

代币其实是一种新型网络货币,可能会干扰到一部分行业,其中一个典型的例子就是股票市场。在将来,公司股份之类的产权大概会以代币的形式存储到区块链上。区块链不只限于以代币的形式代表实物价值,也可以安全地记录病历、身份、历史记录、纳税记录等数据。这就是区块链技术的伟大之处,还不提区块链的另一个要紧特质:去中心化。

本文标签: