python区块链简单模拟【02】

定义区块结构

import hashlib
from datetime import datetime


class Block:
    """
        区块结构
            prev_hash:      父区块哈希值
            data:           区块内容
            timestamp:      区块创建时间  ---时间戳
            hash:           区块哈希值    ---简化了没有考虑Nonce值只计算前三个参数的hash值
            
            Nonce:          增加随机数字段  
    """
    def __init__(self, data, prev_hash):
        # 将传入的父哈希值和数据保存到类变量中
        self.previous_hash = prev_hash
        print(f"父区块哈希{prev_hash}")
        self.data = data
        # 获取当前时间
        self.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        
#         #设置Nonce和hash的初始值是None
#         self.Nonce = None
#         self.hash = None
#         def __repr__(self):  #当直接打印实例化对象时会自动执行
#             return "区块内容:%s\n哈希值:%s" % (self.data,self.hash)

        # 计算区块的哈希值   
        message = hashlib.sha256()
        message.update(str(self.previous_hash).encode('utf-8'))
        message.update(str(self.data).encode('utf-8'))
        message.update(str(self.timestamp).encode('utf-8'))   #等同于三个参数拼接在一起用hash  一模一样的
        print("当前区块哈希"+message.hexdigest())
        self.hash = message.hexdigest()

定义区块链结构

class BlockChain:
    """
        区块链结构体
            blocks:        包含的区块列表
    """
    def __init__(self):
        self.blocks = []       #blocks先定义为一个空链表

    def add_block(self, block):        #添加区块
        """
        添加区块
        """
        self.blocks.append(block)

创建区块

其中需要注意的是第一个区块,也叫创世区块,它是一个特殊的区块,没有父区块,在区块链创建的时候会生成,定义如下:

# 生成创世区块
# 创世区块是第一个区块,无父区块哈希
genesis_block = Block(data="创世区块", prev_hash="0")  #利用区块类创建一个对象(创世区块)
# 再新建两个区块, prev_hash分别为前一个哈希值
new_block1 = Block(data="张三转给李四1个比特币", prev_hash=genesis_block.hash)
new_block2 = Block(data="张三转给王五2个比特币", prev_hash=new_block1.hash)
# 新建一个区块链
blockchain = BlockChain()

# 将上面的几个区块添加到区块链中
blockchain.add_block(genesis_block)
blockchain.add_block(new_block1)
blockchain.add_block(new_block2)
#打印区块链
print("区块链包含区块个数: %d\n" % len(blockchain.blocks))
no=0
for block in blockchain.blocks:
    print(f"这是第{no}个区块")
    print("上一个区块哈希是:%s"%block.previous_hash)
    print("本区块交易内容是:%s"%block.data)
    print("本区块哈希是:%s"%block.hash)
    no += 1
# 打印区块链


上面的函数创建了一个区块链,并生成两个区块,加上创世区块一共三个区块。

引入共识机制中的PoW工作量证明机制:通过不断计算随机数(Nonce)

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
区块链是一种分布式的、不可篡改的数据结构,用于记录和验证交易。在Python中,可以使用编写区块链的代码来实现区块的上链操作。其中,可以通过添加区块的方式将新的交易加入到链中,而区块中的交易内容可以通过向当前块中添加消息来完成。同时,可以通过查看整条链上的块来了解区块链的内容。 具体而言,可以创建一个区块链的类,如BlockChain,其中包含一个blocks列表来存储区块。可以通过add_block方法向链中添加新的区块。可以通过print_list方法打印整条链上的块。 此外,还可以创建一个SimpleChain类来完成区块上链的操作。在该类中,通过add_block方法将合法的区块添加到链中。 最后,可以编写一个主函数,通过用户输入的方式来进行区块链的管理,包括添加消息、将当前块上链、查看区块链上的块等操作。用户可以通过输入不同的字符来选择不同的操作。 以上是一个简单Python区块链示例代码的概述。如果需要更具体的实现细节,请参考给出的代码引用、和。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用python搭建简单区块链,并实现数据上链](https://blog.csdn.net/SAGIRIsagiri/article/details/124727276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [【Python】实现一个简单区块链系统](https://blog.csdn.net/ottolsq/article/details/130469241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值