BitcoinJS (bitcoinjs-lib)
La biblioteca de 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.
Caracteristicas
- 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 específicas.
- Compatible : funciona en Node.js y todos los navegadores modernos.
- Powerful : compatibilidad con funciones avanzadas, como carteras HD multi-sig.
- Secure : fuerte generación de números aleatorios, lanzamientos firmados por PGP, desarrolladores de confianza.
- Principled : No hay soporte para navegadores con RNG basura (IE <11)
- Standardized : estilo de codificación de la comunidad de nodo, Browserify, stdlib y búfer de Node.
- Fast : código optimizado, utiliza matrices escritas en lugar de matrices de bytes para el rendimiento.
- Compatible con Experiment-friendly : compatibilidad con Bitcoin Mainnet y Testnet.
- Altcoin-ready : Capaz de trabajar con criptomonedas derivadas de bitcoin (como Dogecoin).
¿Debería usar esto en producción?
Si está pensando en utilizar la rama maestra de esta biblioteca en producción, detenga .Master no es estable; es nuestra rama de desarrollo, y solo las versiones etiquetadas pueden clasificarse como estables .
Instalación
1npm install bitcoinjs-lib
Preparar
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Si está familiarizado con el uso de browserify, ignórelo y proceda con normalidad. Estos pasos son solo de orientación y pueden no ser adecuados para su aplicación.
Se asume que Browserify está instalado para estos pasos.
Para su proyecto, cree un archivo 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
}
Ahora, para compilar para el navegador:
1browserify index.js --standalone foo > app.js
Ahora puede poner <script src="app.js" />
en su página web, usando foo.myFunction
para crear una nueva clave privada de Bitcoin.
NOTA : Si uglifica el javascript, debe excluir los siguientes nombres de variables para que no se alteren: BigInteger
, ECPair
, Point
. Esto se debe a la función-nombre-pato-tipado que se usa en typeforce .
Ejemplo:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
NOTA : Esta biblioteca rastrea las características de Node LTS, si necesita un ES5 estricto, use --transform babelify
junto con su paso de browserify
(usando un es2015
preestablecido de es2015
).
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 TypeScript están disponibles para la versión ^3.0.0
de la biblioteca.
1npm install @types/bitcoinjs-lib
Ahora puede usar 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 usa esa información para ayudarlo 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 comprobador 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 de cadena de bloques de terceros (3PBP).
- Genera una dirección aleatoria
- Genera una dirección a partir de un hash SHA256
- Importar una dirección a través de WIF
- Genere una dirección multigrado P2SH de 2 de 3
- Genere una dirección SegWit
- Genere una dirección SegWit P2SH
- Genere una dirección multigrupo SegWit 3 de 4
- Genere una dirección multigrado SegWit 2-of-2 P2SH
- Apoyar la recuperación de transacciones para una dirección (blockchain de terceros)
- Genera una dirección de Testnet
- Genera una dirección de Litecoin
- Cree una transacción 1 a 1
- Cree una transacción 2 a 2
- Cree (y transmita 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 P2SH (multigrupo) 2 de 4
- 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-of-4 P2SH (P2WSH (multisig))
- Importe un testnet xpriv BIP32 y expórtelo a WIF
- Exporte un BIP32 xpriv, luego impórtelo
- Exportar un xpub BIP32
- Cree un BIP32, bitcoin, cuenta 0, dirección externa
- Cree un BIP44, bitcoin, cuenta 0, dirección externa
- Cree un BIP49, bitcoin testnet, cuenta 0, dirección externa
- Utilice BIP39 para generar direcciones BIP32
- Cree (y transmita a través de 3PBP) una transacción donde Alice puede canjear la salida después del vencimiento
- Cree (y transmita a través de 3PBP) una transacción en la que Alice y Bob puedan canjear la salida en cualquier momento
- Crear (pero no transmitir a través de 3PBP) una transacción en la que Alice intenta canjear antes del vencimiento
- Recuperar una clave privada de valores R duplicados
- Recupere una clave privada principal BIP32 de la clave pública principal y una clave privada secundaria derivada, no reforzada
- Genere una dirección sigilosa de una sola tecla
- Genere una dirección sigilosa de una sola tecla (aleatoriamente)
- Recuperar el destinatario principal.d, si se filtra una clave privada derivada (y se reveló nonce)
- Genere una dirección sigilosa de doble clave
- Genere una dirección sigilosa de doble clave (aleatoriamente)
Si tiene un caso de uso que cree que podría incluirse aquí, ¡ solicítelo !
Proyectos que utilizan BitcoinJS
- BitAddress
- Blockchain.info
- Blocktrail
- Cartera oscura
- DecentralBank
- Cartera Dogechain
- Cartera EI8HT
- GreenAddress
- Helperbit
- Cartera Melis
- Robocoin
- Cajero automático Skyhook
- Herramienta Coinbase Multisig
Contribuyendo
Siempre aceptamos solicitudes de extracción, pero nos adherimos a estándares específicos con respecto al estilo de codificación, el desarrollo impulsado por pruebas y los 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 por contraseña
- BIP39 - Generación nemotécnica para claves deterministas
- BIP32-Utils: un conjunto de utilidades para trabajar con BIP32
- BIP66 - Decodificación de firma DER estricta
- BIP68 -Biblioteca de codificación de tiempo de bloqueo relativo
- BIP69 - Indexación lexicográfica de entradas y salidas de transacciones
- Codificación / decodificación Base58 -Base58
- Comprobación de Base58 - Codificación / decodificación de comprobación de Base58
- Bech32 -A biblioteca de codificación Bech32 compatible con BIP173
- coinselect -Un módulo de selección de entrada de transacciones con optimización de tarifas para bitcoinjs-lib.
- merkle-lib -Una biblioteca consciente del rendimiento para cálculos de árbol y raíz de merkle.
- minimaldata -Un módulo para verificar la política de bitcoin: SCRIPT_VERIFY_MINIMALDATA