python区块链简单模拟【02】

这篇具有很好参考价值的文章主要介绍了python区块链简单模拟【02】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引入共识机制(PoW)

import hashlib
from datetime import datetime


class Block:
    """
        区块结构
            prev_hash:      父区块哈希值
            data:           区块内容
            timestamp:      区块创建时间
            hash:           区块哈希值
            Nonce:        随机数
    """
    def __init__(self, data, prev_hash):
        # 将传入的父哈希值和数据保存到类变量中
        self.prev_hash = prev_hash    
        self.data = data
        # 获取当前时间
        self.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        
        # 设置Nonce和哈希的初始值为None
        self.nonce = None
        self.hash = None
        
    def __repr__(self):
        return "区块内容:%s\n哈希值: %s" % (self.data, self.hash)

python区块链简单模拟【02】,区块链模拟,python,区块链,开发语言

class ProofOfWork:
    """
        工作量证明
    """
    def __init__(self, block, difficult=5):
        self.block = block
        
        # 定义工作量难度,默认为5,表示有效的哈希值以5个“0”开头
        self.difficulty = difficult

    def mine(self):
        """
            挖矿函数
        """
        i = 0
        prefix = '0' * self.difficulty

        while True:
            message = hashlib.sha256()
            message.update(str(self.block.prev_hash).encode('utf-8'))
            message.update(str(self.block.data).encode('utf-8'))
            message.update(str(self.block.timestamp).encode('utf-8'))
            message.update(str(i).encode("utf-8"))
            
            digest = message.hexdigest()
            if digest.startswith(prefix):
                self.block.nonce = i
                self.block.hash = digest
                return self.block
            i += 1                           //递加

    def validate(self):
        """
            验证有效性
        """
        message = hashlib.sha256()
        message.update(str(self.block.prev_hash).encode('utf-8'))
        message.update(str(self.block.data).encode('utf-8'))
        message.update(str(self.block.timestamp).encode('utf-8'))
        message.update(str(self.block.nonce).encode('utf-8'))
        digest = message.hexdigest()

        prefix = '0' * self.difficulty
        return digest.startswith(prefix)

python区块链简单模拟【02】,区块链模拟,python,区块链,开发语言`# 先定义一个区块

b = Block(data=“测试”, prev_hash=“”)

再定义一个工作量证明

w = ProofOfWork(b)`
python区块链简单模拟【02】,区块链模拟,python,区块链,开发语言

# 进行挖矿,并统计函数执行时间  #返回区块对象
%time  valid_block= w.mine() 

python区块链简单模拟【02】,区块链模拟,python,区块链,开发语言

# 验证区块,并计算执行时间
%time  w.validate()    #返回是否有效  是否由5个0开头

python区块链简单模拟【02】,区块链模拟,python,区块链,开发语言

class BlockChain:
    """
        区块链结构体
            blocks:        包含的区块列表
    """
    def __init__(self):
        self.blocks = []

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

python区块链简单模拟【02】,区块链模拟,python,区块链,开发语言

blockchain = BlockChain()

new_block1 = Block(data="创世区块", prev_hash="")
w1 = ProofOfWork(new_block1)
genesis_block = w1.mine()
blockchain.add_block(genesis_block)   #将生成的区块加入链    nonce值是正确的

new_block2 = Block(data="张三转给李四1个比特币", prev_hash=genesis_block.hash)
w2 = ProofOfWork(new_block2)
new_block = w2.mine()
blockchain.add_block(new_block)

new_block3 = Block(data="张三转给王五2个比特币", prev_hash=new_block.hash)
w3 = ProofOfWork(new_block3)
new_block = w3.mine()
blockchain.add_block(new_block)

python区块链简单模拟【02】,区块链模拟,python,区块链,开发语言

# 打印区块链

print("区块链包含区块个数: %d\n" % len(blockchain.blocks))

for block in blockchain.blocks:
    print("上一个区块哈希:%s" % block.prev_hash)
    print("区块内容:%s" % block.data)
    print("区块哈希:%s" % block.hash)
    print("\n") 

python区块链简单模拟【02】,区块链模拟,python,区块链,开发语言文章来源地址https://www.toymoban.com/news/detail-767696.html

到了这里,关于python区块链简单模拟【02】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • go语言简单实现区块链

            在本文中,我们将使用Go语言来实现一个简单的区块链系统,包括区块生成、交易处理和区块打印、保存区块链等功能。 在开始之前,先确保计算机上安装了以下内容: Go编程语言:您可以从Go官方网站下载并安装Go。 Go开发环境:设置Go开发环境,包括文本编辑器

    2024年04月16日
    浏览(39)
  • Unity 游戏开发、02 基础篇 | 知识补充、简单使用动画、动画状态机

    Unity 游戏开发、01 基础篇 Q 手型工具(鼠标中键): 上下左右移动场景 ALT + 鼠标左键: 以视图为中心旋转 鼠标右键: 以观察者为中心旋转 SHIFT + Gizmo方块: Y轴归位 物体节点 + F: 观察者定位至物体 3D项目一般窗口布局如下 全局光照GI(Glballlumination)(编辑模式下才能生成

    2024年02月09日
    浏览(69)
  • 02【保姆级】-GO语言开发注意事项(特色重点)

    之前我学过C、Java、Python语言时总结的经验: 先建立整体框架,然后再去抠细节。 先Know how,然后know why。 先做出来,然后再去一点点研究,才会事半功倍。 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。 对于GO语言,切记遵守语法格式规则。(例如python语言、例如

    2024年02月06日
    浏览(44)
  • python实现简单的区块链

    运用datetime和hashlib模拟实现区块链 区块函数 包含区块高度标识:blockNo 交易数据:data nonce值 preious_hash:上一个区块哈希 timestamp:当前时间 链函数 分别包括三个方法,添加块的方法、挖矿功能、以及打包交易 添加块的方法: 挖矿功能(采用的是工作量证明共识机制) 打包交

    2024年02月06日
    浏览(38)
  • 用python搭建简单的区块链

    以下是使用Python编写简单的区块链的步骤: 安装需要的库 创建区块链的类 创建创世块和区块的添加方法 创建Flask Web应用程序 运行应用程序并测试 运行应用程序: 使用POST请求创建新的交易: 使用GET请求获取完整的区块链: 使用GET请求挖掘新的区块: 以上就是使用Python编

    2024年04月26日
    浏览(32)
  • 【Python】实现一个简单的区块链系统

    本文章利用 Python 实现一个简单的功能较为完善的区块链系统(包括区块链结构、账户、钱包、转账),采用的共识机制是 POW。 Block.py  BlockChain.py  测试结果  将工作量证明加入到 Block.py 中 测试结果 更新 BlockChain.py  测试结果  实现钱包、账户、交易功能要先安装非对称加

    2024年02月11日
    浏览(42)
  • 区块链实战:用python编写最简单的比特币区块链本地测试框架

    比特币本身并不是特别复杂,中本聪的白皮书只有十页左右。 可从该链接下载(有各种语言版本):Bitcoin: A Peer-to-Peer Electronic Cash System 但是,真正投入使用的比特币系统实际上非常复杂,包含诸多因素,涉及诸多细节,甚至对一个手续费机制研究几天还云里雾里。 如何有效地

    2024年02月05日
    浏览(46)
  • 以太坊区块链之使用truffle框架完成简单投票Dapp开发

    编写环境 remix 话不多说,直接上代码 1、启动ganache 2、在 /contracts 目录下加入新建一个.sol文件,将之前编写的智能合约代码加入该文件中,博主新建的是一个 Voting.sol 的文件 !!!该文件目录一定要与智能合约代码名字相对应 3、修改truffle-config.js 将development内的host、port改

    2024年02月09日
    浏览(53)
  • 用Python简单模拟《原神》抽卡系统

    欢迎 这是我第一次发布文章,就爱闲的没事整点活玩,写的不好还请见谅 使用的语言是Python,因为实在是太方便了o(TヘTo) 对了,要是懒得看代码思想直接跳到完整代码就彳亍 想必大家都听说过原神吧,是米哈游开发的大世界探索游戏。大学一放假就太闲了,于是就用pytho

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包