BitcoinJS (bitcoinjs-lib)
Die reine JavaScript-Bitcoin-Bibliothek für node.js und Browser. Wird schätzungsweise von über 15 Millionen Wallet-Benutzern verwendet und ist das Rückgrat für fast alle Bitcoin-Web-Wallets, die heute in Produktion sind.
Merkmale
- Clean: Reines JavaScript, prägnanter Code, leicht zu lesen.
- Tested: Abdeckung > 90 %, Integrationstests von Drittanbietern.
- Careful: Zwei-Personen-Genehmigungsprozess für kleine, gezielte Pull-Anfragen.
- Compatible: Funktioniert auf Node.js und allen modernen Browsern.
- Powerful: Unterstützung für erweiterte Funktionen wie Multi-Sig- und HD-Wallets.
- Secure: Starke Zufallszahlengenerierung, PGP-signierte Veröffentlichungen, vertrauenswürdige Entwickler.
- Principled: Keine Unterstützung für Browser mit schlechtem RNG (IE < 11)
- Standardized: Node-Community-Codierungsstil, Browserify, Node's stdlib und Puffer.
- Fast: Optimierter Code, verwendet aus Leistungsgründen typisierte Arrays anstelle von Byte-Arrays.
- Experimentierfreundlich: Bitcoin Mainnet- und Testnet-Unterstützung.
- Altcoin-fähig: Kann mit von Bitcoin abgeleiteten Kryptowährungen (wie Dogecoin) arbeiten.
Soll ich das in der Produktion verwenden?
Wenn Sie darüber nachdenken, den Master-Zweig dieser Bibliothek in der Produktion zu verwenden, hören Sie auf . Master ist nicht stabil; es ist unser Entwicklungszweig und nur getaggte Releases können als stabil klassifiziert werden .
Installation
1npm install bitcoinjs-lib
Aufstellen
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Wenn Sie mit der Verwendung von browserify vertraut sind, ignorieren Sie dies und fahren Sie normal fort. Diese Schritte dienen nur zur Beratung und sind möglicherweise nicht für Ihre Anwendung geeignet.
Für diese Schritte wird davon ausgegangen, dass Browserify installiert ist.
Erstellen Sie für Ihr Projekt eine index.js
Datei
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
}
Nun zum Kompilieren für den Browser:
1browserify index.js --standalone foo > app.js
Sie können nun <script src="app.js" />
auf Ihrer Webseite foo.myFunction
einen neuen privaten Bitcoin-Schlüssel erstellen.
HINWEIS : Wenn Sie das Javascript verfälschen, müssen Sie die folgenden Variablennamen von der Verstümmelung ausschließen: BigInteger
, ECPair
, Point
. Dies liegt an der in typeforce verwendeten function-name-duck-typing .
Beispiel:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
HINWEIS : Diese Bibliothek verfolgt die Funktionen von Node LTS. Wenn Sie striktes ES5 benötigen, verwenden Sie es --transform babelify
in Verbindung mit Ihrem browserify
Schritt (unter Verwendung einer es2015
Voreinstellung).
HINWEIS : Wenn Sie erwarten, dass diese Bibliothek auf einem iOS 10-Gerät ausgeführt wird, stellen Sie sicher, dass Sie buffer@5.0.5 oder höher verwenden .
Typescript or VSCode users
Typdeklarationen für Typescript sind für die Version ^3.0.0
der Bibliothek verfügbar.
1npm install @types/bitcoinjs-lib
Sie können es jetzt bitcoinjs-lib
als TypeScript-kompatible Bibliothek verwenden.
1import { HDNode, Transaction } from 'bitcoinjs-lib'
Für VSCode (und andere Editoren) wird Benutzern empfohlen, die Typdeklarationen zu installieren, da Intellisense diese Informationen verwendet, um Ihnen beim Codieren zu helfen (automatische Vervollständigung, statische Analyse).
Melden Sie alle Typoskript-bezogenen Fehler unter @dlebrecht DefinitelyTyped fork und senden Sie PRs an DefinitelyTyped
Flow
Definitionen für die Flow-Typprüfung sind im Flow-Typ-Repository verfügbar.
Sie können sie entweder direkt aus dem Repo oder mit der flow-typisierten CLI herunterladen
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
Die Definitionen sind vollständig und auf dem neuesten Stand mit Version 2.2.0. Die Definitionen werden von @runn1ng gepflegt .
Beispiele
Die folgenden Beispiele sind als Integrationstests implementiert und sollten sehr einfach zu verstehen sein. Ansonsten sind Pull-Anfragen willkommen. Einige Beispiele interagieren (über HTTPS) mit einem Drittanbieter-Blockchain-Anbieter (3PBP).
- Generieren Sie eine zufällige Adresse
- Generieren Sie eine Adresse aus einem SHA256-Hash
- Importieren Sie eine Adresse über WIF
- Generieren Sie eine 2-aus-3-P2SH-Multisig-Adresse
- Generieren Sie eine SegWit-Adresse
- Generieren Sie eine SegWit P2SH-Adresse
- Generieren Sie eine SegWit 3-von-4-Multisig-Adresse
- Generieren Sie eine SegWit 2-of-2 P2SH-Multisig-Adresse
- Unterstützen Sie den Abruf von Transaktionen für eine Adresse (Drittanbieter-Blockchain)
- Generieren Sie eine Testnet-Adresse
- Generieren Sie eine Litecoin-Adresse
- Erstellen Sie eine 1-zu-1-Transaktion
- Erstellen Sie eine 2-zu-2-Transaktion
- Erstellen Sie eine typische Transaktion (und übertragen Sie sie über 3PBP).
- Erstellen Sie eine Transaktion mit einer OP_RETURN-Ausgabe (und senden Sie sie über 3PBP).
- Erstellen (und über 3PBP übertragen) Sie eine Transaktion mit einem 2-aus-4-P2SH-Eingang (Multisig).
- Erstellen (und über 3PBP übertragen) Sie eine Transaktion mit einem SegWit P2SH(P2WPKH)-Eingang
- Erstellen (und über 3PBP übertragen) Sie eine Transaktion mit einem SegWit 3-of-4 P2SH(P2WSH(multisig))-Eingang
- Importieren Sie ein BIP32-Testnetz xpriv und exportieren Sie es nach WIF
- Exportieren Sie ein BIP32 xpriv und importieren Sie es dann
- Exportieren Sie ein BIP32-xpub
- Erstellen Sie eine BIP32, Bitcoin, Konto 0, externe Adresse
- Erstellen Sie eine BIP44, Bitcoin, Konto 0, externe Adresse
- Erstellen Sie ein BIP49, Bitcoin-Testnetz, Konto 0, externe Adresse
- Verwenden Sie BIP39, um BIP32-Adressen zu generieren
- Erstellen Sie eine Transaktion (und senden Sie sie über 3PBP), bei der Alice die Ausgabe nach Ablauf einlösen kann
- Erstellen Sie eine Transaktion (und übertragen Sie sie über 3PBP), bei der Alice und Bob die Ausgabe jederzeit einlösen können
- Erstellen Sie eine Transaktion (aber senden Sie sie nicht über 3PBP), bei der Alice versucht, den Betrag vor Ablauf einzulösen
- Stellen Sie einen privaten Schlüssel aus doppelten R-Werten wieder her
- Stellen Sie einen übergeordneten privaten BIP32-Schlüssel aus dem öffentlichen übergeordneten Schlüssel und einen abgeleiteten, nicht gehärteten privaten untergeordneten Schlüssel wieder her
- Generieren Sie eine Single-Key-Stealth-Adresse
- Generieren Sie eine Single-Key-Stealth-Adresse (zufällig)
- Stellen Sie den übergeordneten Empfänger.d wieder her, wenn ein abgeleiteter privater Schlüssel durchgesickert ist (und Nonce offengelegt wurde).
- Generieren Sie eine Dual-Key-Stealth-Adresse
- Generieren Sie eine Dual-Key-Stealth-Adresse (zufällig)
Wenn Sie einen Anwendungsfall haben, der Ihrer Meinung nach hier aufgeführt werden könnte, fragen Sie bitte danach !
Projekte, die BitcoinJS nutzen
- BitAdresse
- Blockchain.info
- Blocktrail
- Dunkle Geldbörse
- DecentralBank
- Dogechain-Geldbörse
- EI8HT-Geldbörse
- Grüne Adresse
- Helferbit
- Melis-Geldbörse
- Robocoin
- Skyhook-Geldautomat
- Coinbase Multisig-Tool
Mitwirken
Wir akzeptieren jederzeit Pull-Anfragen, halten uns jedoch an bestimmte Standards in Bezug auf Codierungsstil, testgetriebene Entwicklung und Commit-Nachrichten.
Bitte bemühen Sie sich nach besten Kräften, diese bei Ihren Beiträgen einzuhalten, um triviale Korrekturen zu vermeiden.
Running the test suite
1
2npm test
npm run-script coverage
Ergänzende Bibliotheken
- BIP21 – Eine BIP21-kompatible URL-Kodierungsbibliothek
- BIP38 – Passphrase-geschützte private Schlüssel
- BIP39 – Mnemonische Generierung für deterministische Schlüssel
- BIP32-Utils – Eine Reihe von Dienstprogrammen für die Arbeit mit BIP32
- BIP66 – Strikte DER-Signaturdekodierung
- BIP68 – Relative Lock-Time-Codierungsbibliothek
- BIP69 – Lexikografische Indexierung von Transaktionseingaben und -ausgaben
- Base58 – Base58-Kodierung/Dekodierung
- Base58-Prüfung – Base58-Prüfung der Kodierung/Dekodierung
- Bech32 – Eine BIP173-kompatible Bech32-Kodierungsbibliothek
- Coinselect – Ein gebührenoptimierendes Modul zur Auswahl von Transaktionseingaben für bitcoinjs-lib.
- merkle-lib – Eine leistungsorientierte Bibliothek für Merkle-Wurzel- und Baumberechnungen.
- minimaldata – Ein Modul zur Überprüfung der Bitcoin-Richtlinie: SCRIPT_VERIFY_MINIMALDATA