bitcoinjs-lib/README.md

131 lines
4 KiB
Markdown
Raw Normal View History

2011-05-06 01:08:46 +02:00
# bitcoinjs-lib
2014-03-14 19:15:56 +01:00
[![Build Status](https://travis-ci.org/bitcoinjs/bitcoinjs-lib.png?branch=master)](https://travis-ci.org/bitcoinjs/bitcoinjs-lib)
2014-03-14 04:37:22 +01:00
2014-03-14 19:15:56 +01:00
[![Browser Support](https://ci.testling.com/bitcoinjs/bitcoinjs-lib.png)](https://ci.testling.com/bitcoinjs/bitcoinjs-lib)
2013-04-21 11:04:23 +02:00
2014-03-08 22:08:08 +01:00
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.
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
2011-05-06 01:08:46 +02:00
2014-03-08 22:08:08 +01:00
- Bitcoin Testnet and Mainnet (production) support
2014-03-01 14:03:37 +01:00
- [HD Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
2014-03-08 22:08:08 +01:00
- Highly secure random private key / address generation using [window.crypto.getRandomValues](https://developer.mozilla.org/en-US/docs/Web/API/Window.crypto)
2014-03-01 14:03:37 +01:00
- ECDSA signing and verification
2014-03-08 22:08:08 +01:00
- Transaction creation (pay-to-pubkey-hash), support for multisignature transactions
- A (somewhat incomplete) wallet implementation, improvements ongoing
2011-05-06 01:08:46 +02:00
2014-03-08 22:08:08 +01:00
## Installation
2011-12-20 12:47:50 +01:00
2014-03-01 14:03:37 +01:00
`npm install bitcoinjs-lib`
2014-03-08 22:08:08 +01:00
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.
2014-03-19 04:10:39 +01:00
## Setup
2014-03-08 22:08:08 +01:00
### Node.js
var bitcoin = require('bitcoinjs-lib')
From the repo:
2014-03-01 14:03:37 +01:00
2014-03-08 22:08:08 +01:00
var bitcoin = require('./src/index.js')
2014-03-01 14:03:37 +01:00
2014-03-08 22:08:08 +01:00
### Browser
2014-03-08 22:08:08 +01:00
Compile `bitcoinjs-min.js` with the following command:
2014-03-08 22:08:08 +01:00
$ npm run-script compile
2014-03-08 22:08:08 +01:00
After loading this file in your browser, you will be able to use the global `Bitcoin` object.
2014-03-01 14:03:37 +01:00
2014-03-19 04:10:39 +01:00
## Usage
These examples assume you are running bitcoinjs-lib in the browser.
### Generating a Bitcoin address
```javascript
key = Bitcoin.ECKey()
// Print your private key (used for signing transactions)
console.log(key.toString())
// => 5Jxfda2afuyMw3iaxzAwv6FvAs3XxmjV5y3GPAjZDEhRNJaFG5a
// Print your public key (Bitcoin address)
console.log(key.getPub().toString())
// => 18oxCAnbuKHDjP7KzLBDj8mLjggDBjE1Q9
```
### Creating a Transaction
```javascript
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 = 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())
```
2014-03-08 22:08:08 +01:00
## Projects utilizing bitcoinjs-lib
2014-03-01 14:03:37 +01:00
2014-03-08 22:08:08 +01:00
- [Blockchain.info Wallet](http://blockchain.info/wallet)
- [Bitaddress.org](https://www.bitaddress.org)
2014-03-08 22:10:39 +01:00
- [Coinpunk](https://coinpunk.com)
- [DarkWallet](https://darkwallet.unsystem.net)
2014-03-01 14:03:37 +01:00
2014-03-08 22:12:18 +01:00
Feel free to send pull requests to have your project/startup listed here.
2014-03-19 04:10:39 +01:00
## Contributing
### Instructions
1. Fork the repo
2. Push changes to your fork
3. Create a pull request
### Running the test suite
$ npm test
2014-03-08 22:08:08 +01:00
## Alternatives
2014-03-01 14:03:37 +01:00
2014-03-08 22:08:08 +01:00
- [Bitcore](https://github.com/bitpay/bitcore)
- [Cryptocoin](https://github.com/cryptocoinjs/cryptocoin)
2014-03-08 22:08:08 +01:00
## License
2011-12-20 12:47:50 +01:00
2014-03-08 22:08:08 +01:00
This library is free and open-source software released under the MIT license.
2012-07-30 19:09:21 +02:00
2014-03-08 22:08:08 +01:00
## Copyright
2012-07-30 19:09:21 +02:00
2014-03-01 14:03:37 +01:00
BitcoinJS (c) 2011-2012 Stefan Thomas
Released under MIT license
2012-07-30 19:09:21 +02:00
http://bitcoinjs.org/
2014-03-01 14:03:37 +01:00
JSBN (c) 2003-2005 Tom Wu
Released under BSD license
2012-07-30 19:09:21 +02:00
http://www-cs-students.stanford.edu/~tjw/jsbn/
2014-03-01 14:03:37 +01:00
CryptoJS (c) 20092012 by Jeff Mott
Released under New BSD license
2012-07-30 19:09:21 +02:00
http://code.google.com/p/crypto-js/
2014-03-13 00:31:56 +01:00