Skip to content

具体实现

区块链是一个去中心化的账本,去中心化的账本的主要记录方式有两种:

  • 基于交易的账本(Transaction-based Ledger)
  • 基于账户的账本(Account-based Ledger)。

这两种模型在记录和处理交易的方式上有明显的区别。

基于交易的账本(Transaction-based Ledger) 这种模式主要由比特币采用,使用的是 UTXO 模型(Unspent Transaction Output 尚未被花掉的交易输出)。系统中并无显示记录账户包含比特币数,实际上其需要通过交易记录进行推算。

基于账户的账本(Account-based Ledger) 这种模式主要由以太坊采用,每个账户有一个余额,交易直接修改账户余额。

UTXO

比如,A 转给 B 五个 BTC,转给 C 3 个 BTC,B 将 5 个 BTC 花掉,则该交易记录不保存在 UTXO 中,C 没有花掉,则该交易记录保存在 UTXO 中。

UTXO 集合中每个元素要给出产生这个输出的交易的哈希值,以及其在交易中是第几个输出。通过这两个信息,便可以定位到 UTXO 中的输出。

为什么要维护这样一个数据结构?

为了防范“双花攻击”,判断一个交易是否合法,要查一下想要花掉的 BTC 是否在该集合中,只有在集合中才是合法的。如果想要花掉的 BTC 不在 UTXO 中,那么说明这个 BTC 要么根本不存在,要么已经被花过。所以,全节点需要在内存中维护一个 UTXO,从而便于快速检测 double spending(双花攻击)。

区块链本身不直接维护 UTXO 集合。区块链主要是一个按顺序记录所有交易历史的账本,每个区块记录了多个交易。而 UTXO 集合是基于区块链的交易数据动态生成和维护的,它并不是直接存储在区块链内部的。

假如有人收到 BTC 转账,但一直不花,那么这个信息会一直保存在 UTXO 中。这种情况可能是该用户不想花这些 BTC(如:中本聪) ,也有可能是忘记了私钥导致无法花掉。所以,UTXO 是逐渐增大的,但该数据目前来说,一个普通的服务器硬盘中是可以完全保存这些数据的。

具体的区块信息

普通转账交易

挖矿过程的概率分析

比特币系统安全性分析

参考

北京大学肖臻老师《区块链技术与应用》

君子慎独