区块链系统设计进阶:性能、智能合约、共识、治理与公私链架构
区块链真正难理解的地方,不是哈希、签名或区块结构本身,而是这些机制放进一个开放分布式系统后产生的工程权衡:节点越开放,共识和数据传播越昂贵;执行能力越强,状态同步与安全边界越复杂;治理越自动化,投票权、激励与攻击面也越需要重新设计。本文从交易性能和“去中心化”的关系出发,串起智能合约与以太坊、Token 标准、公链项目的架构选择、联盟链与 Hyperledger、比特币扩容之争以及链上治理,并结合今天的技术现状校准 2018 年以来已经发生变化的实现方式。
从“去中心化”回到系统设计本身
讨论区块链时,“去中心化”很容易被当成一个二元标签:某个系统要么去中心化,要么中心化。但真正做系统设计时,这种划分太粗糙了。更有用的方式,是把它拆成几个可以观察的维度:谁能加入网络、谁能验证交易、谁能生产区块、谁能修改协议、谁保管资产、谁能够阻止交易,以及普通参与者能否独立验证整个系统。
因此,P2P(Peer-to-Peer)和去中心化并不是同一个概念。P2P 描述的是网络连接和通信形态,去中心化则同时涉及权限、共识、治理、资产控制和系统依赖。一个网络完全可以采用 P2P 通信,却只允许少数节点参与记账;也可以有大量节点保存账本,但协议升级实际上由很少的主体决定。
如果把“是否去中心化”改写为“信任放在哪里”,很多争论会清楚很多。传统中心化系统把信任集中在平台和数据库管理员;比特币把信任拆到 PoW、全节点验证、经济激励和社会共识之间;以太坊把执行规则放进 EVM,把共识交给 PoS 验证者,同时把扩容逐渐交给 Layer 2;Fabric 则明确承认参与者是许可制组织,再用身份、背书策略和排序服务约束它们之间的协作。
这也解释了一个经常出现的误解:区块链 TPS 低,并不必然意味着“交易效率低”。TPS 只描述系统单位时间内能够确认或执行多少笔交易,而一笔现实业务的总效率还包括开户、对账、清算、审计、跨机构协调、争议处理和最终结算。如果一个共享账本能把原本需要多个机构反复核对的流程合并掉,即使账本本身的 TPS 不如单机数据库,它仍然可能降低整个交易生命周期的摩擦成本。
当然,这并不意味着 TPS 不重要。只要系统面向支付、交易撮合、游戏或高频状态更新,吞吐、延迟和最终性就会直接决定应用是否可用。真正的问题不是“区块链为什么慢”,而是:为了让互不完全信任的参与者共同维护一个状态机,我们愿意为安全、开放性和可验证性支付多少性能成本?
区块链性能:TPS 背后真正受什么限制
TPS 不是一个孤立的数字
最直观的 TPS 可以粗略写成:
[
TPS \approx \frac{\text{每个区块可容纳的有效交易数}}{\text{平均出块或确认间隔}}
]
但“每个区块可容纳多少交易”又受到区块大小、Gas 上限、单笔交易复杂度、执行器性能、磁盘和内存、网络传播速度等因素限制;“多久能确认”则与共识协议、验证者数量、网络拓扑、最终性规则和容错目标有关。所以只盯着区块大小或 CPU 性能,很容易把问题看窄。
早期 DPoS 讨论中常用过一种启发式表达:
[
TPS \propto \frac{block_size \times network_bandwidth \times witness_performance}
{block_time \times witness_count}
]
它不是一个普适的严格公式,但表达了一个重要直觉:区块更大、节点更快、网络更好、出块更频繁,都可能提升吞吐;而验证者越多、传播路径越复杂,共识和复制成本往往越高。工程上真正难的是这些变量彼此耦合。例如把区块做得很大,短期能塞进更多交易,却会增加传播时间、磁盘增长速度和普通节点运行成本;一旦运行全节点变得昂贵,参与验证的人减少,系统又可能向中心化方向移动。
因此,一个“百万 TPS”的数字如果不说明测试条件,几乎没有比较意义。至少要同时问:
- 是单节点执行吞吐,还是全网达成共识后的吞吐?
- 是简单转账,还是包含复杂合约执行?
- 节点有多少、分布在哪里、网络延迟是多少?
- 最终性是概率性的还是确定性的,需要等待多久?
- 数据是否全部落在 Layer 1,还是大部分在链下或 Layer 2?
- 测试是否包含签名验证、状态持久化、索引、跨分片通信等真实成本?
把这些条件拿掉,只比较 TPS,就像拿数据库本地内存 benchmark 和跨洲三副本事务系统比较 QPS,数字可以很漂亮,但没有工程意义。
CAP 可以帮助思考,但不能机械套用
区块链是分布式系统,因此经常有人借 CAP 定理解释“去中心化和性能不能兼得”。这个方向有启发性,但需要把概念校准一下。
CAP 中的 C 是 Consistency,经典语义接近线性一致性,而不是“最终一致性”;P 是在网络分区发生时系统仍能继续按其设计目标工作;A 则要求每个请求都能从非故障节点获得响应。CAP 讨论的是发生网络分区时,一致性和可用性之间的取舍,它本身并不能直接推出“节点越多 TPS 必然越低”,也不能把所有区块链简单归类为某个三角形中的一个点。
区块链更现实的性能约束来自下面这些因素共同作用:
- 交易和区块必须在网络中传播;
- 多个参与者必须验证相同规则;
- 拜占庭环境下需要防止恶意提议、双花或冲突状态;
- 状态和历史需要被复制或以某种方式证明可用;
- 普通节点运行门槛不能高到只剩少数数据中心能够参与。
所以,更准确的说法是:开放验证、拜占庭容错、低节点门槛、高吞吐、低延迟和强最终性之间存在持续的工程张力,但它不是一个只靠 CAP 就能证明的“不可能定理”。 后来的 Rollup、数据可用性采样、零知识证明、状态通道等技术,本质上都在重新安排这些成本,而不是把它们凭空消灭。
提升吞吐的几条主要路线
最直接的路线是修改 Layer 1 参数:增大区块、缩短出块间隔、提高 Gas 上限、要求更高性能硬件。这种方式容易理解,也能快速提高峰值吞吐,但代价同样直接——区块传播更慢、链增长更快、节点成本更高,极端情况下会降低验证者的地理和组织多样性。
第二条路线是减少参与共识的记账节点数量,或者提高准入门槛。DPoS、PBFT/dBFT、许可链中的 Raft/BFT 都属于不同程度的这种思路。参与者更少、网络条件更可控,通常可以获得更短的确认时间和更高吞吐,但信任模型也随之变化。BitShares、EOS、NEO 和 Fabric 都可以从这个角度理解:它们不是“比 Bitcoin/Ethereum 更先进所以更快”,而是选择了不同的验证者组织方式和容错假设。
第三条路线是并行化。早期资料讨论的网络分片和状态分片,都试图让不同节点只处理整个状态或交易集合的一部分,而不是所有节点重复做全部工作。这个方向的难点从来不是“把数据切开”本身,而是跨分片交易、共享状态、数据可用性、验证者分配和安全性如何处理。
第四条路线是把高频交互移出主链,只把结算结果或必要证明留在 Layer 1。比特币 Lightning Network 使用支付通道,把大量中间状态留在链下;Ethereum 今天则主要采用 Rollup-centric 路线,让 Optimistic Rollup 或 ZK Rollup 在 Layer 2 批量执行交易,再把数据和证明/承诺提交到 Ethereum。Ethereum 早期路线图中那种“把执行状态直接切成多条 shard chain”的方案已经不再是当前主线,今天的 Danksharding 更侧重为 Rollup 提供廉价、可扩展的数据可用性。
flowchart TB
A[扩展区块链吞吐] --> B[Layer 1 参数扩容]
A --> C[缩小或许可化共识集合]
A --> D[并行执行 / 分片]
A --> E[Layer 2 / 链下执行]
B --> B1[更大区块 / 更高 Gas Limit]
B --> B2[更短区块时间 / 更强硬件]
C --> C1[DPoS]
C --> C2[PBFT / dBFT]
C --> C3[许可链 Raft / BFT]
D --> D1[状态或执行分片]
D --> D2[并行交易执行]
D --> D3[数据可用性分片]
E --> E1[支付通道 / Lightning]
E --> E2[Optimistic Rollup]
E --> E3[ZK Rollup]
B1 -.代价.-> X[节点成本与传播压力]
C1 -.代价.-> Y[验证者集中与治理风险]
D1 -.代价.-> Z[跨分片协调复杂度]
E1 -.代价.-> W[链下状态与流动性管理]
这几条路线并不是互斥的。现代区块链往往同时使用多种手段:Layer 1 提供高安全性结算,Layer 2 承担大部分执行,数据层优化 Rollup 数据发布,再配合更高效的客户端和网络协议。所谓“扩容”,已经从单纯提高一个链的 TPS,变成了重新设计整套执行、数据与结算分层。
智能合约:把区块链从“记账系统”变成“可编程状态机”
智能合约并不是一份电子法律合同
Smart Contract 这个词由 Nick Szabo 在 20 世纪 90 年代系统化提出。它更接近“可以由计算机自动执行和验证的协议规则”,而不是把纸质合同扫描成 PDF 再放到链上。
从软件工程角度看,一份智能合约至少包含三件事:
- 明确的状态;
- 对状态进行读取和修改的确定性规则;
- 谁能够触发这些规则以及触发后如何验证。
自动售货机经常被当成智能合约的类比:投入满足条件的金额,机器就按照预先写好的规则发货,不需要每次都找一个人工柜员重新确认。但区块链智能合约比自动售货机多了一层关键特性——程序状态和执行结果由多个节点共同验证,单个运营方不能随意改掉执行历史。
比特币其实已经具备有限的“智能合约”能力。Bitcoin Script 可以表达签名条件、多重签名、时间锁等支付约束,只是它有意保持语言和执行模型的限制。Ethereum 的关键创新,是把这件事进一步推广成一个通用的、图灵完备的合约执行平台:开发者不只定义“这笔钱能不能花”,还可以定义复杂的共享状态和业务规则。
EVM、Solidity 与世界状态
Ethereum 可以把自己理解成一台全网共同维护的状态机。Solidity 是常用的高级语言,源代码编译成 EVM Bytecode 后部署到链上;EVM(Ethereum Virtual Machine)负责在每个执行节点上按照相同规则运行字节码。
EVM 的隔离性非常重要。合约不能像普通服务器程序一样任意打开本地文件、访问操作系统进程或直接发起 HTTP 请求,否则不同节点很难保证确定性执行。同一笔交易必须让不同节点得到相同结果,因此链外信息通常需要通过 Oracle 等机制显式引入,而不能由合约自己“随便请求一个网页”。
Ethereum 的账户模型可以先分成两类:
- EOA(Externally Owned Account):传统上由私钥控制,能够主动签名并发起顶层交易;
- Contract Account:地址对应合约代码和存储,由交易或其他合约调用触发执行。
2018 年资料里常把“交易”和“消息”并列:EOA 发起的是 transaction,合约调用另一个合约则被描述为 message call。今天更常见的工程表述是:只有顶层交易需要被用户签名并进入交易池,合约执行过程中可以产生内部调用(call),这些调用共享同一笔交易的执行上下文,不是独立上链的外部交易。
sequenceDiagram
participant U as 用户/钱包 EOA
participant R as RPC 节点
participant P as 交易池
participant V as 区块提议者
participant E as EVM
participant S as 世界状态
participant C as 其他合约
U->>R: 签名交易
R->>P: 广播并进入交易池
P->>V: 选择交易进入区块
V->>E: 执行交易
E->>C: CALL / STATICCALL 等内部调用
C-->>E: 返回执行结果
E->>S: 写入状态变更
S-->>V: 新状态根
V-->>R: 区块传播与共识确认
R-->>U: receipt / logs / status
这个模型带来两种同时存在的性质。一方面,合约一旦被确认,所有遵循相同规则的节点都能够验证执行结果,单点篡改几乎没有意义;另一方面,所有状态变更都需要网络共同验证,因此计算和存储都比普通云服务器昂贵得多。智能合约不是“免费、永不宕机的后端”,它是一种把可信执行成本显式化的共享计算模型。
Gas 为什么不能简单等价为 ETH
Gas 是 EVM 的资源计量单位。不同 opcode 的计算、内存扩展、存储写入等操作具有不同 Gas 成本;用户为交易指定可接受的费用,最终再用 ETH 支付。
把“资源单位”和“货币单位”分开非常关键。如果直接规定“执行一次 ADD 消耗 0.000001 ETH”,ETH 市场价格变化就会直接改变每条指令的经济意义。Gas 让协议先定义“这个操作大约消耗多少计算/状态资源”,再由费用市场决定当前一个单位 Gas 值多少钱。
Gas 还有一个更基础的安全作用:给每次执行设置资源上界。 图灵完备合约可能出现死循环或极端复杂路径,如果没有 Gas,恶意或有 Bug 的程序可以无限占用全网执行资源。交易一旦耗尽 Gas,当前调用会失败并回滚其状态修改,但已经消耗的计算资源仍需要付费。
2018 年的以太坊还是 PoW + Ethash 挖矿时代,当时矿工执行交易并获得区块奖励和手续费。这个部分今天已经彻底变化:Ethereum 在 2022 年 The Merge 后切换到 PoS,主网不再进行 Ethash 挖矿,区块由验证者提出和证明。EVM、账户、交易和 Gas 模型仍然是执行层核心,但“矿工执行合约、挖 5 ETH 区块奖励”只能作为历史背景理解,不能再当作当前 Ethereum 的运行方式。
合约部署后“很难改”到底意味着什么
合约字节码部署到一个普通地址后,代码通常不能原地修改。这使得智能合约具备很强的可验证性,但也让 Bug 代价非常高。2016 年 The DAO 事件之所以重要,正是因为“代码按规则执行”和“社区认为结果是否应该被接受”发生了冲突,最后 Ethereum 通过硬分叉处理事件,并产生 Ethereum Classic。
工程实践里通常有三种思路处理升级:
- 部署新版本合约,让应用和用户迁移;
- 使用 Proxy,把稳定地址与可替换逻辑实现分离;
- 把关键参数和治理权限显式设计进合约。
第二、第三种方式提高了升级能力,同时也引入新的信任假设:谁拥有升级权限?多签是否足够?是否有 Timelock?治理攻击能否替换逻辑?所以“不可修改”并不是越强越好,“可升级”也不是越灵活越好,仍然是安全性与治理能力之间的取舍。
Token 标准:真正改变生态的是“接口兼容”
智能合约允许任何人写自己的资产逻辑,但如果每个 Token 都定义一套不同的转账、授权和查询接口,钱包、交易所、DEX 和其他合约就无法通用。ERC 标准真正重要的地方,不是“发币变简单”,而是把资产操作抽象成了生态可以共同依赖的接口协议。
ERC-20:同质化资产的共同语言
ERC-20 定义了同质化 Token 的基础接口。核心方法包括:
1 | |
transfer 解决“我把自己的 Token 转给别人”;approve + transferFrom 则解决“我授权某个合约或地址在额度内替我转账”。DEX、借贷协议、支付合约大量依赖第二种模式。
这里需要修正早期资料中一个容易误导的解释:ERC-20 Token 转到一个不理解 ERC-20 的合约地址时,并不一定会因为目标合约“不兼容”而自动拒绝。 ERC-20 的余额本质上保存在 Token 合约自己的映射中,普通 transfer 只修改 Token 合约状态,不会要求接收方实现回调接口。因此 Token 可能成功记到某个合约地址名下,但那个合约没有任何方法把它们再转出去,于是资产实际上被“卡死”。这正是后来 ERC-223、ERC-721 的 safe transfer 机制等方案要解决的一类问题。
另外,approve 也不是没有风险。授权额度过大、长期不撤销,或者前端把无限授权隐藏在一次普通操作里,都会把 Token 控制权暴露给第三方合约。现代 Dapp 安全实践通常会尽量限制授权额度,并把授权对象、金额和可撤销性明确展示给用户。
ERC-223、ERC-721 与 ERC-1155
ERC-223 通过让接收合约实现 tokenReceived 回调,尝试在向合约转账时验证接收方确实知道如何处理 Token。如果接收合约没有实现相应接口,转账应当回滚。它解决的问题非常真实,但在 Ethereum 生态里,ERC-20 仍然拥有最强的网络效应。值得注意的是,ERC-223 今天已经是 Final ERC,而不是简单的“非官方草案”;不过工程选型仍然要考虑钱包、DEX、跨链桥和基础设施对标准的实际兼容程度,而不能只看 EIP 状态。
ERC-721 则解决了另一类问题:每个资产都不同。ERC-20 中的 1 个 Token 和另 1 个 Token 在协议层面可互换,而 ERC-721 使用 (contract address, tokenId) 唯一标识某个资产,并通过 ownerOf、safeTransferFrom 等接口管理所有权。CryptoKitties 让这类模型广为人知,后来 NFT、游戏道具、票据、证书等场景都沿用了类似思想。
ERC-1155 进一步把同质化、非同质化和半同质化资产统一到一个合约中,一个合约可以管理多个 Token ID,还支持批量转账。对游戏、数字资产平台这类“一次管理成百上千种资产”的场景,它能减少重复部署和多次调用成本。
| 标准 | 资产模型 | 关键特点 | 典型场景 |
|---|---|---|---|
| ERC-20 | 同质化 | transfer、授权额度、transferFrom |
代币、积分、治理权、稳定币 |
| ERC-223 | 同质化 | 接收合约回调,错误转入可回滚 | 需要更强接收语义的 Token |
| ERC-721 | 非同质化 | 每个 tokenId 唯一,支持安全转账 |
NFT、证书、唯一数字资产 |
| ERC-1155 | 多 Token | 一个合约管理多种 FT/NFT,支持批量操作 | 游戏资产、多资产发行平台 |
标准化的价值在这里体现得非常明显:钱包并不需要知道某个项目内部怎么实现余额,只要它符合标准接口,就可以用同一套代码读取、展示和转账。智能合约生态真正的复利,来自可组合性,而可组合性的前提就是稳定、可验证的接口契约。
用今天的工具重新完成一次智能合约实验
2018 年的典型入门流程是安装 Geth 1.8、手写 genesis.json、启动私链、CPU 挖矿、安装 solc、生成 ABI 和 Bytecode,再从 Geth JavaScript Console 手工部署。这个过程很适合理解“节点、账户、出块、合约部署”之间的关系,但今天已经不适合作为日常开发教程直接照抄。
原因不是某几个参数改名,而是 Ethereum 本身已经完成了 PoW 到 PoS 的迁移,现代 Geth 也不再把“本地 Ethash 挖矿私链”当成常规开发路径。对于智能合约开发,Ethereum 官方更推荐使用专门的 Development Network。Hardhat Network、Anvil、Remix VM 这类工具可以瞬间出块、预置测试账户并提供调试能力,开发效率远高于维护一条模拟主网的 Geth 私链。
下面用 Foundry + Anvil 重新完成同样的 HelloWorld 实验。
安装 Foundry
macOS/Linux 可以使用 Foundry 官方安装器:
1 | |
安装完成后会得到四个常用工具:
forge:编译、测试、部署、验证 Solidity 合约;anvil:本地 Ethereum JSON-RPC 开发节点;cast:从命令行调用合约、查询链上数据、发送交易;chisel:Solidity REPL。
初始化工程:
1 | |
编写合约
创建 src/HelloWorld.sol:
1 | |
编译:
1 | |
这一步背后仍然和早期资料中的 solc --bin、solc --abi 是同一件事:编译器生成 EVM Bytecode 和 ABI。区别只是现代工具链已经把这些步骤组织进工程目录、构建缓存和测试框架,不需要开发者手工复制一大段十六进制字节码到 Console。
启动本地链
新开一个终端:
1 | |
Anvil 会默认创建一组带测试 ETH 的开发账户,并启动 JSON-RPC:
1 | |
这些账户和私钥只用于本地测试,不要把真实资金发送到开发私钥,也不要在生产环境复用它们。
部署合约
从 Anvil 输出中选取一个测试账户的私钥,放入当前 shell:
1 | |
执行:
1 | |
成功后会得到 Deployed to 地址。假设:
1 | |
读取只读方法:
1 | |
修改状态:
1 | |
再次读取:
1 | |
这条实验链把智能合约的完整生命周期串了起来:
flowchart LR
A[Solidity 源码] --> B[forge build]
B --> C[ABI + EVM Bytecode]
C --> D[部署交易]
D --> E[Anvil 产生区块]
E --> F[Contract Account]
G[cast call] --> F
H[cast send] --> I[状态修改交易]
I --> E
F --> J[读取状态 / Event / Receipt]
如果只是想快速理解 Solidity 而不想安装任何本地工具,Remix VM 仍然是非常合适的入口;如果要做真实工程,Foundry 或 Hardhat 更适合测试、脚本化部署、CI 和主网 fork 测试。
旧 Geth 私链实验应该如何理解
旧教程中的几个步骤仍然值得保留,因为它们揭示了底层结构:
1 | |
历史上的 chainId、gasLimit、difficulty、预分配 alloc 等 Genesis 字段,本质上是在定义一条链的初始协议状态;personal.newAccount() 创建 EOA;--mine 负责让 PoW 私链能够持续产生区块;eth.contract(abi).new(...) 则是旧 Web3/Geth Console 风格的部署方式。
今天这些命令中的一部分已经废弃或语义发生变化。学习它们的价值在于理解区块链启动过程,而不是把 Geth 1.8 的命令原样复制到 2026 年环境。
从项目看架构:同一个“区块链”可以长得完全不同
只研究 Bitcoin 和 Ethereum,很容易误以为区块链只有“PoW/PoS + Token + 智能合约”这一种路线。实际上,BitShares、EOS、IOTA、Cardano、NEO、Metaverse、Qtum、Bytom、Ontology 等项目在 2014~2018 年间做过大量不同方向的实验。即使其中不少设计后来没有成为主流,它们仍然非常适合用来理解系统设计中的几个核心选择。
这一部分的数字、节点数量、TPS 宣称和产品状态主要代表这些项目在 2018 年前后的技术快照,不适合直接拿来做今天的投资判断或生产选型。真正值得保留的是它们背后的架构思想。
BitShares:把“金融业务”直接做进协议
BitShares 的定位不是通用智能合约平台,而是链上去中心化交易系统。它提供支付、资产发行、撮合、抵押和市场锚定资产等金融原语。换句话说,它没有要求每个开发者自己写一份任意 Solidity 合约,而是把常见金融逻辑预先放进底层协议。
这种路线可以看成“内置智能合约”的一种形态:
- 好处是业务模型经过底层统一实现,更容易控制安全边界和性能;
- 代价是扩展性较差,新业务必须等待协议本身支持,而不是部署一段新合约就能上线。
BitShares 使用 DPoS,让有限数量的见证人承担出块职责,从而追求更低延迟和更高交易吞吐。它特别适合说明一个事实:交易平台对时间非常敏感,所以共识设计往往会主动向性能倾斜。
它更有意思的地方是“链上资产 + 抵押 + 价格锚定”的金融结构。以 bitCNY 为例,其目标是让链上资产围绕人民币价格形成锚定。历史设计中,用户可以抵押 BTS 创建 bitCNY,系统结合价格信息、抵押率、强制平仓/清算等机制控制风险。
可以把流程简化为:
flowchart LR
A[法币 CNY] <-->|承兑/网关| B[bitCNY]
B <-->|链上交易| C[BTS]
C -->|抵押| D[生成市场锚定资产]
D -->|抵押率不足| E[强制平仓 / 清算]
这里最重要的不是某个固定的“2 倍抵押率”参数,而是机制本身:稳定资产不是因为代码写了 1 bitCNY = 1 CNY 就自动稳定,而是依赖抵押品价值、价格源、市场流动性、清算规则和参与者预期共同维持。 参数会变化,极端行情下也可能脱锚。
“人人承兑”则解决链外法币与链上资产之间的入口问题。区块链可以让用户自行保管链上资产,却无法让现实银行账户里的人民币凭空进入链上,所以网关/承兑商仍然存在信用和合规风险。这是一个非常典型的边界:链内可以降低中介依赖,但链外资产映射永远需要某种现实世界的信任锚。
EOS:用有限验证者和链上治理换取性能
EOS 把自己定位成 Dapp 基础设施,可以类比为“为智能合约提供账户、权限、数据库和计算资源的操作系统”。其核心选择是 DPoS:Token 持有者投票选出有限数量的 Block Producer,由它们负责打包交易、执行合约和维护网络。
EOS 最有代表性的不是“百万 TPS”宣传数字,而是它把治理机制更明确地放进协议设计。早期 EOS 设计曾提出区块链宪法、超级节点投票、提案和仲裁等机制,希望让纯代码无法处理的争议有制度化出口。
这同时暴露出链上治理最核心的问题:如果投票权按 Token 数量加权,资本和治理权天然绑定,大户、交易所、代理投票和节点联盟都可能形成新的权力中心。DPoS 并不是“没有中心”,而是把“谁有权生产区块”的问题显式交给了一套选举制度。
这类系统的工程优势很明显:验证者集合小,通信和调度更容易优化,确定性最终确认也可以更快;它的风险也同样明显:选民冷漠、投票集中、利益输送和治理联盟都可能侵蚀协议原本希望实现的开放竞争。
IOTA:DAG 曾经代表另一条账本路线,但今天必须做版本切分
早期 IOTA 最大的技术标签是 Tangle。它不把交易打包成线性的“区块链”,而是使用 DAG(Directed Acyclic Graph)组织交易。新的交易会引用过去的若干交易,随着后续交易不断引用,历史交易的可信度逐渐提高。早期设计中还结合 MCMC Tip Selection 来选择待确认交易。
这种结构当时吸引人的原因很直观:
- 不需要所有交易争抢同一个区块空间;
- 理论上交易越多,能够参与确认的活动也越多;
- 适合物联网小额、高频交互的设想;
- DAG 不存在传统意义上“一条主链只能串行增长”的外观限制。
但不能把 2018 年的 Tangle + MCMC 描述当成 2026 年 IOTA 的当前架构。 IOTA 后来经历了多次协议重构,2025 年 IOTA Rebased 主网上线后已经迁移到 Move-based 执行环境和 Delegated Proof of Stake 网络;当前架构有验证者委员会、Epoch、Checkpoint、共识和明确的交易排序机制,使用的共识算法也已经不是早期资料里的 MCMC Tip Selection。
IOTA 是阅读老区块链资料时最典型的提醒:项目名字可能没变,底层协议却可能已经换了几代。判断一份区块链文章是否仍然有效,必须把“项目历史思想”和“当前协议实现”分开。
Cardano:研究驱动、分层和 Ouroboros
Cardano 的鲜明特点是研究驱动和形式化方法。早期设计强调三个目标:Scalability、Interoperability、Sustainability,并用 Settlement Layer 与 Computation Layer 的概念区分价值结算和智能合约计算。
这种分层思路很值得保留。把“资产最终归属”和“复杂业务计算”视为两个不同问题,可以让协议分别优化安全、性能和升级能力。现代区块链的 Layer 1 / Layer 2、结算层 / 执行层,也在不同技术路径上体现了类似思想。
Cardano 的共识核心是 Ouroboros 系列 PoS 协议。它最有代表性的地方不是“PoS 比 PoW 更快”,而是通过学术论文和形式化分析尝试为安全性提供更明确的模型和证明。这代表了区块链工程的另一种文化:不是先把链跑起来再补理论,而是让协议设计尽可能在可证明的假设下推进。
国内早期公链项目带来的架构启发
2018 年前后国内出现过一批非常有代表性的公链设计。今天再看,它们最有价值的地方不是市值排名,而是把“数字身份、数字资产、执行模型、合规和跨链”这些后来仍在讨论的问题提前做成了不同的工程组合。
NEO:数字身份 + 数字资产 + NeoVM
NEO 把“智能经济”拆成数字身份、数字资产和智能合约三个核心元素。它没有沿用 Solidity + EVM 的单一路线,而是设计 NeoVM 和 NeoContract,希望让 C#、Java 等主流语言开发者更容易进入智能合约领域。
共识上,NEO 采用 dBFT。PBFT 类协议需要节点之间进行多轮通信,通信量通常随节点数量快速增长,因此更适合规模相对有限的共识集合;换来的好处是确定性最终性和较高吞吐,不需要像 PoW 链那样等待多个区块降低重组概率。
NEO 早期的 NEP-5 则承担类似 ERC-20 的 Token 标准角色。这里再次说明:一个公链生态不仅需要虚拟机,还需要账户、Token 标准、SDK、钱包、浏览器和开发工具形成完整闭环。
Metaverse:内置合约优先于开放编程
Metaverse 早期围绕 MST 数字资产、Avatar 数字身份、Oracle 和资产交易构建业务模型,并提出 BISC(Built-in Smart Contract)的思路。它没有把“任何人都能写图灵完备合约”当成唯一方向,而是把高频、通用需求固化在底层。
这是一种值得认真对待的工程取舍:
通用智能合约最大化表达能力,内置业务原语最大化可控性。
金融、身份、资产这类高风险场景里,限制可编程范围有时反而能减少攻击面。很多现代链和应用链也重新出现了类似趋势:底层提供一组安全的模块或 Move Object 能力,而不是把所有逻辑都交给任意脚本。
Qtum:UTXO 与 EVM 的混合路线
Qtum 的核心设计目标是把 Bitcoin UTXO 模型与 Ethereum EVM 结合起来,在保留 UTXO 交易结构的同时提供智能合约执行能力。这个思路非常有代表性,因为账户模型和 UTXO 模型各有优点:
- UTXO 天然适合并行验证和清晰的资产所有权追踪;
- Account Model 更适合表达长生命周期共享状态和复杂 Dapp。
把两者组合意味着需要设计一层适配机制,让 UTXO 变化能够驱动 EVM 状态变化。Qtum 早期还强调移动端 Dapp、身份、链外 Data Feed 和 QRC20 等生态能力。
Bytom:把现实资产与链上资产统一抽象
Bytom 把资产分成“比特资产”和“原子资产”:前者是链上原生数字资产,后者代表现实世界中的权证、权益、债券等。它采用应用层、合约层、数据层三层结构,并在底层扩展 UTXO 模型。
它反映出的核心问题今天仍然存在:现实资产 Tokenization 最难的并不是“在链上创建一个 Token”,而是如何证明 Token 与现实资产的一一对应、谁有权修改映射、如何处理法律强制执行、托管、赎回和违约。链只能保证“链上的规则按链上状态执行”,不能自动保证链下世界永远诚实。
Ontology:把身份、数据和信誉作为基础协议
Ontology 早期定位是分布式信任网络,重点不是单一资产,而是数字身份、数据交换和信誉评价。它提出 ONT ID、ONT DATA、ONT Scores,并使用 VBFT,把 PoS、VRF 和 BFT 思想组合到共识中。
从今天的视角看,这一方向与 DID(Decentralized Identifier)、Verifiable Credentials、隐私证明和跨系统身份互操作仍然高度相关。真正的难点同样不只是密码学:身份如何与现实主体绑定、谁颁发 Credential、撤销如何传播、隐私和监管如何同时满足,才是长期工程问题。
联盟链:不是“缩小版公链”,而是另一种信任模型
Permissioned 的关键是身份和准入
联盟链(Consortium Blockchain / Permissioned Blockchain)与公链最直观的区别,是参与网络、读写数据、执行合约或参与共识通常需要身份和许可。它面对的场景也不同:参与方往往不是匿名矿工,而是银行、供应商、物流公司、政府机构或企业内部不同法人主体。
这会从根本上改变系统的设计约束。公链必须假设任何人都可能加入、作恶、女巫攻击或者随时离开,因此身份难以作为安全基础;联盟链则可以用 PKI、证书、组织关系和法律协议先建立参与者边界,再把共识重点放在“多个已知主体之间如何共享状态、如何限制权限、如何容错”。
所以联盟链通常可以获得更高吞吐和更确定的最终性,不是因为它发现了某种违反分布式系统规律的算法,而是因为它采用了更强的先验条件:节点身份已知、数量有限、网络环境相对可控、参与组织可以承担现实世界责任。
这也决定了一个非常重要的选型原则:如果你的业务本来只有一家企业控制所有节点,那么上联盟链往往只是把一个数据库包装成了更复杂的数据库;只有当多个独立组织确实需要共同维护事实、又不愿让其中任意一家拥有最终数据库控制权时,联盟链的价值才更清晰。
Hyperledger 的真正价值是模块化,而不是“某条链”
2015 年后 Hyperledger 逐渐形成了一组面向企业分布式账本的项目。早期资料中的典型框架包括 Fabric、Sawtooth、Iroha、Burrow 和 Indy,另外还有 Cello、Composer、Explorer、Quilt 等工具。
这些项目并不是同一条区块链的不同客户端,而是对企业级 DLT 的不同实验:
| 项目 | 早期重点 | 技术启发 | 今天阅读时的版本提示 |
|---|---|---|---|
| Hyperledger Fabric | 模块化许可链、成员管理、Chaincode | 身份、背书、排序、提交解耦 | 仍是主力项目,v3 已支持 SmartBFT 排序 |
| Hyperledger Sawtooth | 模块化账本、PoET、并行交易执行 | 硬件可信执行与可插拔共识 | 2024 年已进入 End of Life,历史价值大于当前选型价值 |
| Hyperledger Iroha | 资产与账户管理 | 面向业务原语而非完全通用底层 | 仍有后续项目演进 |
| Hyperledger Burrow | 许可型 EVM + BFT | EVM 可被放入企业许可环境 | 2022 年已归档 |
| Hyperledger Indy | 去中心化身份 | DID、凭证、零知识证明 | 身份方向仍持续演进 |
| Composer | Fabric 应用建模工具 | 降低企业链开发门槛 | 2020 年已归档 |
这张表反映出一个现实:区块链框架生命周期变化很快。阅读架构时要保留思想,做新项目选型时必须重新确认项目活跃度、维护者、版本、安全公告和生产案例。
Fabric 的核心不是“Chaincode 跑在 Docker”,而是 Execute-Order-Validate
早期 Fabric 架构常被概括成 Membership Services、Blockchain Services、Chaincode Services 三大块,其中 Chaincode 运行在 Docker 隔离环境。这种描述能帮助入门,但今天理解 Fabric,更重要的是抓住它的交易流程:执行/背书、排序、验证/提交是分离的。
sequenceDiagram
participant A as Client / App
participant G as Fabric Gateway
participant P1 as Endorsing Peer Org1
participant P2 as Endorsing Peer Org2
participant O as Ordering Service
participant C as Committing Peers
A->>G: 提交交易提案
G->>P1: 模拟执行 Chaincode
G->>P2: 模拟执行 Chaincode
P1-->>G: Read/Write Set + Endorsement
P2-->>G: Read/Write Set + Endorsement
G->>A: 等待/聚合背书结果
A->>G: 签名已背书交易
G->>O: 提交排序
O-->>C: 按顺序生成并分发区块
C->>C: 校验背书策略和 MVCC
C->>C: Valid 交易提交到账本状态
这和 Ethereum 的“区块生产者拿到交易后执行,再由所有节点重放验证”很不一样。Fabric 先让指定 Peer 模拟执行交易并生成 Read/Write Set,再由 Ordering Service 只负责确定顺序,最后所有 Peer 验证背书策略以及读集是否仍然有效,再提交状态。
这种架构有几个直接收益:
- 合约不必在排序节点上执行,职责更清晰;
- 背书策略可以表达“Org1 和 Org2 都必须签名”之类的组织规则;
- 排序层可以独立替换共识机制;
- 对同一个 Key 的并发修改可以通过 MVCC 检测冲突,而不是让所有交易都串行执行。
Fabric 中的 Membership Service Provider(MSP)负责把证书身份映射为组织和角色,Channel、ACL、Endorsement Policy 等机制进一步定义“谁能看到什么、谁能提交什么、什么交易算有效”。在企业场景里,这些身份和权限能力往往比“是否有一个 Token”更重要。
早期版本里 Chaincode 通常由 Peer 构建并启动 Docker 容器;从 Fabric 2.x 开始支持 External Builders and Launchers,也可以把 Chaincode 作为外部服务独立运行。也就是说,“Chaincode = Docker Container”已经不能再当成 Fabric 的硬性定义。
排序服务也经历了明显演进。早期 Fabric 曾使用 Solo、Kafka 等方式,后来生产环境主流转向 Raft。Fabric v3 又加入基于 SmartBFT 的 BFT Ordering Service:如果排序节点来自多个彼此不能完全信任的组织,可以在少于三分之一节点恶意或故障的假设下维持一致的排序结果;如果参与者之间已经有较强运维信任,Raft 的 Crash Fault Tolerance 模型则更简单。
Sawtooth 与 PoET:把信任下沉到硬件
Sawtooth 早期最有特色的设计是 PoET(Proof of Elapsed Time)。它和 Raft 的随机 Election Timeout 有一点直觉上的相似:多个候选节点等待一个随机时间,时间先到者获得提议机会。但 PoET 希望这个“随机等待时间”不是由节点自己随便声明,而是由 Intel SGX Enclave 产生和证明。
于是安全假设发生了转移:传统 PoW 用大量计算和电力约束作弊,PoET 则把一部分信任放到 TEE(Trusted Execution Environment)和硬件证明上。它可以显著降低能源成本,但必须接受 SGX 本身、供应链、侧信道和实现漏洞等新的风险。
这种设计虽然没有成为企业链的统一答案,却代表了区块链里一个很重要的思想:共识从来不是凭空产生信任,而是在选择一种“最难伪造的稀缺资源或约束条件”。 PoW 选择算力和能源,PoS 选择可罚没资本,PBFT 选择已知身份与多数诚实假设,PoET 选择可信硬件。
Iroha、Burrow、Indy:通用平台之外还有垂直框架
Iroha 早期就更关注资产、账户、权限和业务命令,不强调成为“万能区块链”;Burrow 则证明 EVM 并不天然只属于公链,可以放进许可环境并与 BFT 共识结合;Indy 则把身份当作第一等问题,围绕 DID、凭证和零知识证明构建账本。
这些路线提醒我们,不应该先问“我要不要用区块链”,再找业务往里塞,而应该先问“多个主体之间究竟缺少哪一种共享能力”:
- 缺的是不可抵赖的资产所有权?
- 缺的是跨组织共享状态?
- 缺的是身份和凭证验证?
- 缺的是合约自动执行?
- 还是只缺一个性能更好的数据库?
答案不同,技术选型也会完全不同。
BaaS 与 BTaaS:区分“消费区块链能力”和“部署区块链框架”
早期资料提出过一个很有用、但不是行业统一标准的概念区分:BaaS 与 BTaaS。
这里可以这样理解:
- BaaS(Blockchain as a Service):把某条现有区块链已经提供的能力封装成服务,例如交易查询、地址监控、资产发行、支付或链上数据索引;
- BTaaS(Blockchain Technology as a Service):把 Fabric 等区块链框架的部署、节点管理、证书、网络配置做成云服务,让企业快速创建一条自己的许可链。
前者更像“消费一条既有网络”,后者更像“托管一套分布式账本基础设施”。在实际云厂商文档中,这两个词的边界并不总是这么划分,所以更适合作为架构思考工具,而不是强行当作标准术语。
联盟链真正的困境不是技术,而是“为什么大家要长期合作”
联盟链最值得保留的一条批判是:技术框架越成熟,越容易掩盖商业协作本身的问题。
假设供应商、物流公司、银行和核心企业共同维护一条链,Fabric 可以解决身份、背书、账本一致性和审计问题,却不能自动解决:
- 谁承担节点成本;
- 谁制定数据标准;
- 谁负责错误数据;
- 某家公司为什么愿意把原本垄断的数据开放给其他成员;
- 新成员加入后权力如何变化;
- 如果链上规则损害某一方利益,它为什么继续参与;
- 法律争议和现实资产交割失败时谁负责。
这已经不是数据库或共识算法问题,而是机制设计、组织治理和利益分配问题。如果这些问题没有答案,再漂亮的联盟链最终也可能退化成“一家主导、其他人被动接入”的普通分布式系统。
因此,联盟链选型最应该问的一句话是:
如果把区块链替换成 PostgreSQL + API + 数字签名 + 审计日志,这个业务为什么仍然无法成立?
只有当答案明确指向“跨组织共同控制、互不完全信任、需要共享可验证事实”时,引入联盟链才更有说服力。
比特币:理解区块链治理必须回到它的历史
比特币不是突然从白皮书里出现的
Bitcoin 之前已经有一条很长的数字现金技术脉络,包括 David Chaum 的 eCash、Adam Back 的 Hashcash、Wei Dai 的 b-money、Nick Szabo 的 Bit Gold、Hal Finney 的 RPOW 等。Bitcoin 的突破并不是发明了哈希、数字签名或工作量证明中的每个零件,而是把 P2P 网络、PoW、UTXO、经济激励和最长/最重链规则组合成了一个能够持续运行的开放系统。
几个关键时间点构成了它的早期历史:
- 2008 年 10 月底/11 月初,Bitcoin 白皮书公开传播;
- 2009 年 1 月 3 日,Genesis Block 产生;
- 2009 年 1 月,中本聪向 Hal Finney 发送早期 Bitcoin 交易;
- 2010 年 5 月 22 日,10,000 BTC 购买披萨成为最著名的早期实物支付案例;
- 之后 GPU、矿池、交易所、ASIC 等基础设施逐渐形成,Bitcoin 从实验网络变成全球性资产和结算系统。
创世区块中的《The Times》标题既是时间戳式的现实世界锚点,也经常被理解为对当时银行救助背景的评论。无论如何解读,它都让 Bitcoin 一开始就不只是一个网络协议实验,还带有很强的货币和制度讨论色彩。
“价值”不是协议里的一行代码
Bitcoin 协议可以规定发行计划、UTXO 是否有效、签名是否正确,却不能通过代码强制外部世界认定 1 BTC 应该值多少美元。它的价格和货币属性依赖社会共识、市场流动性、可验证稀缺性、安全记录、基础设施和长期预期共同形成。
因此,把 Bitcoin 的价值全部归因于“去中心化”或“PoW 消耗能源”都过于简单。更有工程意义的几个属性是:
- 任意参与者都可以验证发行和交易规则;
- 跨国界转移不依赖单一支付平台记账;
- UTXO 所有权由密码学签名控制;
- 改写历史需要付出真实且持续的攻击成本;
- 协议升级没有一个可以单方面强制所有用户接受的中央管理员。
PoW 的能源消耗始终有争议。早期资料曾从“将偏远地区富余电力转化成全球可交易资产”的角度理解挖矿,这确实描述了一种资源货币化路径,但不能据此推出“挖矿天然等于高效能源调度”。矿业的能源结构、机会成本、环境外部性和监管都需要单独分析。技术上能够把能源变成哈希率,不等于经济上任何能源消耗都是最优使用方式。
Bitcoin 的权力不是只在矿工手里
看 PoW 容易产生一个直觉:谁算力大谁就控制 Bitcoin。实际上矿工确实控制短期区块生产和交易排序,但他们并不能任意修改全节点验证规则。一个矿工即使生产了“给自己多发 100 BTC”的区块,普通节点也会直接拒绝。
Bitcoin 的治理更像几个群体之间持续博弈:
- 开发者提出和实现代码;
- 矿工/矿池选择生产哪些有效区块、部署哪些软分叉信号;
- 交易所、商户、钱包和其他经济节点决定承认什么资产和规则;
- 普通用户通过运行节点、持币、交易和选择软件参与经济共识。
早期资料把这种关系比喻成“矿工、开发者、投资者三权制衡”,虽然不是严格的制度设计,但抓住了关键:没有任何一方能轻松同时控制代码、共识规则和市场价值。
同时也要修正一个过强的说法:51% 算力攻击并不意味着“最多只能改一两个块”。掌握持续多数算力的攻击者理论上可以进行更深的重组、双花和审查,只是重组越深、维持时间越长,成本、风险和被社区采取反制措施的概率通常越高。Bitcoin 的安全不是“51% 也没事”,而是让这种攻击在经济和社会层面越来越难持续获利。
BIP、扩容之争与 Bitcoin 的“没有正式政府的治理”
BIP 是提案系统,不是协议的中央立法机关
BIP(Bitcoin Improvement Proposal)是 Bitcoin 改进提案机制,用来记录协议特性、标准、流程和设计决策。早期 BIP 1 由 Amir Taaki 提交,用来定义 BIP 自身流程。后来 BIP 2 重新整理了流程;今天 BIP 3 已经替代 BIP 2,成为更新后的 BIP Process。
这里有一个非常关键的认识:BIP 被分配编号、进入仓库,不代表社区赞成它,更不代表它即将进入 Bitcoin。 BIP 仓库更像标准提案和设计档案。真正改变共识规则,需要实现、审查、部署方式设计,以及矿工、节点、钱包、交易所和用户在不同层面的接受。
这也是为什么“把 2100 万上限改成 3000 万”在代码层面当然做得到,但“让那条修改后的链继续被全社会承认为 Bitcoin”完全是另一件事。共识规则的最终约束不在 GitHub merge 权限,而在运行软件和赋予资产经济价值的参与者。
flowchart LR
A[想法 / 问题] --> B[邮件列表与社区讨论]
B --> C[BIP 草案]
C --> D[BIP 编辑流程与编号]
D --> E[实现与代码审查]
E --> F[部署 / 激活机制]
F --> G[矿工、节点、钱包、交易所采用]
G --> H{经济多数是否接受}
H -->|大体一致| I[成为网络实际规则]
H -->|严重分歧| J[停滞 / 放弃 / 分叉]
扩容之争为什么会走到硬分叉
随着 Bitcoin 使用增加,1 MB 区块上限逐渐带来拥堵,社区围绕“如何扩容”形成了长期冲突。大致可以把技术路线概括成两个方向:
大区块路线希望直接提高区块容量,让 Layer 1 一次容纳更多交易。它见效直接,但会让区块传播、存储和节点硬件压力同步增大,而且只靠持续加大区块并不能无限扩展。
SegWit 路线通过把签名见证数据从传统交易结构中分离、改变权重计算等方式,在兼容性和容量之外还解决 Transaction Malleability 等问题,并为 Lightning 等二层协议提供更好的基础。
真正难的不是两种方案谁“技术上显然正确”,而是 Bitcoin 没有一个 CEO 可以宣布版本升级。矿工、Bitcoin Core 开发者、企业、交易所、钱包和持币者对扩容方式、节点门槛和发展方向存在不同利益。期间出现过香港共识、纽约共识等协调尝试,但没有形成所有人都接受的方案。
2017 年 Bitcoin Cash 最终通过硬分叉形成独立网络。此后,“扩容之争”不再只是 GitHub 和论坛里的争论,而变成了市场同时给两套规则定价的现实实验。
这件事证明了一点:区块链的分叉不是单纯的软件版本分支,而是社会共识被复制成两个可独立运行的经济系统。 Git 的 branch 可以随时 merge,拥有不同资产、矿工、节点和用户的两条链却不一定还能重新合并。
IFO 是扩容之争留下的历史现象
Bitcoin Cash 分叉之后,一度出现大量 IFO(Initial Fork Offering):项目方复制 Bitcoin 的 UTXO 集或代码,在某个高度分叉并生成新的 Token,再给原 BTC 持有人按规则分配新币。Bitcoin Gold、Bitcoin Diamond、Super Bitcoin 等都出现在这一时期。
IFO 的历史意义大于今天的技术价值。它说明一条开源公链的代码和状态都可以被复制,但网络效应、安全预算、开发者、交易所支持、用户和品牌共识无法简单复制。 创建一条“技术上能运行的链”很容易,创建一个长期有经济安全性的网络极难。
链上治理与链下治理:协议能否替人做政治决策
两种治理并不是“自动化”和“落后”的区别
链上治理(On-chain Governance)把提案、投票、参数修改甚至协议升级的一部分流程写进链上规则。链下治理(Off-chain Governance)则更多依赖邮件列表、论坛、开发者会议、基金会、代码审查、客户端发布和经济参与者自行选择软件。
Bitcoin 更偏向链下治理;Ethereum 也没有用 Token 余额直接投票决定所有协议升级;BitShares、EOS 等 DPoS 系统则更倾向把代表选举、参数或治理权放进链上。
链上治理最大的吸引力,是流程明确、投票可审计、执行可自动化。但它没有消灭政治,只是把政治问题编码成了协议参数:
- 谁有投票权?
- 一人一票、一币一票还是委托投票?
- 多数是多少?
- 投票持续多久?
- 没投票的人如何计算?
- 紧急安全漏洞能否绕过正常流程?
- 恶意提案执行后能否回滚?
只要这些问题还存在,治理就不可能被“写成智能合约”后自动变成客观数学问题。
惰性投票与公地悲剧
大多数用户不会持续研究每个协议提案。投票需要时间和专业知识,而单个用户的一票往往很难改变结果,于是最理性的行为可能是“让别人去研究和投”。最终真正参与治理的人集中到少数职业代表、基金、节点运营者或大户手中。
这就是治理中的典型集体行动困境。链上投票把按钮放得再漂亮,也不能保证参与者突然愿意投入大量时间理解复杂密码学和经济模型。
Sybil Attack 与“一人一票”的身份难题
公链默认不掌握现实身份,一个人可以创建无数地址。如果直接按地址一票,攻击者可以轻易制造大量身份。因此大多数链上治理使用 Token 加权或 Stake 加权,让“创建更多地址”不能凭空增加总权重。
但这样又带来另一个问题:一币一票天然接近资本加权,大户、交易所、基金会和托管平台拥有更强话语权。DID、Proof of Personhood 等技术可以改善一部分问题,却仍然会遇到隐私、身份恢复、身份买卖和现实权利映射等难题。
贿选、委托与治理联盟
一旦投票能直接决定出块权或协议资金,买票、分红、委托代理就会成为真实经济行为。EOS 超级节点选举早期争议,本质上就是“投票激励是否会让代表制退化为资本联盟”的问题。
这不是某个项目特有缺陷,而是所有代币治理都要面对的机制设计问题。协议可以禁止显式返利,却很难阻止链外利益交换;可以设置锁仓和延迟,却会牺牲流动性和参与率。
链下治理的优势与代价
链下治理看起来“不够自动”,却有一个经常被低估的优势:它允许模糊的人类协商。安全漏洞、经济危机和复杂协议升级很难提前把所有边界写入合约,人类社区可以讨论、妥协、延迟、撤回甚至拒绝一个技术上已经实现的方案。
它的缺点也很明显:权力结构不透明、核心开发者影响力很大、参与门槛高、决策速度慢,有时甚至没人能明确回答“到底是谁决定了升级”。Bitcoin 扩容之争就是这种模式最典型的压力测试。
因此,不应该简单得出“链上治理先进、链下治理落后”或相反结论。更合理的目标是:让权力来源可观察、让关键变更可审查、让退出和分叉成本可理解,并尽量避免任何单一角色拥有无法制衡的升级权。
把这些项目放回同一张架构图里
前面的项目名字很多,但真正的设计维度其实高度重复。可以把它们压缩成下面几条轴:
| 系统/项目 | 参与模式 | 状态/资产模型 | 执行能力 | 共识/最终性取向 | 治理特点 |
|---|---|---|---|---|---|
| Bitcoin | Permissionless | UTXO | 受限 Script | PoW,概率最终性 | BIP + 链下社会共识 |
| Ethereum | Permissionless | Account / World State | EVM + Solidity | PoS,经济最终性 | EIP/客户端/社区链下治理为主 |
| BitShares | Permissionless with elected validators | Account/资产账本 | 内置金融原语 | DPoS,低延迟 | Token 投票选代表 |
| EOS | Permissionless use, limited block producers | Account | 通用智能合约 | DPoS | 强链上治理实验 |
| IOTA 2018 | Permissionless DAG | Tangle 交易图 | 当时以 DAG 账本为核心 | MCMC Tip Selection 等早期机制 | 协议多次演进 |
| IOTA Rebased | PoS validator network | Move Object/状态 | Move-based execution | 委托 PoS + 当前共识栈 | 验证者升级协议 |
| Cardano | Permissionless | EUTXO 等 | 智能合约 | Ouroboros PoS | 研究驱动 + 治理演进 |
| NEO | 公链 + 有限共识节点 | Account/资产 | NeoVM | dBFT,确定性最终性 | 委托/委员会式结构 |
| Qtum | 公链 | UTXO + EVM 适配 | EVM | PoS 路线演进 | 混合架构 |
| Fabric | Permissioned | KV State + Ledger | Chaincode | Raft 或 SmartBFT | 组织、证书、Policy 驱动 |
真正值得从表中看出的不是“哪个项目最好”,而是不存在不付代价的选择:
- 允许任何人参与验证,就要控制节点硬件成本;
- 缩小验证者集合,就要解决权力集中和治理;
- 提供图灵完备合约,就要承担复杂安全攻击面;
- 把业务原语固化到底层,就会损失开放式可编程性;
- 让协议自动治理,就必须定义投票权和攻击模型;
- 把身份做成许可制,就会降低匿名开放性,但可以获得企业级权限和责任边界。
一套更实用的区块链系统设计方法
经历这些项目后,再面对一个新业务,不应该从“选 Ethereum 还是 Fabric”开始,而应该先把问题拆成七个设计问题。
1. 谁和谁之间缺乏信任
如果所有数据最终都由同一家公司控制,优先考虑数据库、消息队列、数字签名和审计日志。区块链的成本只有在“多个独立主体都不愿把最终控制权交给对方”时才更容易被证明合理。
2. 资产和状态是什么
简单转账适合 UTXO;复杂共享状态适合 Account/Object Model;现实资产还必须额外设计托管、法律映射和 Oracle。不要因为能发 Token,就把现实资产映射问题当作已经解决。
3. 需要什么最终性
支付是否可以接受“等待几个块概率上越来越安全”,还是证券清算要求一旦提交就不能回滚?如果需要 Deterministic Finality,BFT 类共识、许可链或具备明确最终性检查点的 PoS 可能更适合。
4. 可编程能力需要多强
如果只做固定资产转移,受限脚本或内置业务模块可能更安全;如果要支持开放 Dapp 生态,需要 EVM、WASM、Move 等通用执行环境,同时必须投入合约审计、升级、权限和运行时安全建设。
5. 性能瓶颈应该放在哪里解决
不要一遇到 TPS 问题就增大区块。先判断业务能否批处理、是否适合 Layer 2、是否需要链下通道、是否可以只把最终结算上链、数据是否必须永久存储在主链。
6. 身份、隐私和合规如何处理
公链默认透明和伪匿名,企业链默认身份明确但需要权限隔离。零知识证明、Private Data、DID、Verifiable Credential 都是工具,但无法替代业务对“谁有权知道什么”的建模。
7. 协议由谁升级
真正上线后,最危险的问题往往不是“第一版能不能跑”,而是三年后谁能改它。至少需要明确:
- 谁能提交升级;
- 谁能批准;
- 是否有 Timelock;
- 用户能否拒绝升级;
- 紧急漏洞由谁处理;
- 分叉时资产和名称如何定义。
把升级路径设计清楚,往往比争论“是否完全去中心化”更实用。
flowchart TD
A[准备使用区块链] --> B{是否存在多个独立控制主体?}
B -->|否| C[优先数据库 + API + 签名 + 审计]
B -->|是| D{参与者是否必须开放匿名加入?}
D -->|否| E[评估 Permissioned / Fabric 类架构]
D -->|是| F{是否需要通用可编程共享状态?}
F -->|否| G[UTXO / 受限脚本 / 应用链]
F -->|是| H[EVM / Move / WASM 类平台]
E --> I{吞吐或隐私是否成为瓶颈?}
H --> I
G --> I
I -->|是| J[批处理 / 并行执行 / Layer 2 / 隐私层]
I -->|否| K[保持协议简单]
J --> L[重新检查信任与治理假设]
K --> L
几个特别容易踩的认知坑
“高 TPS 就等于更先进”
错误。不同系统比较 TPS 之前必须统一节点数量、交易类型、最终性、数据可用性和硬件条件。一个 7 节点局域网 BFT 系统和全球开放验证的 PoW/PoS 网络不是同一类 benchmark。
“链上数据不可篡改,所以业务数据一定真实”
错误。区块链只能让已经进入共识的数据难以被偷偷修改。如果仓库管理员一开始就在链上录入“100 件货”,现实只有 80 件,账本会非常忠实地保存一条错误记录。Oracle Problem 不会因为用了区块链消失。
“智能合约就是无人干预”
错误。合约代码可以自动执行,但升级权限、Oracle、管理员 Key、前端、RPC、Sequencer、跨链桥、多签和治理都可能重新引入人工或中心化依赖。评估一个 Dapp 时,要沿调用链一直追到最终信任根。
“联盟链一定比数据库更可信”
错误。如果所有 Orderer、Peer、CA、运维权限最终都由同一家公司控制,联盟链只是增加了复制和密码学结构,并没有改变控制权。是否可信取决于治理和节点归属,而不是用了 blockchain 这个名字。
“代码开源就等于协议去中心化”
错误。开源解决的是可审查和可复制,不能自动解决验证者分布、客户端多样性、Token 持仓集中、基金会控制、RPC 入口、Stablecoin 管理权或前端托管。
“分叉就是失败”
也不完全正确。分叉意味着社区无法继续共享同一套规则,它当然会造成流动性、品牌和安全预算分裂,但在没有中央强制升级者的系统里,退出并运行另一套规则本身就是治理的一部分。 Bitcoin/BCH 和 Ethereum/ETC 都说明,技术共识最终仍然受社会共识约束。
版本校准:哪些 2018 年知识今天不能直接照搬
这批技术脉络大量形成于 2018 年前后,其中很多概念仍然有效,但实现状态已经明显变化。实际动手前至少要记住下面几项:
| 2018 年常见描述 | 2026 年应如何理解 |
|---|---|
| Ethereum 使用 Ethash PoW、GPU/ASIC 挖矿 | 2022 年 The Merge 后主网已经切换 PoS,PoW 仅是历史 |
Geth 私链通过 --mine、minerthreads 做开发 |
现代合约开发更适合 Anvil、Hardhat Network、Remix VM;旧 Geth 参数不应直接复制 |
| Ethereum 分片重点是状态/执行 Shard Chain | 当前是 Rollup-centric 路线,Proto-Danksharding/Blob 已上线,完整 Danksharding 面向数据扩容 |
| ERC-20、ERC-223、ERC-721 是主要 Token 对比 | 这些标准仍有价值,今天还应同时理解 ERC-1155 等后续标准 |
| IOTA = Tangle + MCMC Tip Selection | IOTA Rebased 已迁移到 Move-based、委托 PoS 和新的共识/排序架构 |
| Fabric Chaincode 就是 Docker 容器 | Fabric 2.x 起支持 External Builder/Chaincode as a Service,Docker 不再是硬性模型 |
| Fabric 排序主要理解为早期共识插件 | 当前生产常见 Raft,Fabric v3 已加入 SmartBFT Ordering Service |
| Sawtooth/Burrow/Composer 都是 Hyperledger 主力组件 | Sawtooth、Burrow、Composer 等已经 End of Life/Archived,不能按 2018 项目版图直接选型 |
| Bitcoin BIP 流程按 BIP 1/2 理解 | BIP 3 已替代 BIP 2;BIP 收录仍不等于社区接受或协议激活 |
这种版本变化本身其实也是区块链最有价值的一课:公链不是“主网上线就完成”,而是一个长期升级、分叉、淘汰和治理的活系统。 设计文档只能描述某一时刻的规则,真正的工程能力来自持续理解协议为什么变化。
总结
从性能、智能合约、公链项目、联盟链一路看到 Bitcoin 治理,会发现区块链没有一个单一的“核心技术答案”。它更像一套围绕信任重新分配系统控制权的架构方法。
Bitcoin 选择受限脚本、PoW、UTXO 和保守升级,换来极强的可验证性和社会共识;Ethereum 选择通用 EVM,把区块链变成全球可编程状态机,再通过 PoS、Rollup 和数据扩容逐步解决性能问题;BitShares 和 EOS 用更有限的验证者集合换取交易性能,并把治理问题提前暴露出来;IOTA 用 DAG 进行过激进探索,随后又经历协议重构;Cardano 用研究和形式化方法推进 PoS;NEO、Qtum、Ontology 等项目分别从 VM、UTXO/EVM 混合、身份和信任协议切入;Fabric 则明确放弃匿名开放参与,围绕组织身份、背书策略和确定性排序解决企业间协作。
所以,判断一个区块链设计不能只问“是不是去中心化”“TPS 多少”或者“有没有智能合约”。更有用的问题是:它假设谁可能作恶,谁负责验证,状态存在哪里,执行成本由谁承担,最终性如何获得,扩容成本被搬到了哪一层,协议升级时谁有权说不。
把这些问题问清楚,区块链就不再是一堆币名、共识名词和营销 TPS,而会重新变成我们熟悉的软件工程:明确威胁模型,选择数据结构,划分组件职责,设计故障边界,再为每一个性能和信任假设支付真实成本。
延伸阅读
如果准备继续深入,可以沿几条线分别阅读一手资料:Ethereum Roadmap、The Merge、Scaling 与 Danksharding 文档;ERC-20、ERC-223、ERC-721、ERC-1155 标准;Bitcoin BIP 3 与 BIPs Repository;Lightning Network 的 Payment Channel 与 Routing 文档;Hyperledger Fabric 当前 Ordering Service、Chaincode Lifecycle、External Builders 与 BFT 文档;IOTA Rebased 当前 Architecture 与 Consensus 文档。
这些资料比任何一篇固定时间点的项目介绍更适合做当前版本的实现依据。历史文章则更适合回答另一个同样重要的问题:今天这些设计为什么会变成现在这样。