Disclaimer: The author is NOT a cryptographer and this work has not been reviewed. This means that there is very likely
a fatal flaw somewhere. Cashu is still experimental and not production-ready.
Don't be reckless: This project is in early development; it does, however, work with real sats! Always use amounts you
don't mind losing.
This project is in active development; it has not gone through optimization and refactoring yet.
Nutmix
Cashu protocol mint focused on ease of use and feature completeness.
Please test in Mutinynet at: https://mutinynet.nutmix.cash
This is an alternative Cashu mint written in go. It's specifically just a mint with the objective to minimize the code
and complexity.
Objective
The mint includes it's proper dashboard to manage administration and logs.
Run the Mint
This project is thought to be able to be ran on a docker container or locally.
Here is what you need to know to change to run nutmix in docker:
Most of the setup process will happen inside the Admin dashboard.
You'll need the correct variables in an .env file first. Use the env.example file as reference.
-
You need to make sure to use a strong POSTGRES_PASSWORD and make user the username and password are the same in the
DATABASE_URL
-
Add private key using the MINT_PRIVATE_KEY enviroment variable or pick connect to a remote signer.
-
To login into the admin dashboard and change the rest of settings add your npub to ADMIN_NOSTR_NPUB enviroment variable.
The mint will stop and Print out what you are missing if you don't have this 4 Items setup.
Running docker
In case you want to run the docker compose file using traefik and you also need to fill variables below HOSTING for your domains.
If you have this correctly setup it should be as easy as running a simple docker command on linux:
docker compose up -d
Setting up a remote signer.
Right now there are two remote signer implementations.
There is a new enviroment variable called SIGNER_TYPE. If you want to use the remote signer you need to set the
options abstract_socket or network. This will then will look for the signer to connect. If you pick network you
will also need to set the NETWORK_SIGNER_ADDRESS env variable.
Setup mTLS for signer
The mint communicates with the remote signer using mTLS.
You will need to set environment variables for signaling the routes for mTLS.
SIGNER_CLIENT_TLS_KEY=<route to file>
SIGNER_CLIENT_TLS_CERT=<route to file>
SIGNER_CA_CERT=<route to file>
Video Walkthrough
Video on .env setup
https://github.com/user-attachments/assets/4b626a1f-4107-4ba0-be87-634424e0b565
Walkthrough of dashboard
https://github.com/user-attachments/assets/29943daa-9429-40c0-8df5-97ca3b044a77
Supported NUTs
NUTs REPO:
Non official NUT:
Development
If you want to develop for the project I personally run a hybrid setup. I run the mint locally and the db on docker.
I have a special development docker compose called: docker-compose-dev.yml. This is for simpler development without having traefik in the middle.
The project uses just for building the project and development.
- Install the dependencies needed to build the node packages and server.
just install-deps
- run the database in docker.
docker compose up db -d
- Run the mint locally.
- You have to write the necessary info into enviroment variables. use the env.example
file for ideas.
just run-dev
Support
Pull requests and suggestions are always welcomed. The more people have eyes on this the better.
If you can donate monetarily it would be greatly appreciated. The funds would go to the development of the mint and
servers for testing.
on-chain silent payments
sp1qq0fju879lh2rgvwjjd7e78pg4gnr7a8aumth8qlezdgjs2rwzk7ssq5jm7v27cuuk5dyjfurdy8t8jflkcx0sluwez350kjjd45y7nnx3vgmjqjq
Donate with lightning
nutmix@npub.cash
Donate with on-chain
bc1qp7lswgftpgrkt00vszrm63dmkq3nuxjv60czk6
Donate with Monero
84yCRZY6BXebs8xWE6Yzj6S6cE17uLhkTSynneVPmejjWAcgBtnV7UEUiZqJNLE4pXaPmXNkJuhcAYbpu49zAdVsEZqqxac