Как сгенерировать адрес bech32 из открытого ключа? Биткойн

Я использую bitcoinjs-lib для генерации пары ключей биткойнов.

У меня было достаточно примеров для создания устаревшего адреса и адреса segwit из открытого ключа, но для адреса bech32 я ничего не нашел.

P2PKH, которые начинаются с цифры 1,
например: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2.

Тип P2SH, начинающийся с цифры
3, например: 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy.

Тип Bech32, начинающийся с bc1,
например: bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq.

Спасибо вам за помощь.

3 ответа

Для этого нужно много шагов.

hash160(publickey) который ripemd160(sha256(publickey)).

После этого добавьте 0 Uint8 для вывода слов bech32.

Затем используя bech32 закодируйте его с префиксом bcза биткойн.
Это будет работать и для litecoin, измените bc к ltc.

Для Cosmos Atom он также будет работать, за исключением пропуска добавления 0 к выходным данным bech32.

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);

Он зарегистрирован как BIP 0173. Вы можете найти документацию по нему в Bitcoin Wiki.Вики BIP0173

Или вы можете просто использовать bitcoin.payments.p2wpkh({pubkey:yourpubkey,network });

Другие вопросы по тегам