如何实现一个简单的区块链?区块链伪技术介绍(二)

如何实现一个简单的区块链?区块链伪技术介绍(二)

上一篇文章讲了比特币里的矿工在干什么(比特币里的矿工干什么?区块链技术介绍(一)),今天我们用一个简单的例子,给大家一个直观的感受,一起来看看矿工所谓的“工作”,除了消耗电力,他们实际上在做什么

我们先来看一个简化的区块模型

区块链的四大基本特征是:不可篡改、不可复制的唯一性、智能合约、去中心化。不可篡改、不可复制的唯一性与区块链结构中的散列(Hash)算法密切相关。

我们知道哈希算法的特点是内容稍有变化,得到的哈希值就会有巨大的差异。因此,在上图中的链式结构中,如果我们改变区块1中的数据,由于它的哈希值是从数据中得到的,那么哈希值必然发生变化,而这个区块的哈希值如果哈希值发生变化,则它后面的块将不得不改变。而如果链条特别长,修改的成本会非常高,几乎不可能

然后我们写一段Python代码来实现上面的block。

首先我们写一个块类,代码如下:

类Block:

块号=0

数据=无

接下来=无

散列=无

随机数=0

previous_hash=0x0

时间戳=日期时间。约会时间。现在()

def __init__(自我,数据):

self.data=数据

def hash(self):

h=hashlib.sha256()

H。更新(

str(self.nonce).encode(\'utf-8\') +

str(self.data).encode(\'utf-8\') +

海峡(自我。previous_hash)。编码(\'utf-8\')+

str(self.timestamp).encode(\'utf-8\') +

str(self.blockNo)。编码(\'utf-8\')

)

返回h.hexdigest()

def __str__(self):

返回\'Block Hash: \' + str(self.hash()) + \'\\nBlockNo: \' + str(self.blockNo) + \'\\nBlock Data: \' + str(

self.data) + \'\\nHashes: \' + str(self.nonce) + \'\\n------------\'

我们可以看到哈希值是由数据生成的,前一个区块的哈希值,随机数,当前时间和区块号。如果这些数据中的任何一个发生变化,哈希值都会发生变化。这门课最重要的就是哈希生成算法,其他的都很简单。

接下来我们写一个区块链链表类,代码如下:

类Blockchain:

差异=20

最大随机数=2**32

目标=2 ** (256 - 差异)

块=块(\'创世纪\')

虚拟=头=块

def 添加(自我,块):

堵塞。 previous_hash=自我。堵塞。散列()

block.blockNo=self.block.blockNo + 1

self.block.next=阻止

self.block=self.block.next

定义我的(自我,块):

对于范围内的n(self.maxNonce):

打印(n)

# if (random.randint(1, 10) 2) :

自己。添加(块)

# 打印(块)

休息

如果int(block.hash(), 16)=self.target:

自己。添加(块)

打印(块)

休息

else:

block.nonce +=1

要有两个函数,一个是添加新区块到链上的函数add,另一个是挖矿函数mine。这个功能就是矿工主要在做的所谓“工作”。它决定了新区块是如何产生的。

我们看到在一个循环中,实际挖矿的时候可能是while(true)。如果发现一个区块满足某个限制条件,在上面的代码中,执行的代码是int(block.hash(), 16)=self.target,这个比较难实现。注释掉的代码是random.randint(1, 10) 2。这个条件比较容易实现。在比特币等空气币中,条件比这个更难,难度可调,保证十分钟左右生成一个新区块。

通过上面的代码,我们实现了一个简单的区块链,也让大家看到了矿工所谓的“工作”,就是想办法实现一个难的或者容易的算法条件。

最后,我们写一段代码来执行这个简单的块,代码如下:

区块链=区块链()

对于范围(5): 中的n

blockchain.mine(区块(\'区块\' + str(n + 1)))

而blockchain.head !=None:

打印(区块链。头)

blockchain.head=blockchain.head.next

结果如下:

如果您喜欢本文,欢迎关注生活在信息时代:)

版权声明:区块链工程 发表于 2023-04-27 8:45:16。
转载请注明:如何实现一个简单的区块链?区块链伪技术介绍(二) | 零零洞洞

暂无评论

暂无评论...