浅谈python实现简单区块链结构

文章目录

    • 区块链
    • 一、比特币内部结构
    • 二、实现的比特币结构
    • 三、代码实现
      • 1.定义区块的结构
      • 2.创世区块构造
      • 3.挖矿函数定义
      • 4.定义区块链结构
    • 四、代码运行
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、Python兼职渠道


区块链

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

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

浅谈python实现简单区块链结构_第1张图片

一、比特币内部结构

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

  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')

运行结果:

浅谈python实现简单区块链结构_第2张图片

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


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

浅谈python实现简单区块链结构_第3张图片
一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

浅谈python实现简单区块链结构_第4张图片

你可能感兴趣的:(python,区块链,开发语言,计算机科技,经验分享,学习,程序人生)