Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: JoinMarket-Org/joinmarket-clientserver
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.9.9
Choose a base ref
...
head repository: JoinMarket-Org/joinmarket-clientserver
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: HEAD
Choose a head ref
Loading
Showing with 4,400 additions and 1,932 deletions.
  1. +1 −12 .coveragerc
  2. +36 −0 .github/workflows/codeql.yml
  3. +20 −0 .github/workflows/openapi-diff.yml
  4. +28 −22 .github/workflows/unittests.yml
  5. +1 −0 .gitignore
  6. +1 −1 Dockerfile
  7. +3 −10 README.md
  8. +8 −4 conftest.py
  9. +18 −20 docs/INSTALL.md
  10. +1 −3 docs/JOINMARKET-QT-GUIDE.md
  11. +14 −2 docs/JSON-RPC-API-using-jmwalletd.md
  12. +4 −7 docs/PAYJOIN.md
  13. +1 −1 docs/SNICKER.md
  14. +3 −3 docs/TESTING.md
  15. +2 −0 docs/USAGE.md
  16. +216 −55 docs/api/wallet-rpc.yaml
  17. +1 −1 docs/architecture-notes.md
  18. +2 −2 docs/fidelity-bonds.md
  19. +14 −22 docs/onion-message-channels.md
  20. +1 −1 docs/release-notes/release-notes-0.4.0.md
  21. +1 −1 docs/release-notes/release-notes-0.5.2.md
  22. +126 −0 docs/release-notes/release-notes-0.9.10.md
  23. +178 −0 docs/release-notes/release-notes-0.9.11.md
  24. +2 −1 docs/tor.md
  25. +7 −6 docs/tumblerguide.md
  26. +36 −50 install.sh
  27. +0 −15 jmbase/setup.py
  28. +0 −14 jmbitcoin/setup.py
  29. +0 −17 jmclient/setup.py
  30. +0 −16 jmdaemon/setup.py
  31. +0 −19 jmqtui/setup.py
  32. +79 −0 pyproject.toml
  33. +0 −4 requirements/base.txt
  34. +0 −9 requirements/gui.txt
  35. +0 −11 requirements/testing.txt
  36. +7 −7 scripts/add-utxo.py
  37. +286 −0 scripts/bumpfee.py
  38. +0 −168 scripts/convert_old_wallet.py
  39. +53 −39 scripts/joinmarket-qt.py
  40. +91 −48 scripts/obwatch/ob-watcher.py
  41. +38 −12 scripts/sendpayment.py
  42. +2 −2 scripts/sendtomany.py
  43. +2 −2 scripts/tumbler.py
  44. +1 −4 scripts/yg-privacyenhanced.py
  45. +1 −4 setup.cfg
  46. +0 −58 setupall.py
  47. +3 −2 {jmbase → src}/jmbase/__init__.py
  48. 0 {jmbase → src}/jmbase/arguments.py
  49. 0 {jmbase → src}/jmbase/bigstring.py
  50. +1 −4 {jmbase → src}/jmbase/bytesprod.py
  51. 0 {jmbase → src}/jmbase/commands.py
  52. +27 −0 src/jmbase/crypto.py
  53. 0 {jmbase → src}/jmbase/proof_of_work.py
  54. +36 −3 {jmbase → src}/jmbase/support.py
  55. 0 {jmbase → src}/jmbase/twisted_utils.py
  56. +1 −0 {jmbitcoin → src}/jmbitcoin/__init__.py
  57. +38 −13 {jmbitcoin → src}/jmbitcoin/amount.py
  58. +16 −14 {jmbitcoin → src}/jmbitcoin/bip21.py
  59. 0 {jmbitcoin → src}/jmbitcoin/blocks.py
  60. +14 −1 {jmbitcoin → src}/jmbitcoin/output_descriptors.py
  61. 0 {jmbitcoin → src}/jmbitcoin/secp256k1_deterministic.py
  62. +6 −19 {jmbitcoin → src}/jmbitcoin/secp256k1_ecies.py
  63. +31 −26 {jmbitcoin → src}/jmbitcoin/secp256k1_main.py
  64. +60 −25 {jmbitcoin → src}/jmbitcoin/secp256k1_transaction.py
  65. +11 −4 {jmbitcoin → src}/jmbitcoin/snicker.py
  66. 0 {jmclient → src}/jmclient/__init__.py
  67. +104 −0 src/jmclient/auth.py
  68. +411 −333 {jmclient → src}/jmclient/blockchaininterface.py
  69. 0 {jmclient → src}/jmclient/bond_calc.py
  70. +23 −24 {jmclient → src}/jmclient/cli_options.py
  71. 0 {jmclient → src}/jmclient/client_protocol.py
  72. 0 {jmclient → src}/jmclient/commitment_utils.py
  73. +61 −86 {jmclient → src}/jmclient/configure.py
  74. 0 {jmclient → src}/jmclient/cryptoengine.py
  75. +6 −4 {jmclient → src}/jmclient/fidelity_bond.py
  76. +16 −17 {jmclient → src}/jmclient/jsonrpc.py
  77. +4 −4 {jmclient → src}/jmclient/maker.py
  78. 0 {jmclient → src}/jmclient/old_mnemonic.py
  79. +1 −1 {jmclient → src}/jmclient/output.py
  80. +13 −13 {jmclient → src}/jmclient/payjoin.py
  81. 0 {jmclient → src}/jmclient/podle.py
  82. 0 {jmclient → src}/jmclient/schedule.py
  83. 0 {jmclient → src}/jmclient/snicker_receiver.py
  84. +52 −37 {jmclient → src}/jmclient/storage.py
  85. 0 {jmclient → src}/jmclient/support.py
  86. +14 −4 {jmclient → src}/jmclient/taker.py
  87. +96 −53 {jmclient → src}/jmclient/taker_utils.py
  88. +425 −194 {jmclient → src}/jmclient/wallet.py
  89. +297 −99 {jmclient → src}/jmclient/wallet_rpc.py
  90. +31 −22 {jmclient → src}/jmclient/wallet_service.py
  91. +85 −74 {jmclient → src}/jmclient/wallet_utils.py
  92. +16 −15 {jmclient → src}/jmclient/websocketserver.py
  93. +8 −1 {jmclient → src}/jmclient/yieldgenerator.py
  94. 0 {jmdaemon → src}/jmdaemon/__init__.py
  95. 0 {jmdaemon → src}/jmdaemon/daemon_protocol.py
  96. 0 {jmdaemon → src}/jmdaemon/enc_wrapper.py
  97. 0 {jmdaemon → src}/jmdaemon/fidelity_bond_sanity_check.py
  98. 0 {jmdaemon → src}/jmdaemon/irc.py
  99. +1 −1 {jmdaemon → src}/jmdaemon/message_channel.py
  100. 0 {jmdaemon → src}/jmdaemon/onionmc.py
  101. +4 −15 {jmdaemon → src}/jmdaemon/orderbookwatch.py
  102. 0 {jmdaemon → src}/jmdaemon/protocol.py
  103. 0 {jmqtui → src}/jmqtui/__init__.py
  104. +7 −0 src/jmqtui/_compile.py
  105. 0 {jmqtui → src}/jmqtui/open_wallet_dialog.py
  106. 0 {jmqtui → src}/jmqtui/open_wallet_dialog.ui
  107. +1 −1 test/Dockerfiles/build_docker.sh
  108. +15 −2 {jmbase/test → test/jmbase}/test_base_support.py
  109. 0 {jmbase/test → test/jmbase}/test_commands.py
  110. +47 −0 test/jmbase/test_crypto.py
  111. 0 {jmbitcoin/test → test/jmbitcoin}/base58_keys_invalid.json
  112. 0 {jmbitcoin/test → test/jmbitcoin}/base58_keys_valid.json
  113. 0 {jmbitcoin/test → test/jmbitcoin}/ecc_sigs_rfc6979_valid.json
  114. +49 −13 {jmbitcoin/test → test/jmbitcoin}/test_amounts.py
  115. +26 −0 {jmbitcoin/test → test/jmbitcoin}/test_bip21.py
  116. 0 {jmbitcoin/test → test/jmbitcoin}/test_bip32.py
  117. 0 {jmbitcoin/test → test/jmbitcoin}/test_btc_snicker.py
  118. 0 {jmbitcoin/test → test/jmbitcoin}/test_ecc_signing.py
  119. 0 {jmbitcoin/test → test/jmbitcoin}/test_ecdh.py
  120. 0 {jmbitcoin/test → test/jmbitcoin}/test_ecies.py
  121. +14 −0 {jmbitcoin/test → test/jmbitcoin}/test_output_descriptors.py
  122. 0 {jmbitcoin/test → test/jmbitcoin}/test_tx_signing.py
  123. 0 {jmbitcoin/test → test/jmbitcoin}/tx_valid.json
  124. 0 {jmclient/test → test/jmclient}/base58_keys_invalid.json
  125. 0 {jmclient/test → test/jmclient}/base58_keys_valid.json
  126. 0 {jmclient/test → test/jmclient}/bip341_wallet_test_vectors.json
  127. 0 {jmclient/test → test/jmclient}/bip39vectors.json
  128. +63 −18 {jmclient/test → test/jmclient}/commontest.py
  129. 0 {jmclient/test → test/jmclient}/taker_test_data.py
  130. 0 {jmclient/test → test/jmclient}/test_argon2.py
  131. +103 −0 test/jmclient/test_auth.py
  132. 0 {jmclient/test → test/jmclient}/test_blockchaininterface.py
  133. 0 {jmclient/test → test/jmclient}/test_bond_calc.py
  134. 0 {jmclient/test → test/jmclient}/test_client_protocol.py
  135. 0 {jmclient/test → test/jmclient}/test_coinjoin.py
  136. 0 {jmclient/test → test/jmclient}/test_commitment_utils.py
  137. +1 −3 {jmclient/test → test/jmclient}/test_configure.py
  138. 0 {jmclient/test → test/jmclient}/test_core_nohistory_sync.py
  139. 0 {jmclient/test → test/jmclient}/test_maker.py
  140. 0 {jmclient/test → test/jmclient}/test_mnemonic.py
  141. 0 {jmclient/test → test/jmclient}/test_payjoin.py
  142. 0 {jmclient/test → test/jmclient}/test_podle.py
  143. 0 {jmclient/test → test/jmclient}/test_privkeys.py
  144. +9 −7 {jmclient/test → test/jmclient}/test_psbt_wallet.py
  145. 0 {jmclient/test → test/jmclient}/test_schedule.py
  146. +5 −2 {jmclient/test → test/jmclient}/test_snicker.py
  147. +5 −0 {jmclient/test → test/jmclient}/test_storage.py
  148. 0 {jmclient/test → test/jmclient}/test_support.py
  149. +28 −16 {jmclient/test → test/jmclient}/test_taker.py
  150. +3 −4 {jmclient/test → test/jmclient}/test_tx_creation.py
  151. +10 −14 {jmclient/test → test/jmclient}/test_utxomanager.py
  152. 0 {jmclient/test → test/jmclient}/test_valid_addresses.py
  153. +54 −10 {jmclient/test → test/jmclient}/test_wallet.py
  154. +317 −25 {jmclient/test → test/jmclient}/test_wallet_rpc.py
  155. +1 −1 {jmclient/test → test/jmclient}/test_wallets.py
  156. 0 {jmclient/test → test/jmclient}/test_walletservice.py
  157. 0 {jmclient/test → test/jmclient}/test_walletutils.py
  158. +9 −13 {jmclient/test → test/jmclient}/test_websocket.py
  159. 0 {jmclient/test → test/jmclient}/test_yieldgenerator.py
  160. 0 {jmdaemon/test → test/jmdaemon}/dummy_mc.py
  161. 0 {jmdaemon/test → test/jmdaemon}/msgdata.py
  162. 0 {jmdaemon/test → test/jmdaemon}/test_daemon_protocol.py
  163. 0 {jmdaemon/test → test/jmdaemon}/test_enc_wrapper.py
  164. 0 {jmdaemon/test → test/jmdaemon}/test_irc_messaging.py
  165. 0 {jmdaemon/test → test/jmdaemon}/test_message_channel.py
  166. 0 {jmdaemon/test → test/jmdaemon}/test_orderbookwatch.py
  167. +1 −4 test/lint/lint-python.sh
  168. +11 −8 test/run_tests.sh
  169. +11 −8 test/testrunner/install_bitcoind.sh
  170. +1 −1 test/{ → unified}/common.py
  171. 0 test/{ → unified}/payjoinclient.py
  172. 0 test/{ → unified}/payjoinserver.py
  173. +411 −0 test/unified/test_bumpfee.py
  174. 0 test/{ → unified}/test_e2e_coinjoin.py
  175. 0 test/{ → unified}/test_segwit.py
  176. +1 −1 test/{ → unified}/ygrunner.py
13 changes: 1 addition & 12 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -1,15 +1,4 @@
# .coveragerc to control coverage.py
[run]
omit =
jmclient/jmclient/jsonrpc.py
jmclient/jmclient/electruminterface.py
jmclient/jmclient/btc.py
jmclient/test/*
jmclient/setup.py
jmbitcoin/test/*
jmbitcoin/setup.py
jmbase/test/*
jmbase/setup.py
jmdaemon/test/*
jmdaemon/setup.py
jmdaemon/jmdaemon/socks.py
src/jmclient/jsonrpc.py
36 changes: 36 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: "CodeQL"

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
schedule:
- cron: '0 3 * * 1'

jobs:
analyze:
name: Analyze
runs-on: 'ubuntu-latest'
timeout-minutes: 360
permissions:
security-events: write

strategy:
fail-fast: false
matrix:
language: [ 'python' ]

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
20 changes: 20 additions & 0 deletions .github/workflows/openapi-diff.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: OpenAPI Diff
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out head branch
uses: actions/checkout@v2
with:
path: head
- name: Check out master branch
uses: actions/checkout@v2
with:
ref: master
path: base
- name: Run OpenAPI Diff (from HEAD revision)
uses: mvegter/openapi-diff-action@v0.23.5
with:
head-spec: head/docs/api/wallet-rpc.yaml
base-spec: base/docs/api/wallet-rpc.yaml
50 changes: 28 additions & 22 deletions .github/workflows/unittests.yml
Original file line number Diff line number Diff line change
@@ -4,51 +4,57 @@ on: [push, pull_request]

jobs:
build:
name: python ${{ matrix.python-version }} on ${{ matrix.os }}
name: python ${{ matrix.python-version }}, bitcoind ${{ matrix.bitcoind-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest, ubuntu-latest]
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
os: [macos-13, ubuntu-latest]
python-version: ["3.8", "3.12"]
bitcoind-version: ["25.1", "28.0"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@master
with:
version: v0.9.0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Cache venv
id: cache-venv
uses: actions/cache@v2
env:
cache-name: venv
with:
path: jmvenv
key: ${{ runner.os }}-${{ matrix.python-version }}-${{ env.cache-name }}-${{ hashFiles('requirements/*.txt', 'install.sh', '*/setup.py') }}
# - name: Cache venv
# id: cache-venv
# uses: actions/cache@v3
# env:
# cache-name: venv
# with:
# path: jmvenv
# key: ${{ runner.os }}-${{ matrix.python-version }}-${{ env.cache-name }}-${{ hashFiles('requirements/*.txt', 'install.sh', '*/setup.py') }}
- name: Setup joinmarket + virtualenv
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
./install.sh --develop --with-qt
bash -x ./install.sh --develop --with-qt
./jmvenv/bin/python -m pip install --upgrade pip
./jmvenv/bin/pip install -r requirements/base.txt
./jmvenv/bin/pip install -r requirements/testing.txt
- name: Lint with flake8
run: ./jmvenv/bin/flake8 -v jmclient jmbase jmbitcoin jmdaemon scripts
run: source ./jmvenv/bin/activate && ./test/lint/lint-python.sh
- name: Cache bitcoind
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: bitcoind
BITCOIND_VERSION: ${{ matrix.bitcoind-version }}
with:
path: ~/bitcoin/*/bin/bitcoin*
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('test/testrunner/install_bitcoind.sh') }}
key: ${{ runner.os }}-${{ env.cache-name }}-${{ env.BITCOIND_VERSION }}-${{ hashFiles('test/testrunner/install_bitcoind.sh') }}
- name: Install bitcoind
run: ./test/testrunner/install_bitcoind.sh
env:
BITCOIND_VERSION: ${{ matrix.bitcoind-version }}
run: bash -x ./test/testrunner/install_bitcoind.sh
- name: Cache miniircd
uses: actions/cache@v2
uses: actions/cache@v3
env:
cache-name: miniircd
with:
path: miniircd/miniircd
key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('test/run_tests.sh') }}
- name: Run tests
run: source ./jmvenv/bin/activate && ./test/run_tests.sh
run: source ./jmvenv/bin/activate && bash -x ./test/run_tests.sh
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -34,3 +34,4 @@ scripts/snicker/snicker-proposals.txt
scripts/snicker/candidates.txt
.qt_for_python/
cmtdata/
**/build/
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ WORKDIR /jm/clientserver

COPY . .

RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates=* curl=* \
RUN apt-get update && apt-get install -y --no-install-recommends gnupg ca-certificates=* curl=* \
python3-pip=* python3=* \
&& pip3 install 'wheel>=0.35.1' \
&& ./install.sh --docker-install \
13 changes: 3 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -34,6 +34,8 @@ Download the latest [release](https://github.com/Joinmarket-Org/joinmarket-clien

Make sure to validate the signature on the tar/zip file provided with the [release](https://github.com/Joinmarket-Org/joinmarket-clientserver/releases) (or check the signature in git if you install that way using `git log --show-signature`).

JoinMarket requires Python >=3.8, <3.13 installed.

(**macOS users**: Make sure that you have Homebrew and Apple's Command Line Tools installed.)

./install.sh
@@ -47,8 +49,6 @@ Follow instructions on screen; provide sudo password when prompted, then when fi

You can optionally install a Qt GUI application, you will be prompted to choose this during installation.

Do note, Python 2 is no longer supported as it has reached its end of life.

You should now be able to run the scripts like `python wallet-tool.py` etc., just as you did in the previous Joinmarket version.

Alternative to this "quickstart": follow the [install guide](docs/INSTALL.md).
@@ -93,7 +93,7 @@ If binaries are built, they will be gpg signed and announced on the Releases pag
If you haven't chosen the Qt option during installation with `install.sh`, then to run the script `joinmarket-qt.py` from the command line you will need to install two more packages. Use these 2 commands while the `jmvenv` virtual environment is activated:

```
pip install -r requirements/gui.txt
pip install .[gui]
```
After this, the command `python joinmarket-qt.py` from within the `scripts` subdirectory should work.
There is a [walkthrough](docs/JOINMARKET-QT-GUIDE.md) for what to do next.
@@ -122,10 +122,3 @@ Instructions for developers for testing [here](docs/TESTING.md). If you want to
https://twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onion/joinmarket

+ Telegram: https://t.me/joinmarketorg

### Support JoinMarket and bitcoin privacy

Donate to help make JoinMarket even better: [Obtain a bitcoin address here](https://bitcoinprivacy.me/joinmarket-donations)

JoinMarket is an open source project which does not have a funding model, fortunately the project itself has very low running costs as it is almost-fully decentralized and available to everyone for free. Developers contribute only as volunteers and donations are divided amongst them. Many developers have also been important in advocating for privacy and educating the wider bitcoin user base. Be part of the effort to improve bitcoin privacy and fungibility. Every donated coin helps us spend more time on JoinMarket instead of doing other stuff.

12 changes: 8 additions & 4 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -8,12 +8,12 @@
import pytest


def get_bitcoind_version(bitcoind_path: str) -> Tuple[int, int]:
def get_bitcoind_version(bitcoind_path: str, conf: str) -> Tuple[int, int]:
"""
This utility function returns the bitcoind version number
as a tuple in the form (major, minor)
"""
version = local_command(f'{bitcoind_path} -version')
version = local_command(f'{bitcoind_path} -version -conf={conf}')
if version.returncode != 0:
raise RuntimeError(version.stdout.decode('utf-8'))
version_string = version.stdout.split(b'\n')[0]
@@ -138,12 +138,16 @@ def setup_regtest_bitcoind(pytestconfig):
bitcoincli_path = os.path.join(bitcoin_path, "bitcoin-cli")
start_cmd = f'{bitcoind_path} -regtest -daemon -conf={conf}'
stop_cmd = f'{bitcoincli_path} -regtest -rpcuser={rpcuser} -rpcpassword={rpcpassword} stop'
local_command(start_cmd, bg=True)

# determine bitcoind version
try:
bitcoind_version = get_bitcoind_version(bitcoind_path)
bitcoind_version = get_bitcoind_version(bitcoind_path, conf)
except RuntimeError as exc:
pytest.exit(f"Cannot setup tests, bitcoind failing.\n{exc}")

if bitcoind_version[0] >= 26:
start_cmd += ' -allowignoredconf=1'
local_command(start_cmd, bg=True)
root_cmd = f'{bitcoincli_path} -regtest -rpcuser={rpcuser} -rpcpassword={rpcpassword}'
wallet_name = 'jm-test-wallet'
# Bitcoin Core v0.21+ does not create default wallet
38 changes: 18 additions & 20 deletions docs/INSTALL.md
Original file line number Diff line number Diff line change
@@ -4,16 +4,17 @@
* [Installation on Windows](#installation-on-windows)
* [Alternative/custom installation](#alternativecustom-installation)

JoinMarket requires Python >=3.8, <3.13.

### Notes on upgrading, binaries and compatibility

(You can ignore this whole section if starting from scratch).

#### Notes on upgrading versions generally:

If you just want the latest version in a new directory, go to the [releases](https://github.com/AdamISZ/joinmarket-clientserver/releases) page.
Binary executables (of JoinmarketQt) are currently being built only for Windows, please verify the signature on the .exe file attached to the release.
If you just want the latest version in a new directory, go to the [releases](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases) page.

Otherwise: if you are upgrading from an older version, just update using git: `git pull origin master`,
If you are upgrading from an older version, just update using git: `git pull origin master`,
or `git fetch; git checkout tags/<tagname>` for a specific tagged release, then rerun the installation
process as described below. This will only work if the latest commit, or the tag,
is actually newer in version number, than what was there already.
@@ -30,7 +31,7 @@ To install everything (client and server), install these packages:

(to build `libsodium` after):

git clone git://github.com/jedisct1/libsodium.git
git clone https://github.com/jedisct1/libsodium.git
cd libsodium
git checkout tags/1.0.18
./autogen.sh
@@ -41,7 +42,7 @@ To install everything (client and server), install these packages:

Then install this repo:

git clone https://github.com/Joinmarket-Org/joinmarket-clientserver
git clone https://github.com/Joinmarket-Org/joinmarket-clientserver.git
cd joinmarket-clientserver

Then:
@@ -55,12 +56,11 @@ Then build and install a local copy of libsecp256k1 for python-bitcointx:

mkdir -p deps
cd deps
git clone git://github.com/bitcoin-core/secp256k1
git clone https://github.com/bitcoin-core/secp256k1.git
cd secp256k1
git checkout 0d9540b13ffcd7cd44cc361b8744b93d88aa76ba
make clean
git checkout v0.5.0
./autogen.sh
./configure --prefix JM_ROOT --enable-module-recovery --disable-jni --enable-experimental --enable-module-ecdh --enable-benchmark=no
./configure --prefix JM_ROOT --enable-module-recovery --enable-experimental --enable-module-ecdh --enable-benchmark=no
make
make check
make install
@@ -73,7 +73,7 @@ Then build and install a local copy of libsecp256k1 for python-bitcointx:

> *NOTE*: It is very important to have activated the virtual environment before running this step. Otherwise, `pip install` will fail, you may be tempted to re-run it with `sudo pip install` which will cause problems in the future.
pip install -r requirements/base.txt
pip install .[services]

If you have installed this "full" version of the client, you can use it with the command line scripts as explained in the [usage guide](USAGE.md).

@@ -87,7 +87,7 @@ If you have installed this "full" version of the client, you can use it with the
```
2) Install Homebrew
```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
3) Install automake, libtool, and libsodium
```
@@ -97,7 +97,7 @@ If you have installed this "full" version of the client, you can use it with the
```
git clone https://github.com/bitcoin-core/secp256k1
cd secp256k1
git checkout 0d9540b13ffcd7cd44cc361b8744b93d88aa76ba
git checkout v0.5.0
./autogen.sh
./configure --enable-module-recovery --disable-jni --enable-experimental --enable-module-ecdh --enable-benchmark=no
make
@@ -120,7 +120,7 @@ If you have installed this "full" version of the client, you can use it with the
7) Setup joinmarket-qt
```
pip install -r requirements/gui.txt
pip install .[gui]
```
8) Start joinmarket-qt
```
@@ -136,7 +136,7 @@ If (a), then note the following two points:
##### Installing Bitcoin Core
If you haven't done so yet, install Bitcoin Core, version 0.18 or newer, as described [here](https://bitcoin.org/en/full-node#windows-10). After starting it for the first time, it will start the Initial Block Download. JoinMarket cannot be used until this is finished. More information on that can be found [here](https://bitcoin.org/en/full-node#initial-block-downloadibd).
If you haven't done so yet, install Bitcoin Core, version 25.1 or newer, as described [here](https://bitcoin.org/en/full-node#windows-10). After starting it for the first time, it will start the Initial Block Download. JoinMarket cannot be used until this is finished. More information on that can be found [here](https://bitcoin.org/en/full-node#initial-block-downloadibd).
##### Configuring Bitcoin Core
@@ -150,7 +150,6 @@ There are currently two choices for installing on Windows; one, directly install
#### Installation directly on Windows
As per the note above, binaries for JoinmarketQt are being offered with releases as of 0.7.0+.
This section is for doing a full command line install, on Windows.
First, if you have not done so, install [Python](https://www.python.org/downloads/windows/) - specifically, the latest Python 3 version. Make sure to choose to install `pip` during the installation (it should be included automatically, but you can choose the custom installation option to choose it).
@@ -163,10 +162,9 @@ Unzip the `joinmarket-clientserver-x.x.x` (where `x.x.x` is the release number)
Using the command prompt in Administrator mode, go to that directory and run the commands:
`pip install -r requirements\base.txt`
`pip install -r requirements\gui.txt`
`pip install joinmarket[services]`
(the latter is needed for Joinmarket-Qt).
(replace `services` with `gui` for Joinmarket-Qt).
The final step is to manually add the libsodium dependency, as mentioned. Do the following:
@@ -188,7 +186,7 @@ From here, go to `Configuring Joinmarket` below.
3. When asked, choose to restart.
##### Install Ubuntu from the Microsoft Store
1. Open the `Microsoft Store`, search for `Ubuntu 18.04 LTS` and click `Get`.
1. Open the `Microsoft Store`, search for `Ubuntu 24.04.1 LTS` and click `Get`.
> note: other distributions are available, but this is the only one tested
2. When finished downloading click `Launch`.
3. A window should pop up, telling your `Installing, this may take a few minutes...`
@@ -267,7 +265,7 @@ There, you need to install the client code (without Joinmarket's bitcoin):
#### Docker Installation
The [Dockerfile](Dockerfile) provided builds a minimal Docker image which can help in getting started with a custom Docker setup. An example of building and running the [wallet-tool.py](scripts/wallet-tool.py) script:
The [Dockerfile](../Dockerfile) provided builds a minimal Docker image which can help in getting started with a custom Docker setup. An example of building and running the [wallet-tool.py](../scripts/wallet-tool.py) script:
```
docker build -t joinmarket-test ./
4 changes: 1 addition & 3 deletions docs/JOINMARKET-QT-GUIDE.md
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@

The GUI can be run directly from Python script by doing `./joinmarket-qt.sh` from within `scripts/`, or, if using Microsoft Windows, by running the executable file/binary (**[CLICK HERE](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases)** to download the latest release). If you followed normal installation procedure under Linux, desktop entry of JoinMarketQt should be added to the application menu of your desktop environment.

**LATEST VERSION of JoinMarket-Qt is GUI version 31**. You can check the version via `About` in the menu.
**LATEST VERSION of JoinMarket-Qt is GUI version 33**. You can check the version via `About` in the menu.

No other files / setup should be needed.

@@ -128,8 +128,6 @@ Next, we'll send a test transaction:

In the Coinjoins tab, select the "Single Join" subtab.

The donation feature is disabled; you can donate to the general JM donation address found in the `About` window from the menu.

Paste the address you want to send to under `Recipient address`.

The number of counterparties can be anything from 4 up to 20 (in theory you can make
Loading