# Code organization

# Top level packages

  • chain - Code for generating the sequence of beacons (implementation of which is in chain/beacon) after setup.
    • boltdb - BoltDB storage backend.
    • errors - common errors for the chain package.
    • memdb - in-memory storage backend.
    • postgresdb - PostgreSQL storage backend.
  • client - The drand client library - composition utilities for fail-over and reliable abstraction.
    • client/grpc - The concrete gRPC client implementation.
    • client/http - The concrete HTTP client implementation.
    • client/test - Mock client implementations for testing.
  • cmd - Binary entry points.
    • cmd/client - A client for fetching randomness.
    • cmd/client/lib - A common library for creating a client shared by cmd/client and cmd/relay.
    • cmd/drand-cli - The main drand group member binary.
    • cmd/relay - A relay that pulls randomness from a drand group member and exposes an HTTP server interface.
    • cmd/relay-gossip - A relay that pulls randomness from a group member and publishes it over a libp2p gossipsub topic.
  • crypto - Holds the schemes supported by drand.
  • core - The primary Service interface of drand comamands.
    • core/migration - A library for migrating drand files from single-beacon to multi-beacon version.
  • demo - A framework for integration testing.
  • deploy - Records of previous drand deployments.
  • docker - Helpers for docker image packaging.
  • docs - Here.
  • entropy - A common abstraction for ingesting randomness.
  • fs - Utilities for durable state storage.
  • hooks - Docker helper entrypoint.
  • http - The publicly exposed HTTP server for exposing randomness.
  • key - Validation of signatures.
  • log - Common logging library.
  • lp2p - Utilities for constructing a libp2p (opens new window) host.
    • lp2p/client - The concrete gossip client implementation.
  • metrics - The prometheus metrics server.
  • net - gRPC service handlers for inter-node communication.
  • protobuf/drand - Definitions for the wire format interface of inter-node communication.
  • test - Testing helper utilities.
    • test/docker - Files and related scripts for testing drand networks on docker.