主页 > imtoken官方版下载手机版 > 比特币交易脚本详解

比特币交易脚本详解

imtoken官方版下载手机版 2023-11-27 05:14:31

其实,我们可以这样看待比特币交易:“发起交易的人悬赏数个比特币,并在网上发布了一道数学题,谁解决了这道数学题,谁就可以获得奖励。” 按照这样的思路,Alice给Bob的转账可以理解为“Alice把一道只有Bob会解的数学题发到网上,Bob解出这道题并带走奖励”。 那么,每一笔交易数据中出现的“脚本”就是问题和解决方案,“脚本语言”就是用来描述问题和解决方案的工具。

“输入脚本”和“输出脚本”

这里先讨论单输入单输出的比特币交易,因为描述起来比较方便,不影响对“脚本”的理解。

这是一个单入单出的交易,我们来看一下我们要关注的数据:

哈希:

9c50cee8d50e273100987bb12ec46208cb04a1d5b68c9bea84fd4a04854b5eb1

输入交易:

前导输入的哈希值:

437b95ae15f87c7a8ab4f51db5d3c877b972ef92f26fbc6d3c4663d1bc750149

输入脚本scriptSig:

3045022100efe12e2584bbd346bccfe67fd50a54191e4f45f945e3853658284358d9c062ad02200121e00b6297c0874650d00b786971f5b4601e3582f81afa19f203

038b29d4fbbd12619d45c84c83cb4330337ab1b1a3737250f29cec679d7551148a

输出交易:

火币比特币交易手续费_比特币转账交易流程_如果国内比特币交易网站销户了,那以后怎么交易

转移价值:

0.05010000 比特币

输出脚本scriptPubKey:

OP_DUP OP_HASH160 be10f0a78f5ac63e8746f7f2e62a5663eed05788 OP_EQUALVERIFY OP_CHECKSIG

假设 Alice 是转账发送者,Bob 是接收者。 那么“输入交易”表示爱丽丝要使用的比特币的来源比特币转账交易流程,“输出交易”表示爱丽丝要转账的金额和转账对象——鲍勃。 那么,你可能会问,数据中的“输入脚本”和“输出脚本”不就是问题和解决方案吗? 对了一半!

提到:

最初发送硬币的一方控制脚本运行,以便比特币可以在下一次交易中使用。 对方要花币,必须将之前录制的真实运行的脚本放入输入区。

也就是说,在一笔交易中,“输出脚本”是一道数学题,“输入脚本”是解,但不是这个数学题的解。 当我开始阅读维基时,我在这里遇到了一些障碍,我无法理解“输入脚本”和“输出脚本”之间的联系。 但是考虑到交易之间的关系之后,就很清楚了。

假设有这样一系列交易:

1.上图中的三个交易是单输入单输出交易

2.每一个“输入交易”和“输出交易”都包含对应的“脚本”

3. 在交易a中,Alice转账给Bob; 在交易 b 中,Bob 将钱转给 Carol; 在交易 c 中,Carol 将钱转给 Dave

如果国内比特币交易网站销户了,那以后怎么交易_火币比特币交易手续费_比特币转账交易流程

4、当前交易的“输入”指的是上一笔交易的“输出”,比如交易b的“输入”指的是交易a的“输出”

根据前面的说法,交易a中的“输出脚本”就是Alice给Bob出的数学题。 然后,如果 Bob 想将交易的比特币称为“输出交易”,他必须解决这个数学问题。 解决方案在事务b的“输入脚本”中给出! Bob 解决了问题,赢得了奖金,然后在交易 b 中给 Carol 一道数学题,等待 Carol 解决...

因此,下图中相同颜色的“输出”和“输入”是一对问题对账:

脚本语言

给定脚本的解释:

比特币在交易中使用脚本系统。 与 FORTH(一种编译语言)一样,脚本编写很简单,基于堆栈,并且从左到右处理。 它被特意设计为非图灵完备的,没有 LOOP 语句。

要理解比特币脚本,首先要理解“栈”,这是一个后进先出的容器,脚本系统通过它对数据进行操作。 比特币脚本系统中有两个堆栈:主堆栈和辅助堆栈。 一般来说,主要是使用主栈。 举几个简单的例子,让我们看看指令是如何对堆栈进行操作的(完整的指令集可以在这里找到):

标准交易脚本

那就是我们常用的转账方式P2PKH(Pay To Public Key Hash)。 Alice给Bob转账时,在“输出交易”中给出了Bob的“钱包地址”(相当于“公钥哈希”); 当Bob要给Carol转账时,他需要证明自己拥有这个“钱包地址”对应的“私钥”,所以在“输入交易”中你给自己的“公钥”,并使用“私钥” key”来签署交易。 看一个例子:

* 交易一:

*交易b:

事务b中有一个“输入事务”引用了事务a的“输出事务”,它们的脚本是一对问题和解决方案:

比特币转账交易流程_火币比特币交易手续费_如果国内比特币交易网站销户了,那以后怎么交易

问题:交易a的“输出脚本”,几个脚本指令和转账接收方的“公钥哈希”

OP_DUP OP_HASH160 be10f0a78f5ac63e8746f7f2e62a5663eed05788 OP_EQUALVERIFY OP_CHECKSIG

解决方案:交易b的“输入脚本”,这么长的列表只有两个元素,“签名”和“公钥”(sig & pubkey)

3046022100ba1427639c9f67f2ca1088d0140318a98cb1e84f604dc90ae00ed7a5f9c61cab02210094233d018f2f014a5864c9e0795f13735780cafd51b94134acf50

03a63ab88e75116b313c6de384496328df2656156b8ac48c75505cd20a4890f5ab

我们来看看这两个脚本是如何执行完成“问题解决”过程的。

1.首先执行“输入脚本”。 因为脚本是从左到右执行的,所以“签名”先入栈,然后是“公钥”

2、接下来执行“Output Script”。从左到右执行,第一条指令为OP_DUP——复制栈顶元素

3. OP_HASH160 - 计算栈顶元素的Hash,得到pubkeyhash

4. 将“输出脚本”中的“公钥散列”入栈。 为了区别于之前计算的hash,称之为pubkeyhash'

5. OP_EQUALVERIFY——检查栈顶的前两个元素是否相等比特币转账交易流程,相等则继续执行,否则中断执行并返回失败

6. OP_CHECKSIG——使用栈顶的前两个元素进行签名验证操作。 如果相等则返回成功,否则返回失败

执行完这样一系列的指令后,就可以验证数学题是否做对了,也就是说验证想要花费“钱包地址”中的比特币的人是否有对应的“私钥” ”。 上面的执行过程可以在 中执行,可以看到每一步执行的状态。 有兴趣的童鞋可以试试。

其实除了标准的P2PKH交易脚本,还有P2SH Multi-Sig脚本和真正的“解谜交易”脚本,我们以后可以讨论。