Assume Alice is using SDL for 1 hour and makes many transactions, perhaps using HushChat with Bob. The lite server she is connected to will know know that IP address A has created transaction id B, i.e. linkability of IP addresses to all the transaction ids that are created while she is connected. If Bob is connected to the same lite server for some or all of those transactions, the complete transaction graph is known : IP address A created txid B sending to IP address C which is the receiver of txid B. This is not good. One improvement could be that we change lite servers on an interval, such as every 5 minutes. That would be better than nothing, but what seems to be even better is to change the lite server after every tx. This means that every time Alice (or Bob) makes a new transaction, they are potentially talking to a different lite server. It is potentially because it is possible that our randomly chosen new lite server is the same as our previous lite server. We could try to ensure that the new random server is different than our previous, but in edge case of only one server being up, the code gets annoying. This commit implements changing to a likely different lite server after every transaction. In the worst case scenario, it reduces to the privacy of the old behavior, which is to leak all data to the current lite server. In the best case, we spread out metadata leakage to every lite server that is currently up. The average case is to spread out our metadata to more than just one lite server, which is a privacy win. If stickyServer=1, this code is disabled, since it's better for somebody to connect to their own lite server and not leak any metadata to 3rd parties. This algorithm should also be implemented in SDA. As an aside, Zcash has ignored this problem for 2.5 years and only supports talking to a single lite wallet at a time (no random selection on startup) which provides further evidence that ZEC mainnet is a honeypot.
SilentDragonLite
SilentDragonLite is a lightwallet for HUSH ($HUSH) runs on Linux and Windows which does not require you to download the full blockchain. This is experimental software under active development!
PRIVACY NOTICE
SilentDragonLite contacts a few different external websites to get various bits of data. The first two are option features, to get real-time price data feeds and if you want to look at explorer details. Price feed can be turned off in Settings and you can set a custom block explorer URL as well.
* coingecko.com for price data API (optional)
* explorer.hush.is for explorer links (optional)
* various community-run lite wallet servers to provide basic functionality (required)
This means your IP address is known to these servers. Enable Tor setting in your wallet to prevent this, or better yet, use TAILS: https://tails.boum.org/ or https://qubes-os.org
Installation
Choose to install a binary release or compile it yourself. For Arch Linux users, we have a silentdragonlite package on AUR.
Option 1: Binary Release
Go to the releases page and grab the latest binary.
Option 2: Compile Release Yourself
- SilentDragonLite is written in C++ 14, and can be compiled with g++/clang++/visual c++.
- It also depends on Qt5, which you can get from here or we recommend installing using your Linux version's package manager (if available).
- You'll need Rust v1.49, so install it via Rustup in Linux.
Building on Linux
Nothing below will work without rust. Check that your system has rustc 1.49. If not then you need to use Rustup in Linux.
An example of how to install Rust 1.49 with rustup is below:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Choose: 1) Proceed with installation (default)
source $HOME/.cargo/env
rustup install 1.49
rustup default 1.49
rustup -V
Nothing below will work without the Linux "build-essential" package. Check that your system has it installed. If not, and you're using a Ubuntu/Debian distro, then you can install with apt install build-essential.
Compiling can take some time, so be patient and wait for it to finish. It will take potentially a long time for slower systems. Be Patient and please report compiler problems!
Ubuntu 18.04 and 20.04:
sudo apt-get -y install build-essential qt5-default qt5-qmake libqt5websockets5-dev qtcreator qttools5-dev-tools
git clone https://git.hush.is/hush/SilentDragonLite
cd SilentDragonLite
./build.sh linguist
./build.sh
./SilentDragonLite
Other notes
Install Torsocks (or any other Socks service for TOR) on Ubuntu 18.04
sudo apt update
sudo apt install torsocks
Connection to our TOR onion service Server
NOTE: Tor server is currently under maintenance.
* Open SDL Edit->Settings->LightwalletServer->nope.onion:80
* Open the folder of SDL in a Terminal -> Enter: TORSOCKS_LOG_LEVEL=1 torsocks -i ./SilentDragonLite
Note Management
SilentDragonLite does automatic note and utxo management, which means it doesn't allow you to manually select which address to send outgoing transactions from. It follows these principles:
- Defaults to sending shielded transactions, which are now enforced via consensus rules
- Sapling funds need at least 2 confirmations before they can be spent (150 seconds on average for HUSH mainnet)
- Can select funds from multiple shielded addresses in the same transaction (via raw transactions)
- Will automatically shield your transparent funds at the first opportunity
- When sending an outgoing transaction to a shielded address, SilentDragonLite can decide to use the transaction to additionally shield your transparent funds (i.e., send your transparent funds to your own shielded address in the same transaction)
Where is my wallet stored?
Linux: ~/.silentdragonlite
Windows 10: C:\Users\%user\AppData\Roaming\silentdragonlite
Support
For support join us on Telegram Support, or our Main Telegram, or toot at our Mastodon, or file an issue.
You can also subscribe to our channels on PeerTube, on YouTube, or on Odyssee/LBRY.
License
GPLv3 or later
