{"action":"opened","issue":{"url":"https://api.github.com/repos/chris-belcher/joinmarket/issues/10","labels_url":"https://api.github.com/repos/chris-belcher/joinmarket/issues/10/labels{/name}","comments_url":"https://api.github.com/repos/chris-belcher/joinmarket/issues/10/comments","events_url":"https://api.github.com/repos/chris-belcher/joinmarket/issues/10/events","html_url":"https://github.com/chris-belcher/joinmarket/issues/10","id":56070560,"number":10,"title":"Messaging protocol","user":{"login":"AdamISZ","id":4278257,"avatar_url":"https://avatars.githubusercontent.com/u/4278257?v=3","gravatar_id":"","url":"https://api.github.com/users/AdamISZ","html_url":"https://github.com/AdamISZ","followers_url":"https://api.github.com/users/AdamISZ/followers","following_url":"https://api.github.com/users/AdamISZ/following{/other_user}","gists_url":"https://api.github.com/users/AdamISZ/gists{/gist_id}","starred_url":"https://api.github.com/users/AdamISZ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AdamISZ/subscriptions","organizations_url":"https://api.github.com/users/AdamISZ/orgs","repos_url":"https://api.github.com/users/AdamISZ/repos","events_url":"https://api.github.com/users/AdamISZ/events{/privacy}","received_events_url":"https://api.github.com/users/AdamISZ/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-01-30T18:57:12Z","updated_at":"2015-01-30T18:57:12Z","closed_at":null,"body":"Opened to start a discussion.\r\n\r\nHere is a first attempt.\r\n\r\nJoinMarket messaging protocol\r\n=============================\r\n\r\nAll messages are split into fields. Fields are separated with a single whitespace character.\r\n\r\nMessages have format:\r\n    \r\n!command [[msg field 1] [msg field 2] ...] \r\n\r\nMessages are sent in two modes: public (broadcast to all other agents) or private (directed to a specific \r\nagent and not seen by others).\r\n\r\nThe first field always starts with the command indicator '!' and is completed with one of the following commands:\r\n\r\n| Command word    |      | mode |\r\n| :---------:|:----:|:-------:|\r\n| relorder | |public or private |\r\n| absorder | |public or private |\r\n| orderbook | |public |\r\n| relorder | |public or private |\r\n|fill||private|\r\n|pubkey||private|\r\n|auth||private|\r\n|ioauth||private|\r\n|tx||private|\r\n|sig||private|\r\n|error||private|\r\n\r\nPrivate messages not starting with a command from this list are to be explicitly rejected.\r\nPublic messages not starting with a command from this list are to be ignored.\r\nThe initial command field is followed with zero or more message fields. \r\n\r\nChunks\r\n======\r\nMessages are split into chunks for passing over the messaging channel. Chunks are terminated with the chunk \r\nindicator field ';', unless it is the final chunk, which case the chunk indicator field is '~'.\r\n\r\nMessages are split into chunks before sending over the messaging channel, and the decision for chunk size\r\nis set globally as a function of the messaging implementation (e.g.: approx 350 characters for IRC).\r\n\r\nEncryption\r\n==========\r\nPublic messages (broadcast to all other participants) are never encrypted.\r\n\r\nPrivate messages of command-type 'fill', 'pubkey' and 'error', 'relorder' and 'absorder' are sent in plaintext.\r\nMessages of command-type 'ioauth', 'auth', 'tx' and 'sig' are sent encrypted.\r\n\r\nFor encrypted messages, all message fields are sent as a single encrypted block (including the\r\nwhitespace delimiters between the message fields). The command field and the chunk indicator field are sent in plaintext.\r\n\r\nValid conversation sequences:\r\n=========================\r\n\r\n| TAKER    |      | MAKER |\r\n| :---------:|:----:|:-------:|\r\n|| <<<| ![rel\\|abs]order (public)|\r\n\r\n| TAKER    |      | MAKER |\r\n| :---------:|:----:|:-------:|\r\n|!orderbook(public)|>>>||\r\n|| <<<| ![rel\\|abs]order (private)|\r\n\r\n| TAKER    |      | MAKER |\r\n| :---------:|:----:|:-------:|\r\n|!fill(public)|>>>||\r\n||<<<|!pubkey(public)|\r\n|!ioauth(private)|>>>||\r\n||<<<|!auth(private)|\r\n|!tx(private)|>>>||\r\n||<<<|!sig(private)|\r\n\r\nEach taker may speak to many makers simultaneously and each maker may speak to many takers simultaneously.\r\n"}}