在上一篇文章《区块链基础知识与关键技术》中,我们介绍了区块链的基本构成和技术原理。作为区块链技术的首个实际应用,比特币无疑是该领域最具代表性的项目。本文将围绕比特币系统的关键组成和技术架构进行详尽分析,欢迎读者指正补充。
比特币系统概览
比特币由中本聪于 2009 年提出,是一种基于去中心化理念的数字加密货币,其初衷是为对抗传统银行体系的中心化控制。因其设计的巧妙性和安全性,比特币在全球范围内迅速走红。然而,也因为其不与真实身份直接绑定,具有较强匿名性,这种特性使其在某些非法活动中被滥用,如洗钱、勒索等,备受争议。
比特币网络是完全开放的,任何人都可接入并运行节点参与维护。本文将使用 Bitcoin Core 客户端演示如何部署本地节点。
节点类型:全节点与轻节点
比特币节点大致分为全节点(Full Node)和轻节点(Light Node)。早期的比特币客户端全部为全节点,即每个节点都保有完整的区块链副本。随着数据量激增,为适配手机、平板等轻型设备,出现了不需要保存完整区块链数据的 SPV(Simplified Payment Verification)节点,即轻节点。
Bitcoin Core 是目前主流的全节点客户端。它全天在线,维护完整账本,保存完整的 UTXO(未花费交易输出)集合,能对从创世区块到当前区块的每笔交易进行验证,确保合法性。此外,全节点决定哪些交易打包入块,并判断哪个分叉成为主链。
相比之下,轻节点只保留区块头,不储存全部交易数据,仅能验证与自身地址相关的交易,且无法判断交易是否不存在。但它仍可通过 Merkle 证明校验特定交易存在,并判断区块挖矿难度。
节点验证示例
以验证 block 300,000 中的交易 T 为例:
全节点会从创世区块开始审查,构建完整的 UTXO 数据库,确认交易 T 的输入未被重复使用;
轻节点则通过 Merkle Path 链接与交易 T 相关的区块头,并等待后续 6 个区块(300,001 至 300,006)确认其有效性。
区块链结构详解
比特币的区块链结构由连续链接的区块组成,数据可存储为单一文件或数据库形式。Bitcoin Core 使用 Google 的 LevelDB 作为数据库引擎。
每个区块包含以下主要部分:
Block Size(区块大小)
Block Header(块头)
Transaction Counter(交易计数器)
Transaction(交易数据本体)
其中,块头大小为 80 字节,具体字段包括:
Version(版本号)
Previous Block Hash(前区块哈希)
Merkle Root(交易树根)
Timestamp(时间戳)
Difficulty Target(难度目标)
Nonce(随机数)
比特币区块哈希是通过对块头进行两次 SHA-256 哈希计算得到的(SHA256(SHA256(Block Header)))。这个哈希值并不直接存储在区块链结构中,而是由节点接收区块后动态生成。块高(Block Height)也可用作区块唯一标识。
由于区块链每个区块都依赖前一区块,任意区块数据一旦被篡改,其后所有区块的哈希值都会变化。因此想要成功篡改区块,必须重新计算所有后续区块的哈希,这一过程在算力上代价极高,几乎无法实现,这为系统的安全性提供了强有力保障。‘’