Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

tokenpayjs-lib

bitcoinjs9MIT4.0.0

Client-side TokenPay JavaScript library

tokenpayjs, tokenpay, browserify, javascript, bitcoinjs

readme

BitcoinJS (bitcoinjs-lib)

Build Status NPM

js-standard-style

A javascript Bitcoin library for node.js and browsers.

Released under the terms of the MIT LICENSE.

Should I use this in production?

If you are thinking of using the master branch of this library in production, stop. Master is not stable; it is our development branch, and only tagged releases may be classified as stable.

Can I trust this code?

Don't trust. Verify.

We recommend every user of this library and the bitcoinjs ecosystem audit and verify any underlying code for its validity and suitability.

Mistakes and bugs happen, but with your help in resolving and reporting issues, together we can produce open source software that is:

  • Easy to audit and verify,
  • Tested, with test coverage >95%,
  • Advanced and feature rich,
  • Standardized, using standard and Node Buffer's throughout, and
  • Friendly, with a strong and helpful community, ready to answer questions.

Documentation

Presently, we do not have any formal documentation other than our examples, please ask for help if our examples aren't enough to guide you.

Installation

npm install bitcoinjs-lib

Typically we support the Node Maintenance LTS version. If in doubt, see the .travis.yml for what versions are used by our continuous integration tests.

WARNING: We presently don't provide any tooling to verify that the release on npm matches GitHub. As such, you should verify anything downloaded by npm against your own verified copy.

Usage

Browser

The recommended method of using bitcoinjs-lib in your browser is through Browserify. If you're familiar with how to use browserify, ignore this and carry on, otherwise, it is recommended to read the tutorial at http://browserify.org/.

NOTE: We use Node Maintenance LTS features, if you need strict ES5, use --transform babelify in conjunction with your browserify step (using an es2015 preset).

NOTE: If you expect this library to run on an iOS 10 device, ensure that you are using buffer@5.0.5 or greater.

Typescript or VSCode users

Type declarations for Typescript are available for version ^3.0.0 of the library.

npm install @types/bitcoinjs-lib

For VSCode (and other editors), it is advised to install the type declarations, as Intellisense uses that information to help you code (autocompletion, static analysis).

WARNING: These Typescript definitions are not maintained by the maintainers of this repository, and are instead maintained at DefinitelyTyped. Please report any issues or problems there.

Flow

Flow-type definitions for are available in the flow-typed repository for version ^2.0.0 of the library.

You can download them directly, or using the flow-typed CLI:

npm install -g flow-typed
flow-typed install -f 0.27 bitcoinjs-lib@2.2.0

These definitions are maintained by @runn1ng.

Examples

The below examples are implemented as integration tests, they should be very easy to understand. Otherwise, pull requests are appreciated. Some examples interact (via HTTPS) with a 3rd Party Blockchain Provider (3PBP).

If you have a use case that you feel could be listed here, please ask for it!

Contributing

See CONTRIBUTING.md.

Running the test suite

npm test
npm run-script coverage

Complementing Libraries

  • BIP21 - A BIP21 compatible URL encoding library
  • BIP38 - Passphrase-protected private keys
  • BIP39 - Mnemonic generation for deterministic keys
  • BIP32-Utils - A set of utilities for working with BIP32
  • BIP66 - Strict DER signature decoding
  • BIP68 - Relative lock-time encoding library
  • BIP69 - Lexicographical Indexing of Transaction Inputs and Outputs
  • Base58 - Base58 encoding/decoding
  • Base58 Check - Base58 check encoding/decoding
  • Bech32 - A BIP173 compliant Bech32 encoding library
  • coinselect - A fee-optimizing, transaction input selection module for bitcoinjs-lib.
  • merkle-lib - A performance conscious library for merkle root and tree calculations.
  • minimaldata - A module to check bitcoin policy: SCRIPT_VERIFY_MINIMALDATA

Alternatives

LICENSE MIT

changelog

4.0.0

added

  • Added bip32 dependency as a primary export (#1073)
  • Added ECPair.fromPrivateKey (#1070)
  • Added payments export, with support for p2pkh, p2pk, p2ms, p2sh, p2wpkh, p2wsh and embed payment types (#1096, #1119)
  • Added script.signature.encode/decode for script signatures (#459)

changed

  • ECPair.prototype.sign now returns a 64-byte signature Buffer, not an ECSignature object (#1084)
  • ECPair (and all ECDSA code) now uses tiny-secp256k1, which uses the libsecp256k1 library (#1070)
  • TransactionBuilder internal variables are now __ prefixed to discourage public usage (#1038)
  • TransactionBuilder now defaults to version 2 transaction versions (#1036)
  • script.decompile now returns Buffer or null, if decompilation failed (#1039)

fixed

  • Fixed TransactionBuilder rejecting uncompressed public keys to comply with BIP143 (#987)

removed

  • Removed Node 4/5 LTS support (#1080)
  • Removed ECPair.fromPublicKeyBuffer, use ECPair.fromPublicKey (#1070)
  • Removed ECPair.prototype.getAddress, use payments.p2pkh instead (#1085)
  • Removed ECPair.prototype.getPrivateKey, use ECPair.prototype.privateKey property (#1070)
  • Removed ECPair.prototype.getPublicKey, use ECPair.prototype.publicKey property (#1070)
  • Removed ECPair.prototype.getNetwork, use ECPair.prototype.network property (#1070)
  • Removed ECSignature, use script.signature.encode/decode instead (#459)
  • Removed HDNode, use bip32 export instead (#1073)
  • Removed bufferutils (#1035)
  • Removed networks.litecoin, BYO non-Bitcoin networks instead (#1095)
  • Removed script.isCanonicalSignature, use script.isCanonicalScriptSignature instead (#1094)
  • Removed script.*.input/output/check functions (templates) (previously added in #681, #682) (#1119)
  • Removed dependency bigi, uses bn.js internally now (via tiny-secp256k1) (#1070, #1112)
  • Removed public access to ECPair constructor, use exported functions ECPair.fromPrivateKey, ECPair.fromWIF, ECPair.makeRandom, or ECPair.fromPublicKey (#1070)

3.3.2

fixed

  • Fixed decodeStack arbitrarily supporting non-Array arguments (#942)

3.3.1

changed

  • Increased the TransactionBuilder maximumFeeRate from 1000 to 2500 satoshis/byte. (#931)

3.3.0

added

  • Added ECSignature.prototype.toRSBuffer/ECSignature.fromRSBuffer (#915)
  • Added support to TransactionBuilder for 64-byte signatures via .sign (#915)
  • Added support to TransactionBuilder for the .publicKey standard as an alternative to .getPublicKey() (#915)

3.2.1

fixed

  • Fixed script.scripthash.input.check recursion (#898)
  • Fixed TransactionBuilder sometimes ignoring witness value (#901)
  • Fixed script.witnessScriptHash.input implementation (previously used the P2SH impl.) (#911)

3.2.0

added

  • Added address.fromBech32/toBech32 (#846)

3.1.0

added

  • Added Transaction.prototype.virtualSize (#811)
  • Added Transaction.prototype.weight (#811)

3.0.0

From this release users can expect out-of-the-box Segregated Witness support. The majority of breaking changes have been in how script encoding/decoding occurs, with the introduction of witness stacks.

added

  • Added script.types enums (#679)
  • Added script.*.*.{check,encode,decode[,encodeStack,decodeStack]} functions (#681, #682)
  • Added minimal TransactionBuilder.prototype.build absurd fee-safety (#696)
  • Added script.(decompile/compile)PushOnly and script.toStack functions (#700)
  • Added Transaction.prototype.toBuffer Segregated Witness serialization support (#684, #701)
  • Added Transaction.prototype.hasWitnesses (#718)
  • Added script.witnessCommitment.* template
  • Added TransactionBuilder.prototype.sign now has two additional parameters, witnessValue, and witnessScript
  • Added Transaction.hashForWitnessV0 and Transaction.setWitness (5c2fdb60436714f18440dc709f0be065928c1e49)

fixed

  • Fixed script must compile minimally (#638)
  • Fixed Transaction and Block versions should be Int32, signed integers (#662)

removed

  • Removed ecdsa.calcPubKeyRecoveryParam, ecdsa.recoverPubKey (#456)
  • Removed buffer-equals/buffer-compare dependencies (#650)
  • Removed HDNode.prototype.toString (#665)
  • Removed dogecoin network (#675)
  • Removed message export, moved to bitcoinjs-message (#456)

renamed

  • Removed script.* functions in favour of bitcoin.script.*.(input/output).(encode/decode/check) style (#682)

2.3.0

added

  • Added HDNode.prototype.isNeutered (#536)
  • Added HDNode.prototype.derivePath (#538)
  • Added typeforce checking for HDNode.prototype.derive* (#539)
  • Added Transaction.prototype.isCoinbase (#578)
  • Added Block.prototype.checkMerkleRoot (#580)
  • Added Block.calculateMerkleRoot (#580)
  • Added TransactionBuilder.prototype.setVersion (#599)
  • Added script.isWitnessPubKeyHashOutput (#602)
  • Added script.isWitnessScriptHashOutput (#602)
  • Added script.witnessPubKeyHashOutput (#602)
  • Added script.witnessScriptHashOutput (#602)
  • Added script.witnessScriptHashInput (#602)

fixed

  • Fixed "BIP32 is undefined" when network list given to HDNode but no compatible version found (#550)
  • Fixed writePushDataInt output to adhere to minimal data push policy (#617)

2.2.0

added

  • Added Block.calculateTarget for difficulty calculations (#509)
  • Added Block.prototype.checkProofOfWork (#509)
  • Added opcodes.OP_CHECKLOCKTIMEVERIFY alias for OP_NOP2 (#511)
  • Added script.number.[encode/decode] for CScriptNum-encoded Buffers (#516)
  • Added TransactionBuilder.prototype.setLockTime (#507)

fixed

  • Bumped typeforce version to fix erroneous error message from types.Hash*bit types (#534)

2.1.4

fixed

  • script.isPubKeyHashOutput and script.isScriptHashOutput no longer allow for non-minimal data pushes (per bitcoin/bitcoin IsStandard policy) (#499)
  • TransactionBuilder.addOutput now allows for SIGHASH_SINGLE, throwing if the contract is violated (#504)
  • remove use of const, use ES5 only (#502)

2.1.3

fixed

  • Bumped typeforce to 1.5.5 (see #493)

2.1.2

fixed

  • Add missing CHANGELOG entry for 2.1.1

2.1.1

changed

  • removed use of buffer-reverse, dependency only kept for bufferutils.reverse, to be deprecated (#478)

fixed

  • isMultisigOutput no longer allows data chunks for m/n (#482)
  • isMultisigOutput's n value must now match the number of public keys (as per bitcoin/bitcoin) (#484)

2.1.0

From this release users should use the HDNode directly (compared to accessing .keyPair) when performing ECDSA operations such as sign or verify. Ideally you shoud not have to directly access HDNode internals for general usage, as it can often be confusing and error prone.

added

  • ECPair.prototype.getNetwork
  • HDNode.prototype.getNetwork, wraps the underyling keyPair's getNetwork method
  • HDNode.prototype.getPublicKeyBuffer, wraps the underyling keyPair's getPublicKeyBuffer method
  • HDNode.prototype.sign, wraps the underlying keyPair's sign method
  • HDNode.prototype.verify, wraps the underlying keyPair's verify method

2.0.0

In this release we have strived to simplify the API, using native types wherevever possible to encourage cross-compatibility with other open source community modules.

The ecdsa module has been removed in lieu of using a new ECDSA module (for performance and safety reasons) during the 2.x.y major release. Several other cumbersome modules have been removed, with their new independent modules recommended for usage instead for greater modularity in your projects.


Backward incompatible changes:

added

  • export address, for address based utility functions, most compatible, just without Address instantiation, see #401, #444
  • export script, for script based utility functions, mostly compatible, just without Script instantiation, see #438, #444
  • export ECPair, a merged replacement for ECKey/ECPubKey, invalid types will throw via typeforce

changed

  • address.toOutputScript, ECPair.prototype.fromWIF and HDNode.prototype.fromBase58 no longer automatically detect the network, networks.bitcoin is always assumed unless given.
  • assert was used for type checking, now replaced by typeforce
  • BIP66 compliant strict DER signature validation was added to ECSignature.fromDER, changing the exact exception messages slightly, see #448.

  • new HDNode(d/Q, chainCode, network) -> new HDNode(keyPair, chainCode), now uses ECPair

  • HDNode.prototype.toBase58(false) -> HDNode.prototype.neutered().toBase58() for exporting an extended public key
  • HDNode.prototype.toBase58(true) -> HDNode.prototype.toBase58() for exporting an extended private key

  • Transaction.prototype.hashForSignature(prevOutScript, inIndex, hashType) -> Transaction.prototype.hashForSignature(inIndex, prevOutScript, hashType)

  • Transaction.prototype.addInput(hash, ...): hash could be a string, Transaction or Buffer -> hash can now only be a Buffer.
  • Transaction.prototype.addOutput(scriptPubKey, ...): scriptPubKey could be a string, Address or a Buffer -> scriptPubKey can now only be a Buffer.
  • TransactionBuilder API unchanged.

removed

  • export Address, strings are now used, benchwith no performance loss for most use cases
  • export base58check, use bs58check instead
  • export ecdsa, use ecurve instead
  • export ECKey, use new export ECPair instead
  • export ECPubKey, use new export ECPair instead
  • export Wallet, see README.md#complementing-libraries instead
  • export Script, use new utility export script instead (#438 for more information)

  • crypto.HmacSHA256, use node crypto instead

  • crypto.HmacSHA512, use node crypto instead

  • Transaction.prototype.sign, use TransactionBuilder.prototype.sign

  • Transaction.prototype.signInput, use TransactionBuilder.prototype.sign
  • Transaction.prototype.validateInput, use Transaction.prototype.hashForSignature and ECPair.verify

  • HDNode.fromBuffer, use HDNode.fromBase58 instead

  • HDNode.fromHex, use HDNode.fromBase58 instead
  • HDNode.toBuffer, use HDNode.prototype.toBase58 instead
  • HDNode.toHex, use HDNode.prototype.toBase58 instead

  • networks.*.magic, see the comment here

  • networks.[viacoin|viacointestnet|gamerscoin|jumbucks|zetacoin], import these yourself (see #383/a0e6ee7)
  • networks.*.estimateFee, out-dated

renamed

  • Message -> message
  • scripts -> script
  • scripts.dataOutput -> script.nullDataOutput (per convention)