比特币如何交易 【每日一题】6829OP_EQUALVERIFYOP

资讯 8个月前 manoon
0

在学习 UTXO 时,一个 UTXO 包含一个解锁脚本(pkScript)。当您花费这个UTXO时,您需要通过脚本验证才能花费该UTXO。

如何拥有使用UTXO的权利

比特币交易创建的输出不是简单的公钥地址,而是一个脚本。如果 B 将0.5 btc 交易转给 A,输出的 pkScript 脚本类似:

OP_DUP OP_HASH160 abcd1234...9876 OP_EQUALVERIFY OP_CHECKSIG

其中abcd1234...9876为A的公钥hash,其他为指令。当任何人都可以提供签名和公钥让这个脚本通过时,谁就可以花费这笔交易的0.5 btc

当A需要花费btc时,需要验证脚本,所以当A提供公钥和签名时,A实际上已经创建了另一笔交易。

大家可以验证A创建的新交易是否有效。如果有效,交易将被矿工打包成一个新的区块

交易订单的实际数据

In:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd0
4470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446
618c4571d1090db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fd
d7d5d6cc8d25c6b241501
Out:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35
549d OP_EQUALVERIFY OP_CHECKSIG

这是一个交易订单数据,包括收入来源和支出。在进行交易时,需要描述交易的来源(入),输出(出)交易金额,并以脚本的形式写入接收者的公钥(scriptPubKey)。然后验证你的输出(in)的合法性:通过输入的pre tx和index找到指向的UTXO脚本,使用自己的私钥签名(scriptSig)完成脚本验证比特币如何交易,最后广播到网络完成传输。

收入来源:

接收对象输出:

交易脚本是如何执行的

既然有了签名和公钥,就需要执行上一笔交易的输出脚本,才能获得UTXO的使用权:

sig: 30450221...ee0e01
pubkey: 042e930f...cabb
script: OP_DUP OP_HASH160 46af3fb4…6829 OP_EQUALVERIFY OP_CHECKSIG

比特币脚本被设计为在堆栈上运行的虚拟机指令。首先,将签名(sig)和公钥(pubkey)压入堆栈:

比特币如何交易 【每日一题】6829OP_EQUALVERIFYOP

然后执行指向的TxOut脚本:

OP_DUP OP_HASH160 46af3fb4…6829 OP_EQUALVERIFY OP_CHECKSIG

先执行OP_DUP,这条指令是复制栈顶元素:

比特币如何交易 【每日一题】6829OP_EQUALVERIFYOP

接下来执行OP_HASH160,也就是说在栈顶执行SHA256/RipeMD160比特币如何交易,其实就是在计算公钥hash:

比特币如何交易 【每日一题】6829OP_EQUALVERIFYOP

那么接下来就是直接把数据46af3fb4...6829入栈:

比特币如何交易 【每日一题】6829OP_EQUALVERIFYOP

然后执行OP_EQUALVERIFY比较栈顶的两个元素是否相等。如果它们不相等,则整个脚本将无法执行。如果成功:

比特币如何交易 【每日一题】6829OP_EQUALVERIFYOP

最后对栈上OP_CHECKSIG的前两个元素进行签名验证。如果相等,则出栈并返回成功。

版权声明:manoon 发表于 2021-09-07 5:59:31。
转载请注明:比特币如何交易 【每日一题】6829OP_EQUALVERIFYOP | 198区块链导航

暂无评论

暂无评论...