A simple docker compose script for launching full node for Hashkey Chain.
- 4 Core
- 16 GB+ RAM
- 1TB SSD (NVME Recommended)
- 100 MB/s+ Download
openssl rand -hex 32 > ./jwt/jwt.txtMake a copy of .env.example.testnet named .env.
cp .env.example.testnet .env
# modify .env to your parameters.Or, our team will provide one .env file for your rollup directly.
docker compose --env-file .env up -dlogs for op node
docker compose logs -f nodelogs for op geth
docker compose logs -f gethcurl --location 'localhost:8545' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"method": "eth_syncing",
"param": [],
"id": 2
}'if the node is still syncing, you would see:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"currentBlock": "0x7d0f5",
"healedBytecodeBytes": "0x0",
"healedBytecodes": "0x0",
"healedTrienodeBytes": "0x9d12b",
"healedTrienodes": "0x1197",
"healingBytecode": "0x0",
"healingTrienodes": "0x0",
"highestBlock": "0xd8674",
"startingBlock": "0x6a58f",
"syncedAccountBytes": "0xb1801",
"syncedAccounts": "0x9c1",
"syncedBytecodeBytes": "0x51375",
"syncedBytecodes": "0x34",
"syncedStorage": "0x2b24",
"syncedStorageBytes": "0x225f7a"
}
}or the syncing has completed:
{"jsonrpc":"2.0","id":2,"result":false}curl --location 'localhost:8545' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"id": 2
}'should return something like:
{
"jsonrpc": "2.0",
"id": 2,
"result": "0x2139"
}docker compose downWhen the network upgrades and genesis.json / rollup.json change:
- Update images and config URLs in
.envif needed. Before runningupgrade.sh,NODE_IMAGEmust be set to:Also updateNODE_IMAGE=public.ecr.aws/x7e7q5l8/op-node:v1.16.5
GETH_IMAGEwhen a new op-geth version is required. - Pull new images yourself if the tags changed:
docker compose --env-file .env pull
- Run the upgrade helper (deletes cached configs and restarts; does not wipe chain data):
chmod +x ./upgrade.sh # first time only ./upgrade.sh
The script removes /data/genesis.json and /data/rollup.json from the service volumes, then restarts. Entrypoints will re-download the configs and re-run geth init so fork schedule updates are written into the local chain config.
op-geth is started with --rollup.superchain-upgrades=false so hardfork timestamps come from genesis.json instead of the embedded Superchain registry (no --override.* needed for that path).