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 :
- Lightning Network — une couche de paiements rapides et peu coûteux pour Bitcoin (pensez-y comme la voie express de Bitcoin pour les petits paiements agiles)
- Nostr — un protocole de communication résistant à la censure (pensez-y comme un système de messagerie que personne ne peut éteindre)
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 ?
- 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.
- 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.
- 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.
- Indépendance — Aucune entreprise ne peut fermer votre exchange. Aucun gouvernement ne peut faire pression sur un opérateur unique pour le faire fermer.
- Personnalisation — Vous choisissez quelles devises supporter, quelles méthodes de paiement autoriser et quels frais facturer.
Comment fonctionne Mostro (Simplifié)
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 :
| Ressource | Minimum | Recommandé |
|---|---|---|
| CPU | 2 vCPUs (partagés) | 2+ vCPUs |
| RAM | 2 Go | 4 Go |
| Stockage | 60 Go SSD | 100 Go SSD |
| Bande passante | 3 To/mois | 3+ To/mois |
| OS | Ubuntu 22.04+ LTS | Ubuntu 24.04 LTS |
Coût mensuel estimé : 10–24 $/mois.
Fournisseurs VPS populaires :
- Hostinger — à partir d'environ 7 $/mois (prix promotionnel ; le renouvellement peut être plus élevé) (KVM 2 : 2 vCPU, 8 Go RAM, 100 Go NVMe, 8 To de bande passante) · Accepte le Bitcoin
- Hetzner — 3,49–8 €/mois (CX23 à partir de 3,49 €, bon rapport qualité-prix, basé dans l'UE)
- Digital Ocean — 24 $/mois (4 Go RAM, 2 CPUs, 80 Go SSD) ou 32 $/mois (4 Go RAM, 2 Intel CPUs, 120 Go NVMe)
- OVH — environ 6–12 $/mois
- Linode/Akamai — 12 $/mois
- Lunanode — Accepte les paiements en Bitcoin
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 :
| Option | Difficulté | Coût | Notes |
|---|---|---|---|
| Utiliser un nœud LND existant | Facile | Gratuit (si vous en avez un) | Idéal si quelqu'un en a déjà un |
| Faire tourner LND sur le même VPS | Difficile | Même VPS + liquidité | Nécessite un VPS avec 4 Go+ de RAM |
| Solution nœud-en-boîte | Moyen | 200–600 $ + liquidité | Start9, Umbrel, RaspiBlitz |
| StartOS avec le paquet Mostro | Plus facile | 300–600 $ + liquidité | Start9 dispose d'un paquet Mostro en un clic |
| Utiliser Voltage.cloud | Facile | À partir d'environ 20 $/mois + liquidité | Voltage — LND hébergé avec infrastructure gérée |
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 :
- Le fichier
tls.cert(un certificat de sécurité) - Un fichier
mostro.macaroondédié (un jeton d'authentification avec uniquement les permissions dont Mostro a besoin, voir ci-dessous) - L'adresse gRPC (typiquement
https://127.0.0.1:10009si sur la même machine)
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ée | BTC approximatif |
|---|---|---|
| Petite communauté (quelques transactions/jour) | 1–5 millions de sats | 0.01–0.05 BTC |
| Communauté moyenne | 5–20 millions de sats | 0.05–0.20 BTC |
| Communauté active | 20–100 millions de sats | 0.20–1.0 BTC |
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é :
- Ouvrez des canaux vers des nœuds bien connectés (utilisez Lightning Network+ ou Amboss pour trouver de bons pairs)
- Vous avez besoin de capacité sortante (pour payer les acheteurs) et de capacité entrante (pour recevoir des vendeurs)
- Obtenir de la liquidité entrante est généralement plus difficile — envisagez Lightning Loop, Magma, ou des services d'échange de canaux
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).
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âche | Difficulté | Connaissances requises |
|---|---|---|
| Louer un VPS | Facile | Carte bancaire, navigation web basique |
| Se connecter en SSH | Facile | Suivre des instructions, taper des commandes |
| Installer Docker | Moyen | Copier-coller des commandes, dépannage basique |
| Faire tourner Mostro (Docker) | Moyen | Éditer des fichiers de configuration, comprendre les chemins |
| Faire tourner Mostro (natif) | Difficile | Administration Linux, compilation de logiciels, systemd |
| Configurer LND depuis zéro | Difficile | Connaissances significatives en Linux et réseaux |
| Gérer la liquidité Lightning | Difficile | Comprendre 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 :
- Option A (Docker Hub) : La plus rapide. Pas de compilation, pas de clonage. Recommandée pour la plupart.
- Option B (Docker Build) : Vous construisez l'image localement depuis le dépôt.
- Option C (Compilation native) : Plus de contrôle, mieux pour les administrateurs expérimentés.
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
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 :
/root/.lnd/tls.cert/root/.lnd/data/chain/bitcoin/mainnet/mostro.macaroon
É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
É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 :
Settings correctly loaded!— La configuration est valideTransport: nip44 (protocol v2, event kind 14)— Protocole utilisé (voir 4.8)Connected to 'wss://...'— Relais Nostr établiRecorded Lightning node identity <pubkey>— LND joint (premier démarrage uniquement)
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.
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.
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.
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
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
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
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 ?
wss://relay.mostro.network— Relay propre à Mostro, recommandéwss://nos.lol— Relay fiable et bien connecté- Ajoutez 3–5 relays pour la fiabilité. Plus de relays = meilleure disponibilité mais plus de bande passante.
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.
0.006= 0.6% (chaque partie paie 0.3%)0.01= 1.0% (chaque partie paie 0.5%)0= gratuit (bon pour développer votre base d'utilisateurs)
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.
0.30= 30% (par défaut) — sur 600 sats, 180 vont au fonds de développement- Minimum : 10% (
0.10), Maximum : 100% (1.0) - Payé par votre nœud sur ses revenus, non facturé aux utilisateurs
- Tous les paiements sont vérifiables publiquement via des événements Nostr (kind 8383)
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']
max_order_amount: Transaction maximale en satoshis. Configurez-la en fonction de la capacité de vos canaux Lightning.min_payment_amount: Transaction minimale en satoshis. 1 000 ou 10 000 est plus pratique que 100.max_orders_per_response: Nombre maximum d'ordres que Mostro renvoie en une seule requête. Si un utilisateur accumule plus d'ordres que cette limite (par exemple lors de la restauration de sa session depuis le client mobile), il recevra une erreurcant-do: too_many_requestset ne pourra pas récupérer ses ordres. Si vos utilisateurs tradent fréquemment, augmentez cette valeur (par exemple 50 ou 100). La valeur par défaut de 10 peut être insuffisante.fiat_currencies_accepted: Utilisez les codes ISO 4217. Un tableau vide[]accepte toutes les devises.
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.
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"
| Valeur | Protocole | Kind visible sur le relais | Statut |
|---|---|---|---|
"nip44" | v2 — événements kind 14 signés, contenu chiffré NIP-44 | 14 | Par défaut, y compris pour une config sans ligne transport |
"gift-wrap" | v1 — gift wraps NIP-59 | 1059 | Dé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.
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églage | Ce qu'il protège |
|---|---|
max_final_cltv_expiry_delta | Rejette 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_blocks | Marge 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_payouts | Plafond 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_destination | Le même plafond par pubkey de destination, et le plus efficace des deux. |
payment_cltv_limit | Plafond 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_change | Garde-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.
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 ?
- L'acheteur dit qu'il a payé, le vendeur dit qu'il n'a pas reçu
- Le vendeur refuse de libérer les Bitcoin après avoir reçu le paiement
- L'une des parties cesse de répondre
Le processus de litige :
- L'utilisateur ouvre un litige — L'une des parties clique sur « Litige » dans le client
- Mostro marque l'ordre — Le statut passe à « Litige », les fonds restent bloqués
- L'arbitre prend le cas — Un admin assigné à votre nœud enquête
- Investigation — Communication avec les deux parties, demande de preuves
- Résolution — L'arbitre décide : libérer vers l'acheteur, ou rembourser le vendeur
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é comme | Peut | Ne peut pas |
|---|---|---|
npub1...:read | Prendre un litige, le lire, écrire aux deux parties | Régler ou annuler l'ordre |
npub1...:read-write | Tout, 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 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.
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
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
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
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
- Lisez les notes de version de la version visée. Votre
settings.tomln'est jamais écrasé, donc une nouvelle option ne prend effet qu'une fois ajoutée : comparez votre fichier avec le nouveausettings.tpl.toml. - 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 à jourdocker 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.
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).
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)
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).
- Annoncez la fenêtre à vos utilisateurs bien à l'avance.
- Activez le mode maintenance :
mostro-cli admsetmaintenance -e true -r "LN node migration". - Interrogez
mostro-cli admmaintenancestatusjusqu'à ce qu'il indiquedrained = true. Les ordres en attente expirent d'eux-mêmes ; pour raccourcir la vidange, vous pouvez en annuler un avecmostro-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. - Gardez l'ancien nœud en ligne tout du long. Il doit encore terminer les paiements en vol.
- Arrêtez Mostro et sauvegardez
mostro.db. - Pointez
[lightning]vers le nouveau nœud et laissezallow_node_change = false. - Démarrez Mostro. Il enregistre la nouvelle pubkey. Désactivez le mode maintenance et testez avec un ordre.
- Ce n'est qu'alors que vous pouvez décommissionner l'ancien nœud.
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
| Poste | Coût mensuel | Notes |
|---|---|---|
| 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 Lightning | Variable | Ouverture/fermeture de canaux |
| Total mensuel | 11–26 $ | Hors liquidité Lightning |
Coûts uniques / de capital
| Poste | Coût | Notes |
|---|---|---|
| Liquidité Lightning | 0.01–1.0+ BTC | Bloqué 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 configuration | 4–16 heures | Selon le niveau d'expérience |
Potentiel de revenus
| Volume mensuel | Frais (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 $ |
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âche | Fréquence | Temps |
|---|---|---|
| Surveillance (vérifier les logs, le statut) | Quotidien | 5–10 min |
| Résolution de litiges | Selon les besoins | 15–60 min par litige |
| Mises à jour | Mensuel | 15–30 min |
| Gestion de la liquidité | Hebdomadaire | 15–30 min |
| Estimation hebdomadaire totale | 1–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é
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é.
- 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.
- 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.
- 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.
- Pensez également à la confidentialité de votre nœud Lightning. Faire tourner LND derrière Tor est possible et recommandé dans les environnements sensibles.
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
- Vérifiez que LND tourne :
lncli getinfo - Vérifiez que
lnd_grpc_hostcorrespond à l'adresse de votre LND - Vérifiez que les chemins de
tls.certetmostro.macaroonsont corrects - Vérifiez que le macaroon porte bien les permissions de 2.2
- Docker + LND sur l'hôte : utilisez
host.docker.internal. L'Option B exige en plus le mappageextra_hosts.
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
- Vérifiez les URLs des relays (doivent commencer par
wss://) - Assurez-vous que le pare-feu de votre VPS autorise les connexions sortantes sur le port 443
- Essayez avec différents relays — certains peuvent être temporairement en panne
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
- Vérifiez les connexions aux relays dans les logs
- Assurez-vous que les clients utilisent les mêmes relays que votre nœud
Paiements échouant
- Vérifiez la liquidité :
lncli listchannels - Assurez-vous d'avoir suffisamment de capacité sortante
- Vérifiez le paramètre
max_routing_fee
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
- Vérifiez les logs d'abord — la plupart des erreurs expliquent ce qui a mal tourné
- Telegram (Développeurs) : @mostro_dev
- Telegram (Communauté) : @MostroP2P
- GitHub Issues : github.com/MostroP2P/mostro/issues
- 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
| Fichier | Docker Hub | Natif |
|---|---|---|
| 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.cert | Variable (voir config LND) |
| Macaroon LND | ~/mostro-config/lnd/mostro.macaroon | Variable (voir config LND) |
| Service | N/A | /etc/systemd/system/mostro.service |
| Logs | docker logs -f mostro | journalctl -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