Browse Source

update README

master
Adam Gibson 9 years ago
parent
commit
75ac49a6d2
No known key found for this signature in database
GPG Key ID: B3AE09F1E9A3197A
  1. 27
      README.md

27
README.md

@ -1,6 +1,33 @@
# joinmarket-clientserver # joinmarket-clientserver
Joinmarket refactored to separate client and backend operations Joinmarket refactored to separate client and backend operations
Motivation: By separating the code which manages conversation with other
Joinmarket participants from the code which manages this participant's Bitcoin
wallet actions, we get a considerable gain at a minor cost of an additional layer:
code dependencies for each part are much reduced, security requirements of the
server/daemon layer are massively reduced (which can have several advantages such as
it being more acceptable to distribute this layer as a binary), and client code
can be written, implementing application-level logic (do join with coins X under condition X)
using other Bitcoin libraries, or wallets, without knowing anything about
Joinmarket's inter-participant protocol. An example is my work on the Joinmarket
electrum [plugin](https://github.com/AdamISZ/electrum-joinmarket-plugin).
It also
means that updates to the Bitcoin element of Joinmarket, such as P2SH and segwit, should
have extremely minimal to no impact on the backend code, since the latter just implements
communication of a set of formatted messages, and allows the client to decide on
their validity beyond simply syntax.
Joinmarket's own [messaging protocol] is thus enforced *only* in the server/daemon.
The client and server currently communicate using twisted.protocol.amp, see
[AMP](https://amp-protocol.net/) which is a very clean asynchronous messaging protocol,
and the specification of the communication between the client and server is isolated to
[this](https://github.com/AdamISZ/joinmarket-clientserver/blob/master/jmbase/commands.py) module.
The server is currently implemented as a daemon (see `scripts/joinmarketd.py`), in future
it may be convenient to create the option to run it within the same process as the client.
Use `virtualenv` to manage dependencies, e.g. follow this workflow: Use `virtualenv` to manage dependencies, e.g. follow this workflow:
git clone https://github.com/AdamISZ/joinmarket-clientserver git clone https://github.com/AdamISZ/joinmarket-clientserver

Loading…
Cancel
Save