Python实现区块链(代码+思维导图)附详细注释

根据Tiny熊老师《区块链入门与去中心化应用实战》一课整理

 

思维导图png版:链接:https://pan.baidu.com/s/1VhUyC8MtvLLImP-8vpzdCA

密码:sl6e

思维导图pdf版:链接:https://pan.baidu.com/s/1mMXjt9jwqln2eKA4TwFs9Q

密码:75jj

代码:

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

import hashlib
import json
import requests
from uuid import uuid4
from time import time
from flask import Flask, jsonify, request
from  urllib.parse import urlparse
from argparse import ArgumentParser

class Blockchain:

    #构造函数
    def __init__(self):
        # 一个元素对应一个块
        self.chain = []
        # 保存当前的交易信息,一个元素对应一个交易实体
        self.current_transactions = []
        # 保存节点信息,set()中每个值都是独一无二的
        self.nodes = set()

        # 创建创世区块,不用计算,没有内容
        self.new_block(proof = 100,previous_hash = 1)

    #注册节点
    def register_node(self,address:str):
        #地址格式:http://127.0.0.1:5001
        #通过urlparse解析地址
        parsed_url = urlparse(address)
        #将地址中的netloc部分提取出来
        self.nodes.add(parsed_url.netloc)

    #验证hash值,看是否是有效链
    def valid_chain(self,chain)->bool:
        #取首块
        last_block = chain[0]
        #当前索引(第一个块索引是0不用计算,则从第二个块——索引是1的开始计算)
        current_index = 1

        #遍历这个链
        while current_index <len(chain):
            block = chain[current_index]
            #如果当前块的前一个哈希值属
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值