#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
к началу сработало для меня. Ценю вашу помощь!