This document was written with reference to the devnet.md of the Magi and has been adapted for Hildr-node.
The devnet environment is built on the foundation of the locally available Optimism Bedrock devnet. Essentially, this environment runs op-geth
and geth
node in development mode, excluding the PoS client, and without finality. This is why the --devnet
flag for Hildr node is necessary. This flag allows for the acceptance of any block as finalized. Otherwise, the Hildr node would operate exclusively with finalized blocks.
The devnet environment for Hildr node connects to the initiated OP L1 devnet node and launches its own corresponding op-geth
node from the Hildr node docker.
Begin by cloning the Optimism repository:
git clone git@github.com:ethereum-optimism/optimism.git
The develop
branch is typically suitable. However, if issues arise, consider using the specific revision 18bcfb0dcc16de4287cb614f0a0b7bb3c276cbd3
.
To launch the OP devnet, ensure you have Docker, Golang v1.20.11, [python3]:
cd optimism
git submodule update --init --recursive
make install-geth
make cannon-prestate
make devnet-up
If building action has failed, could try to repeat executing make build
command until it is success.
For troubleshooting, please refer to the official documentation.
Once you have successfully started the OP devnet docker containers, proceed to the next step: launching an op-geth
L2 instance for Hildr node.
Navigate to the hildr/docker
directory and copy the configuration:
cp .env.default .env
Edit the .env
file located within the directory:
# Set the network value to `devnet` in the configuration.
NETWORK=devnet
# To avoid potential conflicts with the default ports in the OP devnet, it's recommended to modify the RPC ports.
# The exeuction client Auth RPC port.
EXECUTION_CLIENT_AUTH_RPC_PORT=5551
# The execution client RPC port.
EXECUTION_CLIENT_RPC_PORT=5545
# The execution client WebSocket port.
EXECUTION_CLIENT_WS_PORT=5546
# Only for `custom` or `devnet` network.
# Specify the path to the `genesis-l2.json` file generated by `op-node`.
# For the devnet configuration, this file should be located in the `.devnet` folder within the Optimism directory.
OP_GENESIS_JSON_FILEPATH=<genesis-l2.json file path>
To initiate, start the op-geth
node:
docker-compose up op-geth
Build Hildr:
./gradlew build -x test
Launch Hildr node:
java \
--enable-preview \
-cp hildr-node/build/libs/hildr-node-0.1.0.jar io.optimism.Hildr \
--network <rollup.json file path> \ # Specify the path to the `rollup.json` file, akin to `OP_ROLLUP_JSON_FILEPATH`
--jwt-secret bf549f5188556ce0951048ef467ec93067bc4ea21acebe46ef675cd4e8e015ff \ # Replace only if altered in `.env`.
--l1-rpc-url http://127.0.0.1:8545 \ # This depends on the OP devnet configuration.
--l1-ws-rpc-url ws://127.0.0.1:8546 \ # This depends on the OP devnet configuration.
--l2-rpc-url http://127.0.0.1:5545 \ # As per the Hildr `op-geth` configuration (refer to devnet profile).
--l2-engine-url http://127.0.0.1:5551 \ # As per the Hildr `op-geth` configuration (see devnet profile).
--rpc-port 11545 \ # Choose any available port.
--devnet \ # Indicates it's a devnet.
--sync-mode full # Other modes haven't been tested.
Remember to adjust the parameters as necessary based on your setup and configurations.
If everything is set up successfully, the Hildr node should log a message similar to:
[Tue, 29 Aug 2023 20:12:10] INFO: safe head updated: 312 0xd3c43585a005b6ae5e5fb70eb4bd408a707751a19f2b2fd1def29b36e633f0cc
Let's query our Hildr op-geth
:
cast block latest --rpc-url localhost:5545
Compare the results with from OP devnet L2:
cast block latest --rpc-url localhost:9545
The responses should show approximately equal block heights. A difference of around 10-20 blocks is acceptable.
Additionally, you can retrieve a block hash from the Hildr op-geth
and query this hash in OP L2:
cast block <block hash> --rpc-url localhost:9545
Navigate to the directory optimism/packages/sdk
.
If you have previously built the TypeScript components within packages/
, there's no need to rebuild the SDK. If not, execute the following commands:
pnpm install
pnpm all
Occasionally, you may also need to build packages/core-utils
. If required, follow the same procedure as above for this package.
Deposit
Depositing ETH to your L2 Account:
cast wallet new # Generate a Random Account (for example purposes).
cast balance <address> --rpc-url localhost:5545 # Query the ETH Balance (it should be zero initially)
npx hardhat deposit-eth --amount 1 --to <address> --network devnetL1 --withdraw false # Replace `<address>` with your own address.
Deposit & Withdraw
To simultaneously deposit ETH and initiate a withdrawal:
npx hardhat deposit-eth --amount 1 --to <address> --network devnetL1
Note: This command will withdraw some ETH from pre-deposited accounts on L2. However, it will not withdraw from the provided address as the private key is required for that operation.
To test withdrawal from your account refer to this tutorial.
If the Hildr node stops syncing, you can reset the devnet.
To do this, navigate to the Optimism root directory and run the following command: make devnet-clean
.
Afterward, start again both the devnet and Hildr node.
If the issue continues, please create a new issue on GitHub providing detailed information about the problem.