src | ||
test | ||
.gitignore | ||
.travis.yml | ||
LICENSE | ||
package.json | ||
README.md |
bitcoinjs-lib
A pure JavaScript Bitcoin library for node.js and browsers. Backed by (slowly improving) testing, proven by over a million wallet users. The backbone for almost all Bitcoin web wallets in production today.
Warning: Master is not stable. Expect the interface to change rapidly, including some of the examples below. This is not the original bitcoinjs-lib that was not updated for a while. The current bitcoinjs-lib has been refactored to clean things up, add new functionality and merge improvements from the community. If you are looking for the original, it will be tagged as 0.1.3
. We will use 0.2.x
for releases based on these changes, so be sure to use the 0.1.3
tag if you need the original version.
Features
- Bitcoin Testnet and Mainnet (production) support
- HD Wallets
- Highly secure random private key / address generation using window.crypto.getRandomValues
- ECDSA signing and verification
- Transaction creation (pay-to-pubkey-hash), support for multisignature transactions
- A (somewhat incomplete) wallet implementation, improvements ongoing
Installation
npm install bitcoinjs-lib
Note: The npm version is currently out of date, are working to resolve this. The best way to use the latest code is to clone the repository.
Setup
Node.js
var bitcoin = require('bitcoinjs-lib')
From the repo:
var bitcoin = require('./src/index.js')
Browser
Compile bitcoinjs-min.js
with the following command:
$ npm run-script compile
After loading this file in your browser, you will be able to use the global Bitcoin
object.
Usage
These examples assume you are running bitcoinjs-lib in the browser.
Generating a Bitcoin address
key = new Bitcoin.ECKey()
// Print your private key (a hex string)
console.log(key.toString())
// => 8c112cf628362ecf4d482f68af2dbb50c8a2cb90d226215de925417aa9336a48
// Print your public key (defaults to a Bitcoin address)
console.log(key.getPub().getAddress())
// => 14bZ7YWde4KdRb5YN7GYkToz3EHVCvRxkF
Creating a Transaction
tx = new Bitcoin.Transaction()
// Add the input (the output of the previous transaction) of the form [previous transaction hash]:[index of the output to use]
tx.addInput("aa94ab02c182214f090e99a0d57021caffd0f195a81c24602b1028b130b63e31", 0)
// Add the output (who to pay to) of the form [payee's bitcoin address]:[amount in satoshis]
tx.addOutput("1Gokm82v6DmtwKEB8AiVhm82hyFSsEvBDK", 15000)
// Initialize the private key you created earlier so you can sign the transaction
key = new Bitcoin.ECKey("5Jxfda2afuyMw3iaxzAwv6FvAs3XxmjV5y3GPAjZDEhRNJaFG5a")
// Sign the first input with your key
tx.sign(0, key)
// Print transaction serialized as hex. You can push the transaction onto the Bitcoin network manually
// here: https://blockchain.info/pushtx
console.log(tx.serializeHex())
// => 0100000001313eb630b128102b60241ca895f1d0ffca2170d5a0990e094f2182c102ab94aa000000008a47304402200169f1f844936dc60df54e812345f5dd3e6681fea52e33c25154ad9cc23a330402204381ed8e73d74a95b15f312f33d5a0072c7a12dd6c3294df6e8efbe4aff27426014104e75628573696aed32d7656fb35e9c71ea08eb6492837e13d2662b9a36821d0fff992692fd14d74fdec20fae29128ba12653249cbeef521fc5eba84dde0689f27ffffffff01983a0000000000001976a914ad618cf4333b3b248f9744e8e81db2964d0ae39788ac00000000
Projects utilizing bitcoinjs-lib
Feel free to send pull requests to have your project/startup listed here.
Contributing
Instructions
- Fork the repo
- Push changes to your fork
- Create a pull request
Running the test suite
$ npm test
Alternatives
License
This library is free and open-source software released under the MIT license.
Copyright
BitcoinJS (c) 2011-2012 Stefan Thomas Released under MIT license http://bitcoinjs.org/
JSBN (c) 2003-2005 Tom Wu Released under BSD license http://www-cs-students.stanford.edu/~tjw/jsbn/
CryptoJS (c) 2009–2012 by Jeff Mott Released under New BSD license http://code.google.com/p/crypto-js/