/celestia-core

Celestia node software based on Tendermint.

Primary LanguageGoOtherNOASSERTION

celestia-core

Go Reference GitHub Release Go Report Card Build Lint Tests

celestia-core is a fork of tendermint/tendermint with the following changes:

  1. Early adoption of the ABCI++ methods: PrepareProposal and ProcessProposal because they haven't yet landed in a Tendermint release.
  2. Modifications to how DataHash in the block header is determined. In Tendermint, DataHash is based on the transactions included in a block. In celestia-core, DataHash was modified to include the Merkle root of the row and column roots of the erasure coded data square. See ADR 008 for the motivation or ./pkg/da/data_availability_header.go for the implementation.

See ./docs/celestia-architecture for architecture decision records (ADRs) on Celestia modifications.

Diagram

                ^  +-------------------------------+  ^
                |  |                               |  |
                |  |  State-machine = Application  |  |
                |  |                               |  |   celestia-app (built with Cosmos SDK)
                |  |            ^      +           |  |
                |  +----------- | ABCI | ----------+  v
Celestia        |  |            +      v           |  ^
validator or    |  |                               |  |
full consensus  |  |           Consensus           |  |
node            |  |                               |  |
                |  +-------------------------------+  |   celestia-core (fork of Tendermint Core)
                |  |                               |  |
                |  |           Networking          |  |
                |  |                               |  |
                v  +-------------------------------+  v

Install

See https://github.com/celestiaorg/celestia-app#install

Usage

See https://github.com/celestiaorg/celestia-app#usage

Contributing

This repo intends on preserving the minimal possible diff with tendermint/tendermint to make fetching upstream changes easy. If the proposed contribution is

  • specific to Celestia: consider if celestia-app is a better target
  • not specific to Celestia: consider making the contribution upstream in Tendermint
  1. Install Go 1.17+
  2. Fork this repo
  3. Clone your fork
  4. Find an issue to work on (see good first issues)
  5. Work on a change in a branch on your fork
  6. When your change is ready, push your branch and create a PR that targets this repo

Helpful Commands

# Build a new tendermint binary and output to build/tendermint
make build

# Install tendermint binary
make install

# Run tests
make test

# If you modified any protobuf definitions in a `*.proto` file then
# you may need to lint, format, and generate updated `*.pb.go` files
make proto-lint
make proto-format
make proto-gen

Branches

The canonical branches in this repo are based on Tendermint releases. For example: v0.34.x-celestia is based on the Tendermint v0.34.x release branch and contains Celestia-specific changes.

Versioning

Releases are formatted: v<CELESTIA_CORE_VERSION>-tm-v<TENDERMINT_CORE_VERSION> For example: v1.4.0-tm-v0.34.20 is celestia-core version 1.4.0 based on Tendermint 0.34.20. CELESTIA_CORE_VERSION strives to adhere to Semantic Versioning.

Careers

We are hiring Go engineers! Join us in building the future of blockchain scaling and interoperability. Apply here.