运用datetime和hashlib模拟实现区块链
区块函数
包含区块高度标识:blockNo
交易数据:data
nonce值
preious_hash:上一个区块哈希
timestamp:当前时间
链函数
分别包括三个方法,添加块的方法、挖矿功能、以及打包交易
添加块的方法:
挖矿功能(采用的是工作量证明共识机制)
打包交易:模拟简单的打包交易的功能,哈希加密了最后的返回值
最后运行部分设置了20个区块上链
运行结果:
全部代码:
import datetime
import hashlib
import random
class Block:
blockNo = 0
data = None
next = None
hash = None
nonce = 0
previous_hash = 0x0
timestamp = datetime.datetime.now()
def __init__(self, data):
self.data = data
# 添加哈希函数,计算区块的哈希值--将nonce、data、前一个 hash、timestamp和块号放入一个字符串并通过 SHA-256 函数运行
def hash(self):
h = hashlib.sha256()
h.update(
str(self.nonce).encode('utf-8') +
str(self.data).encode('utf-8') +
str(self.previous_hash).encode('utf-8')