EspressoSystems / hotshot-query-service

Generic query service for HotShot applications
https://espressosystems.github.io/hotshot-query-service/
GNU General Public License v3.0
5 stars 1 forks source link

HotShot Query Service

The HotShot Query Service is a minimal, generic query service that can be integrated into any decentralized application running on the HotShot consensus layer. It provides all the features that HotShot itself expects of a query service (such as providing consensus-related data for catchup and synchronization) as well as some application-level features that deal only with consensus-related or application-agnostic data. In addition, the query service is provided as an extensible library, which makes it easy to add additional, application-specific features (such as a JSON-RPC service in the case of an EVM application).

Features

Development

git clone git@github.com:EspressoSystems/hotshot-query-service
cd hotshot-query-service

Environment

We recommend installing dependencies with the nix package manager, which will ensure you use the same Rust version and related tools as everyone else using a Nix environment (including the CI system). If you prefer not to use Nix, you should still be able to build the project with the normal rustup-installed toolchain, and you can skip this section.

Install nix

Installation instructions can be found here. If in a rush, running the following command and following the on-screen instructions should work in most cases

curl -L https://nixos.org/nix/install | sh

Activate the nix environment

To activate a shell with the development environment run

nix-shell

from within the top-level directory of the repo.

Note: for the remainder of this README it is necessary that this environment is active.

direnv (optional, but recommended for development)

To avoid manually activating the nix shell each time, the direnv shell extension can be used to activate the environment when entering the local directory of this repo. Note that direnv needs to be hooked into the shell to function.

To enable direnv run

direnv allow

from the root directory of this repo.

Building and testing

Once you have Cargo installed (either via Nix or Rustup) you can build the project with cargo build or cargo build --release. To run unit tests, we recommend using

cargo nextest run --release --all-features

You can also run unit tests using the development profile, but without the optimizations of the release profile, some stack sizes exceed the default Rust stack. Therefore, you will need to configure a default stack size to run the development build. 3MB seems to work well:

RUST_MIN_STACK=3145728 cargo nextest run --all-features

Doctest

Doctests require the testing feature. Due to a limitation of doctest it is recommended to run doctests via

cargo nextest run --doc --features testing