moksha is a cashu library, mint and cli-wallet written in Rust.
Cashu is an Ecash implementation based on David Wagner's variant of Chaumian blinding. Token logic based on minicash (description) which implements a Blind Diffie-Hellman Key Exchange scheme written down by Ruben Somsen here. Please read the Cashu documentation for more detailed information.
Mint Features:
- Supported backends
- LNbits
- Lnd
- Alby
- Strike
- core-lightning (WIP)
Wallet Features:
- connect to mint (load keys)
- request minting tokens
- minting tokens
- sending tokens (get an encoded token for chosen value)
- receiving tokens
- melting tokens
- check if tokens are spent
- multi mint support
Implemented NUTs:
- NUT-00
- NUT-01
- NUT-02
- NUT-03
- NUT-04
- NUT-05
- NUT-06
- NUT-07
- NUT-08
- NUT-09
- NUT-10
- NUT-11
- NUT-12
- NUT-14 on-chain mint (unofficial nut)
- NUT-15 on-chain melt (unofficial nut)
- moksha-core The core of the cashu library. Contains all the logic for creating and verifying tokens.
- moksha-wallet Cashu wallet library
- moksha-cli Cashu cli wallet
- moksha-mint Cashu mint server. Handles minting, melting and token requests.
- moksha-fedimint Fedimint wrapper for the cashu wallet
- integrationtests Spins up a mint and runs integration tests against it.
docker-compose simplifies the process of running multi-container Docker applications. Here's how you can use it to run the moksha -mint:
-
First, you need to have Docker Compose installed on your machine. If it's not installed, you can download it from the official Docker website.
-
Copy the tls.cert and admin.macaroon files from your LND instance into the
./data/mutinynet/
directory. -
Configure the
LND_GRPC_HOST
environment variable in thedocker-compose.yml
file to point to your LND instance. -
Run the following command in the same directory as your
docker-compose.yml
file to start the mint and a postgres database:
docker-compose up -d app database
git clone https://github.com/ngutech21/moksha.git
cargo install just typos-cli sqlx-cli grcov wasm-pack wasm-opt
rustup component add llvm-tools-preview
cd moksha
This is needed for the LND backend.
sudo apt install protobuf-compiler
brew install protobuf
choco install protoc
mv .env.example .env
# edit .env file
vim .env
To run the mint you need to setup a lightning regtest environment like Polar and a Lnbits or Lnd instance. In Lnbits create a new wallet and copy the admin key into the .env file and set the url to your Lnbits instance. The mint uses PostgreSQL for storing used proofs and pending invoices. The database URL can be configured in the .env file.
install docker and docker-compose
docker compose up -d
just db-create
just run-mint
Shows the current version, database-dir and mint-url.
just run-cli info
just run-cli balance
This command will return a Lightning invoice that you need to pay to mint new ecash tokens.
just run-cli mint 42
To send tokens to another user, enter. The tokens will get printed to STOUT. You can then send them to the recipient via any messaging app.
just run-cli send 21
To receive tokens you need to enter the token as first argument to the receive command. The tokens will get verified and the value will be added to your balance.
just run-cli receive cashuAeyJ0...
To run coverage, check for typos etc. use the just commands:
Available recipes:
build-docker # build the mint docker-image
build-wasm # compile all rust crates, that are relevant for the client, to wasm
clean # clean cargo
db-create # creates the postgres database
db-migrate # runs sqlx prepare
db-prepare # runs sqlx prepare
default # list all tasks
deps # install all dependencies
final-check # format code, check typos and run tests
publish # publish everything on crates.io
run-cli *ARGS # run cli-wallet with the given args
run-coverage # run coverage
run-itests # run integrationtests
run-mint *ARGS # run the cashu-mint
run-tests # runs all tests
typos # check code for typos
typos-fix-all # fix all typos
moksha is distributed under the terms of the MIT license. See LICENSE.