Skip to content

æternity node channel WebSocket API examples

The JSON-RPC section provides examples of state channel's communication via the WebSocket API. The examples are generated from æternity node's integration tests and represent real interaction with the node.

Different APIs

Currently there is 1 API protocol that is supported:

  • JSON-RPC

Legacy protocol was removed.

You can find API specific examples in the corresponding directories.

Anatomy of an example

Each example pursues a specific use case. Examples are broken down into sections each one of which describes a single action. Example for a section would be:

responder <--- node (2019-03-13 11:04:47.10)
{
  "jsonrpc": "2.0",
  "method": "channels.info",
  "params": {
    "channel_id": null,
    "data": {
      "event": "channel_open"
    }
  },
  "version": 1
}

Each section has an participant, an action, a timestamp and a code snippet. In the above example the responder receives from its node the message.

Participants

Channels have two participants: an initiator and a responder. For clarity each section has an explicit actor. Each participant has one's own node and has a WebSocket connection to it. The two nodes open a noise protocol connection between themselves: initiator's node connects to a host and port that the responder provides.

+-----------+               +------+
|           |    WebSocket  |      |
| initiator +---------------+ node |
|           |               |      |
+-----------+               +--+---+
                               |
                               |
                               | noise
                               |
                               v
+-----------+               +--+---+
|           |    WebSocket  |      |
| responder +---------------+ node |
|           |               |      |
+-----------+               +------+

Actions

Actions are either opening a WebSocket connection, receiving a message or sending a message. All messages are sent and received from one's own node via the opened WebSocket connection. The node has the responsibility to send messages to the other participant's node via the noise protocol connection they persist.

Open a WebSocket connection

An opening message includes all the needed parameters and looks like this:

initiator opens a WebSocket connection (2019-03-13 11:04:45.887)
ws://localhost:3014/channel?channel_reserve=2&host=localhost&initiator_amount=70000000000000&initiator_id=ak_HkRcJAFekttmTHyeZUQkAiqMRvTQ7h9ekQsHWFYMaoNw1JNWs&lock_period=10&port=12340&protocol=json-rpc&push_amount=1&responder_amount=40000000000000&responder_id=ak_2QhXumV8mm8Ni9ew5ZFsgcSysB9FtxjpqPWDSehgs7MJvFNoV3&role=initiator
Sending and receiving a message

In the section, right after the participant, there is an arror indicating the direction of the message:

  • <--- node means that a message had been received from the node
  • ---> node means that a message had been sent to the node
Information log messages

Some WebSocket events represent important milestones regarding the example logic and those are followed by a special information message that is a comment of what had just happened. They look like this:

responder info

Received an WebSocket opening request

Continuous example

There are two types of examples:

  • Those that show a full open-close scenario (most of the examples)
  • Those that are built on top of the previous ones' state (continuous) These have one single opening of the state channel and the following examples are focused on specific actions