Как сгенерировать адрес 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 });