区块链如何运作:分步详解
要理解区块链如何运作,需要沿着一笔交易从发起到最终确认的全过程进行跟踪。尽管底层技术涉及复杂的密码学和分布式系统工程,但核心流程却很简洁:创建交易、广播交易、验证交易、将交易打包成区块,并永久记录到共享账本中。
本指南以 Bitcoin 为主要示例,逐步讲解区块链流程,同时指出 Ethereum 等其他区块链的差异。读完后,你将准确理解从你点击“发送”的那一刻,到交易成为区块链中不可逆记录的那一刻之间,到底发生了什么。
第 1 步:创建交易
每一次区块链交互都从创建交易开始。当你决定发送加密货币时,钱包软件会构造一条包含多项信息的交易消息。
交易输入与输出
Bitcoin 使用 未花费交易输出(UTXO) 模型。你可以把 UTXO 理解为钱包里的数字钞票。假设你在两笔独立交易中分别收到 0.5 BTC 和 0.3 BTC,那么你就有两个 UTXO,总计 0.8 BTC。當你要发送 0.6 BTC 时,钱包会:
- 选择合计足以覆盖金额的 UTXO(0.5 + 0.3 = 0.8 BTC)。
- 创建一笔交易,将收款地址作为一个输出(0.6 BTC)。
- 创建一个找零输出返回到你自己的地址(0.2 BTC 减去交易手续费)。
- 被选中的 UTXO 变为“已花费”,新输出变成新的 UTXO。
Ethereum 使用不同的 账户模型(account-based model),更类似传统银行账户。每个地址都有余额,交易只是从发送方扣款并给接收方入账。
数字签名
交易在广播之前,必须使用发送方的 私钥 进行签名。这也是为什么你的助记词安全性至关重要:私钥由助记词派生,任何持有私钥的人都可以代表你签署交易。
签名过程如下:
- 使用 SHA-256(Bitcoin)或 Keccak-256(Ethereum)对交易数据做哈希。
- 使用发送方私钥通过 ECDSA 算法对哈希进行签名。
- 将生成的数字签名附加到交易中。
- 任何人都可以用发送方公钥验证签名,从而确认交易由密钥持有者授权,而无需看到私钥本身。
这是一个基本原则:签名证明所有权。在这个过程中,私钥不会离开你的设备。网络只会看到签名,而签名无法反推出私钥。
第 2 步:广播交易
签名完成后,交易会被广播到区块链网络。你的钱包会连接一个或多个 节点(运行区块链软件的计算机),并发送交易数据。
点对点传播
区块链网络采用 点对点(P2P) 拓扑,没有中心服务器。节点收到你的交易后会先做初步校验;若有效,就转发给其连接的对等节点。对等节点继续校验并转发。通常几秒内,你的交易会传播到整个网络,并在 2 到 15 秒内到达多数节点。
Mempool
传播后,交易会进入 mempool(内存池)——各节点维护的未确认交易等待区。mempool 不是一个全网共享的单一池子;每个节点都有自己的版本,因网络延迟和节点策略不同会有细微差异。
mempool 中的交易主要按 费率 排序(Bitcoin 按每字节 satoshi,Ethereum 按 gas price)。矿工和验证者通常优先选择高费率交易,以最大化收益。在网络需求高峰期,mempool 可能大幅膨胀,低手续费交易可能要等待数小时甚至数天才会确认。
交易手续费
交易手续费有两个作用:
- 激励矿工/验证者 把你的交易打包进区块。
- 防止垃圾交易,提高恶意刷交易的成本。
在 Bitcoin 中,手续费按交易字节大小计算(而非转账金额)。如果两笔交易字节大小相同,发送 10 BTC 和发送 0.001 BTC 的手续费可能一样。
在 Ethereum 中,手续费采用 EIP-1559 模型,包含 base fee(销毁)和 priority tip(支付给验证者)。base fee 会根据网络拥堵动态调整。
第 3 步:交易验证
在交易被打包进区块前,节点会依据协议规则独立验证交易。这一步对维护区块链完整性至关重要。
验证检查
每个节点会对收到的每笔交易执行多项检查:
- 语法有效性:交易格式是否符合协议规范?
- 签名验证:数字签名是否与发送方公钥匹配?这可确认交易由私钥持有者授权。
- 双花检查:引用的 UTXO(Bitcoin)是否仍未花费,或账户(Ethereum)余额是否充足?
- 脚本验证:锁定脚本与解锁脚本是否正确执行?(Bitcoin 使用名为 Script 的脚本语言定义花费条件。)
- 手续费充足性:交易手续费是否达到节点最小中继阈值?
- 大小限制:交易是否在协议大小约束内?
若交易未通过任一检查,就会被拒绝且不会继续转发。正是这种去中心化验证机制,使区块链能抵抗欺诈交易:每个节点都对每笔交易执行同一套规则验证。
第 4 步:构建区块
矿工(在 PoW 系统中)或验证者(在 PoS 系统中)会从 mempool 收集已验证交易,并组装为候选区块。
区块结构
一个典型区块包含:
区块头(Block Header):
- Version:协议版本。
- Previous block hash:前一个区块头的 SHA-256 哈希。这就是区块链中“链”的来源。
- Merkle root:对区块内所有交易汇总后的单一哈希。
- Timestamp:区块创建的大致时间。
- Difficulty target(PoW):区块哈希必须低于该阈值才有效。
- Nonce(PoW):矿工搜索有效哈希时递增的计数器。
区块体(Block Body):
- Transaction count:包含的交易数量。
- Transaction list:实际交易数据。
- Coinbase transaction:特殊的第一笔交易,用于生成新区块奖励并收取全部交易手续费。这是区块中唯一没有输入的交易,按协议发行计划凭空创造新货币。
交易选择
矿工通常以收益最大化为目标,优先选择费率最高的交易。但他们也必须遵守 区块大小限制(Bitcoin 为 4 MB 区块权重)或 区块 gas 限制(Ethereum 约 3000 万 gas)。这形成了区块空间的自然市场:需求高时,用户通过提高费用竞争打包机会。
部分矿工还可能有额外策略,例如无视费用优先打包某些类型交易,或排除与受制裁地址交互的交易。
Merkle 树构建
Merkle 树通过反复对交易哈希两两组合并哈希而成:
- 先分别对每笔交易做哈希。
- 将相邻哈希配对后再哈希。
- 沿树向上重复该过程,直到只剩一个哈希:Merkle root。
Merkle root 是全部交易的紧凑摘要。任何一笔交易被篡改,Merkle root 都会变化,篡改会立刻暴露。该结构还支持 简化支付验证(SPV),轻节点无需下载完整区块也能验证交易是否被包含。
第 5 步:共识与出块
候选区块必须通过网络的 共识机制 才会被接受。不同区块链在这里差异显著。
工作量证明(Bitcoin)
在工作量证明中,矿工竞争寻找一个 nonce,使其与区块头数据组合后哈希结果低于网络 difficulty target。这本质上是暴力搜索:
- 矿工构造包含所有必填字段的区块头。
- 矿工用 SHA-256 对区块头哈希(Bitcoin 中执行两次)。
- 若结果哈希低于难度目标,区块有效。
- 若不满足,矿工递增 nonce 重试。
- 全网矿工每秒重复该过程数十亿次。
难度目标每 2,016 个区块调整一次(约两周),以在总算力变化时仍维持平均 10 分钟出块时间。
当矿工找到有效哈希,就解出了“难题”,可将区块广播到网络。第一个找到有效解的矿工赢得 区块奖励(2024 年 4 月减半后当前为 3.125 BTC)以及该区块全部交易手续费。
权益证明(Ethereum)
Ethereum 使用权益证明,验证者根据质押(锁定)ETH 数量被随机选中提议区块,流程根本不同:
- 每个 12 秒 slot 会伪随机选出一名验证者提议区块。
- 提议者创建区块并广播。
- 一个验证者委员会对区块有效性进行 attest(投票)。
- 收集到足够 attestations 后,区块被视为 justified,并最终 finalized。
权益证明去除了工作量证明的高能耗哈希计算,同时通过经济激励维持安全性:若验证者作恶,其质押 ETH 会被罚没(slashing)。
如需更深入比较,请参阅我们的共识机制指南。
第 6 步:区块传播
有效区块产出后,还必须分发到全网。
网络传播
成功出块的矿工或验证者会将新区块广播给对等节点,这些节点验证后继续转发。根据区块大小和网络条件,区块传播到多数节点通常需要 1 到 10 秒。
紧凑区块中继(BIP 152)
Bitcoin 使用 Compact Block Relay 加速传播。由于多数节点的 mempool 中已包含这些交易,新区块只需传输紧凑摘要(短交易 ID),而非完整交易数据。节点可从本地 mempool 重建完整区块,带宽需求可降低约 90%。
孤块
有时两个矿工几乎同时找到有效区块,会产生临时分叉。网络会自然收敛:先获得下一个区块的链成为最长链,另一条上的区块会变成 orphan(或 stale block)。孤块中的交易会回到 mempool,并通常被打包进获胜链的后续区块。
第 7 步:区块验证与链扩展
节点收到新区块后,会先独立验证整个区块,再决定是否接受。
全量验证
节点会验证:
- 区块头有效性:格式正确、前一区块哈希有效、工作量证明满足难度目标(或 PoS 中验证者签名有效)。
- 交易有效性:区块内每笔交易都通过第 3 步描述的同样检查。
- Merkle root 一致性:计算得到的 Merkle root 与区块头中值一致。
- 区块大小/权重:区块不超过协议限制。
- Coinbase 有效性:区块奖励与手续费收取符合当前协议规则。
- 时间戳范围:区块时间戳在允许范围内。
若全部通过,节点会将区块加入本地区块链副本,并更新其 UTXO 集(或 Ethereum 的状态 trie),然后将区块转发给对等节点。
第 8 步:交易确认
当你的交易被写入有效区块时,它就获得了 第一次确认。之后每新增一个构建在该区块之上的区块,确认数都会加一。
为什么多次确认很重要
一次确认意味着交易已经在区块链上,但若竞争链反超,该区块理论上仍可能变成孤块。每增加一次确认,链重组概率都会指数级下降:
| Confirmations | Bitcoin Wait Time | Security Level |
|---|---|---|
| 0(未确认) | — | 易受双花攻击 |
| 1 | ~10 分钟 | 适合小额交易 |
| 3 | ~30 分钟 | 安全性较高 |
| 6 | ~60 分钟 | 大额交易常用标准 |
| 12+ | ~2 小时 | 非常高的安全性 |
Bitcoin 常见的 6 次确认 标准意味着成功链重组(进而双花)的概率极低,近乎天文级别。攻击者需要控制超过 50% 的全网算力,并持续一小时以上。
Ethereum 提供更快终局性。在正常情况下,交易约在 12 到 15 分钟内达到终局(若要逆转,至少需烧毁全网三分之一质押 ETH)。
终局性类型
- 概率终局性(Bitcoin):每次确认都会让逆转更困难,但不存在绝对不可逆时点。6 次确认是广泛接受的实务阈值。
- 经济终局性(Ethereum PoS):完成 finalization 后,逆转交易需要烧毁价值数十亿美元的质押 ETH,对攻击者在经济上不理性。
- 绝对终局性(某些基于 BFT 的链):区块确认后交易立即不可逆。Tendermint 系网络具备这一特性。
完整图景:一笔交易的旅程
总结整个生命周期:
- 你在钱包中发起转账。
- 钱包构建交易,选择输入和输出(UTXO)或指定转账金额(账户模型)。
- 私钥对交易签名,证明交易由你授权。
- 已签名交易被广播 到 P2P 网络。
- 节点验证交易 并将其加入各自 mempool。
- 矿工/验证者从 mempool 选择你的交易 并放入候选区块。
- 通过工作量证明或权益证明产出区块。
- 新区块在网络中传播。
- 节点验证并接受区块,链被扩展。
- 随着后续区块增加,你的交易确认数提升。
从创建到首次确认,这一过程在 Bitcoin 中约需 10 分钟,在 Ethereum 中约需 12 秒;但你的交易可能还会在 mempool 额外等待,直到被选中。
你的交易安全始于密钥安全。使用 SafeSeed Seed Phrase Generator 生成加密学安全的 BIP-39 助记词。区块链流程中的每一步(从交易签名到所有权证明)都依赖私钥安全,而私钥由助记词派生。
高级概念
交易可塑性(Transaction Malleability)
在早期 Bitcoin 版本中,交易 ID(txid)可在不使交易失效的情况下被修改,这种特性称为 transaction malleability。2017 年的 Segregated Witness(SegWit)升级基本解决了该问题:它将签名数据与交易数据分离,确保签名后 txid 不会被篡改。
Replace-By-Fee(RBF)
Bitcoin 支持 Replace-By-Fee,发送者可用更高手续费重新提交交易以加速确认。新交易会替换 mempool 中的原交易。这在网络拥堵且原始手续费过低时很有用。支持 RBF 的钱包会将交易标记为可替换,高手续费版本会优先处理。
交易批处理(Batching)
交易所和大额发送方常将多笔支付 批处理 为一笔包含多个输出的交易。与逐笔发送相比,这样更节省空间,可降低总手续费和区块空间占用。
FAQ
一笔区块链交易需要多久?
交易时间因链而异。Bitcoin 平均每 10 分钟出一个区块,但你的交易在被打包前可能先在 mempool 等待。Ethereum 每 12 秒出块。Lightning Network 等 Layer 2 方案可在毫秒级完成支付。提交到首次确认的总耗时取决于网络拥堵和你支付的手续费。
如果我发到了错误地址会怎样?
区块链交易不可逆。如果你把加密货币发到错误地址,没有中心化机构能撤销交易。若该地址属于某人,你只能联系对方并希望其退回资金。若地址无效或无人控制,资金基本会永久丢失。发送前务必反复核对地址。
区块链交易会失败吗?
在 Bitcoin 中,结构正确且签名有效的交易最终通常都会被确认(但手续费极低时可能很久)。在 Ethereum 中,若智能合约执行报错或 gas 不足,交易可能失败(revert)。两种情况下手续费都会被消耗。一些钱包提供交易模拟,可在提交前预测交易是否成功。
什么是交易哈希(txid)?
交易哈希(txid 或 transaction ID)是每笔交易的唯一标识符,由交易数据哈希生成。你可用 txid 在区块浏览器中追踪交易(如 Bitcoin 的 mempool.space 或 Ethereum 的 etherscan.io)。txid 在交易创建时即被分配,确认后不会变化。
为什么交易手续费会波动?
交易手续费由区块空间供需决定。当大量用户同时交易时,会通过提高手续费竞争有限区块空间;在低峰期,费用下降。Bitcoin 的区块空间是固定供给(每 10 分钟一个、每块 4 MB 权重),高需求时手续费可能剧烈上升。Ethereum 的 EIP-1559 提供了更可预测的 base fee,会按网络利用率算法调节。
已确认和未确认交易有什么区别?
未确认交易存在于 mempool 中,但尚未写入区块,仍处于待处理状态,理论上可能被替换或被丢弃。已确认交易已写入区块并加入区块链。随着其上方新区块持续增加,确认数提高,交易被逆转会越来越困难。
矿工可以选择不打包我的交易吗?
可以。矿工和验证者可自行决定在区块中包含哪些交易,并无义务打包特定交易。但经济激励会强烈驱动他们尽量打包更多可收取手续费的交易。实践中,只要交易有效且手续费合理,最终通常会被某个矿工打包,即使少数矿工选择忽略它。