请选择 进入手机版 | 继续访问电脑版

比特币论坛-人人比特币中国官方网站-比特币论坛-bitcoin-btc

QQ登录

只需一步,快速开始

查看: 372|回复: 0

Bitcoin Cash 交易签名与构造

[复制链接]

Rank: 4

  • TA的每日心情

    2018-10-12 18:03
  • 签到天数: 106 天

    [LV.6]常住居民II

    Rank: 8Rank: 8

    427

    主题

    539

    帖子

    3422

    积分

    论坛元老

    积分
    3422
    发表于 2018-9-18 17:45:37 | 显示全部楼层 |阅读模式
    ​​
    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

    帖子的最近访客

    楼主热帖



    上一篇:Wormhole燃烧地址到底有多安全
    下一篇:非盈利组织Eatbch得益于压力测试:微小的交易也能帮助到...
    回复

    使用道具 举报

    guest
    welcomelogin
    *滑块验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    QQ|关于我们|Archiver|手机版|小黑屋| 比特币论坛-人人比特币中国官方网站-比特币论坛比特币论坛-比特币8818中国官方网站-比特币论坛-bitcoin-btc  |网站地图   

    GMT+8, 2020-8-9 02:02 , Processed in 2.534286 second(s), 68 queries .

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