-
Notifications
You must be signed in to change notification settings - Fork 2
/
print.html
433 lines (392 loc) · 48.5 KB
/
print.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
<!DOCTYPE HTML>
<html lang="en" class="light" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Mostro-FAQ</title>
<meta name="robots" content="noindex">
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body class="sidebar-visible no-js">
<div id="body-container">
<!-- Provide site root to javascript -->
<script>
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('light')
html.classList.add(theme);
var body = document.querySelector('body');
body.classList.remove('no-js')
body.classList.add('js');
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var body = document.querySelector('body');
var sidebar = null;
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
body.classList.remove('sidebar-visible');
body.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded affix "><a href="index.html">Quick Start 🚀</a></li><li class="chapter-item expanded "><a href="faq.html"><strong aria-hidden="true">1.</strong> Frequently Asked Questions</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="what-is-mostro.html"><strong aria-hidden="true">1.1.</strong> What is Mostro?</a></li><li class="chapter-item expanded "><a href="need-it.html"><strong aria-hidden="true">1.2.</strong> What do I need to use Mostro?</a></li><li class="chapter-item expanded "><a href="no-kyc.html"><strong aria-hidden="true">1.3.</strong> Do I need to register or do KYC?</a></li><li class="chapter-item expanded "><a href="how-it-works.html"><strong aria-hidden="true">1.4.</strong> How does Mostro work?</a></li><li class="chapter-item expanded "><a href="currencies-payment-methods.html"><strong aria-hidden="true">1.5.</strong> Accepted Currencies and Payment Methods</a></li><li class="chapter-item expanded "><a href="fees-and-limits.html"><strong aria-hidden="true">1.6.</strong> Exchange Fees and Limits</a></li><li class="chapter-item expanded "><a href="cancelling-an-order.html"><strong aria-hidden="true">1.7.</strong> Can I cancel an order?</a></li><li class="chapter-item expanded "><a href="hold-invoice.html"><strong aria-hidden="true">1.8.</strong> Hold Invoices: Security of Exchanges on Mostro</a></li><li class="chapter-item expanded "><a href="times.html"><strong aria-hidden="true">1.9.</strong> Exchange Times</a></li><li class="chapter-item expanded "><a href="reputation.html"><strong aria-hidden="true">1.10.</strong> Reputation System</a></li><li class="chapter-item expanded "><a href="disputes.html"><strong aria-hidden="true">1.11.</strong> Dispute Management</a></li><li class="chapter-item expanded "><a href="privacy.html"><strong aria-hidden="true">1.12.</strong> Privacy in Mostro</a></li><li class="chapter-item expanded "><a href="support-and-contacts.html"><strong aria-hidden="true">1.13.</strong> Support and Contact</a></li><li class="chapter-item expanded "><a href="contribute.html"><strong aria-hidden="true">1.14.</strong> How to Contribute</a></li></ol></li><li class="chapter-item expanded "><a href="clients.html"><strong aria-hidden="true">2.</strong> Clients. How to use Mostro</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="mostro-web.html"><strong aria-hidden="true">2.1.</strong> Mostro-web</a></li><li class="chapter-item expanded "><a href="mostro-cli.html"><strong aria-hidden="true">2.2.</strong> Mostro-cli</a></li><li class="chapter-item expanded "><a href="mostrui.html"><strong aria-hidden="true">2.3.</strong> Mostrui</a></li><li class="chapter-item expanded "><a href="mostro-mobile.html"><strong aria-hidden="true">2.4.</strong> Mostro mobile</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<!-- Track and set sidebar scroll position -->
<script>
var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox');
sidebarScrollbox.addEventListener('click', function(e) {
if (e.target.tagName === 'A') {
sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop);
}
}, { passive: true });
var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
sessionStorage.removeItem('sidebar-scroll');
if (sidebarScrollTop) {
// preserve sidebar scroll position when navigating via links within sidebar
sidebarScrollbox.scrollTop = sidebarScrollTop;
} else {
// scroll sidebar to current active section when navigating via "next/previous chapter" buttons
var activeSection = document.querySelector('#sidebar .active');
if (activeSection) {
activeSection.scrollIntoView({ block: 'center' });
}
}
</script>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Mostro-FAQ</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="quick-start-"><a class="header" href="#quick-start-">Quick Start 🚀</a></h1>
<p>On this site, you'll find information on how to use <a href="https://mostro.network/">Mostro</a>, a peer-to-peer (P2P) bitcoin exchange platform on the Lightning Network for any local currency. It operates on <a href="https://nostr.com/">Nostr</a> and does not require KYC procedures.</p>
<h2 id="quick-start-guide-"><a class="header" href="#quick-start-guide-">Quick Start Guide 🚀</a></h2>
<ol>
<li>
<p><strong>Have a Lightning Network-compatible wallet.</strong></p>
</li>
<li>
<p><strong>Open any <a href="./clients.html">Mostro client</a>.</strong></p>
</li>
<li>
<p><strong>Follow the instructions of the <a href="./clients.html">client</a>:</strong></p>
<ul>
<li>Log in with a Nostr key; some <a href="./clients.html">Mostro clients</a> will create one for you!</li>
<li>Find or create bitcoin buy/sell offers.</li>
<li>Wait for an interested user.</li>
<li>If you're buying sats, provide the invoice where you will receive the sats.</li>
<li>If you're selling sats, pay the <a href="./hold-invoice.html">hold invoice</a> (the sats will remain locked in your wallet until the end of the process).</li>
<li>Talk to your counterparty. Agree on how to exchange the fiat. This is a <a href="./privacy.html">private</a> process.</li>
<li>Complete the exchange.</li>
<li>If your counterparty does not respond, start a <a href="./disputes.html">dispute</a>.</li>
<li><a href="./reputation.html">Rate</a> your counterparty. You will also be <a href="./reputation.html">rated</a>.</li>
</ul>
</li>
</ol>
<h2 id="recommendations"><a class="header" href="#recommendations">Recommendations</a></h2>
<ul>
<li>
<p>If you have any questions not answered in this documentation, feel free to ask <a href="./support-and-contacts.html">our community</a>.</p>
</li>
<li>
<p>Report bugs or suggest improvements in our <a href="https://github.com/MostroP2P">GitHub repositories</a>.</p>
</li>
<li>
<p>Follow us on <a href="https://njump.me/nprofile1qqsdhc93hklp988r3km4844fjln298nf8t7s92sar7dsqha88ph9cfspz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsz8thwden5te0dehhxarj9e3xjarrda5kuetj9eek7cmfv9kz7qg4waehxw309aex2mrp0yhxummnw3ezucn89uv7r8lk">Nostr</a> and <a href="https://x.com/MostroP2P">X</a> to keep up with major announcements.</p>
</li>
</ul>
<div style="break-before: page; page-break-before: always;"></div><h1 id="frequently-asked-questions"><a class="header" href="#frequently-asked-questions">Frequently Asked Questions</a></h1>
<p>Continue reading this documentation to understand what Mostro is, how it works, and how you can use it.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="what-is-mostro"><a class="header" href="#what-is-mostro">What is Mostro?</a></h1>
<p>Mostro is a peer-to-peer (P2P) bitcoin exchange platform on the Lightning Network for any local currency, operating on the <a href="https://nostr.com/">Nostr</a> protocol and not requiring Know Your Customer (KYC) procedures.</p>
<p>It uses <a href="./hold-invoice.html">hold invoices</a> 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.</p>
<p>By operating on <a href="https://nostr.com/">Nostr</a>, 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 <a href="https://github.com/MostroP2P/mostro">Mostro instances</a> become active, combined with Nostr's inherent decentralization, it will become increasingly difficult to stop P2P bitcoin exchanges without KYC.</p>
<h2 id="origin-of-mostro"><a class="header" href="#origin-of-mostro">Origin of Mostro</a></h2>
<p>Mostro is inspired by <a href="https://github.com/lnp2pBot/bot">@lnp2pBot</a>, 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.</p>
<p>Although the <a href="https://github.com/lnp2pBot/bot">@lnp2pBot</a> 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, <a href="https://nostr.com/">Nostr</a> 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.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="what-do-i-need-to-use-mostro"><a class="header" href="#what-do-i-need-to-use-mostro">What do I need to use Mostro?</a></h1>
<p>To use Mostro, all you need is a Lightning Network-compatible wallet.</p>
<p>You don't have to be an expert in <a href="https://nostr.com/">Nostr</a>. 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.</p>
<p>To perform bitcoin exchanges, you'll use a <a href="./clients.html">Mostro client</a>. 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 <a href="./privacy.html">privacy</a> 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.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="do-i-need-to-register-or-do-kyc"><a class="header" href="#do-i-need-to-register-or-do-kyc">Do I need to register or do KYC?</a></h1>
<p>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 <a href="./privacy.html">here</a>.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="how-does-mostro-work"><a class="header" href="#how-does-mostro-work">How does Mostro work?</a></h1>
<p>To understand how Mostro works, it is important to know its components:</p>
<ul>
<li>
<p><a href="https://github.com/MostroP2P/mostro">Mostro daemon (Mostrod)</a>: 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.</p>
</li>
<li>
<p>Lightning Network node associated with the Mostrod instance: Creates and manages the <a href="./hold-invoice.html">hold invoices</a> that sellers must pay and makes payments for the invoices provided by buyers.</p>
</li>
<li>
<p><a href="./clients.html">Mostro clients</a>: 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.</p>
</li>
</ul>
<p>The following diagram summarizes how Mostrod, the seller (via a Mostro client), and the LN node interact:<br />
<img src="./assets/images/order-flow.png" alt="order-flow" /></p>
<h2 id="bitcoin-sale-flow-on-mostro"><a class="header" href="#bitcoin-sale-flow-on-mostro">Bitcoin Sale Flow on Mostro</a></h2>
<ul>
<li><strong>Seller:</strong> Alice</li>
<li><strong>Buyer:</strong> Bob</li>
</ul>
<ol>
<li>
<p><strong>Order creation:</strong><br />
Alice accesses a <a href="./clients.html">Mostro client</a> 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 <a href="./clients.html">client</a> 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 <a href="times.html">24 hours</a>, it will be automatically deleted.</p>
</li>
<li>
<p><strong>Order taken by the buyer:</strong><br />
Bob, interested in buying sats, accesses a <a href="./clients.html">Mostro client</a> (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 <a href="times.html">15 minutes</a>. Bob generates the invoice in his LN wallet and sends it to Mostro, who instructs him to wait <a href="times.html">15 minutes</a> for his counterparty to respond.</p>
</li>
<li>
<p><strong>Payment and communication between parties:</strong><br />
Alice receives a message from Mostro notifying her that someone has taken her offer and that she must pay a <a href="./hold-invoice.html">hold invoice</a> for 5000 sats within <a href="times.html">15 minutes</a>. 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 <em>fiat sent</em> button in his Mostro client. Alice receives a notification to verify receipt of the fiat and then release the sats to Bob.</p>
</li>
<li>
<p><strong>Sats release:</strong><br />
When Alice confirms she received the 3 USD, she presses the <em>release</em> 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.</p>
</li>
</ol>
<p>When Mostro connects both users, the time they have to complete the exchange is limited by the duration of the <a href="./hold-invoice.html">hold invoice</a> provided by the Mostro instance they are using. Users must respect this time frame; for more information, see <a href="times.html">here</a>.</p>
<p>If during the process, Alice and Bob decide not to proceed with the exchange, they can <a href="./cancelling-an-order.html">cancel</a> the order cooperatively. If either party attempts to cancel arbitrarily or defraud the other, the other party can open a <a href="./disputes.html">dispute</a>.</p>
<blockquote>
<p><strong>Note:</strong> In this example, it is assumed that Mostro’s fees are 0. For more information on fees, see <a href="./fees-and-limits.html">Exchange Fees and Limits</a>.</p>
</blockquote>
<h3 id="technical-explanation"><a class="header" href="#technical-explanation">Technical Explanation</a></h3>
<ol>
<li>
<p><strong>Alice creates the order:</strong><br />
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’ <a href="./privacy.html">privacy</a>). Using that key, Alice sends a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> message to Mostrod with the order details. Then, Mostrod publishes an <a href="https://github.com/nostr-protocol/nips/blob/master/01.md#kinds">addressable event</a> of type 38383, with the order details and its status: <code>pending</code>. Mostro clients monitor these events and display those orders with <code>pending</code> status in their order books.</p>
</li>
<li>
<p><strong>Bob takes the order:</strong><br />
When Bob takes the order, his Mostro client automatically generates a new Nostr private key for this order, then sends a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</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 <code>waiting-buyer-invoice</code>, which removes the order from all clients' order books as it is no longer <code>pending</code>. Mostrod sends Bob a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> message requesting an invoice for 5000 sats. Bob sends the invoice to Mostrod in a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> message, and then Mostrod publishes an event 38383 for that order, this time with the status <code>waiting-payment</code>.</p>
</li>
<li>
<p><strong>Alice pays the hold invoice:</strong><br />
Mostrod sends Alice a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> message with the <a href="./hold-invoice.html">hold invoice</a> generated by the associated LN node. If Alice pays within the 15 minutes, Mostro sends her a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</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 <code>active</code>. Now, Alice and Bob can communicate directly through encrypted messages using the <a href="https://github.com/nostr-protocol/nips/blob/master/44.md">NIP-44</a> algorithm, and Mostrod does not receive any of those messages. When Bob makes the fiat payment and presses <em>fiat sent</em> in his client, he sends a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> message with the <code>fiat-sent</code> action to Mostrod, who in turn sends a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> message to Alice with that same action, and her client displays a <em>release</em> button to release the sats if she has received the payment. Mostrod also publishes an event 38383 for that order with the status <code>fiat-sent</code>.</p>
</li>
<li>
<p><strong>Alice releases the sats:</strong><br />
When Alice presses the <em>release</em> button in her client, she sends a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> 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 <a href="./hold-invoice.html">hold invoice</a> and pays the invoice provided by Bob. At the end of the process, Mostrod publishes an event 38383 for that order with the status <code>success</code> and sends a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> message to Alice and Bob, requesting that they rate their counterparty, who send back their rating through a <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> message.</p>
</li>
</ol>
<p>For more details on the communication between Mostrod and its clients, you can read <a href="https://mostro.network/messages">here</a>.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="accepted-currencies-and-payment-methods"><a class="header" href="#accepted-currencies-and-payment-methods">Accepted Currencies and Payment Methods</a></h1>
<p>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.</p>
<p>Mostro uses <a href="https://yadio.io/">yadio.io</a> 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 <a href="https://yadio.io/">yadio.io</a>, 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.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="exchange-fees-and-limits"><a class="header" href="#exchange-fees-and-limits">Exchange Fees and Limits</a></h1>
<p>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.</p>
<p>The Mostro node currently active on mainnet (<code>npub1ykvsmrmw2hk7jgxgy64zr8tfkx4nnjhq9eyfxdlg3caha3ph0skq6jr3z0</code>) 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.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="can-i-cancel-an-order"><a class="header" href="#can-i-cancel-an-order">Can I cancel an order?</a></h1>
<p>If you created an order and it hasn't been taken yet, you can cancel it.</p>
<p>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 <a href="./hold-invoice.html">hold invoice</a> paid by the seller, and the sats will be returned to them.</p>
<p>In case your counterparty does not want to cancel, you can initiate a <a href="./disputes.html">dispute</a>.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="hold-invoices-security-of-exchanges-on-mostro"><a class="header" href="#hold-invoices-security-of-exchanges-on-mostro">Hold Invoices: Security of Exchanges on Mostro</a></h1>
<p>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.</p>
<p>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".</p>
<p>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 <a href="./fees-and-limits.html">fee</a> 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.</p>
<p>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.</p>
<p>The hold invoice payment may also be settled if users enter a <a href="./disputes.html">dispute</a> 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 <a href="./cancelling-an-order.html">cancellation</a> is made, or if the validity time of the hold invoice, which is limited, is exceeded.</p>
<p>The hold invoices generated by the Lightning Network node of the Mostro currently active on mainnet (<code>npub1ykvsmrmw2hk7jgxgy64zr8tfkx4nnjhq9eyfxdlg3caha3ph0skq6jr3z0</code>) have an approximate validity period of 24 hours.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="exchange-times"><a class="header" href="#exchange-times">Exchange Times</a></h1>
<p>Mostro is designed for bitcoin-to-fiat exchanges to be fast, so it is recommended to use instant fiat payment methods.</p>
<p>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.</p>
<p>Below are the specific time frames for the Mostro instance currently active on mainnet (<code>npub1ykvsmrmw2hk7jgxgy64zr8tfkx4nnjhq9eyfxdlg3caha3ph0skq6jr3z0</code>). As more Mostro instances become available, this information should be accessible to users so they can choose their preferred one.</p>
<p>When an offer is posted, it remains in the order book for <em>23 hours</em>. If no one takes it within that time, it will be automatically deleted.</p>
<p>Once someone takes an offer, they have up to <em>15 minutes</em> 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 <em>15 minutes</em> 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.</p>
<p>After the seller pays the hold invoice and the buyer provides their invoice, they have until the expiration of the <a href="./hold-invoice.html">hold invoice</a> provided by Mostro to finalize the exchange. For the Mostro instance <code>npub1ykvsmrmw2hk7jgxgy64zr8tfkx4nnjhq9eyfxdlg3caha3ph0skq6jr3z0</code>, this period is approximately <em>24 hours</em>. 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.</p>
<p>Within this validity period, users can successfully complete the exchange, <a href="./cancelling-an-order.html">cancel it</a> cooperatively, or open a <a href="./disputes.html">dispute</a>. After the <a href="./hold-invoice.html">hold invoice</a> expires, Mostro has no ability to intervene in that order.</p>
<p>If both participants in a transaction are online and use instant fiat payment methods, the transactions can be completed almost instantly.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="reputation-system"><a class="header" href="#reputation-system">Reputation System</a></h1>
<p>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.</p>
<p>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.<br />
This calculation is based on: <a href="https://math.stackexchange.com/questions/2148877/iterative-calculation-of-mean-and-standard-deviation">https://math.stackexchange.com/questions/2148877/iterative-calculation-of-mean-and-standard-deviation</a>.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="dispute-management"><a class="header" href="#dispute-management">Dispute Management</a></h1>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>It is important to note that disputes are not automatically opened in any case. The users involved must initiate them before the <a href="./hold-invoice.html">hold invoice</a> 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 <a href="./times.html">here</a>.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="privacy-in-mostro"><a class="header" href="#privacy-in-mostro">Privacy in Mostro</a></h1>
<p>The communication between Mostrod and users is carried out through the <a href="./clients.html">Mostro clients</a> using <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> 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 <a href="./clients.html">Mostro clients</a> should automatically generate a new private key for users for each order they take or create. Thus, when Mostro sends <a href="https://github.com/nostr-protocol/nips/blob/master/59.md">NIP-59</a> 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.</p>
<p>The <a href="./clients.html">Mostro clients</a> will not share users' private keys with any Mostro instance, and consequently with its administrator, under any circumstances.</p>
<p>The communication between the buyer and seller during a transaction is client-to-client, using messages encrypted with the <a href="https://github.com/nostr-protocol/nips/blob/master/44.md">NIP-44</a> 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.</p>
<p>Moreover, <a href="https://github.com/nostr-protocol/nips/blob/master/44.md">NIP-44</a> allows the client to create a <em>conversation key</em> associated with the key pair of the two users involved in a transaction, to which only they have access. This <em>conversation key</em> have a copy of the conversation between both users, and in case of a <a href="./disputes.html">dispute</a>, if the users wish, they can provide it to the administrator handling their case as evidence of the facts.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="support-and-contact"><a class="header" href="#support-and-contact">Support and Contact</a></h1>
<p>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.</p>
<p>If you have any questions, you can ask in the Telegram groups:</p>
<ul>
<li>Mostro community: <a href="https://t.me/MostroP2P">https://t.me/MostroP2P</a></li>
<li>Mostro devs: <a href="https://t.me/mostro_dev">https://t.me/mostro_dev</a></li>
</ul>
<p>We also have a <a href="https://www.nostrchat.io/channel/30d1992102c567d143a3df32ca985a16e9d8576e947e687b757848aeca5d9a7b">group on Nostr</a>.</p>
<p>Additionally, you can follow us on X: <a href="https://twitter.com/MostroP2P">https://twitter.com/MostroP2P</a>.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="how-to-contribute"><a class="header" href="#how-to-contribute">How to Contribute</a></h1>
<p>Thank you for your interest in contributing to Mostro!<br />
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.</p>
<p>While we suggest some areas where you can collaborate, feel free to propose any improvement you think may benefit the project:</p>
<ul>
<li><strong>Documentation:</strong> Help improve the documentation so that more people can understand what Mostro is and how to use it.</li>
<li><strong>Translations:</strong> If you are multilingual, you can translate Mostro's <a href="./clients.html">clients</a> or contribute to the documentation in other languages.</li>
<li><strong>Development:</strong> In the <a href="https://github.com/MostroP2P">Mostro project</a> 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.</li>
<li><strong>Bug reporting:</strong> If you detect any errors or unexpected behavior, reporting them is greatly helpful. This contributes to improving the stability and quality of the project.</li>
<li><strong>Improvement proposals:</strong> 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 <a href="./support-and-contacts.html">support groups</a>, or open an issue in the <a href="https://github.com/MostroP2P">corresponding repository</a>. If you believe it will spark significant discussion, then start a discussion in that repository.</li>
<li><strong>Content creation:</strong> If you have skills in content creation, you can make video tutorials or written guides to help users make the most of Mostro.</li>
<li><strong>Social media outreach:</strong> Sharing information about Mostro on social media helps increase its visibility and attract more people interested in contributing or using it.</li>
<li><strong>Donations:</strong> If you prefer to financially support the development and maintenance of Mostro, you can make a donation to <code>mostro@getalby.com</code>.</li>
</ul>
<p>Thank you so much for your support!</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="clients-how-to-use-mostro"><a class="header" href="#clients-how-to-use-mostro">Clients. How to use Mostro</a></h1>
<p>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.</p>
<p>The available Mostro clients so far are:</p>
<ul>
<li><strong><a href="./mostro-web.html">Mostro web</a></strong> (operational): web interface client.</li>
<li><strong><a href="./mostro-cli.html">Mostro-cli</a></strong> (operational): command line client.</li>
<li><strong><a href="./mostrui.html">Mostrui</a></strong> (in development): TUI client, which operates in the terminal with an enhanced appearance.</li>
<li><strong><a href="./mostro-mobile.html">Mostro mobile</a></strong> (in development): mobile application.</li>
</ul>
<p>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 <a href="./privacy.html">here</a>.</p>
<p>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.</p>
<p><strong>Note:</strong> 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 <a href="https://github.com/nostr-protocol/nips/blob/master/44.md">NIP-44</a> 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.</p>
<p>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!</p>
<p>To learn more details about them, keep reading this documentation.</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="mostro-web"><a class="header" href="#mostro-web">Mostro-web</a></h1>
<p>Mostro-web is a Mostro client with a web interface that you can access via: <a href="https://app.mostro.network">https://app.mostro.network</a> and <a href="https://mostro.bilthon.dev">https://mostro.bilthon.dev</a>.</p>
<p><img src="./assets/images/mostro-web.png" alt="mostro-web" /></p>
<p>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.</p>
<p><strong>Tip:</strong> 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.</p>
<p>Mostro-web is a FOSS project; you can visit its <a href="https://github.com/MostroP2P/mostro-web">GitHub repository</a> to learn more about its development, report bugs, or propose improvements. Contributions are welcome!</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="mostro-cli"><a class="header" href="#mostro-cli">Mostro-cli</a></h1>
<p>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.</p>
<p><img src="./assets/images/mostro-cli.png" alt="mostro-cli" /></p>
<p>Mostro-cli is a FOSS project; you can visit its <a href="https://github.com/MostroP2P/mostro-cli">GitHub repository</a> to learn more about its development, report bugs, or propose improvements. Contributions are welcome!</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="mostrui"><a class="header" href="#mostrui">Mostrui</a></h1>
<p>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.</p>
<p><img src="./assets/images/mostrui.png" alt="mostrui" /></p>
<p>Mostrui is a FOSS project; you can visit its <a href="https://github.com/MostroP2P/mostrui">GitHub repository</a> to learn more about its development, report bugs, or propose improvements. Contributions are welcome!</p>
<div style="break-before: page; page-break-before: always;"></div><h1 id="mostro-mobile"><a class="header" href="#mostro-mobile">Mostro mobile</a></h1>
<p>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!</p>
<p><img src="./assets/images/mostro-mobile.png" alt="mostro-mobile" /></p>
<p>Mostro mobile is a FOSS project; you can visit its <a href="https://github.com/MostroP2P/mobile">GitHub repository</a> to learn more about its development, report bugs, or propose improvements. Contributions are welcome!</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
<script>
window.addEventListener('load', function() {
window.setTimeout(window.print, 100);
});
</script>
</div>
</body>
</html>