Giter VIP home page Giter VIP logo

mostro's Introduction

Mostro ๐ŸงŒ

Mostro-logo

Overview

Due to the growing need to be able to operate with Bitcoin without giving up personal data, in 2021 I started a project to allows people to buy and sell Bitcoin through Lightning Network without funds custody and without KYC, this project is a telegram bot called @lnp2pbot.

@lnp2pBot is growing steadily and organically, it's being use in the whole world and is having a bigger impact in Latin-America, a place where there is no need to explain to people that money is broken, it's being used more and more in dictatorial regimes like Cuba and Venezuela, where people keep resisting tyranny and protesting using less the local currency and more Bitcoin.

Although the bot works excellent, it's running on top of Telegram, a great platform but we do not know if one day it will be reached by the tentacles of a powerful government asking for political dissidents or simply awkward public person.

At this point Nostr appears as a platform where a system like this can live without the possibility of being censored by a powerful entity. This document explains how we can create a censorship-resistant and non custodial lightning network peer-to-peer exchange without a single point of failure like a telegram bot.

How it works?

Mostro works with a p2p communication on top of Nostr, Mostro will be the escrow that will allow buyer and seller operate reducing the risk for both parties.

Mostro will handle Bitcoin using a Lightning Network node, the node will create the hold invoices for sellers and pay the buyers lightning regular invoices.

Mostro will need a private key to be able to create, sign and send events throught Nostr network.

In the next graphic we can see a very summarized version of how Mostro, the seller and the lightning node interact, a more detailed explanation can be found here:

sequenceDiagram
    autonumber
    Seller->>Mostro: I want to sell Bitcoin
    Mostro-->>LN-Node: Give me a hold invoice
    LN-Node->>Mostro: Hold invoice
    Mostro->>Seller: Please pay this hold invoice
    Seller->>LN-Node: Paying throught lightning
    LN-Node-->>Mostro: Payment received
    Mostro-->>Seller: Thanks! talk to buyer now

In this repository we are building a Mostro on Rust.

Client

Buyers and sellers will need Mostro's clients in order to buy/sell Bitcoin and a Lightning Wallet, for this we need to build at least a web client to start, we plan to build mobile and desktop clients in the future.

Removing the single point of failure

For this idea to work we need to make it as easy as possible for anyone to be a Mostro, we don't need dozens of Mostros but we do need the ones that are running to be reliable, that's why with this implementation we encourage to create your own Mostro and give more options to users.

To handle a Mostro is not going to be that easy, a Mostro admin needs to have a lightning node up and running, it will need to have enough liquidity for users to operate lightning fast, the node MUST have uptime closer to 99.9%, all this requires resources that can be obtained by the fee that sellers pay on each successful order, this is a percentage that can vary between Mostros.

Mostro's reputation

Users will be able to rate Mostros and Mostros will compete to obtain more users in order to survive. Bad Mostros should be rejected by users and will lose incentives to keep existing.

Requirements:

  1. You need Rust version 1.64 or higher to compile.
  2. You will need a lightning network node

Install dependencies:

To compile on Ubuntu/Pop!_OS, please install cargo, then run the following commands:

$ sudo apt update
$ sudo apt install -y cmake build-essential libsqlite3-dev pkg-config libssl-dev

Install

Clone the repository and then create a new .env file based on .env-sample file.

$ git clone https://github.com/MostroP2P/mostro.git
$ cd mostro
$ cp .env-sample .env

To connect with a lnd node we need to set 4 variables in the .env file .

LND_CERT_FILE: LND node TLS certificate file path.

LND_MACAROON_FILE: Macaroon file path, the macaroon file contains permission for doing actions on the lnd node.

LND_GRPC_HOST: IP address or domain name from the LND node, example: 127.0.0.1.

LND_GRPC_PORT: LND node port to connect, example: 10009.

Database

The data is saved in a sqlite db file named by default mostro.db, this file is saved on the root directory of the project and can be change just editing the env var DATABASE_URL on the .env file.

Before start building we need to initialize the database, for this we need to use sqlx_cli:

$ cargo install sqlx-cli
$ ./init_db.sh

Running it:

Before run it you to set NSEC_PRIVKEY with the private key of your Mostro, if you don't have a nostr private key you can use rana ๐Ÿธ to generate a new one, then run it:

$ cargo run

If you want to run with with a private dockerized relay, you must:

cd relay
docker compose up -d

This will spin a new docker container with an instance of nostr-rs-relay, that will listen at port 7000.

So the relay URL you want to connect to is: ws://localhost:7000.

mostro's People

Contributors

grunch avatar arkanoider avatar cipherchabon avatar bilthon avatar yukibtc avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.