从底层开始学写BlockChain__basic

区块的大小规定不能超过1M,它的结构分为两个部分,区块头区块体

区块头共有80个字节,共分为6个部分:

  • Version:4 Bytes,记录区块头的版本号,用于追踪软件/协议的更新
  • PreBlockHash:32 Bytes,记录了上一个区块的Hash address
  • MerkleRoot:32 Bytes,记录了该区块交易的merkle树根的哈希值
  • Timestamp:4 Bytes,记录了该区块的创建时间戳
  • DifficultyTarget:4 Bytes,记录了该区块POW的难度目标
  • Nonce:4 Bytes,记录了用于证明POW的计算参数

区块体,共分为3个部分:

  • NumTransactionsBytes:1 Byte,记录了交易数量占用的字节数
  • NumTransactions:0-8 Bytes,记录了区块内的交易数量
  • Transactions: X bytes,记录了区块内存储的多个交易

PS:区块的哈希是由区块头和Merkle根所共同hash的值,该值存放在下一块区块的头中

## 以下代码一个区块 存放的是一个data数据(正常的区块应该存放多条交易数据)
import hashlib as hasher

class Block:
	def __init__(self, index, version, previous_hash, timestamp, data):
		self.index = index
		self.version = version
		self.previous_hash = previous_hash
		self.timestamp = timestamp
		self.data = data
		self.hash = self.hash_block()

	def hash_block(self):
		sha = hasher.sha256()
		sha.update(str(self.index) + str(self.timestamp)
							 + str(self.data) + str(self.previous_hash))
		return sha.hexdigest()
import hashlib as hasher

class Block:
	def __init__(self, index, version, previous_hash, timestamp, data):
		self.index = index
		self.version = version
		self.previous_hash = previous_hash
		self.timestamp = timestamp
		self.data = data
		self.hash = self.hash_block()

	def hash_block(self):
		sha = hasher.sha256()
		sha.update( (str(self.index)  + str(self.timestamp) + str(self.data) + str(self.previous_hash) ).encode("utf-8") )
		return sha.hexdigest()


import datetime as date
def create_genesis_block():
	# Manually construct a block with
	# index zero and arbitrary previous hash
	return Block(0, "v1.00", "0", date.datetime.now(), "Genesis Block")

def next_block(last_block, version):
	this_index = last_block.index + 1
	this_version = version
	this_hash = last_block.hash
	this_timestamp = date.datetime.now()
	this_data = "Hey! I'm block " + str(this_index)
	return Block(this_index, this_version, this_hash, this_timestamp, this_data)

# Create the blockchain and add the genesis block
blockchain = [create_genesis_block()]
previous_block = blockchain[0]
 
# How many blocks should we add to the chain
# after the genesis block
num_of_blocks_to_add = 20
 
# Add blocks to the chain
for i in range(0, num_of_blocks_to_add):
	block_to_add = next_block(previous_block, "v1.00")
	blockchain.append(block_to_add)
	previous_block = block_to_add
	# Tell everyone about it!
	print("Block #{} has been added to the blockchain!".format(block_to_add.index) )
	print("Hash: {}\n".format(block_to_add.hash) )

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值