通过Excel表格学习和理解区块链

学习区块链最好的方法就是使用它,但是通常这需要一定的编程和代码基础。为了能让普通人更好地理解区块链,国外工程师Daniel van Flymen写了篇文章通过谷歌表格来理解区块链工作原理。

先来学习几个概念:

哈希

是把任意长度的输入通过散列算法变换成固定长度的输出,简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的密码学函数,输入不同,输出值就完全不同。

打个比喻,如果区块链中包含很多砖块的话,哈希就是胶水,可以将这些砖块粘接起来。

另外,对于密码学哈希函数,输入不同,哪怕只差一点点,输出值也完全不同。

例如:输入值只有一个字母的大小写不同,哈希输出值完全不同:

因此,哈希函数可以用来验证某个数据是否被修改。只需要将数据之前的哈希值和现在的哈希值进行比较即可。

用谷歌表格中自带的哈希函数MD5为例,计算几个不同输入值的哈希值:

哈希函数的几个特征:

  1. 不可逆算:简单理解就是,给定某个输入值的哈希值,无法根据该哈希值计算或推导出输入值。
  2. 确定性:只要输入值相同,输出就相同。

区块链

区块链就是一个交易账本。这些交易合并到一起放入区块中,然后这些包含交易的区块一个个按照时间顺序添加形成一条链,称之为区块链。

区块举例:

一个区块通常包含的信息如下:各种交易数据、之前区块的哈希值、时间戳、Junk随机值(后面再介绍)等等。

区块链中的某一个区块

最后在第14行使用公式  =MD5(CONCATENATE(A1:C13))  计算该区块的哈希值。

注意,仅仅改变1分钱的交易金额,就会使得该区块的哈希值完全不同:

因此哈希值可以起到区块欺诈保护的作用,任何试图修改某个区块中任意信息的行为,整个网络都将知道,因为哈希值会变化。

挖矿

以比特币挖矿为例。如果我们仔细观察有效区块的哈希,就会发现它是以6个0开头的一串数字!这是非常奇怪的,因为我们知道哈希值是随机的。因此产生6个0开头的哈希值的概率是多少呢?大概是2的24次方分之一,即1/16777216,几乎不可能。

这也是确定区块是否有效的规则 – 即是否以一定数量的0开头(本例中以6个0为例)。

这个难度有多大呢,我们在谷歌sheet中试图产生1个0开头的哈希值,大概尝试了16次才成功。

矿工的任务

矿工是比特币网络中创建新区块,并获得新挖矿比特币奖励的人。这也是上图中Junk字段存在的原因。矿工填入一个随机的Junk值,然后计算区块哈希值,看是否以0开头。如果不是,就换一个Junk值,继续尝试,直到成功为止。

这也是专业矿机出现的原因,因为它比普通计算机拥有更高的计算能力。

矿工进行大量计算的同时,成功计算出哈希值的矿工将获得网络中新的比特币奖励,上图中第一笔12.50 B的交易(第四行)就是矿工获得的奖励。这也是比特币产生的原理,且该奖励会随着时间而降低。

区块中新的比特币奖励每隔210000个区块就会减少一半。目前区块奖励为12.5个比特币,到2020年5月份,降低至6.25个比特币,最终到2140年,该奖励将降低至0。这也是比特币总量控制在2100万左右的原因。

哈希值开头的数字0的个数称之为难度,它会经常调整变化,因为每年计算机的能力都会越来越快。比特币网络大概每10分钟创建一个新的区块,每隔2016个区块该难度就会重新评估调整一次。

工作量证明PoW

上述不断尝试junk随机值来确定区块哈希值是否以0开头的计算过程称之为工作量证明:junk值就证明矿工在工作。

给定一个区块,对于网络中的任何人来说,计算哈希值并验证它是否以零开始都是很简单的。但是这个设计的天才之处在于,工作量证明是一种非常难计算(junk随机值很难找到)但很容易验证的设计。

一旦某个矿工找到了有效的junk值,它就开始向网络广播这个区块,然后所有人都会确认这个区块的哈希值是以要求数量的0开头的。如果所有人都将区块添加到他们的区块链中,我们就可以说网络现在对这个新创建的区块达成了共识。

在比特币中,这个junk值称为随机数,当矿工每一次猜测随机数失败后,就重新排列这些交易,并向区块添加额外的数据继续再次猜测。

区块链的不可变更性

比特币就是一个账本,其中网络中的人根据某个程序通过验证哈希值来决定新的区块是否有效。

当计算一个区块的哈希值时,它包含了之前区块的哈希值。这样就形成了一条链,同时也赋予了区块链不可更改性,因为任何的改动都会使得后续的哈希值产生变化。

这也让比特币网络非常可靠。如果网络中的某人想要发起恶意欺诈交易,他需要重新计算接下来的所有哈希值(这是非常困难的),并且让整个网络接受他所计算的这些新区块。

在给定的时间,网络中会有多条有效的链。最终,客户端会达成一致,选择某一条链。比特币的规则是最终选择拥有最多计算量(哈希值前面0的数量)那条链,通常这也是最长的区块链。因此在确认某个交易是否包含在区块中时,建议等待几个区块的原因。

也可以通过比特币浏览器来查看真实的比特币区块链的样子。

本文并没有涉及钱包和交易的原理。