BitcoinJS (bitcoinjs-lib)
La biblioteca de Bitcoin de JavaScript pura per a node.js i navegadors. Es calcula que l'utilitzen més de 15 milions d'usuaris de carteres i és la columna vertebral de gairebé totes les carteres web de Bitcoin en producció actual.
Característiques
- Clean: JavaScript pur, codi concís, fàcil de llegir.
- Tested: Cobertura > 90%, proves d'integració de tercers.
- Careful: procés d'aprovació de dues persones per a sol·licituds d'extracció petites i enfocades.
- Compatible: Funciona amb Node.js i tots els navegadors moderns.
- Powerful: Suport per a funcions avançades, com ara carteres multi-sig, HD Wallets.
- Secure: generació de números aleatoris forts, versions signades PGP, desenvolupadors de confiança.
- Principled: No hi ha suport per a navegadors amb crap RNG (IE < 11)
- Standardized: Estil de codificació de la comunitat de nodes, Browserify, stdlib i Buffers de Node.
- Fast: Codi optimitzat, utilitza matrius escrites en lloc de matrius de bytes per al rendiment.
- Adequat per a experiments: suport de Bitcoin Mainnet i Testnet.
- Altcoin llest: capaç de treballar amb criptomonedes derivades de bitcoins (com ara Dogecoin).
Hauria d'utilitzar això en producció?
Si esteu pensant a utilitzar la branca mestra d'aquesta biblioteca en producció, atureu . Master no és estable, és la nostra branca de desenvolupament i només les versions etiquetades es poden classificar com a estables .
Instal·lació
1npm install bitcoinjs-lib
Configuració
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Si esteu familiaritzat amb com utilitzar browserify, ignoreu-ho i procediu amb normalitat. Aquests passos són només d'assessorament i poden no ser adequats per a la vostra aplicació.
Se suposa que Browserify està instal·lat per a aquests passos.
Per al vostre projecte, creeu un index.js
fitxer
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
}
Ara, per compilar per al navegador:
1browserify index.js --standalone foo > app.js
Ara podeu posar <script src="app.js" />
a la vostra pàgina web, fent servir foo.myFunction
per crear una nova clau privada de Bitcoin.
NOTA : Si engresqueu el javascript, heu d'excloure els noms de variables següents de ser alterats: BigInteger
, ECPair
, Point
. Això es deu a la funció-nom-ànec-escriptura que s'utilitza a typeforce .
Exemple:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
NOTA : Aquesta biblioteca fa un seguiment de les funcions de Node LTS, si necessiteu un ES5 estricte, utilitzeu-lo --transform babelify
juntament amb el vostre browserify
pas (utilitzant un es2015
valor predefinit).
NOTA : si espereu que aquesta biblioteca s'executi en un dispositiu iOS 10, assegureu-vos que feu servir buffer@5.0.5 o superior.
Typescript or VSCode users
Les declaracions de tipus per a Typescript estan disponibles per a la versió ^3.0.0
de la biblioteca.
1npm install @types/bitcoinjs-lib
Ara podeu utilitzar bitcoinjs-lib
-lo com a biblioteca compatible amb mecanografia.
1import { HDNode, Transaction } from 'bitcoinjs-lib'
Per a VSCode (i altres editors), es recomana als usuaris que instal·lin les declaracions de tipus, ja que Intellisense utilitza aquesta informació per ajudar-vos a codificar (compleció automàtica, anàlisi estàtica).
Informa de qualsevol error relacionat amb mecanografia a @dlebrecht DefinitelyTyped fork , envia PR a DefinitelyTyped
Flow
Les definicions del verificador de tipus de flux estan disponibles al repositori de tipus de flux.
Podeu descarregar-los directament des del repositori o amb la CLI de tipus flux
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
Les definicions estan completes i actualitzades amb la versió 2.2.0 Les definicions les manté @runn1ng .
Exemples
Els exemples següents s'implementen com a proves d'integració, haurien de ser molt fàcils d'entendre. En cas contrari, s'agraeixen les sol·licituds d'extracció. Alguns exemples interactuen (mitjançant HTTPS) amb un proveïdor de cadena de blocs de tercers (3PBP).
- Genera una adreça aleatòria
- Genereu una adreça a partir d'un hash SHA256
- Importa una adreça mitjançant WIF
- Genereu una adreça multisigna P2SH 2 de 3
- Genereu una adreça SegWit
- Genereu una adreça SegWit P2SH
- Genereu una adreça multisigna SegWit 3 de 4
- Genereu una adreça multisig SegWit 2-of-2 P2SH
- Donar suport a la recuperació de transaccions per a una adreça (bloqueig de tercers)
- Genereu una adreça de Testnet
- Genereu una adreça de Litecoin
- Creeu una transacció 1 a 1
- Creeu una transacció de 2 a 2
- Creeu (i difoneu a través de 3PBP) una transacció típica
- Creeu (i difoneu mitjançant 3PBP) una transacció amb una sortida OP_RETURN
- Crear (i emetre a través de 3PBP) una transacció amb una entrada P2SH (multisig) de 2 de 4
- Crear (i emetre mitjançant 3PBP) una transacció amb una entrada SegWit P2SH(P2WPKH)
- Crear (i emetre a través de 3PBP) una transacció amb una entrada SegWit 3-of-4 P2SH(P2WSH(multisig))
- Importeu un testnet xpriv BIP32 i exporteu-lo a WIF
- Exporteu un xpriv BIP32 i, a continuació, importeu-lo
- Exporta un xpub BIP32
- Creeu un BIP32, bitcoin, compte 0, adreça externa
- Creeu un BIP44, bitcoin, compte 0, adreça externa
- Creeu un BIP49, bitcoin testnet, compte 0, adreça externa
- Utilitzeu BIP39 per generar adreces BIP32
- Creeu (i difoneu a través de 3PBP) una transacció on l'Alice pugui bescanviar la sortida després del venciment
- Crea (i emet a través de 3PBP) una transacció on Alice i Bob poden bescanviar la sortida en qualsevol moment
- Creeu (però no pugueu emetre a través de 3PBP) una transacció on Alice intenta bescanviar abans del venciment
- Recupereu una clau privada dels valors R duplicats
- Recupereu una clau privada principal BIP32 de la clau pública principal i una clau privada secundaria derivada i no endurida
- Genereu una adreça furtiva d'una sola clau
- Genereu una adreça furtiva d'una sola clau (de manera aleatòria)
- Recupereu el destinatari principal.d, si es filtra una clau privada derivada (i no s'ha revelat cap)
- Genereu una adreça secreta de doble clau
- Genereu una adreça secreta de doble clau (atzar)
Si teniu un cas d'ús que creieu que es podria enumerar aquí, demaneu-lo !
Projectes que utilitzen BitcoinJS
- BitAddress
- Blockchain.info
- Blocktrail
- Cartera fosca
- Banc Descentral
- Cartera Dogechain
- Cartera EI8HT
- Adreça verda
- Helperbit
- Cartera Melis
- Robocoin
- Caixer automàtic Skyhook
- Eina Coinbase Multisig
Contribuint
Sempre acceptem sol·licituds d'extracció, però ens adherim a estàndards específics pel que fa a l'estil de codificació, el desenvolupament basat en proves i els missatges de confirmació.
Si us plau, feu tot el possible per complir-los quan contribuïu a estalviar en correccions trivials.
Running the test suite
1
2npm test
npm run-script coverage
Biblioteques complementàries
- BIP21 : una biblioteca de codificació d'URL compatible amb BIP21
- BIP38 : claus privades protegides per frase de contrasenya
- BIP39 - Generació mnemotècnica de claus deterministes
- BIP32-Utils : un conjunt d'utilitats per treballar amb BIP32
- BIP66 - Descodificació estricta de signatura DER
- BIP68 - Biblioteca de codificació relativa en temps de bloqueig
- BIP69 - Indexació lexicogràfica d'entrades i sortides de transaccions
- Base58 - Codificació/descodificació Base58
- Base58 Check - Codificació/descodificació Base58
- Bech32 : una biblioteca de codificació Bech32 compatible amb BIP173
- coinselect : un mòdul de selecció d'entrada de transaccions que optimitza les tarifes per a bitcoinjs-lib.
- merkle-lib - Una biblioteca conscient del rendiment per als càlculs d'arrel i arbre de merkle.
- minimaldata : un mòdul per comprovar la política de bitcoins: SCRIPT_VERIFY_MINIMALDATA