Как получить биткойн-адрес из открытого ключа с помощью bitcoinjs

#javascript #bitcoin

#javascript #биткойн

Вопрос:

Нашел статью, объясняющую, как сгенерировать биткоин-адрес из открытого ключа: https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses

Но интересно, реализована ли эта процедура уже в bitcoinjs или любой другой библиотеке JS. Таким образом, мне не нужно выполнять все 8 шагов из руководства вручную

Комментарии:

1. Биткоин-адрес — это просто хэш открытого ключа SHA256, любая библиотека, имеющая функцию SHA256, получит вам адрес из открытого ключа.

2. @Adam Это немного больше, чем это, это хэш SHA256, который затем хэшируется RIPEMD160, а затем кодируется в Base58 с контрольной суммой (которая получается из двойного SHA256 хэша RIPEMD160).

3. @Adam но в этом руководстве, о котором я упоминал, говорится, что для получения адреса требуется целых 8 шагов. Вот почему я спрашиваю. Попытаюсь сделать просто SHA256. Спасибо!

4. @DmitryTaipov — послушай paulpro, моя память была неправильной.

Ответ №1:

Да, эта библиотека может это сделать.

 const bitcoinjs = require( 'bitcoinjs-lib' );

const pubkey = Buffer.from( '0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352', 'hex' );
const { address } = bitcoinjs.payments.p2pkh({ pubkey });
console.log( address ); // 1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs
  

Комментарии:

1. Большое спасибо за ваш ответ! Это именно то, что мне было нужно. Возможно, это отдельный вопрос, но я получил только 64-байтовый (несжатый) открытый ключ, подобный этому: 08d6770d8219923fe25a4d6aeb2c171253d5de3bc225f09dbfb2cb93ed837be1a80fdd3af5046b8f1f5412e5b321dcc3c25be9f4dd285250421ea55071794277 . И bitcoinjs.payments.p2pkh() занимает всего 32 байта ключа. Как 64-байтовый ключ может быть преобразован в 32-байтовый? Или, может быть, в bitcoinjs есть другая функция, которая принимает более длинные ключи?

2. @DmitryTaipov Смотрите этот ответ . Буфер должен быть 33 или 65 байтами. Если я добавлю 04 перед вашим открытым ключом, я получу адрес 17WseNiLB8Kbp4L73pL3FDsfyYN86c82Em , но я не уверен, что это то, что вы ищете (один и тот же открытый ключ приводит к двум разным адресам, если он в сжатом формате по сравнению с несжатым форматом).

3. взятие левой половины ключа в 64 байта и добавление 03 к началу сработало для меня. Ценю вашу помощь!