[学习笔记] 比特币的交易

交易是比特币系统中最重要的部分。系统中的其他部分,都是为了确保交易可以

  • 被生成
  • 通过比特币网络的验证,在网络中传播
  • 最终被添加到记录全球比特币交易数据的总账簿(比特币区块链)中

比特币的交易,使用复式记账法(复式簿记,double-entry bookkeeping)的形式,输入和输出比特币总量的差值,是隐含在这笔交易中的手续费。

对交易的双方:

  • 付款方,需要提供证明和授权信息,证明自己拥有和授权支付这些比特币,是这笔交易的输入
  • 收款方,需要提供“收款地址”,“接收”比特币,是这笔交易的输出

回忆一下非对称加密的细节,使用公钥 pk ,去验证消息 msg 的签名 sig ,如果验签成功,

verify(pk, msg, sig) == true

我们可以说,持有这个公钥对应私钥的那个人,认可消息的内容。

可以把公钥,当作一种身份标识,认可某个消息,就用私钥对消息签名。

可以把提供正确的消息签名,当作身份认证和授权的手段,因为只有持有了这个公钥对应的私钥,才能提供正确的签名。

这正是比特币交易的基本原理:

  • 使用非对称加密的公钥,或者公钥的哈希(数据指纹),作为比特币的“收款地址”(身份标识)
  • 支付时,除非用对应私钥签名,证明拥有和授权支付这些比特币,否则无法支付

公钥和私钥一一对应只能单向计算,支付时,只有拥有对应的私钥,才能生成正确的证明和授权信息,无法伪造,不可抵赖。

交易链条

Alice 用现金从 Joe 那里换了点比特币,之后去 Bob 的咖啡店支付比特币购买咖啡。

比特币的每笔交易,都用一个哈希值来索引和标识。

交易7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18中:

  • Joe 支付了0.1个币给 Alice
  • 这笔交易没有手续费

Alice 在随后的交易0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2中:

  • 用之前的交易输出,作为输入
  • 输出0.015个币给 Bob 购买咖啡
  • 输出0.0845个币的找零(Change)
  • 手续费为0.0005个币

从图中你能看到:

  • 一笔交易的输入,是之前某笔交易的输出
  • 交易输出是构成比特币交易的基本元素

比特币的单位

像人民币可以用元、角、分表示一样,比特币最小可以被分割成八位小数的(satoshi)。

1 BTC = 100,000,000 satoshi

除了聪之外,常用的还有 mBTC 和 μBTC。

1 BTC = 1,000 mBTC

1 BTC = 1,000,000 μBTC

UTXO

比特币网络会跟踪所有可找到的和可使用的交易输出,称为未花费的交易输出(UTXO,Unspent Transaction Outputs)。

“未花费”的意思是,这个交易输出,可以在之后的交易的中(作为输入)被花费。

所有 UTXO 的集合,被称为 UTXO 集(UTXO set)。

交易会消耗 UTXO(输入),同时创建新的 UTXO(输出),交易反映了 UTXO 集的变化。

UTXO 是面值为“聪”的、离散不连续的、不可分割的价值单元

  • 面值可以是1聪(satoshi)的任意整数倍
  • 一旦被创建出来便不可分割,只能在之后的某笔交易中被整体消耗

你可以组合若干小额 UTXO,来满足支付需求,就像你凑零钱去买可乐一样。

如果你有两个 UTXO,一个面值为1比特币,一个面值为2比特币,需要支付2.5比特币(没有手续费):

  • 这两个 UTXO 作为交易输入,都被整体消耗掉
  • 产生两个新的 UTXO,一个面值为2.5比特币(支付),一个面值为0.5比特币(找零)

如果一个 UTXO 的面值比一笔交易的所需量大,你使用一个面值为4比特币的 UTXO 去买可乐(没有手续费):

  • 这一个4比特币的 UTXO 作为交易输入,被整体消耗掉
  • 产生两个新的 UTXO,一个面值为2.5比特币(支付),一个面值为1.5比特币(找零)

一个 UTXO 是一个不可分割的价值单元,就像你不能把一张人民币撕开后继续使用一样。

你可以通过组合 UTXO,来创建任意金额的比特币交易。

Coinbase 交易

一笔交易会消耗之前创建的 UTXO,并创建新的 UTXO 以备之后的交易消耗。

当交易链条一直向前回溯,是先有输入,还是先有输出呢?严格来说,是先产生输出。

这是一种被称为 Coinbase 交易(创币交易或币基交易)的特殊交易。Coinbase 交易没有输入,可以“无中生有”的产生输出,即发行新的比特币。

更多关于 Coinbase 交易的内容,会在介绍比特币区块和挖矿的文章中详述。

总结

  • 交易的本质是一种数据结构,记录了交易参与者价值转移的相关信息
  • UTXO 是构成交易的基本元素,一笔交易的输入,是之前某笔交易的输出
  • UTXO 一旦被创建出来,便是一个不可分割的价值单元,只能在之后的交易中被整体消耗
  • 交易反映了 UTXO 集的变化
  • 交易可以包含一个或多个输入,产生一个或多个输出
  • Coinbase 交易会发行新的比特币,是一种没有输入只有输出的特殊交易

交易是构成比特币区块的基本单位,区块按产生时间顺序依次相连,构成了区块链。

比特币的每笔交易都是在区块链上的一个公开记录。

比特币区块链是一本全球复式记账总账簿,这个总账簿是公开的匿名的不可篡改的。通过区块链浏览器,可以检索从比特币诞生至今所有的交易数据。

另外,强烈建议你去看看普林斯顿大学的公开课 Bitcoin and Cryptocurrency Technologies。第一讲作为背景知识介绍,由浅入深涵盖了下列内容:

  • Cryptographic hash functions 1:51
  • Hash pointers and data structures 20:28
  • Digital signatures 29:25
  • Public keys as identities 39:04
  • A simple cryptocurrency 44:39

有了这些基本概念,接下来的文章会逐一介绍比特币交易的更多细节:

参考