blobstream-contracts

module
v2.1.0+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 14, 2023 License: Apache-2.0

README

Quantum Gravity Bridge

GoDoc Go Report Card Version

The Quantum Gravity Bridge (QGB) is a Celestia -> EVM message relay. It is based on Umee's Gravity Bridge implementation, Peggo. This project is under active development and should not be used in production.

Table of Contents

Building From Source

Dependencies

Initialize git submodules, needed for Forge dependencies:

git submodule init
git submodule update

To regenerate the Go ABI wrappers with make gen, you need the abigen tool. Building requires Go 1.19+. Install abigen with:

git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
make devtools
Build and Test Contracts

Build with:

forge build

Test with:

forge test
Format

Format Solidity with:

forge fmt
Regenerate Go Wrappers

Go wrappers can be regenerated with:

make

Send a message from Celestia to an EVM chain

A message can be included on Celestia by using the Celestia app. Instructions here.

How it works

The QGB allows Celestia block header data roots to be relayed in one direction, from Celestia to an EVM chain. It does not support bridging assets such as fungible or non-fungible tokens directly, and cannot send messages from the EVM chain back to Celestia.

It works by relying on a set of signers to attest to some event on Celestia: the Celestia validator set. The QGB contract keeps track of the Celestia validator set by updating its view of the validator set with updateValidatorSet(). More than 2/3 of the voting power of the current view of the validator set must sign off on new relayed events, submitted with submitDataRootTupleRoot(). Each event is a batch of DataRootTuples, with each tuple representing a single data root (i.e. block header). Relayed tuples are in the same order as Celestia block headers.

Events and messages relayed

Validator sets: The relayer informs the QGB contract who are the current validators and their power. This results in an execution of the updateValidatorSet function.

Batches: The relayer informs the QGB contract of new data root tuple roots. This results in an execution of the submitDataRootTupleRoot function.

Directories

Path Synopsis
wrappers

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL