比特币解锁脚本中的ScriptSignature都包含了什么东西

比特币 解锁脚本signature script 包含了那些东西?

使用 UTXO 需要私钥签名,私钥到底都签了什么东西呢?一直比较好奇.
比特币的私钥签名总共有五中类型,具体见 btcd 代码,如下:

// SigHashType represents hash type bits at the end of a signature.
type SigHashType uint32

// Hash type bits from the end of a signature.
const (
    SigHashOld          SigHashType = 0x0
    SigHashAll          SigHashType = 0x1
    SigHashNone         SigHashType = 0x2
    SigHashSingle       SigHashType = 0x3
    SigHashAnyOneCanPay SigHashType = 0x80

    // sigHashMask defines the number of bits of the hash type which is used
    // to identify which outputs are signed.
    sigHashMask = 0x1f
)

SigHashOld 和 SigHashAll

从代码看,两者是一样的.具体签名内容见图.
主要内容:
所有的 TxIn,所有的 TxOut, 但是不包含签名本身(这个是不可能做到包含自身的).
这是目前主要的签名用法.

SigHashNone

主要内容:
所有TxIn, 但是不包含 TxOut
我不知道这种签名用在什么地方, TxOut可以让别人随便改.

SigHashSingle

对所有的 TxIn和某个 TxOut 进行签名
不清楚用途

SigHashAnyOneCanPay

对当前TxIn 和所有 TxOut 进行签名
这个可以保证输入输出的安全,但是因为没有包含TxIn 之间的顺序关系. 所有这个 Tx 的 ID 是可以被修改的.

原文地址:https://www.cnblogs.com/baizx/p/9497429.html

时间: 2024-10-18 06:58:13

比特币解锁脚本中的ScriptSignature都包含了什么东西的相关文章

老男孩教育每日一题-第69天-shell脚本知识点:linux系统脚本中trap信号都有哪些,如何进行使用?

题目 shell脚本知识点:linux系统脚本中trap信号都有哪些,如何进行使用? 参考答案: [trap信号命令说明] trap命令用于指定在接收到信号后将要采取的行动,trap命令的一种常见用途是在脚本程序被中断时完成清理工作.历史上,shell总是用数字来代表信号,而新的脚本程序应该使用信号的名字,它们保存在用#include命令包含进来的signal.h头文件中,在使用信号名时需要省略SIG前缀.可以在命令提示符下输入命令trap -l来查看信号编号及其关联的名称. [trap信号命令

loadrunner录制成功但脚本内容为空,无任何代码//脚本中包含乱码

使用loadrunner录制脚本,录制过程中也会显示“正在录制…”,并且有(XX个事件).但是脚本录制结束之后,脚本中没有任何内容,没有代码显示. 解决方法: 在脚本录制程序VU generator中, 点“工具”——“录制选项”, 左边栏目中,“网络”——“端口映射”, 右边窗口中,在“捕获级别”的下拉列表中选择“套接字级别数据和WinINet级别数据”, 确定. 重新录制脚本,可查看到有对应于事件操作的代码记录. 使用loadrunner录制脚本,有时有个别网页页面会出现乱码的情况,在录制的

shell脚本中实现自动判断用户有无密码

在最近完成老师布置的作业的时候遇到了如何让shell脚本中的命令自动判断一个用户是否已设置密码的问题,虽然看似不是很难的一个问题,但是在这一功能实现的过程中却包含了许多细小的而重要的知识.刚开始小编对此很是头疼,虽然我们查看一个用户是否有密码并不是很难,直接cat /etc/shadow这个文件看看密码位是否有加密的字符就行了,但是让命令自己去判断和匹配就不是很顺利了,小编上网查看后,并没有得到很好的答案,大多数都是人工查看的答案,并不适用于shell脚本中自动的判断,所以在认真对比/etc/p

JSP脚本中的9个内置对象

JSP脚本中包含9个内置对象,这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化(由JSP页面对应Servlet的_jspService()方法来创建这些实例). application:javax.servlet.ServletContext的实例,该实例代表JSP所属的Web应用本身,可用于JSP页面,或者在Servlet之间交换信息,常用的方法有getAttribute(String attName).setAttribute(String attNa

Shell脚本中调用另外一个脚本的方法

在Linux平台上开发,经常会在console(控制台)上执行另外一个脚本文件,经常用的方法有:./my.sh 或 source my.sh 或 . my.sh:这三种方法有什么不同呢?我们先来了解一下在一个shell脚本中如何调用另外一个shell脚本,其方法有 fork    exec    source. 1.fork  ( /directory/script.sh) : 如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令.子级的环境变量不会影响到父

shell 脚本中双引号 单引号 反引号 的区别

转自:http://blog.csdn.net/iamlaosong/article/details/54728393 最近要编个shell脚本处理数据,需要检测数据文件是否存在,文件名中包含日期,所以需要生成最近几天的日期,以便检测文件是否存在,看下面的脚本中如何使用双引号.单引号.反引号: OPDATE=`date -d '-1 day' +%Y%m%d` for i in $(seq 10) do FILEDATE=`date -d "-$i day" +%Y%m%d` echo

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)——转载

原文链接:http://blog.chinaunix.net/uid-22548820-id-3181798.html fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令.在子命令执行完后再执行父级命令,子级的环境变量不会影响到父级. fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候,

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

一.fork  ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令.子级的环境变量不会影响到父级. fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本. 运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在. sub-shell执行完毕后返回parent-shell. sub-shell

20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断

- 20.5 shell脚本中的逻辑判断 - 20.6 文件目录属性判断 - 20.7 if特殊用法 - 20.8/20.9 case判断 # 20.5 Shell脚本中的逻辑判断 - 很多脚本可以直接用命令执行,比如之前的那个 ``` [[email protected] ~]# for i in `seq 1 5`;do echo $i;done 1 2 3 4 5 [[email protected] ~]# for i in `seq 1 5` > do > echo $i >