学习区块链如何工作的最好方法就是和它们一起玩。但是这通常需要大量的编码,不过,在这里你不需要做这些,你只需要通过Google工作表来学习。
首先,你需要单击
File > Create a Copy
,然后才能使用它。
哈希(Hashing)
首先也是最重要的是要理解哈希。如果区块链包含砖块,那么哈希就是砂浆:将所有东西粘在一起的神奇酱料。
哈希是识别数据的行为。更具体地说,这是一种将任何数据映射到唯一的随机数字串的方法。
认识到这一点:
e2762516d0decb18525bb635d3d19abf
你可能不会。这是“野餐少了几个三明治”的杂烩。
现在,我们在
Google工作表
格中试试。更改单个字符将产生一个完全任意的新哈希:
这个属性使得哈希在很多地方都很有用。如何检查电子表格是否被同事修改过?简单,哈希并比较历史哈希和当前哈希。
“不要相信,验证。”——比特币谚语
有很多种哈希函数,在本例中,我们使用的是MD5哈希函数。让我们尝试在Google工作表中哈希更多的输入:
在Google工作表中哈希一些输入数据
为什么哈希表如此特殊?
如果有了鸡块,就很难再造鸡了。加密哈希之所以如此命名,是因为它们难以(实际上不可能)逆转:无法逆转。
e2762516d0decb18525bb635d3d19abfto A few sandwiches short of a picnic.
要点1:哈希是不可逆转的
任何使用MD5算法和哈希一些三明治的人,都会得到相同的输出
e2762516d0decb18525bb635d3d19abf
要点2:哈希函数具有确定性
我们很快就会看到采矿是如何依赖于找到特殊的哈希值,从而创造出比特币的。
区块是什么样子的?
区块链是一种交易分类账。这些事务被分组成块,并随着时间的推移逐步添加到链中。下面是块的外观,给出或获取几个字段:
区块链中的一块
我用公式对块进行了哈希
=MD5(CONCATENATE(A1:C13))
花点时间研究一下这些领域,想想为什么它们是必要的。Junk字段和Miner交易的存在可能会让你感到困惑,但是它们非常特殊,我们待会讨论它们。
请注意,即使只更改一个便士的交易,也会导致哈希完全改变。
更改块中的任何内容都会导致哈希值更改,从而使块无效!
哈希为块欺诈提供了保护——如果恶意参与者必须修改块中的任何字段,整个网络都会知道,因为哈希会发生变化。
比特币是一个点对点(p2p)网络,任何运行比特币软件的人的计算机上都有最新版本的该分类账。比特币只是规则的集合。只要遵守规则,任何人都可以编写自己的比特币软件并参与网络。
当人们谈论比特币软件时,他们可能指的是这些规则的参考实现——代码托管在:
https://github.com/bitcoin/bitcoin
。
采矿
如果仔细研究有效块,您会发现到哈希的一些奇怪之处:它以6个零开始!这很奇怪,因为我们学到的第一件事就是哈希是随机的。那么以6个0开始哈希的概率是多少?大约在2²⁴= 16777216或极不可能。
这是判断块是否有效的规则
,如果它们以一定数量的零开始(在本例中我选择了6)。
要深入理解这个概念,请尝试从单个0开始获取块的哈希,你平均要尝试16次。
矿工的工作
矿工是网络上的有兴趣通过创建新的块来创建新的比特币的人。
这就是Junk字段的作用。矿工设置一个随机的Junk字段,哈希块并检查它是否以零开始。如果没有,则插入另一个Junk字段,然后再试一次,直到成功为止。
听说过采矿硬件吗?
这就是采矿硬件的作用。因为它是专门化的,所以它可以比普通计算机更快地执行哈希。
作为对这项工作的奖励,矿工将获得一些比特币作为区块中的第一笔交易。这种奖励是新比特币产生的方式,它会随着时间的推移而减少。
每21万个街区奖励减半。在撰写本文时,它是12.5个比特币,但到2020年将减半至6.25个比特币,并最终在2140年变为零。这就是比特币的供应的控制方式,只有2100万比特币。这是比特币维基描述的供应量。
哈希开头的零的数目称为难度,由于计算机的速度每年都在加快,所以它经常发生变化。比特币的目标是大约每10分钟创建一个新区块,在每2016个区块之后,难度将被重新评估。
工作证明
上面描述的算法,设置一个Junk字段并确定块哈希是否以0开头,被称为工作证明:
Junk字段是矿工完成工作的证明!
给定一个块,对于网络上的任何人来说,计算哈希并验证它以零开始都是很简单的。这里的天才在于,工作证明是一种非常难计算但很容易验证的东西。
一旦矿工找到一个有效的Junk字段,它们就会广播该块,从而使每个人都检查该块是否以所需的零开始。如果每个人都将区块添加到他们的区块链中。我们说,网络已经就新区块达成共识。
在比特币中,Junk字段被称为“nonce”(胡说),当矿工们每一次猜测都没有成功时,他们就会对交易进行排序,并向区块中添加额外的数据,以便继续猜测。
区块链的不变性
正如我们所了解的,比特币只是一个分布式账本,通过这个过程,网络上的人通过验证哈希值来判断一个新区块是否有效。