Quick Start 🚀

On this site, you'll find information on how to use Mostro, a peer-to-peer (P2P) bitcoin exchange platform on the Lightning Network for any local currency. It operates on Nostr and does not require KYC procedures.

Quick Start Guide 🚀

  1. Have a Lightning Network-compatible wallet.

  2. Open any Mostro client.

  3. Follow the instructions of the client:

    • The Mostro App creates your identity for you: back up its 12 words before your first trade.
    • Choose the Mostro node you want to trade on.
    • Find or create bitcoin buy/sell offers.
    • Wait for an interested user.
    • If you're buying sats, provide the invoice where you will receive the sats.
    • If you're selling sats, pay the hold invoice (the sats will remain locked in your wallet until the end of the process).
    • Some nodes also ask for a small anti-abuse deposit, which you get back when you trade in good faith.
    • Talk to your counterparty. Agree on how to exchange the fiat. This is a private process.
    • Complete the exchange.
    • If your counterparty does not respond, start a dispute.
    • Rate your counterparty. You will also be rated.

Already have a reputation on @lnp2pBot or another Mostro node? You can bring it with you.

Recommendations

  • If you have any questions not answered in this documentation, feel free to ask our community.

  • Report bugs or suggest improvements in our GitHub repositories.

  • Follow us on Nostr and X to keep up with major announcements.

Frequently Asked Questions

Below you will find the answers to several frequently asked questions about Mostro. Continue reading this documentation to understand what Mostro is, how it works, and how you can use it.

You can also find more information about Mostro in these resources:

What is Mostro?

Mostro is a peer-to-peer (P2P) bitcoin exchange platform on the Lightning Network for any local currency, operating on the Nostr protocol and not requiring Know Your Customer (KYC) procedures.

It uses hold invoices as an escrow system to provide security for the exchange of sats, minimizing custody and reducing the trust needed in both the counterparty and Mostro.

By operating on Nostr, a communication protocol designed to be censorship-resistant due to the decentralization of its infrastructure, Mostro ensures that it is very difficult to block bitcoin exchanges, censor the posting of buy and sell offers, or hinder communication between users involved in an exchange. Additionally, as more Mostro nodes become active, combined with Nostr's inherent decentralization, it will become increasingly difficult to stop P2P bitcoin exchanges without KYC.

Origin of Mostro

Mostro is inspired by @lnp2pBot, a Telegram bot created in 2021 to facilitate bitcoin exchange via the Lightning Network without surrendering personal data, without custody of funds, and without KYC. The bot has grown steadily and organically, with global reach and a particularly significant impact in Latin America, where the population faces financial challenges and finds an alternative in bitcoin. It has also gained popularity in countries under authoritarian regimes, such as Cuba and Venezuela, where people use bitcoin to resist tyranny and reduce their dependence on local currency.

Although the @lnp2pBot operates efficiently, it functions on Telegram, a platform that, while offering many advantages, could potentially come under pressure from powerful governments seeking to pursue political dissidents or inconvenient public figures. In this context, Nostr emerges as an ideal alternative, allowing an exchange system like Mostro to operate without the risk of censorship by powerful entities, thus ensuring greater privacy and security for users.

What do I need to use Mostro?

To use Mostro, all you need is a Lightning Network-compatible wallet and a Mostro client, such as the Mostro App. Optionally, a Lightning address or a wallet that supports Nostr Wallet Connect (NWC) lets the app receive and pay for you.

You don't have to be an expert in Nostr. If you are, great! But if not, you can still use Mostro without any issues, as it is designed to be simple and intuitive for all users.

To perform bitcoin exchanges, you'll use a Mostro client. Although each client has its own features, in most of them, you won't need to have a pre-created Nostr private key. To ensure the security and privacy of your transactions, the client automatically generates a new key for each exchange, without any setup on your part. Your identity is a 12-word phrase that the client creates for you: back it up.

Do I need to register or do KYC?

NO! Bitcoin was born as "a peer-to-peer electronic cash system," and we are proud to support that principle. None of your personal data is required. Additionally, Mostro nodes do not have access to conversations between users, so it is not possible to collect any personal information. You can find more information about how your privacy is protected on Mostro here.

How does Mostro work?

To understand how Mostro works, it is important to know its components:

  • Mostro daemon (Mostrod): Manages communication between users and the Lightning Network (LN) node. It publishes Nostr events, executes actions sent by users, and guides them through the exchange process.

  • Lightning Network node associated with the Mostrod node: Creates and manages the hold invoices that sellers must pay and makes payments for the invoices provided by buyers.

  • Mostro clients: These are the applications that users interact with directly. They provide the communication interface between Mostrod and the users. The clients send Mostrod the actions performed by users, such as creating an order, opening a dispute, releasing sats, among others. They are also responsible for generating and handling users' private keys.

The following diagram summarizes how Mostrod, the seller (via a Mostro client), and the LN node interact:
order-flow

Bitcoin Sale Flow on Mostro

  • Seller: Alice
  • Buyer: Bob
  1. Order creation:
    Alice accesses a Mostro client and decides to post an order to sell 5000 sats for 3 USD, to receive payment on her XYZ card. The interface for creating the order will depend on the client she uses. The order is posted in an order book that can be accessed from any Mostro client. If another user does not take the order within the time set by the node (usually 24 hours), it will be automatically deleted.

  2. Order taken by the buyer:
    Bob, interested in buying sats, accesses a Mostro client (not necessarily the same one Alice used). He finds the offer of 5000 sats for 3 USD and decides to take it. He is then asked to provide an invoice for 5000 sats within 15 minutes. Bob generates the invoice in his LN wallet and sends it to Mostro, who instructs him to wait 15 minutes for his counterparty to respond.

  3. Payment and communication between parties:
    Alice receives a message from Mostro notifying her that someone has taken her offer and that she must pay a hold invoice for 5000 sats within 15 minutes. If she does not make the payment, the order will be canceled. Once Alice pays the invoice, Mostro reveals Bob’s public key to Alice and vice versa, allowing them to start a private chat. At this point, Alice must provide Bob with the number of her XYZ card to receive the fiat payment. When Bob sends her the 3 USD, he presses I've sent the payment in his Mostro client. Alice receives a notification to verify receipt of the fiat and then release the sats to Bob.

  4. Sats release:
    When Alice confirms she received the 3 USD, she presses Release sats in her Mostro client. Then Mostro will collect the 5000 sats from Alice's wallet and pay Bob's invoice. Finally, Mostro will ask both parties to rate their counterparty.

When Mostro connects both users, the time they have to complete the exchange is limited by the duration of the hold invoice provided by the Mostro node they are using. Users must respect this time frame; for more information, see here.

If during the process, Alice and Bob decide not to proceed with the exchange, they can cancel the order cooperatively. If either party attempts to cancel arbitrarily or defraud the other, the other party can open a dispute.

Note: In this example, it is assumed that Mostro’s fees are 0. For more information on fees, see Exchange Fees and Limits. On nodes that use an anti-abuse bond, the maker, the taker or both (depending on the node) lock a small deposit: the maker before the order is published, the taker before the take goes through.

Technical Explanation

  1. Alice creates the order:
    When Alice creates the sale offer, her Mostro client should automatically generate a new Nostr private key that Alice will use only for that order (a new private key should always be generated for each order to protect users’ privacy). Using that key, Alice sends Mostrod a message with the order details: a kind-14 event signed with that key, with its content encrypted with NIP-44 (Mostro protocol v2). All the messages between users and Mostrod below travel the same way. Then, Mostrod publishes an addressable event of type 38383, with the order details and its status: pending. Mostro clients monitor these events and display those orders with pending status in their order books.

  2. Bob takes the order:
    When Bob takes the order, his Mostro client automatically generates a new Nostr private key for this order, then sends a message to Mostrod indicating that he has taken that offer. Mostrod publishes a new event 38383 for that order, this time with the status waiting-buyer-invoice, which removes the order from all clients' order books as it is no longer pending. Mostrod sends Bob a message requesting an invoice for 5000 sats. Bob sends the invoice to Mostrod in a message, and then Mostrod publishes an event 38383 for that order, this time with the status waiting-payment.

  3. Alice pays the hold invoice:
    Mostrod sends Alice a message with the hold invoice generated by the associated LN node. If Alice pays within the 15 minutes, Mostro sends her a message revealing Bob's pubkey, and another message to Bob revealing Alice's pubkey. Additionally, it updates the event 38383 for this order with the status active. Now, Alice and Bob can communicate directly through messages encrypted with NIP-44, addressed to a key only they share (see Privacy), and Mostrod cannot read any of those messages. When Bob makes the fiat payment and presses I've sent the payment in his client, he sends a message with the fiat-sent action to Mostrod, who in turn sends a message to Alice with that same action, and her client displays a Release sats button if she has received the payment. Mostrod also publishes an event 38383 for that order with the status fiat-sent.

  4. Alice releases the sats:
    When Alice presses Release sats in her client, she sends a message to Mostrod indicating that the sats should be released to Bob. Then, the LN node associated with that Mostrod node settles the payment of the hold invoice and pays the invoice provided by Bob. At the end of the process, Mostrod publishes an event 38383 for that order with the status success and sends a message to Alice and Bob, requesting that they rate their counterparty, who send back their rating through a message.

For more details on the communication between Mostrod and its clients, you can read here.

Accepted Currencies and Payment Methods

Mostro is a peer-to-peer (P2P) exchange, so it technically supports any currency and payment method, as long as there is a counterparty willing to make the trade.

However, each Mostro node operator can decide which fiat currencies to enable on their node. Before trading, make sure the node you choose supports the currency you want to trade with.

To price orders at market, each node takes the bitcoin price from one or more sources chosen by its operator, such as yadio.io, CoinGecko or Blockchain.com, and combines them. In the Mostro App you can see which ones your node uses under About → Node technical data. If no source quotes your currency, you can still use Mostro by creating an order with a fixed amount of sats in exchange for a fixed amount of your currency.

The app only offers the currencies that the selected node accepts. Some nodes also accept dollar stablecoins (USDT, USDC, DOC) and bitcoin on other networks (on-chain BTC, Liquid, Rootstock): see Stablecoins and Bitcoin on Other Networks.

If your currency is not available on any existing node or does not appear as an option in the clients, you have two paths:

  • Contact the administrator of an unrestricted node to explore the possibility of adding it
  • Run your own Mostro node for your community, with the currencies and payment methods you need

Stablecoins and Bitcoin on Other Networks

Some Mostro nodes let you trade Lightning sats for dollar stablecoins or for bitcoin on other networks, besides local currencies. Lightning sats are always one side of the trade. The other side is paid directly between the two of you, on the network named in the order.

CodeWhat it isOrder amount in
USDTTether USDcoins (like dollars)
USDCUSD Coincoins (like dollars)
DOCDollar on Chain, on Rootstockcoins (like dollars)
BTCBitcoin on-chainsats
LBTCL-BTC on the Liquid networksats
RBTCRBTC on Rootstocksats

Typical uses are moving between Lightning and Liquid or Rootstock (a swap), getting on-chain bitcoin for Lightning sats, or buying and selling sats for dollars without a bank.

Which nodes offer them

Only nodes whose operator enabled them. The Mostro App (version 2.1.2 or later) shows these codes in the currency list under Stablecoins and Bitcoin on other networks, but only those the selected node accepts. You can compare nodes under Settings → Network → Mostro Node and in About.

How the price works

  • Stablecoins are worth one dollar each, so a USDT order is priced exactly like a USD order. The premium or discount works the same way.
  • BTC, LBTC and RBTC are counted 1:1 in sats. An order for 100,000 means 100,000 sats of that asset (0.001 RBTC). At market price, the premium is the price of the swap: if you sell Lightning sats in an order for 100,000 sats of RBTC with a 1% premium, you lock 99,000 Lightning sats and receive 100,000 sats of RBTC. In the app you enter these amounts in sats.
  • If a node accepts a code but does not price it at market, the app tells you "This node doesn't quote {code} at market price. Set a fixed amount in sats."

Mostro's usual fee applies on top, as in any trade.

The payment method is the network

The payment method of the order says on which network the asset is paid: for example USDT (Tron), USDT (Ethereum), USDC (Base), DOC (Rootstock), BTC (On-chain), LBTC (Liquid) or RBTC (Rootstock). An order can list several networks; agree in the chat on which one you will use. Mostro does not check the network or the address.

Step by step

If you are selling sats (you receive the asset):

  1. Pay the hold invoice as in any trade.
  2. Share your receiving address in the trade chat. Make sure it is an address for the network you agreed on.
  3. When the buyer marks the payment as sent, check with the transaction ID they pasted in the chat that the full amount arrived and is confirmed.
  4. Only then tap Release sats.

If you are buying sats (you send the asset):

  1. Send the asset on the exact network of the order, to the address the seller shared in the chat. You pay the network fee: the seller must receive the full amount.
  2. Paste the transaction ID in the chat. It is your proof if there is a dispute. For Liquid, paste the unblinded transaction link: Liquid hides the amount, and that link shows it to the seller and to the solver.
  3. Tap I've sent the payment.

Safety rules

  • Wrong network, lost funds. A stablecoin sent on a different network than the address belongs to can be lost for good.
  • Transfers can't be undone. Mostro only holds the Lightning side; it never sees or checks the other transfer.
  • Wait for confirmation. Never release on an unconfirmed transfer.
  • Mind the clock. You have the same time as in any trade (see Exchange Times). Use a network fee high enough for the transfer to confirm in time; a cheap on-chain transaction can take hours.
  • Stablecoins can lose their peg. Their price is assumed to be one dollar. If one drifts far from that, think twice before trading it.

Disputes

If something goes wrong, open a dispute as usual. There is no bank statement here: the solver checks the transaction ID (or the unblinded Liquid link) in a block explorer for that network. That is why pasting it in the chat matters.

Other clients

mostro-cli and MostriX can create these orders only at a fixed price for now, and do not show BTC, LBTC and RBTC amounts in sats. Older versions of the app have the same limitation.

Exchange Fees and Limits

Each operator of a Mostro node can set their own fees and limits per transaction, fostering competition among different nodes and allowing users to select the one that best suits their needs.

Fees

The node's fee is split in half between the buyer and the seller for each completed transaction. The exact percentage depends on the Mostro node you use: most community nodes charge between 0.5% and 1% in total.

For example, a node with a 1% fee charges 0.5% to the buyer and 0.5% to the seller. The Mostro App shows the total fee of each node, under Settings → Network → Mostro Node and in About → Connected node. When you pay the hold invoice as a seller, the app tells you how many sats of it are the fee.

Resolving a dispute costs nothing extra. The anti-abuse deposit some nodes ask for is not a fee: you get it back when you trade in good faith.

Limits

Each node also defines the minimum and maximum amount in sats allowed per transaction. You can see them in the app under About → Connected node (Min order and Max order), and the app checks your order against them before publishing it.

Multiple Mostro Nodes

Mostro is designed to be a decentralized system where multiple operators can run their own nodes. This means that:

  • There is competition among nodes to offer the best service
  • Each operator defines their own fees, limits, and accepted currencies
  • Users are free to choose which node to trade on
  • If one node goes down, others remain available

You can check whether a node is working on the status page.

Development Contribution

Each Mostro node automatically contributes a percentage of its earnings to the project's development fund. This contribution comes from the operator's earnings and is not charged extra to users.

This system ensures the sustainability of Mostro's development in a transparent way: all contributions are published as events on Nostr and can be verified by anyone.

For more details on how this system works, you can read the full article: Sustainable Funding for Mostro Development

Can I cancel an order?

If you created an order and it hasn't been taken yet, you can cancel it. This includes an order still waiting for its anti-abuse deposit. In the Mostro App, open your order and confirm Cancel the order? with Yes, cancel.

If the order has been taken but the trade has not started yet — the seller has not paid the hold invoice or the buyer has not sent their invoice — either of you can cancel it directly, without the other's consent.

Once the seller's sats are locked, if you decide not to proceed you will need to initiate a cooperative cancellation with your counterparty. In the app, tap Cancel trade; your counterparty sees Accept cancel. If both parties agree, Mostro will cancel the hold invoice paid by the seller, and the sats will be returned to them. This also works while a dispute is open, and closes it.

In case your counterparty does not want to cancel, you can initiate a dispute.

Hold Invoices: Security of Exchanges on Mostro

Mostro uses hold invoices as an escrow mechanism to secure the funds of a transaction, protecting the buyer from potential fraud or non-payment. At the same time, it ensures the seller's security by not directly holding their funds.

To sell sats through Mostro, you must pay the hold invoice that will be provided to you. Hold invoices are a type of Lightning Network invoice that allows the "locking" of the sats you intend to sell in your wallet, without settling the payment until the transaction with your counterparty is completed. Depending on the wallet you use, you might see your payment as "queued", "frozen", "in flight", or "pending".

Once the seller of sats notifies Mostro that they have received the fiat, the hold invoice payment is automatically settled: the sats will be "unlocked" and collected by the Lightning Network node of Mostro used for the exchange. Then, the corresponding fee will be deducted, and an attempt will be made to pay the invoice provided by the buyer immediately. If the payment fails, Mostro will request a new invoice from the buyer and repeat the process until the payment is completed successfully.

Mostro minimizes the custody time of users' funds, limiting it only to the period from when the hold invoice is collected from the seller until it is paid to the buyer, a process that can take only a few seconds.

The hold invoice payment may also be settled if users enter a dispute and the administrator determines that the sats should be transferred to the buyer. Conversely, if the administrator decides that the order should be canceled, the hold invoice payment will be canceled, and the sats will be "unlocked" in the seller's wallet, without ever leaving it. This will also occur if a cooperative cancellation is made, or if the validity time of the hold invoice, which is limited, is exceeded.

How long a hold invoice stays valid depends on the node: on most nodes about 1 day (144 blocks), on some up to 2 days or more. The Mostro App shows it under About → Node technical data, and see Exchange Times for what it means for your trade.

In the app, the seller pays the hold invoice from the Lock your sats screen, with any Lightning wallet or, if one is connected through Nostr Wallet Connect, with Pay with Wallet.

In addition to the escrow, some nodes may require an additional hold invoice as collateral against abuse. See Anti-Abuse Bond for details.

Anti-Abuse Bond

The anti-abuse bond is an optional mechanism that some Mostro nodes use to make exchanges safer. The idea is simple: when entering a trade you put up a small amount of sats as collateral, which you get back in full if you act in good faith, but which you lose if you try to scam your counterparty or fail to do your part. This way, a scammer puts their own money at risk, which discourages abuse and increases the security of exchanges on Mostro.

A node with or without a bond

Not all Mostro nodes require an anti-abuse bond. It is a feature that each administrator decides whether to enable on their node, so it is up to you to choose whether you prefer to trade on a Mostro that requires it or one that does not.

Each node that enables it sets its own rules: who it asks for the bond (whoever creates the order, whoever takes it, or both) and how much it is. The amount is usually a small percentage of the order value (for example, 1%) with a minimum in sats, but that percentage is decided by each node.

Tip: The Mostro App calls the bond a deposit. You can check whether a node requires one —and how much— before trading: the node list under Settings → Network → Mostro Node shows "Deposit X%" or "No deposit", About → Connected node shows the Deposit, and About → Node technical data → Anti-abuse Deposit shows all its rules. The create and take screens also warn you when a deposit applies.

How is it different from the escrow?

The bond is completely independent from the trade escrow. It is a second hold invoice: your sats are only "locked" in your wallet, they are not spent. If everything goes well, they are "unlocked" and returned to you without ever having left your wallet. It is not mixed with or deducted from the exchange amount.

When do I get my bond back?

You get 100% of your bond back as long as you do your part: when you complete the trade successfully or, simply, when you do not cheat or break what was agreed. For example:

  • You complete the exchange correctly.
  • You cancel the order cooperatively.
  • You created an order and cancel it before paying the bond, or before anyone takes it.
  • A dispute arises and the administrator does not determine that you acted in bad faith.

Under normal conditions the bond is not a cost: it returns to your wallet in full, just like the sats locked in a hold invoice.

When can I lose it?

Important: You only lose your bond if you abuse the system. This can happen in two situations:

  1. By decision in a dispute. An administrator (solver), after reviewing the evidence, determines that you acted in bad faith and instructs Mostro to claim your bond.
  2. By failing to do your part and letting the time run out. If you take or create an order and then do not respond or continue with the exchange (you don't pay, don't send the fiat, don't provide your invoice in time), you let the deadline that was your responsibility expire. This only applies if the node enabled that policy.

Where do the sats from a claimed bond go?

When a bond is claimed, the sats are split between the node —which thereby funds the work of resolving disputes and keeping the service running— and your honest counterparty, as compensation for the harm. The proportion of that split is defined by each node and is public, so you can know it before trading.

Examples

Example — A buyer trying to scam. Alice sells sats and Bob buys them on a node that requires an anti-abuse bond. Bob never sends the agreed fiat money, but still insists that Alice release the sats to him.

Alice opens a dispute and presents the administrator with evidence that she never received the payment. The administrator confirms that Alice is in the right, cancels the order —the escrow sats return to Alice— and claims Bob's bond, since he was trying to scam her. As compensation, Alice receives half of the sats from Bob's bond; the other half goes to the node. Bob loses his bond for having tried to abuse the system.

Example — A spammer cluttering the order book. Imagine a malicious user who wants to fill the order book with offers they never intend to complete. On a node that requires an anti-abuse bond, to create each order they must lock a bond. If someone takes one of their orders and they do not respond or continue with the exchange, they let the deadline expire and lose the bond for that order. This way, filling the book with fake offers becomes expensive and stops being worthwhile.

If you are owed your counterparty's bond

If your counterparty loses their bond and you are owed a share, your client will ask you for an invoice to send you those sats. In the Mostro App you get a notification and a Claim payout action, which opens Claim your share with the deadline; if you connected a wallet through Nostr Wallet Connect, the invoice is filled in for you. You have a window defined by the node (for example, 15 days) to claim it; if you let it pass, you lose the right to collect that share. That is why it is best to attend to your client's request when it appears.

Exchange Times

Mostro is designed for bitcoin-to-fiat exchanges to be fast, so it is recommended to use instant fiat payment methods.

Each Mostro node operator can set their own time frames for each step of the exchange, fostering competition among Mostro nodes and allowing users to select the one that best fits their needs. In the Mostro App you can see the times of the node you use under About → Connected node (Expiration) and About → Node technical data. The trade screen also shows a countdown for each step.

The figures below are typical values; check your node for the exact ones.

When an offer is posted, it usually remains in the order book for 24 hours (some nodes keep orders up to 72 hours). If no one takes it within that time, it will be automatically deleted.

Once someone takes an offer, they usually have 15 minutes to either pay the hold invoice if they are the seller or provide an invoice if they are the buyer. If they do not complete their part within that time frame, the order will be automatically reposted. However, if they do, then the counterparty will have the same time to complete their corresponding action (either paying the hold invoice or providing an invoice, depending on their role in the exchange); if they fail to do so, the order will be canceled and not reposted.

After the seller pays the hold invoice and the buyer provides their invoice, they have until shortly before the expiration of the hold invoice to finalize the exchange. That time is measured in Bitcoin blocks, which arrive about every 10 minutes on average. On most nodes the hold invoice lasts 144 blocks (about 1 day) and Mostro steps in about 20 hours after the seller paid; on nodes with longer hold invoices, such as the default node of the app (about 2 days), Mostro steps in after about 46 hours. During this time, the buyer must send the fiat payment, and the seller must release the sats upon confirming receipt of the fiat. For this reason, it is recommended to only use instant fiat payment methods.

If the exchange has not been completed when Mostro steps in:

  • If the buyer has not marked the fiat as sent, Mostro cancels the order and the sats are returned to the seller's wallet.
  • If the buyer has marked the fiat as sent, Mostro opens a dispute automatically, so that an administrator can resolve it in the little time left before the hold invoice expires.

Within this validity period, users can successfully complete the exchange, cancel it cooperatively, or open a dispute. After the hold invoice expires, Mostro has no ability to intervene in that order.

If both participants in a transaction are online and use instant fiat payment methods, the transactions can be completed almost instantly.

Reputation System

Upon successfully completing a purchase or sale of sats, Mostro will ask you to rate your counterparty, and your counterparty will also rate you. The reputation system uses a 5-star rating scale, where 1 star represents the lowest rating and 5 stars the highest, allowing you to evaluate the transaction experience.

Reputation in Mostro is calculated iteratively, combining the mean and standard deviation of ratings and successful transactions. This means that during your first transactions, even if you receive maximum ratings, your initial reputation will not be very high; instead, it will progressively increase as you accumulate more successful transactions with good evaluations.
This calculation is based on: https://math.stackexchange.com/questions/2148877/iterative-calculation-of-mean-and-standard-deviation.

Where your reputation lives

Your reputation is kept by each Mostro node, for your identity, and only in reputation mode: in full privacy mode you neither give nor receive ratings. In the Mostro App you can see your own reputation on the node you use under Account. If you switch to another node, you start with the reputation you have there.

Bringing your reputation with you

If you earned a reputation on @lnp2pBot or on another Mostro node, you can import it into the node you use now, as long as that node trusts the source. Your counterparties then see your reputation from both places combined. See Importing Your Reputation.

Importing Your Reputation

If you already traded on @lnp2pBot or on another Mostro node, you don't have to start from zero. You can bring the reputation you earned there to the Mostro node you use now.

What travels

Three figures travel with you:

  • how many ratings you received,
  • your average rating,
  • the date of your first trade.

The source signs them in a small Nostr event, called an attestation, addressed to your Mostro identity. It is valid for 7 days. The node you import into adds those figures to the reputation you already have there. Your counterparties see a single rating, a single number of reviews and a single "trading since" date. Nothing marks a figure as imported.

Example: you have 2 ratings averaging 4.5 on a Mostro node, and you import 214 ratings averaging 4.87 from lnp2pBot. Your counterparties on that node now see about 4.87 from 216 ratings, trading for as long as your first lnp2pBot trade.

Before you start

  • Use a recent version of the Mostro App.
  • Use reputation mode (Account → Privacy). In full privacy mode there is no identity to carry a reputation, so the import buttons are disabled.
  • Back up your 12 words. Your reputation is tied to your identity.
  • Select a node that accepts imports from that source. Not every node does: each operator decides which sources to trust. If the node does not import, the app tells you: "This Mostro does not import reputation."

From lnp2pBot

The bot exports your reputation if your account has at least 10 completed trades and 5 ratings received, and is not banned.

  1. In the Mostro App, open Settings → Network → Mostro Node and select the node where you want your reputation.
  2. Go to Settings → Network → Reputation and tap Import reputation.
  3. Note the public key (npub) the screen shows, then tap Get it from lnp2pBot. Telegram opens a private chat with the bot.
  4. The first time, the bot shows the npub it will export to. Check that it is exactly the one your app shows, then tap Confirm and export. This links your bot account to that Mostro identity.
  5. The bot sends two messages: a summary, and the attestation itself. Copy the second message whole.
  6. Back in the app, paste it in "Paste the reputation you received" and tap Check. The app shows who issued it and your figures, for example "★ 4.87 · 214 ratings · since …".
  7. Tap Import into this Mostro. The app confirms: "Your reputation was imported."

Tip: Open the link from the app, on a device that has Telegram. Opening the bot by hand does not work: the bot needs the link the app builds, which carries your identity.

If you need another copy later, for example to import on a second node, repeat the steps. The bot sends a new attestation for the same identity without asking you to confirm again.

From another Mostro node

You can also carry the reputation you earned on one Mostro node (A) to another (B). Node A must offer export, and node B must trust node A.

  1. Select node A. Go to Settings → Network → Reputation → Export my reputation and tap Export my reputation. Leave the authorization field empty.
  2. Confirm the identity in "Export to this identity?" with Export. The app says your reputation is ready and valid for 7 days.
  3. Select node B in Settings → Network → Mostro Node.
  4. Open Reputation → Import reputation. The attestation is already filled in and checked.
  5. Tap Import into this Mostro.

Node A exports only the reputation you earned on node A: at least 10 completed trades and 5 ratings received there. Reputation you imported into node A does not travel again.

Importing on several nodes

  • You have to import separately on each node where you want your reputation.
  • The same attestation works on several nodes while it is valid (7 days). After a successful import the app clears its copy, so keep the copied text, or simply export again.
  • On each node you can import once from each source: for example, once from lnp2pBot and once from another Mostro node.

If you change identity

  • Restoring the same 12 words gives you the same identity. Nothing to do.
  • Moving to a new identity: your reputation on the source is bound to your old identity. With the old identity active, go to Reputation → Move to a new identity, enter the new npub and tap Sign for this Mostro (or Sign for lnp2pBot if it came from the bot). Copy the authorization, valid for one hour. Then, with the new identity active, paste it in the export field (Mostro) or in the bot chat (lnp2pBot).
  • If you lost the old identity, only the node's operator (or the lnp2pBot admins) can move it, after checking it is you.

What you should know

  • Importing links two accounts. The source learns which Mostro identity received your reputation, and the node you import into learns which account it came from. With lnp2pBot, Telegram sees it too. If you don't want those accounts linked, don't import.
  • It cannot be undone by you, and it uses up that source for your identity on that node.
  • It is a snapshot. Ratings you receive later on the source are not added.
  • Only you can use it. An attestation is addressed to your identity: if someone else copies it, they cannot import it.

Messages you may see

MessageWhat it means
This Mostro does not import reputation.The node you selected has import turned off. Choose another node.
This Mostro does not accept reputation from that source.The node does not trust the source that signed your attestation.
This Mostro does not export reputation.The node you selected does not offer export.
Your account cannot export its reputation yet…You don't have 10 completed trades and 5 ratings received on that source yet.
Reputation can only be moved from an account that keeps its reputation…You are in full privacy mode. Switch to reputation mode.
This reputation has expired. Request it again from its source.It is more than 7 days old. Get a new one.
This reputation was issued for another identity than the one you are using.You switched identity after getting it. Use the identity it was issued for, or see "If you change identity".
This reputation was already imported on this Mostro.You already imported from that source on this node.
Your reputation there is already bound to another identity…See "If you change identity".

Dispute Management

If your counterparty is unresponsive, you suspect a scam attempt, or a misunderstanding arises that you are unable to resolve, you can initiate a dispute.

How It Works

When you start a dispute, you will be attended to by the administrator of the Mostro node you are using, or by a person designated by that administrator (solver). When a solver takes the dispute, Mostro sends you and your counterparty a message with that solver's public key, so your client knows who to talk to in the dispute chat. Only follow the instructions of the solver Mostro assigned: anyone else who writes to you about the dispute may be an impostor.

In the Mostro App, tap Open dispute on the trade screen. The dispute then appears under Chat → Disputes, showing "Waiting for a resolver to take the dispute" until a solver takes it. From there you talk to the solver and can attach photos or PDF files as evidence.

You can still settle things with your counterparty while the dispute is open: if the seller releases the sats, or you both agree to a cooperative cancellation, the dispute closes by itself.

Serbero, the Automated Assistant

Some nodes use Serbero, an automated assistant run by the node's operator. If yours does, Serbero may be the first to take your dispute. It writes to you in the dispute chat, introduces itself as an automated assistant and asks one short question at a time: the buyer whether they sent the payment, the seller whether it arrived. The Mostro App labels its messages "Serbero".

  • Serbero cannot move funds and never decides who is right. Mostro registers it with read-only permission.
  • If the payment facts are clear, you can still finish the trade yourselves: the seller can release the sats, or both of you can agree to a cooperative cancellation. Either closes the dispute.
  • Otherwise, or if you ask for a person at any time, Serbero hands the case to a human solver with a summary of what each of you said. The app shows when a solver takes over.
  • To understand your answers, your messages to Serbero are processed by an automated service the operator uses. It receives the text, the trade roles, the amount, currency and payment method, never your public keys.

Resolution

There is no standard method for resolving disputes across all Mostro nodes. Each administrator can decide how to manage disputes generated in their node and what evidence to request from users to make the most appropriate decision.

When the administrator decides which user is in the right, they will have Mostro release the sats to the appropriate user. Administrators do not charge any extra fee for resolving disputes.

Chat Evidence

During a trade, the buyer and the seller communicate through an end-to-end encrypted chat. This chat generates a "shared master key" known only to both parties.

If a dispute arises, either party can choose to voluntarily share this key with the solver. In the Mostro App this is the Share the chat key with the resolver button in the dispute: it covers only this trade's chat and cannot be undone. With it, the solver can access a copy of the conversation that cannot be altered or deleted. This allows disputes to be resolved fairly, exposing any attempted deception. For more details on how this privacy system works, see the Privacy in Mostro section.

Important Timeframes

The users involved must initiate a dispute well before the hold invoice paid by the seller expires, so that the administrator has enough time to request evidence from both parties and make an appropriate decision.

Time continues to run from when the order was accepted and does not stop when a dispute is opened. The administrator must resolve it before the time expires, so users should not wait too long to initiate one. You can read more about timeframes here.

Automatic Dispute

Mostro opens a dispute on its own in only one case: the buyer has marked the fiat as sent, the seller has not released the sats, and the hold invoice is about to expire.

Shortly before the hold invoice expires and the sats are returned to the seller, Mostro checks the order. If it is still waiting for the seller to release the sats, Mostro opens a dispute so that an administrator can decide while the sats are still locked. Without that dispute, the hold invoice would expire and the sats would return to the seller, even if the buyer had already sent the fiat.

What you should know about this automatic dispute:

  • It is registered in the buyer's name, because it is the buyer's payment that is at stake. The buyer will see it as their own dispute, and the seller will see it as a dispute opened by their counterparty.
  • It works like any other dispute: an administrator or solver takes it and attends to both parties.
  • The administrator has very little time to resolve it before the hold invoice expires: 12 blocks with the default settings. In theory that is 120 minutes, since a block is mined every 10 minutes on average, but blocks do not arrive at fixed intervals, so that time can be longer or shorter. If that time runs out, the sats return to the seller and Mostro can no longer intervene. Do not wait for the automatic dispute: if your counterparty stops responding, open the dispute yourself as soon as possible.
  • If the buyer never marked the fiat as sent, Mostro does not open a dispute. It cancels the order before the hold invoice expires, and the sats return to the seller.

Anti-Abuse Bond in Disputes

If you trade on a node that requires an anti-abuse bond, the administrator may claim the bond of whoever acted in bad faith when resolving the dispute. Part of that bond is given to the honest counterparty as compensation. See Anti-Abuse Bond to learn how it works.

Privacy in Mostro

User Communication Privacy with Mostro

Communication between Mostrod and users takes place through Mostro clients using Mostro's protocol v2: each message is a signed Nostr event of kind 14 whose content is encrypted with NIP-44, so only your client and the node can read it. To enhance privacy, Mostro clients automatically generate a new key for each order you take or create, and that key signs your messages. Relays can see that a one-time key talks to a Mostro node, but not what it says, and buy and sell transactions cannot be linked to a single person from the outside.

Mostro clients will never share users' private keys with a Mostro node or its administrator under any circumstances.

Since version 0.19.0, Mostro nodes speak only protocol v2. Clients that still use the old protocol (NIP-59 gift wraps) cannot trade on them.

Reputation Mode

Mostro offers users the option to operate in reputation mode, the default in the Mostro App. In this mode, your client proves to the Mostro node you are using that the order belongs to your fixed identity key. That proof travels inside the encrypted message, so only that node learns it. The node can then associate a reputation with you based on ratings received from your counterparts after completing transactions. Your identity key is not shared with other users or exposed publicly, and each new order continues to use one-time keys, protecting the details of each exchange from third parties.

Full Privacy Mode

For users who prioritize privacy above all else, Mostro offers full privacy mode. In this mode, your client sends no identity proof to the Mostro node. Each transaction uses only the one-time key generated for that exchange, so the node has no way to link orders from the same user, providing the highest level of anonymity.

Since in full privacy mode there is no fixed key associated with you, it is not possible to build or keep a reputation: you neither give nor receive ratings, your reputation appears as 0 to your counterparts, and your trades cannot be restored on another device. You also cannot import a reputation.

In the Mostro App you switch between both modes under Account → Privacy; the choice is kept until you change it.

Privacy in User-to-User Communication

Communication between the buyer and seller during a transaction occurs directly from client to client through an end-to-end encrypted chat, integrated into the Mostro clients. Both clients derive a shared key using Elliptic Curve Diffie-Hellman (ECDH). Each message is encrypted with NIP-44 and signed by the sender's trade key, then wrapped in a kind-14 event addressed to that shared key. This "shared master key" is known only to the buyer and seller, ensuring that neither the Mostro node where they are transacting nor third parties can read or inject messages. Additionally, since each transaction generates new and unique keys, privacy remains intact even between transactions with the same counterparty.

In case of a dispute, this shared key provides an effective solution: either party can choose to voluntarily share it with the solver. With it, the solver can decrypt only the conversation of that specific transaction, accessing an immutable copy of the messages, which cannot be altered or deleted. This allows disputes to be resolved fairly and transparently, exposing any attempts at deception without compromising the default privacy of users and only revealing information when necessary and with consent.

Some nodes use Serbero, an automated dispute assistant. If you write to it during a dispute, your messages are processed by an automated service that the node's operator uses.

Other Details

  • Push notifications carry no content: they only tell your device that there is something to see in the app.
  • If you connect a wallet through Nostr Wallet Connect (NWC), its connection string stays on your device.
  • Importing your reputation from another source links your accounts on both sides. See Importing Your Reputation.

Account Backup and Restoration

Your identity on Mostro is based on a private key that clients automatically generate when you create your account. This key is represented as a 12-word phrase (seed phrase) that you must store securely.

Why Backup Matters

Without a backup of your 12-word phrase, you could lose:

  • Access to active trades: if you switch devices or reinstall the app during an exchange, you won't be able to continue the operation
  • Your reputation: the ratings you've accumulated are tied to your identity; without a backup, you'd start from scratch
  • History: you won't be able to recover information from previous trades

How to Back Up

In the Mostro App, go to Account → Secret Words and tap Show words. The app guides you in three steps: write the 12 words on paper, tap three of them to check you wrote them right, done. Until you do it, the app reminds you with a Secure your reputation banner.

The app does not include your keys in your phone's cloud backup or device transfer, so the 12 words are the only way to get your account back on a new device.

Other Mostro clients have their own way of displaying your 12-word phrase. Check their documentation.

The important things are:

  • Write down the 12 words in the correct order
  • Store them in a safe and private place
  • Do not share them with anyone
  • Do not store them in plain text on internet-connected devices

Restoring Your Account

If you need to switch devices, reinstall the app, or use a different client, you can restore your identity by importing your 12-word phrase.

When restoring:

  • You recover your identity and reputation
  • In the Mostro App, you can continue trades that were active (reputation mode only). mostro-cli cannot resume an in-flight trade from the 12 words alone: for that it needs its ~/.mcli/mcli.db file
  • You can access from any compatible Mostro client

In the Mostro App, go to Account → Import Mostro User and enter your 12 words. The app asks the node you use for your orders and trades and rebuilds them. Restoring works per node: when you switch to another node, the app restores what you have there too. Before importing, if the current user still has trades in progress, the app warns you that "This user still has sats in play".

If you used the old Mostro Mobile app, you can import the same 12 words into the new Mostro App: both use the same keys. Finish any open trade in the old app first.

Important: Full Privacy Mode

If you operate in full privacy mode, orders created in that mode cannot be recovered when restoring your account. Only orders created in reputation mode can be restored.

This is because in full privacy mode there is no fixed key associated with your identity, so Mostro cannot link those operations to your restored account.

Recommendations

  • Back up as soon as you create your account, before your first trade
  • Verify that you wrote the words correctly before you need them
  • Consider keeping more than one copy in different secure locations
  • Never share your phrase with anyone, not even Mostro support
  • If you value being able to recover active trades, use reputation mode

Is a Mostro Node Working?

Before you trade, or when something takes longer than usual, you can check the state of the main Mostro nodes on the public status page:

status.mostro.network

Every minute, each node publishes a signed health report on Nostr. The page reads those reports straight from the relays, checks them in your browser, and compares each node's Lightning node with public block explorers.

ColourMeaning
🟢 OperationalThe node reports itself healthy and passes the independent checks.
🟡 DegradedSomething is not fully right, or the node is in maintenance.
🔴 DownThe node reports a serious problem, its Lightning node is behind the chain, or it stopped reporting.
⚪ Not monitoredThe node is listed but not yet checked.

Under each node you can see the last 90 days. Green means the node is working as far as it can tell; it does not guarantee that every trade succeeds.

Maintenance

A node in maintenance does not accept new orders or takes, but trades that are already open can still be completed, cancelled or disputed. Operators turn it on for planned work. Nodes also turn it on by themselves when their Lightning node falls out of sync, and turn it off again when it recovers.

If your sats are late

If the node's own Lightning node has a problem, Mostro does not give up on your payment: it waits and pays automatically once the problem is solved, and that delay does not count as a failed payment on your side. If the node stays red for a long time, contact its operator (see Support and Contact).

Comparing nodes in the app

In the Mostro App, Settings → Network → Mostro Node shows each node's status, fee and deposit, and About → Connected node shows the limits, currencies and times of the node you use.

Support and Contact

Mostro is not a company but an Open Source project maintained by its community, so it does not have a technical support department. However, there is a community you can reach out to if needed.

If a trade is slow or a node does not answer, first check the node's state on status.mostro.network (see Is a Mostro Node Working?). Questions about a specific trade or dispute go to the operator of the node you used.

If you have any questions, you can ask in the Telegram groups:

We also have a group on Nostr.

Additionally, you can follow us on:

How to Contribute

Thank you for your interest in contributing to Mostro!
Mostro is not a company but an Open Source project, driven and maintained by its community, so any type of contribution is valuable and helpful to its users.

While we suggest some areas where you can collaborate, feel free to propose any improvement you think may benefit the project:

  • Documentation: Help improve the documentation so that more people can understand what Mostro is and how to use it.
  • Translations: If you are multilingual, you can translate Mostro's clients or contribute to the documentation in other languages.
  • Development: In the Mostro project you can find various repositories and programming languages. If you're unsure where to start, check out the "good first issue" lists to get involved.
  • Bug reporting: If you detect any errors or unexpected behavior, reporting them is greatly helpful. This contributes to improving the stability and quality of the project.
  • Improvement proposals: If you have ideas to enhance Mostro, we invite you to share them. Many key features have arisen thanks to suggestions from the community. You can propose your ideas in the support groups, or open an issue in the corresponding repository. If you believe it will spark significant discussion, then start a discussion in that repository.
  • Content creation: If you have skills in content creation, you can make video tutorials or written guides to help users make the most of Mostro.
  • Social media outreach: Sharing information about Mostro on social media helps increase its visibility and attract more people interested in contributing or using it.
  • Donations: If you prefer to financially support the development and maintenance of Mostro, you can make a donation to https://geyser.fund/project/mostro.

Thank you so much for your support!

Clients. How to use Mostro

To use Mostro, you need to access it through a specific client. Below, we will cover several of them, which will allow you to interact both with Mostrod and with your counterpart in an operation.

The available Mostro clients so far are:

  • Mostro App (operational, beta): the official app, for Android, iOS, Windows, macOS, Linux and the web.
  • Mostro-cli (operational): command line client.
  • MostriX (operational): TUI client, which operates in the terminal with an enhanced appearance, with a mode for dispute solvers.

The old Mostro Mobile app (version 1) is deprecated: use the new Mostro App. Dispute solvers also have Bosstro, an Android app for resolving disputes; it is not for trading.

Each client has particular features, so users can choose which one to use according to their interests and switch between them when they consider it convenient. The clients are responsible for creating, storing, and managing their users' Nostr keys. To learn how clients handle user privacy, read here.

Although some clients are already operational, they are under constant development, with new features being implemented, UX improvements, bug fixes, etc. You may encounter bugs; if this happens, please report them. Your feedback is very important.

Note: Two users using different Mostro clients can exchange sats; however, for direct communication between them, they must take into account what type of messages their respective clients accept. Clients must implement this peer-to-peer chat, but if a client has not yet implemented it, its users will not be able to view messages sent from a client that has implemented it. Similarly, this could occur with other functionalities. Developers of each client make their best effort to update them as soon as possible.

Since version 0.19.0, Mostro nodes speak only protocol v2. The current versions of the three clients above use it; older clients that still use NIP-59 gift wraps cannot trade on current nodes.

Mostro is a FOSS project, so anyone interested can create a client to interact with it. We encourage you to develop your own client or collaborate on the development of existing ones to enhance the experience of P2P Bitcoin exchanges without KYC on Nostr!

To learn more details about them, keep reading this documentation.

Mostro App

Mostro App is the official application for using Mostro. It is available for Android, iOS, Windows, macOS, Linux and the web. It is still in beta: you will see a Beta label in its menu.

Mostro App order book

Downloads

  • Android (7.0 or later): Zapstore or the APK on GitHub Releases (arm64-v8a for almost any phone, armeabi-v7a for old 32-bit ones).
  • iOS (14 or later): there is no App Store version yet. The release includes an .ipa file you can install with AltStore, Sideloadly or Xcode. Installs signed with a free Apple ID expire after 7 days, and push notifications do not work in them.
  • Windows, macOS and Linux: GitHub Releases. The builds are not signed by Apple or Microsoft yet, so the first launch needs one extra step (on Windows, More info → Run anyway; on macOS, remove the quarantine flag as the release notes explain).
  • Web: mostro.network/app. It always runs the latest development build, and you can install it as an app from the browser.

Each release includes a SHA256SUMS.txt file to verify your download. Download only from these official sources.

The new app replaces the old Mostro Mobile (version 1), and both can be installed side by side. To move over, finish your open trades in the old app and import your 12 words in the new one (see Account Backup and Restoration).

Getting Started

  1. Download the app from an official source.
  2. When you open it for the first time, your identity is created automatically. A short walkthrough explains how Mostro works.
  3. Choose the Mostro node you want to trade on (Use this node), or skip to use the default one.
  4. Back up your 12 words before trading: Account → Secret Words → Show words.
  5. Set up your Lightning address or connect a wallet with NWC (optional but recommended).
  6. Keep push notifications enabled.
  7. Ready to trade.

Key Features

Identity and Privacy

  • Automatic account creation with a 12-word phrase
  • Guided backup and account restoration on any device (Account → Import Mostro User)
  • Recovery of active trades upon restoration, per node (reputation mode only)
  • Reputation mode or full privacy mode, under Account → Privacy
  • Your own reputation on the node you use, under Account
  • Import your reputation from @lnp2pBot or another Mostro node, under Settings → Network → Reputation

Trading

  • Order book with Buy BTC and Sell BTC tabs, filters (currency, payment method, rating, premium) and sorting (newest, best premium, best reputation)
  • Create buy and sell orders, with a fixed amount or a range
  • Market price with premium or discount, or a fixed price
  • Only the currencies the node accepts are offered, including stablecoins and bitcoin on other networks where the node enables them
  • Take orders; for range orders you enter the amount
  • Share an order as a link or a QR code
  • Anti-abuse deposit on nodes that use it, and Claim your share if your counterparty loses theirs
  • Countdown for each step of the trade
  • My Trades groups your trades into "Needs your action", "In progress" and "Closed"

Payments

  • Lightning Address (Settings → Payments): when you take a sell order, your sats go to it by default, and you can still choose another address or an invoice for that trade. For your own buy orders, the invoice screen is filled in with it and you confirm.
  • Nostr Wallet Connect (NWC) (Settings → Payments → NWC Wallet): connect your wallet to pay hold invoices and deposits with Pay with Wallet, and let it create your invoices automatically. The connection string stays on your device.

Communication

  • End-to-end encrypted chat with your counterparty, one per trade
  • Send encrypted photos and PDF files in the chat
  • React to and copy messages; messages cannot be deleted or altered
  • The chat stays open for an hour after the trade ends, then becomes read-only

Disputes

  • Open disputes directly from the trade screen; follow them under Chat → Disputes
  • Chat with the solver and attach evidence
  • Share the chat key with the resolver in one tap, only for that trade
  • Messages from Serbero, the automated assistant some nodes use, are labelled as such

Notifications

  • Push notifications for your trades, messages, payments and disputes, configurable one by one under Settings → Application → Push Notifications
  • Important to keep them enabled so you don't miss the timing of a trade
  • Notifications carry no content: they only tell your device there is something to see
  • Push works on Android and on official iOS builds; the desktop and web versions show notifications only inside the app
  • The bell icon also shows signed announcements from the Mostro project

Multiple Nodes

  • A list of trusted community nodes, with each node's status, fee and deposit (Settings → Network → Mostro Node)
  • Add your own node by its public key. Verify the key with the operator: a fake node can see your orders.
  • A trade stays on the node where it started; My Trades shows the trades of the node you have selected
  • You still get notifications from trades on other nodes
  • About shows the limits, fee, deposit, currencies, times and price sources of the node you use

Multi-language

  • Available in English, Spanish, French, German, Italian, Dutch and Portuguese

Help

  • Settings → Help → Log Report lets you see and share the app's logs when reporting a problem
  • About → User guide opens this documentation

More Information

Mostro CLI

Mostro CLI is a Mostro client with a command-line interface. It is primarily used by developers and advanced users to test the latest Mostro features and to automate operations.

mostro-cli

Installation

You can install Mostro CLI directly from crates.io:

cargo install mostro-cli

Or build it manually:

git clone https://github.com/MostroP2P/mostro-cli.git
cd mostro-cli
cargo build --release

Requirements: Rust 1.97 or newer. On Debian/Ubuntu you also need sudo apt install -y cmake build-essential pkg-config libssl-dev.

Pre-built binaries for Linux, FreeBSD and Windows are also available on GitHub Releases (there is no macOS binary; use cargo install). Check the download against the release's manifest.txt:

sed 's#  artifact-[^/]*/#  #' manifest.txt | sha256sum -c --ignore-missing

Features

  • Create buy and sell orders
  • Take orders from the order book
  • Support for range orders (min-max)
  • Create buy orders with Lightning Address
  • Chat with your counterparty (Mostro protocol v2, NIP-44 encrypted)
  • Identity management from a 12-word phrase (NIP-06), stored in ~/.mcli/mcli.db: back it up
  • Full dispute flow, including the chat with the solver (disputechat)
  • Claim your share of a forfeited anti-abuse bond (addbondinvoice)
  • Restore your identity and list the orders and disputes Mostro holds for you (restore)
  • Administration commands for Mostro operators and solvers

Mostro CLI speaks only protocol v2 (since version 0.16.2), like current Mostro nodes. It does not yet support importing your reputation, and it can only create stablecoin and other-network bitcoin orders at a fixed price.

Basic Usage

# Set environment variables (replace the variables as needed)
export MOSTRO_PUBKEY=<the npub of the Mostro node you want to use>
export RELAYS='wss://relay.mostro.network,wss://mostro-p2p.tech'

# List available orders
mostro-cli listorders

# Create a buy order
mostro-cli neworder -k buy -c ves -f 1000 -m "face to face"

# Create a sell order with a range
mostro-cli neworder -k sell -c ars -f 1000-10000 -m "bank transfer"

# Cancel a pending order
mostro-cli cancel -o <order-id>

# Restore session
mostro-cli restore

Mostro CLI reads no configuration file: set the node and relays in the environment, and put global flags (-m, -r, -p, -t, -v) before the command. It does not stay connected, so run mostro-cli getdm after each step to see Mostro's answers.

To see all available commands:

mostro-cli help

More Information

Mostro CLI is a FOSS project. You can visit its GitHub repository to learn more about its development, report bugs, or propose improvements.

MostriX

MostriX is a Mostro client with a TUI (Terminal User Interface). It has two modes:

  • User mode, to trade: order book with filters and sorting, create and take orders, chat with your counterparty, cooperative cancellation, rating, and disputes with the solver.
  • Admin mode, for dispute solvers and node operators: take disputes, chat with both parties, settle or cancel, slash anti-abuse bonds and register solvers.

mostrix

Note: MostriX is still evolving. If you find a bug, please report it.

Installation

Pre-built binaries for Linux, macOS, FreeBSD and Windows are available on GitHub Releases. Releases are signed: import the maintainers' keys from the repository's keys/ folder, check manifest.txt with gpg --verify manifest.txt.sig.arkanoider manifest.txt, and then the binary's hash:

sed 's#  artifact-[^/]*/#  #' manifest.txt | sha256sum -c --ignore-missing
# macOS: replace sha256sum -c with shasum -a 256 -c

Or build it from source (requires Rust 1.97 or newer):

git clone https://github.com/MostroP2P/mostrix.git
cd mostrix
cargo run --release

Features

  • Order book with filters and sorting
  • Create buy and sell orders, including range orders and full privacy orders
  • Take orders (buy and sell), with your Lightning address
  • Confirm fiat sent and release sats
  • Add a new invoice if a payment fails
  • End-to-end encrypted chat with your counterparty, with file attachments
  • Cooperative cancellation and rating
  • Open a dispute and chat with the solver; share the trade's chat key with them
  • Your own reputation on the status bar
  • Restore your session from the node
  • Automatic 12-word seed generation and key management according to the Mostro protocol
  • Admin mode for solvers: take disputes, chat with both parties, settle, cancel and slash bonds, read the reports of Serbero, and receive Telegram alerts through mostro-watchdog

MostriX speaks only Mostro protocol v2 (since version 0.3.1). It does not yet support importing your reputation.

Configuration

On first run, MostriX creates ~/.mostrix/ with your new 12-word seed and a settings.toml file, and shows you the 12 words: write them down. Most options can be changed from the Settings tab (press Shift+H there for help on each one).

Main parameters of settings.toml:

  • mostro_pubkey: public key of the Mostro node (or Settings → Select Mostro Instance)
  • nsec_privkey: your trader identity, derived from the seed; don't edit it
  • relays: list of relays to connect to
  • currencies_filter: currencies to show; empty shows all
  • user_mode: user or admin (or Settings → Switch Mode)
  • ln_address: your Lightning address
  • admin_privkey: for solvers, the key registered as solver on the node; for the node operator, the Mostro daemon's own private key (the one behind mostro_pubkey), which is needed to add solvers

Use the arrow keys to move between tabs, Ctrl+H for context help, and the Exit tab to quit.

More Information

MostriX is a FOSS project. You can visit its GitHub repository to learn more about its development, report bugs, or propose improvements. Node operators can find more about its admin mode in the guide to running a Mostro node.