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.

LNbits Cashu Mint Wallet
  1. Hacemos clic en Add a new wallet.
  2. 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.
  3. 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.

LNbits Cashu Wallet Admin Key
  1. Seleccionamos la llave Admin key.
  2. 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.

Cashu Certs Files

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
Nota: El argumento -h que acompaña al comando mint-cli es necesario porque en un entornos docker no se puede acceder directamente a 127.0.0.1, es por eso que usamos cashu ya que es el nombre del servicio declarado en el docker compose.

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
    }
  ]
}