#53
敲点算法题
瑞吉外卖day4
调整心态 睡眠 及精神
web3
以下是应北京大学肖臻老师《区块链技术与用》公开课的完整教学大纲,综合课程内容、技术模块及前沿扩展,分为核心章节与专题拓展两部分,引用自公开课资料及学员笔记。
📘 一、课程概述与教学目标
课程定位
系统讲解区块链底层技术原理(密码学、数据结构、共识协议)与典型应用场景(比特币、以太坊生态)。
面向计算机科学、金融科技、分布式系统领域的学习者,强调理论与工程实践结合。
核心目标
掌握区块链安全机制设计思想(如去中心化信任、防篡改)。
具备分析行业痛点(如供应链溯源、金融结算)并设计区块链解决方案的能力。
⛓️ 二、比特币技术精讲(BTC)
密码学基础
哈希函数特性(单向性、抗冲突性、谜题友好性)及在区块链中的应用(如Merkle树)。
数字签名原理与公私钥体系,解决身份验证问题。
数据结构与协议
区块链结构:Hash指针、创世块、最长链原则。
Merkle树与验证:轻节点Merkle Proof实现高效交易验证。
共识机制:工作量证明(PoW)、挖矿难度动态调整、51%攻击防御。
关键问题解析
双花攻击(Double Spending)及UTXO模型解决方案。
分叉类型(硬分叉 vs. 软分叉)及对生态的影响。
比特币脚本(Bitcoin Script)的局限性与应用场景。
💎 三、以太坊技术精讲(ETH)
账户模型与数据结构
账户类型:外部账户(EOA)与合约账户,Nonce防重放攻击。
状态存储:MPT(Merkle Patricia Trie)树实现高效状态更新与历史回溯。
三棵树结构:状态树(全局账户)、交易树(区块内交易)、收据树(执行结果)。
共识优化与性能提升
GHOST协议:解决高频出块导致的临时分叉问题,引入叔块奖励机制。
内存硬挖矿算法(Ethash):抵抗ASIC矿机,保障去中心化。
Gas机制:燃料费计算与智能合约执行成本控制。
智能合约与生态事件
智能合约开发框架(Solidity)、部署流程及安全漏洞案例(如TheDAO事件)。
权益证明(PoS)过渡方案(Casper FFG)与以太坊2.0升级方向。
🔮 四、前沿与扩展主题
跨链与扩容技术
Layer2解决方案(如Optimistic Rollup、ZK-Rollup)。
跨链桥(Bridge)实现资产跨链转移的原理与风险。
隐私与安全进阶
零知识证明(ZKP)、同态隐藏技术在匿名交易中的应用。
智能合约安全审计工具(如Slither)及常见漏洞防范(重入攻击、溢出)。
行业应用与趋势
DeFi(去中心化金融)、NFT(非同质化代币)的底层支持逻辑。
元宇宙(Metaverse)与区块链的融合场景分析(课时29)。
📚 五、课程特点与学习建议
实践导向:结合Remix、Truffle等工具演示合约开发,通过案例(如NFT市场)深化理解。
动态更新:涵盖以太坊升级(PoS)、隐私计算(课时28)等前沿内容。
学习资源:
视频公开课:B站搜索“肖臻区块链”(含29节完整课时)。
配套笔记:CSDN博客“肖臻区块链笔记”提供章节技术摘要。
💡 肖臻教授观点:
“区块链技术远非仅限于加密货币(如比特币),其核心价值在于构建去中心化信任基础设施。当前仍处于技术爆发早期,深入理解原理者仍是稀缺人才。”
此大纲覆盖技术深度与行业宽度,适合系统性学习或作为开发参考指南。
以下是北京大学肖臻教授《区块链技术与应用》课程中密码学原理部分的详细笔记整理,结合课程核心内容与公开资料,重点涵盖哈希函数与数字签名两大技术模块。
🔑 一、哈希函数(Hash Function)
哈希函数是区块链的密码学基石,核心特性包括:
抗碰撞性(Collision Resistance)
几乎不可能找到两个不同输入产生相同哈希输出(如
x ≠ y
但H(x) = H(y)
)。
应用:保证数据完整性。例如,比特币区块头包含前一区块哈希值,篡改任一区块会导致后续所有哈希值失效。
⚠️ 注:抗碰撞性依赖实践经验(如MD5已被破解,比特币采用SHA-256)。
隐藏性(Hiding)
哈希值无法反推原始输入(单向性)。
应用:实现“数字密封信封”。例如,预测结果拼接随机数后哈希公布,事后验证时比对哈希值即可证明未篡改。
谜题友好性(Puzzle Friendly)
无法预知输入如何影响输出,适合工作量证明(PoW)。比特币要求矿工寻找满足
H(block header) ≤ target
的随机数(Nonce)。
确定性 & 雪崩效应
同一输入始终输出相同哈希值;输入微小变化(如1比特)导致输出完全不同(例如
"A"
→3A7D
,"a"
→8F1C
)。
区块链中的典型哈希算法:
SHA-256:比特币区块链接与Merkle树。
Keccak-256:以太坊地址生成与状态树优化。
📝 二、数字签名(Digital Signature)
数字签名用于验证交易来源与完整性,基于非对称加密(公钥加密体系):
1. 核心流程
签名生成:
发送方对消息
M
计算哈希值H(M)
。
用私钥加密哈希值生成签名
S
。
签名验证:
接收方用发送方公钥解密
S
得到H(M)'
。
比对
H(M)'
与本地计算的H(M)
,一致则验证通过。
2. 关键特性
不可伪造性:私钥唯一,签名无法被伪造。
不可抵赖性:公钥可验证签名来源,发送方无法否认。
数据完整性:哈希值匹配证明内容未被篡改。
3. 区块链应用
比特币:
私钥代表账户控制权,交易需私钥签名。
地址生成:
私钥 → SHA256 → RIPEMD160 → Base58编码
。
以太坊:
地址 =
Keccak256(公钥)
的最后20字节。
智能合约:预言机数据验证(如Chainlink先哈希上链,链下传递后比对)。
🌐 三、密码学在区块链中的综合应用
Merkle树
分层哈希结构,叶子节点为交易哈希,父节点为子节点哈希组合。
作用:轻节点通过Merkle路径验证交易(如SPV钱包),无需下载全链数据。
抗攻击设计
生日攻击防御:SHA-256碰撞概率极低(约2⁻¹²⁸)。
量子计算威胁:Grover算法可加速哈希碰撞,但当前量子算力不足(需百万级量子比特)。
隐私增强技术
零知识证明(ZKP):Zcash用哈希构建Nullifier防止双花。
同态加密:支持加密数据直接运算(如隐私Rollup)。
🔮 四、前沿挑战与发展
后量子密码学:
NIST推荐SPHINCS⁺(哈希签名方案)抵御量子计算。
算法升级实践:
比特币SegWit引入双重SHA256防御长度扩展攻击。
跨链技术:Cosmos IBC协议通过哈希锁定证明交易真实性。
💎 核心总结
技术 | 核心特性 | 区块链应用场景 |
---|---|---|
哈希函数 | 抗碰撞、隐藏性、谜题友好 | 区块链接、PoW挖矿、Merkle树验证 |
数字签名 | 不可伪造、不可抵赖、完整性 | 交易身份验证、地址生成、智能合约 |
学习提示:肖臻教授强调密码学是区块链的“信任基础设施”,理解其原理是掌握区块链安全机制的前提。建议结合Remix工具实践哈希计算与签名验证,加深对BTC/ETH交易流程的理解。
以下是肖臻《区块链技术与应用》第二课“数据结构”的详细讲解,重点围绕区块链核心数据结构展开,结合比特币实现进行说明:
⛓️ 一、区块链的链式结构(核心)
区块链本质是由哈希指针连接的区块链表,与普通链表的本质区别在于用哈希指针替代了普通指针。
哈希指针(Hash Pointer)
结构:存储前一个区块的内存地址 + 该区块的哈希值(如
SHA-256(区块内容)
)。
作用:
验证数据完整性:修改任一区块内容会导致其哈希值变化,后续所有区块的哈希指针失效。
轻节点支持:只需保存最新区块哈希值即可验证整条链的篡改(如比特币SPV钱包)。
创世区块:首个区块的
prev_hash
硬编码为全0(如000...000
),无前驱区块。
区块结构拆分 每个区块分为两部分:
区块头(Block Header):存储元数据(约80字节),包含关键字段:
字段 | 作用 |
---|---|
版本号 | 标识协议版本(如比特币的 version ) |
前一区块哈希值 | 链接前序区块,形成链式结构(prev_hash ) |
Merkle根 | 当前区块所有交易的Merkle树根哈希值 |
时间戳 | 区块生成时间(Unix时间戳) |
难度目标 | 当前PoW挖矿的难度阈值(bits ) |
Nonce | 随机数,矿工调整以满足难度目标 |
区块体(Block Body):存储交易列表(如比特币的
transactions
)。
交易按Merkle树组织,根哈希值存入区块头。
🌳 二、Merkle树(Merkle Tree)
用于高效验证区块内交易的完整性,本质是哈希二叉树。
结构原理
叶节点:单笔交易的哈希值(如
H(tx1)
)。
非叶节点:子节点哈希拼接后再哈希(如
H(H(tx1) + H(tx2))
)。
根节点(Merkle Root):所有交易哈希的最终摘要,存入区块头。
核心功能
防篡改:修改任意交易会连锁改变父节点哈希直至根节点,导致区块无效。
轻节点验证(Merkle Proof):
存在性证明:全节点向轻节点提供从目标交易到根节点的路径哈希值,轻节点逐层计算验证(复杂度O(log n))。
不存在性证明:需全节点提供完整Merkle树(复杂度O(n)),比特币因交易未排序不支持高效验证。
比特币中的应用
每个区块的区块体交易构建Merkle树,根哈希写入区块头。
轻节点仅保存区块头即可验证交易是否被包含。
🔍 三、数据结构对比与演进
普通链表 vs 区块链
特性 | 普通链表 | 区块链 |
---|---|---|
指针类型 | 内存地址指针 | 哈希指针(地址+哈希值) |
防篡改 | 无 | 修改任一区块导致后续全部失效 |
存储需求 | 需保存全部节点 | 轻节点仅需保存最新区块头 |
Merkle树优化方向
Sorted Merkle Tree:交易按哈希值排序,支持高效不存在性证明(比特币未采用)。
Merkle Patricia Trie(MPT):以太坊采用,结合前缀树压缩和Merkle验证,高效存储账户状态。
⚙️ 四、数据结构如何保障区块链特性
不可篡改性
链式哈希指针 + Merkle树形成双重校验:篡改需重算所有后续区块哈希及Merkle根,计算成本极高。
去中心化
轻节点依赖Merkle Proof验证交易,无需存储全链数据(比特币全节点约400GB,轻节点仅需数MB)。
高效验证
Merkle Proof使交易验证复杂度从O(n)降至O(log n),适合移动设备等低资源环境。
💎 总结:数据结构的核心价值
区块链通过哈希指针链 + Merkle树构建了“可验证不可篡改”的分布式账本:
哈希指针 → 确保链式历史不可逆
Merkle树 → 实现交易高效验证与轻节点支持
区块头/体分离 → 平衡安全性与存储效率
学习建议:结合代码实践(如Python实现Merkle树)或比特币区块浏览器(如blockchain.com)观察真实区块结构,深化理解。
以下是肖臻《区块链技术与应用》第三课“比特币协议”的详细解析,结合课程内容与比特币核心技术原理,从协议目标、核心机制到实际运行进行全面拆解:
⚙️ 一、比特币协议的设计目标
比特币协议的核心是解决去中心化电子现金系统的三大难题:
去信任化(Trustless) 无需银行等第三方,通过密码学与共识机制确保交易真实。
防双花(Double-Spending Prevention) 确保同一笔比特币不被重复使用。
抗审查(Censorship Resistance) 任何人均可参与交易,不受地域或身份限制。
🔗 二、协议核心机制解析
1. 区块链结构与数据不可篡改性
链式哈希指针 每个区块头包含前一区块的哈希值(如
prev_hash
),修改任一区块会导致后续所有哈希失效。
Merkle树 交易哈希值分层聚合为根哈希(存入区块头),轻节点通过 Merkle Proof(路径哈希)验证交易是否存在,复杂度仅O(log n)。
2. 工作量证明(PoW)与共识形成
挖矿本质 矿工寻找随机数Nonce,使区块头哈希值满足:
SHA-256(Block Header) ≤ Target
(目标值由网络难度决定)。
难度动态调整 每2016个区块(约2周)根据全网算力调整Target,维持出块时间约10分钟。
最长链原则 节点默认接受最长链为有效链,攻击者需掌握51%算力才可能篡改历史。
3. UTXO模型:比特币的“账户体系”
未花费交易输出(Unspent Transaction Output) 比特币余额由UTXO集合构成,交易需引用历史UTXO作为输入,并生成新UTXO。 示例: Alice向Bob支付1 BTC:
输入:引用Alice之前收到的某笔UTXO(如2 BTC)。
输出:生成Bob的1 BTC UTXO + Alice的找零1 BTC UTXO。
优势
并行交易处理,避免账户余额锁。
天然支持交易溯源(每笔UTXO可追溯至创世区块)。
4. 脚本系统:可编程的交易验证
锁定脚本(Locking Script)与解锁脚本(Unlocking Script)
锁定脚本(输出端):定义UTXO花费条件(如“需提供Bob的签名”)。
解锁脚本(输入端):提供满足条件的证据(如“Bob的签名”)。 典型脚本:
OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY O``P_CHECKSIG
(验证签名与公钥匹配)。
扩展性 通过脚本可支持多重签名、时间锁等复杂逻辑,为智能合约奠基。
5. P2P网络与交易传播
Gossip协议 节点将交易/区块随机转发给邻居,指数级扩散至全网。
SPV节点(轻节点) 仅下载区块头(约80字节/块),通过Merkle Proof验证交易,存储需求仅全节点的0.1%。
⚠️ 三、协议面临的挑战与解决方案
问题 | 原因 | 改进方案 |
---|---|---|
交易吞吐量低 | 区块大小限制(1MB) | SegWit(隔离见证)扩容 |
能源消耗高 | PoW算力竞争 | 转向PoS(以太坊2.0)或Layer2 |
交易延展性 | 签名可修改不影响交易有效性 | SegWit将签名移出交易ID计算 |
🔮 四、协议演进:分叉与升级
软分叉(Soft Fork)
特点:向后兼容,未升级节点仍可验证交易(如SegWit)。
案例:SegWit将签名数据移至新区块结构,释放区块容量。
硬分叉(Hard Fork)
特点:规则不兼容,导致链分裂(如比特币现金BCH)。
触发条件:社区对协议升级方向分歧(如区块大小从1MB增至8MB)。
💎 总结:比特币协议的核心价值
安全基石:PoW+密码学保障去中心化信任。
经济模型:区块奖励(新币发行)+交易费激励矿工维护网络。
可扩展生态:脚本系统为DeFi、NFT等应用提供底层支持。
学习建议:
使用比特币区块浏览器查看真实交易结构(如输入/输出脚本)。
阅读https://bitcoin.org/bitcoin.pdf第4节“工作量证明”,理解PoW设计动机。
代码实践:用Python模拟UTXO模型交易验证流程。
分布式共识(Distributed Consensus)是分布式系统领域的核心问题,指在由多个独立节点组成的系统中,所有节点如何就某个值(或决策)达成一致,即使部分节点可能发生故障或网络存在延迟/分区。它是构建可靠、一致分布式系统(如区块链、数据库集群、分布式存储)的基础。
一、为什么需要分布式共识?
分布式系统的核心挑战在于节点间的不确定性:
网络不可靠:消息可能延迟、丢失或乱序(如跨数据中心的通信)。
节点故障:部分节点可能宕机、响应慢或恶意行为(如拜占庭节点)。
时钟不同步:节点本地时钟无法保证绝对一致,无法依赖时间戳排序。
典型场景:
数据库集群需要确保多个副本的数据一致(如MySQL主从同步)。
区块链网络需要所有节点对交易顺序和账本状态达成一致(如比特币)。
分布式存储系统需保证多个存储节点的数据副本一致(如Ceph)。
二、分布式共识的核心问题
共识算法需解决以下关键问题:
一致性(Agreement):所有正常节点最终决定相同的值。
有效性(Validity):若所有节点初始提议同一个值,则最终决定必须是该值。
容错性(Fault Tolerance):在部分节点故障(或恶意行为)时仍能达成共识。
终止性(Termination):算法必须在有限时间内结束,避免无限等待。
三、经典共识算法与分类
根据容错能力和假设条件,共识算法分为两类:
1. Crash Fault Tolerance (CFT):容忍节点宕机
假设节点可能宕机,但不会恶意行为(诚实节点)。
代表算法:Paxos、Raft
Paxos(1989年提出):
核心思想:通过“提案-接受”机制,在多个节点间对某个值达成多数派同意。
特点:理论严谨但实现复杂,常被视为分布式共识的“基础模板”。
Raft(2013年提出):
核心思想:将共识过程拆分为“Leader选举”“日志复制”“安全性检查”三个子问题,简化理解与实现。
特点:更易工程化(如etcd、Consul使用Raft),但仅容忍少数节点故障(N/2-1)。
示例:
Kubernetes的etcd使用Raft保证集群配置一致性;
TiDB的TiKV组件依赖Raft实现多副本数据同步。
2. Byzantine Fault Tolerance (BFT):容忍拜占庭故障
假设部分节点可能任意作恶(如发送矛盾信息、伪造数据)。
代表算法:PBFT、PoW、PoS
PBFT(Practical Byzantine Fault Tolerance)(1999年提出):
核心思想:通过多轮消息交换(预准备、准备、提交阶段)验证节点一致性,最终多数派达成共识。
特点:理论可容忍最多f个恶意节点(总节点数N≥3f+1),但通信复杂度高(O(N²))。
应用:早期区块链(如Hyperledger Fabric)、航空航天系统。
PoW(Proof of Work)(比特币提出):
核心思想:节点通过计算难题竞争记账权,最长链规则解决冲突,依赖算力保证安全性。
特点:容忍≤50%算力作恶,但能耗高、效率低。
PoS(Proof of Stake)(以太坊2.0采用):
核心思想:节点按持有代币量和时长投票,权益越高越可能被选为记账节点。
特点:降低能耗,但存在“富者更富”问题。
关键区别:
CFT算法(如Raft)假设节点仅会宕机,通信复杂度低(O(N)),适合企业级应用;
BFT算法(如PBFT)需应对恶意节点,通信复杂度高,但更适合开放网络(如区块链)。
四、共识算法的核心挑战
性能与扩展性:
传统共识算法(如PBFT)的通信复杂度随节点数平方增长,难以支撑大规模节点(如物联网场景)。
解决方案:分片(Sharding)、分层共识(如以太坊2.0的信标链+分片链)。
最终一致性 vs 强一致性:
强一致性(如Raft)要求所有节点实时同步,牺牲部分可用性(CAP定理);
最终一致性(如Gossip协议)允许短暂不一致,适合高可用场景(如Cassandra)。
安全性与活性权衡:
BFT算法需在“防止作恶”(安全性)和“保证进展”(活性)间平衡,例如PBFT通过超时重试机制避免死锁。
五、共识在区块链中的特殊性
区块链网络是典型的“开放、匿名、拜占庭环境”,其共识需额外解决:
激励机制:如何鼓励诚实节点参与(如比特币的区块奖励)。
动态成员管理:允许节点自由加入/退出(如以太坊的PoS验证者选举)。
双花攻击防护:通过共识规则(如最长链原则)确保交易唯一性。
趋势:
从PoW转向PoS(降低能耗);
结合分片和Layer2扩容(如以太坊2.0+Rollups);
跨链共识(如Polkadot的GRANDPA协议)。
六、总结
CFT场景:优先选Raft/Paxos(如数据库、配置管理)。
BFT场景:需权衡性能与安全性(如联盟链选PBFT,公链选PoS/PoW)。
未来方向:高效BFT算法(如HotStuff)、随机化共识(如Algorand)、融合AI的动态共识。
分布式共识的本质是通过规则设计,在充满不确定性的分布式环境中“建立信任”,是区块链、元宇宙等技术的底层基石。
比特币的分布式共识基于工作量证明(PoW)机制,通过算力竞争确保网络节点对交易和账本状态达成一致,核心逻辑如下:
一、核心机制:工作量证明(PoW)
挖矿过程
节点(矿工)收集未确认的交易,打包成候选区块。
通过不断尝试随机数(nonce),计算区块头哈希值,使其满足前N位为0的难度目标(如比特币当前要求前19位为0)。
这个过程需消耗大量算力,类似“解谜”,最先完成的节点获得记账权。
最长链规则
若多个节点同时找到合法区块,网络暂存多条链,后续节点优先在最长链(即包含最多工作量的链)上继续挖矿。
随着时间推移,短链会被淘汰,最终所有节点收敛到同一条链。
二、关键特点
去中心化与安全性
无需中心机构,任何节点均可参与挖矿,只要控制超过50%的算力即可篡改区块链(实际需超51%攻击,成本极高)。
历史交易通过哈希链锚定,修改任意区块需重新计算后续所有区块,几乎不可行。
激励机制
成功挖矿的节点获得区块奖励(比特币)和交易手续费,激励节点持续参与。
奖励每21万个区块减半(约4年),从最初的50 BTC降至当前6.25 BTC。
三、优势与挑战
优势 | 挑战 |
---|---|
抗女巫攻击(需真实算力) | 能耗高(全球矿场年耗电量≈荷兰全国) |
机制简单,易于实现 | 确认速度慢(平均10分钟/区块) |
抗审查性强 | 硬件垄断(ASIC矿机集中算力) |
四、与其他共识机制的对比
共识类型 | 代表项目 | 核心逻辑 | 典型场景 |
---|---|---|---|
PoW | 比特币 | 算力竞争,最长链优先 | 公链(强去中心化需求) |
PoS | 以太坊2.0 | 权益质押,随机选举验证者 | 公链/联盟链(追求效率) |
PBFT | Hyperledger | 多轮投票,容忍拜占庭节点 | 联盟链(低延迟场景) |
五、总结
比特币的分布式共识通过PoW+最长链规则,在无信任的开放网络中实现了去中心化、不可篡改、抗攻击的目标,奠定了区块链技术的基石。但其高能耗和低效率的缺点,也推动了PoS等新型共识机制的探索。