针对公钥比特币黄金验证签名

问题描述

我正在研究trezor multisig支持 我有一个原始交易,由1个委托人签名,共2of3个multisig

0100000001f479528049ee4b235548a7116f5ca31c607728af3d4ac8f102c5be13e93dcca900000000b40047304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80414c69522103556117b3f9a92f2997529af415c2c07185b872ddf1439995eca7f3acb65c58822103917f2527fc394ae2da48ce0148d29e5b756c4d9d180a6762bbe7abe215b29a562103f03364c624889c99059902524bcd8e2b24fb09cceb2e0f895d6475ef4913676553aeffffffff02a08601000000000017a914fd80725877f902f4491a6dc733fe788c376aeff8875033f4050000000017a9149aba36d2c19b08781230a4301f364610a163fc2d8700000000

带符号的十六进制

304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80

涉及的公钥

['03556117b3f9a92f2997529af415c2c07185b872ddf1439995eca7f3acb65c5882','03917f2527fc394ae2da48ce0148d29e5b756c4d9d180a6762bbe7abe215b29a56','03f03364c624889c99059902524bcd8e2b24fb09cceb2e0f895d6475ef49136765']

transaction details

我要验证3个公钥中哪个是由公钥签名的交易

我尝试了以下电子代码


    from ecdsa import secp256k1
    from ecdsa.ecdsa import generator_secp256k1
    from ecdsa.util import sigdecode_der,sigencode_string
    
    from lib import Transaction
    from lib.bitcoin import Hash,MyVerifyingKey,point_to_ser
    from lib.util import bfh,bh2u
    
    raw_tx = '0100000001f479528049ee4b235548a7116f5ca31c607728af3d4ac8f102c5be13e93dcca900000000b40047304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80414c69522103556117b3f9a92f2997529af415c2c07185b872ddf1439995eca7f3acb65c58822103917f2527fc394ae2da48ce0148d29e5b756c4d9d180a6762bbe7abe215b29a562103f03364c624889c99059902524bcd8e2b24fb09cceb2e0f895d6475ef4913676553aeffffffff02a08601000000000017a914fd80725877f902f4491a6dc733fe788c376aeff8875033f4050000000017a9149aba36d2c19b08781230a4301f364610a163fc2d8700000000'
    sig = '304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80'
    
    tx = Transaction(raw_tx)
    sighash = Hash(bfh(tx.serialize_preimage(0)))
    
    pubkeys,x_pubkeys = tx.get_sorted_pubkeys(tx.inputs()[0])
    print(sighash.hex())
    print(pubkeys)
    
    order = generator_secp256k1.order()
    r,s = sigdecode_der(bfh(sig),order)
    sig_string = sigencode_string(r,s,order)
    compressed = True
    
    for recid in range(4):
        print(recid)
        public_key = MyVerifyingKey.from_signature(sig_string,recid,sighash,curve=secp256k1)
        pubkey = bh2u(point_to_ser(public_key.pubkey.point,compressed))
        print(pubkey)
        # print(public_key.verify_digest(sig_string,sigdecode=ecdsa.util.sigdecode_string))
    print(tx.signature_count())

它的输出

0
0322a5066da600ba7e312e65921f584a978130e58b6fa2b59c38222f57d67d73f5
1
035e95ea113cecfbf91c4e899a0563cb8378d7c3b33ae9defcb77c8ca35744045f
2
02f7565b3f7a48fbf9692e6d90634e347eeffc2f36323f7ce4167666fb7e55f904
3
02cea9009093d9ad46d2977dfe9232c7ad16a29f0e47294e83c6d4d7f5f6f06b4c

Process finished with exit code 0

我认为我的公开密钥应该在输出中,这是错误的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)