BitcoinJS (bitcoinjs-lib)
La bibliothèque Bitcoin JavaScript pure pour node.js et les navigateurs. On estime qu'elle est utilisée par plus de 15 millions d'utilisateurs de portefeuilles et constitue l'épine dorsale de presque tous les portefeuilles Web Bitcoin en production aujourd'hui.
Caractéristiques
- Clean: JavaScript pur, code concis, facile à lire.
- Tested: Couverture > 90%, tests d'intégration tiers.
- Careful : Processus d'approbation à deux personnes pour les petites demandes d'extraction ciblées.
- Compatible: Fonctionne sur Node.js et tous les navigateurs modernes.
- Powerful: Prise en charge de fonctionnalités avancées, telles que les portefeuilles multi-sig et HD.
- Secure: Forte génération de nombres aléatoires, versions signées PGP, développeurs de confiance.
- Principled: Pas de support pour les navigateurs avec du RNG merdique (IE < 11)
- Standardized: Style de codage de la communauté Node, Browserify, stdlib et Buffers de Node.
- Fast: Code optimisé, utilise des tableaux typés au lieu de tableaux d'octets pour les performances.
- Adapté aux expériences : prise en charge de Bitcoin Mainnet et Testnet.
- Prêt pour Altcoin : capable de fonctionner avec des crypto-monnaies dérivées du bitcoin (telles que Dogecoin).
Dois-je l’utiliser en production ?
Si vous envisagez d'utiliser la branche master de cette bibliothèque en production, arrêtez . Master n'est pas stable, c'est notre branche de développement, et seules les versions étiquetées peuvent être classées comme stables .
Installation
1npm install bitcoinjs-lib
Installation
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Si vous savez utiliser Browserify, ignorez ceci et procédez normalement. Ces étapes sont uniquement indicatives et peuvent ne pas convenir à votre application.
Browserify est supposé être installé pour ces étapes.
Pour votre projet, créez un index.js
fichier
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
}
Maintenant, pour compiler pour le navigateur :
1browserify index.js --standalone foo > app.js
Vous pouvez maintenant insérer <script src="app.js" />
votre page Web en utilisant foo.myFunction
pour créer une nouvelle clé privée Bitcoin.
REMARQUE : si vous laidez le javascript, vous devez exclure les noms de variables suivants d'être mutilés : BigInteger
, ECPair
, Point
. Cela est dû au nom de fonction-duck-typing utilisé dans typeforce .
Exemple:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
REMARQUE : Cette bibliothèque suit les fonctionnalités de Node LTS, si vous avez besoin d'ES5 strict, utilisez --transform babelify
-la conjointement avec votre browserify
étape (à l'aide d'un es2015
préréglage).
REMARQUE : Si vous prévoyez que cette bibliothèque s'exécute sur un appareil iOS 10, assurez-vous que vous utilisez buffer@5.0.5 ou version ultérieure.
Typescript or VSCode users
Les déclarations de type pour Typescript sont disponibles pour la version ^3.0.0
de la bibliothèque.
1npm install @types/bitcoinjs-lib
Vous pouvez désormais l'utiliser bitcoinjs-lib
comme bibliothèque compatible TypeScript.
1import { HDNode, Transaction } from 'bitcoinjs-lib'
Pour VSCode (et d'autres éditeurs), il est conseillé aux utilisateurs d'installer les déclarations de type, car Intellisense utilise ces informations pour vous aider à coder (auto-complétion, analyse statique).
Signalez tout bug lié à la dactylographie sur @dlebrecht DefinitelyTyped fork , soumettez les PR à DefinitelyTyped
Flow
Les définitions pour Flow typechecker sont disponibles dans le référentiel typé flow.
Vous pouvez soit les télécharger directement depuis le dépôt, soit avec la CLI typée 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 définitions sont complètes et à jour avec la version 2.2.0. Les définitions sont maintenues par @runn1ng .
Exemples
Les exemples ci-dessous sont implémentés en tant que tests d'intégration, ils doivent être très faciles à comprendre. Sinon, les demandes d'extraction sont appréciées. Certains exemples interagissent (via HTTPS) avec un fournisseur de blockchain tiers (3PBP).
- Générer une adresse aléatoire
- Générer une adresse à partir d'un hachage SHA256
- Importer une adresse via WIF
- Générer une adresse multisig P2SH 2 sur 3
- Générer une adresse SegWit
- Générer une adresse SegWit P2SH
- Générer une adresse multisig SegWit 3 sur 4
- Générer une adresse multisig SegWit 2 sur 2 P2SH
- Prise en charge de la récupération des transactions pour une adresse (blockchain tiers)
- Générer une adresse Testnet
- Générer une adresse Litecoin
- Créer une transaction 1-to-1
- Créer une transaction 2 à 2
- Créer (et diffuser via 3PBP) une Transaction type
- Créer (et diffuser via 3PBP) une Transaction avec une sortie OP_RETURN
- Créez (et diffusez via 3PBP) une transaction avec une entrée P2SH (multisig) 2 sur 4
- Créer (et diffuser via 3PBP) une transaction avec une entrée SegWit P2SH (P2WPKH)
- Créez (et diffusez via 3PBP) une transaction avec une entrée SegWit 3-of-4 P2SH (P2WSH (multisig))
- Importer un testnet BIP32 xpriv et exporter vers WIF
- Exportez un xpriv BIP32, puis importez-le
- Exporter un xpub BIP32
- Créer un BIP32, bitcoin, compte 0, adresse externe
- Créer un BIP44, bitcoin, compte 0, adresse externe
- Créer un BIP49, Bitcoin testnet, compte 0, adresse externe
- Utilisez BIP39 pour générer des adresses BIP32
- Créer (et diffuser via 3PBP) une transaction où Alice peut racheter la sortie après l'expiration
- Créez (et diffusez via 3PBP) une transaction où Alice et Bob peuvent échanger la sortie à tout moment
- Créez (mais ne parvenez pas à diffuser via 3PBP) une transaction où Alice tente de racheter avant l'expiration
- Récupérer une clé privée à partir de valeurs R en double
- Récupérer une clé privée parent BIP32 à partir de la clé publique parent et une clé privée enfant dérivée et non renforcée
- Générer une adresse furtive à clé unique
- Générer une adresse furtive à clé unique (au hasard)
- Récupérer le destinataire parent.d, si une clé privée dérivée est divulguée (et qu'elle n'a jamais été révélée)
- Générer une adresse furtive à double clé
- Générer une adresse furtive à double clé (au hasard)
Si vous avez un cas d’utilisation qui, selon vous, pourrait être répertorié ici, n’hésitez pas à le demander !
Projets utilisant BitcoinJS
- AdresseBit
- Blockchain.info
- Piste de blocage
- Portefeuille sombre
- Banque Décentralisée
- Portefeuille Dogechain
- Portefeuille EI8HT
- Adresse verte
- Bit d'assistance
- Portefeuille Mélis
- Robocoin
- Distributeur automatique Skyhook
- Outil Coinbase Multisig
Contribuant
Nous acceptons toujours les demandes d'extraction, mais nous adhérons à des normes spécifiques en ce qui concerne le style de codage, le développement piloté par les tests et les messages de validation.
Veuillez faire de votre mieux pour les respecter lorsque vous contribuez afin d'économiser sur des corrections triviales.
Running the test suite
1
2npm test
npm run-script coverage
Bibliothèques complémentaires
- BIP21 - Une bibliothèque d'encodage d'URL compatible BIP21
- BIP38 – Clés privées protégées par mot de passe
- BIP39 - Génération mnémonique pour clés déterministes
- BIP32-Utils - Un ensemble d'utilitaires pour travailler avec BIP32
- BIP66 - Décodage strict de la signature DER
- BIP68 - Bibliothèque de codage à temps de verrouillage relatif
- BIP69 - Indexation lexicographique des entrées et sorties de transactions
- Base58 - Encodage/décodage Base58
- Base58 Check - Encodage/décodage de vérification Base58
- Bech32 - Une bibliothèque d'encodage Bech32 conforme à BIP173
- coinselect - Un module de sélection d'entrée de transaction optimisant les frais pour bitcoinjs-lib.
- merkle-lib - Une bibliothèque soucieuse des performances pour les calculs de racines et d'arbres Merkle.
- minimaldata - Un module pour vérifier la politique Bitcoin : SCRIPT_VERIFY_MINIMALDATA