BitcoinJS (bitcoinjs-lib)
A biblioteca de Bitcoin de JavaScript puro para node.js e navegadores. Estímase que está en uso por máis de 15 millóns de usuarios de carteiras e é a columna vertebral de case todas as carteiras web de Bitcoin en produción na actualidade.
características
- Clean: JavaScript puro, código conciso, fácil de ler.
- Tested: Cobertura > 90 %, probas de integración de terceiros.
- Careful: proceso de aprobación de dúas persoas para solicitudes de extracción pequenas e enfocadas.
- Compatible: Funciona en Node.js e todos os navegadores modernos.
- Powerful: Compatibilidade con funcións avanzadas, como carteiras multisig HD.
- Secure: xeración de números aleatorios fortes, versións asinadas por PGP, desenvolvedores de confianza.
- Principled: Non hai soporte para navegadores con crap RNG (IE < 11)
- Standardized: Estilo de codificación da comunidade de nodos, Browserify, stdlib e Buffers de Node.
- Fast: Código optimizado, usa matrices escritas en lugar de matrices de bytes para o rendemento.
- Adecuado para experimentos: soporte de Bitcoin Mainnet e Testnet.
- Listo para Altcoin: capaz de traballar con criptomoedas derivadas de bitcoins (como Dogecoin).
Debo usar isto na produción?
Se estás pensando en usar a rama mestra desta biblioteca na produción, deixa de . Master non é estable, é a nosa rama de desenvolvemento e só as versións etiquetadas poden clasificarse como estables .
Instalación
1npm install bitcoinjs-lib
Montar
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Se estás familiarizado con como usar Browserify, ignórao e continúa normalmente. Estes pasos son só orientativos e poden non ser adecuados para a túa aplicación.
Suponse que Browserify está instalado para estes pasos.
Para o teu proxecto, crea un index.js
ficheiro
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
}
Agora, para compilar para o navegador:
1browserify index.js --standalone foo > app.js
Agora podes poñer <script src="app.js" />
na túa páxina web, usando foo.myFunction
para crear unha nova clave privada de Bitcoin.
NOTA : Se feíste o Javascript, debes excluír os seguintes nomes de variables de ser alterados: BigInteger
, ECPair
, Point
.Isto é debido á función-name-duck-typing usada en typeforce .
Exemplo:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
NOTA : Esta biblioteca rastrexa as funcións de Node LTS, se necesitas un ES5 estrito, úsao --transform babelify
xunto co teu browserify
paso (usando un es2015
predefinido).
NOTA : Se esperas que esta biblioteca se execute nun dispositivo iOS 10, asegúrate de estar usando buffer@5.0.5 ou superior.
Typescript or VSCode users
As declaracións de tipo para Typescript están dispoñibles para a versión ^3.0.0
da biblioteca.
1npm install @types/bitcoinjs-lib
Agora podes usalo bitcoinjs-lib
como biblioteca compatible con mecanografía.
1import { HDNode, Transaction } from 'bitcoinjs-lib'
Para VSCode (e outros editores), recoméndase aos usuarios que instalen as declaracións de tipo, xa que Intellisense usa esa información para axudarche a codificar (completado automático, análise estática).
Informe calquera erro relacionado con mecanografía en @dlebrecht DefinitelyTyped fork , envíe PR a DefinitelyTyped
Flow
As definicións para o comprobador de tipos de fluxo están dispoñibles no repositorio de tipos de fluxo.
Podes descargalos directamente desde o repositorio ou coa CLI de tipo fluxo
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
As definicións están completas e están actualizadas coa versión 2.2.0. As definicións son mantidas por @runn1ng .
Exemplos
Os exemplos seguintes impléntanse como probas de integración, deberían ser moi fáciles de entender. En caso contrario, apreciaranse as solicitudes de extracción. Algúns exemplos interactúan (a través de HTTPS) cun provedor de cadea de bloques de terceiros (3PBP).
- Xera un enderezo aleatorio
- Xera un enderezo a partir dun hash SHA256
- Importar un enderezo mediante WIF
- Xera un enderezo multisig P2SH 2 de 3
- Xera un enderezo SegWit
- Xera un enderezo SegWit P2SH
- Xera un enderezo multisig SegWit 3 de 4
- Xera un enderezo multisig SegWit 2-of-2 P2SH
- Apoiar a recuperación de transaccións para un enderezo (chain de bloques de terceiros)
- Xera un enderezo de Testnet
- Xera un enderezo de Litecoin
- Crea unha transacción 1 a 1
- Crea unha transacción 2 a 2
- Crea (e transmite a través de 3PBP) unha transacción típica
- Crea (e transmite a través de 3PBP) unha transacción cunha saída OP_RETURN
- Crea (e transmite a través de 3PBP) unha transacción cunha entrada P2SH (multisign) 2 de 4
- Crea (e transmite a través de 3PBP) unha transacción cunha entrada SegWit P2SH(P2WPKH)
- Crea (e transmite a través de 3PBP) unha transacción cunha entrada SegWit 3-of-4 P2SH(P2WSH(multisig))
- Importa un testnet xpriv BIP32 e exporta a WIF
- Exporte un BIP32 xpriv e, a continuación, impórteo
- Exportar un xpub BIP32
- Crea un BIP32, bitcoin, conta 0, enderezo externo
- Crea un BIP44, bitcoin, conta 0, enderezo externo
- Crea un BIP49, bitcoin testnet, conta 0, enderezo externo
- Use BIP39 para xerar enderezos BIP32
- Crea (e transmite a través de 3PBP) unha transacción na que Alice pode canxear a saída despois da caducidade
- Crea (e transmite a través de 3PBP) unha transacción na que Alice e Bob poden trocar a saída en calquera momento
- Crea (pero non pode transmitir a través de 3PBP) unha transacción na que Alice intenta canxear antes do vencemento
- Recuperar unha clave privada de valores R duplicados
- Recupere unha clave privada principal BIP32 da clave pública principal e unha clave privada secundaria derivada non reforzada
- Xera un enderezo furtivo dunha soa clave
- Xera un enderezo furtivo dunha soa clave (aleatoriamente)
- Recuperar o destinatario principal.d, se se filtra unha clave privada derivada (e non se revelou ningunha)
- Xera un enderezo furtivo de chave dual
- Xera un enderezo furtivo de chave dual (aleatoriamente)
Se tes un caso de uso que cres que podería enumerarse aquí, ¡ pregúntao !
Proxectos que utilizan BitcoinJS
- BitAddress
- Blockchain.info
- Blocktrail
- Carteira escura
- Banco Descentralizado
- Carteira Dogechain
- Carteira EI8HT
- Enderezo Verde
- Helperbit
- Carteira Melis
- Robocoin
- ATM Skyhook
- Ferramenta Coinbase Multisig
Contribuíndo
Sempre aceptamos solicitudes de extracción, pero cumprimos estándares específicos no que respecta ao estilo de codificación, o desenvolvemento impulsado por probas e as mensaxes de confirmación.
Faga todo o posible por cumprir con estes cando contribúa a aforrar en correccións triviais.
Running the test suite
1
2npm test
npm run-script coverage
Bibliotecas complementarias
- BIP21 : unha biblioteca de codificación de URL compatible con BIP21
- BIP38 - Chaves privadas protexidas con contrasinal
- BIP39 - Xeración mnemotécnica para claves deterministas
- BIP32-Utils - Un conxunto de utilidades para traballar con BIP32
- BIP66 - Decodificación de sinaturas DER estrita
- BIP68 - Biblioteca de codificación de tempo de bloqueo relativo
- BIP69 - Indización lexicográfica de entradas e saídas de transaccións
- Base58 - Codificación/decodificación Base58
- Base58 Check - Codificación/decodificación Base58
- Bech32 : unha biblioteca de codificación Bech32 compatible con BIP173
- coinselect - Un módulo de selección de entrada de transaccións optimizando tarifas para bitcoinjs-lib.
- merkle-lib - Unha biblioteca consciente do rendemento para cálculos de raíz e árbore de merkle.
- minimaldata - Un módulo para comprobar a política de bitcoins: SCRIPT_VERIFY_MINIMALDATA