比特币交易构成:元数据、输入输出及交易实例解析
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:编写一些需要永久保存在区块链中的内容,例如(数字承诺),例如证明知识产权,并证明在某个时间点已经知道某些知识。
提醒:请联系我时一定说明是从星空网上看到的!