教你使用Python从零开始搭建一个区块链项目!

干货 | 手把手教你快速撸一个区块链 阅读详情

你是否会和我一样,对加密数字货币底层的区块链技术非常感兴趣,特别想了解他们的运行机制。

但是学习区块链技术并非一帆风顺,我看多了大量的视频教程还有各种课程,最终的感觉就是真正可用的实战课程太少。

我喜欢在实践中学习,尤其喜欢以代码为基础去了解整个工作机制。如果你我一样喜欢这种学习方式,当你学完本教程时,你将会知道区块链技术是如何工作的。

写在开始之前

记住,区块链是一个 不可变的、有序的 被称为块的记录链。它们可以包含交易、文件或任何您喜欢的数据。但重要的是,他们用 哈希 一起被链接在一起。

如果你不熟悉哈希,这里是一个解释.

该指南的目的是什么? 你可以舒服地阅读和编写基础的 Python,因为我们将通过 HTTP 与区块链进行讨论,所以你也要了解 HTTP 的工作原理。

我需要准备什么? 确定安装了 Python 3.6+ (还有  pip ) ,你还需要安装 Flask、 Requests 库:

pip install Flask==0.12.2 requests==2.18.4`

对了,你还需要一个支持 HTTP 的客户端,比如 Postman 或者 cURL,其他也可以。

Step 1: 创建一个区块链

私信博主001  领取完整项目代码!

 

打开你最喜欢的文本编辑器或者 IDE, 我个人比较喜欢 PyCharm. 新建一个名为 blockchain.py的文件。我们将只用这一个文件就可以。但是如果你还是不太清楚,你也可以参考 源码.

描述区块链

我们要创建一个 Blockchain 类 ,他的构造函数创建了一个初始化的空列表(要存储我们的区块链),并且另一个存储交易。下面是我们这个类的实例:

blockchain.py

class Blockchain(object):
    def __init__(self):
        self.chain = []
        self.current_transactions = []

    def new_block(self):
        # Creates a new Block and adds it to the chain
        pass

    def new_transaction(self):
        # Adds a new transaction to the list of transactions
        pass

    @staticmethod
    def hash(block):
        # Hashes a Block
        pass

    @property
    def last_block(self):
        # Returns the last Block in the chain
        pass

我们的 Blockchain 类负责管理链式数据,它会存储交易并且还有添加新的区块到链式数据的 Method。让我们开始扩充更多 Method

块是什么样的?

每个块都有一个 索引 ,一个  时间戳(Unix时间戳) ,一个 事务列表 , 一个  校验 (稍后详述) 和  前一个块的散列 。

下面是一个 Block 的例子 :

blockchain.py

block = {
    'index': 1,
    'timestamp': 1506057125.900785,
    'transactions': [
        {
            'sender': "8527147fe1f5426f9dd545de4b27ee00",
            'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f",
            'amount': 5,
        }
    ],
    'proof': 324984774000,
    'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
}

在这一点上,一个 区块链 的概念应该是明显的 - 每个新块都包含在其内的前一个块的  散列。这是至关重要的,因为这是  区块链 不可改变的原因:如果攻击者损坏  区块链 中较早的块,则所有后续块将包含不正确的哈希值。

这有道理吗?如果你还没有想通,花点时间仔细思考一下 - 这是区块链背后的核心理念

添加交易到区块

我们将需要一个添加交易到区块的方式。我们的 new_transaction() 方法的责任就是这个, 并且它非常的简单:

blockchain.py

class Blockchain(object):
    ...

    def new_transaction(self, sender, recipient, amount):
        """
        Creates a new transaction to go into the next mined Block
        :param sender: <str> Address of the Sender
        :param recipient: <str> Address of the Recipient
        :param amount: <int> Amount
        :return: <int> The index of the Block that will hold this transaction
        """

        self.current_transactions.append({
            'sender': sender,
            'recipient': recipient,
            'amount': amount,
        })

        return self.last_block['index'] + 1

new_transaction() 方法添加了交易到列表,它返回了交易将被添加到的区块的 索引 ---  讲开采下一个 这对稍后对提交交易的用户有用。

创建新的区块

当我们的 Blockchain 被实例化后,我们需要将  创世 区块(一个没有前导区块的区块)添加进去进去。我们还需要向

用Python从零开始创建区块链_基于python做区块链 ”"简单的工作量证明:- 查找一个 p’ 使得 hash(pp’) 以4个0开头- p 是上一个块的证明, p’ 是当前的证明:return:“”"proof = 0proof += 1“”"验证证明: 是否hash(last_proof, proof)以4个0开头?“”" 阅读详情

相关推荐

手把手教你搭建区块链(中)

​“学习区块链的最快方法就是自己亲手搭建一个” 本文接上篇:手把手教你搭建区块链(上) “了解工作量证明” 工作量证明算法(PoW)是在区块链上创建或挖掘新区块的方式。 PoW的目标是发现可以解决问题的数字。从计算机的角度来讲,该数字必须既要很难找到又要易于验证。这是工作量证明的核心思想。 我们将看一个非常简单的示例来帮助您深入了解,某个整数x乘以另一个y的哈希必须以0结尾的函数表达为: hash...

Coinsuper的博客 2467

从零开始Python区块链搭建(一)

是我从理论向实践迈出的重要一步吧。目前这篇文章并没有涉及区块链的所有内容,并且仅涉及到在本地软件中一些类区块链功能的实现。不过这些功能的实现,是为以后真正搭建出自己的区块链而作的准备~本篇文章涉及的内容,均来自b站up主AsianWhale上传的视频**《[教程向]手把手Python搭建区块链》****,BV号为BV1Hb411c7oH。**感兴趣的小伙伴可以去学习哦!本篇文章的代码非原创,均来自上述视频中的内容。

Saki_Python的博客 724

走进区块链(一):用Python实现第一个区块链小程序

源代码链接:https://github.com/dvf/blockchain 大家好!这是本人踩在巨人的肩膀上,实现的第一个区块链小程序。在实现代码的过程中,我遇到了很多问题,不过,幸好都解决了。在这里,我会尽可能的将操作步骤写得更详细。接下来,让我们一起走进区块链吧! 一、初识区块链 区块链是由不可变的、有顺序记录的区块组成。他们可以包含交易数据、文件数据或者其他你想要记录的数据。不...

每天向前一小步 2935

如何搭建一个简单的区块链网络

通过本篇文章,你已经了解了如何从零开始搭建一个简单的区块链网络。虽然我们搭建的是一个非常基础的区块链,但它已经具备了区块链的核心特性——去中心化、数据不可篡改和链式结构。随着区块链技术的发展,你可以在此基础上继续探索更多的应用场景和优化方案,进一步深入理解区块链的内部机制,提升自己的技术能力。区块链不仅仅是一个新兴的技术领域,它正在不断改变着我们的生活和工作方式。通过搭建和实验自己的区块链网络,你将更好地理解这一技术,并为未来可能的应用做好准备。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2833

区块链构建:在Python中实现基本区块链的项目

打造区块链 该项目寻求使用Python构建基本区块链的代码。 它的大部分灵感都来自的在线文档。

Eplan P8 API二次开发--插入符号(Symbol)功能(Function)并定义属性

1、目的 使用Eplan API在页中自动插入某个符号并按约定规则自动设置好属性 2. 步骤 一、基础信息 比如要在Eplan中自动插入一个电机的符号并定制属性,我们先要确定要插入的符号名,可以在Eplan中获取如下符号(Symbol)信息 可以知道我们待插入的符号名称为M3_1, 接下来,使用Visual Studio建立类库项目,并引用Eplan Api库 二、获取符号变量(SymbolVariant) 在Eplan中,当一个符号(Symbol)被插入到页中,这个符号的引用即变为一个(Function

如是道程序人生 4534

FOC控制必看:单/双/三电阻电流采样方案全对比(附NXP实战避坑指南)

本文深入对比了FOC控制中单电阻、双电阻和三电阻电流采样方案的优劣与适用场景,重点剖析了采样时序、窗口与ADC转换的工程挑战。针对NXP平台,提供了解决采样窗口过窄的实战方案与配置指南,帮助工程师根据成本与性能需求做出最优选择,并规避常见设计陷阱。

n2o3p4的博客 416

Polars简明基础教程一:Polars快速入门

在这个例子中,我们将添加一个列,其中包含每个舱位中乘客的最大年龄。在Python中(而不是特指Polars),当我们将代码包裹在括号中时,我们可以在新行上调用一个新方法——在这种情况下是select。在这里,我们看到一个使用表达式API的简单示例,其中我们在select语句中选择Pclass、Name和Age列(我们将在第3节中深入了解select语句)。表达式是一个函数,它接受一个Series(或DataFrame中的列)作为输入,并返回一个Series(或DataFrame中的列)。

sosogod的博客 3881

inferCNV包安装问题及解决办法

InferCNV是一个由broad研究所开发的,利用单细胞转录组数据分析肿瘤细胞拷贝数变异(CNV)的工具。基本思路是在整个基因组范围内,通过计算肿瘤细胞关于参考的“正常”细胞的相对表达,利用滑窗思想对邻近的基因相对表达,计算拷贝数。 先贴一个官方安装说明: 官方infercnv安装说明 安装infercnv包: if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager:

m0_51042606的博客 6804

YOLOv11 改进 - 注意力机制 | GC Block(GlobalContext Block)全局上下文块:三重变换捕获全局依赖,提升复杂场景鲁棒性

本文介绍了全局上下文块(GC Block)及其在YOLOv11中的集成应用。GC Block是GCNet的核心组件,结合了NLNet和SENet的优势,通过上下文建模、特征变换和特征融合三个模块,高效捕获特征图中的全局依赖关系,在提高模型性能的同时降低计算成本。我们将GC Block引入YOLOv11,在检测头部分的不同尺度特征图上应用该模块。实验表明,改进后的YOLOv11在目标检测任务中表现良好,展现了GC Block在实际应用中的价值。

魔改工程师的博客 953

汽车UDS诊断详解及Vector相关工具链使用说明——1.1 应用层协议整体介绍

本文我们先从整体的维度来介绍一下应用层协议,每个UDS服务都遵循本文中的协议。 一、SI(Service ID) SI是UDS指令的第一个字节,我们第一篇文章中提到的10等服务就是指这个服务的SI=0x10,它是服务的标识,每个服务的SI都是唯一的。 ...

weixin_42967006的博客 5476

一套适合 ABAP 初级和中级开发人员,从入门到提高的 ABAP 学习教程

曾几何时,ABAP 就是 SAP 的代名词。ABAP 这门编程语言造就了 SAP 名噪一时的 R/3 产品,同时也是如今 SAP 旗舰级产品,SAP S/4HANA 底层的实现语言。 ABAP 不仅代表着 SAP 这家公司在企业级管理软件市场辉煌的过去,ABAP 自身也在不断地进化着。SAP 不仅在本地部署(On-Premise)领域继续保持着自己绝对的统治地位,而且在云应用领域(Software-as-a-Service, 简称 SaaS), 也推出了自己的解决方案,比如 SAP S/4HANA Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5940

基于卷积神经网络的球罐结构损伤识别

球罐结构损伤识别方法研究 摘要:本研究针对球形储罐(球罐)结构健康监测需求,提出基于卷积神经网络(CNN)的损伤识别方法。通过ANSYS有限元仿真构建包含5种裂纹深度的500组振动信号数据集,设计包含卷积层、池化层和全连接层的CNN网络架构。实验结果表明,该方法在训练集和测试集上分别达到98.4%和96.0%的准确率,验证了其在球罐焊缝损伤识别中的有效性。研究提供了完整的MATLAB实现代码,为球罐结构智能化监测提供了技术参考。 关键词:球罐结构;卷积神经网络;损伤识别;振动信号;深度学习

AI的内部世界的博客 122

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 万亿条数据查询如何做到毫秒级响应?
下一篇: Python 从业十年是种什么体验?老程序员的一篇万字经验分享!
PythonJavaPHP
博客等级 码龄7年 116粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值