UTXO与普通账户模型

作者:Crypto White trustless创始人

来源:https://biquanlibai.notion.site/fffb0783e68e4ae898cd980ce8e9f37b

模型基础

区块链的tx分为两种模型,分别是比特币为代表的UTXO(Unspent Transaction Output)模型,和以太坊为代表的Account模型。前者适用于货币记账,后者适用于链上应用。

UTXO模型

  1. 类似于现金的交易模型

  2. 比特币的tx结构(Github

const std::vector<CTxIn> vin;
const std::vector<CTxOut> vout;
const int32_t nVersion;
const uint32_t nLockTime;
  1. 一个tx包含一个或多个输入(Input)、一个或多个输出(Output)。以币安热钱包地址为例:

  • 每个Output包含了转账的目标Address和Value,拥有这个Address的私钥即可花费这个Output

  • 每个Input通过(txid, index)指向了之前一笔tx的一个Output,通过Output私钥签名将这个Output花费掉

  • 未被花费的Output称作UTXO,一个UTXO只能被花费一次

  • 一笔tx的Input金额之和会略大于Output金额之和,差值是付给矿工的Fee

  • Fee的多少和tx的size正相关

4.支付流程:用户A支付金额n给用户B

  • 用户A会维护自己所拥有的UTXO集合(比如币安热钱包地址的UTXO集合

    • 遍历链上的历史tx得到

  • 用户A从集合中选取一个或多个UTXO作为tx的Input

    • 这些UTXO的金额之和为m,m大于n

  • 用户A为tx设置两个Output

    • 一个Output支付给B的地址,金额是n

    • 另一个Output支付给A的一个找零地址,金额为m-n-fee

  • 同样以币安热钱包地址举例

    • 这个tx支付2 BTC给热钱包并找零

    • 这个tx把热钱包的一个1 BTC的UTXO支付给多个地址

5.UTXO模型的特点

  • 隐私性强

    1. 用户的钱包由多个地址组成:默认找零给新地址,默认每个地址只用一次

    比特币的多地址钱包

  • 并发容易

    1. 支持一对多转账

    2. 一个地址的两个UTXO可以独立花费

  • 结论

    1. UTXO模型是符合“去中心化账本”需求的最简设计

    2. 简洁意味着安全,比特币运行十余年未出过问题

    3. UTXO的设计和钱包里的一堆coin相似,印证了Bitcoin的起名

  1. 例子回顾:双花攻击(Double-spending Attack)

最后更新于