sunrise-core is a fork of cometbft/cometbft, an implementation of the Tendermint protocol, with the following changes:
- Modifications to how
DataHash
in the block header is determined. In CometBFT,DataHash
is based on the transactions included in a block. In Sunrise, block data (including transactions) are erasure coded into a data square to enable data availability sampling. In order for the header to contain a commitment to this data square,DataHash
was modified to be the Merkle root of the row and column roots of the erasure coded data square. See sunrise-app/pkg/da/data_availability_header.go for the implementation. Note on the implementation: sunrise-app computes the hash in prepare_proposal and adds it to txs via abci_prepare_proposal.go so it is taken from txs and applied to Data.Hash in sunrise-core.
^ +-------------------------------+ ^
| | | |
| | State-machine = Application | |
| | | | sunrise-app (built with Cosmos SDK)
| | ^ + | |
| +----------- | ABCI | ----------+ v
Sunrise | | + v | ^
validator or | | | |
full consensus | | Consensus | |
node | | | |
| +-------------------------------+ | sunrise-core (fork of CometBFT)
| | | |
| | Networking | |
| | | |
v +-------------------------------+ v
See https://github.com/SunriseLayer/sunrise-app#install
See https://github.com/SunriseLayer/sunrise-app#usage
This repo intends on preserving the minimal possible diff with cometbft/cometbft to make fetching upstream changes easy. If the proposed contribution is
- specific to Sunrise: consider if sunrise-app is a better target
- not specific to Sunrise: consider making the contribution upstream in CometBFT
- Install Go 1.22+
- Fork this repo
- Clone your fork
- Find an issue to work
- 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 CometBFT binary and output to build/comet
make build
# Install CometBFT 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 CometBFT releases. For example: v0.0.1-cmt-v0.38.2
is based on the CometBFT v0.38.2
release branch and contains Sunrise-specific changes.
Releases are formatted: v<SUNRISE_CORE_VERSION>-tm-v<COMETBFT_VERSION>
For example: v0.0.1-cmt-v0.38.2
is sunrise-core version 0.0.1
based on CometBFT 0.38.2
.
SUNRISE_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.