【超级详细版】第一个区块链Demo,小白可以轻松上手!Python代码实现
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time: 2019/6/18 10:10# @Author: Yann# @File: snakeCoin2.py# @Software: PyCharm# 既然要用到哈希算法,首先导入哈希包import hashlib# 创建区块类class Block:...
·
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/6/18 10:10
# @Author : Yann
# @File : snakeCoin2.py
# @Software: PyCharm
# 既然要用到哈希算法,首先导入哈希包
import hashlib
# 创建区块类
class Block:
# 做构造函数,包含索引号、时间戳、数据、上一区块哈希值
def __init__(self, index, timestamp, data, previous_hash):
self.previous_hash = previous_hash
self.data = data
self.timestamp = timestamp
self.index = index
# 打上本区块的哈希值
self.hash = self.hash_block()
# 求区块的哈希值函数
def hash_block(self):
# 导入sha256这个哈希算法
sha256 = hashlib.sha256()
# 计算哈希值
sha256.update((
str(self.index) +
str(self.timestamp) +
str(self.data) +
# 这一步是为了避免编码问题
str(self.previous_hash)).encode("utf-8")
)
# 返回哈希值
return sha256.hexdigest()
# 任何区块链,总有一个区块是创世区块,制作它
# 导入时间包
import datetime
def create_genesis_block():
return Block(0, datetime.datetime.now(), "宝宝是创世区块", "0")
# 制作下一个区块的函数,所带的形参是上一个区块
def next_block(last_block):
next_block_index = last_block.index + 1
next_block_timestamp = datetime.datetime.now()
next_block_data = "大家好,宝宝是第" + str(next_block_index) + "个区块"
next_block_hash = last_block.hash
# 返回制作好的下一个区块
return Block(next_block_index, next_block_timestamp, next_block_data, next_block_hash)
# 制作区块链,新建一个数组,先填入创世区块
blockChain = [create_genesis_block()]
# 这里为第二个区块标识出上一个区块
previous_block = blockChain[0]
# 创世区块之后,加入说我们要把100个区块放入一个链中,则有
num_of_block = 100
# 在链中增加区块
for i in range(num_of_block):
# 这里标识第二个区块
block_to_add = next_block(previous_block)
# 把第二个区块附加上去,到链中
blockChain.append(block_to_add)
# 将下一个区块(本来标识的第二个区块)改为新的区块,现在标识第三个区块
previous_block = block_to_add
# 打印出来瞧一瞧区块链
# 这里是区块内容基本信息
print("index:" + str(block_to_add.index) +
"timestamp:" + str(block_to_add.timestamp) +
"data:" + str(block_to_add.data) +
"hash:" + str(block_to_add.previous_hash)
)
# 这里是区块的哈希值
print("Hash:" + str(block_to_add.hash) + "\n")
更多推荐
已为社区贡献2条内容
所有评论(0)