BitcoinJS (bitcoinjs-lib)
La biblioteca Bitcoin de JavaScript puro para node.js y navegadores. Se estima que la utilizan más de 15 millones de usuarios de billeteras y es la columna vertebral de casi todas las billeteras web de Bitcoin en producción en la actualidad.
Características
- Clean: JavaScript puro, código conciso, fácil de leer.
- Tested: Cobertura > 90%, pruebas de integración de terceros.
- Careful: Proceso de aprobación de dos personas para solicitudes de extracción pequeñas y enfocadas.
- Compatible: Funciona en Node.js y todos los navegadores modernos.
- Powerful: Compatibilidad con funciones avanzadas, como billeteras HD multifirma.
- Secure: Fuerte generación de números aleatorios, versiones firmadas por PGP, desarrolladores confiables.
- Principled: No hay soporte para navegadores con RNG basura (IE < 11)
- Standardized: Estilo de codificación de la comunidad de Node, Browserify, stdlib y Buffers de Node.
- Fast: Código optimizado, utiliza matrices escritas en lugar de matrices de bytes para mejorar el rendimiento.
- Apto para experimentos: compatibilidad con Bitcoin Mainnet y Testnet.
- Listo para Altcoin: Capaz de trabajar con criptomonedas derivadas de bitcoin (como Dogecoin).
¿Debería usar esto en producción?
Si está pensando en utilizar la rama master de esta biblioteca en producción, deténgase . Master no es estable; es nuestra rama de desarrollo y solo las versiones etiquetadas pueden clasificarse como estables .
Instalación
1npm install bitcoinjs-lib
Configuración
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Si está familiarizado con el uso de browserify, ignórelo y continúe con normalidad. Estos pasos son solo de orientación y pueden no ser adecuados para su aplicación.
Se supone que Browserify está instalado para estos pasos.
Para su proyecto, cree un index.js
archivo
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
}
Ahora, para compilar para el navegador:
1browserify index.js --standalone foo > app.js
Ahora puede ingresar <script src="app.js" />
a su página web y usarla foo.myFunction
para crear una nueva clave privada de Bitcoin.
NOTA : Si feas el javascript, debes excluir los siguientes nombres de variables para que no se modifiquen: BigInteger
, ECPair
, Point
Esto se debe a la función-name-duck-typing utilizada en typeforce .
Ejemplo:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
NOTA : Esta biblioteca rastrea las características de Node LTS; si necesita ES5 estricto, úselo --transform babelify
junto con su browserify
paso (usando un es2015
ajuste preestablecido).
NOTA : Si espera que esta biblioteca se ejecute en un dispositivo iOS 10, asegúrese de utilizar buffer@5.0.5 o superior.
Typescript or VSCode users
Las declaraciones de tipo para Typecript están disponibles para la versión ^3.0.0
de la biblioteca.
1npm install @types/bitcoinjs-lib
Ahora puede utilizarlo bitcoinjs-lib
como una biblioteca compatible con mecanografiado.
1import { HDNode, Transaction } from 'bitcoinjs-lib'
Para VSCode (y otros editores), se recomienda a los usuarios que instalen las declaraciones de tipo, ya que Intellisense utiliza esa información para ayudarle a codificar (autocompletado, análisis estático).
Informe cualquier error relacionado con el mecanografiado en @dlebrecht DefinitelyTyped fork , envíe PR a DefinitelyTyped
Flow
Las definiciones para el verificador de tipos de flujo están disponibles en el repositorio de tipos de flujo.
Puede descargarlos directamente desde el repositorio o con la CLI de tipo flujo
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
Las definiciones están completas y actualizadas con la versión 2.2.0. Las definiciones son mantenidas por @runn1ng .
Ejemplos
Los siguientes ejemplos se implementan como pruebas de integración, deben ser muy fáciles de entender. De lo contrario, se agradecen las solicitudes de extracción. Algunos ejemplos interactúan (a través de HTTPS) con un proveedor externo de blockchain (3PBP).
- Generar una dirección aleatoria
- Generar una dirección a partir de un hash SHA256
- Importar una dirección vía WIF
- Genere una dirección multifirma P2SH 2 de 3
- Generar una dirección SegWit
- Generar una dirección SegWit P2SH
- Genere una dirección multifirma SegWit 3 de 4
- Genere una dirección multifirma SegWit 2 de 2 P2SH
- Admitir la recuperación de transacciones para una dirección (blockchain de terceros)
- Generar una dirección Testnet
- Generar una dirección Litecoin
- Cree una transacción 1 a 1
- Crear una transacción 2 a 2
- Crear (y transmitir a través de 3PBP) una transacción típica
- Cree (y transmita a través de 3PBP) una transacción con una salida OP_RETURN
- Cree (y transmita a través de 3PBP) una transacción con una entrada 2 de 4 P2SH (multifirma)
- Cree (y transmita a través de 3PBP) una transacción con una entrada SegWit P2SH(P2WPKH)
- Cree (y transmita a través de 3PBP) una transacción con una entrada SegWit 3 de 4 P2SH (P2WSH (multifirma))
- Importe un testnet xpriv BIP32 y exporte a WIF
- Exporte un BIP32 xpriv y luego impórtelo
- Exportar un xpub BIP32
- Crear un BIP32, bitcoin, cuenta 0, dirección externa
- Crear un BIP44, bitcoin, cuenta 0, dirección externa
- Cree un BIP49, bitcoin testnet, cuenta 0, dirección externa
- Utilice BIP39 para generar direcciones BIP32
- Crear (y transmitir a través de 3PBP) una transacción donde Alice pueda canjear el resultado después del vencimiento
- Cree (y transmita a través de 3PBP) una transacción donde Alice y Bob puedan canjear el resultado en cualquier momento.
- Crear (pero no transmitir a través de 3PBP) una transacción donde Alice intenta canjear antes de que expire
- Recuperar una clave privada de valores R duplicados
- Recuperar una clave privada principal BIP32 de la clave pública principal y una clave privada secundaria derivada no protegida
- Genere una dirección oculta de una sola clave
- Generar una dirección oculta de una sola clave (aleatoriamente)
- Recuperar destinatario principal.d, si se filtra una clave privada derivada (y se revela nonce)
- Generar una dirección oculta de doble clave
- Generar una dirección oculta de doble clave (aleatoriamente)
Si tiene un caso de uso que cree que podría incluirse aquí, ¡ solicítelo !
Proyectos que utilizan BitcoinJS
- Dirección de bits
- Blockchain.info
- sendero de bloques
- Cartera oscura
- Banco decentral
- Cartera Dogechain
- Cartera EI8HT
- Dirección verde
- ayudante
- Cartera Melis
- robocoin
- Cajero automático Skyhook
- Herramienta Coinbase Multifirma
Contribuyendo
Siempre aceptamos solicitudes de extracción, pero cumplimos con estándares específicos con respecto al estilo de codificación, desarrollo basado en pruebas y mensajes de confirmación.
Haga su mejor esfuerzo para cumplir con estos cuando contribuya a ahorrar en correcciones triviales.
Running the test suite
1
2npm test
npm run-script coverage
Bibliotecas complementarias
- BIP21 : una biblioteca de codificación de URL compatible con BIP21
- BIP38 : claves privadas protegidas con contraseña
- BIP39 : generación mnemotécnica para claves deterministas
- BIP32-Utils : un conjunto de utilidades para trabajar con BIP32
- BIP66 : decodificación estricta de firmas DER
- BIP68 : biblioteca de codificación de tiempo de bloqueo relativo
- BIP69 - Indexación lexicográfica de entradas y salidas de transacciones
- Base58 : codificación/decodificación Base58
- Comprobación Base58 : codificación/decodificación de comprobación Base58
- Bech32 : una biblioteca de codificación Bech32 compatible con BIP173
- coinselect : un módulo de selección de entradas de transacciones que optimiza las tarifas para bitcoinjs-lib.
- merkle-lib : una biblioteca centrada en el rendimiento para cálculos de raíces y árboles de Merkle.
- minimaldata - Un módulo para verificar la política de bitcoin: SCRIPT_VERIFY_MINIMALDATA