第一个区块链程序- python

什么是区块链

区块链其实就相当于一个去中介化的数据库,是由一串数据块组成的。它的每一个数据块当中都包含了一次网络交易的信息,而这些都是用于验证其信息的有效性和生成下一个区块的。
在这里插入图片描述

第一个区块为创世区块,从第二个区块开始每个区块都会记录上一个区块的hash值,这样将所有的区块链接在一起形成区块链

定义区块链的结构

我们可以定义一个区块的结构,包括索引,交易时间,交易数据,当前hash和下一个区块的哈希

import hashlib
import datetime

class BlockChain():
    def __init__(self, index, timestamp, data, next_hash):
        '''

        :param index: 索引
        :param timestamp: 交易时间
        :param data: 交易数据
        :param cur_hash: 当前hash
        :param next_hash: 下一个hash
        '''
        self.index = index
        self.timestamp = timestamp
        self.data = data
        self.next_hash = next_hash
        self.cur_hash = self.hash_blockchain()

    def hash_blockchain(self):
        sha = hashlib.sha256()
        sha.update(f"{self.index}{self.timestamp}{self.data}{self.next_hash}".encode('utf8'))
        return sha.hexdigest()
   

创世区块的生成

创世区块是第一个区块,它没有上一个区块,所以我们设置成0

def create_first_block(): #创世区块
    return BlockChain(0, datetime.datetime.now(), "我是中国人", '0')

生成后续区块

def create_amount_block(last_block): # 区块链的其他区块
    this_index = last_block.index + 1  # 索引加1
    this_timestamp = datetime.datetime.now() # 当前时间
    this_data = f"我是中国人,我爱中国!"
    this_hash = last_block.cur_hash
    return BlockChain(this_index, this_timestamp, this_data, this_hash)

生成完成区块链

ddBlockChains = [create_first_block()] # 加入创世区块
header_block = ddBlockChains[0]
print(header_block.index, '-----', header_block.data, '------', header_block.cur_hash, '-----', header_block.next_hash)
# nums = 100
for i in range(10): # 加入10个区块
    blcok_chain_add = create_amount_block(header_block)
    ddBlockChains.append(blcok_chain_add) # 加入区块
    header_block = blcok_chain_add # 循环替换
    print(blcok_chain_add.index, '-----', blcok_chain_add.data, '------', blcok_chain_add.cur_hash, '-----', blcok_chain_add.next_hash)

完成代码

import hashlib
import datetime

class BlockChain():
    def __init__(self, index, timestamp, data, next_hash):
        '''

        :param index: 索引
        :param timestamp: 交易时间
        :param data: 交易数据
        :param cur_hash: 当前hash
        :param next_hash: 下一个hash
        '''
        self.index = index
        self.timestamp = timestamp
        self.data = data
        self.next_hash = next_hash
        self.cur_hash = self.hash_blockchain()


    def hash_blockchain(self):
        sha = hashlib.sha256()
        sha.update(f"{self.index}{self.timestamp}{self.data}{self.next_hash}".encode('utf8'))
        return sha.hexdigest()

def create_first_block(): #创世区块
    return BlockChain(0, datetime.datetime.now(), "我是中国人", '0')

def create_amount_block(last_block): # 区块链的其他区块
    this_index = last_block.index + 1  # 索引加1
    this_timestamp = datetime.datetime.now() # 当前时间
    this_data = f"我是中国人,我爱中国!"
    this_hash = last_block.cur_hash
    return BlockChain(this_index, this_timestamp, this_data, this_hash)

ddBlockChains = [create_first_block()] # 加入创世区块
header_block = ddBlockChains[0]
print(header_block.index, '-----', header_block.data, '------', header_block.cur_hash, '-----', header_block.next_hash)
# nums = 100
for i in range(10): # 加入10个区块
    blcok_chain_add = create_amount_block(header_block)
    ddBlockChains.append(blcok_chain_add) # 加入区块
    header_block = blcok_chain_add # 循环替换
    print(blcok_chain_add.index, '-----', blcok_chain_add.data, '------', blcok_chain_add.cur_hash, '-----', blcok_chain_add.next_hash)

总结

了解区块链的结构之后,代码实现起来比较简单,所以没有做过多的概念讲述,本文中默认使用hash256的加密方式,你也可以根据你实际的区块去选择不同的加密方法

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值