Skip to content

这是一份为程序员、计算机专业学生或对底层技术感兴趣的硬核读者准备的数字货币(加密货币)入门教程。我们将跳过所有关于炒币、财富故事和宏观经济的空洞叙事,直接解构其底层的分布式系统、密码学和数据结构。

一、 核心账本结构:从明细账到默克尔树 ​

数字货币的本质是一个去中心化的分布式账本。为了在没有中心化银行的情况下确保账本不可篡改,它采用了独特的数据结构。

1. 块-链结构 (Block-Chain) ​

区块链本质上是一个单向链表。每个“红利”(区块)包含两部分:区块头 (Block Header) 和 区块体 (Block Body)。

  • 区块头:包含版本号、前一区块哈希值(PrevHash)、默克尔根(Merkle Root)、时间戳、难度目标(Bits)和随机数(Nonce)。
  • 区块体:包含交易列表。

由于每个区块都包含了前一个区块的哈希值,一旦历史链条中的任何一个字节被修改,该区块的哈希就会改变,从而导致后面所有区块的 PrevHash 失效。这就是“不可篡改性”的物理来源。

2. 默克尔树 (Merkle Tree) ​

区块体中的成百上千条交易并不是简单堆叠的,而是组织成一棵二叉哈希树——默克尔树。

  • 构建过程:将每笔交易进行双重 SHA-256 哈希,两两配对再次哈希,层层递进,直到生成唯一的根哈希(Merkle Root),存入区块头。
  • 技术价值(SPV 节点优化):轻量级节点(如手机钱包)无需下载完整的几百 GB 账本,只需下载区块头。当需要验证某笔交易是否存在时,利用默克尔路径 (Merkle Proof),其时间复杂度仅为 $O(\log N)$。

二、 账户模型:UTXO vs 账户/余额模型 ​

数字货币在底层如何记录“你有多少钱”?主流有两种截然不同的哲学。

1. 比特币的 UTXO 模型 (Unspent Transaction Output) ​

比特币系统里没有“账户”和“余额”的概念,只有“未花费的交易输出 (UTXO)”。

  • 运作原理:你可以把 UTXO 想象成一张张不同面额的实体纸币。每笔交易都在销毁若干张旧纸币(输入),并创造若干张新纸币(输出)。
  • 举例:Alice 要给 Bob 转账 1.5 BTC。Alice 的钱包里只有一张 2.0 BTC 的 UTXO。
    • Input: 2.0 BTC (指向之前某笔交易的 Output)
    • Output 0: 1.5 BTC (所有权归 Bob)
    • Output 1: 0.5 BTC (找零,所有权归 Alice)
  • 技术优势:极高的高并发处理能力(交易之间无状态依赖,可并行验证);隐私性更好。

2. 以太坊的 Account 账户模型 ​

以太坊(Ethereum)采用了更符合人类直觉的账户模型,类似于银行账户。

  • 运作原理:系统显式记录每个地址的 Balance(余额)和 Nonce(防止重放攻击的交易计数器)。
  • 技术优势:天然对智能合约友好,易于在状态机中维护复杂的逻辑,但状态更新需要串行执行,容易遇到性能瓶颈。

三、 密码学基石:所有权与隐私 ​

去中心化意味着任何人都可以广播交易。如何证明“这笔钱是我的,且我想转给别人”?

1. 非对称加密与椭圆曲线 (ECDSA) ​

数字货币普遍采用椭圆曲线数字签名算法(比特币和以太坊使用 secp256k1 曲线)。

  • 私钥 (Private Key):一个 256 位的随机数(由密码学安全的伪随机数生成器产生)。这是最高控制权。
  • 公钥 (Public Key):通过椭圆曲线乘法从私钥计算得出:$K = k \cdot G$(其中 $k$ 为私钥,$G$ 为基点)。由于椭圆曲线离散对数问题 (ECDLP) 的数学困难性,无法逆向从公钥推导私钥。
  • 地址 (Address):公钥经过一系列哈希(如 SHA-256, RIPEMD-160 或 Keccak-256)并进行 Base58 或 Hex 编码后得到。

2. 交易签名与验证流程 ​

当你想发起一笔转账时:

  1. 打包:将交易明细(输入、输出、金额)序列化为字节流。
  2. 哈希:对字节流进行哈希得到摘要 $M$。
  3. 签名:用你的私钥对 $M$ 进行签名,生成签名数据 $(R, S)$。
  4. 广播:将交易明细和签名全网广播。
  5. 验证:矿工/全节点收到后,用你的公钥、交易摘要 $M$ 和签名 $(R, S)$ 进行数学验证。若通过,说明交易确实由私钥持有者发起且未被篡改。

四、 共识机制:分布式系统的一致性 ​

在没有中心协调者的情况下,网络如何对“哪个区块先发生”达成共识?这需要解决经典的拜占庭将军问题。

1. 工作量证明 (PoW - Proof of Work) ​

比特币采用的机制,通过消耗算力来争夺记账权。

  • 数学本质:寻找一个随机数 Nonce,使得区块头的哈希值小于一个特定的目标值 Target。

    $$\text{SHA-256}(\text{SHA-256}(\text{Block Header})) < \text{Target}$$

  • 特点:

    • 难度动态调整:比特币每 2016 个区块(约两周)调整一次 Target,确保无论全网算力如何变化,平均出块时间始终稳定在 10 分钟左右。
    • 最长链原则:当出现分叉时,节点永远选择累计工作量最大(最长)的链作为主链。

2. 权益证明 (PoS - Proof of Stake) ​

以太坊目前采用的机制,用“资产质押”代替“算力消耗”。

  • 数学本质:节点质押一定数量的代币(如 32 ETH)成为验证者(Validator)。系统根据质押权重,通过伪随机算法(如 RANDAO)动态选出提案节点和验证委员会。
  • 惩罚机制 (Slashing):如果验证者尝试在两条分叉链上同时签名(双重投票)或离线,其质押的资产会被直接扣除(Slashing),从而在经济学上杜绝作恶。

五、 进阶:脚本系统与智能合约 ​

数字货币不仅是“钱”,还是“可编程的钱”。

1. 比特币脚本 (Bitcoin Script) ​

比特币有一套基于栈 (Stack) 的、非图灵完备的脚本系统。

  • 为什么非图灵完备?:故意去掉了循环指令(如 FOR, WHILE),防止黑客提交包含死循环的交易来挂起全网全节点。

  • P2PKH (Pay-to-Public-Key-Hash) 示例:

    最常见的解锁脚本(来自输入)和锁定脚本(来自输出)组合后运行:

    <Signature> <PublicKey> OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

    通过出栈、入栈操作,最终返回 True 即可花费该 UTXO。

2. 以太坊虚拟机 (EVM) 与智能合约 ​

以太坊引入了图灵完备的虚拟机(EVM)。

  • 智能合约:部署在区块链上的代码。它们有自己的存储空间(Storage)和账户余额。
  • 停机问题与 Gas 机制:为了防止死循环和恶意代码耗尽节点资源,EVM 引入了 Gas(燃料) 机制。每执行一条汇编指令(如 ADD, SSTORE)都会消耗固定数量的 Gas。如果用户提供的 Gas 耗尽,交易会立即回滚(Rollback),但扣除的 Gas 不予退还。

六、 总结:从技术视角看一笔交易的一生 ​

  1. 本地签名:你的钱包客户端用私钥对交易数据签名,生成交易报文。
  2. P2P 传播:交易通过流言协议(Gossip Protocol)在点对点网络中广播。
  3. MemPool 暂存:全节点收到交易,验证签名合规后,将其放入内存池 (Mempool) 等待打包。
  4. 共识打包:矿工/验证者从 Mempool 挑高处理费(Fee)的交易,组织成默克尔树,开始计算 PoW 哈希(或在 PoS 中轮到该验证者出块)。
  5. 全网广播与验证:新区块被找出/提出,全网节点验证该区块内所有交易的有效性,验证通过后连接到自己的本地链末端,更新自己的 UTXO 集合或账户状态机。

基于 Vite 强力驱动 | 纯静态轻量托管