如何从节点js中的public键获取btc地址

How get btc address from public key in node js

我为我的英语道歉!

如何将 BTC 签名脚本中的十六进制 public 密钥解码为节点 js 中的字符串地址?

例如,我有以下十六进制 public 键:

03745AAAF364030720B2D14DE50A3310EEF521C91E36353DCA20813713535C005A

解码后我应该得到相应的比特币地址

1GNXpcYzasmmXvM4rNgkvZ5SzXgL4L9Ch6

https://bitcoin.stackexchange.com/questions/71867/decoding-scriptsig中是关于解码btc交易的ScriptSig的问题,有以下片段:

...
21: OP_DATA_0x21:        compressed pub key (33 Bytes)
    03745AAAF3640307:20B2D14DE50A3310:EEF521C91E36353D:CA20813713535C00:5A
    This is MultiSig's compressed Public Key (X9.63 form)
    corresponding bitcoin address is:    1GNXpcYzasmmXvM4rNgkvZ5SzXgL4L9Ch6
...

根据这个问题 btc public 密钥以 ANSI X9.63 格式编码。

nodejs有办法解码ANSI X9.63格式吗?

非常感谢!

我找到了答案。因为它可以使用 bitcoinjs-lib 和支付模块:

var bitcoin = require('bitcoinjs-lib');

const pubKey = "03745AAAF364030720B2D14DE50A3310EEF521C91E36353DCA20813713535C005A";

const { address } = bitcoin.payments.p2pkh({ pubkey: new Buffer(pubKey, 'hex') });

console.log(address); //1GNXpcYzasmmXvM4rNgkvZ5SzXgL4L9Ch6

您的计算机上必须已下载 node 和 npm。

npm 安装 bitcoinjs-lib

从您的节点终端下载 bitcoinjs 库。

var bitcoin = require("bitcoinjs-lib")

需要 bitcoinjs-lib。

var keyPair = bitcoin.ECPair.makeRandom(); or var keyPair = "03745AAAF364030720B2D14DE50A3310EEF521C91E36353DCA20813713535C005A"

为密钥对创建变量。

console.log(keyPair.getAddress());

通过将地址记录到控制台来测试地址。应返回有效的比特币地址。

var address = keyPair.getAddress();

将比特币地址结果保存到一个变量。

console.log(keyPair.toWif());

通过登录控制台测试私钥。应返回有效的比特币私钥。

var pkey = keyPair.toWIF();

将比特币私钥结果保存到变量中。

比特币使用“椭圆曲线数字签名算法”,因此我使用https://www.npmjs.com/package/elliptic

import EC from "elliptic";

// use a prime number to generate the curve. that p i 256 bits.
//  ec works better with hashed values. we always hash the data.
const ec = new EC.ec("secp256k1");

创建 public 密钥

const keyPair = ec.genKeyPair();
// ec returns x,y points of elliptic curve. so we convert it to hex.
const publicKey = keyPair.getPublic().encode("hex");