共识 · 创造 · 亲手体验

我们要解决的核心问题是什么?

核心问题定义:一群互不信任的节点,如何对同一份账本达成一致。

我们的方法:我们不仅研究理论,更动手创造。本次分享将通过我们团队的项目,带大家深入浅出地了解三种主流共识算法。

团队贡献简介
  • 资料搜集 毕永娟
  • PPT制作 高雯昊
  • 代码实现 潘春凤
  • 汇报展示 王鑫
  • 网站搭建 王海燕
Q版小动物围坐桌前交换信件的插画
在线体验

直接在页面跑算法(PoW / PoS / PBFT)

不再只看代码——在这里调整参数、点击运行,即可看到随机性和阈值如何影响结果。主题保持原汁原味,逻辑更可视。

提示:难度越高,找到解的时间越长。为保证流畅,最多尝试 120,000 次。
运行结果
等待运行...
说明:基于质押权重的随机抽签。质押越多,被选中的概率越高。
运行结果
等待运行...
规则:PBFT 需满足 N ≥ 3f + 1,阈值为 2f + 1。这里随机模拟每个节点投票。
运行结果
等待运行...

我们的创造之旅:团队分工

引言:一个成功的项目,源于团队每一个成员的精心付出。

王海燕 · 网站架构师

负责将复杂的算法逻辑转化为直观、可交互的前端界面。

潘春凤 · 核心开发者

编写了三种共识算法的核心 Python 模拟代码,为项目打下坚实基础。

毕永娟 · 知识探勘者

搜集和整理了海量技术文档与资料,确保内容的准确性和深度。

高雯昊 · 视觉设计师

将技术内容与美乐蒂主题融合,打造了本次分享的视觉体验。

王鑫 · 故事讲述者

负责整合团队成果,并在此刻与大家分享我们的探索故事。

三种主流共识 · 亲手跑过的代码

共识算法模拟

从 PoW 到 PoS 再到 PBFT,核心代码均由潘春凤编写,并融入中文提示方便快速理解运行结果。

PoW:随机数挖矿

描述:模拟矿工不断修改 Nonce,寻找满足特定难度(如哈希以“0000”开头)的值。

import hashlib
import time

def pow_mining(block_data, difficulty):
    print(f"--- [PoW] 开始挖矿:{block_data} ---")
    nonce = 0
    target = "0" * difficulty
    start_time = time.time()
    while True:
        input_string = f"{block_data}{nonce}"
        hash_result = hashlib.sha256(input_string.encode()).hexdigest()
        if hash_result.startswith(target):
            end_time = time.time()
            print(f"✓ 挖矿成功!")
            print(f"哈希值: {hash_result}")
            print(f"随机数(Nonce): {nonce}")
            print(f"耗时: {end_time - start_time:.4f}秒")
            return hash_result
        nonce += 1

# 运行测试
pow_mining("交易数据: A转给B 10个BTC", difficulty=4)
PoS:权重抽签

描述:基于“质押权重”的随机抽签算法,质押越多,被选中的概率越高。

import random

class Validator:
    def __init__(self, name, stake):
        self.name = name
        self.stake = stake  # 质押数量

def select_validator_pos(validators):
    total_stake = sum(v.stake for v in validators)
    print(f"\n--- [PoS] 开始抽签 (总质押: {total_stake}) ---")
    pick = random.uniform(0, total_stake)
    current = 0
    for validator in validators:
        current += validator.stake
        if current > pick:
            probability = (validator.stake / total_stake) * 100
            print(f"🎟️ 选中节点: {validator.name}")
            print(f"质押量: {validator.stake}")
            print(f"理论中选率: {probability:.1f}%")
            return validator.name

# 运行测试
nodes = [
    Validator("账户A", 10),
    Validator("大户B", 1000),
    Validator("矿工C", 100),
]
select_validator_pos(nodes)
PBFT:阈值投票

描述:模拟 PBFT 中的投票阈值检查(N ≥ 3f + 1),其中 N 为节点数,f 为可容忍的作恶节点数。

import random

def pbft_consensus(nodes, message):
    print(f"\n--- [PBFT] 开始共识: {message} ---")
    n = len(nodes)             # 总节点数
    f = (n - 1) // 3           # 可容忍的作恶/故障节点数
    threshold = 2 * f + 1      # 通过所需的赞成票
    votes = 0

    for node in nodes:
        if random.random() < 0.8:  # 模拟80%概率投赞成票
            votes += 1
            print(f"[✔] 节点 {node} -> 投赞成票")
        else:
            print(f"[✘] 节点 {node} -> 拒绝或超时")

    print(f"最终结果: 赞成票 {votes} / 阈值 {threshold}")
    if votes >= threshold:
        print("🎉 达成共识!区块已确认。")
    else:
        print("❌ 共识失败!票数不足。")

# 运行测试
node_list = ["Node_1", "Node_2", "Node_3", "Node_4"]
pbft_consensus(node_list, "提议: 银行A向银行B转账100万")
嘉宾介绍③ · 精英会长 PBFT

小圈子商量清楚再写账本

PBFT 会长管理着一个私密的高端俱乐部(联盟链)。任何决定都必须经过三轮严格投票,超过 2/3 的核心成员同意才能通过。效率和准确是她唯一的追求。

“小圈子商量清楚再写账本。”
PBFT 会长与小动物协作的插画
亲手体验

我们的交互式演示网站

理论是抽象的,体验是直观的。为了让大家更深入地理解这些算法的运作流程,我们的小组成员 王海燕 专门制作了一个在线演示网站。

行动号召

扫描二维码,亲自上手操作,感受不同共识算法的差异。欢迎把你的体验反馈告诉我们!

共识算法演示网站二维码与界面预览
特别奖励

一份给勇敢分享者的礼物

核心内容:为了鼓励创造和分享,对于刚刚起来分享想法的同学,我们准备了一份特别的礼物。

奖励详情:我(王鑫)会为你提供一次免费的个人网站部署服务!

具体说明:

  • 就像你刚才扫码打开我们的网站一样,我们可以帮你把自己的作品(例如个人简历、课程项目、创业构想)部署到线上。
  • 可以是一个可在线访问的个人网站,或是为你创业项目准备的展示页,或任何你想用代码分享的东西。

结语:我们的旅程暂告一段落,而你的创造之旅,现在就可以开始。

奖励详情的粉色说明页
开放式邀请

你的想法,价值千金

技术的魅力不仅在于理解,更在于启发。听完我们的分享,你是否有一些新的想法、疑问,或者任何想问的东西?

现在,我们想把舞台交给你们。

如果有同学愿意分享自己的任何想法——无论是一个问题,一个脑洞,或是一个项目构思,我们都非常欢迎。

问题
脑洞
项目构思
随想
开放式分享的插图