Introduction
Essential is a new paradigm in blockchain design that uses a declarative approach. A Declarative Blockchain specifies state updates directly in a block, which then must pass relevant predefined constraint checks in order to be valid. This is unlike an imperative blockchain which specifies transactions directly in a block, which then are executed to compute a new state.
There are many benefits to this design over traditional blockchains including...
- No failed transactions
- Super efficient light clients
- More capable contract design space
- Block validity can be randomly sampled
🏗️ Work in Progress...
This book is a work in progress and expected to change frequently. Some details are still in active development and may change significantly.
Core Components
At it's core, Essential is made up of a few major components that help facilitate the updating of state.
Constraint Engine
The Constraint Engine is responsible for determining if state updates are valid or not. This consists of a formal state update definition (Solution), the ability to define constraints (Predicates) and a virtual machine to validate constraints (Virtual Machine).
More about the Constraint Engine
Consensus Mechanism
The Consensus Mechanism is responsible for maintaining the chain of blocks. This consists of a formal block definition (Block) and based optimistic rollup design (Optimistic Rollup).
More about the Consensus Mechanism
Additional Infrastructure
Essential is a single part of a modular blockchain design space intended to redefine the traditional "Execution" layer. Additional modules are an open design space that will evolve over time and have multiple possible implementations. This includes how constraints are programmed, nodes to propagate complete copies of state, how blocks are built, how users create "predicateions" and request solutions from solvers, and much more.
Pint Programming Language
Pint is a programming language for predicate expression using constraints on state transitions on arbitrary blockchain architecture.
More about the Pint Programming Language
User Data
Users are expected to interact with Essential primarily through "user data", although they can also play a more direct role if desired.
Predicate Solvers
Solvers are responsible for taking "input data" from users (user data), completing the input data so a Solution can be created and submitting to the builder.
Block Builders
Builders are responsible for building blocks of solutions using some kind of algorithm and possible coordination with solvers. There are many design considerations for how block builders will operate with multiple solutions likely to be adopted in practice.
Applications
Applications consist of a structure of constraints over data similar to smart contracts today. This design space is very large and open to many possibilities and design innovations that are only just now being discovered.
Node
The node has many responsibilities including the ability to sync and derive Layer 2 blocks from Layer 1 events, synchronize state with other nodes, handle fraud notifications, manage deployed contracts, respond to queries, validate constraints, and generate fraud proofs when necessary.