主页 > 官网最新版imtoken钱包 > 挖矿的基本原理

挖矿的基本原理

官网最新版imtoken钱包 2023-07-03 05:21:00

我刚刚研究了区块链的原理。今天就用Python来介绍一下矿工是如何挖矿的。

首先,我们来谈谈为什么需要矿工来挖矿。区块链使每笔交易都可靠,即每张账单都保存在网络的每个节点上。这也让每个人都知道资金流向,让交易更加透明,并且不需要监管机构记录每一笔交易信息。

但是,这个账单是需要生成的,也就是需要矿工去挖矿。首先,用户拿币进行交易,然后生成订单。矿工获取订单信息后比特币交易犯法,需要生成合法的计费信息。生成成功后,矿工将交易账单分摊给各个节点,即可完成交易。每张票据的信息包括:票据编号、交易时间、交易内容、上一张票据的Hash、一个号码。票据号是区块链的区块号比特币交易犯法,交易时间,交易内容,上一次票据产生的hash不能更改,所以矿工可以更改最后一个数字(这里的信息不完整,更多信息请百度或谷歌)。

比特币交易犯法

忘了介绍,矿工如何产生合法票据?所谓合法票据是根据每张票据上的信息产生的哈希串来确定的,而确定哈希串的标准是根据矿工的挖矿时间来确定的。为了防止矿工这么快挖矿,所以设置了不同的难度。比如Hash256生成的十六进制一共有64位。为了让矿工计算哈希值的速度变慢,设置了一个规则。生成的hash字符串的前10位必须为0(当然前15位也可以是0),账单才会生效。因此矿工需要不断的改变数字来穷举生成hash字符串根据账单信息生成。

比特币交易犯法

以下代码:

比特币交易犯法

#Hash库
import hashlib as hs 
#时间库
import datetime as date
#区块
class Block():
    #构造方法,传入数据包括索引、时间戳、数据、上一笔账单的Hash串、可更改的数字
    def __init__(self,index,timestamp,data,preHash,number):
        self.index = index
        self.timestamp = timestamp
        self.data = data
        self.number = number
        self.preHash = preHash
        self.hash = self.blockHash()
    #生成Hash串
    def blockHash(self):
        sha = hs.sha256()
        sha.update(str(str(self.index) + str(self.timestamp) + str(self.data) + str(self.preHash) + str(self.number)).encode("utf-8"))
        return sha.hexdigest()
#创建初始区块    
def initBlock():
    rst = Block(0,date.datetime.now(),"first","0",0)
    return rst
#创建区块链
blockChain = [initBlock()]
preBlock = blockChain[0]
#测试运行所用时间
starttime = date.datetime.now()
#生成10个区块
for i in range(0,10):
    通过修改数字来生成Hash串
    for j in range(0,10000000000):
        #由于我懒,时间戳、数据都使用了上一个区块的数据,实际需要交易时的数据
        nextBlock = Block(preBlock.index+1,preBlock.timestamp,preBlock.data,preBlock.hash,j)
        #这里只测试了前六个字符为0时的数据,成功则加入区块链
        if nextBlock.hash[:6] == "000000":
            blockChain.append(nextBlock)
            preBlock = nextBlock
            break
    print(preBlock.hash)
#测试运行所用时间
endtime = date.datetime.now()
print((endtime-starttime).seconds)

比特币交易犯法

运行结果图:

比特币交易犯法

这里写图片描述

从图中可以看出,仅前面的 833 秒就生成了 10 个 6 位 0 的 Hash 字符串,平均 83.3 秒,所花费的时间呈指数级增长。

所以挖矿小伙伴最好用C/C++编写,挖矿前必须先获取设备和网络采集信息。