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 sepas 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 conectarno 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 comprobar ejecutan 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 keysets desde la CLI
Usaremos mint-cli para rotar los keyset 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
}
]
}
Lo anterior nos indica que existe un keyset cuya unidad es el sat, que se encuentra activo, con un input_fee_ppk de 100 y que no expira.
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
}
]
}