Awesome
LNp2pBot
Telegram bot that allows people to trade using lightning network with other people on telegram, this is an open source project and anyone can create issues, submit a PR, fork it, modify it or create their own bot with the code.
Try it out!
- Website: lnp2pbot.com
- Bot: @lnp2pBot
- Main channel offers: @p2plightning
Wherever you are you can start using the bot, just need to have a telegram account with a username and /start
the bot.
LNp2pBot is being developed on nodejs and connects with an LND node, we wanted that the telegram bot be able to receive lightning payments without being custodial, after some thinking we decided to use hold invoices for it, the bot only settle seller invoices when each party is ok with it and right after that moment the bot pays the buyer's invoice.
Creating a sell order
- Alice tells to the bot that she wants to sell 5000 sats for n fiat amount.
- The bot publishes a sell order of 5000 sats on the bot channel.
- Bob accepts the order for 5000 sats sending a new lightning invoice to the bot.
- The bot send to alice a hold-invoice, Alice has to pay a hold-invoice of 5000 sats to the bot, this invoice is "pending", the money is not accepted or rejected by the bot at that moment.
- After the bot detects that Alice paid the invoice, the bot puts Alicia in contact with Bob.
- Bob sends the fiat money to Alice and tells to the bot that the fiat money was sent to Alice.
- When Alice confirmed that she received the money, the bot settles Alice's initial invoice and pays Bob's invoice.
- If Alice does not confirm the operation that she received the payment in certain amount of time (initially we set this in two hours but this can be changed), the bot will send all the information to one admin and the admin will solve the issue, before the time expires Bob will be notified that Alice is not responding and Bob can start a dispute.
Creating a buy order
- Alice wants to buy 5000 sats.
- Alice publishes a buy order of 5000 sats with n fiat amount, Alice does not have satoshis, but she has fiat.
- The bot shows the order in the public group.
- Bob takes the order, the bot sends him a hold-invoice for 5000.
- Bob pays the invoice.
- The bot tells Alice that Bob has already made the payment, Alice now have to send an invoice to the bot to receive her satoshis. She can now send the fiat to Bob, after she sent the money she tells to the bot that the fiat was sent.
- When Bob confirms that he received the fiat, the bot settles Bob's invoice and pays Alice's invoice.
- If Bob does not confirm the operation that he received the payment in certain amount of time (initially we set this in two hours but this can be changed), the bot will send all the information to one admin and the admin will solve the issue, before the time expires Alice will be notified that Bob is not responding and Alice can start a dispute.
Cooperative cancel
After a user creates a new order and before another user take it, the user can cancel the order, but in some cases users may need to cancel the order, it shouldn't be unilateral.
Only if both parties cancel cooperatively the order is canceled and seller's funds are returned.
If users have a disagreement on canceling or don't want to go forward they can start a dispute.
Disputes
Both parties can start a dispute at any moment, after a dispute is started a human (aka "solver") will be notified with all the information, this solver will contact both parties to evaluate the situation and take a decision.
After a user starts a dispute, both parties will have increased by 1 their own dispute
field in database. If during a dispute it is proven that there is a malicious user, the solver can ban that user, and they will no longer be able to use the bot anymore.
Incentive to release funds
A seller that didn't release funds to the buyer can't open or take another order from the bot and probably will be involved in a dispute from the buyer damaging his/her reputation
Communities
Anyone who already has or creates a Telegram group can include the bot inside to facilitate buying and selling bitcoin among its members. The group administrator will earn a commission for transactions conducted within their community, and they can also offer discounts on the fees that the bot charges within their community.
Financial Support
LNp2pBot is an open source project. We are not a company, we don't do ICOs or dark business, we are just people that wants bring solutions to the people using the best open source money in the world. Our work depends on the financial collaboration of the users.
To financially support further development of LNp2pBot, please consider support our project sending bitcoin to lightning address lnp2pbot@getalby.com.
Installation
You will need to create an .env
file on the root dir, you can use a sample env file called .env.sample
on the root dir, an easy way of doing this is just to copy the sample file to .env
.
cp .env-sample .env
MongoDB
You will need to have mongo installed and fill the mongo variables on the .env file, those that stats with DB_
.
Telegram
You will need a telegram bot api key (BOT_TOKEN
), find out more about it here.
Tor service or another proxy
You can route the bot API via Tor service or another proxy if you specify 'SOCKS_PROXY_HOST' parameter in .env. For Ubuntu see this
Lightning Network
You will need a lightning network node, for this bot we use LND.
There are two methods to connect with an LND node:
Method 1: Setting Variables in the .env
File
To connect with an LND node we need to set 3 variables in the .env
file,
-
LND_CERT_BASE64: LND node TLS certificate on base64 format, you can get it with
base64 -w0 ~/.lnd/tls.cert
on the LND node. -
LND_MACAROON_BASE64: Macaroon file on base64 format, the macaroon file contains permission for doing actions on the LND node, you can get it with
base64 -w0 ~/.lnd/data/chain/bitcoin/mainnet/admin.macaroon
. -
LND_GRPC_HOST: IP address or domain name from the LND node and the port separated by colon (
:
), example:192.168.0.2:10009
.
Method 2: Copying Files to the Project Root
Instead of setting the LND_MACAROON_BASE64
and LND_CERT_BASE64
variables in the .env
file, you can simply copy the admin.macaroon
and tls.cert
files to the root of the project.
Please note that you will still need to define the LND_GRPC_HOST
in the .env
file as in Method 1, step 3.
Please choose one of these two methods for your setup.
To install just run:
$ git clone https://github.com/lnp2pbot/bot.git lnp2pbot
$ cd lnp2pbot
$ npm install
Here we have a detailed guide for installation and first steps using the bot.
Running it
$ npm start
Testing
$ npm test
Documentation
You can find documentation in English, Spanish, Portuguese, French and Persian
Contribute
See contributing guide.