mirror of
https://github.com/JoinMarket-Org/joinmarket-clientserver.git
synced 2026-08-13 12:33:40 +02:00
29 lines
2 KiB
Markdown
29 lines
2 KiB
Markdown
### Notes on architectural changes
|
|
|
|
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](https://github.com/JoinMarket-Org/JoinMarket-Docs/blob/master/Joinmarket-messaging-protocol.md) is thus enforced *only* in the server/daemon.
|
|
|
|
The client and server currently communicate using twisted.protocol.amp, see
|
|
[AMP](https://amp-protocol.net/),
|
|
and the specification of the communication between the client and server is isolated to
|
|
[this](https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/src/jmbase/commands.py) module.
|
|
Currently the messaging layer of Joinmarket is IRC-only (but easily extensible, see [here](https://github.com/JoinMarket-Org/joinmarket/issues/650).
|
|
The IRC layer is also implemented here using Twisted, reducing the complexity required with threading.
|
|
|
|
The "server" is just a daemon service that can be run as a separate process (see `scripts/joinmarketd.py`), or for convenience in the same process (the default for command line scripts).
|