storjd

Build Status Coverage Status NPM License

Complete implementation of the Storj Network Protocol Version 2. This package supercedes Storj Core (storj-lib@6.x.x) and may be used as a daemon or as a library to control a node on the Storj Network.

Prerequisites

Make sure you have the following prerequisites installed:

  • Git
  • Node.js LTS (6.9.x)
  • NPM
  • Python 2.7
  • GCC/G++/Make

Node.js + NPM

GNU+Linux & Mac OSX

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

Close your shell and open an new one. Now that you can call the nvm program, install Node.js (which comes with NPM):

nvm install --lts

Windows

Download Node.js LTS for Windows, launch the installer and follow the setup instructions. Restart your PC, then test it from the command prompt:

node --version
npm --version

Build Dependencies

GNU+Linux

Debian / Ubuntu / Mint / Trisquel / and Friends

apt install git python build-essential

Red Hat / Fedora / CentOS

yum groupinstall 'Development Tools'

You might also find yourself lacking a C++11 compiler - see this.

Mac OSX

xcode-select --install

Windows

npm install --global windows-build-tools

Installation

Daemon + Utilities CLI

This package exposes two command line programs: storjd and storjutil. To install these, use the --global flag.

npm install storjd --global --production

Core Library

This package exposes a module providing a complete implementation of the protocol. To use it in your project, from your project's root directory, install as a dependency.

npm install storjd --save

Usage

Spawning Child

The easiest way to get up and running with storjd is to spawn a child process from your program and connect to it over the control port. This package exposes a convenience method for doing this.

const storjd = require('storjd');
const { child, controller } = storjd(config);

// The `config` argument can be either a string path to config file to use or 
// a JSON dictionary of config properties. See configuration documentaion.

child.stdout.pipe(process.stdout); // Pipe log out put to stdout

controller.on('ready', () => {
  controller.invoke('ping', [contact], console.log); // Ping a contact
});

Control Interface

You can run storjd standalone and control it from any other application over its TCP control interface. See the Resources section below to read up on the control protocol to implement it in the language of your choice. If using Node.js, you can use the client bundled in this package.

const storj = require('storjd');
const controller = new storj.control.Client();

controller.on('ready', () => {
  controller.invoke('ping', [contact], (err) => { /* handle result */ });
});

controller.connect(port);

If you wish to control your storjd node from another language, simply connect to the control port over a TCP socket and use the BOSCAR protocol to send RPC messages to the node. The methods and argument signatures map directly to the storjd.Node API describe in the documentation. See Resources below.

Direct Implementation

Since storjd exposes all of the internals used to implement it, you can use the same classes to directly implement your own Storj node within your project. Just import the storjd package and construct a node instance with options.

const storj = require('storjd');
const node = new storj.Node(options);

node.listen(8443);
node.join(['known_node_id', { /* contact data */ }]);

Consult the documentation for a complete reference of the API exposed from the Node object. Further documentation on usage can be found by reviewing the end-to-end test suite in test/node.e2e.js. Note that this library is a very low level interface for the Storj protocol and is not intended for casual integration with the Storj network.

Resources

License

Storj Core - Complete implementation of the Storj Network Protocol and daemon.
Copyright (C) 2016 Storj Labs, Inc

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.