Eseguire il Tuo Nodo Mostro

Mostro v0.19.2 — Guida della Comunità · Ottobre 2026

1. Cos'è Mostro e perché la tua comunità dovrebbe eseguirne uno?

Mostro è un exchange peer-to-peer di Bitcoin che permette alle persone di comprare e vendere Bitcoin utilizzando valute locali (dollari, euro, pesos — qualsiasi valuta) senza dover fornire documenti d'identità (KYC). Pensalo come un marketplace decentralizzato dove acquirenti e venditori possono commerciare direttamente.

Funziona utilizzando due tecnologie:

Mostro agisce come un coordinatore di custodia — trattiene i Bitcoin del venditore in una "cassaforte" temporanea (chiamata hold invoice) fino a quando l'acquirente conferma di aver inviato il pagamento in valuta locale. Mostro non controlla mai realmente i fondi di nessuno; li trattiene solo brevemente durante lo scambio.

Perché la tua comunità vorrebbe eseguire un nodo Mostro?

  1. Entrate da commissioni — Ogni operazione ti genera una commissione (0,6% di default). Se la tua comunità fa $10.000 in operazioni mensili, sono ~$60/mese in commissioni.
  2. Trading P2P senza KYC — I membri della tua comunità possono comprare e vendere Bitcoin senza fornire documenti d'identità. Particolarmente importante in regioni con valute instabili o regolamentazioni restrittive.
  3. Dispute nella tua lingua — Quando un'operazione va storta, la tua comunità la risolve, nella tua lingua, comprendendo i tuoi metodi di pagamento locali.
  4. Indipendenza — Nessuna azienda può chiudere il tuo exchange. Nessun governo può fare pressione su un singolo operatore per chiuderlo.
  5. Personalizzazione — Tu scegli quali valute supportare, quali metodi di pagamento consentire e quali commissioni applicare.

Come funziona Mostro (Semplificato)

1. Alice vuole VENDERE Bitcoin per $50 USD → Crea un ordine su Mostro
2. Bob vuole COMPRARE Bitcoin con $50 USD → Vede l'ordine di Alice e lo prende
3. Mostro crea una "cassaforte" (hold invoice) → Alice invia i suoi Bitcoin nella cassaforte
4. Bob invia $50 ad Alice tramite bonifico, Zelle, contanti, ecc. → Bob preme "Fiat Inviato" nella sua app
5. Alice conferma di aver ricevuto i $50 → Preme "Rilascia"
6. Mostro rilascia i Bitcoin dalla cassaforte a Bob → Operazione completata! ✓

Se qualcosa va storto (es: Bob dice di aver pagato ma Alice non ha ricevuto), una delle parti può aprire una disputa, e gli arbitri assegnati della tua comunità indagano e risolvono.

2. Prerequisiti — Cosa ti serve prima di iniziare

2.1 Un Server (VPS)

Un VPS (Virtual Private Server) è un computer in un data center che funziona 24/7. Ne affitterai uno per ospitare il tuo nodo Mostro.

Specifiche minime:

RisorsaMinimoRaccomandato
CPU2 vCPU (condivise)2+ vCPU
RAM2 GB4 GB
Storage60 GB SSD100 GB SSD
Banda3 TB/mese3+ TB/mese
SOUbuntu 22.04+ LTSUbuntu 24.04 LTS

Costo mensile stimato: $10–$24/mese.

Provider VPS popolari:

💡 Consiglio

Molti provider VPS accettano pagamenti in Bitcoin. Cerca questa opzione se vuoi mantenere coerenza con la filosofia Bitcoin.

Devi sentirti a tuo agio nel connetterti a un server tramite SSH. Se non l'hai mai fatto, cerca un tutorial su "Connettersi via SSH a un VPS" — è più semplice di quanto sembri.

2.2 Un Nodo Lightning Network (LND)

Lightning Network è un sistema "layer 2" costruito su Bitcoin che permette pagamenti rapidi e economici. Per eseguire Mostro, hai bisogno di un nodo LND (Lightning Network Daemon) — il software Lightning specifico con cui Mostro lavora.

Le tue opzioni:

OpzioneDifficoltàCostoNote
Usare un nodo LND esistenteFacileGratis (se ne hai uno)Meglio se qualcuno ne ha già uno
Eseguire LND sullo stesso VPSDifficileStesso VPS + liquiditàRichiede VPS con 4GB+ RAM
Soluzione nodo-in-a-boxMedio$200-600 + liquiditàStart9, Umbrel, RaspiBlitz
StartOS con pacchetto MostroPiù facile$300-600 + liquiditàStart9 ha un pacchetto Mostro con un clic
Usare Voltage.cloudFacileDa ~$20/mese + liquiditàVoltage — LND ospitato con infrastruttura gestita
⚠️ Importante

Mostro richiede specificamente LND (non CLN/Core Lightning, non Eclair, non LDK). Assicurati che il tuo nodo Lightning esegua LND.

Cosa ti serve dal tuo nodo LND:

Genera un macaroon dedicato per Mostro. Non dare a Mostro il tuo admin.macaroon: concede il controllo totale sul tuo nodo e sui suoi fondi. Crea un macaroon che contenga solo i permessi che Mostro usa davvero (leggere le info del nodo, creare/regolare/annullare hold invoice, inviare e tracciare pagamenti).

Scegli prima un root key ID non ancora in uso. Revocare un macaroon revoca tutti i macaroon che condividono il suo ID, quindi riutilizzarne uno porterebbe via credenziali estranee. L'ID 0 appartiene ai macaroon di LND, quindi scegli un numero libero diverso da zero e annotalo:

lncli listmacaroonids

Poi crea il macaroon con l'ID che hai scelto (7 in questo esempio, sostituisci con il tuo):

lncli bakemacaroon --root_key_id 7 \
  --save_to /root/.lnd/data/chain/bitcoin/mainnet/mostro.macaroon \
  info:read invoices:read invoices:write offchain:read offchain:write

Questo macaroon non può aprire o chiudere canali, spostare fondi on-chain né modificare la configurazione del tuo nodo. Se dovesse trapelare, revocalo con lncli deletemacaroonid 7, usando lo stesso ID con cui l'hai creato, e generane uno nuovo.

2.3 Liquidità Lightning

Per facilitare le operazioni, il tuo nodo Lightning ha bisogno di canali con Bitcoin al loro interno. Pensa ai canali Lightning come tunnel di pagamento pre-finanziati. I Bitcoin all'interno di questi canali sono la tua "liquidità".

Quanta ne serve?

Volume di trading obiettivoLiquidità suggeritaBTC approssimativi
Comunità piccola (poche operazioni/giorno)1–5 milioni di sat0,01–0,05 BTC
Comunità media5–20 milioni di sat0,05–0,20 BTC
Comunità attiva20–100 milioni di sat0,20–1,0 BTC
💡 Nota sulla Liquidità Lightning

I Bitcoin nei tuoi canali Lightning sono bloccati onchain ma restano altamente spendibili via Lightning Network. Molti servizi accettano pagamenti Lightning — dai bar ai provider VPS — rendendo la tua liquidità piuttosto flessibile per l'uso quotidiano.

Inizia in piccolo, cresci gradualmente. Inizia con quanto basta per le esigenze iniziali della tua comunità e monitora il feedback. Quando i trader segnalano ordini falliti per capacità insufficiente, quello è il tuo segnale per aggiungerne di più. Ascolta la tua comunità.

Ottenere liquidità:

2.4 Chiavi Nostr

Il tuo nodo Mostro ha bisogno della propria identità sulla rete Nostr — una coppia di chiavi crittografiche con una chiave pubblica (l'indirizzo del tuo nodo) e una chiave privata (il tuo segreto).

⚠️ Importante

Non riutilizzare mai le chiavi Nostr tra istanze di Mostro. Ogni nodo ha bisogno della propria identità unica.

Generare chiavi Nostr sicure localmente con rana:

# Installare Rust (se non già installato)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

# Installare rana - generatore locale di chiavi Nostr
cargo install rana

# Generare una nuova coppia di chiavi (con frase seed di 12 parole)
rana --generate 12

Rana genererà la tua chiave privata (nsec), chiave pubblica (npub) e una frase seed di backup. Conserva tutto in modo sicuro! Nota: eseguire rana senza argomenti avvia il mining PoW (difficoltà 10) che può richiedere minuti — usa --generate per la generazione istantanea. Non generare mai chiavi importanti usando servizi online.

2.5 Livello di conoscenza tecnica

AttivitàDifficoltàConoscenze necessarie
Affittare un VPSFacileCarta di credito, navigazione web di base
Connettersi via SSHFacileSeguire istruzioni, digitare comandi
Installare DockerMedioCopiare e incollare comandi, risoluzione problemi di base
Eseguire Mostro (Docker)MedioModificare file di configurazione, capire i percorsi
Eseguire Mostro (nativo)DifficileAmministrazione Linux, compilazione software, systemd
Configurare LND da zeroDifficileConoscenza significativa di Linux e reti
Gestire la liquidità LightningDifficileComprendere l'economia dei canali Lightning

💡 Il nostro consiglio: Se la tua comunità ha qualcuno a proprio agio con la riga di comando Linux, può gestire l'installazione con Docker. La compilazione nativa richiede esperienza di amministrazione di sistema. La configurazione del nodo Lightning è la parte più complessa — considera di chiedere aiuto a qualcuno con esperienza, o di usare una soluzione nodo-in-a-box.

3. Installazione Passo per Passo

Tutte le opzioni di installazione condividono gli stessi primi passaggi. Poi scegli l'opzione che preferisci:

Tutte presuppongono che tu abbia già: ✅ Un VPS con Ubuntu · ✅ Accesso SSH · ✅ Un nodo LND funzionante.

Passaggi Comuni (per tutte e 3 le opzioni)

Passo 1: Connettiti al tuo VPS

ssh root@IL_TUO_INDIRIZZO_IP_VPS

Passo 2: Aggiorna il sistema

# Scaricare le informazioni più recenti sui pacchetti
apt update

# Installare tutti gli aggiornamenti disponibili
apt upgrade -y

Passo 3: Installare Docker e Docker Compose

💡 Nota

Docker è necessario per le opzioni A e B. Se compili manualmente (Opzione C), puoi saltare questo passaggio.

# Installare Docker con lo script ufficiale
curl -fsSL https://get.docker.com | sh

# Verificare che Docker sia installato
docker --version

# Verificare Docker Compose
docker compose version

Passo 4: Installare strumenti aggiuntivi

apt install -y git make

✅ Passaggi comuni completati. Ora scegli la tua opzione di installazione:

Opzione A: Docker Hub (La più veloce — Raccomandata)

Esegui Mostro direttamente da Docker Hub senza clonare il repository o compilare. Perfetto per deployment su VPS.

Passo 5: Creare la directory di configurazione

mkdir -p ~/mostro-config/lnd

Passo 6: Ottenere il template di configurazione

curl -sL https://raw.githubusercontent.com/MostroP2P/mostro/v0.19.2/settings.tpl.toml \
  -o ~/mostro-config/settings.toml

Passo 7: Copiare le credenziali LND

cp /percorso/del/tuo/tls.cert ~/mostro-config/lnd/tls.cert
cp /percorso/del/tuo/mostro.macaroon ~/mostro-config/lnd/mostro.macaroon

Se LND è sulla stessa macchina, i percorsi tipici sono:

Passo 8: Modificare la configurazione

nano ~/mostro-config/settings.toml

Modifiche necessarie:

[lightning]
lnd_cert_file = '/config/lnd/tls.cert'
lnd_macaroon_file = '/config/lnd/mostro.macaroon'
lnd_grpc_host = 'https://host.docker.internal:10009'  # Se LND sullo stesso VPS
# O usare 'https://IL_TUO_IP_LND:10009' se LND su server diverso

[database]
url = "sqlite:///config/mostro.db"  # mostrod usa sempre <directory-di-config>/mostro.db

[nostr]
nsec_privkey = 'LA_TUA_CHIAVE_NSEC_QUI'
relays = ['wss://relay.mostro.network', 'wss://nos.lol']

[mostro]
fee = 0.006                    # 0,6% commissione per operazione
max_order_amount = 1000000     # Ordine massimo in sat
min_payment_amount = 100       # Ordine minimo in sat
fiat_currencies_accepted = ['USD', 'EUR']  # Le tue valute

Salvare: Ctrl+X, poi Y, poi Invio.

Passo 9: Impostare i permessi

⚠️ Importante

Evita chmod 777. Usa permessi minimi.

sudo chown -R 1000:1000 ~/mostro-config
chmod 700 ~/mostro-config
chmod 600 ~/mostro-config/settings.toml
chmod 600 ~/mostro-config/lnd/mostro.macaroon

Passo 10: Eseguire il container

Se LND è sullo stesso VPS:

docker run -d --name mostro \
  --restart unless-stopped \
  --add-host=host.docker.internal:host-gateway \
  -v ~/mostro-config:/config \
  mostrop2p/mostro:v0.19.2

Se LND è su un server diverso:

docker run -d --name mostro \
  --restart unless-stopped \
  -v ~/mostro-config:/config \
  mostrop2p/mostro:v0.19.2

Passo 11: Controllare i log

docker logs -f mostro

Cerca questi messaggi:

💡 Nota

Non esiste un messaggio "connesso a LND". Mostro contatta LND durante l'avvio, quindi un daemon che continua a girare ha già la connessione funzionante. Il fallimento invece è rumoroso: registra Ln node error e termina.

💡 Risoluzione problemi

Se vedi Permission denied (os error 13), riapplica i permessi: chown -R 1000:1000 ~/mostro-config e riavvia: docker restart mostro.

🎉 Congratulazioni! Se vedi connessioni riuscite nei log, il tuo nodo Mostro è in funzione!

Alternativa: Docker Compose

Invece di un lungo comando docker run puoi descrivere il container in un file compose. Esegue la stessa immagine con le stesse impostazioni, e aggiornare diventa cambiare il tag su una riga. Crea ~/mostro-docker/compose.yml:

mkdir -p ~/mostro-docker
nano ~/mostro-docker/compose.yml
services:
  mostro:
    image: mostrop2p/mostro:v0.19.2
    container_name: mostro
    restart: unless-stopped
    extra_hosts:
      - "host.docker.internal:host-gateway"  # solo se LND gira su questo VPS
    volumes:
      - ${HOME}/mostro-config:/config

Avvialo e segui i log:

docker compose -f ~/mostro-docker/compose.yml up -d
docker compose -f ~/mostro-docker/compose.yml logs -f mostro

Scegline uno: docker run oppure compose, non entrambi. Per aggiornare l'uno o l'altro, vedi 5.5.

🔒 Nota di Sicurezza

Usa sempre un tag di versione specifico (es. mostrop2p/mostro:v0.19.2) invece di :latest per controllare i deployment.

Opzione B: Docker Build (Costruire l'immagine localmente)

Passo 5: Scaricare Mostro

cd /opt
git clone https://github.com/MostroP2P/mostro.git
cd mostro

Passo 6: Configurare i file

cd docker
mkdir -p config
cp ../settings.tpl.toml config/settings.toml

Passo 7: Modificare il file di configurazione

nano config/settings.toml

Modifica le stesse impostazioni dell'Opzione A, Passo 8.

⚠️ Se LND gira sulla stessa VPS

A differenza dell'Opzione A, il docker/compose.yml del repository non mappa host.docker.internal, quindi su Linux quel nome non si risolve dentro il container. Aggiungi il mapping al servizio mostro prima di compilare:

    extra_hosts:
      - "host.docker.internal:host-gateway"

Oppure punta lnd_grpc_host all'IP locale dell'host. Nota che make docker-build compila anche l'immagine StartOS, che una VPS non necessita: costa solo tempo di compilazione.

Passo 8: Costruire l'immagine Docker

cd ..
LND_CERT_FILE=/root/.lnd/tls.cert \
LND_MACAROON_FILE=/root/.lnd/data/chain/bitcoin/mainnet/mostro.macaroon \
make docker-build

Passo 9: Avviare Mostro

# Avvia Mostro e il relay incluso. `make docker-up` da solo avvia
# anche l'immagine StartOS, che su una VPS non serve.
docker compose -f docker/compose.yml up -d mostro nostr-relay

# Controlla lo stato
docker compose -f docker/compose.yml ps

# Vedi i log
docker compose -f docker/compose.yml logs -f mostro

🎉 Congratulazioni! Se vedi connessioni riuscite, il tuo nodo Mostro è in funzione!

Opzione C: Compilazione Nativa (Per operatori tecnici)

Passo 5: Installare Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source /root/.cargo/env
rustc --version
cargo --version
⚠️ Importante

NON installare Rust tramite apt install rustc. Usa sempre rustup. Il pacchetto di sistema è spesso obsoleto.

Passo 6: Installare le dipendenze di compilazione

apt install -y cmake build-essential libsqlite3-dev libssl-dev \
  pkg-config git sqlite3 protobuf-compiler

Passo 7: Scaricare e compilare Mostro

cd /opt
git clone https://github.com/MostroP2P/mostro.git
cd mostro
cargo build --release
💡 Consiglio

Se la compilazione fallisce per mancanza di RAM, aggiungi spazio swap:

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

Passi 8–10: Installare, inizializzare e pulire

install target/release/mostrod /usr/local/bin
cargo clean  # Risparmia 2+ GB di spazio

Passi 11–12: Creare utente e configurare

adduser --disabled-login mostro
mkdir -p /opt/mostro
cp settings.tpl.toml /opt/mostro/settings.toml
nano /opt/mostro/settings.toml

Modifica le stesse impostazioni dell'Opzione A, Passo 8.

Passi 13–15: Test, permessi e servizio systemd

# Test di esecuzione
/usr/local/bin/mostrod -d /opt/mostro

# Impostare i permessi
chown -R mostro:mostro /opt/mostro
💡 La procedura guidata interattiva

Se esegui mostrod senza un settings.toml nella directory indicata e sei su un terminale, ti propone un menu di configurazione che può costruire il file per te e scrivere il nsec in un .env. Senza terminale (Docker, systemd, CI) copia il template, stampa dove l'ha messo e termina perché tu lo modifichi.

Creare il servizio systemd:

# /etc/systemd/system/mostro.service
[Unit]
Description=Mostro daemon
After=network.target

[Service]
Type=simple
User=mostro
WorkingDirectory=/home/mostro
Environment=RUST_LOG=info
ExecStart=/usr/local/bin/mostrod -d /opt/mostro
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable mostro.service
systemctl start mostro.service
systemctl status mostro.service

🎉 Congratulazioni! Il tuo nodo Mostro è in esecuzione come servizio di sistema.

4. Configurazione in Dettaglio

Il file settings.toml controlla tutto del tuo nodo Mostro.

4.1 Chiavi Nostr — L'identità del tuo nodo

[nostr]
nsec_privkey = 'LA_TUA_CHIAVE_NSEC'
relays = [
  'wss://relay.mostro.network',
  'wss://nos.lol',
  'wss://relay.nostr.band'
]

Quali relay usare?

💡 Consiglio

Puoi anche far girare il tuo relay Nostr accanto a Mostro. La via Docker Build (Opzione B) ne include uno nel suo compose.yml; l'Opzione A e la compilazione nativa no.

Tenere la chiave fuori da settings.toml

Mostro legge la chiave anche dalla variabile d'ambiente MOSTRO_NSEC_PRIVKEY. La precedenza è: variabile d'ambiente, poi <directory-di-config>/.env, poi settings.toml.

# ~/mostro-config/.env  (chmod 600) — caricato automaticamente all'avvio
MOSTRO_NSEC_PRIVKEY=nsec1...

# Docker
docker run -e MOSTRO_NSEC_PRIVKEY=nsec1... ...

# Unità systemd
Environment="MOSTRO_NSEC_PRIVKEY=nsec1..."

Lasciare nsec_privkey in settings.toml funziona ancora. Se usi il file .env, fanne il backup con la stessa cura della configurazione.

4.2 Commissioni — Come generi entrate

[mostro]
fee = 0.006
dev_fee_percentage = 0.30

Commissione di trading (fee): Percentuale addebitata per operazione, divisa tra acquirente e venditore.

Esempio: In un'operazione da 100.000 sat con fee = 0.006: L'acquirente paga 300 sat, il venditore paga 300 sat, il tuo nodo guadagna 600 sat in totale.

Commissione di sviluppo (dev_fee_percentage): Una percentuale delle tue entrate da commissioni che va allo sviluppo di Mostro.

📝 Nota

Impostare dev_fee_percentage sotto 0.10 impedirà a Mostro di avviarsi. Questo minimo assicura un finanziamento sostenibile dello sviluppo.

4.3 Limiti degli ordini e valute

[mostro]
max_order_amount = 1000000
min_payment_amount = 100
max_orders_per_response = 10
fiat_currencies_accepted = ['USD', 'EUR', 'ARS', 'CUP']

4.4 Profilo del nodo (Opzionale ma raccomandato)

[mostro]
name = "LatAm Mostro"
about = "Exchange P2P di Bitcoin per l'America Latina. Supporto in spagnolo."
picture = "https://esempio.com/il-tuo-logo.png"
website = "https://sito-della-tua-comunita.com"

Questi configurano il profilo del tuo Mostro su Nostr (NIP-01 kind 0 metadata). I client mostrano queste informazioni affinché gli utenti sappiano su quale Mostro stanno operando.

4.5 Tempi e scadenza

[mostro]
expiration_hours = 24        # Quanto tempo un ordine resta aperto
expiration_seconds = 900     # Tempo per completare (15 min)
hold_invoice_expiration_window = 300  # Tempo che ha il taker per pagare la fattura o fornirne una di incasso (5 min)

4.6 Anti-Spam

[mostro]
pow = 0  # 0 = disabilitato; 10-20 = moderato. Inizia con 0.

4.7 Interfaccia RPC di Amministrazione (Opzionale)

[rpc]
enabled = false
listen_address = "127.0.0.1"
port = 50051
# auth_token = "una-stringa-lunga-e-casuale"

Questa interfaccia gRPC serve agli strumenti dell'operatore: grpcurl, e mostro-cli per la modalità manutenzione (admsetmaintenance, admmaintenancestatus, admcancelpending). Mostrix non la usa: lavora su Nostr, quindi non ti serve l'RPC per risolvere le dispute.

⚠️ Sicurezza

Mantieni listen_address su "127.0.0.1" e non esporre mai la porta a internet. Imposta auth_token ogni volta che la porta è raggiungibile da qualcosa che non sia la macchina locale, come un tunnel SSH o un container sidecar: una connessione inoltrata arriva come loopback, quindi l'indirizzo di ascolto da solo non è autorizzazione. Con un token impostato, ogni chiamata che modifica lo stato deve portare l'header authorization: Bearer <token>.

4.8 Protocollo di Trasporto

Un nodo Mostro parla un solo protocollo, scelto qui:

[mostro]
transport = "nip44"
ValoreProtocolloKind visibile sul relayStato
"nip44"v2 — eventi kind 14 firmati con contenuto cifrato NIP-4414Predefinito, anche per una config senza riga transport
"gift-wrap"v1 — gift wrap NIP-591059Deprecato, solo opt-in, rimosso in v0.19.0

Il tuo nodo annuncia quale protocollo parla nel suo evento info kind 38385, quindi i client compatibili scelgono il formato da soli. Mostro Mobile, Mostrix e mostro-cli supportano v2.

⚠️ Solo se devi servire client vecchi

Scrivi transport = "gift-wrap" solo per continuare a servire client che parlano soltanto il protocollo v1 durante la transizione. Non viene mai selezionato automaticamente e scompare in v0.19.0, dopodiché il tuo nodo gira solo in v2. Lascia il valore predefinito se non hai una ragione precisa.

Il trasporto v2 permette anche un filtro anti-spam più fine di quello in 4.6. pow si applica a ogni messaggio, mentre pow_first_contact si applica solo ai mittenti estranei a un'operazione attiva e viene verificato prima della decifratura. Così le operazioni in corso restano economiche mentre agli sconosciuti costa lavoro reale:

[mostro]
pow = 0                  # operazioni in corso
pow_first_contact = 16   # nuovi ordini e prese da chiavi sconosciute

4.9 Limiti di Sicurezza Lightning

Queste impostazioni di [lightning] limitano quanto a lungo i tuoi canali possono restare bloccati e quanti pagamenti possono essere irrisolti contemporaneamente. Hanno tutte un valore predefinito, quindi un file di configurazione di una versione precedente si avvia ancora, ma un template nuovo le include e vale la pena conoscerle.

[lightning]
max_final_cltv_expiry_delta = 144
escrow_deadline_margin_blocks = 24
max_inflight_payouts = 100
max_inflight_payouts_per_destination = 10
payment_cltv_limit = 1008
allow_node_change = false
ImpostazioneCosa protegge
max_final_cltv_expiry_deltaRifiuta una fattura di pagamento il cui CLTV finale permetterebbe al beneficiario di trattenere i tuoi sat troppo a lungo. 144 blocchi (circa un giorno) è il massimo che chiedono i wallet reali. Non impostarlo mai a 0: rifiuterebbe ogni fattura.
escrow_deadline_margin_blocksMargine di sicurezza prima che LND annulli automaticamente una hold invoice accettata. Deve superare comodamente invoices.holdexpirydelta del tuo nodo, che per default è 12.
max_inflight_payoutsTetto ai pagamenti irrisolti su tutto il nodo, così un beneficiario che non liquida mai non può esaurire i tuoi slot HTLC. Un pagamento frenato viene ritardato, mai scartato.
max_inflight_payouts_per_destinationLo stesso tetto per pubkey di destinazione, ed è il più efficace dei due.
payment_cltv_limitTetto al timelock totale di una rotta di pagamento. Non deve superare --max-cltv-expiry del tuo LND e deve stare almeno 576 blocchi sopra max_final_cltv_expiry_delta, altrimenti i pagamenti legittimi falliscono con "no route".
allow_node_changeGuardia all'avvio in caso di cambio di nodo Lightning. Lascialo su false e vedi 5.8.

Nota anche che max_routing_fee, nel blocco [mostro], ora ha come default 0.002 (0,2%).

4.10 Fonti del Prezzo di Bitcoin

Mostro ha bisogno di un tasso BTC/fiat per quotare gli ordini. Senza un blocco [price] usa una sola fonte, Yadio, tramite il ormai deprecato bitcoin_price_api_url. Aggiungere il blocco ti dà più fonti, combinate per mediana e con scarto dei valori anomali, così un'API caduta o che restituisce un numero sbagliato non muove i tuoi prezzi.

[price]
update_interval_seconds = 300
max_price_staleness_seconds = 1800
outlier_threshold_pct = 5.0        # scarta una fonte a questa distanza dalla mediana (servono 3+ fonti)
provider_timeout_seconds = 10
provider_failure_threshold = 3     # fallimenti prima di mettere una fonte in pausa
provider_failure_cooldown_seconds = 120
publish_to_nostr = true            # pubblica i tassi aggregati come kind 30078

[price.providers.yadio]
enabled = true
url = "https://api.yadio.io"

[price.providers.coingecko]
enabled = true
url = "https://api.coingecko.com/api/v3"
# api_key = "CG-xxxx"              # opzionale, alza i limiti di frequenza

[price.providers.currency_api]
enabled = true
url = "https://currency-api.pages.dev/v1"
fallback_urls = ["https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1"]
except = ["CUP", "MLC"]            # solo tasso ufficiale, non mischiare con fonti informali

[price.providers.blockchain]
enabled = true
url = "https://blockchain.info"

Ogni fonte accetta only o except per limitare a quali valute contribuisce, e fallback_urls per mirror provati quando la URL principale fallisce. Una fonte abilitata a cui manca un segreto richiesto fallisce all'avvio invece di non produrre silenziosamente alcuna quotazione.

💡 Se le API di prezzo sono bloccate nel tuo paese

Puoi prendere i tassi da Nostr invece che via HTTP, pubblicati da nodi Mostro di cui ti fidi. Riusa i relay già presenti in [nostr], quindi funziona dovunque il tuo nodo raggiunga già un relay. Con più nodi fidati vince l'evento valido più recente.

[price.providers.nostr]
enabled = true
trusted_nodes = [
    # pubkey hex dei nodi Mostro di cui ti fidi per tassi accurati
]

Gli operatori che servono il peso cubano possono aggiungere El Toque per CUP e MLC del mercato informale. È opt-in, limitato a queste due valute, e richiede un token gratuito: un El Toque abilitato senza token si rifiuta di partire.

4.11 Altri Blocchi Opzionali

Altri tre blocchi che potresti incontrare in un template recente. Nessuno è obbligatorio.

Ritenzione degli eventi. Quanto tempo Mostro conserva ogni tipo di evento prima che scada. Ometti del tutto il blocco per accettare i valori predefiniti.

[expiration]
order_days = 30        # eventi degli ordini (kind 38383)
rating_days = 90       # storico della reputazione (kind 38384)
dispute_days = 90      # dispute, conservate più a lungo per l'audit (kind 38386)
fee_audit_days = 365   # trasparenza delle commissioni (kind 8383)
dm_days = 30           # messaggi diretti del protocollo v2 (kind 14)

Le cauzioni anti-abuso ([anti_abuse_bond]) possono richiedere una cauzione tramite hold invoice ai taker, ai maker o a entrambi, così abbandonare un'operazione ha un costo. Disabilitato per default e ancora in rilascio a fasi. Leggi il docs/ANTI_ABUSE_BOND.md del progetto prima di abilitarlo su un nodo in produzione.

L'escrow Cashu ([cashu]) è una modalità sperimentale che gira senza LND e tiene l'escrow in token Cashu su una singola mint. Non è ancora utilizzabile per operare davvero, le azioni di trade vengono ancora rifiutate, e non si può combinare con le cauzioni anti-abuso. Menzionato qui perché sappia cos'è quel blocco quando lo vedi.

5. Gestione del Tuo Nodo Mostro

5.1 Come funzionano le dispute

Le dispute sono la tua responsabilità operativa più importante.

Quando si verificano le dispute?

Il processo di disputa:

  1. L'utente apre una disputa — Una delle parti clicca "Disputa" nel client
  2. Mostro segna l'ordine — Lo stato cambia in "Disputa", i fondi restano bloccati
  3. L'arbitro prende il caso — Un admin assegnato al tuo nodo indaga
  4. Indagine — Comunica con entrambe le parti, richiede prove
  5. Risoluzione — L'arbitro decide: rilasciare all'acquirente, o rimborsare al venditore
⚠️ Importante

Scegli i tuoi arbitri con cura. Hanno il potere di decidere dove vanno i fondi bloccati. Scegli membri fidati e imparziali della comunità. Si raccomandano 2-3 arbitri.

Livelli di permesso dei solver

Un solver può essere registrato in sola lettura o con pieni poteri. Entrambi i livelli possono prendere una disputa e parlare con le parti, ma solo un solver read-write può decidere dove va il denaro.

Registrato comePuòNon può
npub1...:readPrendere una disputa, leggerla, scrivere a entrambe le partiLiquidare o annullare l'ordine
npub1...:read-writeTutto, incluso liquidare e annullare—

Un npub1... nudo senza suffisso diventa read-write per default, e lo stesso vale per la registrazione tramite l'interfaccia RPC. Fai partire un nuovo arbitro con :read mentre impara il processo, poi registralo di nuovo come read-write quando ti fidi del suo giudizio.

5.2 Mostrix — Il tuo strumento di amministrazione

Mostrix è un client basato su terminale (TUI) per la risoluzione delle dispute. Se esegui un nodo Mostro, hai bisogno di Mostrix.

Opzione A: Scarica il binario pre-compilato (Raccomandato)

Scarica l'ultima versione per la tua piattaforma da GitHub Releases:

# Linux (x86_64)
wget https://github.com/MostroP2P/mostrix/releases/latest/download/mostrix-x86_64-unknown-linux-musl

# Linux (ARM64 / Raspberry Pi 4)
wget https://github.com/MostroP2P/mostrix/releases/latest/download/mostrix-aarch64-unknown-linux-musl

# Windows
# Scarica mostrix-x86_64-pc-windows-gnu.exe dalla pagina delle release

Verifica il download prima di eseguirlo, come spiegato subito sotto.

🔐 Verifica la Release

Verifica sempre il binario prima di eseguirlo. Importa le chiavi dei manutentori una sola volta:

curl https://raw.githubusercontent.com/MostroP2P/mostrix/main/keys/negrunch.asc | gpg --import
curl https://raw.githubusercontent.com/MostroP2P/mostrix/main/keys/arkanoider.asc | gpg --import

Le firme sono file separati chiamati manifest.txt.sig.<manutentore>. Non tutte le release ne portano due, quindi controlla la pagina della release e scarica quelle effettivamente elencate:

wget https://github.com/MostroP2P/mostrix/releases/latest/download/manifest.txt
wget https://github.com/MostroP2P/mostrix/releases/latest/download/manifest.txt.sig.arkanoider

# Verifica ogni firma che hai scaricato
gpg --verify manifest.txt.sig.arkanoider manifest.txt

# Poi confronta l'hash del binario con il manifest
shasum -a 256 mostrix-x86_64-unknown-linux-musl
grep mostrix-x86_64-unknown-linux-musl manifest.txt

Una firma valida da una chiave di manutentore di cui ti fidi è sufficiente. Se un wget restituisce 404, quella firma semplicemente non è stata pubblicata per quella release: non trattare un file assente come uno verificato.

Solo quando una firma e l'hash tornano, rendi eseguibile il binario e avvialo:

chmod +x mostrix-x86_64-unknown-linux-musl
./mostrix-x86_64-unknown-linux-musl

Opzione B: Compila dal codice sorgente

Se preferisci compilare dal codice sorgente o hai bisogno di una piattaforma non disponibile nelle release:

# Installa le dipendenze (Ubuntu/Debian)
sudo apt install -y cmake build-essential pkg-config

# Installa Rust (se non già installato)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Clona e compila
git clone https://github.com/MostroP2P/mostrix.git
cd mostrix
cargo build --release

# Esegui
./target/release/mostrix

Primo avvio e configurazione

Al primo avvio, Mostrix genera automaticamente un file ~/.mostrix/settings.toml con valori predefiniti sensati, inclusa una nuova coppia di chiavi Nostr. Il tuo npub generato verrà mostrato nel terminale.

⚠️ Importante: Configura la tua pubkey Mostro

La configurazione auto-generata usa la pubkey ufficiale di Mostro per default. Devi cambiarla con la pubkey del tuo nodo Mostro:

# Modifica la configurazione
nano ~/.mostrix/settings.toml

# Cambia questa riga con la pubkey del TUO nodo Mostro:
mostro_pubkey = "LA_TUA_PUBKEY_MOSTRO_HEX"

Per la modalità admin (risoluzione dispute), configura anche:

# ~/.mostrix/settings.toml
mostro_pubkey = "LA_TUA_PUBKEY_MOSTRO_HEX"
nsec_privkey = "nsec1la_tua_chiave_personale"  # Auto-generata al primo avvio
admin_privkey = "nsec1la_tua_chiave_admin"        # Il nsec del daemon stesso — vedi sotto
relays = ["wss://relay.mostro.network"]
currencies_filter = []                          # Vuoto = mostra tutte le valute
user_mode = "admin"                             # Abilita modalità admin
⚠️ Quale chiave va in admin_privkey?

Mostro riconosce l'operatore dalla propria chiave, quindi admin_privkey deve essere il nsec_privkey del daemon, quello la cui pubkey hai messo in mostro_pubkey. Una chiave personale viene rifiutata.

Quella chiave è l'identità del tuo nodo, quindi evita di portarla in giro su un laptop. Registra invece una chiave di solver separata e usa quella per le dispute. Solo la chiave dell'operatore può aggiungere solver:

ADMIN_NSEC=nsec1... mostro-cli admaddsolver -n npub1solver...

L'opzione Settings → Add Dispute Solver di Mostrix fa la stessa cosa.

5.3 mostro-watchdog — Notifiche dispute su Telegram

mostro-watchdog monitora il tuo nodo Mostro per le dispute e invia avvisi istantanei tramite Telegram. Essenziale per tempi di risposta rapidi.

Opzione A: Installazione automatica (Raccomandata)

# Scarica ed esegui lo script di installazione
curl -fsSL https://raw.githubusercontent.com/MostroP2P/mostro-watchdog/main/install.sh | bash

Opzione B: Download manuale del binario

# Linux x86_64 (Intel/AMD)
curl -LO https://github.com/MostroP2P/mostro-watchdog/releases/latest/download/mostro-watchdog-linux-x86_64
chmod +x mostro-watchdog-linux-x86_64
sudo mv mostro-watchdog-linux-x86_64 /usr/local/bin/mostro-watchdog

# Linux ARM64 (Raspberry Pi, server ARM)
curl -LO https://github.com/MostroP2P/mostro-watchdog/releases/latest/download/mostro-watchdog-linux-aarch64
chmod +x mostro-watchdog-linux-aarch64
sudo mv mostro-watchdog-linux-aarch64 /usr/local/bin/mostro-watchdog

Opzione C: Compilare dal codice sorgente

git clone https://github.com/MostroP2P/mostro-watchdog.git
cd mostro-watchdog
cargo build --release
sudo cp target/release/mostro-watchdog /usr/local/bin/

Configurazione:

cp config.example.toml config.toml
nano config.toml
[mostro]
pubkey = "LA_TUA_PUBKEY_MOSTRO"

[nostr]
relays = ["wss://relay.mostro.network", "wss://nos.lol"]

[telegram]
bot_token = "IL_TUO_BOT_TOKEN"
chat_id = -1001234567890
💡 Consiglio

Esegui mostro-watchdog come servizio systemd accanto al tuo nodo Mostro per il monitoraggio 24/7.

5.4 Monitoraggio dell'uptime

Il tuo nodo deve essere in funzione 24/7.

# Nativo
systemctl status mostro.service
journalctl -u mostro -f
journalctl -u mostro | grep -E "(error|warn|connected)" --ignore-case

# Docker Hub (Opzione A)
docker ps --filter name=mostro
docker logs -f mostro

# Docker Build (Opzione B)
docker compose -f /opt/mostro/docker/compose.yml ps
docker compose -f /opt/mostro/docker/compose.yml logs -f mostro
💡 Consiglio pro

Configura un monitor di uptime semplice usando UptimeRobot (livello gratuito) o un cron job che ti avvisi se Mostro va offline.

Controllare il tuo nodo dall'esterno

Il tuo nodo ripubblica un evento info (kind 38385) che lo descrive: commissioni, valute, versione del protocollo, flag di manutenzione. Leggerlo da un relay è il modo più rapido di confermare che il mondo esterno vede quello che credi.

cargo install nostreq nostcat
nostreq --kinds 38385 --limit 1 --authors LA_TUA_MOSTRO_PUBKEY_HEX \
  | nostcat --stream wss://relay.mostro.network | jq

5.5 Aggiornare Mostro

Aggiornare sostituisce il binario mostrod e nient'altro: settings.toml e mostro.db restano dove sono. Le migrazioni del database si applicano da sole all'avvio della nuova versione, quindi non ci sono passi aggiuntivi.

Prima di aggiornare

  1. Leggi le note di rilascio della versione a cui passi. Il tuo settings.toml non viene mai sovrascritto, quindi una nuova opzione ha effetto solo quando la aggiungi: confronta il tuo file con il nuovo settings.tpl.toml.
  2. Fai un backup del database con i comandi di 5.6. Ti serve per tornare indietro.

Docker Hub (docker run)

export MOSTRO_TAG=v0.19.2
# Scarica prima: il nodo resta attivo durante il download
docker pull mostrop2p/mostro:$MOSTRO_TAG
docker stop mostro
docker rm mostro
docker run -d --name mostro \
  --restart unless-stopped \
  --add-host=host.docker.internal:host-gateway \
  -v ~/mostro-config:/config \
  mostrop2p/mostro:$MOSTRO_TAG

Usa gli stessi flag dell'installazione (togli --add-host se LND è su un altro server). Se non li ricordi, controlla docker inspect mostro prima di rimuovere il container.

⚠️ docker restart non è un aggiornamento

docker restart riavvia lo stesso container, con l'immagine da cui è stato creato. Per eseguire una nuova versione il container va ricreato: docker rm + docker run, oppure docker compose up -d dopo aver cambiato il tag.

Docker Hub (Docker Compose)

export MOSTRO_TAG=v0.19.2
COMPOSE=~/mostro-docker/compose.yml
# Punta la riga image al nuovo tag e controllala
sed -i "s|image: mostrop2p/mostro:.*|image: mostrop2p/mostro:$MOSTRO_TAG|" $COMPOSE
grep image: $COMPOSE
docker compose -f $COMPOSE pull
# Ricrea il container perché l'immagine è cambiata
docker compose -f $COMPOSE up -d

Docker Build

cd /opt/mostro
git fetch --tags
git checkout v0.19.2
make docker-build
make docker-down
make docker-up

Nativo

cd /opt/mostro
git fetch --tags
git checkout v0.19.2
cargo build --release
install target/release/mostrod /usr/local/bin
cargo clean
systemctl restart mostro.service

Verificare la nuova versione

# Docker Hub (docker run)
docker exec mostro mostrod --version
docker logs -f mostro

# Docker Hub (Docker Compose)
docker compose -f ~/mostro-docker/compose.yml exec mostro mostrod --version
docker compose -f ~/mostro-docker/compose.yml logs -f mostro

# Docker Build
docker compose -f /opt/mostro/docker/compose.yml exec mostro mostrod --version
docker compose -f /opt/mostro/docker/compose.yml logs -f mostro

# Nativo
mostrod --version
journalctl -u mostro -f

Cerca gli stessi messaggi di avvio della prima esecuzione (Passo 11 dell'Opzione A).

Tornare indietro

Se la nuova versione dà problemi, torna al tag precedente. La nuova versione potrebbe aver già migrato il database, e un mostrod più vecchio può rifiutarsi di avviarsi con esso, quindi ripristina il backup fatto prima di aggiornare:

docker stop mostro
docker rm mostro
# sostituisci YYYYMMDD con la data del backup fatto prima di aggiornare
BACKUP=/root/mostro-backups/mostro.db.YYYYMMDD
cp "$BACKUP" ~/mostro-config/mostro.db
rm -f ~/mostro-config/mostro.db-wal ~/mostro-config/mostro.db-shm
chown 1000:1000 ~/mostro-config/mostro.db
# poi avvia il tag precedente: stesso comando docker run,
# oppure rimetti il vecchio tag in compose.yml ed esegui docker compose up -d

Docker Build e nativo funzionano allo stesso modo: torna al tag precedente, ricompila e ripristina il database prima di avviare.

⚠️ Non cambiare nodo Lightning nello stesso momento

Aggiornare Mostro è sicuro in qualsiasi momento. Puntarlo a un nodo Lightning diverso non lo è: drena prima l'escrow, vedi 5.8.

5.6 Backup

File critici da salvare: settings.toml, il file .env se ci tieni il tuo nsec (vedi 4.1), e mostro.db (storico ordini, reputazione).

⚠️ Non copiare un database attivo con cp

SQLite lavora in modalità WAL, quindi le scritture recenti stanno in mostro.db-wal finché non vengono consolidate. Copiare solo mostro.db mentre Mostro è in esecuzione può produrre un backup a cui mancano le operazioni più recenti. Usa il comando di backup nativo di SQLite, che è sicuro su un database attivo e scrive un unico file coerente.

# Backup manuale — Docker Hub:
mkdir -p /root/mostro-backups
sqlite3 ~/mostro-config/mostro.db ".backup '/root/mostro-backups/mostro.db.$(date +%Y%m%d)'"
cp ~/mostro-config/settings.toml /root/mostro-backups/settings.toml.$(date +%Y%m%d)
cp ~/mostro-config/.env /root/mostro-backups/env.$(date +%Y%m%d) 2>/dev/null

# Backup manuale — Docker Build (Opzione B):
sqlite3 /opt/mostro/docker/config/mostro.db ".backup '/root/mostro-backups/mostro.db.$(date +%Y%m%d)'"
cp /opt/mostro/docker/config/settings.toml /root/mostro-backups/settings.toml.$(date +%Y%m%d)

# Backup manuale — Nativo:
sqlite3 /opt/mostro/mostro.db ".backup '/root/mostro-backups/mostro.db.$(date +%Y%m%d)'"
cp /opt/mostro/settings.toml /root/mostro-backups/settings.toml.$(date +%Y%m%d)

Backup giornaliero automatico (aggiungi al crontab con crontab -e):

# Docker Hub (Opzione A):
0 3 * * * mkdir -p /root/mostro-backups && sqlite3 /root/mostro-config/mostro.db ".backup '/root/mostro-backups/mostro.db.$(date +\%Y\%m\%d)'" && cp /root/mostro-config/settings.toml /root/mostro-backups/settings.toml.$(date +\%Y\%m\%d)

# Docker Build (Opzione B):
0 3 * * * mkdir -p /root/mostro-backups && sqlite3 /opt/mostro/docker/config/mostro.db ".backup '/root/mostro-backups/mostro.db.$(date +\%Y\%m\%d)'" && cp /opt/mostro/docker/config/settings.toml /root/mostro-backups/settings.toml.$(date +\%Y\%m\%d)

# Nativo (Opzione C):
0 3 * * * mkdir -p /root/mostro-backups && sqlite3 /opt/mostro/mostro.db ".backup '/root/mostro-backups/mostro.db.$(date +\%Y\%m\%d)'" && cp /opt/mostro/settings.toml /root/mostro-backups/settings.toml.$(date +\%Y\%m\%d)
⚠️ Critico

La tua nsec_privkey in settings.toml È l'identità del tuo nodo. Se la perdi, perdi la tua reputazione e tutti gli utenti devono riconnettersi a una nuova identità. Conserva una copia offline.

5.7 Revisione dell'attività delle operazioni

# Contare tutti gli ordini
sqlite3 /percorso/di/mostro.db "SELECT COUNT(*) FROM orders;"

# Operazioni recenti riuscite
sqlite3 /percorso/di/mostro.db "SELECT id, fiat_code, fiat_amount, amount, fee, status, created_at FROM orders WHERE status = 'success' ORDER BY created_at DESC LIMIT 10;"

# Ordini in attesa
sqlite3 /percorso/di/mostro.db "SELECT id, fiat_code, fiat_amount, status, created_at FROM orders WHERE status = 'pending';"

# Ricavi da commissioni: orders.fee memorizza la metà di ciascuna parte, quindi la commissione lorda del nodo è fee*2 e la dev fee viene sottratta da essa
sqlite3 /percorso/di/mostro.db "SELECT SUM(fee*2) AS gross_fees, SUM(dev_fee) AS dev_fees, SUM(fee*2 - COALESCE(dev_fee, 0)) AS net_fees FROM orders WHERE status = 'success';"

5.8 Modalità Manutenzione e Cambio di Nodo Lightning

Le hold invoice, le cauzioni e i pagamenti in volo appartengono al nodo Lightning che li ha creati. Puntare Mostro a un altro nodo mentre qualcosa di tutto questo è aperto lascerebbe quelle operazioni in sospeso, quindi il daemon si rifiuta di partire quando vede una nuova identità LND con escrow ancora legato alla precedente:

REFUSING TO START: Lightning node changed from ... but escrow is still bound to the old node

La modalità manutenzione è il modo per drenare prima. Mentre è attiva, nuovi ordini e prese vengono rifiutati e le operazioni aperte continuano a funzionare, così l'escrow può liquidarsi. Richiede l'interfaccia RPC abilitata (vedi 4.7).

  1. Annuncia la finestra ai tuoi utenti con ampio preavviso.
  2. Attiva la modalità manutenzione: mostro-cli admsetmaintenance -e true -r "LN node migration".
  3. Interroga mostro-cli admmaintenancestatus finché non riporta drained = true. Gli ordini in attesa scadono da soli; per accorciare il drenaggio puoi annullarne uno con mostro-cli admcancelpending -o <order-id>, che libera subito la cauzione del creatore. Annuncialo prima, è l'ordine dell'utente. Chiudi le dispute di lunga durata come sempre.
  4. Tieni online il nodo vecchio per tutto il tempo. Deve ancora completare i pagamenti in volo.
  5. Ferma Mostro e fai il backup di mostro.db.
  6. Punta [lightning] al nodo nuovo e lascia allow_node_change = false.
  7. Avvia Mostro. Registra la nuova pubkey. Disattiva la modalità manutenzione e prova con un ordine.
  8. Solo adesso dismetti il nodo vecchio.
⚠️ allow_node_change

Mettilo a true solo per il disaster recovery, quando il nodo vecchio è perso definitivamente. Lascia consapevolmente irrisolte le operazioni coinvolte. Spostare lo stesso nodo su un altro host non è un cambio di nodo e non richiede nulla di tutto questo.

5.9 Comandi da Operatore con mostro-cli

Mostrix è il modo comodo per lavorare le dispute, ma mostro-cli copre lo stesso terreno da shell e ha alcuni comandi che Mostrix non ha. I comandi di disputa sono firmati con una chiave Nostr che passi come ADMIN_NSEC, e deve essere quella del daemon stesso o di un solver registrato.

# Lavoro sulle dispute (via Nostr, richiede ADMIN_NSEC)
export ADMIN_NSEC=nsec1...
mostro-cli listdisputes
mostro-cli admtakedispute -d <dispute-id>
mostro-cli admsenddm -p <npub> -m "messaggio a una parte"
mostro-cli admsettle -o <order-id>      # rilascia all'acquirente
mostro-cli admcancel -o <order-id>      # rimborsa il venditore

# Registra un arbitro, eventualmente in sola lettura
mostro-cli admaddsolver -n npub1...:read

Un altro gruppo di comandi passa dal gRPC di amministrazione invece che da Nostr, quindi richiedono MOSTRO_RPC_URL e MOSTRO_RPC_TOKEN anziché ADMIN_NSEC, e l'interfaccia RPC abilitata (vedi 4.7).

export MOSTRO_RPC_URL=http://127.0.0.1:50051
export MOSTRO_RPC_TOKEN=il-tuo-token-auth

mostro-cli admsetmaintenance -e true -r "motivo"
mostro-cli admmaintenancestatus
mostro-cli admcancelpending -o <order-id>

admcancelpending vale la pena conoscerlo anche fuori da una migrazione. Annulla un ordine ancora in attesa o in attesa della cauzione di un taker, avvisa il maker e libera tutte le sue cauzioni in un colpo. Usalo per un ordine chiaramente abbandonato o quotato male, e avvisa prima il maker: è il suo ordine, e questa non è una risoluzione di disputa.

6. Analisi dei Costi

Costi operativi mensili

VoceCosto mensileNote
VPS (server)$10–24Dipende dal provider e dalle specifiche
Nome di dominio (opzionale)$1–2Per un sito web/identità
Commissioni on-chain canali LightningVariabileApertura/chiusura canali
Totale mensile$11–26Esclusa liquidità Lightning

Costi una tantum / di capitale

VoceCostoNote
Liquidità Lightning0,01–1,0+ BTCBloccata nei canali; recuperata alla chiusura
Hardware del nodo (se self-hosted)$0–600Gratis se usi VPS; $300-600 per Start9/Umbrel
Tempo di configurazione4–16 oreA seconda del livello di esperienza

Potenziale di entrate

Volume mensileCommissione (0,6%)Commissione dev (30%)Il tuo reddito netto
$1.000~$6~$1,80~$4,20
$10.000~$60~$18~$42
$50.000~$300~$90~$210
$100.000~$600~$180~$420
📝 Realtà

La maggior parte dei nodi nuovi impiega mesi per costruire volume di operazioni. Non aspettarti profitti immediati. Il vero valore spesso viene dal fornire un servizio alla tua comunità, con le commissioni come bonus.

Impegno di tempo

AttivitàFrequenzaTempo
Monitoraggio (controllare log, stato)Giornaliero5–10 min
Risoluzione disputeAl bisogno15–60 min per disputa
AggiornamentiMensile15–30 min
Gestione liquiditàSettimanale15–30 min
Stima settimanale totale1–3 ore

7. Domande Frequenti

Devo essere uno sviluppatore per eseguire un nodo Mostro?

No, ma devi sentirti a tuo agio con le operazioni base da riga di comando (digitare comandi, modificare file di testo). Il percorso Docker (Opzione A) è progettato per essere accessibile.

Posso eseguire Mostro su un Raspberry Pi?

Tecnicamente sì (usando Start9 o simili), ma non è raccomandato per la produzione a causa delle limitazioni di CPU e RAM. Un VPS è più affidabile.

Posso usare Core Lightning (CLN) invece di LND?

No. Mostro attualmente supporta solo LND, perché dipende dall'implementazione specifica delle hold invoice di LND. Il supporto per altre implementazioni potrebbe arrivare in futuro.

Come si connettono gli utenti al mio Mostro?

Gli utenti hanno bisogno di un'app client Mostro (come Mostro Mobile o mostro-cli) e della chiave pubblica del tuo Mostro (npub). Aggiungono la tua npub al loro client, e il client comunica attraverso i relay Nostr. Non serve una connessione diretta.

Posso eseguire più istanze di Mostro?

Sì, ma ognuna ha bisogno della propria coppia di chiavi Nostr, nodo LND (o almeno canali/liquidità separati), e configurazione.

È legale?

Dipende molto dalla tua giurisdizione. Mostro è software per il trading peer-to-peer. In alcune giurisdizioni, operare un exchange P2P può richiedere licenze. Verifica le normative locali e chiedi consulenza legale.

Quanta banda usa Mostro?

Pochissima — principalmente piccoli eventi Nostr. Qualche GB al mese è tipico anche con volumi moderati.

Cosa succede se il mio nodo va offline?

Gli ordini in attesa alla fine scadono. Le operazioni attive con fondi bloccati continuano quando torni online. Se sei offline troppo a lungo, gli utenti potrebbero perdere fiducia. Dalla v0.18.3 esiste anche una scadenza per l'escrow: se il nodo resta giù abbastanza a lungo perché la hold invoice si avvicini al suo orizzonte CLTV, LND la annulla e il venditore viene rimborsato automaticamente.

Posso cambiare la mia chiave Nostr in seguito?

Puoi, ma perderai l'identità e la reputazione del tuo nodo. Gli utenti lo vedranno come un nuovo Mostro. Tratta la tua chiave come la tua identità di marca.

Posso perdere soldi eseguendo un nodo Mostro?

Sì, è possibile: i fondi dei canali Lightning potrebbero essere a rischio per bug (raro); la chiusura forzata dei canali durante periodi di commissioni alte può essere costosa; i costi del VPS sono continui.

La liquidità Lightning è "a rischio"?

La tua liquidità Lightning è tua. Non è a rischio da parte di Mostro stesso — le hold invoice sono blocchi temporanei. Tuttavia, si applicano i rischi standard di Lightning Network (chiusure forzate, canali bloccati, bug).

Quando raggiungerò il pareggio?

Dipende dai tuoi costi e dal volume di operazioni. Con $20/mese di costi e 0,6% di commissione, hai bisogno di ~$5.000/mese in operazioni per coprire i costi (prima della commissione di sviluppo). La maggior parte delle comunità impiega 3–6 mesi per costruire un volume significativo.

Posso spostare Mostro su un altro nodo Lightning?

Sì, ma non modificando la configurazione e riavviando. L'escrow è legato al nodo che l'ha creato, quindi prima lo si drena in modalità manutenzione, e il daemon si rifiuta di partire se salti questo passaggio. Spostare lo stesso nodo su un altro host non è un cambio di nodo e non richiede nulla di particolare. Vedi 5.8.

8. Considerazioni di Sicurezza

⚠️ Avviso software in fase iniziale

Mostro è in una fase iniziale di sviluppo. Sebbene il team lavori duramente per garantire l'affidabilità, potrebbero esserci bug non scoperti — inclusi bug di sicurezza che potrebbero risultare in perdita di fondi. Gli sviluppatori non sono responsabili di alcuna perdita di denaro dovuta a bug del software.

Mostro è open-source e il suo codice è aperto a verifiche. Incoraggiamo le comunità a promuovere e finanziare audit di sicurezza indipendenti.

Detto questo, il meccanismo centrale di custodia tramite hold invoice di Lightning è stato testato in battaglia dal 2021, quando @lnp2pBot ha implementato per primo questo tipo di custodia. Migliaia di operazioni sono state completate con successo.

Tieni la Chiave del Tuo Nodo Fuori Portata

La tua nsec_privkey è l'identità del tuo nodo, e chiunque la possieda può impersonare il tuo Mostro. Preferisci fornirla tramite la variabile d'ambiente MOSTRO_NSEC_PRIVKEY o un file .env con chmod 600 invece di lasciarla in settings.toml (vedi 4.1). Non portarla nemmeno su un laptop per gestire le dispute: registra una chiave di solver separata per quello (vedi 5.2).

Operare sotto regimi autoritari

Se operi in un paese con un governo autoritario, la privacy non è opzionale — è un requisito di sicurezza.

  1. Esegui il tuo nodo Mostro dietro Tor e/o una VPN. Questo nasconde l'IP del tuo server dai relay Nostr.
  2. Se Tor/VPN non è possibile (comune nei paesi in via di sviluppo con internet lento), pubblica eventi solo su relay che possiedi o di cui ti fidi.
  3. Fai molta attenzione a quali relay usi. In futuro, i governi potrebbero creare relay Nostr specificamente per raccogliere indirizzi IP.
  4. Considera anche la privacy del tuo nodo Lightning. Eseguire LND dietro Tor è possibile e raccomandato in ambienti sensibili.
💡 Consiglio

La bellezza del fatto che Mostro sia decentralizzato è che anche se un nodo viene spento, gli altri continuano a funzionare. Ma la prevenzione è sempre meglio del recupero. Prendi la privacy sul serio fin dal primo giorno.

9. Risoluzione dei Problemi

Mostro non si avvia

dev_fee_percentage (0.05) is below minimum (0.1)

Imposta dev_fee_percentage ad almeno 0.10 in settings.toml.

File di configurazione o database non trovato

Assicurati che il flag -d punti alla directory contenente settings.toml. Per Docker Hub: verifica che ~/mostro-config/settings.toml esista.

Mostro termina all'avvio con Ln node error

REFUSING TO START: Lightning node changed

Mostro punta a un'identità LND diversa mentre c'è ancora escrow aperto sulla precedente. Ricollega il nodo vecchio e drenalo prima di cambiare. Vedi 5.8.

I client non vedono i miei ordini o non riescono a scrivere al mio nodo

Controlla la riga Transport: nei tuoi log. Un nodo su nip44 è invisibile ai client che parlano solo il protocollo v1, e un nodo su gift-wrap è invisibile ai client v2. Vedi 4.8.

I pagamenti falliscono con "no route"

Controlla payment_cltv_limit. Deve stare almeno 576 blocchi sopra max_final_cltv_expiry_delta e non deve superare --max-cltv-expiry del tuo LND. Vedi 4.9.

Problemi di connessione

Mostro si avvia ma non si connette ai relay

Problemi con le operazioni

Un utente riceve "cant-do: too_many_requests" durante il ripristino della sessione

Questo accade quando l'utente ha più ordini (storici + attivi) del valore di max_orders_per_response nella tua configurazione. Il client prova a recuperare tutti gli ordini in una volta e Mostro lo rifiuta. Non è un ban né un blocco temporaneo — continuerà a succedere finché non aggiusti il valore.

# In settings.toml, aumenta il limite:
max_orders_per_response = 50  # il default è 10, il massimo 255

Il valore sta in un singolo byte, quindi 255 è il tetto. Se un utente ha più ordini di così, deve ripulire il suo storico invece che tu continui ad alzare il limite.

Gli ordini non appaiono nei client

Pagamenti falliti

Problemi di database

Errori database bloccato

ps aux | grep mostrod
# Se ci sono processi multipli, termina quelli extra:
kill <PID>

Ottenere aiuto

  1. Controlla prima i log — la maggior parte degli errori spiega cosa è andato storto
  2. Telegram (Sviluppatori): @mostro_dev
  3. Telegram (Comunità): @MostroP2P
  4. GitHub Issues: github.com/MostroP2P/mostro/issues
  5. DeepWiki: deepwiki.com/MostroP2P/mostro

Quando chiedi aiuto, includi sempre: la tua versione di Mostro, l'output rilevante dei log, e cosa hai già provato.

Appendice: Riferimento Rapido

Posizioni importanti dei file

FileDocker HubNativo
Configurazione~/mostro-config/settings.toml/opt/mostro/settings.toml
Database~/mostro-config/mostro.db/opt/mostro/mostro.db
Cert LND~/mostro-config/lnd/tls.certVaria (controlla config LND)
Macaroon LND~/mostro-config/lnd/mostro.macaroonVaria (controlla config LND)
ServizioN/A/etc/systemd/system/mostro.service
Logdocker logs -f mostrojournalctl -u mostro

Comandi essenziali

# Docker
docker logs -f mostro         # Vedere i log
docker restart mostro          # Riavviare
docker stop mostro             # Fermare

# Nativo (systemd)
systemctl start mostro         # Avviare
systemctl stop mostro          # Fermare
systemctl restart mostro       # Riavviare
systemctl status mostro        # Vedere lo stato
journalctl -u mostro -f        # Vedere i log

# Database
sqlite3 mostro.db "SELECT COUNT(*) FROM orders;"                           # Totale ordini
sqlite3 mostro.db "SELECT COUNT(*) FROM orders WHERE status='success';"    # Operazioni riuscite
sqlite3 mostro.db "SELECT SUM(fee*2 - COALESCE(dev_fee, 0)) FROM orders WHERE status='success';"  # Commissioni nette trattenute dal nodo

Configurazione raccomandata per nodi nuovi

[mostro]
fee = 0.006
max_order_amount = 500000
min_payment_amount = 1000
expiration_hours = 24
expiration_seconds = 900
pow = 0
dev_fee_percentage = 0.30
fiat_currencies_accepted = ['USD']  # Cambia con la tua valuta locale

[nostr]
relays = [
  'wss://relay.mostro.network',
  'wss://nos.lol',
  'wss://relay.nostr.band'
]

Questa guida è mantenuta dalla comunità Mostro. Hai trovato un errore o vuoi migliorarla?
I contributi sono benvenuti su github.com/MostroP2P/community

Ultimo aggiornamento: Ottobre 2026 · Mostro v0.19.2