我快速解析区块链,并且有一个关于输入事务的地址定义的问题。 所以, 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 如何正确计算地址?