【区块链时代】如何用Python实现区块链中的区块结构(快速入手01)

这篇具有很好参考价值的文章主要介绍了【区块链时代】如何用Python实现区块链中的区块结构(快速入手01)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

区块结构的详细介绍,容易入手:
【区块链时代】如何理解区块链中共识机制以及在区块链中分叉是如何解决的

一、区块链开发环境准备

HTTP协议
Postman / curl 测试工具
Python
Pycharm
Pip工具
Flask/ request

二、区块的结构

{
    "index":0,    #索引
    "timestamp":"",  #时间戳
    "translations": [  #交易信息
        {
            "sender":"",  #交易发送者
            "recipient": "", #交易接收者
            "amount": 5, #交易金额
        }
    ],
    "proof": "", #工作量证明
    "previous_hash":"", #上一个区块hash值
}

三、创建一个区块

import hashlib
import json
from time import time,sleep

class Blockchain:

    def __init__(self):
        self.chain = []
        self.current_translations = []
        # 创建创世区块
        self.new_block(proof = 100 , previous_hash = 1)

    def new_block(self,proof,previous_hash = None):
        block = {
            'index': len(self.chain) + 1,
            'timestamp': time(),
            'translations': self.current_translations,
            'proof': proof,
            'previous_hash': previous_hash or self.hash(self.last_block),
        }
        self.current_translations = []
        self.chain.append(block)
        return block

    # 实现交易
    def new_translation(self,sender,recipient,amount) -> int:
        self.current_translations.append(
            {
                "sender":sender,
                "recipient":recipient,
                "amount":amount
            }
        )
        return self.last_block['index'] + 1

    @staticmethod
    def hash(block):
        block_string = json.dumps(block,sort_keys=True).encode() # 将block(json对象)转换为字符串
        return hashlib.sha256(block_string).hexdigest()

    @property
    def last_block(self):
        return self.chain(-1)

    def proof_of_work(self,last_block:int) -> int:
        proof = 0
        while self.valid_proof(last_block,proof) is False:
            proof += 1
        print("proof is ",proof)
        return proof

    def valid_proof(self, last_proof:int, proof:int) -> bool:
        guess = f'{last_proof}{proof}'.encode()
        guess_hash = hashlib.sha256(guess).hexdigest()
        sleep(1)
        print("guess_hash is ",guess_hash)

        # return guess_hash[0:4] == "0000"
        if guess_hash[0:4] == "0000":
            return True
        else:
            return False

# 测试
testPow = Blockchain()
testPow.proof_of_work(100)

结果如下:

guess_hash is  ccbde76c925125361a6ab2ec97dbb0bb3376bd5f165ca71b8cf9b1851fce1251
guess_hash is  6fe3a4d4ab5e4dbf25ad2e6c5a9e177b3e8e9728fcd60f1bbf75e30592cc7d61
guess_hash is  7b501a4208b6b1a3afe9249a145f73df675eb13a0888b44d6e746f285320fd08
guess_hash is  08936563aaa2e39c721bfb074529904ffae85d2869493405d51442e25b5f1551
guess_hash is  81c5cd1bcca9c78d8d51c76dfb1770bf6509f09c3760179060f12057cf2281ee
guess_hash is  caf42c350b933954e087b008bb5f8457f6cd247f4c06788ecd804a3a8c35cfe1
guess_hash is  c20da575724013406f330c1e2646d7b8cf2bda2abd60c150da1226c9bfda64cc
guess_hash is  7ee9410967a25bb5fa1e216346ae62567594f8c866bfbb1f4c750799cf178cda

四、实现节点通信功能

from flask import Flask
from blockchain import Blockchain

app = Flask(__name__)

@app.route('/index',methods=['GET'])
def index():
    return "Hello BlockChain"

# 添加新的交易
@app.route('/transactions/new',methods=['POST'])
def new_transaction():
    return "我们添加新的交易"

# 挖矿
@app.route('/mine',methods=['GET'])
def mine():
    return "挖矿进行中~~~~~~~~~~~~~~~~~~~"

# 返回完整区块链信息
@app.route('/chain',methods=['GET'])
def full_chain():
    return "返回完整区块链信息"

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5000)

在下一篇博客中将重点介绍节点之间通信过程中如何实现各个功能模块。文章来源地址https://www.toymoban.com/news/detail-557430.html

到了这里,关于【区块链时代】如何用Python实现区块链中的区块结构(快速入手01)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 科普|区块链中的Merkle Tree

    什么是Merkle Tree? - Merkle Tree也就是Merkle树,中文译名还有梅克尔树或默克尔树,因为这是一棵用哈希值搭建起来的树,树的所有节点都存储了哈希值,所以也叫哈希树,英文名为Hash Tree。默克尔树通常情况下看着是一棵倒置的树型结构,根节点在顶部,分叉向下,叶子节点

    2024年02月02日
    浏览(13)
  • 区块链中的货币与现金系统

    摘  要 : 区块链技术是近年来备受关注的一项新兴技术,它以去中心化、不可篡改和透明等特点,为各个领域的应用提供了全新的解决方案。区块链技术的发展不仅对传统金融、物流、能源等行业带来了深刻的变革,同时也推动了数字经济和数字社会的快速发展。在区块链技

    2024年02月04日
    浏览(21)
  • QLearning在区块链中的应用

    非常感谢您的阅读。我将以专业的技术语言撰写这篇深入的技术博客文章。 区块链作为一种分布式账本技术,凭借其去中心化、不可篡改、透明公开等特性,在金融、供应链管理、数字资产交易等领域广受关注和应用。而强化学习算法Q-Learning作为一种有效的智能决策方法,近年

    2024年04月15日
    浏览(16)
  • 区块链中的共识机制以及共识算法

    目录 什么是共识 什么是共识机制 共识机制类型 1、基于工作证明(Proof of Work PoW) PoW的特点

    2024年02月11日
    浏览(15)
  • (11-3-01 )检测以太坊区块链中的非法账户

    源码和数据集下载在本篇最后 以太坊(Ethereum)是一种基于区块链技术的开源平台和加密货币。它于2015年由Vitalik Buterin和Gavin Wood等开发者创建,并成为比特币之后最受欢迎的加密货币之一。以太坊不仅支持加密货币交易,还为开发者和企业提供了构建去中心化应用程序的强

    2024年02月02日
    浏览(12)
  • 区块链中的 Gas 费是什么?我一定要交么?

    经常使用以太坊等区块链的人,对于 Gas 这个词一定不陌生。那么,Gas 是什么呢? Gas 在英文中是指“燃料、汽油”的意思,在区块链当中,它也的确和“汽油”有着类似的功能。区块链是一个由无数节点共同构成的去中心化网络,在这个网络中,每一个节点都可以看做是一

    2024年02月11日
    浏览(14)
  • 浅析区块链中的数据可用性采样技术(DAS)

    任何一条区块链中,数据可用性都是一个必不可少的关键性内容。在当今区块链主流采用的欺诈证明的乐观系统或有效性证明系统中,都需要“数据可用性”进行验证,确保系统活跃性。 在早期的区块链项目中,用户需要下载整个数据块来确保数据可用性。简答来说,就是用

    2024年02月11日
    浏览(21)
  • (11-3-7 )检测以太坊区块链中的非法账户:模型评估

    11.3.7  模型评估 模型评估(Model Evaluation)是在机器学习和统计建模中的重要步骤,用于评估构建的模型的性能和有效性。它涉及使用不同的指标和技巧来量化模型在处理数据和进行预测时的表现,并帮助确定模型是否足够好以满足特定任务的需求。 ( 1 ) 对模型进行全面评

    2024年02月02日
    浏览(15)
  • J9数字论:如何理解区块链中的公链,私链,侧链,联盟链

    区块链简而言之,就是一个分散式的记账本,有着点对点交易查询,公正,透明,可追溯,不可篡改,去中心化的特点。 区块链在大类上被分为公共区块链(公链),联盟区块链和私有区块链,TVL和用户量最大的公链当属以太坊。而除以太坊以外,其他公链在自身定位分类或

    2024年02月12日
    浏览(17)
  • (11-3-03)检测以太坊区块链中的非法账户: 数据分析(2)

    ( 1 1)再次 获取数据集的列名,具体实现代码如下所示。 ( 1 2) 根据指定的相关性阈值(0.7),选择相关性超过阈值的列,并将这些列的名称存储在 to_drop 列表中。最后,打印输出需要删除的列数。具体实现代码如下所示。 执行后会输出: ( 1 3) 列表to_drop 包含了根据

    2024年02月02日
    浏览(16)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包