bitcore-wallet-client
The official client library for [bitcore-wallet-service] (https://github.com/bitpay/bitcore-wallet-service).
Description
This package communicates with BWS Bitcore wallet service using the REST API. All REST endpoints are wrapped as simple async methods. All relevant responses from BWS are checked independently by the peers, thus the importance of using this library when talking to a third party BWS instance.
See [Bitcore-wallet] (https://github.com/bitpay/bitcore-wallet) for a simple CLI wallet implementation that relays on BWS and uses bitcore-wallet-client.
Get Started
You can start using bitcore-wallet-client in any of these two ways:
- via Bower: by running
bower install bitcore-wallet-client
from your console - or via NPM: by running
npm install bitcore-wallet-client
from your console.
Example
Start your own local Bitcore wallet service instance. In this example we assume you have bitcore-wallet-service
running on your localhost:3232
.
Then create two files irene.js
and thomas.js
with the content below:
irene.js
var Client = require('bitcore-wallet-client');
var fs = require('fs');
var BWS_INSTANCE_URL = 'http://localhost:3232/bws/api'
var client = new Client({
baseUrl: BWS_INSTANCE_URL,
verbose: false,
});
client.createWallet("My Wallet", "Irene", 2, 2, {network: 'testnet'}, function(err, secret) {
// Handle err
console.log('Wallet Created. Share this secret with your copayers: ' + secret);
fs.writeFileSync('irene.dat', client.export());
});
thomas.js
var Client = require('bitcore-wallet-client');
var fs = require('fs');
var BWS_INSTANCE_URL = 'http://localhost:3232/bws/api'
var secret = process.argv[2];
var client = new Client({
baseUrl: BWS_INSTANCE_URL,
verbose: false,
});
client.joinWallet(secret, "Thomas", function(err, wallet) {
// Handle err
console.log('Joined ' + wallet.name + '!');
fs.writeFileSync('thomas.dat', client.export());
});
Install bitcore-wallet-client
before start:
npm i bitcore-wallet-client
Create a new wallet with the first script:
$ node irene.js
info Generating new keys
Wallet Created. Share this secret with your copayers: JbTDjtUkvWS4c3mgAtJf4zKyRGzdQzZacfx2S7gRqPLcbeAWaSDEnazFJF6mKbzBvY1ZRwZCbvT
Join to this wallet with generated secret:
$ node thomas.js JbTDjtUkvWS4c3mgAtJf4zKyRGzdQzZacfx2S7gRqPLcbeAWaSDEnazFJF6mKbzBvY1ZRwZCbvT
Joined My Wallet!
Note that the scripts created two files named irene.dat
and thomas.dat
. With these files you can get status, generate addresses, create proposals, sign transactions, etc.
API Client
- new API(opts)
- api.seedFromExtendedPrivateKey(xPrivKey)
- api.seedFromRandom(xPrivKey)
- api.export(opts)
- api.import(opts)
- api.isComplete()
- api.openWallet(cb)
- api.createWallet(walletName, copayerName, m, n, opts, cb)
- api.joinWallet(secret, copayerName, cb)
- api.getStatus(cb)
- api.sendTxProposal(opts)
- api.getTx(id, cb)
- api.createAddress(cb)
- api.getMainAddresses(opts, cb)
- api.getBalance(cb)
- api.getTxProposals(opts)
- api.signTxProposal(txp, cb)
- api.rejectTxProposal(txp, reason, cb)
- api.broadcastTxProposal(txp, cb)
- api.removeTxProposal(txp, cb)
- api.getTxHistory(opts, cb)
- api.setPrivateKeyEncryption(password, opts)
- api.unlock(password)
- api.lock()
- api.getUtxos()
###new API(opts) ClientAPI constructor.
Params
- opts
Object
###API.seedFromExtendedPrivateKey(xPrivKey) Seed from extended private key
Params
- xPrivKey
String
###API.seedFromRandom(xPrivKey) Seed from random
Params
- network
String
###API.export(opts) Export wallet
Params
- opts
Object
- compressed
Boolean
- noSign
Boolean
- compressed
###API.import(opts) Import wallet
Params
- opts
Object
- compressed
Boolean
- compressed
###API.isComplete() Return if wallet is complete
###API.openWallet(cb) Open a wallet and try to complete the public key ring.
Params
- cb
Callback
Returns: Callback
- cb - Returns an error and a flag indicating that the wallet has just been completed and needs to be persisted
###API.createWallet(walletName, copayerName, m, n, network, cb)
Create a wallet.
Params
- walletName
String
- copayerName
String
- m
Number
- n
Number
- opts
Object
- opts.network
String
- 'livenet' or 'testnet' - opts.walletPrivKey
String
- Optional: Shared private key for the wallet (used by copayers). Default: create a random one - opts.id
String
- Optional: ID for the wallet. Default: Create a random one - cb
Callback
Returns: Callback
- cb - Returns the wallet
###API.joinWallet(secret, copayerName, cb)
Join to an existent wallet
Params
- secret
String
- copayerName
String
- cb
Callback
Returns: Callback
- cb - Returns the wallet
###API.getStatus(cb)
Get status of the wallet
Params
- cb
Callback
Returns: Callback
- cb - Returns error or an object with status information
###API.sendTxProposal(opts)
Send a transaction proposal
Params
For a proposal with one output:
- opts
Object
- toAddress
String
- amount
Number
- message
String
- toAddress
For a proposal with multiple outputs:
- opts
Object
- type
String
- 'multiple_outputs' - outputs
Array
- toAddress
String
- amount
Number
- message
String
- toAddress
- type
Returns: Callback
- cb - Return error or the transaction proposal
###API.getTx(id, cb) Gets a transaction proposal
Params
- id
String
Returns: Callback
- cb - Return error or the transaction proposal
###API.createAddress(cb) Create a new address
Params
- cb
Callback
Returns: Callback
- cb - Return error or the address
###API.getMainAddresses(opts, cb)
Get your main addresses
Params
- opts
Object
- doNotVerify
Boolean
- doNotVerify
- cb
Callback
Returns: Callback
- cb - Return error or the array of addresses
###API.getBalance(cb)
Update wallet balance
Params
- cb
Callback
##API.getTxProposals(opts) Get list of transactions proposals
Params
- opts
Object
- doNotVerify
Boolean
- forAirGapped
Boolean
- doNotVerify
Returns: Callback
- cb - Return error or array of transactions proposals
###API.signTxProposal(txp, cb)
Sign a transaction proposal
Params
- txp
Object
- cb
Callback
Returns: Callback
- cb - Return error or object
###API.signTxProposalFromAirGapped(txp, encryptedPkr, m, n)
Sign a transaction proposal from an airgapped device
Params
- txp
Object
- encryptedPkr
String
- m
Number
- n
Number
- cb
Callback
Returns: Callback
- cb - Return error or object
###API.rejectTxProposal(txp, reason, cb)
Reject a transaction proposal
Params
- txp
Object
- reason
String
- cb
Callback
Returns: Callback
- cb - Return error or object
###API.broadcastTxProposal(txp, cb)
Broadcast a transaction proposal
Params
- txp
Object
- cb
Callback
Returns: Callback
- cb - Return error or object
###API.removeTxProposal(txp, cb)
Remove a transaction proposal
Params
- txp
Object
- cb
Callback
Returns: Callback
- cb - Return error or empty
###API.getTxHistory(opts, cb)
Get transaction history
Params
- opts
Object
- skip
Number
- limit
Number
- skip
- cb
Callback
Returns: Callback
- cb - Return error or array of transactions
###API.setPrivateKeyEncryption(password, opts)
Sets up encryption for the extended private key
params
- password
string
- opts
Object
Optional SJCL's encrypting options (like .iten and .salt)
Usage example:
api.setPrivateKeyEncryption('mypassword');
...
api.getTxProposals({}, function(err, txps) {
api.unlock('mypassword');
api.signTxProposal(txps[0], function (err){
api.lock();
});
})
###api.unlock(password)
Tries to unlock (decrypt) the extened private key with the provided password.
(setprivatekeyencryption should be called first). lock
must be called
afterwards to remove the uncrypted private key.
params
- password
string
###api.lock()
Removes the unencrypted private key.
###api.getUtxos() Get list of wallet's Unspent Transaction Outputs.