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-tokenis 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-tokenif 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-boostforwards all JSON-RPC API calls fromproposer-op-nodetoproposer-op-geth. - When
rollup-boostreceives anengine_FCUwith attributes (initiating block building):- It relays the call to
proposer-op-gethas usual. - If
builder-op-gethis 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-gethandbuilder-op-geth.
- It relays the call to
- When
rollup-boostreceives anengine_getPayload:- It first queries
proposer-op-gethfor a fallback block. - In parallel, it queries
builder-op-geth.
- It first queries
- Upon receiving the
builder-op-gethblock:rollup-boostvalidates the block withproposer-op-gethusingengine_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-nodesends anothernewPayloadrequest to therollup-boostand another FCU(without) to update the state of its op-geth node.- In this case, the
rollup-boostjust relays the data and does not introspect anything. - Note that since we already tested
newPayloadon the proposer-op-geth in the previous step, this process should be cached.
- In this case, the
The code in this project is free software under the MIT License.
Made with ☀️ by the ⚡🤖 collective.