网站客服:zx81024163 |

比特币交易构成:元数据、输入输出及交易实例解析

2025-04-06 21:02:35发布    浏览200次    信息编号:222457

友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。

比特币交易构成:元数据、输入输出及交易实例解析

比特币脚本1。比特币交易的内容1.1比特币交易示例

比特币交易由元数据,输入和输出组成。元数据是指此交易的基本结构信息:事务大小,版本号,块信息等,并且不包括输入和输出。

1.1.1交易的宏信息()

此处的TXID是该交易的哈希值,也可以理解为事务ID

1.1.2交易的输入和输出结构1.1.2.1交易的输入(与UTXO关联,内部包含比特币脚本)

每个输入(VIN)包含以下字段:

事务的输入结构是一个数组,因为事务可以具有多个输入,并且每个输入必须指示在此输入上花费的硬币的输出,从而从先前的事务中获得了交易。

TXID:先前交易的哈希值

VOUT:表示这是此交易中的0输出(以前的事务C0CB ... C57B)

():输入脚本

​
"vin": [
    {
        "txid": "c0cb...c57b",                  // 上一个交易的哈希值
        "vout": 0,                            // 表示是这个交易(之前那个交易c0cb...c57b)里的第0个输出
        "scriptSig(输入脚本,这里不展开,后面单独讲脚本细讲)": {},
    ]
​

1.1.2.2交易的输出(与UTXO关联,内部包含比特币脚本)

交易的输出vout也是一个数组,特定内容如下

价值:输出量,比特币的单位(也可以使用yisho)在这里0。= Susho

n:序列号,下标始于0,表明这是此事务的输出。

:输出脚本,详细说明以后

2。比特币脚本的形式和执行过程

比特币脚本是一种基于堆栈的脚本语言(堆栈基础),可通过堆栈输入和退出操作来验证事务数据的合法性。比特币使用可以访问的唯一内存空间是堆栈

2.1比特币脚本的使用过程

比特币脚本如何验证此交易的合法性:

案例描述:在此处将资金转交给B之后,B也将资金转交给C一段时间。在这里,B-> C交易交易的输入来自A-> B事务的输出。

交易B到C +的输入脚本将A到B的输出脚本的输出脚本拼接在一起以执行,并将上一个事务的输出脚本放置在后面,然后将后续事务的输入脚本放置在前面。

在比特币的早期实施中,这两个脚本被直接拼接在一起并执行。后来,出于安全原因,更改了两个脚本以分别执行。首先,执行输入脚本。如果没有错误,则执行输出脚本。如果没有错误,则堆栈顶部的结果为非零值,这是正确的。然后通过验证。交易是合法的。如果此过程中存在任何错误,那是非法的。

如果事务有多个输入,则每个输入脚本必须匹配相应事务的输出脚本,然后进行验证。

通过通过,这项交易是合法的。

2.2比特币脚本的形式和脚本的内部执行过程

集会说明::堆栈,

为了提高比特币网络的安全性,比特币脚本正在发展,主要分为以下四个类别

2.2.1 P2PK(付款到密钥)

P2PK是比特币网络最原始,最简单的脚本,主要分为以下步骤

输入脚本和输出脚本包含内容:

收款人的公钥直接在输出脚本中给出(输出脚本的最简单形式)

输入脚本存储收款人的私钥,并输入脚本所在的整个交易的签名。

执行过程

输入执行的脚本

1.(SIG):将输入脚本中提供的签名推入堆栈

执行输出脚本

2.():将输出脚本中提供的公共密钥SIG推入堆栈中

3。:弹出新挤压的签名和公共密钥信号,并使用公共密钥检查签名是否正确。如果是正确的,请返回true,这意味着通过验证,否则将不会传递。

脚本示例:

2.2。 (付款到钥匙哈希)(最常用)

与第一种形式的区别:在输出脚本中未给出收款人的公钥,但是给出了收款人公钥的哈希。公共密钥在输入脚本中给出。输入脚本必须给出签名和公钥。

输入执行脚本:

1.(SIG):将签名SIG推入堆栈

2.():将公钥推入堆栈

输出脚本执行:

3.DUP:复制一次堆栈顶部的元素

4。:弹出堆栈的顶部元素并将其弹出,将其推入堆栈,然后将其推入堆栈。

5.():将输出脚本中的公共密钥的哈希推入堆栈中

目前,堆栈顶部有两个哈希值。

堆栈顶部的第一个存储在输入脚本中

第二个输入脚本中给出的公钥是在网站上计算的

6。:堆栈顶部的两个要素被弹出,是否刚刚获得的两个要素是平等的:为了防止某人替换,请使用自己的公共密钥来模仿收款人的公钥

如果两个哈希相等,它们会从堆栈的顶部消失。

7。:检查签名是否正确地通过堆栈和SIG的顶部正确。如果是正确的,则堆栈的顶部将是正确的。通过脚本

脚本实例

2.2.3 P2SH(付款)采用BIP16解决方案,最复杂的形式

输出脚本没有给出收款人的公钥的哈希,而是脚本的哈希(赎回脚本)。将来花费这笔钱时,输入脚本必须给出赎回脚本的特定内容,并给出可以使赎回脚本正确运行的签名。

验证分为两个步骤

1。验证序列化是否匹配输出脚本中的哈希值?

2。审理和执行,检查是否可以执行并通过赎回脚本。

1。对第一阶段的验证:

输入脚本执行(所有脚本省略OP_,示例)

1.(SIG):输入脚本的签名并输入堆栈

2。()输入赎回脚本到堆栈

输出脚本执行

3。:获取输入脚本的赎回脚本内容的哈希

4.():输出脚本中给出的赎回脚本的哈希值被放入堆栈中

5.等于:比较这两个哈希值是否相等

两个赎回脚本的哈希值是平等的,第一阶段通过,进入第二阶段:执行救赎脚本

2。在第二阶段进行验证(执行赎回脚本):

6。在输入脚本中逐渐化串行的赎回脚本,执行赎回脚本,并查看赎回脚本是否可以通过,并在通过后验证签名。

这里的赎回脚本也是如此,这与比特币脚本相同,该脚本可以是P2PK形式,P2PKH形式或多个签名形式。不同的交易可能具有不同的赎回脚本。

通过验证,在第二阶段完成

特定案例描述:使用P2SH实现P2PK的功能

这里的输入脚本是给出签名,然后给出序列化的赎回脚本。

这里的赎回脚本的内容是给出公钥,然后使用支票签名

输出脚本用于验证输入脚本中给出的赎回脚本是否正确(以哈希为例,查看它是否一致)

P2SH的常见应用方案:支持多签名

2.2.4刻录格式证明的脚本(特殊)

该脚本是一种证明比特币被破坏以换取唯一身份证机会的方式

应用方案1:一些小货币需要破坏一定数量的比特币才能获得此货币。小货币:(硬币)

应用方案2:编写一些需要永久保存在区块链中的内容,例如(数字承诺),例如证明知识产权,并证明在某个时间点已经知道某些知识。

提醒:请联系我时一定说明是从星空网上看到的!