IPC API
The IPC API allows users to create UNIX domain sockets for blockchains to publish to. When the blockchain accepts a vertex/block it will publish it to a socket and the decisions contained inside will be published to another.
A node will only expose this API if it is started with config flag api-ipcs-enabled=true
.
IPC Message Format
Socket messages consist of a 64bit integer in BigEndian format followed by that many bytes.
Example:
Sending:
[0x41, 0x76, 0x61, 0x78]
Writes to the socket:
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x41, 0x76, 0x61, 0x78]
IPC Socket URL Format
The names of the sockets are of the form <network_id>-<chain_id>-<event_type>
where <event_type>
is either consensus
or decisions
. The consensus socket receives verticies and blocks and while the decisions socket recives individual transactions.
Format
This API uses the json 2.0
RPC format.
Endpoint
/ext/ipcs
Methods
ipcs.publishBlockchain
Register a blockchain so it publishes accepted vertices to a Unix domain socket.
Signature
ipcs.publishBlockchain({blockchainID: string}) -> {consensusURL: string, decisionsURL: string}
blockchainID
is the blockchain that will publish accepted vertices.consensusURL
is the path of the Unix domain socket the vertices are published to.decisionsURL
is the path of the Unix domain socket the transactions are published to.
Example Call
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "ipcs.publishBlockchain",
"params":{
"blockchainID":"11111111111111111111111111111111LpoYY"
},
"id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/ipcs
Example Response
{
"jsonrpc": "2.0",
"result": {
"decisionsURL": "/tmp/1-11111111111111111111111111111111LpoYY-consensus",
"consensusURL": "/tmp/1-11111111111111111111111111111111LpoYY-decisions"
},
"id": 1
}
ipcs.unpublishBlockchain
Deregister a blockchain so that it no longer publishes to a Unix domain socket.
Signature
ipcs.unpublishBlockchain({blockchainID: string}) -> {success: bool}
blockchainID
is the blockchain that will no longer publish to a Unix domain socket.
Example Call
curl -X POST --data '{
"jsonrpc": "2.0",
"method": "ipcs.unpublishBlockchain",
"params":{
"blockchainID":"11111111111111111111111111111111LpoYY"
},
"id": 1
}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/ipcs
Example Response
{
"jsonrpc": "2.0",
"result": {
"success": true
},
"id": 1
}