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.

{
    type: 'request',
    content: {
        tag: tag,
        command: 'get_peers'
    }
}

Get a list of witnesses

This requests returns response with list of witnesses.

{
    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.

{
    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.

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

Send heartbeat that you don't sleep

{
    type: 'request',
    content: {
        tag: tag,
        command: 'heartbeat'
    }
}

Subscribe to transaction data

{
    type: "request",
    content: {
        tag: tag,
        command: "subscribe",
        params: {
            subscription_id: crypto.randomBytes(30).toString('base64'),
            last_mci: 0,
            library_version: "0.1"
        }
    }
}

Synchronous transaction data

{
    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

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

Get the main chain index

{
    type: 'request',
    content: {
        tag: tag,
        command: 'get_last_mci'
    }
}

Send message to client that is connected to hub

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

Get temporary public key

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

Update temporary public key

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

Enable notifications

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

Disable notifications

{
    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.

{
    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.

{
    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.

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

Get the parent unit and the witness unit

{
    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.

{
    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.

{
    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.

{
    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).

{
    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.

{
    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.

{
    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.

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

Last updated