社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  区块链

使用电子表格学习区块链

区块链技术学习 • 6 年前 • 563 次点击  

区块链技术学习(微信号: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
 
563 次点击