当前位置: 首页 > 科技观察

初学者用Python搭建区块链的最好方法

时间:2023-03-19 23:53:47 科技观察

是学习通过模仿别人来迭代地重新优化。如果您是第一次编写区块链代码,可以和我一起学习。选择使用哪种语言和解释器来构建区块链项目的过程是迄今为止最困难的部分。选择Python是因为它对初学者来说很容易,同时对高级编码也很有效。1.环境配置我下载了Python3.9和PyCharm。PyCharm的界面简洁,适合各个层次。我尝试编写简单的命令,直到我对PyCharm感到满意为止。现在,是时候构建一个区块链项目了。2.搭建实战如果你是第一次打码,强烈建议你跟着视频或文章教程一起学习。它帮助我控制我正在写的内容和原因。首先,我导入了hashlib和datetime,让我们分别计算哈希和时间戳块。导入是将代码从一个模块传输到另一个模块的修改。我的区块链无法在没有日期时间导入的情况下处理时间戳,或者在没有hashlib导入的情况下创建哈希。Blockchain包含两个类:Block类和Blockchain类。使用Block类,添加到区块链的每个块都具有相同的模型。区块类区块必须包含以下属性:区块编号,设置为0因为它是链中的第一个区块,称为创世区块数据,设置为None接下来,设置为None。这充当指向下一个块的指针,它延续了链接的趋势。哈希,设置为无。块的哈希值至关重要,因为它是使区块链如此安全和不可变的密码学的一部分。随机数,设置为0。nonce是一个随机整数,它会反复迭代,直到找到“GoldenNonce”。在工作量证明中,矿工竞相首先找到正确的哈希值。随机数会多次更改,直到它有助于生成正确的哈希值。这样就完成了对区块的验证,可以将区块加入链中。前一个哈希值,设置为0x0。存储前一个块的哈希值使区块链不可变,因为更改一个块的哈希值会影响所有后续块。一个时间或时间戳,描述交易发生的时间,用于同步网络中的所有块。块类,它定义了将每个块添加到链中的标准当我们创建一个块时,我们存储它的数据。构造函数init初始化类的属性。self和data表示将包含在对象(块)中的内容。散列下一步是添加一个散列函数,它计算一个块的散列值。在nonce数据中,前一个哈希的时间戳和区块号被放入一个字符串中,并通过SHA-256函数运行。SHA-256是区块链中常用的加密哈希算法。“h”是一个使用SHA-256的变量。因为我在代码开头导入了hashlib,所以SHA-256是可用的。哈希函数中所有组件的总和将创建块的哈希,当创建新块时将其添加到哈希字段。图片的最后一行告诉您将在输出或打印中显示什么。在这种情况下,输出将显示块的哈希值和块号。区块链类下一步是创建第二类代码:区块链类。区块链类包括:难度设置为20。通过增加难度,我们有效地缩小了目标范围。减小目标范围将使挖掘块变得更加困难,这在处理具有许多节点的网络以找到可接受的哈希值时很有用。最大随机数,设置为2的32次方,这是一个32位数字中可以存储的最大数字。随机数必须小于目标数才能被接受。目标数,设2的256次方减去难度。在本例中,难度为20。区块链中的第一个块是创世块,如第34行所示。现在,我完全卡在了下一行代码中:dummy=head=block。任何链表的开头称为头。由于链表的头部是创世块,我们将其表示为head=block。^hH但是,仅此一点还不够具体,-在Python中,对象是通过引用传递的。然后,head和block将指向同一事物。必须在head变量之前写入一个随机变量(在本例中为虚拟变量),以告诉计算机head与block不指向同一个对象。添加区块我们将继续认为区块链是将区块添加到链中的添加函数的链表。有了哈希,区块链就变成了链表的形状。哈希将块绑定在一起,使它们不可变。先前的哈希值(第39行)现在必须设置为等于列表顶部的块。然后,将新块设置为等于当前块加一,如代码的第三行所示。最后两行有助于形成区块链的形状。如“self.block.next=block”所示,每个block都有指向下一个block的指针,所以next指针设置为block。这会将块添加到列表的末尾。下一行“self.block=self.block.next”将指针向前移动以继续将块添加到列表末尾的趋势。MiningMining接下来,我添加了一个挖矿功能。我使用了工作量证明共识机制,例如比特币。为了向链中添加一个块,节点会尝试不同的随机数,直到它们找到一个小于目标范围的哈希值。第46行开始循环。首先,设置一些猜测标准(范围),从0到最大随机数。它在第47行继续检查当前块的哈希值是否小于或等于目标。哈希必须在Python中转换为整数,因此必须转换为int。如果哈希值低于目标值,则该过程继续并且可以添加块(第48行)。接下来,打印块,最后,我们暂停挖矿。但是,如果hash不小于目标数,则将nonce加1,然后重试。我们以第56行开始的循环结束代码。它计算10个随机块。您可以尝试数字,但它总是会停在您插入的整数处。第60行提示打印10个块,因此您可以看到它的实际效果。仅用61行,您就创建了一个区块链,它可以生成块、计算哈希并将它们放在一起。