Communication Protocol

This section details the communication protocol between the user and a tService.

Request format

The request is JSON-formatted data.

{
    "version": "0.1",
    "pyxa-version": "0.1",
    "header": { "src": "user", "type": "text/plain" },
    "content-transfer-encoding": "base64",
    "app_id": "QmWPypqFkmHYEwB61g8FNmGLvXAGraLZ6yzxM4qG81g6nz",
    "function": "/submit",
    "code": "[plaintext code, encoded with content-transfer-encoding]",
    "data": "[AES128 encrypted data, encoded with content-transfer-encoding]"
}

version [required]: Float number which represents the Taxa communication protocol version.

pyxa-version [required]: Float number which represents the current version of the Pyxa framework. Taxa Nodes are backwards compatible for multiple old versions of the Pyxa framework.

header/src [required]: String indicating which party initiated the request (node or user). The current version only supports user.

header/type [required]: String indicating the data type after decryption. Compatible with RFC2046 MIME type (considering future portability with HTTP). Options are as follow:

  • text/plain: plain text format [default]
  • application/json: json format
  • application/Octet-Stream: arbitrary binary format

content-transfer-encoding [required]: RFC2045 compatible encoding type: base64 [default]. As of version(0.1), base64 is the only supported encoding.

app_id: String in multihash format. It is the hash of the developer-generated python code.

function: String that represents the name of the entry function (e.g., taxa.route).

code: String in encrypted data format as indicated in content-transfer-encoding. Protocol-wise, the code needs to be included in the requests. Engineering-wise, it could be cached on the node. If left empty, the server will automatically search its cache folder. It will be invalidated if the hash doesn't match the app_id field.

data: String in encrypted data format as indicated in content-transfer-encoding

Response format

The response is JSON-formatted data.

{
    "version": "0.1",
    "pyxa-version": "0.1",
    "response-code": "1000",
    "direction": "0",
    "content-type": "text/plain",
    "content-transfer-encoding": "base64",
    "data": "cq6rTB3b4E/cT/dUQ3szzQ==\n"
}

version [required]: Float number which represents the Taxa communication protocol version.

pyxa-version [required]: Float number which represents the current version of the Pyxa framework. Taxa Nodes are backwards compatible for multiple old versions of the Pyxa framework.

response code [required]: Integer which indicates the result of a handled request. The options are as follows:

  • 1000 - OK
  • 2000 - FULL_CODE_REQUIRED
  • 3000 - UNIDENTIFIED_ENCRYPTION
  • 4000 - TSERVICE_CODE_ERROR

direction: Integer indicating the message's sender and handler. The current version only supports 0.

content-type: RFC2046 compatible MIME type (considering future portability with HTTP). Options include the following:

  • text/plain: plain text format [default]
  • application/json: json format
  • application/Octet-Stream: arbitrary binary format

content-transfer-encoding: RFC2045 compatible encoding type: base64 [default]. As of version(0.1), base64 is the only supported encoding.

data: String in encrypted return data format as indicated in content-transfer-encoding