You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Adam Gibson 09443792a7
improved instructions, update pytest reqs
9 years ago
jmbase Completed coverage of jmbitcoin, jmbase, jmclient 9 years ago
jmbitcoin Completed coverage of jmbitcoin, jmbase, jmclient 9 years ago
jmclient can run daemon in same process as client; added DAEMON section to cfg 9 years ago
jmdaemon can run daemon in same process as client; added DAEMON section to cfg 9 years ago
scripts can run daemon in same process as client; added DAEMON section to cfg 9 years ago
test Completed coverage of jmbitcoin, jmbase, jmclient 9 years ago
.coveragerc rewrite IRCMC to use twisted 9 years ago
.gitignore reorg user scripts to scripts dir 9 years ago
.travis.yml add travis 9 years ago
INSTALL.md improved instructions, update pytest reqs 9 years ago
LICENSE Initial commit 9 years ago
README.md improved instructions, update pytest reqs 9 years ago
TESTING.md improved instructions, update pytest reqs 9 years ago
conftest.py Completed coverage of jmdaemon package. 9 years ago
requirements-dev.txt improved instructions, update pytest reqs 9 years ago
setup.cfg Completed coverage of jmdaemon package. 9 years ago
setupall.py Add tests for packages; bitcoin tests working, others in progress 9 years ago

README.md

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.

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, and the specification of the communication between the client and server is isolated to this module. Currently the messaging layer of Joinmarket is IRC-only (but easily extensible, see here. 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).

To install, follow the instructions in INSTALL.md.

Instructions for running command line scripts are in scripts/README.md.

Instructions for developers for testing in TESTING.md.