⚠️ Unmaintained: This project is unmaintained. We've continued the core idea of non-custodial trading with our new project 10101 here: https://github.com/get10101/10101/
CFD trading on Bitcoin - non-custodial, peer-to-peer, Bitcoin only.
Trading on ItchySats is secured by DLCs (Discreet Log Contracts). Here is some material to read up on DLCs and ItchySats' protocol implementation:
- The ItchySats Roadmap which includes a simplified example of how the protocol works
- Blogpost by @luckysori of the COMIT team, describing the protocol in detail
- DLC overview on Bitcoin Optech for information beyond ItchySats
ItchySats is available on many DIY Bitcoin/Lightning node distributions:
We package ItchySats as an Electron app for Windows and MacOS. The latest release can be found here.
We maintain a homebrew tap with the latest version of ItchySats.
brew tap itchysats/itchysats
brew install itchysats
After the initial install, homebrew will take care of keeping ItchySats up-to-date.
ItchySats is not available as a full mobile app yet. In the meantime, if you'd like to use ItchySats on-the-go, the best way is to install ItchySats on your bitcoin node and use Tailscale or connect to your node via Tor.
This guide is for how to use ItchySats as a taker. Currently, ItchySats does not officially support multiple makers. Please note that trade execution is already fully peer to peer, but there is currently only one maker out there. We are working on adding support for maker discovery and trading with multiple makers for a more competitive market.
To open a position:
- Open ItchySats.
- Unlock ItchySats by typing in the default password (
weareallsatoshi
- except for Umbrel, where it depends on its seed and is visible in the AppStore). - Choose your own secure password. Don't forget to store it securely; there's no way to reset it without removing the ItchySats database.
- Transfer funds into the ItchySats wallet.
- Open a
long
orshort
position - this will lock the funds in a multisig on chain. - Wait for the price to move.
- Close the position - this will spend the locked up funds according to the price.
With the current maker you can close positions at any point in time.
Trades are limited to a contract size between 100
and 1000
contracts.
If the market maker is not available you can close by using an independent oracle attesting to the price. Oracle price outcomes can be found here.
Can't find what you are looking for? Check out the 👉 FAQ 👈.
ItchySats includes an internal wallet that is used to sign transactions during the DLC setup. Additionally, when a CFD is closed, your payout is sent to an address owned by this wallet. This wallet is completely under your control. You can withdraw from the wallet at any time.
On Umbrel this wallet is derived from its app seed, so the only thing you have to back up is the Umbrel seed.
When running the binary / docker container a random seed will be used to derive the wallet.
Make sure to back up the taker_seed
file that can be found in the data directory of the application.
ItchySats is currently Beta software. We are doing our best to make ItchySats stable, but there could be unexpected bugs that result in positions being closed at an unfavorable point in time. Please be mindful of how much money you transfer to the internal wallet and how much you are willing to risk when opening a new CFD.
To start the local dev-environment all the components can be started at once by running the following script:
./start_all.sh
Note: Before first run, you need to install all dependencies
- Protocol buffers compiler e.g.
brew install protobuf
// see https://docs.rs/prost-build/latest/prost_build/#sourcing-protoc for more details. - CMake e.g.
brew install cmake
The script combines the logs from all binaries inside a single terminal so it might not be ideal for all cases, but it is convenient for quick regression testing.
Pressing Ctrl + c
once stops all the processes.
The script also enables backtraces by setting RUST_BACKTRACE=1
env variable.
The maker and taker frontend depend on the respective daemon running.
We use a separate react projects for hosting taker and maker frontends.
The latest version of the built frontends will be embedded by cargo
inside
their respective daemons and automatically served when the daemon starts.
Embedded frontend is served on ports 8000
and 8001
by default.
This means that it is highly recommended to build the frontend before the daemons.
./build_frontends.sh
If hot-reloading of the app is required, frontend can be started in development mode.
Development frontend is served on ports 3000
and 3001
by default.
cd taker-frontend
yarn install
yarn dev
cd maker-frontend
yarn install
yarn dev
To run eslint, use:
cd maker-frontend && yarn run eslint
cd taker-frontend && yarn run eslint
Feel free to reach out to us on Twitter, Telegram or Matrix.
We encourage community contributions whether it be a bug fix or an improvement to the documentation. Please have a look at the contributing guidelines.