广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解python实现简单区块链结构
  • 354
分享到

详解python实现简单区块链结构

2024-04-02 19:04:59 354人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

区块链 比特币从诞生到现在已经10年了,最近接触到了区块链相关的技术,为了揭开其背后的神秘面纱,我就从头开始构建一个简单的区块链。 从技术上来看:区块是一种记录交易的数据结构,反映了

区块链

比特币从诞生到现在已经10年了,最近接触到了区块链相关的技术,为了揭开其背后的神秘面纱,我就从头开始构建一个简单的区块链。

从技术上来看:区块是一种记录交易的数据结构,反映了一笔交易的资金流向。系统中已经达成的交易的区块连接在一起形成了一条主链,所有参与计算的节点都记录了主链或主链的一部分。

一、比特币内部结构

比特币内部结构有四部分:

  1. previous hash: 上一个区块的hash
  2. data:交易数据
  3. time stamp:区块生成的时间戳
  4. nonce:挖矿计算次数

二、实现的比特币结构

  1. index :当前区块索引
  2. timestamp :该区块创建时的时间戳
  3. data :交易信息
  4. previous hash: 前一个区块的hash
  5. hash: 当前区块的hash
  6. nonce : 挖矿计算次数

注意:当前实现了一个简单的区块链结构,并不完整。

三、代码实现

1.定义区块的结构

代码如下:


"""
区块设计
"""
import time
import hashlib

class Block:
    # 初始化一个区块
    def __init__(self,previous_hash,data):
        self.index = 0
        self.nonce = ''
        self.previous_hash = previous_hash
        self.time_stamp = time.time()
        self.data = data
        self.hash = self.get_hash()
    # 获取区块的hash
    def get_hash(self):
        msg = hashlib.sha256()
        msg.update(str(self.previous_hash).encode('utf-8'))
        msg.update(str(self.data).encode('utf-8'))
        msg.update(str(self.time_stamp).encode('utf-8'))
        msg.update(str(self.index).encode('utf-8'))
        return msg.hexdigest()
    # 修改区块的hash值
    def set_hash(self,hash):
        self.hash = hash

2.创世区块构造

创世区块:没有前一个区块,这里的previous_hashdata是自己写死的。


# 生成创世区块,这是第一个区块,没有前一个区块
def creat_genesis_block():
    block = Block(previous_hash= '0000',data='Genesis block')
    nonce,digest = mime(block=block)
    block.nonce = nonce
    block.set_hash(digest)
    return block

这里的mime()函数是后面的挖矿函数.

3.挖矿函数定义

代码如下:


def mime(block):
    """
    挖矿函数——更新区块结构,加入nonce值
        block:挖矿区块
    """
    i = 0
    prefix = '0000'
    while True:
        nonce = str(i)
        msg = hashlib.sha256()
        msg.update(str(block.previous_hash).encode('utf-8'))
        msg.update(str(block.data).encode('utf-8'))
        msg.update(str(block.time_stamp).encode('utf-8'))
        msg.update(str(block.index).encode('utf-8'))
        msg.update(nonce.encode('utf-8'))
        digest = msg.hexdigest()
        if digest.startswith(prefix):
            return nonce,digest
        i+=1

4.定义区块链结构

代码如下:


"""
区块链设计
"""
from Block import *
# 区块链
class BlockChain:
    def __init__(self):
        self.blocks = [creat_genesis_block()]
    # 添加区块到区块链上
    def add_block(self,data):
        pre_block = self.blocks[len(self.blocks)-1]
        new_block = Block(pre_block.hash,data)
        new_block.index = len(self.blocks)
        nonce,digest = mime(block=new_block)
        new_block.nonce = nonce
        new_block.set_hash(digest)
        self.blocks.append(new_block)
        return new_block

在添加新区块到区块链时,先挖矿在将新区块加入区块链。

四、代码运行

测试代码:


from BlockChain import *
# 创建一个区块链
bc = BlockChain()
# 添加区块
bc.add_block(data='second block')
bc.add_block(data='third block')
bc.add_block(data='fourth block')
for bl in bc.blocks:
    print("Index:{}".fORMat(bl.index))
    print("Nonce:{}".format(bl.nonce))
    print("Hash:{}".format(bl.hash))
    print("Pre_Hash:{}".format(bl.previous_hash))
    print("Time:{}".format(bl.time_stamp))
    print("Data:{}".format(bl.data))
    print('\n')

运行结果:

区块链

这里添加了4个区块(包括创世区块),处了创世区块,每个区块的pre_hash都与前一个区块的hash值相等,这代表区块没有被篡改,数据有效。

到此这篇关于python实现简单区块链结构的文章就介绍到这了,更多相关Python区块链结构内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解python实现简单区块链结构

本文链接: https://www.lsjlt.com/news/124532.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解python实现简单区块链结构
    区块链 比特币从诞生到现在已经10年了,最近接触到了区块链相关的技术,为了揭开其背后的神秘面纱,我就从头开始构建一个简单的区块链。 从技术上来看:区块是一种记录交易的数据结构,反映了...
    99+
    2022-11-12
  • go语言区块链实战实现简单的区块与区块链
    目录区块链实战Version 1区块相关:区块链相关区块链实战 字节 字段 说...
    99+
    2022-11-12
  • 【Python】实现一个简单的区块链系统
    本文章利用 Python 实现一个简单的功能较为完善的区块链系统(包括区块链结构、账户、钱包、转账),采用的共识机制是 POW。 一、区块与区块链结构 Block.py import hashlibfrom datetime import ...
    99+
    2023-09-22
    区块链 python 共识算法
  • 怎么用go语言区块链实战实现简单的区块与区块链
    本篇内容介绍了“怎么用go语言区块链实战实现简单的区块与区块链”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区块链实战字节字段说明4版本区块...
    99+
    2023-06-25
  • Python构建区块链的方法详解
    目录区块链block目标去中心化构建区块链类添加交易创建新blocksPOWAPI注册新节点冲突区块链 区块链是在计算机网络的节点之间共享数据的分类账(分布式数据库)。作为数据库,区...
    99+
    2023-02-25
    Python构建区块链 Python建立区块链 Python开发区块链
  • 使用python怎么实现一个区块链结构
    这期内容当中小编将会给大家带来有关使用python怎么实现一个区块链结构,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)...
    99+
    2023-06-14
  • python区块链实现简版网络
    目录说明引言区块链网络kademlia发现协议简化协议消息TCP服务端TCP客户端P2P服务器连接节点RPC测试区块同步方式问题总结说明 本文根据https://github.com...
    99+
    2022-11-11
  • 如何实现一个简单的区块链
    这篇文章将为大家详细讲解有关如何实现一个简单的区块链,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区块链的基础概念很简单:一个分布式数据库,...
    99+
    2022-10-18
  • python区块链地址的简版实现
    说明 本文根据https://github.com/liuchengxu/blockchain-tutorial 的内容,用python实现的,但根据个人的理解进行了一些修改,大量引...
    99+
    2022-11-11
  • Java如何实现简单的区块链程序
    本篇内容主要讲解“Java如何实现简单的区块链程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何实现简单的区块链程序”吧!什么是区块链?那么,让我们先来了解一下区块链到底是什么…好吧...
    99+
    2023-06-14
  • python区块链简易版交易实现示例
    目录说明引言比特币交易交易输出发送币余额查看总结说明 本文根据https://github.com/liuchengxu/blockchain-tutorial的内容,用python...
    99+
    2022-11-11
  • python区块链实现简版工作量证明
    目录说明回顾工作量证明哈希计算Hashcash实现说明 本文根据https://github.com/liuchengxu/blockchain-tutorial的内容,用pytho...
    99+
    2022-11-11
  • Python数据结构与算法之列表(链表,linked list)简单实现
    Python 中的 list 并不是我们传统(计算机科学)意义上的列表,这也是其 append 操作会比 insert 操作效率高的原因。传统列表——通常也叫作链表(linked list)——通常是由一系...
    99+
    2022-06-04
    数据结构 算法 链表
  • Go实现简单的数据库表转结构体详解
    目录前言设计过程迭代升级前言 码上源码 package main import ( "database/sql" "fmt" _ "github.com/go-sql-driv...
    99+
    2023-01-10
    Go数据库表转结构体 表转结构体
  • python区块链基本原型简版实现示例
    目录说明引言区块区块头区块链总结说明 本文根据https://github.com/liuchengxu/blockchain-tutorial的内容,用python实现的,但根据个...
    99+
    2022-11-11
  • python区块链基本原型简版如何实现
    这篇文章主要介绍了python区块链基本原型简版如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python区块链基本原型简版如何实现文章都会有所收获,下面我们一起来看看吧。引言区块链是 21 世纪最具革...
    99+
    2023-06-30
  • 使用Java实现简单的区块链程序的方法
    在本文中,我们将学习区块链技术的基本概念。我们还将用Java实现一个基本的应用程序,重点介绍这些概念。 此外,我们还将讨论该技术的一些先进概念和实际应用。 什么是区块链? 那么,让我...
    99+
    2022-11-12
  • 数据结构TypeScript之链表实现详解
    目录链表结构特点面向对象方法封装链表构造函数基本单元:链表节点主体:链表查找节点增加节点删除节点链表结构特点 链表是线性表的其中一种,用于存储有固定顺序的元素。而元素之间会通过&r...
    99+
    2023-01-30
    TypeScript数据结构链表 TypeScript数据结构
  • python区块链如何实现简版工作量证明
    本篇内容主要讲解“python区块链如何实现简版工作量证明”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python区块链如何实现简版工作量证明”吧!工作量证明区块链的一个关键点就是,一个人必须...
    99+
    2023-06-30
  • Go语言数据结构之单链表的实例详解
    目录任意类型的数据域实例01快慢指针实例02反转链表实例03实例04交换节点实例05任意类型的数据域 之前的链表定义数据域都是整型int,如果需要不同类型的数据就要用到 interf...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作