diff --git a/README.md b/README.md index f451813..41abbce 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,33 @@ # joinmarket-clientserver 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: git clone https://github.com/AdamISZ/joinmarket-clientserver