BitcoinJS (bitcoinjs-lib)
Библиотека Bitcoin на чистом JavaScript для node.js и браузеров. Предполагается, что ее используют более 15 миллионов пользователей кошельков, и она является основой почти всех веб-кошельков Bitcoin, работающих сегодня.
Функции
- Clean: Чистый JavaScript, лаконичный код, легко читаемый.
- Tested: Покрытие> 90%, сторонние интеграционные тесты.
- Careful: Процесс утверждения небольшими целенаправленными пул-реквестами двумя людьми.
- Compatible: Работает на Node.js и во всех современных браузерах.
- Powerful: Поддержка расширенных функций, таких как multi-sig, HD Wallets.
- Secure: Сильная генерация случайных чисел, подписанные PGP релизы, проверенные разработчики.
- Principled: Нет поддержки браузеров с дерьмовым ГСЧ (IE <11)
- Standardized: Стиль кодирования сообщества узлов, Browserify, stdlib узла и буферы.
- Fast: Оптимизированный код, для повышения производительности использует типизированные массивы вместо байтовых массивов.
- Удобство для экспериментов: поддержка Bitcoin Mainnet и Testnet.
- Готовность к альткойнам: возможность работы с криптовалютами, полученными из биткойнов (такими как Dogecoin).
Должен ли я использовать это в производстве?
Если вы думаете об использовании основной ветки этой библиотеки в производстве, остановите .Master нестабильно; это наша ветка разработки, и только выпуски с тегами могут быть классифицированы как стабильные .
Установка
1npm install bitcoinjs-lib
Настраивать
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Если вы знакомы с тем, как использовать browserify, не обращайте на это внимания и продолжайте в обычном режиме. Эти шаги носят рекомендательный характер и могут не подходить для вашего приложения.
Предполагается, что 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
это из-за IS-имя-функции Используется в Duck-типирования. Typeforce .
Пример:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
ПРИМЕЧАНИЕ . Эта библиотека отслеживает функции узла 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 ОпределенноТипед , отправляйте PR в ОпределенноТипед
Flow
Определения для Flow typechecker доступны в репозитории потокового типа.
Вы можете загрузить их прямо из репозитория или с помощью интерфейса командной строки потокового типа.
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-of-4
- Сгенерируйте мультиподписной адрес SegWit 2-of-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
- Экспортируйте BIP32 xpriv, затем импортируйте его
- Экспорт BIP32 xpub
- Создайте BIP32, биткойн, аккаунт 0, внешний адрес
- Создайте BIP44, биткойн, аккаунт 0, внешний адрес
- Создайте BIP49, тестовую сеть биткойнов, учетную запись 0, внешний адрес
- Используйте BIP39 для генерации адресов BIP32
- Создать (и транслировать через 3PBP) транзакцию, в которой Алиса может выкупить вывод по истечении срока действия.
- Создать (и транслировать через 3PBP) транзакцию, в которой Алиса и Боб могут активировать вывод в любое время.
- Создать (но не транслировать через 3PBP) транзакцию, в которой Алиса пытается погасить до истечения срока
- Восстановить закрытый ключ из повторяющихся значений R
- Восстановление родительского закрытого ключа BIP32 из родительского открытого ключа и производного незащищенного дочернего закрытого ключа
- Создайте скрытый адрес с одним ключом
- Генерация скрытого адреса с одним ключом (случайным образом)
- Восстановить родительского получателя.d, если произошла утечка производного закрытого ключа (и был обнаружен одноразовый номер)
- Создайте скрытый адрес с двойным ключом
- Создание скрытого адреса с двойным ключом (случайным образом)
Если у вас есть вариант использования, который, по вашему мнению, может быть указан здесь, попросите его !
Проекты с использованием BitcoinJS
- BitAddress
- Blockchain.info
- Blocktrail
- Темный кошелек
- DecentralBank
- Кошелек Dogechain
- Кошелек EI8HT
- GreenAddress
- Helperbit
- Кошелек Melis
- Робокоин
- Банкомат Skyhook
- Инструмент Coinbase Multisig
Содействие
Мы всегда принимаем запросы на вытягивание, но мы придерживаемся определенных стандартов в отношении стиля кодирования, разработки через тестирование и сообщений о фиксации.
Пожалуйста, приложите все усилия, чтобы придерживаться их, внося свой вклад, чтобы сэкономить на незначительных исправлениях.
Running the test suite
1
2npm test
npm run-script coverage
Дополнительные библиотеки
- BIP21 -A Библиотека кодирования URL, совместимая с BIP21
- BIP38 - закрытые ключи, защищенные паролем
- BIP39 - Генерация мнемоники для детерминированных ключей
- BIP32-Utils - Набор утилит для работы с BIP32
- BIP66 -Строгая расшифровка подписи DER
- BIP68 - библиотека относительного кодирования времени блокировки
- BIP69 - Лексикографическое индексирование входов и выходов транзакций
- Кодирование / декодирование Base58 -Base58
- Base58 Check -Base58 проверить кодировку / декодирование
- Bech32 -A BIP173 совместимая библиотека кодирования Bech32
- coinselect - оптимизирующий комиссию модуль выбора ввода транзакции для bitcoinjs-lib.
- merkle-lib - библиотека, ориентированная на производительность, для вычислений корня и дерева Меркла.
- Minimaldata -Модуль для проверки биткойн-политики: SCRIPT_VERIFY_MINIMALDATA