如何从公钥生成bech32地址?比特币

时间:2020-08-31 11:41:43

标签: node.js bitcoin cryptocurrency bitcoinlib

我正在使用bitcoinjs-lib来生成比特币密钥对。

我有足够的示例可以从公钥生成旧地址和隔离见证地址,但是对于bech32地址,我什么都找不到。

以数字1开头的P2PKH,
例如:1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2。

以数字开头的P2SH类型
3,例如:3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy。

Bech32类型以bc1开头,
例如:bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq。

谢谢您的帮助。

2 个答案:

答案 0 :(得分:1)

其中涉及许多步骤。

hash160(publickey),即ripemd160(sha256(publickey))

在此之后,将0 Uint8添加到bech32单词的输出中。

然后使用bech32对比特币使用前缀bc对其进行编码。
它将同样适用于莱特币,将bc更改为ltc

对于Cosmos Atom来说,它也可以工作,只是跳过将bech32的输出加0。

const crypto = require("crypto");
const bech32 = require("bech32");

const sha256Digest = crypto
  .createHash("sha256")
  .update(data, "hex")
  .digest("hex");

const ripemd160Digest = crypto
  .createHash("ripemd160")
  .update(sha256Digest, "hex")
  .digest("hex");

const bech32Words = bech32.toWords(Buffer.from(ripemd160Digest, "hex"));
const words = new Uint8Array([0, ...bech32Words]);
address = bech32.encode("bc", words);
console.log(address);

答案 1 :(得分:0)

它的归档文件为BIP0173。您可以在Bitcoin Wiki中找到有关它的文档。 Wiki BIP0173