连载|比特币脚本指南(贰)

论坛 期权论坛 期权     
不过而已已   2019-12-22 20:08   1694   0
连载|比特币脚本指南(壹)



5. 比特币脚本交易:幕后故事好比Alice想给Bob转0.0015 BTC。根据上面若干交易条件:交易输入0.0015770 BTC。交易长成这种代码样::
Image courtesy: djp3 youtube channel.
第一行代码是交易名称,也就是输入、输出金额的哈希值。

Vin_sz 代表输入数据的数量,Alice只动用了之前的一笔交易,因此为1。
Vin_sz为2,因为只有一笔输出给Bob和一笔找零给Alice。以下为输入数据:
上面说了,Alice只动用了之前的一笔交易(比如TX(0)),则vin_sz 为 1。输入数据下方是Alice的签名数据。最下边的是输出数据:
前半部分数据表示Bob收到0.0015 BTC。后半部分表示0.00005120 BTC是给Alice的找零。下面我们做个计算题:Alice的输入数据为0.0015770 BTC,Bob收到0.0015 BTC,0.00005120 BTC给Alice找零。0.0015770 - (0.0015 + 0.00005120)= whateverwhatever就是给矿工的交易费了。6. 仔细看看交易输出如上所述,交易中的每个输入都会成为输出,输出又包含实际转账金额跟找零,找零也叫UTXO(交易未花费输出/Unspent Transaction Output),意思是:妹花出去。每个交易输出包括两部分:
  • 该输出的值。
  • 一个加密谜题,有各种法:锁定脚本、见证脚本或者脚本公钥。接收方想要花掉这个输出(也就是转账方转过来的这笔钱),需要解开这个谜题。谜题的编码语言,正是比特币脚本。
下面,我们检查下交易的输出,认一认各个输出的各个部分。代码部分摘自《精通比特币》。"vout": [{"value": 0.01500000,"scriptPubKey": "OP_DUPOP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFYOP_CHECKSIG"},{"value": 0.08450000,"scriptPubKey": "OP_DUPOP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFYOP_CHECKSIG",}]代码中有两个输出。一个输出的值是0.015 BTC,另一个是0.0845 BTC。解锁0.015BTC对应的锁定脚本是这个:"scriptPubKey": "OP_DUP OP_HASH160ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"7. 仔细看看交易输入为了凑输入,用户钱包要过一遍里边的UTXOs,然后选出满足交易条件的辣些UTXOs。好比,Alice想转0.15 BTC给Bob,UTXO集长这样:
  • UTXO A = 0.09 BTC
  • UTXO B = 0.2 BTC
  • UTXO C = 0.005 BTC
选A、B。剩下的找零,会变成下次交易UTXO集中的一员。现在看一下输入的代码。"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL]0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","sequence": 4294967295}]输入脚本包括:
  • txid:交易ID,指该UTXO来自哪一笔先前的交易。
  • vout:指使用的先前交易的输出。假设先前交易有两个UTXO,第一个UTXO被标记为0,第二个UTXO被标记为1。代码中用的正是第一个UTXO。
  • scriptSig:之前提到,每个UTXO都包含一个锁定脚本。scriptSig中包含解锁脚本所需的数据。
  • 序列:包含序列是为了帮助人们在交易确认并打包前更新交易数据。看不懂拉倒。

8. 交易序列化
交易在网络传播的过程中,是序列化的。
序列化过程中,数据结构内部表征被转换为可以一次传输一个字节的格式,也叫字节流。
前两节中,交易的例子很简单,一个输入一个输出。若将交易序列化并以十六进制格式存储,是什么样子?
0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779000000008b483045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef8000000000001976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000真的,就长这样,不是我用脚打出来的。
不要害怕,这个十六进制流中,藏着输入和输出数据。


输出序列化
交易输出部分的序列化包括:

Image Credit: Andreas Antonopoulos“Mastering Bitcoin”我们知道哪些输出数据?
  • 两个输出值
  • 一个输出值是0.015 BTC,或者150万聪
  • 十六进制中,1500000是16 e3 60。用little-endian编码时,是60 e3 16
  • 脚本公钥长度为25字节,十六进制中是19
那么,来找找十六进制流中的输出数据:
0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779000000008b483045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef8000000000001976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

输入序列化
输入的序列化包括:

能不能找到Alice交易的输出?

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd734d2804fe65fa35779000000008b483045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef8000000000001976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000
已知UTXO解锁后方可使用,已知输入值中的scriptSig能够帮助解锁。
解锁拢共几步?
记住这个问题,这里需要插播下比特币脚本中如何进行中的计算和操作流程。


待 续
原文:https://blockgeeks.com/guides/best-bitcoin-script-guide/









分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP