Hi,
I’m trying to set up off-chain channel for two accounts in my private Aeternity node using WebSocket.
I run Aeternity as a private node locally. Initially, I send some founds to my 2 accounts:
Responder account:
GET http://node:3013/v2/accounts/ak_tWZrf8ehmY7CyB1JAoBmWJEeThwWnDpU4NadUdzxVSbzDgKjP
Result:
{
"balance":5451843000000000000000000,
"id":"ak_tWZrf8ehmY7CyB1JAoBmWJEeThwWnDpU4NadUdzxVSbzDgKjP",
"kind":"basic",
"nonce":0
}
Initiator account:
GET http://node:3013/v2/accounts/ak_fUq2NesPXcYZ1CcqBcGC3StpdnQw3iVxMA3YSeCNAwfN4myQk
Result:
{
"balance":5451843000000000000000000,
"id":"ak_fUq2NesPXcYZ1CcqBcGC3StpdnQw3iVxMA3YSeCNAwfN4myQk",
"kind":"basic",
"nonce":0
}
I followed this tutorial.
-
Opening WebSocket for responder using this URL:
ws://node:3014/channel?channel_reserve=2&initiator_amount=3000&initiator_id=any&lock_period=10&port=3333&protocol=json-rpc&push_amount=1&responder_amount=3000&responder_id=ak_tWZrf8ehmY7CyB1JAoBmWJEeThwWnDpU4NadUdzxVSbzDgKjP&role=responder
-
Opening WebSocket for initiator using this URL:
ws://node:3014/channel?channel_reserve=2&host=localhost&initiator_amount=3000&initiator_id=ak_fUq2NesPXcYZ1CcqBcGC3StpdnQw3iVxMA3YSeCNAwfN4myQk&lock_period=10&port=3333&protocol=json-rpc&push_amount=1&responder_amount=3000&responder_id=ak_tWZrf8ehmY7CyB1JAoBmWJEeThwWnDpU4NadUdzxVSbzDgKjP&role=initiator
-
Responder got message:
{
"jsonrpc":"2.0",
"method":"channels.info",
"params":{
"channel_id":null,
"data":{
"event":"channel_open"
}
},
"version":1
}
- Initiator got response:
{
"jsonrpc":"2.0",
"method":"channels.info",
"params":{
"channel_id":null,
"data":{
"event":"channel_accept"
}
},
"version":1
}
- Initiator got message with transaction to sign:
{
"jsonrpc":"2.0",
"method":"channels.sign.initiator_sign",
"params":{
"channel_id":null,
"data":{
"signed_tx":"tx_+IALAcC4e/h5MgGhAVdfgf+wope3cl3GcdoLF2mx/Fy+RThce1rR/C6vHWCdggu4oQF09Y/rp1KuBCbsvuOjFBTY5rMzXWTsQW8+V04QbH5UEoILuAIKAIYbSOtX4ADAoH/Xn0I4ZH5bOewYl3WluY4D11uLidZ46txRrVUm6XNvAbj/v+Q=",
"updates":[
]
}
},
"version":1
}
- Initiator signs transaction using his private key and sends message on his channel:
{
"jsonrpc":"2.0",
"method":"channels.initiator_sign",
"params":{
"signed_tx":"tx_+MoLAfhCuEB/8CyPkQ3XuAZY+5ArCJUd3JwteDy7W0Rz1U6bYdoCj9kFStB5rNcBIAGBM9183jNl2/g+8nAeMyFM68IsPUABuIL4gAsBwLh7+HkyAaEBV1+B/7Cil7dyXcZx2gsXabH8XL5FOFx7WtH8Lq8dYJ2CC7ihAXT1j+unUq4EJuy+46MUFNjmszNdZOxBbz5XThBsflQSggu4AgoAhhtI61fgAMCgf9efQjhkfls57BiXdaW5jgPXW4uJ1njq3FGtVSbpc28B43JyBg=="
}
}
Then I expected a message to responder with transaction to sign - but it never happens. After a few seconds I channel closes and in node logs I can see:
19:03:34.299 [error] CAUGHT exit:{noproc,{gen_server,call,[<0.20569.2>,close]}}, [{gen_server,call,2,[{file,"gen_server.erl"},{line,206}]},{aesc_session_noise,close,1,[{file,"/app/apps/aechannel/src/aesc_session_noise.erl"},{line,103}]},{aesc_fsm,terminate,3,[{file,"/app/apps/aechannel/src/aesc_fsm.erl"},{line,1953}]},{gen_statem,terminate,6,[{file,"gen_statem.erl"},{line,1828}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]
What I’m doing wrong?
I’m using Aeternity node v.4.0.0 and WebSocket Test Client (chrome plugin). For signing transaction I’m using Java SDK.
When I intentionally signed transaction with some random private key, I got error message as expected:
{
"channel_id":null,
"error":{
"code":3,
"data":[
{
"code":1010,
"message":"Broken encoding: transaction"
}
],
"message":"Rejected",
"request":{
"jsonrpc":"2.0",
"method":"channels.initiator_sign",
"params":{
"signed_tx":"tx_+MoLAfhCuEB/8CyPkQ3XuAZY+5ArCJUd3JwteDy7W0Rz1U6bYdoCj9kFStB5rNcBIAGBM9183jNl2/g+8nAeMyFM68IsPUABuIL4gAsBwLh7+HkyAaEBV1+B/7Cil7dyXcZx2gsXabH8XL5FOFx7WtH8Lq8dYJ2CC7ihAXT1j+unUq4EJuy+46MUFNjmszNdZOxBbz5XThBsflQSggu4AgoAhhtI61fgAMCgf9efQjhkfls57BiXdaW5jgPXW4uJ1njq3FGtVSbpc28B43JyBg1=="
}
}
},
"id":null,
"jsonrpc":"2.0",
"version":1
}
Could you please give me some advices how to properly use WebSocket & channel api?