openoms / joininbox Goto Github PK
View Code? Open in Web Editor NEWA terminal based graphical menu for JoinMarket
License: MIT License
A terminal based graphical menu for JoinMarket
License: MIT License
Occasionally the Bitcoin Core installation or switching to signet fails due to https://bitcoin.org/laanwj-releases.asc is not accessible called in
https://bitcoinhackers.org/web/statuses/106566964467746325
https://twitter.com/openoms/status/1414518505400111104
Fix:
set a fallback to: https://raw.githubusercontent.com/bitcoin-dot-org/Bitcoin.org/master/laanwj-releases.asc
Using the joininbox v0.4.0 menu on raspiblitz after jm shortcut, options that should open the wallet.jmdat file show "# Error: wallet.jmdat file not found".
info:
$ python snicker/snicker-finder.py -h
Usage: snicker-finder.py [options] startingblock [endingblock]
Find SNICKER candidate transactions on the blockchain. Using a connection to
Bitcoin Core, which allows retrieving full blocks, this script will list the
transaction IDs of transactions that fit the pattern of SNICKER, as codified
in https://gist.github.com/AdamISZ/2c13fb5819bd469ca318156e2cf25d79 and as
checked in the `jmbitcoin.snicker` module function `is_snicker_tx`, and also
optionally, transactions that fit the pattern of Joinmarket coinjoins (see
-j). Pass a starting and finishing block value as argument. If the finishing
block is not provided, it is assumed to be the latest block. **Note that this
is slow.** This script does *NOT* require a wallet, but it does require a
connection to Core, so does not work with `no-blockchain`. Note that this
script obviates the need to have txindex enabled in Bitcoin Core in order to
get full transactions, since it parses the raw blocks.
Options:
-h, --help show this help message and exit
--datadir=DATADIR Specify the path to a directory you want to use to
store your userdata - wallets, logs and commitment
files - and your joinmarket.cfg. By default, the
directory .joinmarket is used.
--recoversync choose to do detailed wallet sync, used for recovering
on new Core instance.
--wallet-password-stdin
Read wallet password from stdin
--version Print JoinMarket version and exit.
-f CANDIDATE_FILE_NAME, --filename=CANDIDATE_FILE_NAME
filename to write details of candidate transactions,
default ./candidates.txt
-j, --include-jm scan for Joinmarket coinjoin outputs, as well as
SNICKER.
Example for the last 5 blocks:
$ BLOCKSTOSCAN=5
$ BLOCKHEIGHT=$(sudo -u bitcoin bitcoin-cli getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1)
$ python snicker/snicker-finder.py -j $((BLOCKHEIGHT - BLOCKSTOSCAN))
User data location: /home/joinmarket/.joinmarket/
2021-04-29 12:51:24,529 [INFO] Finished processing block: 681082
2021-04-29 12:51:56,587 [INFO] Finished processing block: 681083
2021-04-29 12:51:56,589 [WARNING] Connection had broken pipe, attempting reconnect.
2021-04-29 12:52:31,581 [INFO] Finished processing block: 681084
2021-04-29 12:52:31,582 [WARNING] Connection had broken pipe, attempting reconnect.
2021-04-29 12:52:44,525 [INFO] Found Joinmarket coinjoin transaction: 943b1f52d9c3e83de3c704c8d6b9d9eb39a169c8c4ebbfc9abdf4b6b00a32c02 in block: 681085
2021-04-29 12:53:10,783 [INFO] Finished processing block: 681085
2021-04-29 12:53:43,872 [INFO] Finished processing block: 681086
2021-04-29 12:53:43,874 [WARNING] Connection had broken pipe, attempting reconnect.
2021-04-29 12:54:21,269 [INFO] Finished processing block: 681087
done
``
Installation of an LCD or eInk display could be an option.
Currently considered highly unsecure since cannot protect from physical theft.
The unencrypted password can be extracted from storage if stored in plaintext leading to risking all the funds.
Can consider an optional YG autounlock with only the encrypted password stored on disk if the boot process would have some kind of authentication.
Ideas:
Encryption should use a salt unique to the build (maybe using uname- a
, but look for better options)
Alternative: the JoinMarket wallet could have a second password which would not allow spending only signing as a Maker.
Shows all utxos in the wallet:
python wallet-tool.py WALLET.jmdat showutxos
show QR from arbitrary text
use qrencode
convert Xpub to Ypub or Zpub to create watch only wallets in Electrum / Blue wallet
Related: JoinMarket-Org/joinmarket-clientserver#558
Script: https://gist.github.com/openoms/4e8a527e4c9757162a53f2dc96e3d229
XPUBs can be easily imported to Specter and displayed in the menu WALLET
-> XPUBS
Wallet management is in its own section and contains "list-history" option but "receive" money and "show balance" is in the INFO section.
I suggest to unify those options under one section for consistency.
Part of JoinMarket v0.9.0: https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/release-notes/release-notes-0.9.0.md
More info:
https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/fidelity-bonds.md
To test on signet switch to SIGNET
in CONFIG
- used the signet addresses below. The procedure is the same on mainnet.
Update to the JoinMarket release v0.9.0 by updating he JoininBox scripts first.
menu - UPDATE
- ADVANCED
- JBCOMMIT
then
menu - UPDATE
- JOINMARKET
.
no input needed to use Fidelity Bonds after updating to v0.9.0
Generate a new wallet
or to convert wallets to have fidelity bonds use the seed backup or the wallet-tool.py method:
(showseed) Shows the wallet recovery seed and hex seed.
It is to be implemented in the menu. Until then the CLI is simple:
(jmvenv):~/joinmarket-clientserver/scripts$ ./wallet-tool.py WALLET.jmdat showseed
take note of the seed and use menu - WALLET
- RECOVER
:
(jmvenv):~/joinmarket-clientserver/scripts$ ./wallet-tool.py recover
input the seed (+ optional passphrase if there was one used).
Next on the second run of the DISPLAY menu option can check that m0
now shows the fbonds-mpk-
prefix:
if after the first sync funds are missing consider increasing the gap limit:
./wallet-tool.py --recoversync -g 200 WALLET.jmdat
Create a Fidelity Bond Address in the CLI:
(jmvenv):~/joinmarket-clientserver/scripts$ ./wallet-tool.py WALLET.jmdat gettimelockaddress 2021-8
Fund it:
(if using signet can use signetfaucet.com)
or send with a sweeping coinjoin, consider using an already mixed coin.
Check the DISPLAY
or m0
again (highlighted the locked coin):
Important: need to wait for a confirmation to have the bond active: https://explorer.bc-2.jp/tx/6fce4174113a762d18a4550147d8c7d1e271832e0ff040aa18949406627bac6a
To run the Order Book locally to display the Fidelity bonds only need to start it from the menu - OFFERS
and see like on:
http://gopnmsknawlntb4qpyav3q5ejvvk6p74a7y5xotmph4v64wl3wicscad.onion/
After starting the Yield Generator from the MAKER
menu option as usual (using he fidelity bond enabled wallet) it appears in the Order Book with the Fidelity Bond:
Try the new tabs in the obwatcher for some interesting metrics:
http://gopnmsknawlntb4qpyav3q5ejvvk6p74a7y5xotmph4v64wl3wicscad.onion/sybilresistance
As described in: https://www.cyberciti.biz/security/howto-linux-hard-disk-encryption-with-luks-cryptsetup-command/
Bitcoin Core does not encrypt public addresses and transactions, it is a potential privacy leak in case of theft.
Steps to reproduce:
jm
[Send]
<Cancel>
<Exit>
ENTER
to go back to menuExiting without visiting [Send]
sub-script works on the first try.
When I use menu for longer time, it required more tries to exit menu.
Explore the idea of using joinamrketd.py
https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/jmclient/jmclient/configure.py#L96
to have the communication with peers separate from the process handling the keys.
Implementation example:
https://github.com/qubenix/qubes-whonix-bitcoin/blob/master/1_joinmarket.md
found this interesting thing to remote control the QT GUI: https://xpra.org/
should be more performant, but needs another thing installed on the desktop and the node.
if someone uses ssh -x
might worth to experiment it.
The process will be similar to: https://github.com/rootzoll/raspiblitz/blob/master/FAQ.md#what-is-the-process-of-creating-a-new-sd-card-image-release
I recently added Google Authenticator as an SSH 2fa means. It works great for SSH-ing in as "admin" but since doing so, I am not able to launch the Joinmarket-Qt GUI using the advised "ssh -X ....." command given in the Joininbox menu.
Steps to replicate:
New item in the tools menu:
Sign a message with an external address of a specified mixdepth.
Input: Wallet, Mixdepth, Textmessage
Output: Signature, Address
options to connect through LAN and Tor with instructions to set up the remote node
test if the remote RPC connection is working
connect to local node (raspiblitz or pruned)
sign externally constructed txn (specter)
install - remove specter
signet
Tumbler script being a powerful tool to boost privacy I think it would be great to have it in the joininbox.
Is there any plans to be added?
Thank you
when trying to connect to the QTGUI from Windows, I have configured a new Putty session and enabled X11 forwarding and the autologin as user: joinmarket. However, this session does not accept PASSWORD_B or any other password I have configured.
Also can you advise if I need to add any other details on the X11 setting page, such as X display location?
Systemd fails with:
systemd[1]: yg-privacyenhanced.service: Current command vanished from the unit file, execution of the command list won't be resumed.
when running YG on:
Odroid HC1 with Armbian, kernel: 5.4.28-odroidxu4
RPi4 4GB Linux raspberrypi 4.19.118-v7l+
On both nodes: the wallet is specified in joinmarket.cfg and multiwallet is on in bitcoin.conf
Bitcoin Core: v0.20.0
RPi4 4GB Linux raspberrypi 4.19.118-v7l+ -> downgraded to Bitcoin Core v0.19.1 - to no effect
Odroid HC1 with Armbian, kernel: 5.4.28-odroidxu4 - deleted wallet
value in joinmarket.cfg
- testing
No other python process running with pgrep python
.
Status
$ sudo systemctl status yg-privacyenhanced.service
● yg-privacyenhanced.service - yg-privacyenhanced
Loaded: loaded (/etc/systemd/system/yg-privacyenhanced.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-06-17 21:40:59 BST; 11min ago
Main PID: 11294 (sh)
Tasks: 4 (limit: 4455)
Memory: 30.8M
CGroup: /system.slice/yg-privacyenhanced.service
├─11294 /bin/sh -c . /home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate && cat /home/joinmarket/.pw | python yg-privacyenhanced.py /home/joinmarket/.joinmarket/wallets/jm1.jmdat --wallet-pa
└─11298 python yg-privacyenhanced.py /home/joinmarket/.joinmarket/wallets/jm1.jmdat --wallet-password-stdin
Systemd setting:
$ cat /etc/systemd/system/yg-privacyenhanced.service
[Unit]
Description=yg-privacyenhanced
[Service]
WorkingDirectory=/home/joinmarket/joinmarket-clientserver/scripts/
ExecStart=/bin/sh -c '. /home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate && cat /home/joinmarket/.pw | python yg-privacyenhanced.py /home/joinmarket/.joinmarket/wallets/jm1.jmdat --wallet-password-stdin'
User=joinmarket
Group=joinmarket
Type=simple
KillMode=process
TimeoutSec=infinity
Restart=no
[Install]
WantedBy=multi-user.target
as suggested by @AdamISZ coin control needs to be facilitated and emphasized more
I have configured a putty session as per the instructions however I get the following error when running the command # qtgui.
qt.qpa.screen: QXcbConnection: Could not connect to display
Could not connect to any X display.
Xming is running. In putty after enabling x11 forwarding, there is a field for X Display location. Am i meant to have an address here? If so what?
~4.3 Gb to be downloaded from https://prunednode.today/ to bootstrap.
wget https://prunednode.today/snapshot210211.zip
wget https://prunednode.today/snapshot210211.signed.txt
curl https://stepansnigirev.com/ss-specter-release.asc | gpg --import
gpg --verify snapshot210211.signed.txt
sha256sum -c snapshot210211.signed.txt
can you please add the option to update Joinmarket to v 0.8.2
Reminder to change this:
joininbox/scripts/menu.quickstart.sh
Line 14 in f05d05a
when JoinMarket-Org/joinmarket-clientserver#879 is merged and in a release,
PayJoin support is already implemented in JoinMarket: https://joinmarket.me/blog/blog/payjoin/
Works between two JoinMarket clients by communicating an ephmeral nickname as well as the receive address : https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/PAYJOIN.md#doing-a-payjoin-payment
Adding to the terminal menu is realistic.
in some cases after the initial setup
both through RPC and bitcoin-cli
$ bitcoin-cli listwallets
[
]
And still displaying:
$ bitcoin-cli loadwallet wallet.dat
error code: -4
error message:
Wallet file verification failed. Refusing to load database. Data file '/home/bitcoin/.bitcoin/wallet.dat/wallet.dat' is already loaded.
The cause is unclear to me so far, but restarting bitcoind solves it:
sudo systemctl restart bictoind
or if running on signet:
sudo systemctl restart signetd
entering:
menu
afterwards will load the bitcoind wallet.
if a local bitcoin directory is present:
LOCAL "Connect to the local Bitcoin Core on $network"
JMCONF "Edit the joinmarket.cfg manually"
UPDATE "Update JoininBox or JoinMarket"
https://github.com/JoinMarket-Org/joinmarket-clientserver/tree/master/docs
link to this and a QR code leading to this awesome video https://www.youtube.com/watch?v=zTCC86IUzWo so that I can easily watch it on my smartphone by scanning it or copy paste it to my browser
When doing Send, swiping whole mixdepth, the unconfirmed outputs are omitted without warning.
It may be good to have some kind of warning that warn the user that no whole mixdepth will be used because unconfirmed UTXOs.
Also, it may be useful to see which UTXOs are unconfirmed in the overview of all mixdepths (INFO -> ALL)
would also be good to remind user to log in with ssh keys
set logging level to monitor DEBUG level outputs through the latest logfileDEBUG
by default
The biggest difference from INFO is that it exposes the IRC communication. Might be still too noisy for the typical usecase.
specify wallet file to be used to avoid sharing the same bitcoind wallet with other apps.
To specify a new wallet need to use multiwallet in Bitcoin Core: https://bitcoincore.org/en/releases/0.15.0/
Needs editing the bitcoin.conf
to include multiple wallet=
entries and restart.
Will need to rescan with after opening every previously created joinmarket wallet when starting with a new .dat
file in Core.
bitcoin-cli -rpcwallet=jmwallet.dat rescanblockchain
this takes a long time and maybe unnecessary until there is no other application using the default wallet.dat
.
Can still specify the wallet.dat
in joinmarket.cfg
for clarity.
# The PGP signature and the hash of the downloaded snapshot is correct
# Exract and copy to /home/store/app-data/.bitcoin
# The folder /home/store/app-data is present already
sudo: unzip: command not found
Bitcoin Core starts to download the blockchain from the start as the snapshot is not extracted.
Solution:
run:
sudo apt install unzip
and choose the PRUNED
option gain from the CONFIG
menu.
Currently there is an error accessing the auth_cookie on receiving a payjoin:
ERROR] Setup failed: [Failure instance: Traceback: <class 'RuntimeError'>: Failed to connect to: <twisted.internet.endpoints.UNIXClientEndpoint object at 0xb4d4f5b0>: An error occurred while connecting: 13: Permission denied., <twisted.internet.endpoints.TCP4ClientEndpoint object at 0xb4d4f590>: Failed to read COOKIEFILE '/mnt/hdd/tor/sys/control_auth_cookie': [Errno 13] Permission denied: '/mnt/hdd/tor/sys/control_auth_cookie'
, <twisted.internet.endpoints.TCP4ClientEndpoint object at 0xb4d4f610>: Connection was refused by other side: 111: Connection refused.
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:501:errback
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:568:_startRunCallbacks
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:654:_runCallbacks
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:1475:gotResult
--- <exception caught here> ---
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:1416:_inlineCallbacks
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/python/failure.py:512:throwExceptionIntoGenerator
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/txtorcon/controller.py:466:connect
]
Setup failed: [Failure instance: Traceback: <class 'RuntimeError'>: Failed to connect to: <twisted.internet.endpoints.UNIXClientEndpoint object at 0xb4d4f5b0>: An error occurred while connecting: 13: Permission denied., <twisted.internet.endpoints.TCP4ClientEndpoint object at 0xb4d4f590>: Failed to read COOKIEFILE '/mnt/hdd/tor/sys/control_auth_cookie': [Errno 13] Permission denied: '/mnt/hdd/tor/sys/control_auth_cookie'
, <twisted.internet.endpoints.TCP4ClientEndpoint object at 0xb4d4f610>: Connection was refused by other side: 111: Connection refused.
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:501:errback
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:568:_startRunCallbacks
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:654:_runCallbacks
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:1475:gotResult
--- <exception caught here> ---
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py:1416:_inlineCallbacks
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/python/failure.py:512:throwExceptionIntoGenerator
/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/txtorcon/controller.py:466:connect
]
done
Unhandled error in Deferred:
Traceback (most recent call last):
File "/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1475, in gotResult
_inlineCallbacks(r, g, status)
File "/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py", line 1464, in _inlineCallbacks
status.deferred.errback()
File "/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py", line 501, in errback
self._startRunCallbacks(fail)
File "/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py", line 568, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File "/home/joinmarket/joinmarket-clientserver/jmvenv/lib/python3.7/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/home/joinmarket/joinmarket-clientserver/jmclient/jmclient/payjoin.py", line 1114, in onion_listen
return onion_ep.listen(self.site)
builtins.AttributeError: 'NoneType' object has no attribute 'listen'
Needing an Apple device is holding back here.
Don't know about any tests done with Fully Noded and JM.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.