Install Core-Geth
Install Core-Geth and run an Ethereum Classic node
This guide takes a machine with nothing installed to a node that has caught up with the Ethereum Classic network and holds peers, on the latest v1.13 release or a build of the main branch.
Replacing a node that runs a v1.12 release? Follow Migrate Core-Geth instead: a node that ran v1.12 needs a new P2P node key before it starts again, and the steps here start a node on the key it has.
Before you install Core-Geth
Check the machine, then choose a route
A full node needs room for the chain, memory and time to sync: the documentation's hardware requirements page has the figures, measured on each network.
- A release archive, for Linux, macOS or Windows. The checksum and build attestation published with it let you check the file before it runs.
- A container image, for a host that already runs containers.
- A build from source of the
mainbranch, on a machine with none of the build tools: the steps install them first.
The start steps run a node on Ethereum Classic; for the Mordor test network, use --mordor in place of --classic. On a first run, Windows names the publisher as unknown and macOS blocks a downloaded binary until it is allowed: the documentation's installation guide says how to proceed on each.
Installing Core-Geth
Install Core-Geth on your platform
Run each block in order, and read the note under it before the next. Every tab ends with the start step: before you run it, check what you downloaded with the commands below.
The start step in the Linux tab carries a recording of the node's first start, made installing v1.13.0.
Every file the latest release published, with its checksum, is listed on Downloads.
Verifying a Core-Geth download
Check what you downloaded
Run these after the download and before the node's first start. The checksum confirms the file arrived intact, and the build attestation names the workflow run that built it and the commit it built from.
Linux
Check the GitHub CLI
Checking where a file came from needs the GitHub CLI, signed in to GitHub. Debian's and Ubuntu's own gh packages are older than 2.49.0, so install or update GitHub's own package, as Installing gh on Linux shows for each distribution. Then confirm the release and the sign-in:
gh --version
gh auth statusgh --version must print 2.49.0 or later, the release that added gh attestation. gh auth status must say you are logged in to github.com. If it does not, run gh auth login. The checksum line in the next step does not need the GitHub CLI.
Check an archive
# 1. Check that the archive arrived intact
sha256sum -c core-geth-linux-v1.13.0.zip.sha256
# core-geth-linux-v1.13.0.zip: OK
# 2. Check where the archive came from
gh attestation verify core-geth-linux-v1.13.0.zip --repo ethereumclassic/core-geth
# Loaded digest sha256:... for file://core-geth-linux-v1.13.0.zip
# Loaded 1 attestation from GitHub API
# ✓ Verification succeeded!
#
# - Attestation #1
# - Build repo:..... ethereumclassic/core-geth
# - Build workflow:. .github/workflows/release-packages.yml@refs/tags/v1.13.0sha256sum -c must print OK. If it prints FAILED, delete the file and download it again rather than running it. gh attestation verify must print Verification succeeded and name .github/workflows/release-packages.yml. If it does not, do not run the file. For another archive, put its name in place of core-geth-linux-v1.13.0.zip, such as core-geth-arm64-v1.13.0.zip.
macOS
Check the GitHub CLI
Checking where a file came from needs the GitHub CLI, signed in to GitHub. Install or update it with Homebrew, brew install gh, or with the macOS installer from GitHub's releases. Then confirm the release and the sign-in:
gh --version
gh auth statusgh --version must print 2.49.0 or later, the release that added gh attestation. gh auth status must say you are logged in to github.com. If it does not, run gh auth login. The checksum line in the next step does not need the GitHub CLI.
Check an archive
shasum -a 256 -c core-geth-osx-arm64-v1.13.0.zip.sha256
gh attestation verify core-geth-osx-arm64-v1.13.0.zip --repo ethereumclassic/core-gethshasum -a 256 -c must print OK. If it prints FAILED, delete the file and download it again rather than running it. gh attestation verify must print Verification succeeded and name .github/workflows/release-packages.yml. If it does not, do not run the file. On an Intel Mac, put osx where the file names say osx-arm64.
Windows
Install or update the GitHub CLI
Checking where a file came from needs the GitHub CLI, signed in to GitHub. In PowerShell, WinGet, which comes with Windows 11, installs it, or updates an older one:
winget install --id GitHub.cli -e --source winget --accept-source-agreements --accept-package-agreementsApprove the prompt the installer shows.
Check the GitHub CLI
In the same window:
$env:Path = [Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [Environment]::GetEnvironmentVariable("Path", "User")
gh --version
gh auth statusThe first line reloads PATH from Windows' settings, so this window finds gh. gh --version must print 2.49.0 or later, the release that added gh attestation. gh auth status must say you are logged in to github.com. If it does not, run gh auth login. The checksum line in the next step does not need the GitHub CLI.
Check an archive
# 1. Check that the archive arrived intact: compare these two lines, in PowerShell
(Get-FileHash "core-geth-win64-v1.13.0.zip" -Algorithm SHA256).Hash
Get-Content "core-geth-win64-v1.13.0.zip.sha256"
# 2. Check where the archive came from
gh attestation verify core-geth-win64-v1.13.0.zip --repo ethereumclassic/core-geth
# Loaded digest sha256:... for file://core-geth-win64-v1.13.0.zip
# Loaded 1 attestation from GitHub API
# ✓ Verification succeeded!
#
# - Attestation #1
# - Build repo:..... ethereumclassic/core-geth
# - Build workflow:. .github/workflows/release-packages.yml@refs/tags/v1.13.0Compare those two lines yourself: the letters must match and the case need not, since Get-FileHash prints uppercase and the .sha256 file holds lowercase followed by the file name. If they differ, delete the file and download it again rather than running it. gh attestation verify must print Verification succeeded and name .github/workflows/release-packages.yml. If it does not, do not run the file.
Containers
Check Docker and the GitHub CLI
These steps need Docker to load the image, and the GitHub CLI to check where the image came from:
docker version --format '{{.Server.Version}}'
gh --version
gh auth statusThe first line must print the Docker engine's version. An error in its place means Docker is not installed or not running: Get Docker says how to install it. gh --version must print 2.49.0 or later, the release that added gh attestation. gh auth status must say you are logged in to github.com. If it does not, run gh auth login. Install or update the GitHub CLI from cli.github.com. On Debian and Ubuntu, take GitHub's own package: theirs are older than 2.49.0.
Check an image file
curl -LO https://github.com/ethereumclassic/core-geth/releases/download/v1.13.0/core-geth-docker-amd64-v1.13.0.tar.gz
curl -LO https://github.com/ethereumclassic/core-geth/releases/download/v1.13.0/core-geth-docker-amd64-v1.13.0.tar.gz.sha256
sha256sum -c core-geth-docker-amd64-v1.13.0.tar.gz.sha256
gh attestation verify core-geth-docker-amd64-v1.13.0.tar.gz --repo ethereumclassic/core-gethOn an Arm64 host, put docker-arm64 where the file name says docker-amd64. sha256sum -c must print OK: if it prints FAILED, delete the file and download it again rather than loading it. gh attestation verify must print Verification succeeded and name .github/workflows/docker-publish.yml. If it does not, do not load the file.
Load the image
docker load -i core-geth-docker-amd64-v1.13.0.tar.gzThe loaded image keeps its published name, with v1.13.0 as its tag and no latest tag. Use that name in place of latest in a docker run command, because a command that names latest makes Docker pull from the registry.
Source
Check a build from source on Linux
Check the commit you built
git rev-parse HEAD
go version -m ./build/bin/geth | grep vcs.revisionRun these in the clone: the first line is the commit you checked out and the second is the commit the binary was built from. Both lines must name the same commit.
How do I verify a download?Check a build from source on macOS
Check the commit you built
git rev-parse HEAD
go version -m ./build/bin/geth | grep vcs.revisionRun these in the clone: the first line is the commit you checked out and the second is the commit the binary was built from. Both lines must name the same commit.
How do I verify a download?Check a build from source on Windows
Check the commit you built
git rev-parse HEAD
go version -m .\build\bin\geth.exe | Select-String vcs.revisionRun these in the clone: the first line is the commit you checked out and the second is the commit the binary was built from. Both lines must name the same commit.
How do I verify a download?Running a Core-Geth node
Once the node is running
On its first start, the node finds peers through the discovery lists and bootnodes built into the release, and syncs the chain from them.
- Check that it has caught up. Attach to the node:
eth.syncingreturnsfalseonce it has caught up with the network, andnet.peerCountabove zero means it holds peers. How to tell it is done has the commands. - No peers after five minutes? Why does the node have no peers? lists the causes. If the discovery lists and bootnodes have gone dark, start it once from the node records committed in
ethereumclassic/discv4-dns-lists. - Keep it running. The documentation's run guides set up a node that starts on its own: a systemd unit on Linux, a launchd agent on macOS, and a start at sign-in on Windows. Docker has a guide of its own.
- Decide MESS. MESS makes a node resist deep chain reorganizations.
--messturns it on and--mess=falseturns it off, and without either the node uses the setting its release ships with. Which setting fits which operator sets out the choice. Give every node you run the same setting. - Open RPC only for what needs it. The node answers JSON-RPC over IPC by default, and
--httpand--wsopen HTTP and WebSocket endpoints. Before anything outside the machine uses them, start with the documentation's guide for your role: Choose your role. - Stay on the latest release. Releases are published from
ethereumclassic/core-geth. When a new one ships, Downloads has its files and the same steps, and a node that has only ever runv1.13keeps its P2P node key.
Help with Core-Geth
Where to ask
The documentation's Questions and answers covers which repository publishes releases, which version to run, why node key rotation is required, public RPC endpoints and how to verify a download. The core developers answer questions on Discord, defects go in the repository's issues, and a security issue is reported privately.