SuperNET icon indicating copy to clipboard operation
SuperNET copied to clipboard

Realtime events types

Open lukechilds opened this issue 7 years ago • 13 comments

Using the new websocket API I'm getting messages with the following method property:

"request" "reserved" "connect" "connected" "tradestatus" "postprice"

Are you able to give a bit more information on what possible methods/messages I should expect and what they mean?

My assumptions are:

request Alice sent out a buy/sell reserved Bob has matched Alice's buy/sell connect Alice tries to start the trade with Bob connected Alice has successfully initiated the trade tradestatus The status of a trade postprice A post in the orderbook

I'm sure these aren't totally correct but they seem to be roughly how they work. Can you explain in any more detail what they mean and let me know if there are other message types I haven't encountered yet?

lukechilds avatar Mar 06 '18 08:03 lukechilds

alice makes a "request" bob potentially responds with "reserved" alice potentially responds with "connect" bob potentially responds with "connected"

after the above (unless something goes wrong) the swap is started

tradestatus is about an ongoing swap

currently all public messages are sent so you can get details on the current overall global network state. by looking inside for your node's pubkey you can filter the global stream to be just about what affects your node.

it is a global stream with everything from everybody, if you dont filter it, it will have a lot of stuff that you wont necessarily care about.

there should also be a "failed" message in case a swap fails and that is only a local event there should also be event messages for the specific tx of a specific swap, you can check the requestid/quoteid to know which swap it is.

I would suggest to make a filter to see if your pubkey is in the "pubkey", "srchash" or "desthash" field, or that requestid/quoteid is about a swap you care about.

That will get rid of 99% of the datastream and make it much easier to correlate with what is happening

jl777 avatar Mar 06 '18 10:03 jl777

I would suggest to make a filter to see if your pubkey is in the "pubkey", "srchash" or "desthash" field, or that requestid/quoteid is about a swap you care about.

Thanks, was already implementing the tradeid, missed the pubkey fields.

Btw, I was filtering based on tradeid, not requestid/quoteid. Is this safe? You mentioned in a previous discussion that tradeid is only local to the daemon and requestid/quoteid are network wide.

However if I changed my query to instead check requestid/quoteid the results where the same. And I could see tradeid from remote network requests.

lukechilds avatar Mar 06 '18 10:03 lukechilds

it isnt dangerous to use tradeid, but you could miss the requestid/quoteid you are interested in. you didnt get any extra events using requestid/quoteid filter?

if so that is a bug. I know, I will add a "method":"update" to the swapstatus update events. give me a minute

jl777 avatar Mar 06 '18 10:03 jl777

OK, its there. "update" method for any change to swap in progress and it will have an "update" field with the name of the tx that is being updated. you might get more than one for a specific tx

it is only a local event so you can just check for update method and process the requestid/quoteid

jl777 avatar Mar 06 '18 10:03 jl777

Thanks, testing that now

lukechilds avatar Mar 07 '18 05:03 lukechilds

you didnt get any extra events using requestid/quoteid filter? if so that is a bug.

Nope, looks like there's a bug. I just did a new trade and tested both and I actually got less results querying via requestid/quoteid:

(messages is an array of every single message received over the WebSocket)

> messages.filter(msg => msg.tradeid === 1914410009)
(9) [Object, Object, Object, Object, Object, Object, Object, Object, Object]

> messages.filter(msg => msg.requestid === 4283696586 && msg.quoteid === 3987110328)
(2) [Object, Object]

I can dump the full message output here if it's helpful, don't wanna spam if it's not. But you can see from the other issue (#645), lots of the messages have tradeid but are missing requestid/quoteid. These are the ones we are missing, we don't seem to get any extra ones that have requestid/quoteid but don't have tradeid.

lukechilds avatar Mar 07 '18 06:03 lukechilds

https://komodo-platform.slack.com/files/U02QSHX81/F9KQX8459/-.sh

here is a typical entry:

{"name":"bobdeposit","coin":"REVS","tx":"010000000147dc15dba328cc389435124254e2bc90cf513325a8971e2cd59daa68b00c8909000000006a47304402205c41ab2a8ef5bb40494ab6235bf09fbf52b984a0e2e82098b23bdcc20dbe834f022029ea45d2f5f7fe972da6277b99a2de81e01e1840db1f1650c76202910d5ec3810121034464397e3e64a9a1e05bf41c2bcf53a3e34972a7c25b6f89b890ea66c90f16b9ffffffff02b3b63a000000000017a914eaaecbc8dd0e95bcbdaf042de788d54572e56a1d879e9a0300000000001976a914ac6637f97ab212cd65c1f0cb8c6d23c61731bf5188ac4809a05a","txid":"2285827f0c3dcf9ed5da3cd4909bac927aace0f0cac852ee23ad2f31df18a467","Bdeposit":"ba8ADAFrHEHnrSpaCf25k1NvpMLq1wjrGX","expiration":1520437576,"iambob":0,"bobcoin":"REVS","alicecoin":"KMD","lock":0,"amount":0.03847859,"Apayment":"bUT5EtVRovuVzwxw5aZ6AB3TeBpuQUumW4","redeem":"63044809a05ab17582012088a91465c1826e7bc1d633485d529aba60d8e52a72e3d4882102a316fbf1abf3b763f5bfc5a63c5e3035aa0da7c0d8c31786e7d0b1ef65d40a6eac6782012088a914daad2c6919166f4fcc4ed221602ad9cdaca0ae14882103f965882d27292befb100fdfdada1c8087079653be4c106bab105ffbfa802c9b1ac68","method":"update","update":"bobdeposit"}}

aha! I see the problem, the requestid/quoteid are missing. I will add them

jl777 avatar Mar 07 '18 11:03 jl777

https://komodo-platform.slack.com/files/U02QSHX81/F9KR8L90T/-.sh

has a version of a swap without garbage at the end

jl777 avatar Mar 07 '18 12:03 jl777

aha! I see the problem, the requestid/quoteid are missing. I will add them

loool, let me know when it's fixed and I'll test again.

lukechilds avatar Mar 07 '18 12:03 lukechilds

its updated

jl777 avatar Mar 07 '18 13:03 jl777

Working, thanks!

> messages.filter(msg => msg.tradeid === 2575306931)
(8) [Object, Object, Object, Object, Object, Object, Object, Object]

> messages.filter(msg => msg.requestid === 488692801 && msg.quoteid === 2737634208)
(7) [Object, Object, Object, Object, Object, Object, Object]

> messages.filter(msg => (msg.tradeid === 2575306931) || (msg.requestid === 488692801 && msg.quoteid === 2737634208))
(12) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]

lukechilds avatar Mar 08 '18 08:03 lukechilds

So to clarify, the possibly update values are: myfee, bobdeposit, alicepayment, bobpayment. After bobpayment the trade is complete. Is that correct?

If any of these steps were to fail, will we get a fail message? Like:

{
  "method":"update",
  "update":"failed",
  ...
}

lukechilds avatar Mar 08 '18 09:03 lukechilds

for alice after alicespend or aliceclaim, the swap is complete, assuming alicepayment went out

for bob it is a bit more complicated, in the case the 3 primary tx were sent, then bob is done when he gets 2 back, usually bobspend and bobrefund, but bobspend could be bobclaim. not sure the best way to do this, 90%+ of the time it follows:

bobdeposit, alicepayment, bobpayment then alicespend, bobspend, bobrefund

probably good to get the mainstream case working smooth before worrying about the exceptions.

also a "failed" of course means something went wrong and the swap is stopped. not 100% sure I got all possible paths to failure, but I tried.

jl777 avatar Mar 08 '18 10:03 jl777