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
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.
ItchySats is available in the Umbrel appstore. ItchySats is available as bonus features on RaspiBlitz.
We recommend using ItchySats on Umbrel or RaspiBlitz for the time being.
If you want to try ItchySats without Umbrel you can use the latest binary or latest docker container but that might not be as straightforward.
To open a position:
- Install the App on Umbrel (or start the binary / container)
- 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 run cd maker-frontend; yarn install; cd../taker-frontend; yarn install
command to ensure that all dependencies get
installed.
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.
cd taker-frontend
yarn install
yarn build
cd maker-frontend
yarn install
yarn build
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.