node-dogecoin

DogeCoin client for Node.js

MIT License

Downloads
36
Stars
118
Committers
5

A Node.js DogeCoin Client!

node-dogecoin is a Dogecoin client for Node.js. It is a fork of the excellent Kapitalize Bitcoin Client (now removed from GitHub) intended for use with Dogecoin. The purpose of this repository is:

  • Provide a one-stop resource for the Node.js developer to get started with Dogecoin integration.
  • Prevent would-be Dogecoin web developers worrying whether a Bitcoin client will work out of the box.
  • Promote Node.js development of Dogecoin web apps.
  • Identify and address any incompatibilities with the Dogecoin and Bitcoin APIs that exist now and/or in the future.

Dependencies

You'll need a running instance of dogecoind to connect with. If you're running Debian/Ubuntu, this worked for me: http://www.dogeco.in/wiki/index.php/Dogecoind

Then, install the node-dogecoin NPM package.

npm install node-dogecoin

Examples

Some code examples follow below, but for more complete examples, see these snippets, or this wallet app which was created to to test this module.

var dogecoin = require('node-dogecoin')()

dogecoin.auth('myusername', 'mypassword')

dogecoin.getDifficulty(function() {
    console.log(arguments);
})

Chaining

Pretty much everything is chainable.

var dogecoin = require('node-dogecoin')()

dogecoin
.auth('MyUserName', 'mypassword')
.getNewAddress()
.getBalance()

Methods

The Litecoin API is supported as direct methods. Use either camelcase or lowercase.

dogecoin.getNewAddress(function(err, address) {
    this.validateaddress(address, function(err, info) {

    })
})

.exec(command [string], ...arguments..., callback [function])

Executes the given command with optional arguments. Function callback defaults to console.log. All of the API commands are supported in lowercase or camelcase. Or uppercase. Anycase!

dogecoin.exec('getNewAddress')

dogecoin.exec('getbalance', function(err, balance) {

})

.set(key [string, object], value [optional])

Accepts either key & value strings or an Object containing settings, returns this for chainability.

dogecoin.set('host', '127.0.0.1')

.get(key [string])

Returns the specified option's value

dogecoin.get('user')

.auth(user [string], pass [string])

Generates authorization header, returns this for chainability

Commands

TODO: Write tests for these.

All Litecoin API commands are supported, in lowercase or camelcase form.

Generation is limited to [genproclimit] processors, -1 is unlimited.

Options

You may pass options to the initialization function or to the set method.


var dogecoin = require('dogecoin')({
    user:'user'
})

dogecoin.set('pass', 'somn')
dogecoin.set({port:22555})

Available options and default values:

  • host localhost
  • port 22555
  • user
  • pass
  • passphrasecallback
  • https
  • ca

Passphrase Callback

With an encryped wallet, any operation that accesses private keys requires a wallet unlock. A wallet is unlocked using the walletpassphrase <passphrase> <timeout> JSON-RPC method: the wallet will relock after timeout seconds.

You may pass an optional function passphrasecallback to the node-dogecoin initialization function to manage wallet unlocks. passphrasecallback should be a function accepting three arguments:

function(command, args, callback) {}
  • command is the command that failed due to a locked wallet.
  • args is the arguments for the failed command.
  • callback is a typical node-style continuation callback of the form function(err, passphrase, timeout) {}. Call callback with the wallet passphrase and desired timeout from within your passphrasecallback to unlock the wallet.

You may hard code your passphrase (not recommended) as follows:

var dogecoin = require('node-dogecoin')({
    passphrasecallback: function(command, args, callback) {
        callback(null, 'passphrase', 30);
    }
})

Because passphrasecallback is a continuation, you can retrieve the passphrase in an asynchronous manner. For example, by prompting the user:

var readline = require('readline')

var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
})

var dogecoin = require('node-dogecoin')({
  passphrasecallback: function(command, args, callback) {
    rl.question('Enter passphrase for "' + command + '" operation: ', function(passphrase) {
      if (passphrase) {
        callback(null, passphrase, 1)
      } else {
        callback(new Error('no passphrase entered'))
      }
    })
  }
})

Secure RPC with SSL

By default dogecoind exposes its JSON-RPC interface via HTTP; that is, all RPC commands are transmitted in plain text across the network! To secure the JSON-RPC channel you can supply dogecoind with a self-signed SSL certificate and an associated private key to enable HTTPS. For example, in your dogecoin.conf:

rpcssl=1
rpcsslcertificatechainfile=/etc/ssl/certs/dogecoind.crt
rpcsslprivatekeyfile=/etc/ssl/private/dogecoind.pem

In order to securely access an SSL encrypted JSON-RPC interface you need a copy of the self-signed certificate from the server: in this case dogecoind.crt. Pass your self-signed certificate in the ca option and set https: true and node-dogecoin is secured!

var fs = require('fs')

var ca = fs.readFileSync('dogecoind.crt')

var dogecoin = require('node-dogecoin')({
  user: 'rpcusername',
  pass: 'rpcpassword',
  https: true,
  ca: ca
})

Testing

npm install -g nodeunit

nodeunit test/test-node-dogecoin.js

Bounties

Dogecoin donation address is DE4isu3m2RBma7nGEwnaX8cu4Y2m2J2g8Q

Donations in dogecoin will be used for bounties. The first bounty will be awarded for creating a unit test suite. As a side note: I encourage all GitHub repository owners to post a donation address so their community can easily support development financially. If you accept donations at your repository, I'll send you a reward!