6 Mint de Cashu (Nutshell)
El Mint de cashu es el componente principal de la infraestructura de cashu, es quien custodia los bitcoins de los usuarios, a cambio emite tokens ("cupones digitales") que representan ese valor. Conociendo esto explicaremos el proceso de configuración paso a paso.
6.1 Configurando el backend lightning (LNbits)
A continuación, configuraremos una nueva billetera en LNbits que actuará como depósito principal de los fondos de los usuarios del Mint. Esta billetera será la encargada de recibir los sats cuando un usuario quiera depositar fondos en el Mint, y también de enviar los sats cuando un usuario quiera retirarlos.
Vamos a la cuenta creada en el tutorial de LNbits, iniciamos sesión y creamos la billetera. La siguiente imagen muestra el proceso.
Imagen 1: Creación de billetera para depósitos del Mint.
- Hacemos clic en
Add a new wallet. - Nos aparece una ventana donde introducimos el nombre de la billetera, ponemos Cashu Mint, puede ser cualquier nombre lo importante es que sepan para que es esa billetera.
- Adicionamos la billetera.
Después de creada necesitamos obtener la clave api que nos permitirá recibir pagos y pagar facturas.
De la misma manera que fuimos en el tutorial anterior (LNbits) a buscar el id de billetera para las comisiones por transacción, buscamos la clave de Admin key
Imagen 2: Clave Admin key para realizar y recibir pagos en el Mint de Cashu.
- Seleccionamos la llave
Admin key. - Copiamos la llave.
Ahora en la terminal nos desplazamos al directorio app-data/cashu/
cd app-data/cashu
Editamos el archivo .env
nano .env
Luego buscamos los siguientes parámetros:
# Use with LNbitsWallet
MINT_LNBITS_ENDPOINT=https://yourlnbits.com
MINT_LNBITS_KEY=gds87dskdsjhds71dsdsds2e
Donde dice https://yourlnbits.com ponemos https://lnbits.cashu4community.xyz y donde dice MINT_LNBITS_KEY sustituimos gds87dskdsjhds71dsdsds2e por la clave que copiamos anteriormente 55739ee04e53437aba54fa8c9e4175b8. Quedando de la siguiente manera:
# Use with LNbitsWallet
MINT_LNBITS_ENDPOINT=https://lnbits.cashu4community.xyz
MINT_LNBITS_KEY=55739ee04e53437aba54fa8c9e4175b8
Salvamos y salimos del archivo ctrl+s y ctrl+x
Reiniciamos el contenedor docker-compose restart cashu y se aplican los cambios.
6.2 Generando los certificados RPC
Los certificados ssl son necesarios para poder conectarnos vía RPC al Mint y ejecutar comandos remotos, útil si se quiere usar Orchard para administrar el Mint. Para generarlos nos trasladamos al directorio certs de la siguiente manera:
cd app-data/cashu/certs
ejecutamos el script generate_certificates.sh de la siguiente manera:
./generate_certificates.sh
este script generará todos los certificados necesarios, podemos comprobarlo ejecutando el siguiente comando:
ls .
ca_cert.pem ca_private.pem client_cert.pem client_private.pem generate_certificates.sh server_cert.pem server_private.pem
Imagen 3: Listado de archivos dentro del directorio certs.
Tras realizar estos cambios reiniciamos el contenedor docker
docker-compose restart cashu
6.3 Creando un nuevo keyset desde la CLI
Usaremos mint-cli para rotar los keysets y definir la comisión. Esto lo haremos para cada una de las unidades que tengamos en el mint ya sea sats, usd.
Para conocer que unidades tenemos activas en el mint, consultamos el endpoint /v1/keysets, lo haremos de la siguiente manera, esto se puede hacer también desde un navegador con solo introducir la url:
curl https://mint.cashu4community.xyz/v1/keysets
El comando curl nos devuelve lo siguiente:
{
"keysets": [
{
"id": "0145ee812683eaf8ce3859f2601c160d0c8f0d4139447848d0d6745350f3c4fb44",
"unit": "sat",
"active": true,
"input_fee_ppk": 100,
"final_expiry": null
}
]
}>
Ej.: si quisiéramos cambiar el fee de 100 ppk (per-proof-of-knowledge) por sat (Bitcoin) a 50 ppk, ejecutaríamos lo siguiente dentro del contenedor de cashu:
docker exec -it app_cashu bash
ya dentro del contenedor ejecutamos:
poetry run mint-cli -h cashu next-keyset sat 50
lo que nos devolvería algo como esto:
final_expiry = None
New keyset successfully created:
keyset.id = '01e5bac64190f22f2959558b15cbab9f06798958f253a59fbe4687a9d875e3c720'
keyset.unit = 'sat'
keyset.max_order = 64
keyset.input_fee_ppk = 50
0
Si ahora ejecutamos nuevamente el comando:
curl https://mint.cashu4community.xyz/v1/keysets
Nos devuelve el par de keysets el antiguo y el nuevo.
{
"keysets": [
{
"id": "0145ee812683eaf8ce3859f2601c160d0c8f0d4139447848d0d6745350f3c4fb44",
"unit": "sat",
"active": false,
"input_fee_ppk": 100,
"final_expiry": null
},
{
"id": "01e5bac64190f22f2959558b15cbab9f06798958f253a59fbe4687a9d875e3c720",
"unit": "sat",
"active": true,
"input_fee_ppk": 50,
"final_expiry": null
}
]
}
6.4 Soporte de USD estable con Blink en el Mint
En la versión 0.20.0 de nutshell se añadió soporte para USD mediante Blink como fuente de fondeo. En los siguientes pasos explicaremos que deben realizar tanto en blink como en el Mint de cashu.
Como requisito se debe tener una cuenta en la billetera lightning Blink de lo contrario no podremos continuar, así que, si no tiene una cuenta descargue la aplicación para Android desde la Google Play Store aquí si es un dispositivo iOS puede descargarla desde la App Store aquí. Teniendo ya el registro de la billetera accedemos a https://dashboard.blink.sv
Tras iniciar sesión nos aparece el panel de administración de la cuenta donde se ven las dos billeteras que tenemos una en sats y la otra en usd y varias opciones más, la que nos interesa es la de API Keys.
Imagen 4: Panel de administración de Blink - API Keys.
- Luego de seleccionar
API Keysen el menú de opciones nos aparece la siguiente pantalla donde podremos crear una nueva clave de la API.
Imagen 5: Creando nueva clave de la API.
- Hacemos clic en el botón con el símbolo +
Nos aparece una ventana donde introduciremos un nombre para identificar el uso de la llave, el tiempo de vida de la clave API y las operaciones que permitiremos hacer con ella.
Imagen 6: Parámetros de la clave API.
- Introducimos el nombre de la clave API, algo que sugiera el uso que se le va a dar.
- Tiempo de expiración de la clave seleccionamos
Never. - En las operaciones que se podrán hacer con la API las seleccionamos todas.
- Hacemos clic en el botón
Createpara crear la clave.
Luego de crear la clave nos aparece por única vez una ventana donde podemos copiar las claves de la API, se recomienda respaldarlas en un lugar seguro. Para nuestro caso solo nos interesa la relacionada con USD; pero en caso de que quieran usar Blink como cuenta de fondeo para el mint tanto en USD como en BTC
Imagen 7: Claves API para conectarse a las cuentas BTC y USD de Blink.
- Copiamos la clave en un lugar seguro (esta será la que usaremos para conectar el Mint de Cashu a Blink).
- Hacemos clic en el botón
Close.
De esta manera ya tenemos creada la clave que usaremos en el Mint, ahora volvemos a la terminal en nuestro vps, nos encontramos en el directorio cashu-deploy vamos a editar el archivo .env.
nano app-data/cashu/.env
Dentro del archivo buscamos la línea que tiene MINT_DERIVATION_PATH=:
MINT_DERIVATION_PATH="m/0'/0'/0"
Nos ubicamos al comienzo de la linea e introducimos el símbolo de # quedando así:
# MINT_DERIVATION_PATH="m/0'/0'/0"
Luego buscamos la línea MINT_DERIVATION_PATH_LIST=:
# MINT_DERIVATION_PATH_LIST=["m/0'/0'/0'", "m/0'/0'/1'", "m/0'/1'/0'", "m/0'/2'/0'"]
Eliminamos el símbolo de # y los valores entre doble comilla m/0'/0'/1' y m/0'/1'/0' quedando así:
MINT_DERIVATION_PATH_LIST=["m/0'/0'/0'", "m/0'/2'/0'"]
Ahora buscamos la linea MINT_BACKEND_BOLT11_USD=FakeWallet y le quitamos el símbolo de # y donde dice FakeWallet ponemos BlinkWallet quedando así:
MINT_BACKEND_BOLT11_USD=BlinkWallet
Por último buscamos la conexión a Blink:
# MINT_BLINK_KEY=blink_abcdefgh
Eliminamos el símbolo de # y pegamos la clave que creamos en el panel de Blink anteriormente. Quedando algo como esto:
MINT_BLINK_KEY=blink_7Sz978fgdFGjhhT6u8g1tDvruhdeiuyidfdZ1fnDFcPSXKag5uHuip2S1yPP2wHG
Salvamos y salimos del archivo ctrl+s y ctrl+x
Reiniciamos el contenedor de docker del mint de cashu.
docker-compose restart cashu
A partir de aquí ya podremos seleccionar en billeteras como cashu.me o elcaju.me USD como método para enviar y recibir pagos.