比特币的标准交易

比特币的交易数据结构
比特币的交易是遵循统一的交易格式的。比特币的交易数据结构如下图:

理解交易
我们来解析一下这个比特币交易数据结构中的主要要素,来理解比特币的交易。
输入
  • 引用被花费的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

  • http://www.8btc.com/understand-bitcoin-script

  • http://blog.csdn.net/tabactivity/article/details/49685319





你可能感兴趣的:(比特币的标准交易)