Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/duniter/ucoin-cli

Node.js module for accessing ucoin server
https://github.com/duniter/ucoin-cli

Last synced: 25 days ago
JSON representation

Node.js module for accessing ucoin server

Awesome Lists containing this project

README

        

# vucoin

Node.js module to access [ucoin](https://github.com/c-geek/ucoin) server through its HTTP API.

## Usage

```js
var vucoin = require('vucoin');

// Wether we want authentified responses, or not (as it is costly)
var authentication = true;

// If we want authentified responses, give response signature in callbacks too
var giveSignatures = true;

vucoin('localhost', '8081', authentication, giveSignatures, function (err, node){

// Public key imported, exchanges are signed
node.pks.lookup('John Carter', function(err, keys, signature){
// Results
});
});
```
Here, vucoin will ask remote his public key for authentication, but it can be manually given too:

```js
var pubkey = fs.readFileSync('/path/to/key.pub', 'utf8');
vucoin('localhost', '8081', pubkey, function (err, node){
// Public key imported, exchanges are signed
});
```

### Public keys

```js
var key = fs.readFileSync('/path/to/key.pub', 'utf8');
var sig = fs.readFileSync('/path/to/signature', 'utf8');

node.pks.add(key, sig, function(err, key){
// Key is now updated
var fpr = key.fingerprint;
var name = key.name;
});

node.pks.lookup('John Carter', function(err, keys){
// Results
});

var merkleOpts = {};

node.pks.all(merkleOpts, function(err, json){
// Results
});
```
### Peering
```js
node.ucg.peering.get(function(err, json){
// Results
});
node.ucg.peering.peers.get(function(err, json){
// Results
});

node.ucg.peering.peers.upstream.get(function(err, json){
// Results
});

node.ucg.peering.peers.upstream.of('0124A69D94F4101EFAD727A73A8A49A2960C6826', function(err, json){
// Results
});

node.ucg.peering.peers.downstream.get(function(err, json){
// Results
});

node.ucg.peering.peers.downstream.of('0124A69D94F4101EFAD727A73A8A49A2960C6826', function(err, json){
// Results
});

var subscriptionData = fs.readFileSync('/path/to/subscription', 'utf8');

node.ucg.peering.subscribe(subscriptionData, function(err, json){
// Results
});

var statusData = fs.readFileSync('/path/to/status', 'utf8');

node.ucg.peering.subscribe(statusData, function(err, json){
// Results
});
```
### Trust Hash Table
```js
var entryData = fs.readFileSync('/path/to/entry', 'utf8');

node.ucg.tht.get(function(err, json){
// Results
});

node.ucg.tht.post(entryData, function(err, json){
// Results
});

node.ucg.tht.of('0124A69D94F4101EFAD727A73A8A49A2960C6826', function(err, json){
// Results
});
```
### Amendments
```js
var amendmentNumber = 25;
var amendmentHash = '0124A69D94F4101EFAD727A73A8A49A2960C6826';
var merkleOpts = {};

node.hdc.amendments.current(function(err, json){
// Results
});

node.hdc.amendments.currentVotes(merkleOpts, function(err, json){
// Results
});

node.hdc.amendments.promoted(amendmentNumber, function(err, json){
// Results
});

node.hdc.amendments.view.self(amendmentNumber, amendmentHash, function(err, json){
// Results
});

node.hdc.amendments.view.members(amendmentNumber, amendmentHash, merkleOpts, function(err, json){
// Results
});

node.hdc.amendments.view.voters(amendmentNumber, amendmentHash, merkleOpts, function(err, json){
// Results
});

node.hdc.amendments.view.signatures(amendmentNumber, amendmentHash, merkleOpts, function(err, json){
// Results
});

node.hdc.amendments.votes.get(function(err, json){
// Results
});

var vote = fs.readFileSync('/path/to/vote', 'utf8');

node.hdc.amendments.votes.post(vote, function(err, json){
// Results
});

node.hdc.amendments.votes.of(amendmentNumber, amendmentHash, function(err, json){
// Results
});
```
### Coins
```js
var fingerprint = '93B49E9719BABF7EB33C28B9BDFC901EF6358E9C';
var coinNumber = 2;

node.hdc.coins.list(fingerprint, function(err, json){
// Results
});

node.hdc.coins.view(fingerprint, coinNumber, function(err, json){
// Results
});

node.hdc.coins.history(fingerprint, coinNumber, function(err, json){
// Results
});
```
### Transactions
```js
var fiveLasts = 5;

node.hdc.transactions.all(function(err, json){
// Results
});

node.hdc.transactions.keys(function(err, json){
// Results
});

node.hdc.transactions.last(function(err, json){
// Results
});
```
#### Process
```js
var issuanceData = fs.readFileSync('/path/to/issuance', 'utf8');

node.hdc.transactions.lasts(fiveLasts, function(err, json){
// Results
});

node.hdc.transactions.process(issuanceData, function(err, json){
// Results
});
```
#### Sender
```js
var senderFPR = '93B49E9719BABF7EB33C28B9BDFC901EF6358E9C';
var recipientFPR = 'F01B40DA4962D094F9BFB70A386BCD02789E64C1';
var merkleOpts = {};
var lastsFive = 5;
var amendmentNumber = 25;

node.hdc.transactions.sender.last(senderFPR, function(err, json){
// Results
});

node.hdc.transactions.sender.lasts(senderFPR, lastsFive, function(err, json){
// Results
});

node.hdc.transactions.sender.get(senderFPR, merkleOpts, function(err, json){
// Results
});

node.hdc.transactions.sender.issuance.get(senderFPR, merkleOpts, function(err, json){
// Results
});

node.hdc.transactions.sender.issuance.last(senderFPR, function(err, json){
// Results
});

node.hdc.transactions.sender.issuance.dividend.get(senderFPR, merkleOpts, function(err, json){
// Results
});

node.hdc.transactions.sender.issuance.dividend.amendment(senderFPR, amendmentNumber, merkleOpts, function(err, json){
// Results
});

node.hdc.transactions.sender.fusion(senderFPR, merkleOpts, function(err, json){
// Results
});

node.hdc.transactions.sender.transfert(senderFPR, merkleOpts, function(err, json){
// Results
});

node.hdc.transactions.recipient(recipientFPR, merkleOpts, function(err, json){
// Results
});

var txNumber = 96;

node.hdc.transactions.view(senderFPR, txNumber, merkleOpts, function(err, json){
// Results
});
```

#### Recipient

## Command Line

### Installation

vucoin may be installed globally via

```bash
$ sudo npm install vucoin -g
```

### Forge

`uforge` is a CLI to *forge* HDC documents, ready-to-send data for uCoin servers.

#### Requirements

##### Node.js

`uforge` is relying on `vucoin` CLI, itself powered by Node.js v0.10+, so you need it installed first. Here is an example for Ubuntu installation:

```bash
$ sudo apt-get update
$ sudo apt-get install python-software-properties python g++ make
$ sudo add-apt-repository ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get install mongodb nodejs
```

You can find the installation of Node.js for other distribution [on this GitHub document](https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager).

##### GPG

`uforge` also relies on gpg, as uCoin software uses it almost everywhere.

Here is an example for Ubuntu installation:

```bash
$ sudo apt-get install gpg
```

#### Usage

```
usage: uforge [options] command

This script allow to forge HDC documents in accordance with a uCoin server data.

Command:
forge-join Forge and sign a joining membership
forge-actu Forge and sign an actualizing membership
forge-leave Forge and sign a leaving membership

Options:
-s uCoin server to look data in
-p uCoin server port
-u PGP key to use for signature
-h Help
```

### vuCoin

```
$ vucoin --help

Usage: vucoin [options] [command]

Commands:

pks [add|lookup] Add or search for public keys.
peer Show remote peering informations.
am [current|contract] View current amendment or list all amendments of the contract.
join Send join membership request.
vote Send vote request.
forge [join|actu|leave] Forge HDC data.

Options:

-h, --help output usage information
-V, --version output the version number
--key File of the key to submit.
--search Search string
--membership Signed membership request file to send.
--votefile Vote file to send.
-s, --signature File of a signature to append.
-h, --host

DNS, IPv4 or IPv6 address of the node to contact.
-p, --port Port of the node to contact.

```

# License

This software is provided under [MIT license](https://raw.github.com/c-geek/vucoin/master/LICENSE).