使用python搭建简单的区块链,并实现数据上链

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

目录

一、引入库文件

二、编写消息类

三、编写区块类

四、编写区块链

五、编写主函数

六、运行


一、引入库文件

引入所需的库文件,其中hashlib为核心文件。

import datetime
import hashlib
import time

二、编写消息类

通过编写消息类,将消息读入并进行哈希运算,与前面的消息进行连接等操作。

class Message:
    def __init__(self, data):
        self.hash = None
        self.prev_hash = None
        self.timestamp = time.time()
        self.size = len(data.encode('utf-8'))
        self.data = data
        self.payload_hash = self._hash_payload()

    def _hash_payload(self):
        return hashlib.sha256(bytearray(str(self.timestamp) + str(self.data), "utf-8")).hexdigest()

    def _hash_message(self):
        return hashlib.sha256(bytearray(str(self.prev_hash) + self.payload_hash, "utf-8")).hexdigest()

    def link(self, message):
        """ 通过哈希将消息连接到上一条消息 """
        self.prev_hash = message.hash

    def seal(self):
        """ 获取消息哈希 """
        self.hash = self._hash_message()

三、编写区块类

通过编写区块类,使用前一区块的哈希值与时间戳等消息,将区块之间连接起来。

class Block:
    def __init__(self, *args):
        self.messages = []
        self.timestamp = None
        self.prev_hash = None
        self.hash = None
        if args:
            for arg in args:
                self.add_message(arg)

    def _hash_block(self):
        return hashlib.sha256(
            bytearray(str(self.prev_hash) + str(self.timestamp) + self.messages[-1].hash, "utf-8")).hexdigest()

    def add_message(self, message):
        if len(self.messages) > 0:
            message.link(self.messages[-1])
        message.seal()
        self.messages.append(message)

    def link(self, block):
        self.prev_hash = block.hash

    def seal(self):
        self.timestamp = time.time()
        self.hash = self._hash_block()

    def __repr__(self):
        return '<hash: {}, prev_hash: {}, messages: {}, time: {}>'.format(
            self.hash, self.prev_hash, len(self.messages), self.timestamp
        )

四、编写区块链

编写区块链,完成区块上链的操作。

class SimpleChain:
    def __init__(self):
        self.chain = []

    def add_block(self, block):
        """ Add a block if valid."""
        if len(self.chain) > 0:
            block.prev_hash = self.chain[-1].hash
        block.seal()
        self.chain.append(block)

五、编写主函数

打印菜单,输入1,向当前块中添加消息内容。输入2,将当前块上链。输入3,查看区块链上的块。输入其他字符退出区块链并关闭程序。

def manager():
    chain = SimpleChain()
    block = Block()
    msg = """
		Action set:
			- 向当前块中添加消息	    (1)
			- 将当前块添加到链		(2)
			- 查看整条链上的块		(3)
			- 终止程序并删除链		(0)
		"""
    print(msg)
    while True:
        print()

        decide = input("Your action: ")

        if decide == "1":
            file = input("请输入文件名")
            datafile = open(file, 'rb').read()
            data = datafile.decode()
            block.add_message(Message(data))
            print("消息添加成功")
        elif decide == "2":
            if len(block.messages) > 0:
                chain.add_block(block)
                block = Block()
                print("区块上链成功")
            else:
                print("当前块为空,无法上链。")
        elif decide == "3":
            n = 0
            for b in chain.chain:
                print("Block", n)
                print(b)
                print("--------------------------------------------------------------------------------------------")
                n = n+1
        else:
            break

六、运行

if __name__ == "__main__":
    manager()

运行程序,将要上链的内容放到py文件同级目录下,输入1,输入文件名向区块中添加消息,输入2将区块上链,输入3查看区块链上的内容,输入任意其他数字关闭程序并销毁链。

用python实现区块链,python,哈希算法,开发语言文章来源地址https://www.toymoban.com/news/detail-526130.html

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

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

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

相关文章

  • python实现简单的区块链

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

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

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

    2024年02月11日
    浏览(31)
  • 区块链开源底层软件平台——长安链一键上链体验过程

    长安链作为区块链开源底层软件平台,包涵区块链核心框架、丰富的组件库和工具集,致力于为用户高效、精准地解决差异化区块链实现需求,构建高性能、高可信、高安全的新型数字基础设施,同时也是国内首个自主可控区块链软硬件技术体系,最近腾讯云区块链,区块链

    2024年02月17日
    浏览(29)
  • 云图说丨华为云区块链引擎服务:高安全的区块链技术服务平台,轻松部署,快速上链

    摘要: 华为云区块链引擎服务以BCS自主研发区块链内核为底座,结合可信硬件,具有高安全、高性能、高可扩展、强隐私保护等特点,满足企业级和金融级的可信和协同要求。 本文分享自华为云社区《【云图说】 第251期 华为云区块链引擎服务—高安全的区块链技术服务平台

    2024年02月17日
    浏览(32)
  • 使用 Footprint Analytics, 快速搭建区块链数据应用

    Nov 2022, daniel@footprint.network 如果你有一个处理 NFTs 或区块链的网站或应用程序,你可以在你的平台上直接向用户展示数据,以保持他们在网站或者应用内的参与,而不是链接以及跳出到其他网站。 对于任何区块链应用或者媒体、信息网站来说,通过在网站上展示数据图表(如

    2024年01月22日
    浏览(29)
  • 基于区块链的商品交易溯源系统开发模式搭建 - 使用 Python

    基于区块链的商品交易溯源系统开发模式搭建 - 使用 Python 引言: 区块链技术在商品交易溯源领域具有广泛的应用前景。Hyperledger Fabric是一个开源的企业级区块链平台,具备高度的可扩展性和灵活性,非常适合构建商品交易溯源系统。本文将介绍如何使用Python开发基于区块链

    2024年04月27日
    浏览(31)
  • 如何使用python实现简单爬取网页数据并导入MySQL中的数据库

    前言:要使用 Python 爬取网页数据并将数据导入 MySQL 数据库,您需要使用 Requests 库进行网页抓取,使用 BeautifulSoup 库对抓取到的 HTML 进行解析,并使用 PyMySQL 库与 MySQL 进行交互。 以下是一个简单的示例: 1.  安装所需库: ``` ``` 2.  导入所需库: ``` ``` 3.  建立数据库连接:

    2024年02月04日
    浏览(35)
  • 【Python】使用文件哈希算法快速比较两个文件是否相同(代码实现)

    哈希值(Hash Value),也称为哈希码、散列值或摘要,是一种将任意长度的输入数据转换为固定长度字符串(通常是一串数字和字母)的算法的结果。哈希值通常用于唯一标识数据,以便快速检索或比较数据。哈希值的特点包括: 固定长度:无论输入数据的大小如何,哈希函

    2024年01月21日
    浏览(40)
  • 使用golang从零开始搭建基于UTXO模型的区块链(一、实现最简易的区块链)

    真正理解区块链底层原理的方法就是写一个底层,UTXO模型区块链的开发难度还是比较简单的,等开发完后再去尝试一下基于account模型的。 什么是区块链以及UTXO模型和account模型等问题我就不在这里写了,网上的资料有很多,跟着写之前可以先去了解一下区块链的基础知识。

    2024年02月10日
    浏览(37)
  • java版数字藏品V3仿鲸探数藏盲盒合成短视频区块链上链二级市场支持高并发

    主要功能介绍 艺术品发售 藏品发售用户可以购买 后台藏品可设置不同稀有度 不同稀有度的藏品可以通过发布短视频获得相应积分(每天发布短视频并获得相应点赞 天天得积分) 二级市场 用户的藏品可以直接挂售到二级市场商城 其他用户可以购买自己的藏品 用户加到购物

    2024年02月06日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包