Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit 6516a04

Browse files
committed
docs(technical): design-rationale
1 parent 8c96432 commit 6516a04

File tree

3 files changed

+117
-0
lines changed

3 files changed

+117
-0
lines changed

docs/technical/design-rationale.md

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# Strata design rationale
2+
3+
In designing Strata,
4+
we adopted a structure inspired by Ethereum's post-merge (formerly "2.0") architecture,
5+
where each full node consists of two distinct components:
6+
an **execution client** and a **consensus client**.
7+
In Ethereum, the consensus client manages Proof of Stake (PoS) consensus,
8+
including proposer selection and block finalization,
9+
while the execution client is responsible for transaction execution using
10+
the EVM interpreter and processing user-facing application-level queries.
11+
These two clients communicate via the **Engine API**,
12+
which allows them to exchange necessary information,
13+
such as when the consensus client requests
14+
the execution client to process a block.
15+
16+
Similarly, the Strata network is divided into two blockchains,
17+
with each full node able to run a client for each of the following layers:
18+
19+
1. **Execution layer**: Handles transaction execution and chain state.
20+
1. **Orchestration layer**
21+
(our version of Ethereum's consensus layer):
22+
Coordinates various specialized tasks related to bitcoin interactions,
23+
bridge operations, decentralized sequencing,
24+
and other Strata-specific operations.
25+
26+
In our architecture, the execution layer is an EVM environment implemented
27+
using a fork of Reth,
28+
while the orchestration layer is a new blockchain tailored to implement
29+
Strata's rollup design and support its consensus requirements.
30+
The two layers communicate via a slightly modified version of the Engine API,
31+
which we extended to handle specific features like bridge transfers in/out of
32+
the execution layer.
33+
This modification was necessary as Ethereum's Engine API doesn't natively support
34+
this functionality.
35+
36+
## Advantages of separation
37+
38+
By following Ethereum's well-thought-out approach to separating execution and orchestration,
39+
Strata gains important advantages:
40+
41+
- **Modularity and specialization**:
42+
The execution and orchestration layers have distinct, specialized functions.
43+
This separation allows them to be developed, maintained,
44+
and iterated upon independently.
45+
For example, improvements to the orchestration layer's coordination logic
46+
can be made without impacting the execution layer, and vice versa.
47+
48+
- **Future support for multiple execution environments**:
49+
This separation allows us to support different execution environments in the future,
50+
each conforming to our modified Engine API.
51+
This means a future with different kinds of execution layers
52+
(eg. WASM-based, privacy-focused, etc.), on top of the orchestration layer,
53+
all having the ability to easily and trustlessly interoperate.
54+
55+
## Why we chose a custom solution over existing SDKs
56+
57+
We initially started development with an existing SDK but,
58+
after several months, chose to start over from scratch due to
59+
the challenges of relying on third-party tools.
60+
While SDKs like **Sovereign SDK**, **Rollkit**,
61+
and **OP Stack** could have sped up early development,
62+
we opted to build a custom orchestration layer for several key reasons:
63+
64+
- **Complete control and flexibility**:
65+
Our main objective was to retain full control over the development of
66+
our orchestration and consensus logic.
67+
This allows us to introduce advanced features—such as instant preconfirmations,
68+
slashing for misbehavior, interoperability,
69+
and volition-style hybrid DA—on our own timeline,
70+
without being restricted by external SDK limitations.
71+
While pre-built SDKs provide basic functionalities,
72+
extending beyond those often requires coordination with external teams,
73+
which may create friction if the roadmaps are misaligned.
74+
Building our own solution ensures we can evolve our architecture independently.
75+
- **Avoiding development bottlenecks**:
76+
During our initial development with a third-party SDK,
77+
we encountered multiple limitations that slowed our progress.
78+
In one instance, something as simple as retrieving
79+
the status of an EVM transaction on the bitcoin chain required suboptimal workarounds
80+
due to the difficulty in modifying the SDK's interface.
81+
Although the SDK team eventually supported us
82+
in making SDK changes or providing better solutions,
83+
relying on external fixes introduced delays.
84+
By building our orchestration layer from scratch,
85+
we eliminate these bottlenecks,
86+
enabling faster iterations and more efficient development.
87+
- **Limitations of current SDKs for our use case**:
88+
Most of the available third-party SDKs, mostly by design,
89+
lack native support for rollups with bitcoin as the settlement layer.
90+
OP Stack, for instance, is centered on optimistic rollups
91+
and fault proofs on Ethereum. Sovereign SDK and Rollkit, while flexible,
92+
are built around generic rollup use cases and typically integrate with EVM
93+
or Cosmos-like ecosystems.
94+
In contrast, Strata's architecture is specifically designed for a rollup
95+
that settles to bitcoin and includes a validating bridge to and from bitcoin.
96+
This requires unique design considerations,
97+
such as accommodating bitcoin's UTXO transaction model,
98+
limited scripting capabilities, and probabilistic settlement.
99+
Our bitcoin-centric approach enabled us to easily incorporate a
100+
BitVM-based bridge from the outset and provides flexibility to
101+
integrate future bitcoin-specific innovations more easily.
102+
103+
---
104+
105+
By building our orchestration layer from scratch,
106+
we not only gain complete control over how we manage consensus,
107+
bridge operations, and interactions with bitcoin,
108+
but we also position Strata for future extensibility without being locked into
109+
the limitations of existing SDKs or external dependencies.
110+
We do learn from the existing SDKs and borrow ideas where we can,
111+
but our custom solution allows us flexibility and specificity for our use case.

mkdocs.yml

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ nav:
7575
- Introduction to Strata: index.md
7676
- How Strata works:
7777
- System architecture: technical/architecture.md
78+
- Design rationale: technical/design-rationale.md
7879
- Transaction lifecycle: technical/transaction-lifecycle.md
7980
- Bitcoin bridge: technical/bitcoin-bridge.md
8081
- Comparing Strata and Ethereum: technical/comparing-ethereum.md

project-words.txt

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
NUMS
22
PUSHBYTES
3+
Rollkit
34
Taproot
45
Tapscript
56
Taptree
@@ -24,15 +25,19 @@ mermaidjs
2425
mkdocs
2526
multisigs
2627
offchain
28+
preconfirmations
2729
println
2830
pseudocode
2931
pubkey
32+
roadmaps
33+
rollups
3034
satoshis
3135
secp
3236
snarknado
3337
squidfunk
3438
standardness
3539
timelock
40+
trustlessly
3641
txid
3742
unspendable
3843
utxo

0 commit comments

Comments
 (0)