本文档梳理比特币、以太坊、Solana 三大公链的架构设计思路,理解区块链开发者的设计哲学,以及各自面临的技术取舍。
比特币要解决的核心问题:是否可以有一种电子现金,实现点对点交易,不需要中心化金融机构,同时避免双花。
| 年份 | 方案 | 技术 | 进展 |
|---|---|---|---|
| 1983 | eCash | 盲签名 | 实现匿名性,未解决双花 |
| 1997 | HashCash | 工作量证明(PoW) | 一定程度防双花 |
| 1998 | B-money | 分布式记账 | 缺乏有效共识机制 |
| 2008 | 比特币 | PoW + 分布式账本 + 区块链 | 完整解决双花 |
建立一个不会被人操控的去中心化银行,并且永远不会宕机的系统。为此设计了分布式账本及编程能力受限的比特币。
哈希树支持轻量验证:无需下载完整区块数据,仅通过 Merkle Path 即可验证交易是否包含在区块中。
比特币采用 UTXO(未花费交易输出)模型,交易由输入和输出组成,多个输出可以汇总。
区块包含区块头和交易列表,区块头中包含前一区块哈希、Merkle Root、时间戳、难度目标等。
锁定方式:
范例 P2PKH(Pay-to-PubkeyHash):
scriptPubKey: OP_DUP OP_HASH160 <PubkeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <Sig> <PubKey>UTXO 交易脚本被成功执行的条件:脚本执行结果为"成功"(栈顶为 true)。
比特币栈虚拟机被故意设计成图灵不完全,因此所有验证都可以在可预测的时间内完成。对验证区块有威胁的操作符被禁用:
OP_CAT、OP_SUBSTR、OP_LEFT、OP_RIGHT、OP_2MUL、OP_2DIV、OP_MUL、OP_DIV、OP_MOD、OP_LSHIFT、OP_RSHIFT
弥补比特币智能合约功能有限的问题,并确保不能受到 DoS 攻击。为此设计了可燃烧的以太币(Gas 机制)。
以太坊核心数据结构,分三步演进:
graph LR
A["查找树 Trie"] --> B["基数树 Patricia Trie<br/>路径压缩"]
B --> C["哈希基数树 MPT<br/>Merkle + Patricia"]
MPT 优势:
以太坊的执行流程:
| Validity Proofs | Fraud Proofs | |
|---|---|---|
| Data on-chain | ZK-Rollup | Optimistic Rollup |
| Data off-chain | Validium | Plasma |
L2 的通常目标是提高区块链的可扩展性。
弥补以太坊的吞吐量和速度限制,在不牺牲去中心化的前提下实现横向扩展性。为此设计了全局同步的分布式系统。
| 对比项 | 传统基于超时的分布式算法 | 全局同步的分布式算法 |
|---|---|---|
| 分布式目的 | 允许进程独立操作 | 系统实际是单一系统 |
| 同步性质 | 异步操作 | 所有进程大致同时做同一件事 |
| 同步方式 | 依赖超时机制 | 所有进程在同一时间做同一件事 |
来自 Leslie B. Lamport(1984)的分布式系统理论
"节点冗余度"指网络中完成相同计算或验证的次数。这种冗余确保了网络安全性和数据一致性。
情况一:不可并行的交易
Solana 的并行处理在需要顺序执行的交易时性能下降。如铸造 NFT 需要顺序处理以确保不被重复铸造,不能在所有 4096 个核心上同时执行。顺序处理能力接近以太坊(每秒几十到几百笔)。
情况二:Leader 宕机
当 Leader 节点宕机时,需要等待下一个 Leader 接替,导致短暂停顿。
EVM vs SVM 对比:
| 特性 | EVM | SVM |
|---|---|---|
| 执行方式 | 顺序执行 | 并行执行(Sealevel) |
| 扩展方向 | 垂直 | 水平 |
| 智能合约语言 | Solidity | Rust/C |
| 状态模型 | 账户模型 | Account 模型 + 显式声明读写 |
Solana 实现高性能和低延迟的核心原因是采用了并行处理和时间戳技术(PoH)。
未来区块链的设计目标:解决效率与安全的问题,并且共识依旧足够去中心化。MPC、ZK 等技术都在大范围实验中。
graph TB
subgraph "Bitcoin"
B1["UTXO 模型"]
B2["图灵不完全脚本"]
B3["PoW 共识"]
end
subgraph "Ethereum"
E1["账户模型 + MPT"]
E2["图灵完全 EVM"]
E3["PoS 共识 + Gas"]
end
subgraph "Solana"
S1["Account 模型"]
S2["SVM + Sealevel 并行"]
S3["PoH + PoS"]
end
B1 --> E1
E1 --> S1
B2 -->|"弥补编程局限"| E2
E2 -->|"弥补吞吐量局限"| S2
三大公链各有设计取舍:比特币追求安全与去中心化,以太坊追求可编程性,Solana 追求高性能。理解它们的设计思路,有助于设计新的区块链系统。