Skip to content

InterBTC: Trustless Bitcoin on Polkadot

License

Notifications You must be signed in to change notification settings

gregdhill/interbtc

 
 

Repository files navigation

InterBTC

A trust-minimized bridge from Bitcoin to Polkadot.
Explore the specification »

Report Bug · Request Feature

This repository is hosted on GitHub: https://github.com/interlay/interbtc with a mirror on GitLab and radicle.

This project is currently under active development.

Table of Contents

About the Project

This is a proof of concept implementation of a BTC Parachain to bring Bitcoin into the Polkadot universe. It allows the creation of InterBTC, a fungible token that represents Bitcoin in the Polkadot ecosystem. InterBTC is backed by Bitcoin 1:1 and allows redeeming of the equivalent amount of Bitcoins by relying on a collateralized third-party.

The project uses the concept of Cryptocurrency-backed Assets to lock Bitcoin on the Bitcoin blockchain and issue BTC-backed tokens on the BTC Parachain. The implementation is based on the BTC Parachain specification.

Built with

The InterBTC project is built with:

Roadmap

  • Alpha - November 2020
  • Beta - February 2021
  • Rococo - Feburary 2021
  • Kusama - TBD
  • Polkadot - TBD

Development Progess

The Substrate runtime makes use of various custom pallets that are found in the crates folder.

  • bitcoin: Library for Bitcoin type, parsing and verification functions.
  • btc-relay: Stateful SPV client for Bitcoin. Stores Bitcoin main chain, tracks forks, verifies Merkle proofs and validates specific transaction formats.
  • currency Handles currencies used as backing collateral (e.g. DOT/KSM) and issued tokens (e.g. InterBTC).
  • exchange-rate-oracle: Exchange rate oracle. Integration with external provider pending.
  • fee: Participant reward calculation and distribution.
  • issue: Handles issuing of InterBTC for BTC on Bitcoin.
  • redeem Handles redeeming of InterBTC for BTC on Bitcoin.
  • refund Handles refunds for when a vault receives more BTC than it can cover.
  • replace Handles replacing vaults.
  • security: Handles BTC Parachain status and error changes.
  • sla: Participant scoring for reward & slashing calculations.
  • relay: Handles block submission and theft reporting.
  • vault-registry: Handles registration, collateral and liquidation of vaults.

Getting started

Prerequisites

curl https://sh.rustup.rs -sSf | sh

Please also install the following dependencies:

  • cmake
  • clang (>=10.0.0)
  • clang-dev
  • libc6-dev
  • libssl-dev

Installation

Building requires a specific rust toolchain and nightly compiler version. The requirements are specified in the ./rust-toolchain.toml override file.

Running rustup show from the root directory of this repo should be enough to set up the toolchain and you can inspect the output to verify that it matches the version specified in the override file.

To build, run:

cargo build

For more detailed development instructions see here.

Testing

cargo test

To run with coverage, using cargo-cov:

cargo install cargo-cov

# clean up previous coverage result
cargo cov clean

# test the code
cargo cov test

# open the coverage report
cargo cov report --open

Running

To run a local development node, use the dev chain spec.

cargo run --release -- --dev

Clear the database using the purge-chain command.

cargo run --release -- purge-chain --dev

To disable all btc-relay block inclusion checks, use the special dev-no-btc chain spec. This is useful for testing without the overhead of running a block relayer.

cargo run --release -- --alice --chain dev-no-btc --rpc-cors all --validator --force-authoring --tmp

Additional CLI usage options are available and may be shown by running cargo run -- --help.

Rococo

By default, the node will build in standalone mode with the aura-grandpa feature.

To build with "parachain" support use the cumulus-polkadot feature:

cargo build --manifest-path parachain/Cargo.toml --release --no-default-features --features cumulus-polkadot

To connect with a local relay-chain follow these instructions.

Test Coverage

Test coverage reports available under docs/testcoverage.html

Substrate Chain Configuration

The Substrate runtime configuration is in the parachain folder.

Javascript / Typescript

When interacting via polkadot{.js} you will need to use our custom types. Please also checkout polkabtc-js for a more complete (strongly-typed) library with bitcoinjs-lib integration.

Contributing

If you would like to contribute, please file an issue on GitLab or reach out to us.

We are hiring!

License

(C) Copyright 2020 Interlay Ltd

InterBTC is currently licensed under the terms of the Apache License (Version 2.0). See LICENSE

Contact

Website: Interlay.io

Twitter: @interlayHQ

Email: contact@interlay.io

Acknowledgements

This project is supported by a Web3 Foundation grant.

We would also like to thank the following teams for their continuous support:

About

InterBTC: Trustless Bitcoin on Polkadot

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 99.2%
  • Other 0.8%