python实现简单的区块链

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

运用datetime和hashlib模拟实现区块链
区块函数
包含区块高度标识:blockNo
交易数据:data
nonce值
preious_hash:上一个区块哈希
timestamp:当前时间
python实现简单的区块链,区块链,python,哈希算法
链函数
python实现简单的区块链,区块链,python,哈希算法
分别包括三个方法,添加块的方法、挖矿功能、以及打包交易
添加块的方法:
python实现简单的区块链,区块链,python,哈希算法
挖矿功能(采用的是工作量证明共识机制)
python实现简单的区块链,区块链,python,哈希算法
打包交易:模拟简单的打包交易的功能,哈希加密了最后的返回值
python实现简单的区块链,区块链,python,哈希算法
最后运行部分设置了20个区块上链
python实现简单的区块链,区块链,python,哈希算法
运行结果:
python实现简单的区块链,区块链,python,哈希算法
全部代码:文章来源地址https://www.toymoban.com/news/detail-735431.html

import datetime
import hashlib
import random


class Block:
    blockNo = 0
    data = None
    next = None
    hash = None
    nonce = 0
    previous_hash = 0x0
    timestamp = datetime.datetime.now()

    def __init__(self, data):
        self.data = data

    # 添加哈希函数,计算区块的哈希值--将nonce、data、前一个 hash、timestamp和块号放入一个字符串并通过 SHA-256 函数运行
    def hash(self):
        h = hashlib.sha256()
        h.update(
            str(self.nonce).encode('utf-8') +
            str(self.data).encode('utf-8') +
            str(self.previous_hash).encode('utf-8') +
            str(self.timestamp).encode('utf-8') +
            str(self.blockNo).encode('utf-8')
        )
        return h.hexdigest()

    def __str__(self):
        return "Block Hash: " + str(self.hash()) + "\nBlockNo: " + str(self.blockNo) + "\nBlock Data: " + str(
            self.data) + "\nHashes: " + str(self.nonce) + "\n---------"


# 区块链类
class Blockchain:
    # 难度
    diff = 20
    # 最大随机数--设置为 2 的 32 次方,即 32 位数字中可以存储的最大数。随机数必须小于要接受的目标数
    maxNonce = 2 ** 32
    # 目标数--设置为 2 的 256 次方减去难度。在这种情况下,难度为 20
    target = 2 ** (256 - diff)
    # 区块链中的第一个块是创世块
    block = Block("Genesis")
    dummy = head = block

    # 添加块
    def add(self, block):
        # 前一个哈希设置为等于当前位于列表顶部的块
        block.previous_hash = self.block.hash()
        block.blockNo = self.block.blockNo + 1

        self.block.next = block
        self.block = self.block.next

    # 添加了一个挖矿功能。我使用了工作量证明共识机制
    def mine(self, block):
        # 首先设置一些猜测准则(范围),从 0 到最大随机数
        for n in range(self.maxNonce):
            if int(block.hash(), 16) <= self.target:
                self.add(block)
                print(block)
                break
            else:
                block.nonce += 1

    # 打包交易
    def pack(self):
        data = ""
        transaction = {
            1: "A转账B 1bit \n",
            2: "A转账B 2bit \n",
            3: "A转账B 3bit \n",
            4: "A转账B 4bit \n",
            5: "A转账B 5bit \n",
            6: "A转账B 6bit \n",
            7: "A转账B 7bit \n",
            8: "A转账B 8bit \n",
            9: "A转账B 9bit \n",
            10: "A转账B 10bit \n",
            11: "A转账B 11bit \n",
            12: "A转账B 12bit \n",
            13: "A转账B 13bit \n",
            14: "A转账B 14bit \n",
            15: "A转账B 15bit \n",
            16: "A转账B 16bit \n",
            17: "A转账B 17bit \n",
            18: "A转账B 18bit \n",
            19: "A转账B 19bit \n",
            20: "A转账B 20bit \n",
            21: "A转账B 21bit \n",
            22: "A转账B 22bit \n",
            23: "A转账B 23bit \n",
            24: "A转账B 24bit \n",
            25: "A转账B 25bit \n",
            26: "A转账B 26bit \n",
            27: "A转账B 27bit \n",
            28: "A转账B 28bit \n",
            29: "A转账B 29bit \n",
            30: "A转账B 30bit \n",
        }
        for i in range(1, 6):
            index = random.randint(1, 30)
            data += transaction[index]
        hash_object = hashlib.sha256()
        hash_object.update(data.encode('utf-8'))
        hash_value = hash_object.hexdigest()
        return hash_value


if __name__ == '__main__':
    start = datetime.datetime.now()
    blockchain = Blockchain()
    num_of_blocks_to_add = 20
    # 它计算 num_of_blocks_to_add 个随机块
    for n in range(num_of_blocks_to_add):
        data = blockchain.pack()
        blockchain.mine(Block("Block " + str(n + 1) + data))
    while blockchain.head is not None:
        print(blockchain.head)
        blockchain.head = blockchain.head.next
    end = datetime.datetime.now()
    print('Running time: %s Seconds' % (end - start))


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

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

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

相关文章

  • 【Python】实现一个简单的区块链系统

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

    2024年02月11日
    浏览(42)
  • 使用python搭建简单的区块链,并实现数据上链

    目录 一、引入库文件 二、编写消息类 三、编写区块类 四、编写区块链 五、编写主函数 六、运行 引入所需的库文件,其中hashlib为核心文件。 通过编写消息类,将消息读入并进行哈希运算,与前面的消息进行连接等操作。 通过编写区块类,使用前一区块的哈希值与时间戳等

    2024年02月12日
    浏览(40)
  • 安全算法(一):安全技术、加密的基础知识、哈希函数的简单介绍

    通过互联网交换数据时,数据要经过各种各样的网络和设备才能传到对方那里。数据在传输过程中有可能会经过某些恶意用户的设备,从而导致内容被盗取。 因此,要想安全地使用互联网,安全技术是不可或缺的。 传输数据时的四个问题:窃听、假冒、篡改、事后否认 窃听

    2024年02月04日
    浏览(50)
  • 哈希表的简单模拟实现

    初识哈希 哈希表是一种查找效率及其高的算法,最理想的情况下查询的时间复杂度为O(1)。 unordered_map 容器通过 key 访问单个元素要比 map 快,但它通常在遍历元素子集的范围迭代方面效率 较低。 unordered 系列的关联式容器之所以效率更高,是因为底层采用了哈希的结构。 哈希

    2024年02月15日
    浏览(49)
  • 竞赛python区块链实现 - proof of work工作量证明共识算法

    🔥 优质竞赛项目系列,今天要分享的是 python区块链实现 - proof of work工作量证明共识算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 学长以比特币的结构向大家详解区块链的组成部分 previous hash

    2024年02月05日
    浏览(52)
  • 利用Python实现简单的机器学习算法

    机器学习是人工智能领域中非常重要的一个分支,它可以让计算机从数据中学习并提升自己的性能。Python作为一种高级编程语言,被广泛用于机器学习领域。本文将介绍如何使用Python实现简单的机器学习算法。 机器学习是一种让计算机从数据中学习并提升性能的技术。它是人

    2024年02月13日
    浏览(42)
  • 【毕设教程】python区块链实现 - proof of work工作量证明共识算法

    Hi,大家好,这里是丹成学长,今天向同学们介绍如何构建一个区块链系统作为毕设,区块链的原理 🧿 选题指导, 项目分享: https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md 学长以比特币的结构向大家详解区块链的组成部分 previous hash(前

    2024年01月21日
    浏览(46)
  • 挑战杯 python区块链实现 - proof of work工作量证明共识算法

    🔥 优质竞赛项目系列,今天要分享的是 python区块链实现 - proof of work工作量证明共识算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 学长以比特币的结构向大家详解区块链的组成部分 previous hash

    2024年02月21日
    浏览(61)
  • 竞赛保研 python区块链实现 - proof of work工作量证明共识算法

    🔥 优质竞赛项目系列,今天要分享的是 python区块链实现 - proof of work工作量证明共识算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 学长以比特币的结构向大家详解区块链的组成部分 previous hash

    2024年02月04日
    浏览(46)
  • 计算机竞赛python区块链实现 - proof of work工作量证明共识算法

    🔥 优质竞赛项目系列,今天要分享的是 python区块链实现 - proof of work工作量证明共识算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 学长以比特币的结构向大家详解区块链的组成部分 previous hash

    2024年02月05日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包