我正在研究trezor multisig支持 我有一个原始交易,由1个委托人签名,共2of3个multisig
0100000001f479528049ee4b235548a7116f5ca31c607728af3d4ac8f102c5be13e93dcca900000000b40047304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80414c69522103556117b3f9a92f2997529af415c2c07185b872ddf1439995eca7f3acb65c58822103917f2527fc394ae2da48ce0148d29e5b756c4d9d180a6762bbe7abe215b29a562103f03364c624889c99059902524bcd8e2b24fb09cceb2e0f895d6475ef4913676553aeffffffff02a08601000000000017a914fd80725877f902f4491a6dc733fe788c376aeff8875033f4050000000017a9149aba36d2c19b08781230a4301f364610a163fc2d8700000000
带符号的十六进制
304402201b83bd2209bc101736f60eeec3bcc1f79d45019d1829af97f5bd3210e8d8d786022020954c15372268d299b5463e1335595221e16222aee0291509a2098a0eb7fe80
涉及的公钥
['03556117b3f9a92f2997529af415c2c07185b872ddf1439995eca7f3acb65c5882', '03917f2527fc394ae2da48ce0148d29e5b756c4d9d180a6762bbe7abe215b29a56', '03f03364c624889c99059902524bcd8e2b24fb09cceb2e0f895d6475ef49136765']
我要验证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, sighash, sigdecode=ecdsa.util.sigdecode_string))
print(tx.signature_count())
它的输出是
0
0322a5066da600ba7e312e65921f584a978130e58b6fa2b59c38222f57d67d73f5
1
035e95ea113cecfbf91c4e899a0563cb8378d7c3b33ae9defcb77c8ca35744045f
2
02f7565b3f7a48fbf9692e6d90634e347eeffc2f36323f7ce4167666fb7e55f904
3
02cea9009093d9ad46d2977dfe9232c7ad16a29f0e47294e83c6d4d7f5f6f06b4c
Process finished with exit code 0
我认为我的公开密钥应该在输出中,这是错误的。