本节摘要:区块链由区块(区块头+区块体)、哈希指针、节点网络、共识机制与智能合约五大要素构成。本节先拆解区块头各字段(前块哈希、时间戳、难度、Nonce、Merkle 根)的作用,再讲节点与网络的职责分工,最后说明共识机制与智能合约在系统中的位置。读完你就能读懂一个区块的"解剖图"。
阅读完本节,你应当能够:
上一节我们讲了区块链"凭什么可信",但还没回答"它由什么组成"。就像了解一台发动机,光知道它"动力强"没用,得知道气缸、活塞、曲轴各自干什么。区块链这台机器,核心零件就是区块、链、节点、共识、合约五件套。
理解顺序有个窍门:先看一个区块的内部(静态),再看区块怎么串成链(结构),最后看节点们怎么协作(动态)。本节按这个顺序展开。
区块头存放元数据,是区块的"门面"。以比特币为例,区块头包含:
区块体存放真正的内容:一笔笔交易。交易数量几十到几千不等。区块体不直接参与哈希链接(链接靠区块头),但通过 Merkle 根与区块头绑定——交易一变,Merkle 根就变,区块头哈希就变,链条就断。
每个区块头都包含前一个区块头的哈希值,这就是哈希指针(Hash Pointer)。它不只是"指向",还"锁定":前块内容任何改动都会改变其哈希,进而与后块记录的对不上。因此整条链在结构上就是一张"一动全动"的网。

| 要素 | 职责 | 类比 |
|---|---|---|
| 区块头 | 元数据 + 链的焊点 | 文件的封面页 |
| 区块体 | 实际交易内容 | 文件正文 |
| 哈希指针 | 链接并锁定前后块 | 盖了骑缝章的装订线 |
| 节点网络 | 存储、验证、传播 | 图书馆联盟 |
| 共识机制 | 决定谁记账、怎么对齐 | 议会表决规则 |
| 智能合约 | 自动执行规则 | 自动售货机 |
⚠️ 常见坑:把"轻节点"当成全功能节点。轻节点不验证全部交易,只做存在性证明,安全级别低于全节点——大额资金操作应使用全节点或可信服务。
💡 关键直觉:Merkle 根是整个区块的"摘要之摘要"——验证一笔交易只需沿 Merkle 树提供一条"证明路径",无需下载整块数据,这就是轻节点能工作的秘密。
把区块头六个字段拆开,每个字段都有故事:
版本号:标识区块格式的版本。当协议升级(软分叉/硬分叉)时,新老版本区块在链上共存,靠版本号区分。这也是"区块链升级难"的微观体现——每个区块都要声明自己按哪套规则生成。
前块哈希:链条的"焊点",指向父区块头。它是哈希指针的具体实现,锁定了父区块的一切内容。字段虽小,却是"不可篡改"的直接载体。
时间戳:区块生成时间(Unix 时间戳,秒级)。它让区块有了"先后顺序",是历史可追溯的基础。注意时间戳由矿工填写,只能粗略校准,不能作为精确定时器。
难度目标(Bits):一个编码了目标哈希范围的字段。难度越高,目标越小,找到合格 Nonce 的平均尝试次数越多。它随全网算力自动调整,维持约 10 分钟一个块(比特币)。
Nonce:32 位随机数,矿工从 0 递增尝试。找不到就让时间戳/交易顺序微调后继续。它是 PoW"工作量"的承载者——每一个成功的 Nonce 背后,是天文数字次失败的尝试。
Merkle 根:整块交易的两两哈希合并之根(详见 3.5)。它把"几千笔交易"压缩成"一个哈希",放进区块头——区块体内容一旦变动,根就变,区块头哈希就变。
节点的完整光谱比想象中更细:
| 节点类型 | 存储 | 职责 | 典型场景 |
|---|---|---|---|
| 全节点 | 完整账本 | 独立验证一切 | 交易所、矿池、专业钱包 |
| 归档节点 | 完整账本+历史状态 | 历史查询、分析 | 区块链浏览器、研究 |
| 轻节点 | 仅区块头 | 存在性验证 | 手机钱包 |
| 矿工/验证者 | 完整账本(通常) | 打包+共识 | 出块 |
| 监听节点 | 仅交易广播 | 监听链上事件 | 服务通知、监听合约事件 |
对开发者而言,这个区分直接影响架构设计:要查历史状态用归档节点,要监听事件用监听节点,要极速验证用轻节点。选错节点类型,要么慢、要么贵、要么数据不全。
初学时最易混淆的还有三个词:区块(Block)、账本(Ledger)、链(Chain)。它们的关系是层层包含:
| 概念 | 定义 | 关系 |
|---|---|---|
| 区块 | 一段时间内交易与元数据的打包单元 | 链的最小组成单位 |
| 链 | 按哈希指针串联的区块序列 | 账本的组织形式 |
| 账本 | 链 + 状态(如 UTXO 集、账户余额) | 系统的完整数据视图 |
形象地说:区块是"一页纸",链是"装订成册",账本是"册子+每页结算出的最终结果"。读代码或文档时,分清这三个词指的是哪一层,能避免大量误会。
理解了结构,最好的巩固方式是去区块链浏览器上看一个真实区块。在任意比特币区块浏览器(如 mempool.space、blockchain.com 的浏览器页)里打开最新区块,你会看到:
把这些字段和本节的区块头结构一一对照,你会真正"看见"之前抽象的描述。这也是入门区块链最被低估的学习方法——对着真实数据读概念,记忆深十倍。
区块结构直接决定性能,这个关系值得展开:
区块大小上限:比特币约 1-4MB,以太坊受 Gas 限制。上限决定了每块能装多少交易。
出块时间:比特币约 10 分钟,以太坊约 12 秒。时间越短,确认越快,但网络同步压力越大。
吞吐量公式:TPS ≈ 每块交易数 ÷ 出块时间。想让 TPS 翻倍,要么加大区块(存储压力↑)、要么加快出块(分叉风险↑)——这就是扩容困境的结构性根源。
结构调整的方向:分片(把交易分到多条链)、Layer2(把高频交易搬到链下批量结算)、轻客户端(只验证关键数据)。理解区块结构,就能理解这些方案为什么这么设计。
问:为什么区块头要单独存哈希而不是整块内容?
因为链接只需要"指纹"。存整个父块内容既浪费空间又慢——哈希 32 字节就能锁定整块,且任何篡改都会改变它。
问:Nonce 用完了怎么办?
Nonce 只有 32 位(约 42 亿),算力强时很快耗尽。矿工的做法是微调时间戳或交易顺序后再继续——本质上扩大了搜索空间。
问:一个节点可以既当全节点又当矿工吗?
可以。全节点是"验证者+存储者",矿工是"打包者"。多数矿池跑全节点,但技术上角色可分离。
问:智能合约存在区块体还是区块头?
合约代码存在区块体的交易数据里(部署合约是一笔特殊交易)。区块头只有摘要,不直接存代码。
区块结构不是一成不变的,观察演进能理解设计的灵活性:
| 阶段 | 变化 | 动机 |
|---|---|---|
| 比特币 | 固定 1MB 上限 | 防滥用、控制同步成本 |
| SegWit(2017) | 隔离见证,扩容至 ~4MB | 修复交易可塑性+提容量 |
| 以太坊 | Gas 限制动态调 | 平衡容量与安全 |
| 新型链 | 并行区块、状态压缩 | 提升吞吐与存储效率 |
启示:区块结构的设计围绕"容量、安全、同步成本"三方平衡演进——没有永恒的最优结构,只有适应当下约束的合理设计。理解这个演进视角,比记住某个链的固定参数更有价值。
用一张结构清单把本节全部要素收拢,作为速记卡:
一个区块 = 区块头 + 区块体 ├─ 区块头(元数据,约 80 字节) │ ├─ 版本号:规则版本 │ ├─ 前块哈希:链条焊点(不可篡改的关键) │ ├─ 时间戳:出块时间 │ ├─ 难度:挖矿难度 │ ├─ Nonce:工作量证明的搜索空间 │ └─ Merkle 根:交易汇总指纹 ├─ 区块体(交易数据) │ ├─ 交易列表(数十~数千笔) │ └─ 智能合约调用(以太坊类) └─ 关联要素 ├─ 节点网络:全节点/轻节点/矿工 ├─ 共识机制:决定谁出块 └─ 加密技术:签名与哈希支撑
这张清单就是 1.3 节的"产品说明书"——背下结构,再逐字段理解"为什么这么设计",区块的解剖就完成了。
零件认完了,下一节我们把它们装起来转一圈——看一笔交易从用户发起、全网广播、被打包进块、验证确认的完整生命周期。
这张图把本节字段收进一个视角:区块头负责"认亲"(前块哈希定血统)与"验货"(Merkle 根证交易集合未被篡改),区块体负责"装货"。链的不可篡改主要来自头部两个字段,效率来自体部的批量组织——第 3 章会分别拆开这两条线。