BitcoinJS (bitcoinjs-lib)
Биткойн-библиотека на чистом JavaScript для node.js и браузеров. По оценкам, ее используют более 15 миллионов пользователей кошельков и она является основой почти всех биткойн-веб-кошельков, выпускаемых сегодня.
Функции
- Clean: Чистый JavaScript, лаконичный код, легко читаемый.
- Tested: Охват > 90 %, сторонние интеграционные тесты.
- Careful: процесс утверждения двумя людьми для небольших, целенаправленных запросов на включение.
- Compatible: работает на Node.js и всех современных браузерах.
- Powerful: Поддержка расширенных функций, таких как мультиподпись и HD-кошельки.
- Secure: Сильная генерация случайных чисел, релизы, подписанные PGP, проверенные разработчики.
- Principled: Нет поддержки браузеров с дерьмовым RNG (IE < 11).
- Standardized: стиль кодирования сообщества Node, Browserify, стандартная библиотека Node и буферы.
- Fast: Оптимизированный код, для повышения производительности использует типизированные массивы вместо байтовых массивов.
- Удобство для экспериментов: поддержка Bitcoin Mainnet и Testnet.
- Поддержка альткойнов: возможность работы с криптовалютами, производными от биткойнов (такими как Dogecoin).
Должен ли я использовать это в производстве?
Если вы подумываете об использовании основной ветки этой библиотеки в производстве, остановитесь . Master не стабильна, это наша ветка разработки, и только помеченные выпуски могут быть классифицированы как стабильные .
Монтаж
1npm install bitcoinjs-lib
Настраивать
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Если вы знакомы с использованием браузера, проигнорируйте это и действуйте как обычно. Эти шаги носят исключительно рекомендательный характер и могут не подойти для вашего приложения.
Для выполнения этих шагов предполагается, что Browserify установлен.
Для вашего проекта создайте index.js
файл
1
2
3
4
5
6
7
8
9
10let bitcoin = require('bitcoinjs-lib')
// your code here
function myFunction () {
return bitcoin.ECPair.makeRandom().toWIF()
}
module.exports = {
myFunction
}
Теперь скомпилируем для браузера:
1browserify index.js --standalone foo > app.js
Теперь вы можете разместить <script src="app.js" />
свою веб-страницу, используя ее foo.myFunction
для создания нового закрытого ключа Биткойн.
ПРИМЕЧАНИЕ . Если вы уродуете javascript, вы должны исключить из искажения следующие имена переменных: BigInteger
, ECPair
, Point
, Это связано с типизацией имени функции-утки, используемой в typeforce .
Пример:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
ПРИМЕЧАНИЕ . Эта библиотека отслеживает функции Node LTS. Если вам нужен строгий ES5, используйте его --transform babelify
вместе с вашим browserify
шагом (с использованием es2015
предустановки).
ПРИМЕЧАНИЕ . Если вы ожидаете, что эта библиотека будет работать на устройстве iOS 10, убедитесь, что вы используете buffer@5.0.5 или более позднюю версию.
Typescript or VSCode users
Объявления типов для Typescript доступны для версии ^3.0.0
библиотеки.
1npm install @types/bitcoinjs-lib
Теперь вы можете использовать bitcoinjs-lib
библиотеку, совместимую с машинописным текстом.
1import { HDNode, Transaction } from 'bitcoinjs-lib'
Для VSCode (и других редакторов) пользователям рекомендуется установить объявления типов, поскольку Intellisense использует эту информацию для облегчения написания кода (автодополнение, статический анализ).
Сообщайте о любых ошибках, связанных с машинописным текстом, на форке @dlebrecht DefinitelyTyped , отправляйте PR в DefinitelyTyped.
Flow
Определения средства проверки типов потока доступны в репозитории потоковой типизации.
Вы можете загрузить их непосредственно из репозитория или с помощью CLI с типизированным потоком.
1
2# npm install -g flow-typed
$ flow-typed install -f 0.27 bitcoinjs-lib@2.2.0 # 0.27 for flow version, 2.2.0 for bitcoinjs-lib version
Определения являются полными и актуальными для версии 2.2.0. Определения поддерживаются @runn1ng .
Примеры
Приведенные ниже примеры реализованы в виде интеграционных тестов, их должно быть очень легко понять. В противном случае приветствуются запросы на включение. Некоторые примеры взаимодействуют (через HTTPS) со сторонним поставщиком блокчейна (3PBP).
- Генерировать случайный адрес
- Создайте адрес из хеша SHA256.
- Импортировать адрес через WIF
- Создайте мультиподписной адрес P2SH 2 из 3.
- Создать адрес SegWit
- Создайте адрес SegWit P2SH.
- Создайте мультиподписной адрес SegWit 3 из 4.
- Создайте мультиподписной адрес SegWit 2-из-2 P2SH.
- Поддержка получения транзакций по адресу (сторонний блокчейн)
- Создайте адрес тестовой сети
- Создать адрес Litecoin
- Создайте транзакцию 1-к-1
- Создайте транзакцию 2 к 2
- Создайте (и транслируйте через 3PBP) типичную транзакцию.
- Создайте (и транслируйте через 3PBP) транзакцию с выходом OP_RETURN.
- Создайте (и транслируйте через 3PBP) транзакцию с входом P2SH (многоподписная подпись) 2 из 4.
- Создайте (и транслируйте через 3PBP) транзакцию с входом SegWit P2SH(P2WPKH).
- Создайте (и транслируйте через 3PBP) транзакцию с входом SegWit 3-of-4 P2SH(P2WSH(multisig))
- Импортируйте тестовую сеть BIP32 xpriv и экспортируйте в WIF.
- Экспортируйте xpriv BIP32, затем импортируйте его.
- Экспорт BIP32 xpub
- Создайте BIP32, биткойн, учетную запись 0, внешний адрес.
- Создайте BIP44, биткойн, учетную запись 0, внешний адрес.
- Создайте BIP49, тестовую сеть биткойнов, учетную запись 0, внешний адрес.
- Используйте BIP39 для генерации адресов BIP32.
- Создайте (и транслируйте через 3PBP) транзакцию, в которой Алиса может выкупить выходные данные после истечения срока действия.
- Создайте (и транслируйте через 3PBP) транзакцию, где Алиса и Боб могут активировать выходные данные в любое время.
- Создайте (но не транслируйте через 3PBP) транзакцию, в которой Алиса пытается выкупить до истечения срока действия.
- Восстановить закрытый ключ из повторяющихся значений R.
- Восстановить родительский закрытый ключ BIP32 из родительского открытого ключа и производного незащищенного дочернего закрытого ключа.
- Создайте скрытый адрес с одним ключом
- Генерация скрытого адреса с одним ключом (случайным образом)
- Восстановить родительский получатель.d, если произошла утечка производного закрытого ключа (и был раскрыт nonce)
- Создайте скрытый адрес с двумя ключами
- Создать скрытый адрес с двумя ключами (случайным образом)
Если у вас есть вариант использования, который, по вашему мнению, можно перечислить здесь, попросите об этом !
Проекты, использующие BitcoinJS
- Битадрес
- Блокчейн.информация
- Блоктрейл
- Темный кошелек
- ДецентралБанк
- Кошелек Dogechain
- EI8HT кошелек
- ЗеленыйАдрес
- Хелпербит
- Мелис Кошелек
- Робокоин
- Скайхук Банкомат
- Инструмент мультиподписи Coinbase
Содействие
Мы всегда принимаем запросы на включение, но придерживаемся определенных стандартов в отношении стиля кодирования, разработки через тестирование и сообщений о фиксации.
Пожалуйста, приложите все усилия, чтобы придерживаться этих правил, помогая сэкономить на незначительных исправлениях.
Running the test suite
1
2npm test
npm run-script coverage
Дополнение библиотек
- BIP21 — библиотека кодирования URL-адресов, совместимая с BIP21.
- BIP38 — закрытые ключи, защищенные парольной фразой
- BIP39 — генерация мнемоники для детерминированных ключей
- BIP32-Utils — Набор утилит для работы с BIP32.
- BIP66 — строгое декодирование подписи DER
- BIP68 — библиотека кодирования относительного времени блокировки.
- BIP69 — Лексикографическое индексирование входов и выходов транзакций
- Base58 — кодирование/декодирование Base58.
- Проверка Base58 — проверка кодирования/декодирования Base58.
- Bech32 — библиотека кодирования Bech32, совместимая с BIP173.
- coinselect — модуль выбора ввода транзакций с оптимизацией комиссий для bitcoinjs-lib.
- merkle-lib — библиотека, ориентированная на производительность, для вычислений корней Меркла и деревьев.
- минимальные данные — модуль для проверки политики биткойнов: SCRIPT_VERIFY_MINIMALDATA