比特币的交易数据结构
比特币的交易是遵循统一的交易格式的。比特币的交易数据结构如下图:
理解交易
我们来解析一下这个比特币交易数据结构中的主要要素,来理解比特币的交易。
输入
- 引用被花费的UTXO (“交易”与“输出索引”)
- 输入脚本 - 公钥与签名(”解锁脚本“)
输出
- 转账数量 (“总量”)
- 输出脚本 - 检查公钥和验证签名 (“锁定脚本”)
比特币如何交易的呢?
通过执行输入脚本和输出脚本,如下:
- 执行输入脚本:先把签名压入栈,再入栈公钥
- 执行输出脚本:
- 复制栈里的公钥,得到公钥副本 (公钥来源于输入脚本)
- 计算公钥副本的哈希值,得到公钥哈希 PH(公钥哈希最终来源于输入脚本)
- 将输出脚本里的公钥哈希入栈 PH1(来源于输出脚本)
- 检查PH和PH1是否相等。是则继续,否则中断执行
- 使用栈里留下的公钥和签名校验签名 (都来源于输入脚本)。成功则返回成功,否则返回失败
这样,比特币交易就完成了。
附:
1. 输入脚本(长成这样,例子):
- 3045022100efe12e2584bbd346bccfe67fd50a54191e4f45f945e3853658284358d9c062ad02200121e00b6297c0874650d00b786971f5b4601e32b3f81afa9f9f8108e93c752201
038b29d4fbbd12619d45c84c83cb4330337ab1b1a3737250f29cec679d7551148a
- 这么一长串其实只有2个元素,签名(sig) 和公钥 (pubkey)
2. 输出脚本(长成这样,例子):
- OP_DUP OP_HASH160 be10f0a78f5ac63e8746f7f2e62a5663eed05788 OP_EQUALVERIFY OP_CHECKSIG
- be10f0a78f5ac63e8746f7f2e62a5663eed05788 这串是公钥哈希,用来检查与后笔交易输入中的公钥被哈希后是否一致
Reference:
- blog.sina.com.cn/s/blog_d66494300102wzyt.html