Faire Tourner Votre Propre Nœud Mostro

Mostro v0.19.2 — Guide de la Communauté · Octobre 2026

1. Qu'est-ce que Mostro et pourquoi votre communauté devrait en faire tourner un ?

Mostro est un exchange peer-to-peer de Bitcoin qui permet aux gens d'acheter et de vendre du Bitcoin en utilisant des monnaies locales (dollars, euros, francs — n'importe quelle devise) sans avoir à fournir de pièce d'identité (KYC). Pensez-y comme un marché décentralisé où acheteurs et vendeurs peuvent échanger directement.

Il fonctionne grâce à deux technologies :

Mostro agit comme un coordinateur de séquestre — il retient le Bitcoin du vendeur dans un « coffre-fort » temporaire (appelé hold invoice) jusqu'à ce que l'acheteur confirme avoir envoyé le paiement en monnaie locale. Mostro ne contrôle jamais réellement les fonds de quiconque ; il les retient brièvement pendant la transaction.

Pourquoi votre communauté voudrait-elle faire tourner un nœud Mostro ?

  1. Revenus de frais — Chaque transaction vous rapporte des frais (0.6% par défaut). Si votre communauté réalise 10 000 $ de transactions mensuelles, cela représente environ 60 $/mois en frais.
  2. Trading P2P sans KYC — Les membres de votre communauté peuvent acheter et vendre du Bitcoin sans fournir de pièce d'identité. Particulièrement important dans les régions aux monnaies instables ou aux réglementations restrictives.
  3. Litiges dans votre langue — Quand une transaction tourne mal, votre communauté la résout, dans votre langue, en comprenant vos méthodes de paiement locales.
  4. Indépendance — Aucune entreprise ne peut fermer votre exchange. Aucun gouvernement ne peut faire pression sur un opérateur unique pour le faire fermer.
  5. Personnalisation — Vous choisissez quelles devises supporter, quelles méthodes de paiement autoriser et quels frais facturer.

Comment fonctionne Mostro (Simplifié)

1. Alice veut VENDRE du Bitcoin pour 50 $ USD → Elle crée un ordre sur Mostro
2. Bob veut ACHETER du Bitcoin avec 50 $ USD → Il voit l'ordre d'Alice et le prend
3. Mostro crée un « coffre-fort » (hold invoice) → Alice envoie ses Bitcoin dans le coffre-fort
4. Bob envoie 50 $ à Alice par virement bancaire, Zelle, espèces, etc. → Bob appuie sur « Fiat Envoyé » dans son app
5. Alice confirme qu'elle a reçu les 50 $ → Elle appuie sur « Libérer »
6. Mostro libère les Bitcoin du coffre-fort vers Bob → Transaction terminée ! ✓

Si quelque chose tourne mal (ex : Bob dit qu'il a payé mais Alice n'a pas reçu), l'une ou l'autre partie peut ouvrir un litige, et les arbitres désignés de votre communauté enquêtent et résolvent le problème.

2. Prérequis — Ce dont vous avez besoin avant de commencer

2.1 Un Serveur (VPS)

Un VPS (Serveur Privé Virtuel) est un ordinateur dans un centre de données qui fonctionne 24h/24 et 7j/7. Vous en louerez un pour héberger votre nœud Mostro.

Spécifications minimales :

RessourceMinimumRecommandé
CPU2 vCPUs (partagés)2+ vCPUs
RAM2 Go4 Go
Stockage60 Go SSD100 Go SSD
Bande passante3 To/mois3+ To/mois
OSUbuntu 22.04+ LTSUbuntu 24.04 LTS

Coût mensuel estimé : 10–24 $/mois.

Fournisseurs VPS populaires :

💡 Conseil

De nombreux fournisseurs de VPS acceptent les paiements en Bitcoin. Recherchez cette option si vous souhaitez rester cohérent avec la philosophie Bitcoin.

Vous devez être à l'aise pour vous connecter à un serveur par SSH. Si vous ne l'avez jamais fait, cherchez un tutoriel « Se connecter en SSH à un VPS » — c'est plus simple qu'il n'y paraît.

2.2 Un Nœud Lightning Network (LND)

Lightning Network est un système « couche 2 » construit sur Bitcoin qui permet des paiements rapides et peu coûteux. Pour faire tourner Mostro, vous avez besoin d'un nœud LND (Lightning Network Daemon) — le logiciel Lightning spécifique avec lequel Mostro fonctionne.

Vos options :

OptionDifficultéCoûtNotes
Utiliser un nœud LND existantFacileGratuit (si vous en avez un)Idéal si quelqu'un en a déjà un
Faire tourner LND sur le même VPSDifficileMême VPS + liquiditéNécessite un VPS avec 4 Go+ de RAM
Solution nœud-en-boîteMoyen200–600 $ + liquiditéStart9, Umbrel, RaspiBlitz
StartOS avec le paquet MostroPlus facile300–600 $ + liquiditéStart9 dispose d'un paquet Mostro en un clic
Utiliser Voltage.cloudFacileÀ partir d'environ 20 $/mois + liquiditéVoltage — LND hébergé avec infrastructure gérée
⚠️ Important

Mostro requiert spécifiquement LND (pas CLN/Core Lightning, pas Eclair, pas LDK). Assurez-vous que votre nœud Lightning fait tourner LND.

Ce dont vous avez besoin de votre nœud LND :

Générez un macaroon dédié pour Mostro. Ne donnez pas votre admin.macaroon à Mostro : il accorde un contrôle total sur votre nœud et ses fonds. Créez un macaroon ne contenant que les permissions que Mostro utilise réellement (lire les infos du nœud, créer/régler/annuler des hold invoices, envoyer et suivre des paiements).

Choisissez d'abord un root key ID qui n'est pas déjà utilisé. Révoquer un macaroon révoque tous les macaroons partageant son ID : en réutiliser un emporterait des identifiants sans rapport. L'ID 0 appartient aux macaroons de LND, choisissez donc un nombre libre non nul et notez-le :

lncli listmacaroonids

Créez ensuite le macaroon avec l'ID choisi (7 dans cet exemple, remplacez par le vôtre) :

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

Ce macaroon ne peut ni ouvrir ou fermer des canaux, ni déplacer des fonds on-chain, ni modifier la configuration de votre nœud. En cas de fuite, révoquez-le avec lncli deletemacaroonid 7, en utilisant le même ID que celui de sa création, et créez-en un nouveau.

2.3 Liquidité Lightning

Pour faciliter les transactions, votre nœud Lightning a besoin de canaux avec du Bitcoin dedans. Pensez aux canaux Lightning comme des tunnels de paiement pré-financés. Le Bitcoin dans ces canaux est votre « liquidité ».

Combien en faut-il ?

Volume de trading viséLiquidité suggéréeBTC approximatif
Petite communauté (quelques transactions/jour)1–5 millions de sats0.01–0.05 BTC
Communauté moyenne5–20 millions de sats0.05–0.20 BTC
Communauté active20–100 millions de sats0.20–1.0 BTC
💡 Note sur la Liquidité Lightning

Le Bitcoin dans vos canaux Lightning est bloqué onchain mais reste hautement dépensable via le Lightning Network. De nombreux services acceptent les paiements Lightning — des cafés aux fournisseurs VPS — rendant votre liquidité assez flexible pour un usage quotidien.

Commencez petit, grandissez progressivement. Commencez avec suffisamment pour les besoins initiaux de votre communauté et surveillez les retours. Quand les traders signalent que les ordres échouent par manque de capacité, c'est votre signal pour en ajouter. Écoutez votre communauté.

Obtenir de la liquidité :

2.4 Clés Nostr

Votre nœud Mostro a besoin de sa propre identité sur le réseau Nostr — une paire de clés cryptographiques avec une clé publique (l'adresse de votre nœud) et une clé privée (votre secret).

⚠️ Important

Ne réutilisez jamais des clés Nostr entre instances de Mostro. Chaque nœud a besoin de sa propre identité unique.

Générer des clés Nostr sécurisées localement avec rana :

# Installer Rust (si pas déjà installé)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

# Installer rana - générateur local de clés Nostr
cargo install rana

# Générer une nouvelle paire de clés (avec phrase mnémonique de 12 mots)
rana --generate 12

Rana générera votre clé privée (nsec), votre clé publique (npub) et une phrase mnémonique de sauvegarde. Conservez le tout en lieu sûr ! Note : lancer rana sans arguments démarre le minage PoW (difficulté 10) qui peut prendre plusieurs minutes — utilisez --generate pour une génération instantanée. Ne générez jamais de clés importantes via des services en ligne.

2.5 Niveau de connaissances techniques

TâcheDifficultéConnaissances requises
Louer un VPSFacileCarte bancaire, navigation web basique
Se connecter en SSHFacileSuivre des instructions, taper des commandes
Installer DockerMoyenCopier-coller des commandes, dépannage basique
Faire tourner Mostro (Docker)MoyenÉditer des fichiers de configuration, comprendre les chemins
Faire tourner Mostro (natif)DifficileAdministration Linux, compilation de logiciels, systemd
Configurer LND depuis zéroDifficileConnaissances significatives en Linux et réseaux
Gérer la liquidité LightningDifficileComprendre l'économie des canaux Lightning

💡 Notre recommandation : Si votre communauté compte quelqu'un à l'aise avec la ligne de commande Linux, il peut gérer l'installation avec Docker. La compilation native nécessite de l'expérience en administration système. La configuration du nœud Lightning est la partie la plus complexe — envisagez de demander l'aide de quelqu'un d'expérimenté, ou d'utiliser une solution nœud-en-boîte.

3. Installation Pas à Pas

Toutes les options d'installation partagent les mêmes premières étapes. Choisissez ensuite l'option qui vous convient :

Toutes supposent que vous avez déjà : ✅ Un VPS avec Ubuntu · ✅ Un accès SSH · ✅ Un nœud LND fonctionnel.

Étapes Communes (pour les 3 options)

Étape 1 : Connectez-vous à votre VPS

ssh root@VOTRE_ADRESSE_IP_VPS

Étape 2 : Mettez à jour le système

# Télécharger les dernières informations de paquets
apt update

# Installer toutes les mises à jour disponibles
apt upgrade -y

Étape 3 : Installer Docker et Docker Compose

💡 Note

Docker est nécessaire pour les options A et B. Si vous compilez manuellement (Option C), vous pouvez sauter cette étape.

# Installer Docker avec le script officiel
curl -fsSL https://get.docker.com | sh

# Vérifier que Docker est installé
docker --version

# Vérifier Docker Compose
docker compose version

Étape 4 : Installer les outils supplémentaires

apt install -y git make

✅ Étapes communes terminées. Choisissez maintenant votre option d'installation :

Option A : Docker Hub (La plus rapide — Recommandée)

Lancez Mostro directement depuis Docker Hub sans cloner le dépôt ni compiler. Parfait pour les déploiements sur VPS.

Étape 5 : Créer le répertoire de configuration

mkdir -p ~/mostro-config/lnd

Étape 6 : Obtenir le modèle de configuration

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

Étape 7 : Copier les identifiants LND

cp /chemin/vers/votre/tls.cert ~/mostro-config/lnd/tls.cert
cp /chemin/vers/votre/mostro.macaroon ~/mostro-config/lnd/mostro.macaroon

Si LND est sur la même machine, les chemins typiques sont :

Étape 8 : Modifier la configuration

nano ~/mostro-config/settings.toml

Modifications requises :

[lightning]
lnd_cert_file = '/config/lnd/tls.cert'
lnd_macaroon_file = '/config/lnd/mostro.macaroon'
lnd_grpc_host = 'https://host.docker.internal:10009'  # Si LND sur le même VPS
# Ou utiliser 'https://VOTRE_IP_LND:10009' si LND sur un serveur différent

[database]
url = "sqlite:///config/mostro.db"  # mostrod utilise toujours <répertoire-de-config>/mostro.db

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

[mostro]
fee = 0.006                    # 0.6% de frais par transaction
max_order_amount = 1000000     # Ordre maximum en sats
min_payment_amount = 100       # Ordre minimum en sats
fiat_currencies_accepted = ['USD', 'EUR']  # Vos devises

Enregistrer : Ctrl+X, puis Y, puis Entrée.

Étape 9 : Ajuster les permissions

⚠️ Important

Évitez chmod 777. Utilisez des permissions minimales.

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

Étape 10 : Lancer le conteneur

Si LND est sur le même 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

Si LND est sur un serveur différent :

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

Étape 11 : Vérifier les logs

docker logs -f mostro

Recherchez ces messages :

💡 Note

Il n'existe pas de message « connecté à LND ». Mostro contacte LND pendant le démarrage : un daemon qui continue de tourner a donc une connexion fonctionnelle. L'échec, lui, est bruyant : il journalise Ln node error et s'arrête.

💡 Dépannage

Si vous voyez Permission denied (os error 13), réajustez les permissions : chown -R 1000:1000 ~/mostro-config et redémarrez : docker restart mostro.

🎉 Félicitations ! Si vous voyez des connexions réussies dans les logs, votre nœud Mostro fonctionne !

Alternative : Docker Compose

Au lieu d'une longue commande docker run, vous pouvez décrire le conteneur dans un fichier compose. Il lance la même image avec les mêmes réglages, et la mise à jour se résume à changer le tag sur une ligne. Créez ~/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"  # seulement si LND tourne sur ce VPS
    volumes:
      - ${HOME}/mostro-config:/config

Démarrez-le et suivez les logs :

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

Choisissez l'un ou l'autre : docker run ou compose, pas les deux. Pour mettre à jour l'un ou l'autre, voyez 5.5.

🔒 Note de Sécurité

Utilisez toujours un tag de version spécifique (ex. mostrop2p/mostro:v0.19.2) au lieu de :latest pour contrôler les déploiements.

Option B : Docker Build (Construire l'image localement)

Étape 5 : Télécharger Mostro

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

Étape 6 : Configurer les fichiers

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

Étape 7 : Modifier le fichier de configuration

nano config/settings.toml

Modifiez les mêmes paramètres que dans l'Option A, Étape 8.

⚠️ Si LND tourne sur le même VPS

Contrairement à l'Option A, le docker/compose.yml du dépôt ne mappe pas host.docker.internal : sous Linux, ce nom ne se résout donc pas dans le conteneur. Ajoutez le mappage au service mostro avant de construire :

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

Ou pointez lnd_grpc_host vers l'IP locale de l'hôte. Notez que make docker-build construit aussi l'image StartOS, dont un VPS n'a pas besoin : cela ne coûte que du temps de compilation.

Étape 8 : Construire l'image Docker

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

Étape 9 : Démarrer Mostro

# Démarre Mostro et le relais inclus. `make docker-up` seul démarre
# aussi l'image StartOS, inutile sur un VPS.
docker compose -f docker/compose.yml up -d mostro nostr-relay

# Vérifier l'état
docker compose -f docker/compose.yml ps

# Voir les logs
docker compose -f docker/compose.yml logs -f mostro

🎉 Félicitations ! Si vous voyez des connexions réussies, votre nœud Mostro fonctionne !

Option C : Compilation Native (Pour opérateurs techniques)

Étape 5 : Installer Rust

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

N'installez PAS Rust via apt install rustc. Utilisez toujours rustup. Le paquet système est souvent obsolète.

Étape 6 : Installer les dépendances de compilation

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

Étape 7 : Télécharger et compiler Mostro

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

Si la compilation échoue par manque de RAM, ajoutez de l'espace swap :

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

Étapes 8–10 : Installer, initialiser et nettoyer

install target/release/mostrod /usr/local/bin
cargo clean  # Économise 2+ Go d'espace

Étapes 11–12 : Créer un utilisateur et configurer

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

Modifiez les mêmes paramètres que dans l'Option A, Étape 8.

Étapes 13–15 : Test, permissions et service systemd

# Test d'exécution
/usr/local/bin/mostrod -d /opt/mostro

# Définir les permissions
chown -R mostro:mostro /opt/mostro
💡 L'assistant de configuration interactif

Si vous lancez mostrod sans settings.toml dans le répertoire visé et que vous êtes sur un terminal, il propose un menu de configuration capable de construire le fichier pour vous et d'écrire le nsec dans un .env. Sans terminal (Docker, systemd, CI), il copie le modèle, affiche où il l'a placé et s'arrête pour que vous l'éditiez.

Créer le service 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

🎉 Félicitations ! Votre nœud Mostro tourne en tant que service système.

4. Configuration en Détail

Le fichier settings.toml contrôle tout sur votre nœud Mostro.

4.1 Clés Nostr — L'identité de votre nœud

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

Quels relays utiliser ?

💡 Conseil

Vous pouvez aussi faire tourner votre propre relais Nostr à côté de Mostro. La voie Docker Build (Option B) en inclut un dans son compose.yml ; l'Option A et la compilation native non.

Garder la clé hors de settings.toml

Mostro lit aussi la clé depuis la variable d'environnement MOSTRO_NSEC_PRIVKEY. L'ordre de priorité est : variable d'environnement, puis <répertoire-de-config>/.env, puis settings.toml.

# ~/mostro-config/.env  (chmod 600) — chargé automatiquement au démarrage
MOSTRO_NSEC_PRIVKEY=nsec1...

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

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

Laisser nsec_privkey dans settings.toml fonctionne toujours. Si vous utilisez le fichier .env, sauvegardez-le avec autant de soin que la configuration.

4.2 Frais — Comment vous générez des revenus

[mostro]
fee = 0.006
dev_fee_percentage = 0.30

Frais de transaction (fee) : Pourcentage prélevé par transaction, réparti entre acheteur et vendeur.

Exemple : Sur une transaction de 100 000 sats avec fee = 0.006 : L'acheteur paie 300 sats, le vendeur paie 300 sats, votre nœud gagne 600 sats au total.

Frais de développement (dev_fee_percentage) : Un pourcentage de vos revenus de frais qui va au développement de Mostro.

📝 Note

Définir dev_fee_percentage en dessous de 0.10 empêchera Mostro de démarrer. Ce minimum assure un financement durable du développement.

4.3 Limites d'ordres et devises

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

4.4 Profil du nœud (Optionnel mais recommandé)

[mostro]
name = "LatAm Mostro"
about = "Exchange P2P de Bitcoin pour l'Amérique latine. Support en espagnol."
picture = "https://exemple.com/votre-logo.png"
website = "https://site-de-votre-communaute.com"

Ceux-ci configurent le profil de votre Mostro sur Nostr (NIP-01 kind 0 metadata). Les clients affichent ces informations pour que les utilisateurs sachent sur quel Mostro ils échangent.

4.5 Délais et expiration

[mostro]
expiration_hours = 24        # Durée pendant laquelle un ordre reste ouvert
expiration_seconds = 900     # Temps pour compléter (15 min)
hold_invoice_expiration_window = 300  # Délai dont dispose le preneur pour payer la facture ou en fournir une de paiement (5 min)

4.6 Anti-Spam

[mostro]
pow = 0  # 0 = désactivé ; 10-20 = modéré. Commencez avec 0.

4.7 Interface RPC d'Administration (Optionnel)

[rpc]
enabled = false
listen_address = "127.0.0.1"
port = 50051
# auth_token = "une-longue-chaine-aleatoire"

Cette interface gRPC sert aux outils de l'opérateur : grpcurl, et mostro-cli pour le mode maintenance (admsetmaintenance, admmaintenancestatus, admcancelpending). Mostrix ne l'utilise pas : il passe par Nostr, vous n'avez donc pas besoin du RPC pour résoudre les litiges.

⚠️ Sécurité

Gardez listen_address sur "127.0.0.1" et n'exposez jamais le port à internet. Définissez auth_token dès que le port est joignable autrement que depuis la machine locale, par exemple via un tunnel SSH ou un conteneur sidecar : une connexion transférée arrive en loopback, l'adresse d'écoute ne constitue donc pas une autorisation. Avec un token défini, chaque appel modifiant l'état doit porter l'en-tête authorization: Bearer <token>.

4.8 Protocole de Transport

Un nœud Mostro parle un seul protocole, choisi ici :

[mostro]
transport = "nip44"
ValeurProtocoleKind visible sur le relaisStatut
"nip44"v2 — événements kind 14 signés, contenu chiffré NIP-4414Par défaut, y compris pour une config sans ligne transport
"gift-wrap"v1 — gift wraps NIP-591059Déprécié, opt-in uniquement, supprimé en v0.19.0

Votre nœud annonce le protocole qu'il parle dans son événement d'info kind 38385 : les clients compatibles choisissent donc le bon format d'eux-mêmes. Mostro Mobile, Mostrix et mostro-cli prennent en charge v2.

⚠️ Uniquement si vous devez servir d'anciens clients

N'écrivez transport = "gift-wrap" que pour continuer à servir les clients limités au protocole v1 pendant la transition. Ce mode n'est jamais sélectionné automatiquement et disparaît en v0.19.0, après quoi votre nœud ne tourne qu'en v2. Laissez la valeur par défaut sauf raison précise.

Le transport v2 permet aussi un filtre anti-spam plus fin que celui de 4.6. pow s'applique à tous les messages, tandis que pow_first_contact ne s'applique qu'aux expéditeurs étrangers à une transaction active et est vérifié avant déchiffrement. Les transactions en cours restent ainsi peu coûteuses, alors que les inconnus doivent fournir un vrai travail :

[mostro]
pow = 0                  # transactions en cours
pow_first_contact = 16   # nouveaux ordres et prises depuis des clés inconnues

4.9 Limites de Sécurité Lightning

Ces réglages de [lightning] bornent la durée pendant laquelle vos canaux peuvent rester verrouillés et le nombre de paiements non résolus simultanés. Ils ont tous une valeur par défaut : un fichier de configuration d'une version antérieure démarre donc toujours, mais un modèle récent les inclut et il vaut la peine de les connaître.

[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
RéglageCe qu'il protège
max_final_cltv_expiry_deltaRejette une facture de paiement dont le CLTV final laisserait le bénéficiaire retenir vos sats trop longtemps. 144 blocs (environ un jour) est le maximum demandé par les vrais portefeuilles. Ne le mettez jamais à 0 : cela rejette toutes les factures.
escrow_deadline_margin_blocksMarge de sécurité avant que LND n'annule automatiquement une hold invoice acceptée. Doit dépasser confortablement le invoices.holdexpirydelta de votre nœud, qui vaut 12 par défaut.
max_inflight_payoutsPlafond de paiements non résolus sur l'ensemble du nœud, pour qu'un bénéficiaire qui ne règle jamais ne puisse pas épuiser vos slots HTLC. Un paiement freiné est retardé, jamais abandonné.
max_inflight_payouts_per_destinationLe même plafond par pubkey de destination, et le plus efficace des deux.
payment_cltv_limitPlafond du timelock total d'une route de paiement. Ne doit pas dépasser le --max-cltv-expiry de votre LND et doit se situer au moins 576 blocs au-dessus de max_final_cltv_expiry_delta, sinon les paiements légitimes échouent avec « no route ».
allow_node_changeGarde-fou au démarrage en cas de changement de nœud Lightning. Laissez-le à false et voyez 5.8.

Notez aussi que max_routing_fee, dans le bloc [mostro], vaut désormais 0.002 (0,2 %) par défaut.

4.10 Sources de Prix du Bitcoin

Mostro a besoin d'un taux BTC/fiat pour valoriser les ordres. Sans bloc [price], il utilise une seule source, Yadio, via le désormais déprécié bitcoin_price_api_url. Ajouter le bloc vous donne plusieurs sources, combinées par médiane avec écartement des valeurs aberrantes : une API en panne ou renvoyant un mauvais chiffre ne déplace donc pas vos prix.

[price]
update_interval_seconds = 300
max_price_staleness_seconds = 1800
outlier_threshold_pct = 5.0        # écarte une source à cette distance de la médiane (3+ sources requises)
provider_timeout_seconds = 10
provider_failure_threshold = 3     # échecs avant mise en pause d'une source
provider_failure_cooldown_seconds = 120
publish_to_nostr = true            # publie les taux agrégés en 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"              # facultatif, relève les limites de débit

[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"]            # taux officiel seulement, à ne pas mélanger aux sources informelles

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

Chaque source accepte only ou except pour limiter les devises auxquelles elle contribue, et fallback_urls pour des miroirs essayés quand l'URL principale échoue. Une source activée à laquelle manque un secret requis échoue au démarrage plutôt que de ne produire aucune cotation en silence.

💡 Si les API de prix sont bloquées dans votre pays

Vous pouvez prendre les taux sur Nostr plutôt qu'en HTTP, publiés par des nœuds Mostro auxquels vous faites confiance. Cela réutilise les relais déjà présents dans [nostr] et fonctionne donc partout où votre nœud atteint déjà un relais. Avec plusieurs nœuds de confiance, l'événement valide le plus récent l'emporte.

[price.providers.nostr]
enabled = true
trusted_nodes = [
    # pubkeys hex des nœuds Mostro auxquels vous faites confiance pour des taux exacts
]

Les opérateurs servant le peso cubain peuvent ajouter El Toque pour le CUP et le MLC du marché informel. C'est un opt-in, limité à ces deux devises, et il faut un token gratuit : un El Toque activé sans token refuse de démarrer.

4.11 Autres Blocs Facultatifs

Trois autres blocs que vous pouvez rencontrer dans un modèle récent. Aucun n'est obligatoire.

Rétention des événements. Combien de temps Mostro conserve chaque type d'événement avant expiration. Omettez le bloc entièrement pour accepter les valeurs par défaut.

[expiration]
order_days = 30        # événements d'ordres (kind 38383)
rating_days = 90       # historique de réputation (kind 38384)
dispute_days = 90      # litiges, conservés plus longtemps pour l'audit (kind 38386)
fee_audit_days = 365   # transparence des frais (kind 8383)
dm_days = 30           # messages directs du protocole v2 (kind 14)

Les cautions anti-abus ([anti_abuse_bond]) peuvent exiger une caution par hold invoice des preneurs, des créateurs ou des deux, pour qu'abandonner une transaction ait un coût. Désactivé par défaut et encore déployé par phases. Lisez le docs/ANTI_ABUSE_BOND.md du projet avant de l'activer sur un nœud en production.

L'escrow Cashu ([cashu]) est un mode expérimental qui fonctionne sans LND et place l'escrow dans des tokens Cashu sur une seule mint. Il n'est pas encore utilisable pour de vraies transactions, les actions de trade sont toujours refusées, et il ne peut pas être combiné aux cautions anti-abus. Mentionné ici pour que vous sachiez de quoi il s'agit en le voyant.

5. Exploitation de Votre Nœud Mostro

5.1 Comment fonctionnent les litiges

Les litiges sont votre responsabilité opérationnelle la plus importante.

Quand les litiges surviennent-ils ?

Le processus de litige :

  1. L'utilisateur ouvre un litige — L'une des parties clique sur « Litige » dans le client
  2. Mostro marque l'ordre — Le statut passe à « Litige », les fonds restent bloqués
  3. L'arbitre prend le cas — Un admin assigné à votre nœud enquête
  4. Investigation — Communication avec les deux parties, demande de preuves
  5. Résolution — L'arbitre décide : libérer vers l'acheteur, ou rembourser le vendeur
⚠️ Important

Choisissez vos arbitres avec soin. Ils ont le pouvoir de décider où vont les fonds bloqués. Choisissez des membres de confiance et impartiaux de la communauté. 2-3 arbitres sont recommandés.

Niveaux de permission des solveurs

Un solveur peut être enregistré en lecture seule ou avec les pleins pouvoirs. Les deux niveaux peuvent prendre un litige et parler aux parties, mais seul un solveur read-write peut décider où va l'argent.

Enregistré commePeutNe peut pas
npub1...:readPrendre un litige, le lire, écrire aux deux partiesRégler ou annuler l'ordre
npub1...:read-writeTout, y compris régler et annuler—

Un npub1... nu sans suffixe devient read-write par défaut, de même que l'enregistrement via l'interface RPC. Commencez un nouvel arbitre en :read le temps qu'il apprenne le processus, puis réenregistrez-le en read-write quand vous avez confiance en son jugement.

5.2 Mostrix — Votre outil d'administration

Mostrix est un client basé sur le terminal (TUI) pour la résolution des litiges. Si vous faites tourner un nœud Mostro, vous avez besoin de Mostrix.

Option A : Télécharger le binaire pré-compilé (Recommandé)

Téléchargez la dernière version pour votre plateforme depuis 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
# Téléchargez mostrix-x86_64-pc-windows-gnu.exe depuis la page des releases

Vérifiez le téléchargement avant de l'exécuter, comme expliqué juste en dessous.

🔐 Vérifiez la Release

Vérifiez toujours le binaire avant de l'exécuter. Importez les clés des mainteneurs une seule fois :

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

Les signatures sont des fichiers détachés nommés manifest.txt.sig.<mainteneur>. Toutes les releases ne portent pas les deux : consultez la page de la release et téléchargez celles qui y figurent réellement :

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

# Vérifiez chaque signature téléchargée
gpg --verify manifest.txt.sig.arkanoider manifest.txt

# Puis comparez l'empreinte du binaire au manifest
shasum -a 256 mostrix-x86_64-unknown-linux-musl
grep mostrix-x86_64-unknown-linux-musl manifest.txt

Une signature valide provenant d'une clé de mainteneur que vous jugez fiable suffit. Si un wget renvoie 404, c'est simplement que cette signature n'a pas été publiée pour cette release : ne prenez pas un fichier absent pour un fichier vérifié.

Seulement une fois qu'une signature et l'empreinte concordent, rendez le binaire exécutable et lancez-le :

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

Option B : Compiler depuis le code source

Si vous préférez compiler depuis le code source ou avez besoin d'une plateforme non disponible dans les releases :

# Installer les dépendances (Ubuntu/Debian)
sudo apt install -y cmake build-essential pkg-config

# Installer Rust (si pas déjà installé)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Cloner et compiler
git clone https://github.com/MostroP2P/mostrix.git
cd mostrix
cargo build --release

# Exécuter
./target/release/mostrix

Premier lancement et configuration

Au premier lancement, Mostrix génère automatiquement un fichier ~/.mostrix/settings.toml avec des valeurs par défaut raisonnables, incluant une nouvelle paire de clés Nostr. Votre npub généré sera affiché dans le terminal.

⚠️ Important : Configurez votre pubkey Mostro

La configuration auto-générée utilise la pubkey officielle de Mostro par défaut. Vous devez la changer pour la pubkey de votre propre nœud Mostro :

# Éditer la configuration
nano ~/.mostrix/settings.toml

# Changez cette ligne pour la pubkey de VOTRE nœud Mostro :
mostro_pubkey = "VOTRE_PUBKEY_MOSTRO_HEX"

Pour le mode admin (résolution des litiges), configurez également :

# ~/.mostrix/settings.toml
mostro_pubkey = "VOTRE_PUBKEY_MOSTRO_HEX"
nsec_privkey = "nsec1votre_cle_personnelle"  # Auto-générée au premier lancement
admin_privkey = "nsec1votre_cle_admin"        # Le nsec du daemon lui-même — voir ci-dessous
relays = ["wss://relay.mostro.network"]
currencies_filter = []                        # Vide = afficher toutes les devises
user_mode = "admin"                           # Activer le mode admin
⚠️ Quelle clé mettre dans admin_privkey ?

Mostro reconnaît l'opérateur par sa propre clé : admin_privkey doit donc être le nsec_privkey du daemon, celui dont la pubkey figure dans mostro_pubkey. Une clé personnelle est rejetée.

Cette clé est l'identité de votre nœud : évitez de la transporter sur un ordinateur portable. Enregistrez plutôt une clé de solveur distincte et utilisez-la pour les litiges. Seule la clé de l'opérateur peut ajouter des solveurs :

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

L'option Settings → Add Dispute Solver de Mostrix fait la même chose.

5.3 mostro-watchdog — Notifications de litiges sur Telegram

mostro-watchdog surveille votre nœud Mostro pour les litiges et envoie des alertes instantanées par Telegram. Essentiel pour des temps de réponse rapides.

Option A : Installation automatique (Recommandée)

# Téléchargez et exécutez le script d'installation
curl -fsSL https://raw.githubusercontent.com/MostroP2P/mostro-watchdog/main/install.sh | bash

Option B : Téléchargement manuel du binaire

# 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, serveurs 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

Option C : Compiler depuis les sources

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

Configuration :

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

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

[telegram]
bot_token = "VOTRE_TOKEN_BOT"
chat_id = -1001234567890
💡 Conseil

Faites tourner mostro-watchdog comme service systemd à côté de votre nœud Mostro pour une surveillance 24h/24 et 7j/7.

5.4 Surveillance de la disponibilité

Votre nœud doit fonctionner 24h/24 et 7j/7.

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

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

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

Configurez une surveillance simple avec UptimeRobot (gratuit) ou une tâche cron qui vous alerte si Mostro tombe en panne.

Vérifier votre nœud depuis l'extérieur

Votre nœud republie un événement d'info (kind 38385) qui le décrit : frais, devises, version de protocole, indicateur de maintenance. Le lire depuis un relais est le moyen le plus rapide de confirmer que le monde extérieur voit bien ce que vous croyez.

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

5.5 Mettre à jour Mostro

Mettre à jour remplace le binaire mostrod et rien d'autre : settings.toml et mostro.db restent en place. Les migrations de la base de données s'appliquent d'elles-mêmes au démarrage de la nouvelle version, il n'y a donc aucune étape supplémentaire.

Avant de mettre à jour

  1. Lisez les notes de version de la version visée. Votre settings.toml n'est jamais écrasé, donc une nouvelle option ne prend effet qu'une fois ajoutée : comparez votre fichier avec le nouveau settings.tpl.toml.
  2. Sauvegardez la base de données avec les commandes de 5.6. Cette sauvegarde est nécessaire pour revenir en arrière.

Docker Hub (docker run)

export MOSTRO_TAG=v0.19.2
# Téléchargez d'abord : le nœud reste en service pendant le téléchargement
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

Utilisez les mêmes options qu'à l'installation (retirez --add-host si LND est sur un autre serveur). Si vous ne vous en souvenez plus, consultez docker inspect mostro avant de supprimer le conteneur.

⚠️ docker restart n'est pas une mise à jour

docker restart relance le même conteneur, avec l'image à partir de laquelle il a été créé. Pour lancer une nouvelle version, il faut recréer le conteneur : docker rm + docker run, ou docker compose up -d après avoir changé le tag.

Docker Hub (Docker Compose)

export MOSTRO_TAG=v0.19.2
COMPOSE=~/mostro-docker/compose.yml
# Pointez la ligne image vers le nouveau tag, puis vérifiez-la
sed -i "s|image: mostrop2p/mostro:.*|image: mostrop2p/mostro:$MOSTRO_TAG|" $COMPOSE
grep image: $COMPOSE
docker compose -f $COMPOSE pull
# Recrée le conteneur puisque l'image a changé
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

Natif

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

Vérifier la nouvelle version

# 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

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

Cherchez les mêmes messages de démarrage qu'au premier lancement (Étape 11 de l'Option A).

Revenir en arrière

Si la nouvelle version pose problème, revenez au tag précédent. La nouvelle version a peut-être déjà migré la base de données, et un mostrod plus ancien peut refuser de démarrer avec elle : restaurez donc la sauvegarde faite avant la mise à jour :

docker stop mostro
docker rm mostro
# remplacez YYYYMMDD par la date de la sauvegarde faite avant la mise à jour
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
# puis lancez le tag précédent : même commande docker run,
# ou remettez l'ancien tag dans compose.yml et lancez docker compose up -d

Docker Build et natif fonctionnent de la même façon : revenez au tag précédent, recompilez et restaurez la base de données avant de démarrer.

⚠️ Ne changez pas de nœud Lightning en même temps

Mettre Mostro à jour est sûr à tout moment. Le pointer vers un autre nœud Lightning ne l'est pas : videz l'escrow d'abord, voyez 5.8.

5.6 Sauvegardes

Fichiers critiques à sauvegarder : settings.toml, le fichier .env si vous y gardez votre nsec (voir 4.1), et mostro.db (historique des ordres, réputation).

⚠️ Ne copiez pas une base active avec cp

SQLite fonctionne en mode WAL : les écritures récentes vivent dans mostro.db-wal jusqu'à leur consolidation. Copier seulement mostro.db pendant que Mostro tourne peut produire une sauvegarde privée des transactions les plus récentes. Utilisez la commande de sauvegarde propre à SQLite, sûre sur une base active et qui écrit un fichier unique et cohérent.

# Sauvegarde manuelle — 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

# Sauvegarde manuelle — Docker Build (Option 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)

# Sauvegarde manuelle — Native :
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)

Sauvegarde quotidienne automatique (à ajouter au crontab avec crontab -e) :

# Docker Hub (Option 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 (Option 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)

# Native (Option 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)
⚠️ Critique

Votre nsec_privkey dans settings.toml EST l'identité de votre nœud. Si vous la perdez, vous perdez votre réputation et tous les utilisateurs doivent se reconnecter à une nouvelle identité. Conservez une copie hors ligne.

5.7 Vérifier l'activité des transactions

# Compter tous les ordres
sqlite3 /chemin/vers/mostro.db "SELECT COUNT(*) FROM orders;"

# Transactions réussies récentes
sqlite3 /chemin/vers/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;"

# Ordres en attente
sqlite3 /chemin/vers/mostro.db "SELECT id, fiat_code, fiat_amount, status, created_at FROM orders WHERE status = 'pending';"

# Revenus des frais : orders.fee stocke la moitié de chaque partie, donc les frais bruts du nœud sont fee*2 et le dev fee en est déduit
sqlite3 /chemin/vers/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 Mode Maintenance et Changement de Nœud Lightning

Les hold invoices, les cautions et les paiements en vol appartiennent au nœud Lightning qui les a créés. Pointer Mostro vers un autre nœud alors que l'un d'eux est encore ouvert laisserait ces transactions en suspens : le daemon refuse donc de démarrer quand il voit une nouvelle identité LND avec de l'escrow encore lié à l'ancienne :

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

Le mode maintenance permet de vider d'abord. Tant qu'il est actif, les nouveaux ordres et prises sont refusés et les transactions ouvertes continuent, afin que l'escrow puisse se régler. Il exige l'interface RPC activée (voir 4.7).

  1. Annoncez la fenêtre à vos utilisateurs bien à l'avance.
  2. Activez le mode maintenance : mostro-cli admsetmaintenance -e true -r "LN node migration".
  3. Interrogez mostro-cli admmaintenancestatus jusqu'à ce qu'il indique drained = true. Les ordres en attente expirent d'eux-mêmes ; pour raccourcir la vidange, vous pouvez en annuler un avec mostro-cli admcancelpending -o <order-id>, ce qui libère aussitôt la caution du créateur. Annoncez-le d'abord, c'est l'ordre de l'utilisateur. Clôturez les litiges de longue durée comme d'habitude.
  4. Gardez l'ancien nœud en ligne tout du long. Il doit encore terminer les paiements en vol.
  5. Arrêtez Mostro et sauvegardez mostro.db.
  6. Pointez [lightning] vers le nouveau nœud et laissez allow_node_change = false.
  7. Démarrez Mostro. Il enregistre la nouvelle pubkey. Désactivez le mode maintenance et testez avec un ordre.
  8. Ce n'est qu'alors que vous pouvez décommissionner l'ancien nœud.
⚠️ allow_node_change

Ne le passez à true que pour une reprise après sinistre, quand l'ancien nœud est définitivement perdu. Cela laisse sciemment les transactions concernées non résolues. Déplacer le même nœud vers un autre hôte n'est pas un changement de nœud et ne nécessite rien de tout cela.

5.9 Commandes d'Opérateur avec mostro-cli

Mostrix est la façon confortable de traiter les litiges, mais mostro-cli couvre le même terrain depuis un shell et possède quelques commandes que Mostrix n'a pas. Les commandes de litige sont signées avec une clé Nostr passée en ADMIN_NSEC, qui doit être celle du daemon lui-même ou celle d'un solveur enregistré.

# Traitement des litiges (via Nostr, nécessite ADMIN_NSEC)
export ADMIN_NSEC=nsec1...
mostro-cli listdisputes
mostro-cli admtakedispute -d <dispute-id>
mostro-cli admsenddm -p <npub> -m "message à une partie"
mostro-cli admsettle -o <order-id>      # libérer vers l'acheteur
mostro-cli admcancel -o <order-id>      # rembourser le vendeur

# Enregistrer un arbitre, éventuellement en lecture seule
mostro-cli admaddsolver -n npub1...:read

Un autre groupe de commandes passe par le gRPC d'administration plutôt que par Nostr : elles nécessitent MOSTRO_RPC_URL et MOSTRO_RPC_TOKEN au lieu d'ADMIN_NSEC, et l'interface RPC activée (voir 4.7).

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

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

admcancelpending mérite d'être connu en dehors d'une migration. Il annule un ordre encore en attente ou attendant la caution d'un preneur, prévient le créateur et libère toutes ses cautions d'un coup. Utilisez-le pour un ordre clairement abandonné ou mal valorisé, et prévenez le créateur d'abord : c'est son ordre, et ce n'est pas une résolution de litige.

6. Détail des Coûts

Coûts opérationnels mensuels

PosteCoût mensuelNotes
VPS (serveur)10–24 $Dépend du fournisseur et des spécifications
Nom de domaine (optionnel)1–2 $Pour un site web/identité
Frais onchain des canaux LightningVariableOuverture/fermeture de canaux
Total mensuel11–26 $Hors liquidité Lightning

Coûts uniques / de capital

PosteCoûtNotes
Liquidité Lightning0.01–1.0+ BTCBloqué dans les canaux ; récupéré à la fermeture
Matériel du nœud (si auto-hébergé)0–600 $Gratuit si VPS ; 300-600 $ pour Start9/Umbrel
Temps de configuration4–16 heuresSelon le niveau d'expérience

Potentiel de revenus

Volume mensuelFrais (0.6%)Contribution dev (30%)Revenu net
1 000 $~6 $~1,80 $~4,20 $
10 000 $~60 $~18 $~42 $
50 000 $~300 $~90 $~210 $
100 000 $~600 $~180 $~420 $
📝 Réalité

La plupart des nœuds nouveaux mettent des mois à construire du volume. N'attendez pas de rentabilité immédiate. La vraie valeur vient souvent du service rendu à votre communauté, les frais étant un bonus.

Engagement en temps

TâcheFréquenceTemps
Surveillance (vérifier les logs, le statut)Quotidien5–10 min
Résolution de litigesSelon les besoins15–60 min par litige
Mises à jourMensuel15–30 min
Gestion de la liquiditéHebdomadaire15–30 min
Estimation hebdomadaire totale1–3 heures

7. Questions Fréquentes

Faut-il être développeur pour faire tourner un nœud Mostro ?

Non, mais vous devez être à l'aise avec les opérations basiques en ligne de commande (taper des commandes, éditer des fichiers texte). La voie Docker (Option A) est conçue pour être accessible.

Puis-je faire tourner Mostro sur un Raspberry Pi ?

Techniquement oui (via Start9 ou similaire), mais ce n'est pas recommandé pour la production en raison des limitations de CPU et de RAM. Un VPS est plus fiable.

Puis-je utiliser Core Lightning (CLN) au lieu de LND ?

Non. Mostro ne supporte actuellement que LND, car il dépend de l'implémentation spécifique des hold invoices de LND. Le support d'autres implémentations pourrait arriver à l'avenir.

Comment les utilisateurs se connectent-ils à mon Mostro ?

Les utilisateurs ont besoin d'une application cliente Mostro (comme Mostro Mobile ou mostro-cli) et de la clé publique de votre Mostro (npub). Ils ajoutent votre npub dans leur client, et le client communique via les relays Nostr. Aucune connexion directe n'est nécessaire.

Puis-je faire tourner plusieurs instances de Mostro ?

Oui, mais chacune nécessite sa propre paire de clés Nostr, son nœud LND (ou au moins des canaux/liquidité séparés) et sa configuration.

Est-ce légal ?

Cela dépend beaucoup de votre juridiction. Mostro est un logiciel d'échange peer-to-peer. Dans certaines juridictions, opérer un exchange P2P peut nécessiter des licences. Consultez les réglementations locales et un conseiller juridique.

Quelle bande passante utilise Mostro ?

Très peu — principalement de petits événements Nostr. Quelques Go par mois est typique même avec un volume modéré.

Que se passe-t-il si mon nœud se déconnecte ?

Les ordres en attente finissent par expirer. Les transactions actives avec des fonds bloqués continuent quand vous revenez en ligne. Si vous êtes hors ligne trop longtemps, les utilisateurs peuvent perdre confiance. Depuis la v0.18.3, il existe aussi une échéance pour l'escrow : si le nœud reste hors ligne assez longtemps pour que la hold invoice approche son horizon CLTV, LND l'annule et le vendeur est remboursé automatiquement.

Puis-je changer ma clé Nostr après ?

Vous pouvez, mais vous perdrez l'identité et la réputation de votre nœud. Les utilisateurs le verront comme un nouveau Mostro. Traitez votre clé comme votre identité de marque.

Puis-je perdre de l'argent en faisant tourner un nœud Mostro ?

Oui, c'est possible : les fonds dans les canaux Lightning pourraient être à risque à cause de bugs (rare) ; la fermeture forcée de canaux pendant des périodes de frais élevés peut être coûteuse ; les coûts VPS sont continus.

La liquidité Lightning est-elle « à risque » ?

Votre liquidité Lightning est la vôtre. Elle n'est pas en danger à cause de Mostro en soi — les hold invoices sont des blocages temporaires. Cependant, les risques standard du Lightning Network s'appliquent (fermetures forcées, canaux bloqués, bugs).

Quand atteindrai-je le seuil de rentabilité ?

Cela dépend de vos coûts et du volume de transactions. Avec 20 $/mois de coûts et 0.6% de frais, vous avez besoin d'environ 5 000 $/mois en transactions pour couvrir les coûts (avant la contribution au développement). La plupart des communautés mettent 3–6 mois à atteindre un volume significatif.

Puis-je déplacer Mostro vers un autre nœud Lightning ?

Oui, mais pas en modifiant la configuration puis en redémarrant. L'escrow est lié au nœud qui l'a créé : on le vide d'abord en mode maintenance, et le daemon refuse de démarrer si vous sautez cette étape. Déplacer le même nœud vers un autre hôte n'est pas un changement de nœud et ne demande rien de particulier. Voyez 5.8.

8. Considérations de Sécurité

⚠️ Avertissement — logiciel en phase précoce

Mostro est en phase précoce de développement. Bien que l'équipe travaille dur pour assurer la fiabilité, des bugs non découverts peuvent exister — y compris des bugs de sécurité pouvant entraîner une perte de fonds. Les développeurs ne sont pas responsables de toute perte d'argent due à des bugs logiciels.

Mostro est open source et son code est ouvert aux audits. Nous encourageons les communautés à promouvoir et financer des audits de sécurité indépendants.

Cela dit, le mécanisme central de séquestre utilisant les hold invoices Lightning a été éprouvé depuis 2021, quand @lnp2pBot a implémenté pour la première fois ce type de séquestre. Des milliers de transactions ont été réalisées avec succès.

Gardez la Clé de Votre Nœud Hors d'Atteinte

Votre nsec_privkey est l'identité de votre nœud, et quiconque la détient peut usurper votre Mostro. Préférez la fournir par la variable d'environnement MOSTRO_NSEC_PRIVKEY ou par un fichier .env en chmod 600 plutôt que de la laisser dans settings.toml (voir 4.1). Ne l'emportez pas non plus sur un portable pour traiter les litiges : enregistrez une clé de solveur distincte pour cela (voir 5.2).

Opérer sous des régimes autoritaires

Si vous opérez dans un pays avec un gouvernement autoritaire, la confidentialité n'est pas optionnelle — c'est une exigence de sécurité.

  1. Faites tourner votre nœud Mostro derrière Tor et/ou un VPN. Cela masque l'IP de votre serveur vis-à-vis des relays Nostr.
  2. Si Tor/VPN n'est pas possible (courant dans les pays en développement avec un internet lent), publiez uniquement des événements sur des relays que vous possédez ou en lesquels vous avez confiance.
  3. Soyez très prudent avec les relays que vous utilisez. À l'avenir, les gouvernements pourraient créer des relays Nostr spécifiquement pour collecter des adresses IP.
  4. Pensez également à la confidentialité de votre nœud Lightning. Faire tourner LND derrière Tor est possible et recommandé dans les environnements sensibles.
💡 Conseil

La beauté de Mostro étant décentralisé est que même si un nœud est arrêté, les autres continuent de fonctionner. Mais la prévention est toujours préférable à la guérison. Prenez la confidentialité au sérieux dès le premier jour.

9. Dépannage

Mostro ne démarre pas

dev_fee_percentage (0.05) is below minimum (0.1)

Définissez dev_fee_percentage à au moins 0.10 dans settings.toml.

Fichier de configuration ou base de données introuvable

Assurez-vous que le flag -d pointe vers le répertoire contenant settings.toml. Pour Docker Hub : vérifiez que ~/mostro-config/settings.toml existe.

Mostro s'arrête au démarrage avec Ln node error

REFUSING TO START: Lightning node changed

Mostro pointe vers une autre identité LND alors que de l'escrow est encore ouvert sur l'ancienne. Reconnectez l'ancien nœud et videz-le avant de changer. Voyez 5.8.

Les clients ne voient pas mes ordres, ou ne peuvent pas écrire à mon nœud

Vérifiez la ligne Transport: dans vos logs. Un nœud en nip44 est invisible pour les clients limités au protocole v1, et un nœud en gift-wrap est invisible pour les clients v2. Voyez 4.8.

Les paiements échouent avec « no route »

Vérifiez payment_cltv_limit. Il doit se situer au moins 576 blocs au-dessus de max_final_cltv_expiry_delta et ne pas dépasser le --max-cltv-expiry de votre LND. Voyez 4.9.

Problèmes de connexion

Mostro démarre mais ne se connecte pas aux relays

Problèmes de transactions

Un utilisateur reçoit "cant-do: too_many_requests" lors de la restauration de session

Cela se produit lorsque l'utilisateur a plus d'ordres (historiques + actifs) que la valeur de max_orders_per_response dans votre configuration. Le client essaie de récupérer tous ses ordres d'un coup et Mostro le rejette. Ce n'est pas un bannissement ni un blocage temporaire — cela continuera tant que vous n'ajustez pas la valeur.

# Dans settings.toml, augmentez la limite :
max_orders_per_response = 50  # 10 par défaut, maximum 255

La valeur tient sur un seul octet : 255 est donc le plafond. Si un utilisateur a plus d'ordres que cela, il doit purger son historique plutôt que vous continuiez à relever la limite.

Les ordres n'apparaissent pas dans les clients

Paiements échouant

Problèmes de base de données

Erreurs de base de données verrouillée

ps aux | grep mostrod
# S'il y a plusieurs processus, supprimez les extras :
kill <PID>

Obtenir de l'aide

  1. Vérifiez les logs d'abord — la plupart des erreurs expliquent ce qui a mal tourné
  2. Telegram (Développeurs) : @mostro_dev
  3. Telegram (Communauté) : @MostroP2P
  4. GitHub Issues : github.com/MostroP2P/mostro/issues
  5. DeepWiki : deepwiki.com/MostroP2P/mostro

Quand vous demandez de l'aide, incluez toujours : votre version de Mostro, les logs pertinents, et ce que vous avez déjà essayé.

Annexe : Référence Rapide

Emplacements importants des fichiers

FichierDocker HubNatif
Configuration~/mostro-config/settings.toml/opt/mostro/settings.toml
Base de données~/mostro-config/mostro.db/opt/mostro/mostro.db
Cert LND~/mostro-config/lnd/tls.certVariable (voir config LND)
Macaroon LND~/mostro-config/lnd/mostro.macaroonVariable (voir config LND)
ServiceN/A/etc/systemd/system/mostro.service
Logsdocker logs -f mostrojournalctl -u mostro

Commandes essentielles

# Docker
docker logs -f mostro         # Voir les logs
docker restart mostro          # Redémarrer
docker stop mostro             # Arrêter

# Natif (systemd)
systemctl start mostro         # Démarrer
systemctl stop mostro          # Arrêter
systemctl restart mostro       # Redémarrer
systemctl status mostro        # Voir le statut
journalctl -u mostro -f        # Voir les logs

# Base de données
sqlite3 mostro.db "SELECT COUNT(*) FROM orders;"                           # Total des ordres
sqlite3 mostro.db "SELECT COUNT(*) FROM orders WHERE status='success';"    # Transactions réussies
sqlite3 mostro.db "SELECT SUM(fee*2 - COALESCE(dev_fee, 0)) FROM orders WHERE status='success';"  # Frais nets conservés par le nœud

Configuration recommandée pour les nouveaux nœuds

[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']  # Changez pour votre devise locale

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

Ce guide est maintenu par la communauté Mostro. Vous avez trouvé une erreur ou souhaitez l'améliorer ?
Les contributions sont les bienvenues sur github.com/MostroP2P/community

Dernière mise à jour : Octobre 2026 · Mostro v0.19.2