Transactions 签署比特币Segwit交易
为了了解更多关于比特币交易的信息,我正在研究二进制,而不是真正使用任何工具,如BitcoinTx或Bitcoin cli。无论如何,我在尝试签署segwit交易时遇到了一点小麻烦。这是一个简单的事务,一个UTXO和一个接收者,这是一个P2WPKH事务 问题是,对于segwit,在签署事务之前,我不知道在SigScript字段中输入什么。文档说它应该是空的,但这似乎不起作用Transactions 签署比特币Segwit交易,transactions,bitcoin,ecdsa,Transactions,Bitcoin,Ecdsa,为了了解更多关于比特币交易的信息,我正在研究二进制,而不是真正使用任何工具,如BitcoinTx或Bitcoin cli。无论如何,我在尝试签署segwit交易时遇到了一点小麻烦。这是一个简单的事务,一个UTXO和一个接收者,这是一个P2WPKH事务 问题是,对于segwit,在签署事务之前,我不知道在SigScript字段中输入什么。文档说它应该是空的,但这似乎不起作用 02000000010a02214430acee2ed509798187210171bb387075ce2c82ef5a73
02000000010a02214430acee2ed509798187210171bb387075ce2c82ef5a73774d6159387500000000 00 ffffffff
018ca1b404000000001976a914906ec1c4804632c0b067e5a2732c41cdf620c4e688ac0000000001000000
以上是原始事务,1个输入,1个输出。在segwit字段中,我有一个0x00字节,如图所示。因此,我使用sha256(sha256)处理上述二进制文件,然后创建签名segwit事务,如下所示:
020000000000010A022144030ACEE2ED509798187210171BB387075CE2C82EF5A7377D61593875000000017160014D99F1EA19E98D9ED10E5D442BE37A44B6B63C477FFFFFF
018CA1B404000000001976A914906EC1C4804632CB067E5A2732C41CDF620C4E688AC
02
4830460221009F5743A2FC62BB9CEE292EF79EB3EC3A20A3ED1EC84BDF9E85205922CA1D84F35022100922F887BE7283EB0FD73DA53EFA5544E62A589F6E268C0D300AD727791C2F936C
41047D011958B661181242ADDD300B6D5C51F80D626745531DD855B3435B57E05FB46477BA167A57B23B8A492305C0085D8C34AA04D483B7F15A2D551E2FF66200000000
在上面,我得到了我的输入事务,在SigScript中,我把一个push设置为0,后跟一个20字节的Hash160公钥
接下来是输出事务,它只有一个带有OP_DUP的公钥散列,OP_hash_160 OP_EQUALVERIFY,OP_CHECKSIG
最后是签名,它有2个部分,1是签名本身(der编码),最后是公钥
出于某种原因,它说签名不正确,我不知道为什么。在我签名之前,事务中的SigScript是否应该实际为NULL?在我签名之前,钱包的公钥是否应该包含资金(就像P2PKH交易一样)
如果有任何提示,我将不胜感激,因为我认为我很接近,我只需要在签名之前知道事务的外观。您需要将ScriptPubKey放在SigScript字段上以进行签名。在ELIPHIC曲线签名上,要非常小心Endianness和Low-High R和S规则 解释来自: 分步说明: 我们开始创建一个新的事务,并对其进行散列和签名
01000000
01
be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396
00000000
19
76 a9 14 dd6cce9f255a8cc17bda8ba0373df8e861cb866e 88 ac
(查看上的底线)ffffffff
01
23ce010000000000
19
76 a9 14 a2fd2e039a86dbcf0e1a664729e09e8007f8951088 ac
(这是将资金转移回地址1FromKBPAS8MWsk1Yv1Yiu8rJbjfVioBHc)00000000
01000000
01000000
01
be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396
00000000
19 76 a9 14 dd6cce9f255a8cc17bda8ba0373df8e861cb866e 88 ac
ffffffff
01
23ce010000000000
19 76 a9 14 a2fd2e039a86dbcf0e1a664729e09e8007f89510 88 ac
00000000
01000000
1cde0239b55717cca8003104abc2ec2673d4f6fabea0b74351940e382e88486f
1MBngSqZbMydscpzSoehjP8kznMaHAzh9y
是一个“MrbobymrbybyMrbuby!”的智能钱包,它恰好编码了一个以“MB”开头的地址(使链接2变得非常容易;有关短语来源,请参阅下面的@WizardOfAussie注释)。
WIF中的私钥:5hvoffg7k1e2aewesm5pbczrhtcsiznbflyxbxbya57dhkhv4u3
0ecd20654c2e2be708495853e8da35c664247040c00bd10b9b13e5e86e6a808d
。每个加密库中都有一个sign(key,digest)方法。它将返回一个字节数组。此数组将不超过72字节,并以十六进制代码30开头。让我们假设签名是3046022100CF4D7571DD47A4D47F5CB767D54D670530A3555726B27B6AC56117F5E7808FE0221008CBB4233BB04D7F28A715CF7C938E238AFDE90207E9D103DD9018E12CB7180E
在这个签名之后,我们附加了一个字节的哈希代码类型:01
。1MBngSqZbMydscpzSoehjP8kznMaHAzh9y的公钥是:042DAA93315EEBBE2CB9B5C3505DF4C6FB6CACA8B756786098567550D4820C09DB988FE9997D049D687292F815CCD6E7FB5C1B1A91137999818D17C73D00AEF9
49 3046022100cf4d7571dd47a4d47f5cb767d54d6702530a3555726b27b6ac56117f5e7808fe0221008cbb42233bb04d7f28a715cf7c938e238afde90207e9d103dd9018e12cb7180e 01
41 042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9
第一行是“推”