交易是比特币系统中最重要的部分。系统中的其他部分,都是为了确保交易可以
- 被生成
- 通过比特币网络的验证,在网络中传播
- 最终被添加到记录全球比特币交易数据的总账簿(比特币区块链)中
比特币的交易,使用复式记账法(复式簿记,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
有了这些基本概念,接下来的文章会逐一介绍比特币交易的更多细节:
- 比特币的交易脚本,锁定脚本(scriptPubKey)和解锁脚本(scriptSig)
- 比特币交易的数据结构
- 付款到公钥(P2PK),付款到公钥哈希(P2PKH)
- 付款到多重签名(P2MS),付款到脚本哈希(P2SH)
- OP_RETURN
- 时间锁(Timelocks)