Running a Sequencer Node
In this guide, “sequencer node” and “validator” refer to the same operational role from different perspectives.
Ensure the host has persistent volumes for /data/goat and /data/geth, or update your compose file to match your preferred paths.
System Requirements
| Area | Requirement |
|---|---|
| CPU | Equivalent to c5.2xlarge or better |
| Storage | 40 GiB root disk plus a 100 GiB gp3 volume mounted to /data |
| Network | IPv4 Elastic IP or another stable public IPv4 address |
| OS | Linux, such as Ubuntu LTS |
| Tooling | Docker, Docker Compose, and cast |
Open Ports
| Port | Protocol | Source |
|---|---|---|
30303 | UDP | 0.0.0.0/0 |
30303 | TCP | 0.0.0.0/0 |
26656 | TCP | 0.0.0.0/0 |
Deployment
Fetch the compose file
Retrieve the correct docker-compose.yml from the GOAT Network release repository for your target network.
Start the services
Back up /data/goat/config/priv_validator_key.json before continuing. Losing this key can block node recovery.
Validator Registration
There is no public website for validator registration yet. Continue only if you are comfortable with Solidity contract calls and Linux operations.
Generate the creation proof
GOAT_VALIDATOR_OWNER is the node administrator's EVM address. This owner is responsible for locking, redemption, and related validator operations.
Review the generated values
The output includes the validator address, owner address, public key, and signature required for registration.
Confirm the minimum locking threshold
Call creationThreshold() on the Locking contract to get the minimum locking amounts and confirm the owner wallet holds enough assets.
Example mainnet response:
0xbC10000000000000000000000000000000000004 is the official Locking contract. In the response, the zero address represents the native token, Bitcoin. 500000000000000000 is the minimum amount required to create a validator. If the token address is not the zero address, approve the Locking contract before registration so it can spend the required token.
Coordinate final approval
If your target environment still requires whitelisting, complete the approval step with the GOAT Network team before broadcasting the creation transaction.
Register your validator
Call create() on the Locking contract to register the validator. The example below targets mainnet; change ETH_RPC_URL if you are working on another network.
Use the VALIDATOR_PUBKEY and VALIDATOR_SIGNATURE generated in the creation proof step. The same operation is also available in the Hardhat locking task for teams that prefer scripted contract calls.