Lite wallet server https://hush.is
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.
 
 
 
Duke 3090b635cc Update version and document it in readme 1 year ago
cmd Delete old unused code 1 year ago
common Update version and document it in readme 1 year ago
contrib/debian fixed deb pkg script for ARM 3 years ago
doc/man manually created manpage 3 years ago
frontend Try to fix GetCoinsupply 2 years ago
parser Port code from upstream 2 years ago
testdata Test against the first 20 mainnet blocks 5 years ago
util No need for a bunch of copy paste code 1 year ago
vendor Port code from upstream 2 years ago
walletrpc Provide a backward compatible wrapper for GetTaddressTxids called GetAddressTxids 2 years ago
.gitignore Update docs; add start-tls.sh and remove darkside from showing up in --help 1 year ago
AUTHORS Add myself to authors 3 years ago
LICENSE added correct LICENSE file 3 years ago
Makefile No need for a bunch of copy paste code 1 year ago
README.md Update version and document it in readme 1 year ago
go.mod Port code from upstream 2 years ago
go.sum Port code from upstream 2 years ago
main.go Port code from upstream 2 years ago
start-tls.sh Update docs; add start-tls.sh and remove darkside from showing up in --help 1 year ago
start.sh Pass long any arguments from start.sh to lightwalletd 1 year ago

README.md

Overview

Hush Lightwalletd is a fork of lightwalletd original from Zcash (ZEC).

It is a backend service that provides a bandwidth-efficient interface to the Hush blockchain for SilentDragonLite cli and SilentDragonLite.

Changes from upstream lightwalletd

This version of lightwalletd extends lightwalletd and:

  • Adds support for HUSH
  • Adds support for transparent addresses
  • Adds several new RPC calls for lightclients
  • Lots of perf improvements
    • Replaces SQLite with in-memory cache for Compact Blocks
    • Replace local Txstore, delegating Tx lookups to hushd
    • Remove the need for a separate ingestor

Running your own SDL lightwalletd

0. First, install Go

You will need Go >= 1.17 which you can download from the official download page or install via your OS package manager. Most OS package managers will not have such a new version, but you might get lucky.

This installation document shows how to do it on various OS's.

If you're using Ubuntu or Debian, try:

$ sudo apt install golang

1. Run a Hush node.

Either compile or build the Hush Daemon (hushd).

Next, change your HUSH3.conf file to something like the following:

rpcuser=user-CHANGETHIS
rpcpassword=pass-CHANGETHIS
rpcport=18031 # this if for HUSH, change it for other HSC's
server=1
txindex=1
addressindex=1 # required for the newest lightwalletd code
rpcworkqueue=256
rpcallowip=127.0.0.1
rpcbind=127.0.0.1

Then start hushd in your command window. You might need to run with -reindex the first time if you are enabling -addressindex option for the first time. The reindex might take a while. A fresh sync is usually the fastest way to enable -addressindex, instead of doing a reindex.

2. Compile lightwalletd

Run the build script.

make

3. Get a TLS certificate and run the Lightwalletd frontend

First, get a TLS certificate:

On Ubuntu Linux, I SUGGEST YOU DO NOT USE SNAPD and just sudo apt install certbot and then start on Step 7 of these instructions by the EFF

Next you decide how you want to setup lightwalletd - with (Option A) or without NGINX (Option B).

Option A: "Let's Encrypt" certificate using NGINX as a reverse proxy

If you running a public-facing server, the easiest way to obtain a certificate is to use a NGINX reverse proxy and get a Let's Encrypt certificate.

Create a new section for the NGINX reverse proxy:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name your_host.net;

    ssl_certificate /etc/letsencrypt/live/your_host.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/your_host.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
        
    location / {
        # Replace 9067 with the port of your gRPC server if using a custom port
        # Hush Smart Chains should use a different port than 9067 so it doesn't conflict with HUSH lightwalletd
        # NOTE: it's only safe to use --no-tls on lightwalletd if this is on localhost
    	grpc_pass grpc://localhost:9067;
    }
}

Then run the lightwalletd frontend with the following:

./start.sh

Note: we use the "--no-tls" option as we are using NGINX as a reverse proxy and letting it handle the TLS authentication for us instead. If you want to do TLS directly with lightwalletd with no reverse proxy, see the next section.

Option B: "Let's Encrypt" certificate just using lightwalletd without NGINX

The other option is to configure lightwalletd to handle its own TLS authentication. Once you have a certificate that you want to use (from a certificate authority), pass the certificate to the frontend as follows:

./start-tls.sh -tls-cert /etc/letsencrypt/live/YOURWEBSITE/fullchain.pem -tls-key /etc/letsencrypt/live/YOURWEBSITE/privkey.pem

4. Point the silentdragonlite-cli to this server

You should start seeing the frontend ingest and cache the Hush blocks after ~15 seconds.

Now, connect to your server! (Substitute with your own below)

git clone https://git.hush.is/hush/silentdragonlite-cli
cd silentdragonlite-cli
cargo build --release
./target/release/silentdragonlite-cli --server https://lite.example.org

Lightwalletd Command-line Options

These are some of the most used command line options for lightwalletd:

CLI option Default What it does
--grpc-bind-addr 127.0.0.1:9067 address and port to listen on
--tls-cert blank the path to a TLS certificate
--tls-key blank the path to a TLS key file
--no-tls false Disable TLS, serve un-encrypted traffic
--log-file blank log file to write to
--log-level logrus.InfoLevel log level 1 thru 7 (something from logrus)
--hush-conf-path blank conf file to pull RPC creds from
--cache-size 40000 number of blocks to hold in the cache

Run ./lightwalletd --help to see all options.

Developing

To create a foo.pb.go file from a foo.proto file:

protoc --go_out=paths=source_relative:. foo.proto

Or do make protobuf

To update the version of lightwalletd, update the value of the Version variable in common/common.go .

Support

For support or other questions, join us on Telegram, or tweet at @HushIsPrivacy, or toot at our Mastodon or join Telegram Support.

License

GPLv3 or later

Copyright

2016-2022 The Hush Developers