celestia-core is a fork of tendermint/tendermint with the following changes:
- Early adoption of the ABCI++ methods:
PrepareProposal
andProcessProposal
because they haven't yet landed in a Tendermint release. - 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.
^ +-------------------------------+ ^
| | | |
| | 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
See https://github.com/celestiaorg/celestia-app#install
See https://github.com/celestiaorg/celestia-app#usage
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
- Install Go 1.17+
- Fork this repo
- Clone your fork
- Find an issue to work on (see good first issues)
- Work on a change in a branch on your fork
- When your change is ready, push your branch and create a PR that targets this repo
# 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
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.
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.
We are hiring Go engineers! Join us in building the future of blockchain scaling and interoperability. Apply here.