Immutable zkEVM
Instructions to set up your Immutable zkEVM node.
Requirements
- Setup your Axelar validator
- Minimum hardware requirements: 2 AWS vCPU, 4GB RAM, 100GB free storage space.
- Ubuntu 22.04.1 (tested on 22.04.1)
- Official Documentation
Prerequisites
- Install Docker
- (Optional) If you plan to use WireGuard (see Get access to the Immutable zkEVM partner nodes), install it.
Instructions
Get access to the Immutable zkEVM partner nodes
The Immutable zkEVM blockchain has dedicated nodes that serve as access points for partners wanting to peer with the network. Immutable protects these nodes from bad actors trying to disrupt partner services by putting limits on who can establish a connection.
Partners can choose between a static IP allowlist or a WireGuard tunnel to establish their connections.
The static IP allowlist ensures only a predetermined list of approved IP addresses can establish connections.
The WireGuard tunnel provides partners with a secure and private conduit for their connections to the Immutable zkEVM, without requiring a static IP.
From your vald container, create a transaction with a note that includes a shasum
hash of your static IP.
Send an email to the Immutable team including your static IP and a link to your transaction in the Axelar explorer. For example:
Please add my static IP to the Immutable allowlist:
_STATIC_IP_
See my verfication transaction at:
_LINK_TO_EXPLORER_
The Immutable team will reply with a confirmation that your IP has been added to the allowlist.
Using the WireGuard CLI, create a private and public key for your client.
Using the Axelar CLI, create a transaction with a note that includes a shasum
hash of your public key.
Send an email to the Immutable team including your static IP and a link to your transaction in the Axelar explorer. For example:
Please add my public key to the Immutable WireGuard tunnel:
_WIREGUARD_PUBLIC_KEY_
See my verfication transaction at:
_LINK_TO_EXPLORER_
The Immutable team will reply with a configuration file for your WireGuard client.
Once you receive this file, update the PrivateKey
entry with the contents of your wg-privatekey
file.
Save the WireGuard configuration file in /etc/wireguard/wg0.conf
and use wg-quick
to setup the tunnel.
The output should look something like this:
Setup the Immutable zkEVM node
- Create a data directory.
- Pull the Docker image.
- Initialise the node.
- Start the Immutable zkEVM node as a service
Verify your deployment
- Check the logs.
The following logs indicate you are synching from the genesis block.
- Check the chain ID.
From the container host.
Compare it to the output reported by Immutable nodes.
The output should be:
The output should be:
Understanding the Docker command
The following is a breakdown of the docker command used to start up the Immutable zkEVM node. This information should help node operators adjust the command to their respected environments.
For simplicity, we use the mainnet start up command, but the information applies to both testnet and mainnet.
-d
Detach. This means the container will start without holding on to your terminal.--restart=always
: Always keep it running. This tells the Docker daemon, if the container stops running (e.g., if the host restarts), start it up again.-v <LOCAL_DIR>:<CONTAINER_DIR>
: Mount host directory. This tells docker to map a directory from your host, to a directory inside the container.--name geth
: Name the container. This helps us reference the container later in the docker CLI. If you rundocker ps
you should see the container with an ID and this name.-p <HOST_PORT>:<CONTAINER_PORT>
. Map host port. This tells docker to forward any connections on the host’s<HOST_PORT>
to the container’s<CONTAINER_PORT>
.geth
: Command line. Here starts the command line inside the container. This is the binary for theimmutable-geth
instance running inside the container.--config /etc/geth/mainnet.toml
: Pre-baked mainnet configuration. This path MUST NOT BE MODIFIED.--datadir <CONTAINER_DIR>
: Directory path. This is the directorygeth
will use for storage. It MUST match<CONTAINER_DIR>
in the-v
flag. It MUST match the path used in the initialisation commands ran previously.--keystore <CONTAINER_DIR>/keystore
: Keystore path. This is relative to<CONTAINER_DIR>
mentioned above. NOTE: we have a backlog task to potentially remove this.--networkid 13371
: ChainID. This MUST NOT be modified.--http
: Enable RPC interface.--http.port <CONTAINER_PORT>
: Expose RPC interface in container port<CONTAINER_PORT>
. This MUST match<CONTAINER_PORT>
in the-p
flag above.--http.addr "0.0.0.0"
. Expose the RPC interface in all network addresses.
Configure vald
In order for vald
to connect to your Immutable zkEVM node, your rpc_addr
should be exposed in
vald’s config.toml