#!/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")

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐