如何从交易中获取地址(比特币区块链)

时间:2018-03-26 13:25:48

标签: c++ blockchain bitcoin

我快速解析区块链,并且有一个关于输入事务的地址定义的问题。 所以, scriptSig 是十六进制:

 len:       107
 scriptSig: 483045022100fffc98a7bcbe7fc6d6716775794f59551e335914683fd1ed6fcdae40c68918310220763ceeb8b9bf168f75b98e4a1dd774072e8816fec384a6228b1ecbfbcbf8239d012102d939f9164fc61e89eaf18841cc13f08721ce9ef671f3751a1536a10af752881f

PUSHDATA[72] 3045022100fffc98a7bcbe7fc6d6716775794f59551e335914683fd1ed6fcdae40c68918310220763ceeb8b9bf168f75b98e4a1dd774072e8816fec384a6228b1ecbfbcbf8239d01
PUSHDATA[33] 02d939f9164fc61e89eaf18841cc13f08721ce9ef671f3751a1536a10af752881f

我是否理解为了计算我们首先需要从压缩密钥(pushdata [33])获得的地址 - 由方法https://en.bitcoin.it/wiki/Secp256k1解压缩?

我使用OpenSSL

尝试了这种方法
EC_KEY* key=EC_KEY_new_by_curve_name(NID_secp256k1);
if (key)
{
  EC_KEY* r=o2i_ECPublicKey(&key, &keypart, 33);
  if (r)
  {
    EC_KEY_set_conv_form(key, POINT_CONVERSION_UNCOMPRESSED);
    char key_result[65];
    int size=i2o_ECPublicKey(key, &key_result);
  }
  EC_KEY_free(key);
}

openssl指定

key_result [65] = 04d939f9164fc61e89eaf18841cc13f08721ce9ef671f3751a1536a10af752881f42a2f60dd229dca9adbc86f16104a0114f8d1458fda83d4a747476d137e0fd18

-

然后我从中确定地址(根据https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses中描述的算法)

但不幸的是我得错了 1LzATNQX57AEZ1qXKbHemS1gRxMayito1n

关于块#170058 https://blockexplorer.com/block/000000000000047e131d31e3cd3c8e673c117136b72fd5d67b8b1bffbde04772  和最后一笔交易#17来自1KqydgzrzK28T6rdPVoLaASp3i4BZ5CGTb(1.75723208 BTC)

,而不是 1KqydgzrzK28T6rdPVoLaASp3i4BZ5CGTb 我得到了另一个。

指定表单 sriptSig 如何正确计算地址?

0 个答案:

没有答案