问题描述
我正在研究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,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 (将#修改为@)