python-从给定名称操作的名称币交易中提取输入地址

我一直在尝试使用一些python代码从Namecoin交易中提取输入地址.此代码适用于常规交易(其中一些地名币从一个地址转移到另一个地址);但是,这不适用于具有名称操作(例如name_new)的事务.这是一些代码:

raw = namecoind.getrawtransaction(tx_hash)
data = namecoind.decoderawtransaction(raw)

if 'vin' in data:
    inputs = data['vin']
    for input in inputs:
        input_value = input.get('value')

        if 'scriptSig' in input:
            script_sig_asm = str(input['scriptSig'].get('asm'))
            script_sig_parts = script_sig_asm.split(' ')
            if len(script_sig_parts) > 1 and (len(script_sig_parts[-1]) == 130 
                or len(script_sig_parts[-1]) == 66):
                public_key_string = script_sig_parts[-1]
                try:
                    recipient_address = NamecoinPublicKey(public_key_string, verify=False).address()
                    print recipient_address
                except Exception, e:
                    print str(e)
                       return
            elif len(script_sig_parts) == 1:
                print "coinbase transaction input"
                return


    #print "Inputs:"

在常规交易上运行此代码是可行的,即,我们获得了收件人地址.但是,对诸如this之类的名称操作运行此代码,则表明其是一个coinbase事务,即

len(script_sig_parts) == 1

为True,因此receiver_address为空.

有人可以指出我如何在涉及名称操作的Namecoin交易中获取收件人地址(在上述交易中为:NCAzVGKq8JrsETxAkgw3MsDPinAEPwsTfn)?

解决方法:

您的代码在大多数名称交易中应该可以正常工作(但我尚未对其进行测试).例如,如果您使用499a1e4c7bb1388347e1bd1142425949971eaf1fa2521af625006f4f49ce85c5(这是d / domob的最新更新),则输入的相关脚本信号为:

"scriptSig" : {
  "asm" : "3045022100c489ac648d08416d83d5e561d222049242242ded5f1c2bfd35ea48bb78b6a90f02203a28dee3d9473755fc2288bcaec9105e973e306071d28e69e593668c94b19fc101 04a85b7360b6b95459f7286111220f7a1eaef23bc9ced8a3b56cd57360374381bcabf7182941be400ccdfb761e26fa62d50b8911358aceb6aa30de9e8df5c46742",
  "hex" : "483045022100c489ac648d08416d83d5e561d222049242242ded5f1c2bfd35ea48bb78b6a90f02203a28dee3d9473755fc2288bcaec9105e973e306071d28e69e593668c94b19fc1014104a85b7360b6b95459f7286111220f7a1eaef23bc9ced8a3b56cd57360374381bcabf7182941be400ccdfb761e26fa62d50b8911358aceb6aa30de9e8df5c46742"
},

如您所见,它在scriptsig中确实有两部分. (公共密钥和签名.)但是,对于您的交易,先前的输出不是pay-to-pubkeyhash,而是pay-to-pubkey.这是先前的92457dfc2831bdb6439fc03e72dbe3908140d43ec410f4a7396e3d65f5ab605b的相关输出:

"scriptPubKey" : {
  "asm" : "046a77fa46493d61985c1157a6e3e498b3b97c878c9c23e5b4729d354b574eb33a20c0483551308e2bd08295ce238e8ad09a7a2477732eb2e995a3e20455e9d137 OP_CHECKSIG",
  "hex" : "41046a77fa46493d61985c1157a6e3e498b3b97c878c9c23e5b4729d354b574eb33a20c0483551308e2bd08295ce238e8ad09a7a2477732eb2e995a3e20455e9d137ac",
  "reqSigs" : 1,
  "type" : "pubkey",
  "addresses" : [
    "NCAzVGKq8JrsETxAkgw3MsDPinAEPwsTfn"
  ]
}

由于pay-to-pubkey脚本的性质,脚本sig不再包含pubkey(仅包含签名).我没有找到仅从脚本信号来查找输入地址的方法.如果要处理这些(罕见)情况,则必须获取先前的输出并在此处查看. (我对ECDSA的了解有限-也许有一种方法可以从签名中提取公钥.)

上一篇:BlockChain分栏简介


下一篇:2021-2027全球与中国字幕解决方案市场调研及可行性研究报告