A testnet open-source Layer 2 from the future, co-designed with the developer tools stack.
See the codeOdyssey is a testnet OP Stack rollup aimed at enabling experimentation of bleeding edge Ethereum Research. Odyssey is not a fork of reth. Odyssey implements traits provided by the reth node builder API, allowing implementation of precompiles and instructions of experimental EIPs without forking the node.
Specifically, Odyssey currently implements the following EIPs:
Odyssey also implements the EIPs for EOF, or The EVM Object Format.
Odyssey has 2 goals:
[!TIP]
The Odyssey Testnet is now live on Sepolia and is built with Reth, the OP Stack, and deployed on Conduit.
Odyssey can be run locally for development and testing purposes. To do this, the binary can be run with the --dev flag, which will start the node with a development configuration.
First, odyssey should be built locally:
git clone https://github.com/ithacaxyz/odyssey
cd odyssey
cargo install --path bin/odyssey
odyssey node --chain etc/odyssey-genesis.json --dev --http --http.api all
This will start the node with a development configuration, and expose the HTTP API on http://localhost:8545.
To use EOF-enabled foundry, use forge-eof and follow installation instructions.
Running Odyssey will require running additional infrastructure for the archival L1 node. These instructions are a guide for running the Odyssey OP-stack node only.
For instructions on running the full Odyssey OP stack, including the L1 node, see the Reth book section on running the OP stack, using the odyssey binary instead of op-reth.
To run Odyssey from source, clone the repository and run the following commands:
git clone https://github.com/ithacaxyz/odyssey.git
cd odyssey
cargo install --path bin/odyssey
odyssey node \
--chain etc/odyssey-genesis.json \
--rollup.sequencer-http <rollup-sequencer-http> \
--http \
--ws \
--authrpc.port 9551 \
--authrpc.jwtsecret /path/to/jwt.hex
Once odyssey is started, op-node can be run with the
included odyssey-rollup.json:
cd odyssey/
op-node \
--rollup.config ./etc/odyssey-rollup.json \
--l1=<your-sepolia-L1-rpc> \
--l2=http://localhost:9551 \
--l2.jwt-secret=/path/to/jwt.hex \
--rpc.addr=0.0.0.0 \
--rpc.port=7000 \
--l1.trustrpc
Running a local network with a full Odyssey OP stack with Kurtosis requires some extra setup, since Odyssey uses a forked version of op-node.
To get started, follow these instructions to install Kurtosis.
Next, start a Kurtosis enclave:
kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package \
--args-file https://raw.githubusercontent.com/ithacaxyz/odyssey/main/etc/kurtosis.yaml
This will start an enclave named op-devnet. You can tear down the enclave with kurtosis enclave rm --force op-devnet, or tear down all enclaves using kurtosis clean -a.
[!NOTE]
If you want to use a custom build of Odyssey, simply build an Odyssey image with
docker build . -t ghcr.io/ithacaxyz/odyssey:latest.
Consult the Kurtosis OP package repository for instructions on how to adjust the args file to spin up additional services, like a block explorer.
Odyssey has a custom wallet_ namespace, that allows users to delegate their EOAs to a contract using EIP-7702, and perform transactions on those accounts, all funded by the sequencer.
To enable this namespace, set the environment variable EXP1_SK to a private key that will sign the transactions. The new RPC method, wallet_sendTransaction, will only sign transactions that either:
The odyssey_sendTransaction endpoint accepts the same fields as eth_sendTransaction, with these notable exceptions:
nonce must not be set, as this is managed by the nodevalue must be unset or 0from must not be specifiedThe following fields are ignored, as they are overwritten internally:
gasPrice (and EIP-1559 gas related pricing fields)gasLimitchainIdSee SECURITY.md.
Rust
88.1%
Makefile
9.9%
Dockerfile
2.0%
A testnet open-source Layer 2 from the future, co-designed with the developer tools stack.
See the codeOdyssey is a testnet OP Stack rollup aimed at enabling experimentation of bleeding edge Ethereum Research. Odyssey is not a fork of reth. Odyssey implements traits provided by the reth node builder API, allowing implementation of precompiles and instructions of experimental EIPs without forking the node.
Specifically, Odyssey currently implements the following EIPs:
Odyssey also implements the EIPs for EOF, or The EVM Object Format.
Odyssey has 2 goals:
[!TIP]
The Odyssey Testnet is now live on Sepolia and is built with Reth, the OP Stack, and deployed on Conduit.
Odyssey can be run locally for development and testing purposes. To do this, the binary can be run with the --dev flag, which will start the node with a development configuration.
First, odyssey should be built locally:
git clone https://github.com/ithacaxyz/odyssey
cd odyssey
cargo install --path bin/odyssey
odyssey node --chain etc/odyssey-genesis.json --dev --http --http.api all
This will start the node with a development configuration, and expose the HTTP API on http://localhost:8545.
To use EOF-enabled foundry, use forge-eof and follow installation instructions.
Running Odyssey will require running additional infrastructure for the archival L1 node. These instructions are a guide for running the Odyssey OP-stack node only.
For instructions on running the full Odyssey OP stack, including the L1 node, see the Reth book section on running the OP stack, using the odyssey binary instead of op-reth.
To run Odyssey from source, clone the repository and run the following commands:
git clone https://github.com/ithacaxyz/odyssey.git
cd odyssey
cargo install --path bin/odyssey
odyssey node \
--chain etc/odyssey-genesis.json \
--rollup.sequencer-http <rollup-sequencer-http> \
--http \
--ws \
--authrpc.port 9551 \
--authrpc.jwtsecret /path/to/jwt.hex
Once odyssey is started, op-node can be run with the
included odyssey-rollup.json:
cd odyssey/
op-node \
--rollup.config ./etc/odyssey-rollup.json \
--l1=<your-sepolia-L1-rpc> \
--l2=http://localhost:9551 \
--l2.jwt-secret=/path/to/jwt.hex \
--rpc.addr=0.0.0.0 \
--rpc.port=7000 \
--l1.trustrpc
Running a local network with a full Odyssey OP stack with Kurtosis requires some extra setup, since Odyssey uses a forked version of op-node.
To get started, follow these instructions to install Kurtosis.
Next, start a Kurtosis enclave:
kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package \
--args-file https://raw.githubusercontent.com/ithacaxyz/odyssey/main/etc/kurtosis.yaml
This will start an enclave named op-devnet. You can tear down the enclave with kurtosis enclave rm --force op-devnet, or tear down all enclaves using kurtosis clean -a.
[!NOTE]
If you want to use a custom build of Odyssey, simply build an Odyssey image with
docker build . -t ghcr.io/ithacaxyz/odyssey:latest.
Consult the Kurtosis OP package repository for instructions on how to adjust the args file to spin up additional services, like a block explorer.
Odyssey has a custom wallet_ namespace, that allows users to delegate their EOAs to a contract using EIP-7702, and perform transactions on those accounts, all funded by the sequencer.
To enable this namespace, set the environment variable EXP1_SK to a private key that will sign the transactions. The new RPC method, wallet_sendTransaction, will only sign transactions that either:
The odyssey_sendTransaction endpoint accepts the same fields as eth_sendTransaction, with these notable exceptions:
nonce must not be set, as this is managed by the nodevalue must be unset or 0from must not be specifiedThe following fields are ignored, as they are overwritten internally:
gasPrice (and EIP-1559 gas related pricing fields)gasLimitchainIdSee SECURITY.md.
Rust
88.1%
Makefile
9.9%
Dockerfile
2.0%