Espresso Node

An Espresso node is a participant in the HotShot consensus protocol which also makes available some services to support L2 clients. The Espresso node is L2 agnostic: it does not provide services specifically tailored to any particular L2. It merely exposes all available information about HotShot and the log of blocks which have been sequenced. Any L2 may query this information and interpret the blocks according to its own execution rules in order to implement a prover, executor, RPC service, etc.

The main internal components of the Espresso node and their respective functions are:

  • HotShot node: The component which actually runs consensus and communicates with other nodes.

  • HotShot query service: The query service maintains a database containing the history and current state of HotShot, including all committed blocks and QCs, consensus-specific data like view numbers and stake tables, and status information like validator uptime. It populates this data using events provided by the HotShot validator and provides a REST API for querying the data. There is also a WebSockets-based API which allows clients to subscribe to notifications when new blocks and QCs are produced. The query service does not provide any L2-specific information. The contents of the blocks it provides are the generic transactions that HotShot itself understands.

  • Submission API: The Espresso node also provides an interface allowing clients to submit transactions to the HotShot mempool. It takes as input a transaction serialized into bytes and an L2 identifier, and it wraps these into HotShot's generic transaction type.

Last updated