BitcoinJS (bitcoinjs-lib)
De pure JavaScript-Bitcoin-bibliotheek voor node.js en browsers. Wordt naar schatting door meer dan 15 miljoen portemonneegebruikers gebruikt en vormt de ruggengraat voor bijna alle Bitcoin-webportefeuilles die momenteel in productie zijn.
Functies
- Clean: Puur JavaScript, beknopte code, gemakkelijk te lezen.
- Tested: Dekking > 90%, integratietests van derden.
- Careful: Goedkeuringsproces voor twee personen voor kleine, gerichte pull-aanvragen.
- Compatible: Werkt op Node.js en alle moderne browsers.
- Powerful: Ondersteuning voor geavanceerde functies, zoals multi-sig, HD Wallets.
- Secure: Sterke generatie van willekeurige getallen, PGP-ondertekende releases, vertrouwde ontwikkelaars.
- Principled: Geen ondersteuning voor browsers met onzin RNG (IE < 11)
- Standardized: Node-communitycoderingsstijl, Browserify, Node's stdlib en Buffers.
- Fast: Geoptimaliseerde code, gebruikt getypte arrays in plaats van byte-arrays voor prestaties.
- Experimentvriendelijk: Bitcoin Mainnet- en Testnet-ondersteuning.
- Klaar voor Altcoin: Kan werken met van bitcoin afgeleide cryptocurrencies (zoals Dogecoin).
Moet ik dit in de productie gebruiken?
Als je erover denkt om de master branch van deze bibliotheek in productie te gebruiken, stop dan . Master is niet stabiel; het is onze ontwikkelingsbranch, en alleen getagde releases kunnen als stable worden geclassificeerd .
Installatie
1npm install bitcoinjs-lib
Opgericht
Node.js
1var bitcoin = require('bitcoinjs-lib')
Browser
Als u bekend bent met het gebruik van browserify, negeert u dit en gaat u normaal verder. Deze stappen zijn uitsluitend bedoeld als advies en zijn mogelijk niet geschikt voor uw toepassing.
Er wordt aangenomen dat Browserify voor deze stappen is geïnstalleerd.
Maak een index.js
bestand voor uw project
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
}
Nu, om te compileren voor de browser:
1browserify index.js --standalone foo > app.js
U kunt nu <script src="app.js" />
uw webpagina invoeren en foo.myFunction
een nieuwe Bitcoin-privésleutel maken.
OPMERKING : Als u het javascript lelijk maakt, moet u uitsluiten dat de volgende namen van variabelen worden verminkt: BigInteger
, ECPair
, Point
Dit komt door de functienaam-duck-typing die wordt gebruikt in typeforce .
Voorbeeld:
1uglifyjs ... --mangle reserved=['BigInteger','ECPair','Point']
OPMERKING : deze bibliotheek houdt de Node LTS-functies bij. Als je strikte ES5 nodig hebt, gebruik deze dan --transform babelify
in combinatie met je browserify
stap (met behulp van een es2015
preset).
OPMERKING : Als u verwacht dat deze bibliotheek op een iOS 10-apparaat draait, zorg er dan voor dat u buffer@5.0.5 of hoger gebruikt.
Typescript or VSCode users
Typedeclaraties voor Typescript zijn beschikbaar voor de versie ^3.0.0
van de bibliotheek.
1npm install @types/bitcoinjs-lib
U kunt de bibliotheek nu gebruiken bitcoinjs-lib
als een typescript-compatibele bibliotheek.
1import { HDNode, Transaction } from 'bitcoinjs-lib'
Voor VSCode (en andere editors) wordt gebruikers geadviseerd om de typedeclaraties te installeren, omdat Intellisense die informatie gebruikt om u te helpen coderen (automatisch aanvullen, statische analyse).
Rapporteer eventuele typoscriptgerelateerde bugs op de fork @dlebrecht AbsoluutTyped , dien PR's in bij AbsoluutTyped
Flow
Definities voor Flow typechecker zijn beschikbaar in de flow-getypeerde repository.
U kunt ze rechtstreeks downloaden vanuit de repository, of met de flow-getypeerde CLI
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
De definities zijn compleet en up-to-date met versie 2.2.0. De definities worden onderhouden door @runn1ng .
Voorbeelden
De onderstaande voorbeelden zijn geïmplementeerd als integratietests en moeten heel gemakkelijk te begrijpen zijn. Anders worden pull-verzoeken op prijs gesteld. Sommige voorbeelden communiceren (via HTTPS) met een externe Blockchain-provider (3PBP).
- Genereer een willekeurig adres
- Genereer een adres op basis van een SHA256-hash
- Importeer een adres via WIF
- Genereer een 2-van-3 P2SH multisig-adres
- Genereer een SegWit-adres
- Genereer een SegWit P2SH-adres
- Genereer een SegWit 3-van-4 multisig-adres
- Genereer een SegWit 2-of-2 P2SH multisig-adres
- Ondersteuning van het ophalen van transacties voor een adres (blockchain van derden)
- Genereer een Testnet-adres
- Genereer een Litecoin-adres
- Maak een 1-op-1-transactie aan
- Creëer een 2-op-2-transactie
- Creëer (en zend via 3PBP) een typische transactie uit
- Creëer (en zend via 3PBP) een transactie uit met een OP_RETURN-uitvoer
- Creëer (en zend uit via 3PBP) een transactie met een 2-of-4 P2SH(multisig)-invoer
- Creëer (en zend via 3PBP) een transactie uit met een SegWit P2SH(P2WPKH)-ingang
- Creëer (en zend uit via 3PBP) een transactie met een SegWit 3-of-4 P2SH(P2WSH(multisig))-ingang
- Importeer een BIP32-testnet xpriv en exporteer naar WIF
- Exporteer een BIP32 xpriv en importeer deze vervolgens
- Exporteer een BIP32 xpub
- Maak een BIP32, bitcoin, account 0, extern adres aan
- Maak een BIP44, bitcoin, account 0, extern adres aan
- Maak een BIP49, bitcoin-testnet, account 0, extern adres aan
- Gebruik BIP39 om BIP32-adressen te genereren
- Creëer (en zend via 3PBP) een transactie uit waarbij Alice de output na de vervaldatum kan verzilveren
- Creëer (en zend via 3PBP) een transactie uit waarbij Alice en Bob de output op elk moment kunnen verzilveren
- Creëer (maar verzend niet via 3PBP) een transactie waarbij Alice vóór de vervaldatum probeert in te wisselen
- Herstel een privésleutel uit dubbele R-waarden
- Herstel een privésleutel van de bovenliggende BIP32-sleutel uit de openbare sleutel van de bovenliggende entiteit, en een afgeleide, niet-geharde onderliggende privésleutel
- Genereer een stealth-adres met één sleutel
- Genereer een stealth-adres met één sleutel (willekeurig)
- Herstel ouderontvanger.d, als een afgeleide privésleutel is gelekt (en nonce is onthuld)
- Genereer een stealth-adres met dubbele sleutel
- Genereer een stealth-adres met dubbele sleutel (willekeurig)
Als u een gebruiksscenario heeft waarvan u denkt dat het hier vermeld zou kunnen worden, vraag er dan naar !
Projecten die BitcoinJS gebruiken
- BitAdres
- Blockchain.info
- Blokspoor
- Donkere portemonnee
- Decentrale Bank
- Dogechain-portemonnee
- EI8HT-portemonnee
- GroenAdres
- Helperbit
- Melis-portemonnee
- Robocoin
- Skyhook-geldautomaat
- Coinbase Multisig-tool
Bijdragende
We accepteren altijd pull-verzoeken, maar we houden ons wel aan specifieke normen met betrekking tot codeerstijl, testgestuurde ontwikkeling en commit-berichten.
Doe uw best om u hieraan te houden wanneer u bijdraagt, om te besparen op triviale correcties.
Running the test suite
1
2npm test
npm run-script coverage
Als aanvulling op bibliotheken
- BIP21 - Een BIP21-compatibele URL-coderingsbibliotheek
- BIP38 - Met een wachtwoord beveiligde privésleutels
- BIP39 - Mnemonische generatie voor deterministische sleutels
- BIP32-Utils - Een reeks hulpprogramma's voor het werken met BIP32
- BIP66 - Strenge DER-handtekeningdecodering
- BIP68 - Relatieve coderingsbibliotheek met vergrendeling
- BIP69 - Lexicografische indexering van transactie-invoer en -uitvoer
- Base58 - Base58-codering/decodering
- Base58 Check - Base58 controleert codering/decodering
- Bech32 - Een BIP173-compatibele Bech32-coderingsbibliotheek
- Coinselect - Een vergoedingsoptimaliserende transactie-invoerselectiemodule voor bitcoinjs-lib.
- merkle-lib - Een prestatiebewuste bibliotheek voor merkle-wortel- en boomberekeningen.
- minimaldata - Een module om het bitcoinbeleid te controleren: SCRIPT_VERIFY_MINIMALDATA