主页 > imtoken钱包官网下载2.0 > 详解比特币交易签名流程

详解比特币交易签名流程

imtoken钱包官网下载2.0 2023-03-08 05:37:29

2021-09-08

最近在研究比特币交易签名的计算比特币的计算过程包括,网上没有完整介绍签名过程的例子。 本文试图提供一个完整的例子,详细介绍比特币签名的计算过程。

一、比特币交易格式 交易数据格式

大小字段名称数据类型描述

4-byte protocol version uint32_t 指定该事务引用的规则协议的版本号

1-9 bytes input quantity var_int 包含的输入交易数量

不确定的输入列表 tx_in[] 一个或多个输入事务的数组

1-9 字节输出数量 var_int 包含的输出交易数量

不确定的输出列表 tx_out[] 一个或多个输出事务的数组

4 字节锁定时间 uint32_t 一个 UNIX 时间戳或块号

tx_in 格式

其中 tx_in 包括:

字段大小

描述

数据类型

阐明

比特币挖矿在计算什么_比特币 哈希碰撞的过程_比特币的计算过程包括

36

前一个输出

出点

参考以前的输出

1+

脚本长度

var_int

签名脚本长度

签名脚本

字符[]

确认交易授权的计算脚本

4个

顺序

unit32_t

用于锁定时间或禁用 (0xFFFFFFFF)

比特币 哈希碰撞的过程_比特币的计算过程包括_比特币挖矿在计算什么

OutPoint结构的组成:

字段大小

描述

数据类型

阐明

32

散列

字符[32]

引用交易的哈希值

4个

指数

uint32_t

指定输出的索引,第一个输出的索引为0,以此类推

tx_out的组成:

字段大小

比特币 哈希碰撞的过程_比特币挖矿在计算什么_比特币的计算过程包括

描述

数据类型

阐明

8个

价值

uint64_t

交易的比特币数量(以 0.00000001 为单位)

1+

pk_script

var_int

pk_script 的长度

pk_script

字符[]

通常包含公钥作为比特币脚本设置条件来声明此输出

2.签名计算:

比特币的计算过程包括_比特币 哈希碰撞的过程_比特币挖矿在计算什么

将其他输入pkscripts的长度调整为0比特币的计算过程包括,在末尾加上四字节little-endian的sighash_type,执行两次sha256:

比特币交易签名过程详解

对这个hash进行签名计算得到签名数据(签名时不需要计算hash,直接调用ecdsa-sign-digest即可)

3.计算示例

使用 electrum 生成的无符号数据示例:

0100000001b37b9eefc3fa245f5ce36cb51c2d18a2d16e19d20867b23130e00f5280ccf82d010000002401ff210395cf5234e602954cba693138f3ba94c1cde7337675f5a94931e6226802d74d16fdffffff02002d3101000000001976a91425dc469afb4654d27742e3669bb3f5812268f2a188ac9ec2c901000000001976a9142dbbbd8bcff08a549be21efae747592049c9dc2d88ac71221300

签名数据:

0100000001b37b9eefc3fa245f5ce36cb51c2d18a2d16e19d20867b23130e00f5280ccf82d010000006a47304402202008714016f7e01c1a0010d7e6eb0b1f100b5a9b7c65a0506d62c1fbb9790cb102203daf6363c4039a739036ce152817f73d31319f060bbf5f354a0eeaf9f7ed3cd001210395cf5234e602954cba693138f3ba94c1cde7337675f5a94931e6226802d74d16fdffffff02002d3101000000001976a91425dc469afb4654d27742e3669bb3f5812268f2a188ac9ec2c901000000001976a9142dbbbd8bcff08a549be21efae747592049c9dc2d88ac71221300

交易记录:

计算过程:

协议版本:01000000

输入数量:01

输入列表:

b37b9eefc3fa245f5ce36cb51c2d18a2d16e19d20867b23130e00f5280ccf82d

(默认是big endian,如果想上网查详情,就用little endian

比特币挖矿在计算什么_比特币 哈希碰撞的过程_比特币的计算过程包括

2df8cc80520fe03031b26708d2196ed1a2182d1cb56ce35c5f24fac3ef9e7bb3)

OP_DUP (76) OP_HASH160 (a9) 20 字节数据 (14)

2dbbbd8bcff08a549be21efae747592049c9dc2d OP_EQUALVERIFY (88) OP_CHECKSIG (ac)

1976a9142dbbbd8bcff08a549be21efae747592049c9dc2d88ac

输出数量:02

输出列表:

锁定时间:71221300

HashType:01000000(四个字节)

两个哈希值(405c87d455f2f26e554c05b657769e2af253135367bcc69d4d772f873d39a23c)

执行两次sha256后,调用ecdsa_verify_digest计算签名。 数据经过两次sha256哈希后不需要计算签名

签名值:r、s:

2008714016f7e01c1a0010d7e6eb0b1f100b5a9b7c65a0506d62c1fbb9790cb1

3daf6363c4039a739036ce152817f73d31319f060bbf5f354a0eeaf9f7ed3cd0

pubk 是 0395cf5234e602954cba693138f3ba94c1cde7337675f5a94931e6226802d74d16

分类:

技术要点:

相关文章: