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

news2024/12/27 11:18:59

目录

一、输入输出脚本的执行

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

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.coloradmin.cn/o/2266355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Mac】终端改色-让用户名和主机名有颜色

效果图 配置zsh 1.打开终端&#xff0c;进入.zshrc配置 cd ~ vim .zshrc2.添加如下配置并保存 # 启用命令行颜色显示 export CLICOLOR1 ## 加载颜色支持 autoload -U colors && colors # 配置 zsh 提示符 PROMPT"%{$fg_bold[red]%}%n%{$reset_color%}%{$fg_bol…

CUDA各种内存和使用方法

文章目录 1、全局内存2、局部内存3、共享内存3.1 静态共享内存3.2 动态共享内存 4、纹理内存5、常量内存6、寄存器内存7、用CUDA运行时API函数查询设备CUDA 错误检测 1、全局内存 特点&#xff1a;容量最大&#xff0c;访问延时最大&#xff0c;所有线程都可以访问。 线性内存…

青少年科普教学系统平台的设计与实现springboot

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安…

Vue2:v-for创建echart图表时不能使用动态ref,要使用动态id

项目中需要创建一组图表+表格的组合,一共15组,为了便于维护,希望使用v-for来创建,而不是写出15组<div>,但是动态指定echart的ref时,频繁遭遇init失败,提示“TypeError: this.dom.getContext is not a function”。过程记录如下。 实现效果 要实现的效果如下图,…

Ch9 形态学图像处理

Ch9 形态学图像处理 blog点此处&#xff01;<--------- 四大算子相应性质。 腐蚀、膨胀、开闭之间的含义、关系 文章目录 Ch9 形态学图像处理预备知识(Preliminaries)膨胀和腐蚀(Dilation and Erosion)腐蚀膨胀膨胀与腐蚀的对偶关系 开闭操作(Opening and Closing)开运算闭…

likeAdmin架构部署(踩坑后的部署流程

1、gitee下载 https://gitee.com/likeadmin/likeadmin_java.git 自己克隆 2、项目注意 Maven&#xff1a;>3.8 ❤️.9 (最好不要3.9已经试过失败 node &#xff1a;node14 (不能是18 已经测试过包打不上去使用14的换源即可 JDK&#xff1a;JDK8 node 需要换源 npm c…

如何解决 ‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的问题

在cmd中输入 adb &#xff0c;显示 ‘adc‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件的问题 解决办法&#xff1a;在环境变量中添加adb所在的路径 1、找到 adb.exe 的所在的文件路径&#xff0c;一般在 Android 安装目录下 \sdk\platform-tools\adb.exe…

使用 OpenCV 在图像中添加文字

在图像处理任务中&#xff0c;我们经常需要将文本添加到图像中。OpenCV 提供了 cv2.putText() 函数&#xff0c;可以很方便地在图像上绘制文本&#xff0c;支持多种字体、颜色、大小和位置等参数。 本文将详细介绍如何使用 OpenCV 在图像中添加文字&#xff0c;介绍 cv2.putTe…

解线性方程组

直接三角分解&#xff08;LU分解&#xff0c;Doolittle分解&#xff09; ATM分解&#xff08;追赶法&#xff0c;Crout分解&#xff0c;克劳特分解&#xff09; 平方根法&#xff08;Cholesky分解&#xff0c;乔列斯基分解&#xff09; 矩阵的范数

17.2、应急事件场景与处理流程

目录 常见网络安全应急事件场景网络安全应急处理流程应急演练类型 常见网络安全应急事件场景 应急事件的处理场景&#xff0c;分成四类场景&#xff0c;恶意程序事件&#xff0c;网络攻击事件&#xff0c;还有网站相关的一些安全事件&#xff0c;最后是拒绝服务事件 恶意程序…

并发编程 - 死锁的产生、排查与解决方案

在多线程编程中&#xff0c;死锁是一种非常常见的问题&#xff0c;稍不留神可能就会产生死锁&#xff0c;今天就和大家分享死锁产生的原因&#xff0c;如何排查&#xff0c;以及解决办法。 线程死锁通常是因为两个或两个以上线程在资源争夺中&#xff0c;形成循环等待&#xf…

关于埃斯顿机器人文件导出或者系统日志导出

关于埃斯顿机器人文件导出或者日志导出&#xff0c;登录模式&#xff0c;选择高级设置&#xff0c;控制器备份恢复 选择U盘导入地址&#xff0c;点击导出&#xff0c;等待时间30秒就可以查看文件格式和系统日志

5G CPE接口扩展之轻量型多口千兆路由器小板选型

多口千兆路由器小板选型 方案一: 集成式5口千兆WIFI路由器小板方案二:交换板 + USBwifiUSB WIFI选型一USBwifi选型二:四口千兆选型一四口千兆选型二:四口千兆选型三:部分5G CPE主板不支持Wifi,并且网口数量较少,可采用堆叠方式进行网口和wifi功能 扩展,本文推荐一些路由…

PromptGIP:Unifying lmage Processing as Visual Prompting Question Answering

“Unifying Image Processing as Visual Prompting Question Answering” 文章提出了一种名为 PromptGIP 的通用模型&#xff0c;将图像处理任务统一为视觉提示问答范式&#xff0c;在多个图像处理任务上展现出良好性能&#xff0c;为通用图像处理提供了新的思路和方法。 confe…

【MySQL】索引 面试题

文章目录 适合创建索引的情况创建索引的注意事项MySQL中不适合创建索引的情况索引失效的常见情况 索引定义与作用 索引是帮助MySQL高效获取数据的有序数据结构&#xff0c;通过维护特定查找算法的数据结构&#xff08;如B树&#xff09;&#xff0c;以某种方式引用数据&#xf…

Doxygen 使用指南

Doxygen 是一个文档生成工具&#xff0c;可以从源代码中的注释生成高质量的文档&#xff0c;支持多种编程语言&#xff08;如 C/C、Python、Java 等&#xff09;。以下是 Doxygen 的基本使用方法。 1. 安装 Doxygen 1.1 下载 Doxygen 访问 Doxygen 官网。根据操作系统选择合适…

Jensen-Shannon Divergence:定义、性质与应用

一、定义 Jensen-Shannon Divergence&#xff08;JS散度&#xff09;是一种衡量两个概率分布之间差异的方法&#xff0c;它是Kullback-Leibler Divergence&#xff08;KL散度&#xff09;的一种对称形式。JS散度在信息论、机器学习和统计学等领域中具有广泛的应用。 给定两个概…

一个特别的串口通讯

背景 设备是EPICS流式细胞仪&#xff0c;这个设备的控制系统是在DOS系统上的。数据存储在硬盘上&#xff0c;不带串口通讯功能。我们遇到了这个设备后&#xff0c;就开发了一个DOS下的执行程序通过串口&#xff0c;将最新的数据自动上传到服务器上。 编译工具 Turbo C 数据…

4.系统学习-集成学习

集成学习 前言Bias and Variance过拟合&#xff08;overfitting&#xff09;与欠拟合&#xff08;underfitting&#xff09;集成学习为什么有效&#xff1f;Blending 模型集成Stakcing 模型集成Bagging模型集成Bagging 模型集成算法流程&#xff1a;Boosting模型集成作业 前言 …

电商项目高级篇07-redisson分布式锁

redisson分布式锁 1、引入maven依赖2、config类3、可重入锁设计 1、引入maven依赖 <!--引入redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.12.0</version></depend…