根据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] #如果当前块的前一个哈希值属