SOS怎么解析btc交易input的地址?

lennie副船长发布在 疑难解答
 15607  6


SOS: 怎么根据交易的input的字端解析交易input-address? 谁有推荐的方法

  • 正序
  • 最新
只看帖主楼层直达
  • BurntCoins 副船长 2020-02-28 18:47:20 只看该作者沙发
    比特币交易里其实是没有地址的。只有一些特定的锁定(输出)脚本对应地址。

    楼主可以去看看bitcoin wiki:https://en.bitcoin.it/wiki/Address

    输入里有被花掉的交易txid和输出编号,用这个信息可以找到被花掉的UTXO,知道里面的输出脚本,这样就可以知道地址了。

    比如P2PKH的锁定脚本是DUP HASH160 PUSHDATA(20字节公钥哈希) EQUALVERIFY CHECKSIG,把里面的20字节公钥哈希拿出来,前面加上版本号0x00,后面加上4字节的校验位,再用Base58编码,就是1开头的地址了。

    P2PK裸公钥输出被一些开发者认为没有对应的地址,另一些开发者则认为可以把它当做P2PKH来写出1开头的地址。
    除此之外还有非标准交易,这个更是没有对应的地址了,不过非标准交易一般的节点都不转发、不打包。
  • BurntCoins 副船长 2020-02-28 19:02:56 只看该作者板凳
    另一个办法是从输入里反推UTXO里的输出脚本,比如直接把输入里的提供的公钥哈希一下,得到20字节公钥哈希,然后加上版本位和校验位、再Base58编码成地址。不过这个属于猜测,不能保证一定准确,如果之前的交易输出是非标准的,那就对不上了(不过这样也没有对应的地址了)。

    而且还有P2PK裸公钥输出这种情况,输入脚本里不提供公钥,虽然可以从签名里恢复出公钥(Bitcoin Core等钱包自带的消息签名验证功能就是这样),但是不一定能恢复出跟原来一模一样的公钥。这里有比较详细的解释,不过具体我也不是很懂:https://bitcoin.stackexchange.com/questions/10759/how-does-the-signature-verification-feature-in-bitcoin-qt-work-without-a-public
    我只看到里面有提到一点,就是Bitcoin Core的消息签名验证功能虽然是从签名里恢复出公钥,但这里也需要提供额外的一点信息(recovery flags)才能恢复出正确的公钥。
    还有一个相关的,解释为什么比特币交易里的签名是71字节,而消息签名是64字节(是因为DER编码,还有recovery flags):https://bitcoin.stackexchange.com/questions/12554/why-the-signature-is-always-65-13232-bytes-long
  • BurntCoins 副船长 2020-02-28 19:11:07 只看该作者地板
    bitcoin wiki里有个专门的条目解释为什么比特币没有“来源地址”:https://en.bitcoin.it/wiki/From_address

    里面还举了几个高级(非标准)交易的例子,比如:
    https://btc.com/a60143eb3f8d3cd1f42cca874f35736186d67c488efd3c1b7214bbd74b310e0c#out_0
    可以看出 BTC.COM 这个在线区块浏览器显示“地址解析失败”,不过下面可以看到脚本内容。

    论坛里也有人举出裸公钥多重签名(P2MS)输出的例子:
    https://btc.com/581d30e2a73a2db683ac2f15d53590bd0cd72de52555c2722d9d6a78e9fea510
    原帖:https://www.chainnode.com/post/401170#floor2
  • BurntCoins 副船长 2020-02-28 19:28:59 只看该作者5楼
    如果考虑P2MS裸公钥多重签名,这种情况,那就更蛋疼了,因为光凭输入没办法知道之前的交易到底是P2MS还是P2PK,就算是P2MS,也不知道参与多重签名的有多少把公钥、有没有把所有签名都给出来。
  • BurntCoins 副船长 2020-02-28 19:30:35 只看该作者6楼
    如果输入提供了多于一个签名,那应该可以排除P2PK的情况。可以大致判断是P2MS;但如果只提供了一个签名,那无法区分到底是P2PK还是1 of n的P2MS。
  • 网白 副船长 2020-03-05 15:13:13 只看该作者7楼
    BurntCoins 发表于2020-02-28 19:11:07 bitcoin wiki里有个专门的条目解释为什么比特币没有“来源地址”:https://en.bitcoin.it/wiki/From_address

    里面还举了几个高级(非标准)交易的例子,比如:
    https://btc.com/a60143eb3f8d3cd1f42cca874f35736186d67c488efd3c1b7214bbd74b310e0c#out_0
    可以看出 BTC.COM 这个在线区块浏览器显示“地址解析失败”,不过下面可以看到脚本内容。

    论坛里也有人举出裸公钥多重签名(P2MS)输出的例子:
    https://btc.com/581d30e2a73a2db683ac2f15d53590bd0cd72de52555c2722d9d6a78e9fea510
    原帖:https://www.chainnode.com/post/401170#floor2
    感谢层主。学习了


    楼层直达
登录 账号发表你的看法,还没有账号?立即免费 注册