Request

This is a message type, which gets a reply with a response type message.

Example:

const network = require('ocore/network.js');
const ws = network.getInboundDeviceWebSocket(device_address);
// function parameters: websocket, command, params, bReroutable, callback
var tag = network.sendRequest(ws, 'get_witnesses', null, false, getParentsAndLastBallAndWitnessListUnit);
function getParentsAndLastBallAndWitnessListUnit(ws, req, witnesses) {
var params = {
witnesses: witnesses
};
network.sendRequest(ws, 'light/get_parents_and_last_ball_and_witness_list_unit', params, false,
function(ws, req, response) {
console.log(response);
}
);
}
//you can have your own timeout logic and delete a pending request like this
setTimeout(function() {
var deleted = network.deletePendingRequest(ws, tag); // true if request was deleted
}, 30*1000);

Following is a list of request type JSON messages that are sent over the network:

Get node list

This requests returns response with nodes that accept incoming connections.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'get_peers'
}
}

Get a list of witnesses

This requests returns response with list of witnesses.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'get_witnesses'
}
}

Get transaction data

This requests returns response with unit data. Example shows a unit, which created a new asset.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'get_joint',
params: '0xXOuaP5e3z38TF5ooNtDhmwNkh1i21rBWDvrrxKt0U='
}
}

Send transaction data

This requests returns response whether composed unit was accepted or not. Unit object can be composed with ocore/composer.js.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'post_joint',
params: {Object}
}
}

Send heartbeat that you don't sleep

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'heartbeat'
}
}

Subscribe to transaction data

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'subscribe',
params: {
subscription_id: subscription_id,
last_mci: last_mci
}
}
}

Synchronous transaction data

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'catchup',
params: {
witnesses: witnesses,
last_stable_mci: last_stable_mci,
last_known_mci: last_known_mci
}
}
}

Get the hash tree

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'get_hash_tree',
params: {
from_ball: from_ball,
to_ball: to_bal
}
}
}

Get the main chain index

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'get_last_mci'
}
}

Send message to client that is connected to hub

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'hub/deliver',
params: {
to: device_address,
pubkey: pubkey,
signature: signature,
encrypted_package: encrypted_message
}
}
}

Get temporary public key

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'hub/get_temp_pubkey',
params: permanent_pubkey
}
}

Update temporary public key

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'hub/temp_pubkey',
params: {
temp_pubkey: temp_pubkey,
pubkey: permanent_pubkey,
signature: signature
}
}
}

Enable notifications

request.json
request.json
{
type: 'request',
content: {
tag: tag,
command: 'hub/enable_notification',
params: registrationId
}
}

Disable notifications

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'hub/disable_notification',
params: registrationId
}
}

Get list of chat bots

This requests returns response with chat bots of connected hub.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'hub/get_bots'
}
}

Get asset metadata

This requests returns response with asset metadata (unit and registry). Example gets WCG Point asset metadata.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'hub/get_asset_metadata',
params: 'IYzTSjJg4I3hvUaRXrihRm9+mSEShenPK8l8uKUOD3o='
}
}

Get transaction history

This requests returns response with transaction history of specified addresses.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'light/get_history',
params: {
witnesses: witnesses,
requested_joints: joints,
addresses: addresses
}
}
}
request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'light/get_link_proofs',
params: units
}
}

Get the parent unit and the witness unit

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'light/get_parents_and_last_ball_and_witness_list_unit',
params: {
witnesses: witnesses
}
}
}

Get specific attestation unit

This requests returns response with attestation units for specified field and value.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'light/get_attestation',
params: {
attestor_address: 'FZP4ZJBMS57LYL76S3J75OJYXGTFAIBL',
field: 'name',
value: 'tarmo888'
}
}
}

Get all attestation data about address

This requests returns response with all the attestation data about specific address.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'light/get_attestations',
params: {
address: 'MNWLVYTQL5OF25DRRCR5DFNYXLSFY43K'
}
}
}

Pick divisible inputs for amount

This requests returns response with spendable inputs for specified asset, amount and addresses.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'light/pick_divisible_coins_for_amount',
params: {
asset: '',
addresses: addresses,
last_ball_mci: last_ball_mci,
amount: amount,
spend_unconfirmed: 'own'
}
}
}

Get address definition

This requests returns response with address definition (smart-contracts have address smart-contract definition only after somebody has spent from it).

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'light/get_definition',
params: 'JEDZYC2HMGDBIDQKG3XSTXUSHMCBK725'
}
}

Get balances of addresses

This request returns a response with balances of one or more addresses.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'light/get_balances',
params: [
'JEDZYC2HMGDBIDQKG3XSTXUSHMCBK725',
'UENJPVZ7HVHM6QGVGT6MWOJGGRTUTJXQ'
]
}
}

Get profile unit IDs of addresses

It is possible for users to post a profile information about themselves, this request returns a response with all the profile data units.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'light/get_profile_units',
params: [
'MNWLVYTQL5OF25DRRCR5DFNYXLSFY43K'
]
}
}

Custom Request

You can add your own communication protocol on top of the Obyte one. See event there.

request.json
response.json
{
type: 'request',
content: {
tag: tag,
command: 'custom',
params: params
}
}