Skip to content

JSON RPC interface

tonyofbyteball edited this page Mar 4, 2018 · 4 revisions

For exchanges, there is a specialized JSON RPC interface https://github.com/byteball/headless-byteball/wiki/Running-RPC-service. However it is limited and exposes only those functions that the exchanges need.

If you are developing a service and your programming language is node.js, your best option is to just require() the byteball modules that you need (most likely you need headless-byteball and various modules inside byteballcore. This way, you'll also be running a byteball node in-process.

If you are programming in another language, or you'd like to run your byteball node in a separate process, you can still access many of the functions of headless-byteball and byteballcore modules by creating a thin RPC wrapper around the required functions and then calling them via JSON-RPC.

To expose the required functions via JSON-RPC, create a small node.js module that depends on headless-byteball, byteballcore (and any other byteball modules) and RPCify:

var rpcify = require('rpcify');

var headlessWallet = require('headless-byteball');  // this is a module whose methods you want to expose via RPC
var balances = require('byteballcore/balances.js'); // another such module

// start listening on RPC port
rpcify.listen(6333, '127.0.0.1');

// expose some functions via RPC
rpcify.expose(headlessWallet.issueChangeAddressAndSendPayment);
rpcify.expose(balances.readBalance, true);
rpcify.expose([headlessWallet.readFirstAddress, headlessWallet.readSingleWallet, headlessWallet.issueOrSelectAddressByIndex], true);

Start this module (which also includes a byteball node) and you'll be able to call the exposed functions via RPC from a program in any language. See the documentation about RPCify for more details.