[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1488":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":16,"starSnapshotCount":16,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},1488,"node","inkonchain\u002Fnode","inkonchain","How to run an Ink Node","https:\u002F\u002Fdocs.inkonchain.com",null,"Shell",36574,635,96,15,0,1,68.51,"MIT License",false,"main",[],"2026-06-12 04:00:09","# Ink Node\n\n> Forked and customized from https:\u002F\u002Fgithub.com\u002Fsmartcontracts\u002Fsimple-optimism-node\n\nA Docker Compose setup for running an Ink node on the repository's current\n`op-geth`-based stack, plus the supporting healthcheck and monitoring services.\n\n## Current Status\n\nThis repository currently ships an `op-geth` execution client. The instructions\nbelow are the current `op-geth` runbook for this Compose stack, not the\nlong-term recommendation.\n\nPer Optimism, `op-geth` support ends on May 31, 2026, and nodes still running\nit at the L1 Glamsterdam hardfork will not be able to follow the canonical\nchain. `op-node` is not being deprecated. See the\n[op-geth deprecation notice](https:\u002F\u002Fdocs.optimism.io\u002Fnotices\u002Fop-geth-deprecation)\nand the\n[op-reth configuration guide](https:\u002F\u002Fdocs.optimism.io\u002Fnode-operators\u002Fguides\u002Fconfiguration\u002Fexecution-clients#op-reth-configuration).\n\nIf you operate a production or long-lived node, start planning an `op-reth`\nmigration now. Run it in parallel, validate it over a meaningful window, and\nprepare a fresh snapshot before the hardfork window. Treat this as an\noperator-owned migration rather than something to delay until a later\nsequencer-side client switch.\n\nThis repository does not yet ship an `op-reth` Compose path. Before it can, the\nrepo still needs:\n\n- a validated `op-reth` service, image, and entrypoint in `docker-compose.yml`\n- an `op-node` engine endpoint that no longer points at `http:\u002F\u002Fop-geth:8551`\n- archive init and snapshot handling that can consume `op-reth` snapshots where\n  available. The checked Sepolia Ink Gelato index already exposes\n  `reth\u002Ffull\u002Fdatadir` artifacts, but this repo does not use them yet and the\n  checked mainnet Ink index still only exposes geth archives\n- healthcheck and monitoring updates, which still target `op-geth` and the\n  `opgeth` InfluxDB database\n- env and port naming that no longer assumes `op-geth`, such as\n  `PORT__OP_GETH_*` and `envs\u002F*\u002Fop-geth.env`\n\n## Recommended Hardware\n\n### Mainnet\n\n- 16GB+ RAM\n- 2 TB SSD (NVME recommended)\n- 100 Mbps+ download\n\n### Testnet\n\n- 16GB+ RAM\n- 500 GB SSD (NVME recommended)\n- 100 Mbps+ download\n\n## Prerequisites\n\n- Docker Engine and Docker Compose v2 on Linux, or Docker Desktop on macOS and\n  Windows\n- Working L1 execution RPC and L1 beacon API endpoints for the Ethereum network\n  that matches your target Ink network\n- Enough free disk for your chosen node type\n\nOn Apple Silicon, the `healthcheck` sidecar runs as `linux\u002Famd64`. Docker\nDesktop handles this automatically, but the first startup can take longer.\n\n### Ubuntu install\n\n> If you are not logged in as root, log out and back in after adding yourself to\n> the `docker` group.\n\n```sh\nsudo apt-get update\nsudo apt-get upgrade -y\n\nsudo apt-get install -y curl gnupg ca-certificates lsb-release\n\nsudo mkdir -p \u002Fetc\u002Fapt\u002Fkeyrings\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n\necho \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\nsudo apt-get update\nsudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin\nsudo usermod -aG docker $(whoami)\n```\n\nVerify Docker after logging back in:\n\n```sh\ndocker ps\n```\n\n## Quick Start\n\n### 1. Clone the repo\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002Finkonchain\u002Fnode\ncd node\n```\n\n### 2. Copy the env template\n\n```sh\ncp .env.example .env\n```\n\n### 3. Edit `.env`\n\nFor the lowest-friction first run on the current `op-geth` stack, start with\n`ink-sepolia` and a `full` node:\n\n```sh\nNETWORK_NAME=ink-sepolia\nNODE_TYPE=full\nOP_NODE__RPC_ENDPOINT=\u003Cyour Sepolia execution RPC>\nOP_NODE__L1_BEACON=\u003Cyour Sepolia beacon API>\nOP_NODE__RPC_TYPE=basic\nHEALTHCHECK__REFERENCE_RPC_PROVIDER=https:\u002F\u002Frpc-gel-sepolia.inkonchain.com\n```\n\nConfiguration notes:\n\n- `NETWORK_NAME`: `ink-sepolia` or `ink-mainnet`\n- `NODE_TYPE=full`: starts from an empty local datadir. This is the validated\n  first-run path in this repo\n- `NODE_TYPE=archive`: resolves the newest archival geth datadir for the\n  current `op-geth` stack from the Gelato ChainSnap index for your network,\n  downloads the matching `.sha256`, verifies the archive, and extracts it\n  during `bedrock-init`\n- `OP_NODE__RPC_TYPE=basic`: the right default for generic providers; use\n  `alchemy`, `quicknode`, or `erigon` only when your provider requires it\n- `.env` overrides the same variable for services that load `.env` in\n  `docker-compose.yml`, including `op-geth`, `op-node`, `healthcheck`, and\n  `bedrock-init`\n- `envs\u002F\u003Cnetwork>\u002Fop-node.env` already supplies the network P2P defaults, so\n  most first-time setups only need the `.env` values above\n- `PORT__OP_NODE_P2P` changes the published host port in `docker-compose.yml`.\n  The in-container `op-node` listener still uses `9003`\n- For `ink-mainnet`, switch the healthcheck reference RPC to\n  `https:\u002F\u002Frpc-gel.inkonchain.com`\n- Advanced wrapper inputs such as `OVERRIDE_HOLOCENE` and `EXTENDED_ARG` live\n  in `.env.example`. The shell entrypoints append them to both `op-geth` and\n  `op-node`, so leave them empty unless you know the flag is compatible with\n  the process you want to change\n\n### 4. Start the stack\n\n```sh\ndocker compose up -d --build\n```\n\nThis pulls the service images, builds the local `bedrock-init` image, creates a\nJWT, and starts:\n\n- `bedrock-init` (one-time init)\n- `op-geth` (current execution client in this repo)\n- `op-node`\n- `healthcheck`\n- `prometheus`\n- `grafana`\n- `influxdb`\n\n`op-geth` and `op-node` both wait for `bedrock-init` to create\n`\u002Fshared\u002Finitialized.txt`. If the stack looks stuck, check `bedrock-init`\nfirst.\n\n## Validate Startup\n\n### Check service status\n\n```sh\ndocker compose ps\n```\n\nExpect the long-running services to be `Up`. `bedrock-init` is a one-time init\ncontainer, so it will usually disappear from default `docker compose ps` output\nonce it exits. If you want to confirm it finished successfully, run\n`docker compose ps -a` and check that `bedrock-init` exited with code `0`.\n\n### Check the key logs\n\n```sh\ndocker compose logs --tail 50 bedrock-init op-geth op-node\n```\n\nGood startup signals:\n\n- `bedrock-init` on first boot: `Creating JWT...` and `Creating Bedrock flag...`\n- `bedrock-init` on restart with existing volumes: `Bedrock node already initialized`\n- `op-geth`: `HTTP server started`\n- `op-node`: `Rollup node started`\n\n### Smoke test the RPC endpoints\n\nExecution RPC for the current `op-geth` service:\n\n```sh\ncurl -fsS -X POST -H \"Content-Type: application\u002Fjson\" --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":1}' http:\u002F\u002F127.0.0.1:9993\n```\n\nRollup node RPC:\n\n```sh\ncurl -fsS -X POST -H \"Content-Type: application\u002Fjson\" --data '{\"jsonrpc\":\"2.0\",\"method\":\"rpc_modules\",\"params\":[],\"id\":1}' http:\u002F\u002F127.0.0.1:9545\n```\n\nOn `ink-sepolia`, a healthy reply includes the `optimism`, `opp2p`, and\n`health` modules.\n\nSync status:\n\n```sh\ncurl -fsS -X POST -H \"Content-Type: application\u002Fjson\" --data '{\"jsonrpc\":\"2.0\",\"method\":\"optimism_syncStatus\",\"params\":[],\"id\":1}' http:\u002F\u002F127.0.0.1:9545\n```\n\nOn a brand-new `full` node, this is the best early signal that the rollup node\nis moving forward. Look for `current_l1` and `head_l1` values to advance even\nwhile local L2 block height is still `0x0`.\n\nHealthcheck metrics:\n\n```sh\ncurl -fsS http:\u002F\u002F127.0.0.1:7300\u002Fmetrics | grep -E 'healthcheck_(reference_height|target_height|height_difference)'\n```\n\nOn a brand-new `full` node, `eth_blockNumber` can stay at `0x0` for a while.\nThat is expected. During that window it is also normal for\n`healthcheck_target_height` to stay at `0`. Use `optimism_syncStatus` and the\nhealthcheck metrics to confirm the node is moving forward during early sync.\n\n### Open Grafana\n\nGrafana is available at [http:\u002F\u002Flocalhost:3000](http:\u002F\u002Flocalhost:3000).\n\n- Username: `admin`\n- Password: `ink`\n\nThe preloaded dashboard is `Simple Node Dashboard`.\n\n## Operating The Node\n\n### View logs\n\n```sh\ndocker compose logs -f --tail 50\n```\n\nOr for a single service:\n\n```sh\ndocker compose logs -f --tail 50 op-node\n```\n\n### Stop\n\n```sh\ndocker compose down\n```\n\nThis stops the stack without removing data volumes.\n\n### Restart\n\n```sh\ndocker compose restart\n```\n\n### Upgrade\n\n```sh\ngit pull\ndocker compose pull\ndocker compose up -d --build\n```\n\n### Wipe All Data\n\n```sh\ndocker compose down -v\n```\n\nThis removes all local chain and monitoring data.\n\n## Monitoring\n\n### Estimate remaining sync time\n\n`progress.sh` uses Foundry's `cast` on the host machine.\n\nThe `bedrock-init` container installs Foundry for its own image build, but that\ndoes not make `cast` available on your host shell. Install Foundry locally if\nyou want to use `progress.sh`.\n\nInstall Foundry from [https:\u002F\u002Fgetfoundry.sh\u002F](https:\u002F\u002Fgetfoundry.sh\u002F) and then\nrun:\n\n```sh\n.\u002Fprogress.sh\n```\n\nOn a brand-new `full` node, `.\u002Fprogress.sh` can return `Error: Not syncing`\nwhile `eth_blockNumber` is still `0x0`. In that phase, use\n`optimism_syncStatus` and the healthcheck metrics from the validation section,\nthen retry the script after the local block height starts moving.\n\nIf you do not want to install `cast`, use the RPC and metrics checks above\ninstead.\n\n## Troubleshooting\n\n### `bedrock-init` exits quickly on a full node\n\nThat is expected. `full` nodes do not download a snapshot. If you want a\nsnapshot restore path, switch to `NODE_TYPE=archive`.\n\n### `bedrock-init` says `Bedrock node already initialized`\n\nThat means the stack is reusing existing Docker volumes. This is expected on\nrestarts. If you intentionally want a clean first-boot flow, wipe the volumes:\n\n```sh\ndocker compose down -v\n```\n\n### `bedrock-init` takes a long time on an archive node\n\nThat is expected while the snapshot is downloading and extracting. Check:\n\n```sh\ndocker compose logs -f bedrock-init\n```\n\nIf image pulls or snapshot downloads fail, make sure the host can reach:\n\n- `docker.io`\n- `us-docker.pkg.dev`\n- `ink.t.snapshots.gelato.cloud`\n- `ink.snapshots.gelato.cloud`\n\nArchive geth snapshots for the current stack are resolved from these indexes:\n\n- Sepolia: [https:\u002F\u002Fink.t.snapshots.gelato.cloud\u002Findex.html](https:\u002F\u002Fink.t.snapshots.gelato.cloud\u002Findex.html)\n- Mainnet: [https:\u002F\u002Fink.snapshots.gelato.cloud\u002Findex.html](https:\u002F\u002Fink.snapshots.gelato.cloud\u002Findex.html)\n\n`bedrock-init` downloads the matching `.sha256` file and verifies the archive\nbefore extraction. This is still a geth datadir path, not an `op-reth`\nbootstrap flow.\n\nAt the time of this docs refresh, the Sepolia Ink Gelato index also exposes\n`reth\u002Ffull\u002Fdatadir` artifacts, but the checked mainnet Ink index does not yet\nshow `reth` artifacts. This repository does not consume those `reth` snapshots\nyet.\n\nIf `bedrock-init` exits with `Failed to resolve latest snapshot` or\n`Unexpected snapshot filename format`, the index is unreachable or its format\nchanged. Switch back to `NODE_TYPE=full` and retry, or pick a direct archive\nfrom the index page and update the script before retrying.\n\nIf `bedrock-init` exits with `Unexpected checksum file format`,\n`Checksum file does not match downloaded archive`, or `SHA256 verification\nfailed`, do not reuse that download. Retry later or verify the checksum file\nfrom the index page before attempting another restore.\n\n### `eth_blockNumber` stays at `0x0` right after startup\n\nThat is normal for a fresh `full` node. Check the rollup node instead:\n\n```sh\ncurl -fsS -X POST -H \"Content-Type: application\u002Fjson\" --data '{\"jsonrpc\":\"2.0\",\"method\":\"optimism_syncStatus\",\"params\":[],\"id\":1}' http:\u002F\u002F127.0.0.1:9545\n```\n\n### `.\u002Fprogress.sh` says `Error: Not syncing`\n\nThat is expected during the earliest part of a fresh `full` node bootstrap. The\nscript samples `eth_blockNumber` twice over 10 seconds, so it cannot estimate\nsync speed until the local execution client starts importing blocks. Use\n`optimism_syncStatus` and the healthcheck metrics first, then retry later.\n\n### `op-node` cannot connect to L1\n\nDouble-check:\n\n- `OP_NODE__RPC_ENDPOINT`\n- `OP_NODE__L1_BEACON`\n- `OP_NODE__RPC_TYPE`\n\nThen restart the stack:\n\n```sh\ndocker compose down\ndocker compose up -d --build\n```\n\n### `error dialing static peer` appears in `op-node` logs\n\nThat can happen during early bootstrap if a configured static peer is\ntemporarily unavailable. If `optimism_syncStatus.current_l1` keeps advancing,\nthe node is still making progress. If those errors continue and `current_l1`\nstops moving, inspect `envs\u002F\u003Cnetwork>\u002Fop-node.env` and your outbound network\naccess.\n\n### `Walking back L1Block` appears in the logs\n\nA few reset lines during first startup are normal. If the node keeps printing\nthem without any L1 progress, verify the L1 endpoints above and restart the\nstack.\n","Inkonchain\u002Fnode 是一个用于运行 Ink 节点的 Docker Compose 配置项目。它基于 `op-geth` 栈，提供了一个易于部署和管理的 Ink 节点环境，并且包含了健康检查和监控服务。该项目使用 Shell 语言编写，支持在 Linux、macOS 和 Windows 上通过 Docker 运行。适合需要搭建以太坊二层网络节点的开发者或团队使用，特别是那些希望快速启动并维护 Ink 网络节点的用户。需要注意的是，当前版本依赖于即将被弃用的 `op-geth`，建议长期运营者提前规划向 `op-reth` 的迁移。",2,"2026-06-11 02:44:05","top_all"]