Py学习  »  区块链

使用电子表格学习区块链

区块链技术学习 • 4 年前 • 429 次点击  

区块链技术学习(微信号:Blockchain1024)翻译

原文链接:https://medium.com/@vanflymen/learn-blockchains-using-spreadsheets-b97ad92b9b4d


学习区块链如何工作的最好方法就是和它们一起玩。但是这通常需要大量的编码,不过,在这里你不需要做这些,你只需要通过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”(胡说),当矿工们每一次猜测都没有成功时,他们就会对交易进行排序,并向区块中添加额外的数据,以便继续猜测。


区块链的不变性


正如我们所了解的,比特币只是一个分布式账本,通过这个过程,网络上的人通过验证哈希值来判断一个新区块是否有效。


当一个块被哈希时,它在前一个哈希字段中包含前一个块的哈希。这就是它被称为“链条”的原因。这可能看起来很肤浅,但正是它赋予了区块链不可变性,任何地方的一个更改都会使所有后续块的哈希无效。


任何地方的一个更改都会使后续的块失效


这就是比特币如此具有弹性的原因。如果一个恶意的参与者欺诈地自己创建了一个交易,他必须重新计算所有后续的哈希值(非常困难),并说服网络接受这些新块。


在任何给定的时间,网络上都有许多有效的链。最终,客户达成一致意见,所有人共享同一个。比特币的规则是,客户接受工作量最大的链(想想那些零),这通常是他们能看到的最长的链。这就是为什么建议在您认为您的事务“隐藏”在足够多的块下,以调用它“提交”之前等待几个块通过的原因。


想知道真正的比特币区块链是什么样子的吗?看看:https://btc.com/


我没有解释的:


我没有解释的大部分都与交易有关。它们的创建和传输需要对密码学的理解。我试着用粗线条来画,希望你能用自己的研究来填补缺失的部分:


交易(Transactions)——它们由创建它们的人进行数字签名。理解这个过程需要相当多的密码学知识。


wallets—跟踪发送到您的公钥(考虑地址)的交易的软件。大多数钱包本身就是比特币节点。



●编号204,输入编号直达本文

●输入m获取文章目录

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/34221
 
429 次点击