BitcoinJS (bitcoinjs-lib)
La libreria Bitcoin in puro JavaScript per node.js e browser. Si stima che sia utilizzata da oltre 15 milioni di utenti di portafogli ed è la spina dorsale di quasi tutti i portafogli web Bitcoin in produzione oggi.
Caratteristiche
- Clean: JavaScript puro, codice conciso, facile da leggere.
- Tested: Copertura > 90%, test di integrazione di terze parti.
- Careful: processo di approvazione da parte di due persone per richieste pull piccole e mirate.
- Compatible: Funziona su Node.js e tutti i browser moderni.
- Powerful: Supporto per funzionalità avanzate, come portafogli HD multi-firma.
- Secure: Forte generazione di numeri casuali, versioni firmate PGP, sviluppatori affidabili.
- Principled: Nessun supporto per browser con RNG schifoso (IE < 11)
- Standardized: Stile di codifica della community di Node, Browserify, stdlib e Buffers di Node.
- Fast: codice ottimizzato, utilizza array tipizzati anziché array di byte per le prestazioni.
- Adatto agli esperimenti: supporto Bitcoin Mainnet e Testnet.
- Predisposto per Altcoin: in grado di funzionare con criptovalute derivate da bitcoin (come Dogecoin).
Dovrei usarlo in produzione?
Se stai pensando di utilizzare il ramo master di questa libreria in produzione, interrompi . Master non è stabile; è il nostro ramo di sviluppo e solo le versioni contrassegnate possono essere classificate come stabili .
Installazione
1npm install bitcoinjs-lib
Impostare
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Se hai familiarità con l'utilizzo di browserify, ignoralo e procedi normalmente. Questi passaggi sono solo consultivi e potrebbero non essere adatti alla tua applicazione.
Si presuppone che Browserify sia installato per questi passaggi.
Per il tuo progetto, crea un index.js
file
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
}
Ora, per compilare per il browser:
1browserify index.js --standalone foo > app.js
Ora puoi inserire <script src="app.js" />
la tua pagina web, utilizzando foo.myFunction
per creare una nuova chiave privata Bitcoin.
NOTA : se si rende brutto il javascript, è necessario escludere che i seguenti nomi di variabili vengano alterati: BigInteger
, ECPair
, Point
. Ciò è dovuto alla digitazione nome-funzione-duck utilizzata in typeforce .
Esempio:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
NOTA : questa libreria tiene traccia delle funzionalità LTS di Node, se hai bisogno di ES5 rigoroso, utilizzalo --transform babelify
insieme al tuo browserify
passaggio (utilizzando un es2015
preset).
NOTA : se prevedi che questa libreria venga eseguita su un dispositivo iOS 10, assicurati di utilizzare buffer@5.0.5 o versione successiva.
Typescript or VSCode users
Le dichiarazioni di tipo per Typescript sono disponibili per la versione ^3.0.0
della libreria.
1npm install @types/bitcoinjs-lib
Ora puoi usarlo bitcoinjs-lib
come libreria compatibile con TypeScript.
1import { HDNode, Transaction } from 'bitcoinjs-lib'
Per VSCode (e altri editor), si consiglia agli utenti di installare le dichiarazioni di tipo, poiché Intellisense utilizza tali informazioni per facilitare la codifica (completamento automatico, analisi statica).
Segnala eventuali bug relativi al dattiloscritto al fork @dlebrecht SicuramenteTyped , invia PR a SicuramenteTyped
Flow
Le definizioni per Flow Typechecker sono disponibili nel repository tipizzato a flusso.
Puoi scaricarli direttamente dal repository o con la CLI di tipo flusso
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
Le definizioni sono complete e aggiornate con la versione 2.2.0. Le definizioni sono gestite da @runn1ng .
Esempi
Gli esempi seguenti sono implementati come test di integrazione, dovrebbero essere molto facili da capire. Altrimenti, le richieste pull sono apprezzate. Alcuni esempi interagiscono (tramite HTTPS) con un provider Blockchain di terze parti (3PBP).
- Genera un indirizzo casuale
- Genera un indirizzo da un hash SHA256
- Importa un indirizzo tramite WIF
- Genera un indirizzo multisig P2SH 2 su 3
- Genera un indirizzo SegWit
- Genera un indirizzo SegWit P2SH
- Genera un indirizzo multisig SegWit 3 di 4
- Genera un indirizzo multisig SegWit 2-of-2 P2SH
- Supporta il recupero delle transazioni per un indirizzo (blockchain di terze parti)
- Genera un indirizzo Testnet
- Genera un indirizzo Litecoin
- Crea una transazione 1 a 1
- Crea una transazione 2 a 2
- Crea (e trasmetti tramite 3PBP) una transazione tipica
- Crea (e trasmetti tramite 3PBP) una transazione con un output OP_RETURN
- Crea (e trasmetti tramite 3PBP) una transazione con un ingresso P2SH (multisig) 2 su 4
- Crea (e trasmetti tramite 3PBP) una transazione con un input SegWit P2SH(P2WPKH)
- Crea (e trasmetti tramite 3PBP) una transazione con un input SegWit 3-of-4 P2SH(P2WSH(multisig))
- Importa un xpriv testnet BIP32 ed esporta in WIF
- Esporta un xpriv BIP32, quindi importalo
- Esporta un xpub BIP32
- Crea un BIP32, bitcoin, account 0, indirizzo esterno
- Crea un BIP44, bitcoin, account 0, indirizzo esterno
- Crea un BIP49, bitcoin testnet, account 0, indirizzo esterno
- Utilizzare BIP39 per generare indirizzi BIP32
- Crea (e trasmetti tramite 3PBP) una transazione in cui Alice può riscattare l'output dopo la scadenza
- Crea (e trasmetti tramite 3PBP) una transazione in cui Alice e Bob possono riscattare l'output in qualsiasi momento
- Crea (ma non riesci a trasmettere tramite 3PBP) una transazione in cui Alice tenta di riscattare prima della scadenza
- Recupera una chiave privata da valori R duplicati
- Recupera una chiave privata principale BIP32 dalla chiave pubblica principale e una chiave privata secondaria derivata e non rinforzata
- Genera un indirizzo invisibile a chiave singola
- Genera un indirizzo invisibile a chiave singola (in modo casuale)
- Recupera il destinatario principale.d, se una chiave privata derivata viene divulgata (e nonce è stato rivelato)
- Genera un indirizzo invisibile a doppia chiave
- Genera un indirizzo invisibile a doppia chiave (in modo casuale)
Se disponi di un caso d'uso che ritieni possa essere elencato qui, chiedilo !
Progetti che utilizzano BitcoinJS
- Indirizzobit
- Blockchain.info
- Blocktrail
- Portafoglio scuro
- Banca Decentralizzata
- Portafoglio Dogechain
- Portafoglio EI8HT
- Indirizzoverde
- Aiutante
- Portafoglio Melis
- Robomoneta
- Bancomat Skyhook
- Strumento Multisig Coinbase
Contribuire
Accettiamo sempre richieste pull, ma aderiamo a standard specifici per quanto riguarda lo stile di codifica, lo sviluppo guidato dai test e i messaggi di commit.
Ti preghiamo di fare del tuo meglio per rispettarli quando contribuisci a risparmiare su correzioni banali.
Running the test suite
1
2npm test
npm run-script coverage
Biblioteche complementari
- BIP21 : una libreria di codifica URL compatibile con BIP21
- BIP38 : chiavi private protette da passphrase
- BIP39 - Generazione mnemonica per chiavi deterministiche
- BIP32-Utils - Un insieme di utilità per lavorare con BIP32
- BIP66 : decodifica rigorosa della firma DER
- BIP68 - Libreria di codifica del tempo di blocco relativo
- BIP69 - Indicizzazione lessicografica degli input e degli output delle transazioni
- Base58 - Codifica/decodifica Base58
- Controllo Base58 : verifica la codifica/decodifica Base58
- Bech32 - Una libreria di codifica Bech32 compatibile con BIP173
- coinselect - Un modulo di selezione degli input delle transazioni che ottimizza le tariffe per bitcoinjs-lib.
- merkle-lib - Una libreria attenta alle prestazioni per calcoli di radici e alberi di merkle.
- minimaldata - Un modulo per verificare la politica bitcoin: SCRIPT_VERIFY_MINIMALDATA