robosats v0.1.0-mvp
This is the first RoboSats release!🎉 This release contains the full stack of the RoboSats peer-to-peer exchange at the stage of minimum viable product (MVP). The platform has been built using a python-django backend and a user friendly react-mui frontend.
IMPORTANT: A RoboSats release simply marks a milestone in development. The release is relevant for RoboSats developers and platform operator. In addition, it gives us an opportunity to release a note summarizing all of the new cool features and credit all contributors. You do not need to download / install / run any software to use RoboSats, simply visit the website to use it!
Motivation
- One of the main attack vectors for the Bitcoin network and its users is the ability of some entities to control the fiat on/off-ramps. It allows for censorship and surveillance by linking funds with identities.
- While there exists several peer-to-peer alternatives to centralized exchanges, these are rather technical, slow and costly.
- Most users still prefer the convenience of a centralized exchange at the cost of their privacy and a difficult initial setup (submit passport, selfie-video, etc).
RoboSats Vision
- Using the Lightning Network it is possible to create a very user friendly, safe, fast and cheap peer-to-peer market. Using hold invoices as fidelity bonds and trade escrows, one can dream of an open platform that rivals the ease of use of centralized alternatives keeping similarly low fees, yet with minimal privacy invasion and a close to custody-less trade pipeline.
How to use RoboSats
Simply visit RoboSats website using Tor Browser
-
Bitcoin mainnet: RoboSats6tkf3eva7x2voqso3a5wcorsnw34jveyxfqi2fu7oyheasid.onion
-
Bitcoin testnet: RoboTestagw3dcxmd66r4rgksb4nmmr43fh77bzn2ia2eucduyeafnyd.onion
In-depth tutorial with 2 full walk-troughs: How to use RoboSats v0.1.0
Features
Privacy Focus
- The fidelity bond trust model, instead of a reputation model, enables users to never reuse identities (see #39)
- Easy generation of robohash avatars and nicks from any user created high entropy token.
- Pipeline encourages multiple avatars generation: one identity -> one trade.
- Avatar reuse is possible by recovering a backed up token, yet it requires extra effort.
- Minimal logging, just enough so the platform works. Chat is memory-less (details in #33).
- All platform features are designed and tested for use in TOR network only (tested in Tor Browser & Brave).
Trust and Custody Model
- Extensive use of lightning hold invoices as trade escrow and as means to minimize funds custody.
- The seller locks the satoshis in a hold invoice. The satoshis are released to the buyer once both confirm the fiat has been received.
- RoboSats does not custody funds; yet, linking the seller invoice and the buyer payout is not atomic. Trust in RoboSats operators is needed. Trade with caution and only small amounts.
- In case of dispute, the staff helps resolving the case.
Fidelity Bonds
RoboSats make extensive use of lightning hold invoices for fidelity bonds.
- Users lock a small hold invoice using lightning in order to participate in a contract. Prevents book spamming, ddos attacks and disincentivizes cheating.
- Makers lock the invoice just when publishing the offer, hardening the order book from spamming. For every public order in the book, there is fidelity bond committed on the other side.
- The contract is final when the taker locks its fidelity bond (i.e., when maker and taker are committed).
- If a user cancels unilaterally a contract, he risks losing his bond; improves diligence of peers and overall user experience.
- In an ongoing contract, a user that does not fulfill its task (e.g. submit the payout invoice or lock the trade escrow...), risks losing the bond at expiry time.
- In case of dispute, the dispute loser will lose his bond.
- Bonds are returned when the trade is completed or the order expires (only if the user is not the cause of the expiration due to inactivity).
- The maker bond is returned if a public order is cancelled before a contract is created (i.e., before another user takes it).
- Collaborative cancellation: users can agree to stop a trade before the confirmation of 'fiat sent'. Both fidelity bonds are returned.
Most wallets do not deal very well with hold invoices. Some wallets show that the invoice has been charged even after it has been returned. Try restarting the service.
Order Options
- Up to 31 currencies to choose from.
- Free input for payment method(s).
- Order pricing mechanisms:
- Explicit: the maker explicitly sets the amount of fiat and the amount of satoshis.
- Relative to market: the maker sets a premium/discount over external market prices. RoboSats currently uses median Yadio.io and Blockchain.info for market prices.
Dispute Resolution System
- Users must submit a complete case within one statement where they build the case.
- Users MUST provide a burner contact method that might be useful for the staff further inquires and resolution communication.
- Staff, decides for a winner and a loser. Winner will be asked for a new payout invoice. Loser forfeits the fidelity bond.
Others
- Fully featured order book page. Easy navigation and sorting of currencies, positions, amounts, premiums, exchange rates, and more.
- Responsive on mobile and desktop devices. Mobile experience is prioritized after v0.1.0 release.
- Full trade pipeline accessible trough REST API (documentation to come).
- Chat connects taker and maker to communicate payment details (WebSocket based).
- Sound notifications when a the lightning hold invoice is locked and when a taker is found. (See #41)
- Bottom toolbar with information about the exchange (number of public orders, average non-kyc premium, number of active robots, fees, and more), about the platform (running commit hash, lifetime settled volume, link telegram communities and more) and about the user current robot avatar and active order.
- Information dialog with short and concise explanations about what the RoboSats is, how it works and what are the risks.
- Order page shows order details and current contract actions. Order page shows active status of the counterpart.
Contributors (Alphabetical Order)
@LowEntropyFace
@Reckless-Satoshi
Special thanks to
Five anonymous robots that have been running Testnet trades, reporting bugs on the telegram group and cheering! :)