请选择 进入手机版 | 继续访问电脑版
设为首页 |收藏本站

QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

Bitcoin-比特币中国官方网站论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

业务相关,请咨询售前客服。为避免丢失消息,请尽量添加好友

Bitcoin Cash 交易签名与构造

发布者: 盐啧啧 | 发布时间: 2018-9-18 17:45| 查看数: 134| 评论数: 0|帖子模式

​​
BitcoinCash与旧的Bitcoin的交易签名不同,采用了类似BitcoinSW的 BIP143协议,但是没有SW功能。

如果你从来没有做过BTC的签名,也没弄过SW,那么恭喜你,和我一样,上面的资料不用看了,下面我会手把手的教你如果购造一个BitcoinCash的最常用的P2PKH(Pay-to-Public-Key-Hash)交易,并签名。

你要对UTXO有一定的了解,才能看懂BCH的交易结构。

对txid为e1583427ce0b2ad9e4adc1621aada387f5d7b7fc105d7f0ea3d5d1339714cc88的交易进行分析,

这个交易是从地址qzv8nyncjruxvwvq92zes6amtuj6cxrfp5creydtnm转出0.00027317个bch,转给自已(找零)0.00022090个,转给地址qz88qqxctlqkppds353wpx92ajxpc8x4lccgpz7lmf为0.00005000个,矿工费花了0.00000227个BCH。

看一下这个交易的原始交易数据:

0100000001892f8ddd7b54bb79278a3859ba4474a68eb28956d549e09aa5e121423e0c5cb6000000006b483045022100fac3c23687a75f23038d104a8545932db9815afdb6436daf2f52507a3a62da58022020ec3941165cfb6c054efd9f4cac757adab9d8c378953ed621d118106a1779c34121023839c718238a1795a12aa2f7af43816a7ca51dee1b45576d6c81bb7eed710f19ffffffff024a560000000000001976a9149879927890f86639802a85986bbb5f25ac18690d88ac88130000000000001976a9148e7000d85fc16085b08d22e098aaec8c1c1cd5fe88ac00000000
看不懂?不要紧,把数据粘到这里解码一下:https://bch.btc.com/tools/tx/decode
这是一个典型的交易,有一个input和两个output的交易,其中一个output转帐到原地址(找零)。
用解析工具解析的内部,可以看个大概含义了,但是对于每一个数据的具体含义,要手工分析。
BCH的交易结构和BTC相同,但是签名数据的计算方式不同。
下面,我们对这些数据手工分析

详细讲解每一项数据的来源

【1】版本号
在BCH中,版本号是01000000,但是有些交易是02000000,暂时不知道差异。

【2】输入数量
这里的每一个输入是一个UTXO,即使是同一个地址,也会存在多个UTXO作为输入。

【3】输入txid的反序
这里指的是一个UTXO的ID,然后把数据高低换位。在2018-8-31 12:00 UTC 8+的时间,可以查到地址qzv8nyncjruxvwvq92zes6amtuj6cxrfp5creydtnm有一条UTXO,交易ID为b65c0c3e4221e1a59ae049d55689b28ea67444ba59388a2779bb547bdd8d2f89,把这个交易ID反序,就可以得到892f8ddd7b54bb79278a3859ba4474a68eb28956d549e09aa5e121423e0c5cb6。

【4】输入tx的序号
同上,找到的UTXO为b65c0c3e4221e1a59ae049d55689b28ea67444ba59388a2779bb547bdd8d2f89,这条交易有两个输出,第一条(序号0)为转帐到qzv8nyncjruxvwvq92zes6amtuj6cxrfp5creydtnm的输出,第二条(序号1)是op_return。我们需要的序号是0,编码长度为4byte,LE小端编码,得到结果00000000。

【5】脚本长度
这里的脚本长度,指的是解锁脚本的长度,包括两部分,一部分是签名,一部分是公钥,要把这两部分的长度加起来。

【6】签名长度
签名数据的长度,这里的48是16进制,表示签名数据有72个byte。

【7】签名数据
这一部分很复杂,放在后面详细讲解。

【8】SigHash Code
这个可以认为是签名的类型。当前例子是P2PKH交易,BTC使用SIGHASH_ALL(0x01),BCH需要与SIGHASH_FORKID(0x40)做逻辑或运算,结果是0x41。

【9】公钥长度
公钥的长度,现在使用的是压缩公钥,长度33(0x21)。

【10】公钥
现在使用的是压缩公钥,只包括椭圆曲线Q点的X坐标,数据前补02(y为偶数)或03(y为奇数)。

【11】序号
ffffffff表示没有序号,这里不使用这个功能。

【12】输出数量
这个例子中有两个输出。如果带有op_return,也算是一个输出。

【13】转帐金额
单位为聪,LE小端编码。转帐到这人地址的数量为22090聪,转化为16进制是564a,使用小端编码为8byte,结果是4a56000000000000。

【14】锁定脚本长度
包括几个操作码和公钥hash的长度。
此例子是P2PKH(支付到公钥地址模式),它的格式为:
OP_DUP(0x76) OP_HASH160(0xa9)公钥hash长度(0x14)[一个20字节的公钥hash]  OP_EQUALVERIFY(0x88)OP_CHECKSIG(0xac)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

最新评论

关闭Powered by ©科大讯飞语音云

QQ|Archiver|手机版|小黑屋|比特币论坛-比特币官网-火币网,比特时代,okcoin,btc8818.com    

GMT+8, 2019-2-20 02:00 , Processed in 1.765924 second(s), 67 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表