区块链期末复习3.2:比特币脚本

ops/2024/12/27 12:19:19/

目录

一、输入输出脚本的执行

二、简单脚本实例及压栈过程

1.P2PK(pay to public key hash)

2、P2PH(pay to public key hash)

3.多重签名

4.比特币脚本的应用:

三、其他常见指令

1.OP_EQUAL与OP_EQUALVERIFY

 2.OP_ADD,OP_MAX

3.OP_DUP,OP_2DUP

四、复杂脚本示例

1.涉及四方的多签名交易,必须含有银行

2.生成可通过两个线性方程组的解(x,y)赎回的交易‘


一、输入输出脚本的执行

如图,区块间由哈希指针索引,指向前向区块;两个交易分别 是 A->B,B->C,B 转给 C 交易的执行需要拼接 B->C 的输入脚本、A->B 的输出脚本,以证明交易有效。

二、简单脚本实例及压栈过程

1.P2PK(pay to public key hash)

输入脚本+输出脚本如下:

<sig>

-------

<pubkey>

<OP_CHECKSIG>

2、P2PH(pay to public key hash)

1)输入脚本+输出脚本如下:

<sig>

<pubkey>

-----

OP_DUP

OP_HASH160

<PUBKEYHASH?>

<OP_EQUALVERIFY>
<OP_CHECKSIG>

2)堆栈示意图:

3.多重签名

1) 含义:给出N个公钥中任意M个签名,即可完成交易。

比如A,B,C三人合伙开公司,他们的账户具有A,B, C三人对应的公钥。只要三人中的任意两人想要发起一笔交易,给出两个人的签名,即可使用这笔钱。

2)简单版本的脚本如下:(假设一共有N个公钥,需要提供M个签名,其中N>=M)

 OP_0(由于比特币的BUG引入的元素,占一个位置,没有实际意义)

<sig1>

<sig2>

...

<sigM>

------------

M

<pubkey1>

<pubkey2>

...

<pubkeyN>

N

OP_CHECKMULTISIG

4.比特币脚本的应用:

1)第三方支付交易:即在两人交易的过程中引入第三方作为仲裁员,三人中的任意两人都可以决定资金的流向。当交易的两人存在分歧和争端时,由第三方来仲裁资金的流向。

2)绿色地址:引入可信第三方(比如银行)。假设A要给B转钱,为了避免很长的等待交易确认的时间,可以由绿色地址从A处扣钱,绿色地址再转账给B。(并没有得到技术保证,只是倾向于相信可信第三方不会失信)。

3)高效小额支付:对于持续支付小额资金的场景,比如客户向流量提供商支付每分钟的流量费用,每分钟支付一次是不现实的。我们希望能把每分钟的费用累积起来,最后一次性进行支付。假设Alice需要持续向Bob支付小额资金,遂创建一个MULTISIG地址。

Alice在使用流量的时候,每隔一分钟就签名一次,向Bob支付这分钟所产生的流量费用,然后把剩余的钱转给自己,每分钟重复一次,直到挂机为止。(请注意,这些交易只有Alice的签名,还没有Bob的签名。因此,交易还没被放进区块链里)Alice挂机之后,会告诉Bob“我用好了,你可以切断我的服务 了”,此时,Alice将不再支付费用,Bob也将切断服务,然后在Alice发送的最后一个

交易里签名,把它放入区块链里。但如果鲍勃没有在最后一个交易上签名,爱丽丝就会失去她一开始转到MULTISIG地址的所有资金。

4)锁定时间:为了避免高效小额支付中提到的问题,Alice会在最开始和Bob签订退款协议:如果时间t内Bob没有在最后一个交易上签名,Alice可以通过退款交易收回所有资金。即退款交易被锁定t时间,如果t时间内该笔资金未被花费将退回原来的账户。

三、其他常见指令

1.OP_EQUAL与OP_EQUALVERIFY

前者验证栈顶的两个元素是否相等;后者在前者的基础上增加验证操作,如果为true移除true元素,如果为false直接终止脚本。

 2.OP_ADD,OP_MAX

运算操作,用结果元素替换输入的两个元素。

 

3.OP_DUP,OP_2DUP

复制栈顶的一个元素;复制栈顶的两个元素

四、复杂脚本示例

1.涉及四方的多签名交易,必须含有银行

1)问题场景:生成一个涉及四方的多签名交易,这样交易可以由第一方(银行)与另外三方(客户)

中的任何一方(客户)共同赎回,而不仅仅只是客户或银行。

也就是说,签名中必须含有银行签名,和三个客户之一的签名。

2)脚本实现如下

input_script(scriptSig)

OP_0
<sig_customx>
<sig_bank>

output_script(scriptPubkey)

<pubkey_bank>
OP_CHECKSIGVERIFY
1
<pubkey_custom1>
<pubkey_custom2>
<pubkey_custom3>
3
OP_CHECKMULTISIG

2.生成可通过两个线性方程组的解(xy)赎回的交易‘

赎回脚本应尽可能小。也就是说,一个有效的 scriptSig 应该是简单地将两个整数 x y 发送到堆栈中。确保在 scriptPubKey 中使用了 OP_ADD OP_SUB

ex.x+y=5 x-y=3.可解得x=4,y=1

思路如图:

input_script(scriptSig)

4
1

output_script(scriptPubkey)

OP_2DUP
OP_ADD
5
OP_EQUALVERIFY
OP_SUB
3
OP_EQUAL


http://www.ppmy.cn/ops/145373.html

相关文章

数据仓库在英雄云表单中的应用-如何反向利用它实现更高效的数据管理?-英雄云

在现代企业的数据管理中&#xff0c;数据仓库作为核心组件&#xff0c;能够有效整合和分析来自不同来源的数据。英雄云的云表单功能与数据仓库的结合&#xff0c;为企业提供了高效的数据管理解决方案。本文将探讨数据仓库在英雄云表单中的应用&#xff0c;以及如何反向利用这一…

Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)

数据的存储是基于 主题&#xff08;Topic&#xff09; 和 分区&#xff08;Partition&#xff09; 的 Kafka是一个高可靠性的分布式消息系统&#xff0c;广泛应用于大规模数据处理和实时, 为了更方便地管理和监控Kafka集群&#xff0c;开发人员和运维人员经常需要使用可视化工具…

HDR视频技术之十一:HEVCH.265 的 HDR 编码方案

前文我们对 HEVC 的 HDR 编码优化技术做了介绍&#xff0c;侧重编码性能的提升。 本章主要阐述 HEVC 中 HDR/WCG 相关的整体编码方案&#xff0c; 包括不同应用场景下的 HEVC 扩展编码技术。 1 背景 HDR 信号一般意味着使用更多比特&#xff0c;一般的 HDR 信号倾向于使用 10…

vue3使用video-player实现视频播放(可拖动视频窗口、调整大小)

1.安装video-player npm install video.js videojs-player/vue --save在main.js中配置全局引入 // 导入视频播放组件 import VueVideoPlayer from videojs-player/vue import video.js/dist/video-js.cssconst app createApp(App) // 视频播放组件 app.use(VueVideoPlayer)2…

探索 Pencils Swap 的叙事:为 DeFi 的再次爆发蓄力

Pencils Protocol 最初是 Scroll 生态上一个综合性的 DeFi 平台&#xff0c;以 Farming、Vaults 以及 Auction 等系列产品板块为基础&#xff0c;其不仅成为了 Scroll 上重要的流动性、收益枢纽&#xff0c;同时也是重要的 LaunchPad 市场以及流量池&#xff0c;为 Scroll 生态…

【保姆式】python调用api通过机器人发送文件到飞书指定群聊

当前飞书webhook机器人还不支持发送文件类型的群消息&#xff0c;它目前仅支持文本&#xff0c;富文本&#xff0c;卡片等文字类型的数据。 我们可以申请创建一个机器人应用来实现群发送文件消息。 创建飞书应用 创建飞书应用、配置权限、添加机器人 来到飞书开发者后台 创建…

人、机、环境中各有其神经网络系统

在人、机、环境的交互过程中&#xff0c;可以从神经网络系统的角度进行分析&#xff0c;尽管它们的具体实现和功能有所不同。 1. 人类神经网络系统 人类的大脑和神经系统是非常复杂的神经网络&#xff0c;它由数十亿个神经元组成&#xff0c;负责感知、思考、学习、记忆和决策等…

‘ieee-be‘ 对字节调换顺序

对于int16来说 16位 2个字节 00000000 00000001 是数字一 ieee-be是 认为字节顺序颠倒 00000001 0000000是正确的 所以对正常的1 取用ieee-be读取 会变成256 a [1;2;3;4;5;6]; fid fopen(data.bin, wb); % 写入数据到文件 % 注意&#xff1a;fwrite 会自动根据数据类型…