Skip to content
/ tycho Public

Reference implementation of Tycho protocol.

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

broxus/tycho

Folders and files

NameName
Last commit message
Last commit date

Latest commit

20358d3 · Apr 15, 2025
Aug 20, 2024
Apr 11, 2025
Mar 17, 2025
Apr 15, 2025
Apr 11, 2025
Apr 15, 2025
Apr 12, 2025
Apr 12, 2025
Apr 12, 2025
Oct 31, 2024
Apr 14, 2025
Apr 2, 2025
Apr 11, 2025
Apr 2, 2025
Apr 15, 2025
Apr 12, 2025
Jan 24, 2025
Apr 15, 2025
Sep 16, 2024
Feb 16, 2024
Aug 14, 2024
Oct 31, 2024
May 14, 2024
Apr 15, 2025
Apr 8, 2025
Oct 31, 2024
Oct 31, 2024
Mar 18, 2025
Apr 15, 2025
Mar 13, 2025
May 7, 2024
Apr 15, 2025

Repository files navigation

Tycho

Reference implementation of Tycho protocol.

About

Tycho is a high-performance protocol designed for building L1/L2 TVM blockchain networks. By utilizing DAG (Directed Acyclic Graph) for consensus and TVM for parallel execution, Tycho works with high throughput and low latency.

Development

  • Install Rust:
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Install dependencies:
    sudo apt install build-essential git libssl-dev zlib1g-dev pkg-config clang jq
  • Install tools:
    cargo install lychee cargo-shear cargo-nextest
  • Test CI locally:
    just ci

To run prebuilt tests

check this guide.

Running a Local Network

# Generate zerostate config stub (with optional --force flag):
just init_zerostate_config
# Generate node config sub (with optional --force flag):
just init_node_config
# Generate a local network of 3 nodes (with optional --force flag):
just gen_network 3

# Start nodes in separate terminals or spawn them with `&`:
just node 1
just node 2
just node 3

Note

By default the dev profile is used. Use this env to specify a different profile:

export TYCHO_BUILD_PROFILE=release

Prebuilt RocksDB

By default, we compile RocksDB (a C++ project) from source during the build. By linking to a prebuilt copy of RocksDB this work can be avoided entirely. This is a huge win, especially if you clean the ./target directory frequently.

To use a prebuilt RocksDB, set the ROCKSDB_LIB_DIR environment variable to a location containing librocksdb.a:

export ROCKSDB_LIB_DIR=/usr/lib/
cargo build -p tycho-cli

Note, that the system must provide a recent version of the library which, depending on which operating system you're using, may require installing packages from a testing branch. Or you could build the RocksDB from source manually:

# Install dependencies
sudo apt install clang lld libjemalloc-dev libgflags-dev libzstd-dev liblz4-dev

# Clone the repo
cd /path/to
git clone https://github.com/facebook/rocksdb.git
cd rocksdb
git checkout v9.7.4

# Build the library
mkdir -p build && cd ./build
export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release \
  -DWITH_LZ4=ON -DWITH_ZSTD=ON -DWITH_JEMALLOC=ON ..
make -j16 rocksdb

# Set env somewhere
export ROCKSDB_LIB_DIR=/path/to/rocksdb/build

Contributing

We welcome contributions to the project! If you notice any issues or errors, feel free to open an issue or submit a pull request.

License

Licensed under either of

at your option.