我的实例未在while循环中更新

时间:2019-04-24 19:13:15

标签: python

我想通过将随机数更改为1来重新计算哈希,但是self.hash的实例未更改。

我经验不足,也不知道如何解决这类问题

import hashlib

class Block:

  def __init__(self, timestamp, transaction, previousHash = ''):
    self.timestamp = timestamp
    self.transaction = transaction
    self.nonce = 0
    self.previousHash = previousHash
    self.hash = self.calculateHash()

  def mineBlock(self):
    checkIfTrue = str(self.hash).startswith('0')
    while checkIfTrue != True:
        self.nonce += 1
        self.hash = self.calculateHash()
        print(self.hash)

    print("block mined")

  def calculateHash(self):
    h = hashlib.sha256((str(self.timestamp) + str(self.transaction) + str(self.previousHash) + str(self.nonce)).encode('utf-8'))
    return h.hexdigest()

2 个答案:

答案 0 :(得分:0)

我尝试了您的代码,对我来说很好,self.hash更改了。但是程序陷入了无限循环,因为条件“ while checkIfTrue!= True:”在循环内不会立即改变。更新self.hash之后,您需要退出循环并再次执行“ checkIfTrue = str(self.hash).startswith('0')”。

答案 1 :(得分:0)

您不是在循环内更新checkIfTrue

真正不需要此变量,只需将哈希检查放入while语句中即可。

while not str(self.hash).startswith('0'):
    self.nonce += 1
    self.hash = self.calculateHash()
    print(self.hash)