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:

    • Log in with a Nostr key; some Mostro clients will create one for you!
    • 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).
    • 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.

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

Continue reading this documentation to understand what Mostro is, how it works, and how you can use it.

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 instances 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.

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 should automatically generate a new private key each time you perform a bitcoin exchange, without the need for additional setup or interventions on your part.

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 instances 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 instance: 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 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 the fiat sent button 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 the release button 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 instance 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.

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 a NIP-59 message to Mostrod with the order details. 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 NIP-59 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 NIP-59 message requesting an invoice for 5000 sats. Bob sends the invoice to Mostrod in a NIP-59 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 NIP-59 message with the hold invoice generated by the associated LN node. If Alice pays within the 15 minutes, Mostro sends her a NIP-59 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 encrypted messages using the NIP-44 algorithm, and Mostrod does not receive any of those messages. When Bob makes the fiat payment and presses fiat sent in his client, he sends a NIP-59 message with the fiat-sent action to Mostrod, who in turn sends a NIP-59 message to Alice with that same action, and her client displays a release button to release the sats 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 the release button in her client, she sends a NIP-59 message to Mostrod indicating that the sats should be released to Bob. Then, the LN node associated with that instance of Mostrod 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 NIP-59 message to Alice and Bob, requesting that they rate their counterparty, who send back their rating through a NIP-59 message.

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

Accepted Currencies and Payment Methods

Since Mostro is a peer-to-peer (P2P) exchange, it is technically available to anyone who wants to use it, as long as there is a counterparty interested in making the exchange. You can post or take offers in any currency and with any payment method.

Mostro uses yadio.io as a reference for currency prices, which allows the exchange of over 90 currencies listed on that platform. If your currency does not appear on yadio.io, you can request them to add it. However, if this is not possible, you can still use Mostro to exchange bitcoin; you'll just need to create an order by setting a fixed amount of sats in exchange for a fixed amount of your currency.

Exchange Fees and Limits

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

The Mostro instance currently active on mainnet (npub1ykvsmrmw2hk7jgxgy64zr8tfkx4nnjhq9eyfxdlg3caha3ph0skq6jr3z0) charges a 0.3% fee to both the buyer and the seller for each transaction. Additionally, it allows exchanges ranging from 100 sats to 20000 sats per operation.

Can I cancel an order?

If you created an order and it hasn't been taken yet, you can cancel it.

If the order has already been taken, or if you have taken an order and decide not to proceed, you will need to initiate a cooperative cancellation with your counterparty. If both parties agree, Mostro will cancel the hold invoice paid by the seller, and the sats will be returned to them.

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", "on 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 the 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 to 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.

The hold invoices generated by the Lightning Network node of the Mostro currently active on mainnet (npub1ykvsmrmw2hk7jgxgy64zr8tfkx4nnjhq9eyfxdlg3caha3ph0skq6jr3z0) have an approximate validity period of 24 hours.

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 instance operator can set their own time frames for each step of the exchange, fostering competition among Mostro instances and allowing users to select the one that best fits their needs.

Below are the specific time frames for the Mostro instance currently active on mainnet (npub1ykvsmrmw2hk7jgxgy64zr8tfkx4nnjhq9eyfxdlg3caha3ph0skq6jr3z0). As more Mostro instances become available, this information should be accessible to users so they can choose their preferred one.

When an offer is posted, it remains in the order book for 23 hours. If no one takes it within that time, it will be automatically deleted.

Once someone takes an offer, they have up to 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 up to 15 minutes 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 the expiration of the hold invoice provided by Mostro to finalize the exchange. For the Mostro instance npub1ykvsmrmw2hk7jgxgy64zr8tfkx4nnjhq9eyfxdlg3caha3ph0skq6jr3z0, this period is approximately 24 hours. During this time, the buyer must send the fiat payment, and the seller must release the sats upon confirming receipt of the fiat. If this time frame is exceeded, the order will expire, and the sats will be returned to the original wallet without Mostro being able to intervene. For this reason, it is recommended to only use instant fiat payment methods.

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.

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.

When you start a dispute, you will be attended to by the administrator of the Mostro instance you are using, or by a person designated by that administrator (solver). Upon opening the dispute, Mostro will provide you with a unique token number, and your counterparty will receive a different one. Both tokens will be revealed to the administrator handling the dispute. When the administrator contacts you and your counterparty, they will tell you your token, allowing you to verify that they are the designated person and ensuring they are not an impostor.

There is no standard method for resolving disputes across all Mostro instances. Each administrator can decide how to manage disputes generated in their instance 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.

It is important to note that disputes are not automatically opened in any case. The users involved must initiate them 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, as time continues to run from when the order is 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 it. You can read more about time frames here.

Privacy in Mostro

The communication between Mostrod and users is carried out through the Mostro clients using NIP-59 messages. These messages have their content and the sender’s public key encrypted and "wrapped" by an ephemeral key, preventing the identity of whoever is interacting with Mostro from being publicly revealed. To enhance privacy, the Mostro clients should automatically generate a new private key for users for each order they take or create. Thus, when Mostro sends NIP-59 messages to users, the generated event will display a public key that will only be used for that transaction, guaranteeing a new identity for each exchange and preventing buy and sell transactions from being associated with a single person.

The Mostro clients will not share users' private keys with any Mostro instance, and consequently with its administrator, under any circumstances.

The communication between the buyer and seller during a transaction is client-to-client, using messages encrypted with the NIP-44 algorithm. Although this reveals the public keys involved in the communication, users always must use a new Nostr identity for each transaction, ensuring their privacy. Additionally, these messages are not sent to Mostrod, meaning that it does not access or collect users' personal information.

Moreover, NIP-44 allows the client to create a conversation key associated with the key pair of the two users involved in a transaction, to which only they have access. This conversation key has a copy of the conversation between both users, and in case of a dispute, if the users wish, they can provide it to the administrator handling their case as evidence of the facts.

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 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 web (operational): web interface client.
  • Mostro-cli (operational): command line client.
  • Mostrui (in development): TUI client, which operates in the terminal with an enhanced appearance.
  • Mostro mobile (in development): mobile application.

Each client has particular features, so users can choose which one to use based on their preferences and switch between them as they see fit. 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 should consider what type of messages their respective clients accept. For this type of communication, all Mostro clients must use messages encrypted with the NIP-44 algorithm. However, if a client has not yet implemented it, its users will not be able to view messages sent from a client that has. A similar situation may occur with other functionalities. Developers of each client make their best effort to update them as soon as possible.

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-web

Mostro-web is a Mostro client with a web interface that you can access via: https://app.mostro.network and https://mostro.bilthon.dev.

mostro-web

The interface is very intuitive, so if you're not a technical user, this is currently the best way to interact with Mostro. It is compatible with browser extensions that support the NIP-07 standard, but you can also generate new keys whenever you wish.

Tip: If you use it from a mobile device, we recommend enabling desktop mode in your browser to improve the user experience, especially when viewing action buttons.

Mostro-web is a FOSS project; you can visit its GitHub repository to learn more about its development, report bugs, or propose improvements. Contributions are welcome!

Mostro-cli

Mostro-cli is a Mostro client with a command-line interface, primarily used by developers and advanced users to test the latest functionalities of Mostrod.

mostro-cli

Mostro-cli is a FOSS project; you can visit its GitHub repository to learn more about its development, report bugs, or propose improvements. Contributions are welcome!

Mostrui

Mostrui is a Mostro client with a TUI (Terminal User Interface) that offers an enhanced experience in the terminal. It is still in development but is progressing quickly to provide users with a friendly and intuitive experience without needing to write commands, making it an ideal option for both advanced and beginner users.

mostrui

Mostrui is a FOSS project; you can visit its GitHub repository to learn more about its development, report bugs, or propose improvements. Contributions are welcome!

Mostro mobile

Mostro Mobile is a mobile client for Mostro, currently in development. Its goal is to offer a very intuitive interface designed for all types of users, with a special focus on those with less technical knowledge. The application is designed so that anyone can buy and sell bitcoin P2P without KYC, without even realizing they are using Nostr. The idea is that even grandmothers can use it!

mostro-mobile

Mostro mobile is a FOSS project; you can visit its GitHub repository to learn more about its development, report bugs, or propose improvements. Contributions are welcome!