State channel WebSocket API
Messages on the WebSocket API have to follow JSON-RPC specification version 2.0. See: www.jsonrpc.org
The WebSocket API provides the following actions:
Roles:
method: channels.update.new
params:
Name
Type
Description
Required
from
string
Participant's account to take coins from
Yes
to
string
Participant's account to add coins to
Yes
amount
integer
Amount of coins to transfer
Yes
block_hash
string
The on-chain block hash to pin the off-chain environment
No
meta
array of strings
Meta information about the update
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.update.new" ,
"params" : {
"amount" : 1 ,
"from" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm" ,
"to" : "ak_nQpnNuBPQwibGpSJmjAah6r3ktAB7pG9JHuaGWHgLKxaKqEvC"
}
}
Sender receives a non-authenticated off-chain state
method: channels.sign.update
params:
Name
Type
Description
Required
signed_tx
string
channel_offchain_tx
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.update" ,
"params" : {
"channel_id" : "ch_2Jkzb1BVaA888pdNgxoBjJWQKCMiJRxjLbG972dH6cSC3ULwGK" ,
"data" : {
"signed_tx" : "tx_+JU5AaEGrATZCq..." ,
"updates" : [
{
"amount" : 1 ,
"from" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm" ,
"op" : "OffChainTransfer" ,
"to" : "ak_nQpnNuBPQwibGpSJmjAah6r3ktAB7pG9JHuaGWHgLKxaKqEvC"
}
]
}
} ,
"version" : 1
}
Sender authenticates off-chain state response
method: channels.update
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_offchain_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.update" ,
"params" : {
"signed_tx" : "tx_+N8LAfhCuEA..."
}
}
Acknowledger receives a non-authenticated off-chain state
method: channels.sign.update_ack
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_offchain_tx
transaction
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.update_ack" ,
"params" : {
"channel_id" : "ch_2Jkzb1BVaA888pdNgxoBjJWQKCMiJRxjLbG972dH6cSC3ULwGK" ,
"data" : {
"signed_tx" : "tx_+JU5AaEGrATZCq..." ,
"updates" : [
{
"amount" : 1 ,
"from" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm" ,
"op" : "OffChainTransfer" ,
"to" : "ak_nQpnNuBPQwibGpSJmjAah6r3ktAB7pG9JHuaGWHgLKxaKqEvC"
}
]
}
} ,
"version" : 1
}
Acknowledger authenticated off-chain state response
method: channels.update_ack
params:
Name
Type
Description
Required
signed_tx
string
co-authenticated channel_offchain_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.update_ack" ,
"params" : {
"signed_tx" : "tx_+N8LAfhCuE..."
}
}
method: channels.conflict
params:
Name
Type
Description
Required
channel_id
string
channel id
Yes
data
object
description of the last mutually authenticated state
Yes
Name
Type
Description
Required
channel_id
string
channel id
Yes
round
object
the round of the last mutually authenticated state
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.conflict" ,
"params" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"data" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"round" : 5
}
} ,
"version" : 1
}
Name
Type
Description
Required
message
string
error message
Yes
code
integer
error code
Yes
data
json
error description
Yes
request
json
the failed request
Yes
Name
Type
Description
Required
message
string
JSON-RPC error message
Yes
code
integer
JSON-RPC error code
Yes
{
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"error" : {
"code" : 3 ,
"data" : [
{
"code" : 1001 ,
"message" : "Insufficient balance"
}
] ,
"message" : "Rejected" ,
"request" : {
"jsonrpc" : "2.0" ,
"method" : "channels.update.new" ,
"params" : {
"amount" : 10000000000000000 ,
"from" : "ak_nQpnNuBPQwibGpSJmjAah6r3ktAB7pG9JHuaGWHgLKxaKqEvC" ,
"to" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm"
}
}
} ,
"id" : null ,
"jsonrpc" : "2.0" ,
"version" : 1
}
Roles:
Depositor trigger a update
method: channels.deposit
params:
Name
Type
Description
Required
amount
integer
Amount of coins to deposit in the channel
Yes
block_hash
string
The on-chain block hash to pin the off-chain environment
No
fee
integer
The on-chain transaction fee to be used. If not provided the FSM picks a value for the client
No
gas_price
integer
the gas_price to be used for the fee computation
No
nonce
integer
the nonce to be used in the transaction
No
meta
array of strings
Meta information about the update
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.deposit" ,
"params" : {
"amount" : 2
}
}
Depositor receives an non-authenticated deposit transaction
method: channels.sign.deposit_tx
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
deposit data
Yes
Name
Type
Description
Required
signed_tx
string
channel_deposit_tx
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.deposit_tx" ,
"params" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"data" : {
"signed_tx" : "tx_+HIzAaEGgofGx..." ,
"updates" : [
{
"amount" : 2 ,
"from" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm" ,
"op" : "OffChainDeposit"
}
]
}
} ,
"version" : 1
}
Depositor authenticates deposit response
method: channels.deposit_tx
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_deposit_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.deposit_tx" ,
"params" : {
"signed_tx" : "tx_+LwLAfhCuEB..."
}
}
Acknowledger receives a non-authenticated deposit transaction
method: channels.sign.deposit_ack
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
deposit data
Yes
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_deposit_tx
transaction
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.deposit_ack" ,
"params" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"data" : {
"signed_tx" : "tx_+LwLAfhCuEB..."
"updates" : [
{
"amount" : 2 ,
"from" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm" ,
"op" : "OffChainDeposit"
}
]
}
} ,
"version" : 1
}
Acknowledger authenticates deposit response
method: channels.deposit_ack
params:
Name
Type
Description
Required
signed_tx
string
co-authenticated channel_deposit_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.deposit_ack" ,
"params" : {
"signed_tx" : "tx_+LwLAfhCu..."
}
}
Roles:
Withdrawer trigger a update
method: channels.withdraw
params:
Name
Type
Description
Required
amount
integer
Amount of coins to withdraw form the channel
Yes
block_hash
string
The on-chain block hash to pin the off-chain environment
No
fee
integer
The on-chain transaction fee to be used. If not provided the FSM picks a value for the client
No
gas_price
integer
the gas_price to be used for the fee computation
No
nonce
integer
the nonce to be used in the transaction
No
meta
array of strings
Meta information about the update
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.withdraw" ,
"params" : {
"amount" : 2
}
}
Withdrawer receives a non-authenticated withdraw transaction
method: channels.sign.withdraw_tx
payload:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
withdrawal data
Yes
Name
Type
Description
Required
signed_tx
string
channel_withdraw_tx
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.withdraw_tx" ,
"params" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"data" : {
"signed_tx" : "tx_+HI0AaEG..." ,
"updates" : [
{
"amount" : 2 ,
"op" : "OffChainWithdrawal" ,
"to" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm"
}
]
}
} ,
"version" : 1
}
Withdrawer authenticates withdraw response
method: channels.withdraw_tx
params:
Name
Type
Description
Required
signed_tx
string
co-authenticated channel_withdraw_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.withdraw_tx" ,
"params" : {
"signed_tx" : "tx_+LwLAfhC..."
}
}
Acknowledger receives a non-authenticated withdraw transaction
method: channels.sign.withdraw_ack
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
withdrawal data
Yes
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_withdraw_tx
transaction
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.withdraw_ack" ,
"params" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"data" : {
"signed_tx" : "tx_+LwLAfhC..."
"updates" : [
{
"amount" : 2 ,
"op" : "OffChainWithdrawal" ,
"to" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm"
}
]
}
} ,
"version" : 1
}
Acknowledger authenticates withdraw response
method: channels.withdraw_ack
params:
Name
Type
Description
Required
signed_tx
string
co-authenticated channel_withdraw_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.withdraw_ack" ,
"params" : {
"signed_tx" : "tx_+LwLAf..."
}
}
method: channels.assume_minimum_depth
params:
Name
Type
Description
Required
tx_hash
string
The on-chain hash of related transaction
yes
{
"id" : - 576460752303421693 ,
"jsonrpc" : "2.0" ,
"method" : "channels.assume_minimum_depth" ,
"params" : {
"tx_hash" : "th_2ERU4LEe8Bn8x1iuw9vSh7iHys9t8zwt3Nq2oz5GQj9pAu9pur"
}
}
method: channels.update.new_contract
params:
Name
Type
Description
Required
code
contract code
contract code
Yes
call_data
call data
call data for contract creation
Yes
vm_version
integer
contract virtual machine version (vm for which code was compiled)
Yes
abi_version
integer
contract virtual machine abi version
Yes
deposit
integer
contract creation deposit
Yes
block_hash
string
The on-chain block hash to pin the off-chain environment
No
meta
array of strings
Meta information about the update
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.update.new_contract" ,
"params" : {
"abi_version" : 1 ,
"call_data" : "cb_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACC5yVbyizFJqfWYeqUF89obIgnMVzkjQAYrtsG9n5+Z6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnHQYrA==" ,
"code" : "cb_+QP1RgKg/ukoFMi2RBUIDNHZ3pMMzHSrPs/uKkwO/vEf7cRnitr5Avv5ASqgaPJnYzj/UIg5q6R3Se/6i+h+8oTyB/s9mZhwHNU4h8WEbWFpbrjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKD//////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+QHLoLnJVvKLMUmp9Zh6pQXz2hsiCcxXOSNABiu2wb2fn5nqhGluaXS4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////7kBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA//////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////////////////////////uMxiAABkYgAAhJGAgIBRf7nJVvKLMUmp9Zh6pQXz2hsiCcxXOSNABiu2wb2fn5nqFGIAAMBXUIBRf2jyZ2M4/1CIOaukd0nv+ovofvKE8gf7PZmYcBzVOIfFFGIAAK9XUGABGVEAW2AAGVlgIAGQgVJgIJADYAOBUpBZYABRWVJgAFJgAPNbYACAUmAA81tZWWAgAZCBUmAgkANgABlZYCABkIFSYCCQA2ADgVKBUpBWW2AgAVFRWVCAkVBQgJBQkFZbUFCCkVBQYgAAjFaFMi4xLjAhVoVW" ,
"deposit" : 10 ,
"vm_version" : 3
}
}
method: channels.update.call_contract
params:
Name
Type
Description
Required
contract_id
contract id
contract to call
Yes
call_data
call data
call data
Yes
abi_version
integer
call abi version
Yes
amount
integer
amount of coins to transfer to contract
Yes
block_hash
string
The on-chain block hash to pin the off-chain environment
No
meta
array of strings
Meta information about the update
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.update.call_contract" ,
"params" : {
"abi_version" : 1 ,
"amount" : 0 ,
"call_data" : "cb_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBo8mdjOP9QiDmrpHdJ7/qL6H7yhPIH+z2ZmHAc1TiHxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACo7dbVl" ,
"contract_id" : "ct_2Yy7TpPUs7SCm9jkCz7vz3nkb18zs78vcuVQGbgjRaWQNTWpm5"
}
}
Roles:
method: channels.message
params:
Name
Type
Description
Required
to
string
Receiver's address
Yes
info
string
Message body
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.message" ,
"params" : {
"info" : "hejsan" ,
"to" : "ak_nQpnNuBPQwibGpSJmjAah6r3ktAB7pG9JHuaGWHgLKxaKqEvC"
}
}
Receiver receives message
method: channels.message
params:
Name
Type
Description
Required
channel_id
string
channel id
Yes
data
object
data field that contains the message
Yes
Name
Type
Description
Required
message
object
the message itself
Yes
Name
Type
Description
Required
channel_id
string
channel id
Yes
from
string
Sender's address
Yes
to
string
Receiver's address
Yes
info
string
Message body
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.message" ,
"params" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"data" : {
"message" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"from" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm" ,
"info" : "hejsan" ,
"to" : "ak_nQpnNuBPQwibGpSJmjAah6r3ktAB7pG9JHuaGWHgLKxaKqEvC"
}
}
} ,
"version" : 1
}
Roles:
Closer initiate mutual close
method: channels.shutdown
params:
Name
Type
Description
Required
block_hash
string
The on-chain block hash to pin the off-chain environment
No
fee
integer
The on-chain transaction fee to be used. If not provided the FSM picks a value for the client
No
gas_price
integer
the gas_price to be used for the fee computation
No
nonce
integer
the nonce to be used in the transaction
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.shutdown" ,
"params" : { }
}
Closer receives mutual close
method: channels.sign.shutdown_sign
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
closing data
Yes
Name
Type
Description
Required
signed_tx
string
channel_close_mutual_tx
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.shutdown_sign" ,
"params" : {
"channel_id" : "ch_iNuPMRW1pCL17hXT8nHQgW1vMKfpBdsvztuYdM2VpPRh8PYVP" ,
"data" : {
"signed_tx" : "tx_+F01Aa..." ,
"updates" : [ ]
}
} ,
"version" : 1
}
Closer returns an authenticated mutual close
method: channels.shutdown_sign
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_close_mutual_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.shutdown_sign" ,
"params" : {
"signed_tx" : "tx_+KcLAfhC..."
}
}
Acknowledger receives mutual close
method: channels.sign.shutdown_sign_ack
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
closing data
Yes
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_close_mutual_tx
transaction
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.shutdown_sign_ack" ,
"params" : {
"channel_id" : "ch_iNuPMRW1pCL17hXT8nHQgW1vMKfpBdsvztuYdM2VpPRh8PYVP" ,
"data" : {
"signed_tx" : "tx_+KcLAfhC..."
"updates" : [ ]
}
} ,
"version" : 1
}
Acknowledger returns an authenticated mutual close
method: channels.shutdown_sign_ack
params:
Name
Type
Description
Required
signed_tx
string
co-authenticated channel_close_mutual_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.shutdown_sign_ack" ,
"params" : {
"signed_tx" : "tx_+KcLAf..."
}
}
Roles:
Snapshotter is prompted to snapshot (not mandatory step)
method: channels.on_chain_tx
params:
Name
Type
Description
Required
info
string
"can_snapshot"
Yes
tx
string
the last on-chain transaction that could be disputed by a snapshot
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.on_chain_tx" ,
"params" : {
"channel_id" : "ch_rb..." ,
"data" : {
"info" : "can_snapshot" ,
"tx" : "tx_+NIL..." ,
"type" : "channel_offchain_tx"
}
} ,
"version" : 1
}
Snapshotter initiates solo snapshot
method: channels.snapshot_solo
params:
Name
Type
Description
Required
fee
integer
The on-chain transaction fee to be used. If not provided the FSM picks a value for the client
No
gas_price
integer
the gas_price to be used for the fee computation
No
nonce
integer
the nonce to be used in the transaction
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.snapshot_solo" ,
"params" : { }
}
Snapshotter receives solo snapshot
method: channels.sign.snapshot_solo_tx
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
closing data
Yes
Name
Type
Description
Required
signed_tx
string
channel_snapshot_solo_tx
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
empty list
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.snapshot_solo_tx" ,
"params" : {
"channel_id" : "ch_s8RwBYpaPCPvUxvDsoLxH9KTgSV6EPGNjSYHfpbb4BL4qudgR" ,
"data" : {
"signed_tx" : "tx_+QGfNgGhBn..." ,
"updates" : [ ]
}
} ,
"version" : 1
}
Snapshotter returns an authenticated solo snapshot
method: channels.snapshot_solo_sign
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_snapshot_solo_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.snapshot_solo_sign" ,
"params" : {
"signed_tx" : "tx_+QHrCwH4Q..."
}
}
Roles:
Forcer initiates a force progress
method: channels.force_progress
params:
Name
Type
Description
Required
contract_id
contract id
contract to call
Yes
call_data
call data
call data
Yes
abi_version
integer
call abi version
Yes
amount
integer
amount of coins to transfer to contract
Yes
gas_price
integer
the gas_price to be used for the fee computation and the update execution
Yes
gas
integer
gas limit, if not provided 1000000
is the default value
No
nonce
integer
the nonce to be used in the transaction
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.force_progress" ,
"params" : {
"abi_version" :1 ,
"amount" :10 ,
"call_data" :"cb_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCzVg5SHSPanMS8lSeSX8SFfJMeAfEkyR6oKfQhD6XCTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5gCcXw==" ,
"contract_id" :"ct_5XjcY6aaohWVHf6WSKcZKuMKYL3CfwopJRCnwqSaEgJUGrpbP" ,
"gas_price" :1000005554
}
}
Forcer receives a prepared force progress transaction to authenticate
method: channels.sign.force_progress_tx
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
closing data
Yes
Name
Type
Description
Required
signed_tx
string
channel_force_progress_tx
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
a list of a single update
Yes
Name
Type
Description
Required
amount
integer
the coins amount given to the off-chain contract
Yes
abi_version
integer
abi version
Yes
call_data
integer
contract execution call data
Yes
call_stack
list
contract execution call stack
Yes
caller_id
string
ID of the caller
Yes
contract_id
string
contract ID to be executed
Yes
gas
integer
gas limit
Yes
gas_price
integer
gas price
Yes
op
string
"OffChainCallContract"
Yes
{
"jsonrpc" :"2.0" ,
"method" :"channels.sign.force_progress_tx" ,
"params" :{
"channel_id" :"ch_2FdiLKkRUdPw4oTRbB6i3M6pquogzWLABQjU373hizDbnD8gGC" ,
"data" :{
"signed_tx" :"tx_+Qi9CwHAuQi3+Qi0ggIJAaEGpOwMCfoYc3a/I2vKzIEkYklqkIO6LDpXh4sHPnU2IZOhAUGdEqxeUDVR0dMSvrn5kgnI7MCgbE412qfo/e6zcbfpuNT40gsB+IS4QDztVfzqw4CHrPqY1EMb3OI5pu8D1iIcRa+8K7yetgfwsTy04V+3ZPqYKX34MWRRcu3oz2J+o77d60iLodZejQ+4QM8zP15Bb+brrqv4VxHKWb8eJdovI1XXBqceMzjp57xB2XDhvo3Z8p4a4q1QIlrLwIbQwa6WvwWDEicP291KeQ+4SPhGOQKhBqTsDAn6GHN2vyNrysyBJGJJapCDuiw6V4eLBz51NiGTCqAWDGetqqq6aiGWiS4l3uuab9shxnKpX/eHATvwZuaxtgu4uPi2ggI+AaEBQZ0SrF5QNVHR0xK+ufmSCcjswKBsTjXap+j97rNxt+mhBQk/K00P/64rJh6AN7FdhCCeaFuDwHK/U6ykDlVuchqTAQqDD0JAhDuaygC4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgs1YOUh0j2pzEvJUnkl/EhXyTHgHxJMkeqCn0IQ+lwk4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCgL7JwstDycCivqhTv6EM5k7XOiUu6Eqs3O0xsZZWp52e5Bq35Bqo+ALkFHPkFGYICbQG5BRL5BQ8/AfkFCrjp+OdAAaIJPytND/+uKyYegDexXYQgnmhbg8Byv1OspA5VbnIakxABuMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoP//////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4afhnQAGiCT8rTQ//rismHoA3sV2EIJ5oW4PAcr9TrKQOVW5yGpMQALhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF6blQAGhCT8rTQ//rismHoA3sV2EIJ5oW4PAcr9TrKQOVW5yGpMQALkDivkDh0ABoAk/K00P/64rJh6AN7FdhCCeaFuDwHK/U6ykDlVuchqTuQNh+QNeKAGhAUGdEqxeUDVR0dMSvrn5kgnI7MCgbE412qfo/e6zcbfpgwYAAbkDL/kDLEYDoJnmGxx3qr0YN2L2wdDpM+BiYxsmyMsKDpL3sgDTSEv1+QG5+MqgSexJB2wCA3EmpDMD6tzkOy4sMpRXsRPFCn4i3ImAlLeDZ2V0AbhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////////////////////////uEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Ougs1YOUh0j2pzEvJUnkl/EhXyTHgHxJMkeqCn0IQ+lwk6EdGljawG4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////////////7hgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////////////////////////uQFBYgAAj2IAAMKRgICAUX9J7EkHbAIDcSakMwPq3OQ7LiwylFexE8UKfiLciYCUtxRiAAE2V1CAgFF/4iMdbN/JORbeTLOphXv2XPQPwlb0oUmLP358mAwZk0QUYgAA0VdQgFF/s1YOUh0j2pzEvJUnkl/EhXyTHgHxJMkeqCn0IQ+lwk4UYgABG1dQYAEZUQBbYAAZWWAgAZCBUmAgkANgAFmQgVKBUllgIAGQgVJgIJADYAOBUpBZYABRWVJgAFJgAPNbYACAUmAA81tgAFFRkFZbYCABUVGQUIOSUICRUFCAWZCBUllgIAGQgVJgIJADYAAZWWAgAZCBUmAgkANgAFmQgVKBUllgIAGQgVJgIJADYAOBUoFSkFCQVltQWVBQYABRYAFgAFFRAVmQgVKQUGAAUlmQVltQUFlQUGIAAMpWh3Vua25vd24AgAHACrjJ+MeCAm4BuMH4vz8B+Lu4ufi3QAG4QAk/K00P/64rJh6AN7FdhCCeaFuDwHK/U6ykDlVuchqTa2GTqNrr2nMd48MdKc8JN9Nwp9TqcnYf75jTlsHbOUK4cfhvKQKhARWTe3J86e4I2ONhtRn6CWKhmvE45Tiks+kwMjCU4PXXCgqhBQk/K00P/64rJh6AN7FdhCCeaFuDwHK/U6ykDlVuchqTAYIBfKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwDAismCAm8BhMM/AcCKyYICcAGEwz8BwIrJggJxAYTDPwHAuJv4mYICcgG4k/iRPwH4jbDvQAGgQZ0SrF5QNVHR0xK+ufmSCcjswKBsTjXap+j97rNxt+mLygoBAIY/qiUiX/Ww70ABoBWTe3J86e4I2ONhtRn6CWKhmvE45Tiks+kwMjCU4PXXi8oKAQCGJGE5yoABqulAAaAJPytND/+uKyYegDexXYQgnmhbg8Byv1OspA5VbnIak4XECgEACgCHAcHasWYYAAJu5C+M" ,
"updates" :[
{
"abi_version" :1 ,
"amount" :10 ,
"call_data" :"cb_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCzVg5SHSPanMS8lSeSX8SFfJMeAfEkyR6oKfQhD6XCTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5gCcXw==" ,
"call_stack" :[
] ,
"caller_id" :"ak_Vu1cGq2d3Dpo9gP7pVJc8KMubXr8PjuX51b4yyJmFDcXgTZxT" ,
"contract_id" :"ct_55CN7nU2xnfkEUQbe9Aai4xwLEcRyTjYS2zmVpcHtFFqHLVX6" ,
"gas" :1000000 ,
"gas_price" :1000000000 ,
"op" :"OffChainCallContract"
}
]
}
} ,
"version" :1
}
Forcer returns an authenticated force progress transaction
method: channels.force_progress_sign
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_snapshot_solo_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.force_progress_sign" ,
"params" : {
"signed_tx" : "tx_+QkACwH4Qrh..."
}
}
method: channels.dry_run.call_contract
params:
Name
Type
Description
Required
contract_id
contract id
contract to call
Yes
call_data
call data
call data
Yes
abi_version
integer
call abi version
Yes
amount
integer
amount of coins to transfer to contract
Yes
block_hash
string
The on-chain block hash to pin the off-chain environment
No
meta
array of strings
Meta information about the update
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.dry_run.call_contract" ,
"params" : {
"abi_version" : 1 ,
"amount" : 0 ,
"call_data" : "cb_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBo8mdjOP9QiDmrpHdJ7/qL6H7yhPIH+z2ZmHAc1TiHxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACo7dbVl" ,
"contract_id" : "ct_2Yy7TpPUs7SCm9jkCz7vz3nkb18zs78vcuVQGbgjRaWQNTWpm5"
}
}
method: channels.on_chain_tx
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
closing data
Yes
Name
Type
Description
Required
info
string
specific type of event
Yes
signed_tx
string
a mutually authenticated transaction that is posted on-chain
Yes
type
transaction type
Yes
The info
values could be:
"funding_signed"
- reported by the initiator
, indicating that a channel_create_tx
has been
singly authenticated by the initiator
client, and sent to the responder
for co-signing.
"funding_created"
- reported by the responder
, indicating that a channel_create_tx
has been
co-authenticated, and will be pushed to the mempool.
"deposit_signed"
- reported by the depositor
, indicating that a channel_deposit_tx
has been
singly authenticated by the depositor
client, and sent to the acknowledger
for co-signing.
"deposit_created"
- reported by the acknowledger
, indicating that a channel_deposit_tx
has been
co-authenticated, and will be pushed to the mempool.
"withdraw_signed"
- reported by the withdrawer
, indicating that a channel_withdraw_tx
has been
singly authenticated by the withdrawer
client, and sent to the acknowledger
for co-signing.
"withdraw_created"
- reported by the acknowledger
, indicating that a channel_withdraw_tx
has been
co-authenticated, and will be pushed to the mempool.
"channel_changed"
- reported by both parties, indicating that the fsm has detected a channel-related
transaction on-chain. Note that this will be reported also for the channel_create_tx
, once it
appears on-chain. This means that each client will get two on_chain_tx
reports for the
create, deposit, withdraw and close_mutual transactions.
"close_mutual"
- reported by both parties, indicating that a channel_close_mutual_tx
has been
co-authenticated, and will be pushed to the mempool.
"channel_closed"
- reported by both parties, when the on-chain channel state is detected to transition
to a closed
state.
"solo_closing"
- reported by both parties, when the on-chain channel state is detected to transition
to a proper solo_closing
state - that is, with the latest known state.
"can_slash"
or "can_snapshot"
- reported by both parties, when the
on-chain channel state is seen to transition into an improper state -
that is, when there exists a later mutually authenticated state than the
one reported by either party on-chain. If the channel is not yet closing -
that could be a malicious channel_force_progress_tx
and the reported
info
value is "can_snapshot"
. If the malicious on-chain transaction is
channel_close_solo_tx
or the channel is already closing and a
channel_force_progress_tx
is received - then the info
is "can_slash"
.
Other transactions with an older round
than the latest off-chain are not
considered harmful.
{
"jsonrpc" : "2.0" ,
"method" : "channels.on_chain_tx" ,
"params" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"data" : {
"info" : "deposit_signed" ,
"signed_tx" : "tx_+KcLAf..."
"type" : "channel_deposit_tx"
}
} ,
"version" : 1
}
Roles:
Closer initiated solo close
method: channels.close_solo
params:
Name
Type
Description
Required
fee
integer
The on-chain transaction fee to be used. If not provided the FSM picks a value for the client
No
gas_price
integer
the gas_price to be used for the fee computation
No
nonce
integer
the nonce to be used in the transaction
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.close_solo" ,
"params" : { }
}
Closer receives solo close
method: channels.sign.close_solo_sign
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
closing data
Yes
Name
Type
Description
Required
signed_tx
string
channel_close_solo_tx
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.close_solo_sign" ,
"params" : {
"channel_id" : "ch_s8RwBYpaPCPvUxvDsoLxH9KTgSV6EPGNjSYHfpbb4BL4qudgR" ,
"data" : {
"signed_tx" : "tx_+QGfNgGhBn..." ,
"updates" : [ ]
}
} ,
"version" : 1
}
Closer returns an authenticated solo close
method: channels.close_solo_sign
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_close_solo_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.close_solo_sign" ,
"params" : {
"signed_tx" : "tx_+QHrCwH4Q..."
}
}
Roles:
method: `channels.slash
params:
Name
Type
Description
Required
fee
integer
The on-chain transaction fee to be used. If not provided the FSM picks a value for the client
No
gas_price
integer
the gas_price to be used for the fee computation
No
nonce
integer
the nonce to be used in the transaction
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.slash" ,
"params" : { }
}
method: channels.sign.slash_tx
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
closing data
Yes
Name
Type
Description
Required
signed_tx
string
channel_slash_tx
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.slash_tx" ,
"params" : {
"channel_id" : "ch_s8RwBYpaPCPvUxvDsoLxH9KTgSV6EPGNjSYHfpbb4BL4qudgR" ,
"data" : {
"signed_tx" : "tx_+QLDCwHAuQ..." ,
"updates" : [ ]
}
} ,
"version" : 1
}
Slasher returns an authenticated slash
method: `channels.slash_sign
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_slash_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.slash_sign" ,
"params" : {
"signed_tx" : "tx_+QMGCwH4Qr..."
}
}
Roles:
Slasher is prompted to slash
method: channels.on_chain_tx
params:
Name
Type
Description
Required
info
string
"can_slash"
Yes
tx
string
the last on-chain transaction that could be slashed
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.on_chain_tx" ,
"params" : {
"channel_id" : "ch_rb..." ,
"data" : {
"info" : "can_slash" ,
"tx" : "tx_+NIL..." ,
"type" : "channel_offchain_tx"
}
} ,
"version" : 1
}
{
"id" : - 576460752303423374 ,
"jsonrpc" : "2.0" ,
"method" : "channels.slash"
}
method: channels.sign.slash
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
slashing data
Yes
Name
Type
Description
Required
signed_tx
string
channel_slash
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
empty list of updates updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.slash" ,
"params" : {
"channel_id" : "ch_s8RwBYpaPCPvUxvDsoLxH9KTgSV6EPGNjSYHfpbb4BL4qudgR" ,
"data" : {
"signed_tx" : "tx_+QGfNgGhBn..." ,
"updates" : [ ]
}
} ,
"version" : 1
}
Slasher returns an authenticated slash
method: channels.slash_sign
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_slash
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.slash_sign" ,
"params" : {
"signed_tx" : "tx_+QHrCwH4Q..."
}
}
Roles:
method: channels.settle
params:
Name
Type
Description
Required
fee
integer
The on-chain transaction fee to be used. If not provided the FSM picks a value for the client
No
gas_price
integer
the gas_price to be used for the fee computation
No
nonce
integer
the nonce to be used in the transaction
No
{
"jsonrpc" : "2.0" ,
"method" : "channels.settle" ,
"params" : { }
}
method: channels.sign.settle_sign
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
settle data
Yes
Name
Type
Description
Required
signed_tx
string
channel_settle_tx
transaction wrapped in a signed_tx
with no authentication
Yes
updates
list
off-chain updates
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.sign.settle_sign" ,
"params" : {
"channel_id" : "ch_s8RwBYpaPCPvUxvDsoLxH9KTgSV6EPGNjSYHfpbb4BL4qudgR" ,
"data" : {
"signed_tx" : "tx_+F04AaE..." ,
"updates" : [ ]
}
} ,
"version" : 1
}
Settler returns an authenticated settle
method: channels.settle_sign
params:
Name
Type
Description
Required
signed_tx
string
solo-authenticated channel_settle_tx
transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.settle_sign" ,
"params" : {
"signed_tx" : "tx_+KcLAfhCuEBdI..."
}
}
Roles:
{
"jsonrpc" : "2.0" ,
"method" : "channels.leave" ,
"params" : { }
}
Leaver and Acknowledger inform their clients
method: channels.leave
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
closing data
Yes
Name
Type
Description
Required
state
string
a mutually authenticated last state transaction
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.leave" ,
"params" : {
"channel_id" : "ch_s8RwBYpaPCPvUxvDsoLxH9KTgSV6EPGNjSYHfpbb4BL4qudgR" ,
"data" : {
"state" : "tx_+QENCwH4hLh..."
}
} ,
"version" : 1
}
method: channels.info
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
info data
Yes
Name
Type
Description
Required
event
string
event description
Yes
{
"jsonrpc" : "2.0" ,
"method" : "channels.info" ,
"params" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"data" : {
"event" : "own_deposit_locked"
}
} ,
"version" : 1
}
method: channels.get.offchain_state
Field name
Value
trees
channel state trees
calls
channel call state tree
half_signed_tx
channel latest half authenticated tx or ''
if equal to latest authenticated tx
signed_tx
channel latest mutually authenticated tx or ''
if not available
{
"id" : - 576460752303423469 ,
"jsonrpc" : "2.0" ,
"method" : "channels.get.offchain_state" ,
"params" : { }
}
{
"channel_id" : "ch_2Jkzb1BVaA888pdNgxoBjJWQKCMiJRxjLbG972dH6cSC3ULwGK" ,
"id" : - 576460752303423469 ,
"jsonrpc" : "2.0" ,
"result" : {
"calls" : "cs_yYICbgGEwz8BwHtqgWY=" ,
"half_signed_tx" : "" ,
"signed_tx" : "tx_+QEhCwH4hLhA..." ,
"trees" : "ss_+Ks+AIrJggJtAY..."
} ,
"version" : 1
}
method: channels.get.contract
params:
Name
Type
Description
Required
pubkey
string
requested contract pubkey
Yes
Field name
Value
contract
object with contract details
contract->id
contract id (equals to the requested pubkey)
contract->owner_id
contract owner id
contract->vm_version
contract vm version (integer)
contract->abi_version
contract ABI version (integer)
contract->active
"is contract active?" boolean
contract->referrer_ids
referrer ids list
contract->deposit
contract deposit
contract_state
object with contract state
{
"id" : - 576460752303423430 ,
"jsonrpc" : "2.0" ,
"method" : "channels.get.contract" ,
"params" : {
"pubkey" : "ct_uBX2jBr5bPEzD1uGFmV4i7JrGLtpEeLqPU29HvkZCv5iHcY4M"
}
}
{
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"id" : - 576460752303423430 ,
"jsonrpc" : "2.0" ,
"result" : {
"contract" : {
"abi_version" : 1 ,
"active" : true ,
"deposit" : 10 ,
"id" : "ct_uBX2jBr5bPEzD1uGFmV4i7JrGLtpEeLqPU29HvkZCv5iHcY4M" ,
"owner_id" : "ak_2MGLPW2CHTDXJhqFJezqSwYSNwbZokSKkG7wSbGtVmeyjGfHtm" ,
"referrer_ids" : [ ] ,
"vm_version" : 3
} ,
"contract_state" : {
"ck_AAAAAAAAAAAAAAAAAAAAAAA..." : "cv_sbV3vNMnyznlXmwCa9anShs13mwGUMSuUe+rdZ5BW2YlrDqa" ,
"ck_AAAAAAAAAAAAAAAAAAAAAAA..." : "cv_sbV3vNMnyznlXmwCa9anShs13mwGUMSuUe+rdZ5BW2YlrDqa" ,
"ck_AAAAAAAAAAAAAAAAAAAAAAA..." : "cv_sbV3vNMnyznlXmwCa9anShs13mwGUMSuUe+rdZ5BW2YlrDqa" ,
"ck_AAAAAAAAAAAAAAAAAAAAAAA..." : "cv_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..." ,
"ck_AAAAAAAAAAAAAAAAAAAAAAA..." : "cv_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..." ,
"ck_ABQG4Fg=" : "cv_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDIq10LA12xQcUbe3+xpb7..." ,
"ck_AZwSz9w=" : "cv_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA..." ,
"ck_AhzDreo=" : "cv_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPJ9AW0"
}
} ,
"version" : 1
}
method: channels.system
params:
Name
Type
Description
Required
action
string
the value "ping"
Yes
method: channels.system
params.data:
Field name
Value
action
"system"
tag
"pong"
{
"jsonrpc" : "2.0" ,
"method" : "channels.system" ,
"params" : {
"action" : "ping"
}
}
{
"jsonrpc" : "2.0" ,
"method" : "channels.system.pong" ,
"params" : {
"channel_id" : "ch_zVDx935M1AogqZrNmn8keST2jH8uvn5kmWwtDqefYXvgcCRAX" ,
"data" : {
"action" : "system" ,
"tag" : "pong"
}
} ,
"version" : 1
}
method: channels.initiator_sign | channels.responder_sign | channels.deposit_tx | channels.deposit_ack | channels.withdraw_tx | channels.withdraw_ack | channels.responder_sign | channels.snapshot_solo_tx | channels.snapshot_solo_sign | channels.shutdown_sign | channels.shutdown_sign_ack | channels.update | channels.update_ack | channels.close_solo_tx | channels.close_solo_sign | channels.slash_tx | channels.slash_sign | channels.settle_tx | channels.settle_sign
params:
Name
Type
Description
Required
error
integer
error code
Yes
It is possible to return an error object in a signing reply. This will abort the ongoing sequence, and the FSM will
fall back to the latest mutually-signed state. Currently defined error codes are:
1: validation error
2: conflict (typically, race condition)
3: timeout
4: abort
128...65535: user-defined
{
"id" : - 576460752303423252 ,
"jsonrpc" : "2.0" ,
"method" : "channels.update" ,
"params" : {
"error" : 147
}
}
Successful operation response
method: channels.info
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
data
object
message data
Yes
Name
Type
Description
Required
event
string
aborted_update
Yes
Name
Type
Description
Required
message
string
Not allowed at current channel state
Yes
code
integer
1018
Yes
If the abort of the update is successful, the client that aborted receives a
message for it:
{
"jsonrpc" :"2.0" ,
"method" :"channels.info" ,
"params" :{
"channel_id" :"ch_95YaTDZAysRu3GkmW2yKkCK1H4fGtcttoj2qwFDfUSduTpCPf" ,
"data" :{
"event" :"aborted_update"
}
} ,
"version" :1
}
If the other participant had initiated the update that our client had aborted,
the other participant's FSM will inform its client of each error, using a
conflict
report.
{
"jsonrpc" : "2.0" ,
"method" : "channels.conflict" ,
"params" : {
"channel_id" : "ch_Bx4x8rvNpeHe2LtnDNqyqCvguqX5jEeotUDk5cRXH3mEXzy77" ,
"data" : {
"channel_id" : "ch_Bx4x8rvNpeHe2LtnDNqyqCvguqX5jEeotUDk5cRXH3mEXzy77" ,
"error_code" : 147 ,
"error_msg" : "user-defined" ,
"round" : 5
}
} ,
"version" : 1
}
Unsuccessful operation response
method: the request method
params:
Name
Type
Description
Required
channel_id
string
channel ID
Yes
error
object
error data object
Yes
Name
Type
Description
Required
message
string
Rejected
Yes
code
integer
the error code provided
Yes
data
json
error description
Yes
request
json
the failed request
Yes
Name
Type
Description
Required
message
string
Not allowed at current channel state
Yes
code
integer
1018
Yes
If the specified update abort can not be performed now, the request receives
the following error:
{
"channel_id" :"ch_95YaTDZAysRu3GkmW2yKkCK1H4fGtcttoj2qwFDfUSduTpCPf" ,
"error" :{
"code" :3 ,
"data" :[
{
"code" :1018 ,
"message" :"Not allowed at current channel state"
}
] ,
"message" :"Rejected" ,
"request" :{
"jsonrpc" :"2.0" ,
"method" :"channels.update" ,
"params" :{
"error" :147
}
}
} ,
"id" :null ,
"jsonrpc" :"2.0" ,
"version" :1
}