区块链研究实验室 | 初学者用Python搭建区块链

最好的学习方法是通过模仿别人,从而学会再优化迭代。如果你是第一次编码区块链,可以跟我一起学习。

迄今为止,选择哪种语言和使用哪种解释器来搭建区块链项目的过程是这一努力中最困难的部分。之所以选择Python,是因为它对初学者来说很简单,并且对于高级编码同时有效。

1.环境配置

我下载了Python 3.9与PyCharm,PyCharm界面简单,适用于所有级别。我尝试编写简单的命令,直到对PyCharm满意为止。现在,可以构建一个区块链项目了。

2.搭建实战

如果你是第一次编码,我强烈建议你跟着视频或文章教程一起学习。它帮助我掌握了自己在写什么以及为什么要写它。

首先,我导入了hashlib和datetime,让我们分别计算哈希和时间戳块。

导入是将代码从一个模块传输到另一个模块的修改。如果没有datetime导入,我的区块链将无法处理时间戳,或者如果没有hashlib导入,则无法创建哈希。

区块链包含两个类:Block类和Blockchain类。使用Block类,添加到区块链的每个块都具有相同的模型。

积木类

该块必须包含以下属性:

块的编号,其设置为0,因为它是链中的第一个块,称为Genesis块数据,设置为无

接下来,设置为无。这充当指向下一个块的指针,该块继续保持链接的趋势。

哈希,设置为无。区块的哈希至关重要,因为它是加密技术的一部分,使区块链变得如此安全和不可变。

随机数,设置为0。随机数是一遍又一遍地迭代直到找到“ Golden Nonce”的随机整数。在工作量证明中,矿工竞相首先找到合适的哈希。随机数变化多次,直到它有助于生成正确的哈希。这样就完成了对块的验证,并且可以将块添加到链中。

前一个哈希,设置为0x0。存储前一个区块的哈希值会使区块链不可变,因为更改一个区块的哈希值会影响所有后续区块。

时间或时间戳记,描述了交易发生并用于同步网络中所有块的时间。

所述块类,其确定标准加入到链中的每个块

当我们创建一个块时,我们存储它的数据。构造函数init初始化类的属性。自身和数据表示将包含在对象(块)中的内容。

散列

下一步是添加哈希函数,该函数计算块的哈希。

在现时的数据,在前面的哈希的时间戳和块编号放入一个字符串,并运行通过SHA-256的功能。SHA-256是通常用于区块链的密码哈希算法。“h”是使用SHA-256的变量。因为我在代码的开头导入了hashlib,所以可以使用SHA-256。散列函数中所有组件的总和将创建块的散列,当创建新块时,该散列将添加到散列字段中。

图片的最后一行告诉你将在输出中显示的内容或打印的内容。在这种情况下,输出将显示块的哈希值和块编号。

区块链类

下一步是创建代码的第二个类:Blockchain类。区块链类包括:

难度设置为20。通过增加难度,我们有效地减小了目标范围。减小目标范围将使挖掘区块变得更加困难,这在处理具有许多节点来查找可接受的哈希的网络时非常有用。

最大随机数,设置为2的32的幂,这是可以存储在32位数字中的最大数字。随机数必须小于要接受的目标数。

目标数,将2设置为256的幂减去难度。在这种情况下,难度为20。

区块链中的第一个块是Genesis块,如第34行所示。现在,我完全陷入了下一行代码:dummy = head = block。任何链接列表的开始都称为head。由于链接列表的开头是Genesis块,因此我们将其记为head = block。^ hH但是,仅此还不够具体, -在Python中,对象是通过引用传递。然后,head和block会指向同一件事。必须在head变量之前写入一个随机变量(在本例中为dummy),以告诉计算机head并不与block指向同一对象。

添加块

我们将继续这样的想法,即区块链是add函数的链表,用于将块添加到链中。

借助哈希,区块链将其作为链表的形状。哈希将块绑定在一起,使其不可变。前一哈希(线39)必须目前在列表的顶部被设置成等于该块。然后,将新块设置为等于当前块加一,如代码第三行所示。

最后两行有助于形成区块链的形状。如“ self.block.next =块”所示,每个块都有指向下一个块的指针,因此下一个指针被设置为块。这会将块添加到列表的末尾。下一行“ self.block = self.block.next”将指针向前移动以继续向列表末尾添加块的趋势。

矿业挖掘

接下来,我添加了一个挖掘功能。我使用了工作量证明共识机制,例如比特币。为了将块添加到链中,节点尝试不同的随机数,直到发现散列小于目标范围。

46行开始循环。首先,设置一些猜测准则(范围),即从0到最大随机数。通过检查当前块的哈希值是否小于或等于目标,它在第47行继续。哈希值必须在Python中转换为整数,因此必须转换为int。如果哈希值低于目标值,则该过程继续,并且可以添加该块(第48行)。接下来,打印块,最后,我们暂停一下开采。但是,如果哈希值不小于目标数,则将1加到随机数上,然后重试。

我们以在第56行开始的循环结束代码。它计算10个随机块。你可以试一下数字,但是它始终会停在你插入的整数上。

第60行提示打印10个块,你就可以看到它的实际效果。仅用61行,你就创建了一个可以生成块,计算散列并将其放在一起的区块链。

作者:链三丰,来源:区块链研究实验室

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
   
验证码:
微信号已复制,请打开微信添加咨询详情!