This repo implements a proxy server for the Ethereum Engine API and is under active development. To read more about the design, check out the design doc.
Run the server using the following command:
cargo run -- [OPTIONS]
--jwt-token <TOKEN>
: JWT token for authentication (required)--jwt-path <PATH>
: Path to the JWT secret file (required if--jwt-token
is not provided)--l2-url <URL>
: URL of the local L2 execution engine (required)--builder-url <URL>
: URL of the builder execution engine (required)--builder-jwt-token <TOKEN>
: JWT token for builder authentication. defaults to the value of--jwt-token
if not provided--builder-jwt-path <PATH>
: Path to the builder JWT secret file.--rpc-host <HOST>
: Host to run the server on (default: 0.0.0.0)--rpc-port <PORT>
: Port to run the server on (default: 8081)--tracing
: Enable tracing (default: false)--log-level <LEVEL>
: Log level (default: info)--metrics
: Enable metrics (default: false)--boost-sync
: Enable syncing the builder with the proposer op-node (default: false)
You can also set the options using environment variables. See .env.example to use the default values.
cargo run --jwt-token your_jwt_token --l2-url http://localhost:8545 --builder-url http://localhost:8546
- By default,
rollup-boost
forwards all JSON-RPC API calls fromproposer-op-node
toproposer-op-geth
. - When
rollup-boost
receives anengine_FCU
with attributes (initiating block building):- It relays the call to
proposer-op-geth
as usual. - If
builder-op-geth
is synced to the chain tip, the call is also multiplexed to it. - The FCU call returns a PayloadID, which should be identical for both
proposer-op-geth
andbuilder-op-geth
.
- It relays the call to
- When
rollup-boost
receives anengine_getPayload
:- It first queries
proposer-op-geth
for a fallback block. - In parallel, it queries
builder-op-geth
.
- It first queries
- Upon receiving the
builder-op-geth
block:rollup-boost
validates the block withproposer-op-geth
usingengine_newPayload
.- This validation ensures the block will be valid for
proposer-op-geth
, preventing network stalls due to invalid blocks. - If the external block is valid, it is returned to the
proposer-op-node
.
- As per its normal workflow, the
proposer-op-node
sends anothernewPayload
request to the sidecar and another FCU(without) to update the state of its op-geth node.- In this case, the sidecar just relays the data and does not introspect anything.
- Note that since we already tested
newPayload
on the proposer-op-geth in the previous step, this process should be cached.
The code in this project is free software under the MIT License.
Made with ☀️ by the ⚡🤖 collective.