From ea695dd20a25ce7f7898ace033d7ca1f94915ab0 Mon Sep 17 00:00:00 2001 From: Brian McGee Date: Thu, 9 Mar 2023 14:30:57 +0000 Subject: [PATCH] feat: add mkdocs and auto-document nixos module types (#147) --- .gitignore | 5 +- LICENSE.md | 1 + README.md | 10 +- docs/assets/favicon.png | Bin 0 -> 15479 bytes docs/assets/logo.svg | 1 + docs/contributing.md | 136 +++++++ docs/index.md | 10 + LICENSE => docs/license.md | 0 flake.nix | 1 + mkdocs.nix | 46 +++ mkdocs.yml | 59 +++ modules/clients/consensus/default.nix | 5 - modules/clients/consensus/prysm/beacon.nix | 259 ------------- modules/clients/consensus/prysm/default.nix | 5 - modules/clients/default.nix | 6 - modules/clients/execution/default.nix | 7 - modules/clients/execution/geth/bootnode.nix | 200 ---------- modules/clients/execution/geth/default.nix | 6 - modules/clients/execution/geth/geth.nix | 342 ------------------ .../clients/execution/nethermind/default.nix | 318 ---------------- modules/default.nix | 6 +- modules/erigon/args.nix | 214 +++++++++++ .../erigon.nix => erigon/default.nix} | 21 +- modules/erigon/options.nix | 51 +++ modules/geth-bootnode/args.nix | 65 ++++ modules/geth-bootnode/default.nix | 103 ++++++ .../default.test.nix} | 2 +- modules/geth-bootnode/options.nix | 41 +++ .../{clients/execution => }/geth/README.md | 0 modules/geth/args.nix | 176 +++++++++ .../execution => }/geth/backup.test.nix | 0 modules/geth/default.nix | 123 +++++++ .../geth.test.nix => geth/default.test.nix} | 0 modules/geth/options.nix | 53 +++ .../execution => }/geth/restore.test.nix | 0 .../testing/datadir/20/.backup/content-hash | 0 .../datadir/20/geth/chaindata/000014.ldb | Bin .../datadir/20/geth/chaindata/000015.ldb | Bin .../datadir/20/geth/chaindata/000018.ldb | Bin .../datadir/20/geth/chaindata/000019.log | Bin .../testing/datadir/20/geth/chaindata/CURRENT | 0 .../datadir/20/geth/chaindata/CURRENT.bak | 0 .../testing/datadir/20/geth/chaindata/LOCK | 0 .../testing/datadir/20/geth/chaindata/LOG | 0 .../datadir/20/geth/chaindata/MANIFEST-000020 | Bin .../20/geth/chaindata/ancient/chain/FLOCK | 0 .../chaindata/ancient/chain/bodies.0000.cdat | 0 .../geth/chaindata/ancient/chain/bodies.cidx | Bin .../geth/chaindata/ancient/chain/bodies.meta | 0 .../chaindata/ancient/chain/diffs.0000.rdat | 0 .../geth/chaindata/ancient/chain/diffs.meta | 0 .../geth/chaindata/ancient/chain/diffs.ridx | Bin .../chaindata/ancient/chain/hashes.0000.rdat | 0 .../geth/chaindata/ancient/chain/hashes.meta | 0 .../geth/chaindata/ancient/chain/hashes.ridx | Bin .../chaindata/ancient/chain/headers.0000.cdat | 0 .../geth/chaindata/ancient/chain/headers.cidx | Bin .../geth/chaindata/ancient/chain/headers.meta | 0 .../ancient/chain/receipts.0000.cdat | 0 .../chaindata/ancient/chain/receipts.cidx | Bin .../chaindata/ancient/chain/receipts.meta | 0 .../datadir/20/geth/lightchaindata/000001.log | Bin .../datadir/20/geth/lightchaindata/CURRENT | 0 .../datadir/20/geth/lightchaindata/LOCK | 0 .../datadir/20/geth/lightchaindata/LOG | 0 .../20/geth/lightchaindata/MANIFEST-000000 | Bin .../geth/lightchaindata/ancient/chain/FLOCK | 0 .../ancient/chain/bodies.0000.cdat | 0 .../lightchaindata/ancient/chain/bodies.cidx | Bin .../lightchaindata/ancient/chain/bodies.meta | 0 .../ancient/chain/diffs.0000.rdat | 0 .../lightchaindata/ancient/chain/diffs.meta | 0 .../lightchaindata/ancient/chain/diffs.ridx | Bin .../ancient/chain/hashes.0000.rdat | 0 .../lightchaindata/ancient/chain/hashes.meta | 0 .../lightchaindata/ancient/chain/hashes.ridx | Bin .../ancient/chain/headers.0000.cdat | 0 .../lightchaindata/ancient/chain/headers.cidx | Bin .../lightchaindata/ancient/chain/headers.meta | 0 .../ancient/chain/receipts.0000.cdat | 0 .../ancient/chain/receipts.cidx | Bin .../ancient/chain/receipts.meta | 0 .../geth/testing/datadir/20/geth/nodekey | 0 .../testing/datadir/20/geth/nodes/000014.ldb | Bin .../testing/datadir/20/geth/nodes/000015.ldb | Bin .../testing/datadir/20/geth/nodes/000016.log | Bin .../testing/datadir/20/geth/nodes/CURRENT | 0 .../testing/datadir/20/geth/nodes/CURRENT.bak | 0 .../geth/testing/datadir/20/geth/nodes/LOCK | 0 .../geth/testing/datadir/20/geth/nodes/LOG | 0 .../datadir/20/geth/nodes/MANIFEST-000017 | Bin .../testing/datadir/20/geth/transactions.rlp | 0 .../datadir/20/geth/triecache/data.0.bin | Bin .../datadir/20/geth/triecache/data.1.bin | 0 .../datadir/20/geth/triecache/data.10.bin | 0 .../datadir/20/geth/triecache/data.11.bin | Bin .../datadir/20/geth/triecache/data.12.bin | Bin .../datadir/20/geth/triecache/data.13.bin | Bin .../datadir/20/geth/triecache/data.14.bin | 0 .../datadir/20/geth/triecache/data.15.bin | Bin .../datadir/20/geth/triecache/data.16.bin | Bin .../datadir/20/geth/triecache/data.17.bin | 0 .../datadir/20/geth/triecache/data.18.bin | 0 .../datadir/20/geth/triecache/data.19.bin | 0 .../datadir/20/geth/triecache/data.2.bin | Bin .../datadir/20/geth/triecache/data.20.bin | 0 .../datadir/20/geth/triecache/data.21.bin | 0 .../datadir/20/geth/triecache/data.22.bin | 0 .../datadir/20/geth/triecache/data.23.bin | Bin .../datadir/20/geth/triecache/data.24.bin | 0 .../datadir/20/geth/triecache/data.25.bin | 0 .../datadir/20/geth/triecache/data.26.bin | 0 .../datadir/20/geth/triecache/data.27.bin | Bin .../datadir/20/geth/triecache/data.28.bin | 0 .../datadir/20/geth/triecache/data.29.bin | Bin .../datadir/20/geth/triecache/data.3.bin | 0 .../datadir/20/geth/triecache/data.30.bin | 0 .../datadir/20/geth/triecache/data.31.bin | Bin .../datadir/20/geth/triecache/data.4.bin | Bin .../datadir/20/geth/triecache/data.5.bin | 0 .../datadir/20/geth/triecache/data.6.bin | 0 .../datadir/20/geth/triecache/data.7.bin | Bin .../datadir/20/geth/triecache/data.8.bin | Bin .../datadir/20/geth/triecache/data.9.bin | Bin .../datadir/20/geth/triecache/metadata.bin | Bin .../testing/datadir/40/.backup/content-hash | 0 .../datadir/40/geth/chaindata/000024.ldb | Bin .../datadir/40/geth/chaindata/000025.log | Bin .../datadir/40/geth/chaindata/000027.ldb | Bin .../testing/datadir/40/geth/chaindata/CURRENT | 0 .../datadir/40/geth/chaindata/CURRENT.bak | 0 .../testing/datadir/40/geth/chaindata/LOCK | 0 .../testing/datadir/40/geth/chaindata/LOG | 0 .../datadir/40/geth/chaindata/MANIFEST-000026 | Bin .../40/geth/chaindata/ancient/chain/FLOCK | 0 .../chaindata/ancient/chain/bodies.0000.cdat | 0 .../geth/chaindata/ancient/chain/bodies.cidx | Bin .../geth/chaindata/ancient/chain/bodies.meta | 0 .../chaindata/ancient/chain/diffs.0000.rdat | 0 .../geth/chaindata/ancient/chain/diffs.meta | 0 .../geth/chaindata/ancient/chain/diffs.ridx | Bin .../chaindata/ancient/chain/hashes.0000.rdat | 0 .../geth/chaindata/ancient/chain/hashes.meta | 0 .../geth/chaindata/ancient/chain/hashes.ridx | Bin .../chaindata/ancient/chain/headers.0000.cdat | 0 .../geth/chaindata/ancient/chain/headers.cidx | Bin .../geth/chaindata/ancient/chain/headers.meta | 0 .../ancient/chain/receipts.0000.cdat | 0 .../chaindata/ancient/chain/receipts.cidx | Bin .../chaindata/ancient/chain/receipts.meta | 0 .../datadir/40/geth/lightchaindata/000001.log | Bin .../datadir/40/geth/lightchaindata/CURRENT | 0 .../datadir/40/geth/lightchaindata/LOCK | 0 .../datadir/40/geth/lightchaindata/LOG | 0 .../40/geth/lightchaindata/MANIFEST-000000 | Bin .../geth/lightchaindata/ancient/chain/FLOCK | 0 .../ancient/chain/bodies.0000.cdat | 0 .../lightchaindata/ancient/chain/bodies.cidx | Bin .../lightchaindata/ancient/chain/bodies.meta | 0 .../ancient/chain/diffs.0000.rdat | 0 .../lightchaindata/ancient/chain/diffs.meta | 0 .../lightchaindata/ancient/chain/diffs.ridx | Bin .../ancient/chain/hashes.0000.rdat | 0 .../lightchaindata/ancient/chain/hashes.meta | 0 .../lightchaindata/ancient/chain/hashes.ridx | Bin .../ancient/chain/headers.0000.cdat | 0 .../lightchaindata/ancient/chain/headers.cidx | Bin .../lightchaindata/ancient/chain/headers.meta | 0 .../ancient/chain/receipts.0000.cdat | 0 .../ancient/chain/receipts.cidx | Bin .../ancient/chain/receipts.meta | 0 .../geth/testing/datadir/40/geth/nodekey | 0 .../testing/datadir/40/geth/nodes/000014.ldb | Bin .../testing/datadir/40/geth/nodes/000015.ldb | Bin .../testing/datadir/40/geth/nodes/000018.ldb | Bin .../testing/datadir/40/geth/nodes/000021.ldb | Bin .../testing/datadir/40/geth/nodes/000022.log | Bin .../testing/datadir/40/geth/nodes/CURRENT | 0 .../testing/datadir/40/geth/nodes/CURRENT.bak | 0 .../geth/testing/datadir/40/geth/nodes/LOCK | 0 .../geth/testing/datadir/40/geth/nodes/LOG | 0 .../datadir/40/geth/nodes/MANIFEST-000023 | Bin .../testing/datadir/40/geth/transactions.rlp | 0 .../datadir/40/geth/triecache/data.0.bin | Bin .../datadir/40/geth/triecache/data.1.bin | Bin .../datadir/40/geth/triecache/data.10.bin | Bin .../datadir/40/geth/triecache/data.11.bin | 0 .../datadir/40/geth/triecache/data.12.bin | 0 .../datadir/40/geth/triecache/data.13.bin | 0 .../datadir/40/geth/triecache/data.14.bin | 0 .../datadir/40/geth/triecache/data.15.bin | 0 .../datadir/40/geth/triecache/data.16.bin | 0 .../datadir/40/geth/triecache/data.17.bin | Bin .../datadir/40/geth/triecache/data.18.bin | Bin .../datadir/40/geth/triecache/data.19.bin | 0 .../datadir/40/geth/triecache/data.2.bin | Bin .../datadir/40/geth/triecache/data.20.bin | Bin .../datadir/40/geth/triecache/data.21.bin | 0 .../datadir/40/geth/triecache/data.22.bin | 0 .../datadir/40/geth/triecache/data.23.bin | 0 .../datadir/40/geth/triecache/data.24.bin | Bin .../datadir/40/geth/triecache/data.25.bin | 0 .../datadir/40/geth/triecache/data.26.bin | Bin .../datadir/40/geth/triecache/data.27.bin | Bin .../datadir/40/geth/triecache/data.28.bin | Bin .../datadir/40/geth/triecache/data.29.bin | 0 .../datadir/40/geth/triecache/data.3.bin | Bin .../datadir/40/geth/triecache/data.30.bin | Bin .../datadir/40/geth/triecache/data.31.bin | Bin .../datadir/40/geth/triecache/data.4.bin | 0 .../datadir/40/geth/triecache/data.5.bin | 0 .../datadir/40/geth/triecache/data.6.bin | 0 .../datadir/40/geth/triecache/data.7.bin | 0 .../datadir/40/geth/triecache/data.8.bin | 0 .../datadir/40/geth/triecache/data.9.bin | 0 .../datadir/40/geth/triecache/metadata.bin | Bin .../testing/datadir/63/.backup/content-hash | 0 .../datadir/63/geth/chaindata/000037.ldb | Bin .../datadir/63/geth/chaindata/000038.log | Bin .../datadir/63/geth/chaindata/000040.ldb | Bin .../testing/datadir/63/geth/chaindata/CURRENT | 0 .../datadir/63/geth/chaindata/CURRENT.bak | 0 .../testing/datadir/63/geth/chaindata/LOCK | 0 .../testing/datadir/63/geth/chaindata/LOG | 0 .../datadir/63/geth/chaindata/MANIFEST-000039 | Bin .../63/geth/chaindata/ancient/chain/FLOCK | 0 .../chaindata/ancient/chain/bodies.0000.cdat | 0 .../geth/chaindata/ancient/chain/bodies.cidx | Bin .../geth/chaindata/ancient/chain/bodies.meta | 0 .../chaindata/ancient/chain/diffs.0000.rdat | 0 .../geth/chaindata/ancient/chain/diffs.meta | 0 .../geth/chaindata/ancient/chain/diffs.ridx | Bin .../chaindata/ancient/chain/hashes.0000.rdat | 0 .../geth/chaindata/ancient/chain/hashes.meta | 0 .../geth/chaindata/ancient/chain/hashes.ridx | Bin .../chaindata/ancient/chain/headers.0000.cdat | 0 .../geth/chaindata/ancient/chain/headers.cidx | Bin .../geth/chaindata/ancient/chain/headers.meta | 0 .../ancient/chain/receipts.0000.cdat | 0 .../chaindata/ancient/chain/receipts.cidx | Bin .../chaindata/ancient/chain/receipts.meta | 0 .../datadir/63/geth/lightchaindata/000001.log | Bin .../datadir/63/geth/lightchaindata/CURRENT | 0 .../datadir/63/geth/lightchaindata/LOCK | 0 .../datadir/63/geth/lightchaindata/LOG | 0 .../63/geth/lightchaindata/MANIFEST-000000 | Bin .../geth/lightchaindata/ancient/chain/FLOCK | 0 .../ancient/chain/bodies.0000.cdat | 0 .../lightchaindata/ancient/chain/bodies.cidx | Bin .../lightchaindata/ancient/chain/bodies.meta | 0 .../ancient/chain/diffs.0000.rdat | 0 .../lightchaindata/ancient/chain/diffs.meta | 0 .../lightchaindata/ancient/chain/diffs.ridx | Bin .../ancient/chain/hashes.0000.rdat | 0 .../lightchaindata/ancient/chain/hashes.meta | 0 .../lightchaindata/ancient/chain/hashes.ridx | Bin .../ancient/chain/headers.0000.cdat | 0 .../lightchaindata/ancient/chain/headers.cidx | Bin .../lightchaindata/ancient/chain/headers.meta | 0 .../ancient/chain/receipts.0000.cdat | 0 .../ancient/chain/receipts.cidx | Bin .../ancient/chain/receipts.meta | 0 .../geth/testing/datadir/63/geth/nodekey | 0 .../testing/datadir/63/geth/nodes/000027.ldb | Bin .../testing/datadir/63/geth/nodes/000028.ldb | Bin .../testing/datadir/63/geth/nodes/000031.ldb | Bin .../testing/datadir/63/geth/nodes/000034.ldb | Bin .../testing/datadir/63/geth/nodes/000035.log | Bin .../testing/datadir/63/geth/nodes/CURRENT | 0 .../testing/datadir/63/geth/nodes/CURRENT.bak | 0 .../geth/testing/datadir/63/geth/nodes/LOCK | 0 .../geth/testing/datadir/63/geth/nodes/LOG | 0 .../datadir/63/geth/nodes/MANIFEST-000036 | Bin .../testing/datadir/63/geth/transactions.rlp | 0 .../datadir/63/geth/triecache/data.0.bin | 0 .../datadir/63/geth/triecache/data.1.bin | 0 .../datadir/63/geth/triecache/data.10.bin | 0 .../datadir/63/geth/triecache/data.11.bin | 0 .../datadir/63/geth/triecache/data.12.bin | 0 .../datadir/63/geth/triecache/data.13.bin | 0 .../datadir/63/geth/triecache/data.14.bin | 0 .../datadir/63/geth/triecache/data.15.bin | 0 .../datadir/63/geth/triecache/data.16.bin | 0 .../datadir/63/geth/triecache/data.17.bin | 0 .../datadir/63/geth/triecache/data.18.bin | 0 .../datadir/63/geth/triecache/data.19.bin | Bin .../datadir/63/geth/triecache/data.2.bin | 0 .../datadir/63/geth/triecache/data.20.bin | Bin .../datadir/63/geth/triecache/data.21.bin | 0 .../datadir/63/geth/triecache/data.22.bin | Bin .../datadir/63/geth/triecache/data.23.bin | Bin .../datadir/63/geth/triecache/data.24.bin | 0 .../datadir/63/geth/triecache/data.25.bin | Bin .../datadir/63/geth/triecache/data.26.bin | Bin .../datadir/63/geth/triecache/data.27.bin | Bin .../datadir/63/geth/triecache/data.28.bin | Bin .../datadir/63/geth/triecache/data.29.bin | 0 .../datadir/63/geth/triecache/data.3.bin | 0 .../datadir/63/geth/triecache/data.30.bin | 0 .../datadir/63/geth/triecache/data.31.bin | Bin .../datadir/63/geth/triecache/data.4.bin | 0 .../datadir/63/geth/triecache/data.5.bin | 0 .../datadir/63/geth/triecache/data.6.bin | 0 .../datadir/63/geth/triecache/data.7.bin | 0 .../datadir/63/geth/triecache/data.8.bin | Bin .../datadir/63/geth/triecache/data.9.bin | Bin .../datadir/63/geth/triecache/metadata.bin | Bin .../execution => }/geth/testing/genesis.json | 0 .../geth/testing/keys/alpha.key | 0 .../execution => }/geth/testing/keys/beta.key | 0 .../geth/testing/keys/delta.key | 0 modules/nethermind/args.nix | 121 +++++++ modules/nethermind/default.nix | 154 ++++++++ .../default.test.nix} | 0 modules/nethermind/options.nix | 53 +++ modules/prysm-beacon/args.nix | 107 ++++++ modules/prysm-beacon/default.nix | 110 ++++++ modules/prysm-beacon/options.nix | 53 +++ nix/default.nix | 2 +- nix/shell.nix | 10 +- reference.nix | 31 ++ 321 files changed, 1743 insertions(+), 1170 deletions(-) create mode 100644 LICENSE.md create mode 100644 docs/assets/favicon.png create mode 100644 docs/assets/logo.svg create mode 100644 docs/contributing.md create mode 100644 docs/index.md rename LICENSE => docs/license.md (100%) create mode 100644 mkdocs.nix create mode 100644 mkdocs.yml delete mode 100644 modules/clients/consensus/default.nix delete mode 100644 modules/clients/consensus/prysm/beacon.nix delete mode 100644 modules/clients/consensus/prysm/default.nix delete mode 100644 modules/clients/default.nix delete mode 100644 modules/clients/execution/default.nix delete mode 100644 modules/clients/execution/geth/bootnode.nix delete mode 100644 modules/clients/execution/geth/default.nix delete mode 100644 modules/clients/execution/geth/geth.nix delete mode 100644 modules/clients/execution/nethermind/default.nix create mode 100644 modules/erigon/args.nix rename modules/{clients/execution/erigon.nix => erigon/default.nix} (96%) create mode 100644 modules/erigon/options.nix create mode 100644 modules/geth-bootnode/args.nix create mode 100644 modules/geth-bootnode/default.nix rename modules/{clients/execution/geth/bootnode.test.nix => geth-bootnode/default.test.nix} (90%) create mode 100644 modules/geth-bootnode/options.nix rename modules/{clients/execution => }/geth/README.md (100%) create mode 100644 modules/geth/args.nix rename modules/{clients/execution => }/geth/backup.test.nix (100%) create mode 100644 modules/geth/default.nix rename modules/{clients/execution/geth/geth.test.nix => geth/default.test.nix} (100%) create mode 100644 modules/geth/options.nix rename modules/{clients/execution => }/geth/restore.test.nix (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/.backup/content-hash (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/000014.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/000015.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/000018.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/000019.log (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/CURRENT (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/CURRENT.bak (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/LOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/LOG (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/MANIFEST-000020 (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/FLOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/000001.log (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/CURRENT (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/LOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/LOG (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/MANIFEST-000000 (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/FLOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/nodekey (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/nodes/000014.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/nodes/000015.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/nodes/000016.log (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/nodes/CURRENT (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/nodes/CURRENT.bak (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/nodes/LOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/nodes/LOG (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/nodes/MANIFEST-000017 (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/transactions.rlp (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.0.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.1.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.10.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.11.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.12.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.13.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.14.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.15.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.16.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.17.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.18.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.19.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.2.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.20.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.21.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.22.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.23.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.24.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.25.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.26.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.27.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.28.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.29.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.3.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.30.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.31.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.4.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.5.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.6.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.7.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.8.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/data.9.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/20/geth/triecache/metadata.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/.backup/content-hash (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/000024.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/000025.log (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/000027.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/CURRENT (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/CURRENT.bak (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/LOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/LOG (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/MANIFEST-000026 (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/FLOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/000001.log (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/CURRENT (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/LOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/LOG (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/MANIFEST-000000 (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/FLOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodekey (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/000014.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/000015.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/000018.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/000021.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/000022.log (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/CURRENT (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/CURRENT.bak (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/LOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/LOG (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/nodes/MANIFEST-000023 (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/transactions.rlp (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.0.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.1.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.10.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.11.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.12.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.13.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.14.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.15.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.16.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.17.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.18.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.19.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.2.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.20.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.21.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.22.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.23.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.24.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.25.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.26.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.27.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.28.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.29.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.3.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.30.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.31.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.4.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.5.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.6.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.7.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.8.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/data.9.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/40/geth/triecache/metadata.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/.backup/content-hash (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/000037.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/000038.log (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/000040.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/CURRENT (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/CURRENT.bak (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/LOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/LOG (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/MANIFEST-000039 (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/FLOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/000001.log (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/CURRENT (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/LOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/LOG (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/MANIFEST-000000 (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/FLOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.0000.rdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.ridx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.0000.cdat (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.cidx (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.meta (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodekey (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/000027.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/000028.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/000031.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/000034.ldb (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/000035.log (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/CURRENT (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/CURRENT.bak (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/LOCK (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/LOG (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/nodes/MANIFEST-000036 (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/transactions.rlp (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.0.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.1.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.10.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.11.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.12.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.13.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.14.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.15.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.16.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.17.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.18.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.19.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.2.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.20.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.21.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.22.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.23.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.24.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.25.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.26.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.27.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.28.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.29.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.3.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.30.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.31.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.4.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.5.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.6.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.7.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.8.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/data.9.bin (100%) rename modules/{clients/execution => }/geth/testing/datadir/63/geth/triecache/metadata.bin (100%) rename modules/{clients/execution => }/geth/testing/genesis.json (100%) rename modules/{clients/execution => }/geth/testing/keys/alpha.key (100%) rename modules/{clients/execution => }/geth/testing/keys/beta.key (100%) rename modules/{clients/execution => }/geth/testing/keys/delta.key (100%) create mode 100644 modules/nethermind/args.nix create mode 100644 modules/nethermind/default.nix rename modules/{clients/execution/nethermind/nethermind.test.nix => nethermind/default.test.nix} (100%) create mode 100644 modules/nethermind/options.nix create mode 100644 modules/prysm-beacon/args.nix create mode 100644 modules/prysm-beacon/default.nix create mode 100644 modules/prysm-beacon/options.nix create mode 100644 reference.nix diff --git a/.gitignore b/.gitignore index 7c699c2b..e2a2e986 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,7 @@ /result* # IDE -.idea/ \ No newline at end of file +.idea/ + +# Generated docs files +docs/modules/reference.md \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..17f96f2a --- /dev/null +++ b/LICENSE.md @@ -0,0 +1 @@ +docs/license.md diff --git a/README.md b/README.md index ef6ce873..3ef7fa10 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ This is an experimental Nix project for integrating the most interesting / important projects in the Ethereum ecosystem as Nix packages / NixOS modules. -Many of the packages found here will be added to `nixpkgs` repository once they're stable / mature enough. But for some others, more experimental ones, they can reside here. +Many of the packages found ~~~~here will be added to `nixpkgs` repository once they're stable / mature enough. But for some others, more experimental ones, they can reside here. This project is developed entirely in [Nix Flakes](https://nixos.wiki/wiki/Flakes). @@ -93,13 +93,17 @@ Optional: [install direnv](https://github.com/direnv/direnv#basic-installation), ## Development -#### Running tests +### Docs + +To serve the docs run `, docs`. You can edit the docs in `./docs`. + +### Running tests To run all tests you can use `nix flake check`, it will build all packages and run all tests. To execute a specific test you can use `, test -h` which will provide more information. -#### Formatting +### Formatting You can manually format using the `format` command like so: diff --git a/docs/assets/favicon.png b/docs/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..cb61beab4d9e52c7b8ab901718daed2f8d2292da GIT binary patch literal 15479 zcmajGbzGI(wg9^5ZlndIySrPuMUas0?vf4(X-Vl4kXC7=MLI-4y1S8%H`m_#o^$TI z_rCWBKV37%96iPyb9_SI~^R+V*G^Y|5LlyBB0stH=+)XIG9qb+5guF$m{(>t6{tq2yr=t98 ziMyRBm9C09rL>c)1tl*VFB=Dy7%HWRtGT6+ri|P_o53$pDr^ID)y>Dz-Nc*K(Ty4k;%^u-7H(#)HqP!gPL7mNm?ox99`2%4 zRA8R+AK>mbmj8zC==Kl!fD!D_8Fo%K4)*_CZsBe7e=LX2{Ey|%)=utDZq`oD|03YO z9r3T}|FIFU?|l5jQEGC{|%@AI>1fa$Jv5i)56Wk z!_~|}*3-h#o%%0MK=~r1;9z29p={x3~&>q94s8&0Mviu@$Xr^|7%v-$==CT z3#hh*DAnJ{|4SA^f6b{lnS&|rzYzKNl!COhx~r3=jXjui(|j&PsUR!O$0^9i$I8X_ zHy9u|A+XoR(nrR`9jxNw;NoEA?$;9}(v5aRfo#J^SpdoVX~H~Ift z57lZ)5wJr=MM&Pp&E3h>=dYo^Rb9)%*i$X?q%X?A!!AKEJ`J5X=wu_t$^L<^2CiCHp@(vP13fzmODR{~u(C{I%de3>NJBdki=N;8EEBo)!N8pKE zfy;qUBAozkEyM;0=zjNL*qL)gbyVKKC}AqBk7P#>U{?-A7r)*@=(Eyjl@i z2VW>`#TOU7lm;tZTMByKy(YXvm}i<+#9?f5UCC^etls)EMdPPB>La%0H*)4a;?_Z; z$Y|4M37N?FKydCucD91>d;!lhGnliPD!NJ)9yXx-_bn>{x6x(Bm-5`(X_7RvX4q8U z6&Kkl*DkHDhp7*?r>V{@NwF+wxyUU%O?k)f%APCT*}E3>_8`R?Z6wWE)oO;e-yS-V$6V+OPidCNql5XGC{+IaZ^) ztLKwjD2!bBXUd2p%ZT@_KF%2pS&r4+fI?fd~Sjgeb^J zYI}b;Sa_q2@0H1ZTx!%3T*8<~`bt(-76w65qJyv~`J+4TlMf#yRXpdjXSthhT~|N2 zUGC4jZRQLwHeITEdR=^)&6wr&v%1_KiCrC0=3qiBq%$rEQ9zI8B+`(SxOqad?U-3r zviAT}DG%}4IV`UV5DQdI+R4?uSO2#4aoFwvl$T1TH9}iwT7XN8j4n_>RZ%I)R z$(xiAhL<%RoT#`&w0ek?L_J1?s8}fg)VHhFR0}(&s?x^p=x~`*bb0x<2r~vf zGet)~xgv@l6MsX!Nwy+){@nEyfop?x%Ir-KSA@y=Y9)3!91EAV6xqv48syFzpQnb+ z77Gnn&$y>u5}IeXun^4J7tfml2Rve=DPKITB=Dhv|_@ceO*+c5aV?=xl)8Ti%dfN z^k$oG^_lpz>mt=FT+=Rysl_p&H8S`mHT{$jh_T+Lgc05S!VZrgeR8E*P^`yEvEma$ zz=iclS;Sx+eXS44s_z{ZB-|!#E>t5l5)y!fJ|%^@+QU+dvvA>zEbX)Q7yO|`82a$| zIC1(jp+PpQ*}J%0szUTVX%KAzN2DxW*E>v!RMD66j8-iwB~ ziBZO8NR*|%bzUVrjEW5Nsj+Y=$dHw$L)AXkzE?4dlij#ec zydj2Yb}K!C1{ECS7-jg31IW4o>!4P5bXOxfTLz~wp1`SbViYBMH-7bS$)GE@6(2-! zYqS?;;BAB~om4Ek1a5>!ld=m(R$KCT5yLY#Y1jsy=kMTBa1g;^$UOjB`3D>yEz|>iOu5qmAG@si@r^ES+p%w3>b1Y-hG5 zD-3E$>)1$@JKCf?W8Be>nAwx;jFgqzltZE%jIf4{Ej zY8ko%tTv)A#I?#fh^x*xF_ANx3d62`yUrM0V&n6-(R?uGvrgzhobHRPVzYh;pW1p5(8wPT>w;U zG*fCsa@Pnxy)Bbh6sjcj6J>A)IECT=gNuJC0TP1+VoWT0Y|%pE4KH)=)1VK`fzgZ6 zu$W+i#=lw~9{rU*+g8 ze8=`p5>d1?DS|#!e1}V+J+XkmilLD8t$TUMLE;`JdS3jYu<$}iF}jfU+%8ee)qTa za80}Qo(K_Wop)gqWN@rHT{tduI4cp#jl6zZNcqgEf}rkClm(3fQ0F0;k@qB<|8{;8 zHeQ`v;;bZGF{>VE+}clO;4#_33Gjnl?-44tUv~RIIfG83TmM3Ejkp{lecW(z4L!AFCq+45o)mLD>Lve67B;)}LqX7+$Fmrs4OqbUzEa zgG-5dSDDYewr<3q(zou2LhiwR!l_( zqSe-rl2t`~k_g<>7wh+^bxOFLvT7kU{qpdGbrDIhCFr?P8KPu)DRh7m4lam-c9ouj z#k!@sDLcLWH4+1N^y;8qYVSO8R0kC`7g-ScCtxbN8boQGwA_gHuu5s#RvS4xOpsQ)D z>3=H&T#zA8{Lkva;^T~T%C|a`2`zesL%-957=5X_EA-(XEUQhZwQe*S`TRm@S=BJ~ zic!j%i!~yOinNGLtLZgO5^-QKB_c*_-%x!rpm>cK1eapkNrh($jlo4SA9d@K28M@w zES+kA$tFCS;-*!qv3!S7bTLju;Y^}oLe&}HpuOg)A$o#`DY7W1ndrXJz|?AH%=`mas zSnwT{H2=%*M4%F6P_F%_-qWsOXs)Y`>uYqZKr9kgrYPXkJqgLVez_zVW+sqS zoBaWXM$W<|+3{Zn5(+k?IgOb{8zlhW!2$e8=_Gc9huyY;zhu@ql$B?#5rYQbO~3-c zNsbU~rZXMQ>Q#vO707HP`kJpai=)ea+S<9BRzG(H=wkyJmHvnKF}_kk#{QS{F=6l~ z>Vg?q2K=KewDGbSeWIyoe-S}XmWK}F156NH!YOuIkJKT-J1*e#A{c#xLuKh8$Wmiz z>srNGr?nknEkhn;=2ctKYaT2m+X%=68G@($ehrSsjm2mu--!>25Kw&dzkqatg<1hN zs{cfWvej5eW@V;kcyxIO z%s^8o6}J-guu)wBWtQUba9)oQCMw4x#6nKPUvSVgdeOi*F#~}tC>DM2^k+>02V1C; zCHf3}jwlOPJz%U@;1k1~EFcM2J~mk_BnB&#m?3l*1K!ffkN|1&(9s?lh)Ogr7e9@& zlG{%K2|=Y9<@9G?ZvOD|ZE!ms`Xs(6p&1mf_j-%eII$ky{em3&4|yRH`GOm4WsyXS zI!dh6!?)5Tt-`#eT?Gd_@@?ucLk!1Dl!h5QRC--=OAzcCM~3s-F9&q!?Cwc?mU^#Z z2Gy24y1(5|W6vKQcOD=2i|^HY?@y2F&GYZsD~={W3~RDyG$p9{{y-j#Pgp3`1m>lDM4Z`-ozD9C&QkpukuF}{f&1YbNCdmE)C zwL9Q#{Denl65hPjO)-`By+b9Ybya;Q{o@oy{HyFdLm~thh10uEnjtO75rKf+cgoI| z_Q_S(r~J`vCCq^VuwX@{DU z!XCUXTWcI302!)*2!Ac=Xn(3?yi=e{L`D)pK9|t)NA6q0N=j6~&)u+X0YuYP>sg25 zf;DT7uT7d10UMt=hYk@NZo^*g^M=D+FRme~|C7KBI6z$AB3ZZYgqPQoH+oK@-D5&B z>7IF5z^?CXNe`R~Cxq ztkmput1gw0%#h>LX9VI#ZJ=fLdzVv}MKMPL$t{l3bg{pAU4#m|9d z1c$X-R-K3y=#^w6Hm{?r+ zD(|cQQPm>i%mRlt=`o*C6d=}R%WRDGpA8D>r4YMP;o?dk@P1(@iP0xleLaoCdd^a(#&~$~6f+v}}nw_M_;d?$36K!uajSyG~ z^9AR!wtnN41XnkM57GW+gNP-r-_KaW?CQPjzisT(l7DK0rJ;E){eXs+cP^~-%)x_- zp`fIFFkLnA#Ecj>l`T3vsmol*!ieX9>^x*@JEEHOV9a>{er2&CO3Boue`SpY3#rim z(6CZaqU4 z@Y>!lZq|B+NUZuP(VWxu^qTaT>k?A87%qWDPw2z@;u=q-frcB_NzP>9j1z`vh)T$6 zS^K-$)rboxGUxjby$c3QYY3Fv-r2AzoGUI0T;Q6UT7=~5lU=-E<|-7wfa|BC`Gh>M z@EPBY@=)-!7lY9ohe#@xoT!sa{fCE_jsm_DaF@b4=lWj{U&AzIZNikk%XD!$$x=!r z9$ade)lNr0ODgR6B`njh;4!8`_~}^ho#3Y%J`ky9hNUyBoXAwW8j!L&k~^rlgJ))@ z|Jc><9JMt@DJ0)isPtXx$Lg%OxcE3u*V+8hFQHbK?PFI|=seZtwP#X}NbwoxC~;bI z6tFlIv-OzJ3~Y=qK#@-`4GXBC|8k#N7;oYk7&kiNukY;;CT(mEN#gi4XhCypix>E< zxMTz^*MB9PEt!4&K2_r6(jj`}px(h7Z z8xryuG)N7;5dLiNrDfErw=4CCRa>!kW}TSF*xv2QZ1V!*h}MF6!%>gJBvGRwi8M4f z5y=%%e-KH&HOO~oGq{oI|9+o3MJqI8&_s5clOji<)M0hflBsdMotf9_CddvA+n?6@7}hD91%Tn(ibWx~3j8x?nkA^MQpPt!T* zbgrg97KAM3*V?VGuIqR*+a3Z2A8*p0eQfWLPWy4G{mnwQ3b8;t|GFT&uK%j6z@}f9 z;Ih$aa&8M|vQYA>xfAo{BDbO~1Gh;I?1y`!5$`2l_`527)h(Bb8M`FZox5g&*?v;W zol_Nr)zXDGZ=8r0TROVKE7WdS83)%Wt=2^3hhvds-Oca6sEjoPkGH?Oy%A&v^?(#w zzfI{)A=RIiKS7T5nI9`9gB+dD#o*5~e@{ypbHmEyF>BRQI$EjT%=g-kjwJ%(xPq7Z zuonJHn?J8HExOZm8Usdd8Wmdq+{Vb*;oAM3hFKkuFnznOtweDS!UZ>QP{&fheFAd) z((Tv7LlUE;Y>U53b zuI4k|9{qUB3)wkpxEmggT=v>(UvN?wotBDyb!QZsOC*}HLp0rxKg`F!FtrkrTH&eD z^*N_#8^eZt!Nb!8PoOIX9VBEl3azykqFPOEO4f*!M_yOUOG~67-)^Vm1%57L!&f9Rx3{brcFA-YkxAvwEL;KQ)+BY@0)goS4quyg)Wh=V zhqNSer;<;%tK0;VKv~7LrKir`W!$#>lR)Gq4@~UjKF{@X8yfjXvB&l6RG%_idG;}h z-?kVZ@$g}8S$N#cavN;g%_3u7Hm~T!+`F`^7-b+TUJOO{R%pXCwVZqlo|q8ReK>KV z;DzbPZ+c|xQtNpFP~A-8Ro7_D{Dou+aiuevmnShTuwgJN3|{5UtbMl4K@x%)j4nyR zEujbF-2B6S(TFfzT=wd1BUN{uvPCD;%~TVgAHD6ST!o&l-jJkDBBpy;t*${=(4$Y* z%VtC8lV}_^L+;MDy?f`Q8;2|B_o#e_IammY!yj@QqRv58X7@)dkKd1@Z=bACzkbRx ze3Q)-dmAolQ&Y|$xDP@B&Ir&l_3vB>EnH#@&$eSj;FD;q^{3UNH&)bpFx2Ig6Ep07 zFUXk8o4pPo_~^_~mgJXsf~JGqY?+UX=<8io*gH;Wqhfp=z}#m7Dw~|~OzZ<050E1K zuEs=xJC#*Jz9GL|pRA@Zn+?*>$JK8uOS^e?J=i7caHA^8yCUt4k9u3V9h&x0*@q>SfLY#{6>=WV$6DDNXfhiP4`ECwJ z8c8LB^5xOjYLSNQtO2+o4`Uik$drS0HT%)%vM2O!#7M64S3(avSIBCoL&wZ@GvOEa zLM1P2a3FCv{#`gtPlzDI1jL0drB5MoG;}$(SG(mWd6k3LyO|T$^L0~EGm(->9cN;V z0fUHvSIhagdw%y@$gqoiSsM*1r^yEmBbIaHun;H6PqM1}VSXe+mKSMTj+vvyRk5x7 z98^1vZq*b4kCMXv*Duu8^8BtGs;Bjtzqh2-nm;l!&u?3819E*w?tabl1gBxNTg zm%a{qLxQhKS3zpK*Sx$|QNm|;G}Z#?!Kv`@lWDzDxsXL%{z0HvS|N5l^-`^@Ca-SJl?aj+@H>~vTdJ4 z`zC&i-QH|h?bQ;w6!)`zQ2Tg}JMOW6?&tVx{nw)I$0l~KaUAo(;etkuvMHOcFD?(gRc`ht=L8sT^R=OUW`kCZ1E+3eWTF`|iPnHBg_tudfeY zO0gmGT7ToLA@uUqu@q`r9TlcENg?(6q2zbS-NU}LwSAr35Q79I02e$?eN+H zttxVwDkzeKiO#~s&EqMv;u*TN+?Mr~|Lpv%N#q`OUg}2}kT=vmfxO$kv^~C&#KzQP z5jKC^O)^egXpjQA;S>1aGv8~v7E$kohjG)hR2_Y{)7{xfq$B=I<8O3BQG%#>pgIVL zToyvf(|_Qo;5mLLWXQX9HtqzGD5pe@ls+MSyH@@lU3yOs;ZGrgjZ1O3KEZ&aOy~Sg zSVaB7ay?e(;?pwqRypR2Bv{)5>Yee|G?K;RA5>|PS0RvfYVU`Z5FMuY5)2b@BeFwKu?gj=^>$`&d(i18Okr%7A2m$J-JvFX;UDn}d| zsLq>DtJB1ZLs);VX^Uyyc2w9YZn^FFyqcF%h}GS3r}k=#&7oXYdBIbO1S#&`5ZyiN z#HrWI!8-eKvEj(lQmO?}Yzn~0zMY`sdzYWz_3JqSbIR>p_K2B7=iPp1=bBF1-W73I z!`6IgwQm9W!k(H1ks|RRW7mZPimPwaT(;l+@niX67lkbapBNX`L&8>@)13W=L+8Uh zv@nP-+xDcw^r0^=H}}P7IcZ_TMc;ad{iwW(kPF9iN}i(<`Pa^6jvJ;*-1U z0E9Mw&J5en$WKP{2Zpw{+Z@=YPx9!Jn+(3k*4DP{-S}NyjI`VHm{*IMcj$G~D~ES%be2o68FY7ZU3KW}A37hN z45avQIzQkQ-didiwOF2Alp6=M&zS3*Lm*^vc#hGFTO70gN}o^6e>=jVv41j4!AEGi z6beI)UL361&(U|hjLOR<7a*gbSKT@(Vc1}PQ4+~Exxnr~>_|9jv-urTft*VbC_qSD zI*9hg!_fJv!Ruh!ac0q@x%F|_b|Ii|LueCubIaA>i)OK}1F1sSD0gZZ*4@q`PnD}a z)5jO+{#QS!y$nN7(r9+>!@F@>_ta3kwwQ8h)An??YHF7D$U|6EMDl+aD0bfP@}#Vf zGhwmY^Iaw(hRpN#)V0io7}|qk0tQQc!^8Of!^aV)8%>)`?Q*;nliG09?^NBu+q<+N z#oax$-*#E7^)9yOe_QoAs`m9AsO)^Oul!n)Uh*Sw!lp3bvzeRXuHBLzDzVa9#};1R z=9=oq%0O-I?Td#l`zmX+i&s5#w?H#HI9l{uDrK}&U{Q67G!?%@LmXgH!UcKES@PX4 zU?d;=rOeBg| z4ySU8jw5mJne)8K6Y)18TY*`_8x0|Cyc6J(17IyhzZid1*Gx~jE%i&A%tB3;a5yrPEJlia`28AQka*o~On5?-F3!usv#?-2N1 zl;=*ICH26gb1}&o6b?1pE+RA~@9jngyt^rm6to-z#Sn1Up2R<9BRz$4zLAQQuL*)c zp7cU{0ZQ+GW6ZUXV?AaW6N;3*eG8bk?E16;u6Ej?9&K=KDj}(9{|AL(CvHMhY{=A3 z%ETIu>pMOM%qfC_9g)QzE z&|~|7?Fegl)8U&-QykJC-E`pGYHO>VN^Ev1+<$*OI-32edv-HYT;nZ?uKqLG%J4ZA zRjl(t#DU>u!mX9g-bmg>Xc3KRG&&?`(4*C(zhzn}QReW@JZaJ<=Yh%&PkyE~C-}?k z=Mi2S?emLd-;nt|^I6gCP8L44Y0k(=pM6;A7dd-ZedK>?dfA!+-lfDSpJf{f+|9K( zpZY(4)8KQ=?z4DXuTG|5_l38KN9BPf(d=<^gOI@d&iD~kNSqmG2IXOd&FC;9GroCu zSoE-)PRmEBW}1!`=LN9PpSueVm0024sn1aBQj^`?e>TuFyOZGls?IlQPnGA?GpVn{ zN)0>hpBw+awA0LAGiK>t+|$QQnW`mnD~`#BjQrBD&ko#p&T@(7+HFX^znjjowbTY%B`)kwxLbcI zb>%(zsULXvRQ5U;l|a|>G_YZbQDRCD>u&3oyk(ZIl^MAwe_Uiak0iUZ{B5)eZQ=lZ z@hola#Ex9CcmKVp1 z{x3D*$6YrPR_SzgfX%4$epn}r3ZbP8e1fs(YF+%D+Mefk*zmK%X`XapGK~c+M41IC zg%#DlK$?4}@A?ZAKSi6jolgR7_?*Pay4nZDcRmk%`?eY?O+ub9aQhK9JARHHT~HV}W=%W95PxW!O>-RJ1>>+FDj=zSA- z71GWu2_UN|2s9lV9lfa+S1d()X-BDey7jcpX1BLx7r=(sQJw~+$I?f8q3GG z_A+rjQ16(P{{G$Wcn}zQc@tm{qA0TGk_Cw4bxGHGIx4jdB2 z!Qs^yacI!6iFqbwF#-ExtU*1WjSDbTtjRLu@v7SI;>NB74-Rt_i#7G&Mg9y)nRc~9 zq0R2=G}gHL2Rq?3=W0i#`(KIY^}ilgO5>ML2{*kW-{eTUQjmJ5zGdTrP@5q+2C$1R zbM$X4cXZurgr92o=<4)?0a@WjYz!NGN$p+*h7d1W4@6K(OicUXucvpxDoBEQN(S-q!V#`DYDN%cEGc~&K#bL3-iR6xb6dKVKZDcOP0oxg$RiCTjDzr zYT^waoSP%CGKM!K15=s6TNH8khS1_J$!{erEa}b=b4}iWePg;la-X?;)#{B2-i6PrlCH82bQwXaz1Ear46f;YTWJ9ifHf zcCNq2iwoqAU0^tk?EY+ z^g;-a3aNb3U+!&nCl+=Hn#C{WIy5{!gnI6GE5ja{(=Dq_o}DJV|MZN9Tkuy-bO>#p zH7^G3_2-FhG+$25>(~Q04a3TN?nSBL3st!x_h!(0CMugKK5bL@a69APJbPi-x8_6f z(|;btYOk5f*M3>AreE2#fTvAjoGwAVE;aatP0GjwHBob=jHL3=Llt&B!w|!JCq7xZ zeRrW3==YOb{M&VlGYuh&>IwJ>mE*enj+Y(9a&Bw)n9pV6F+|V^G8C>R&wsas`Oqk= zt9tDlH(R3`pZMb%={}!S((32Ik;Au48Q@Q*qAqrCPCG}V6k|IsBz#C|=_CCbxaH&Y zqNr$o7?B`@vC-iB!6(z|w$W!SE2hspn$3{7S12@evs9Sdx)bIs5JeRZNG)d$>} z{Q$q-Uk9rF+N2|RwApaIY4T_e0zoh49I6r2`!`*TxkIW?C}I<1T)16f(>+9$451?~^c<7oSbE zVD5hfXGa$#-7P=#k?rmIbwkz4-`%0H>^ocQ+MiQ;=@b8VpzBWwyQ_0Oy!;ela8;0JBWM0Mli($rrVbV=W<%A=HyAN#aAB2{`qfxx- z`FYb4YOhEp^f4F)6ie$^+>U#3H>;OEYCC5rNt1^99F!0~TsJ_U5%rNI?kZ>RTn!n- z_!)OTlLrYPLy93CFcO8M^sNVfeC-Y{vL#0q$3g0uMB}3VL^|;D`j3#~_tfwNvemQ| zUVocltu5ibtfTYxC(#8=&{tl0&@EJEy8JxwbLf5Nr6*&`F81?<3t@yt=kUm-532_a zuiB2#LY(_eXK~K;G7?$wEwJH3@ZdjU^!|cwg+WHbXSojj+PI1dj%Bd8-yjl5X z`x{&&bRU1&FM2W*QLw>*lOziTwLY|m`S1Bv*H|pgQjL&ORJOsA2@1l~i!Hyq2v`yp zIT9s{X4Pf@@j$m({zdCvuPnIClAf-@a@47mi%qYHxz(O!cjk9C)M9bFc{lT*xhYJd zrED|6f}AR!CSJ$K+r;f-Tx+O9fqV1&!KOTsBd({=d(E!YmTY87{XOuS4&C>pUOJl`az(klKvz2i=f=4)U<`7RFjPClP9u=&|*eU3EuW{J*} zmJaaPrSwn>r&P_sP6u*yBS{$A2{o-w+#0I)A(f;=8x#0kgVs2n;kGg+RekSZ?Qa7% zTwh$LhO4!GG(yi_P!({ioqX7_Dk-G-@lw{8=n5+IP>JFlgy=vS6AvM%k2fg9h%Rmp z&peFT?Oj%DYPk#l^U-eXlDppL`51lQ271g883LCIyZT+3zg@jeww?UP8mxp~_%GG* z7G9*q>h_kW1-_hDT8Ba{+23k(zk+u_(G|=XWeB_w*z`~OnUgBdtA`-{Q4XJudy;S} zCLcK15rciMfIlir?8BP}-#~wwE9mR`&r2pgOX6484Db7llRN#7gi6H4uVmL3_pq6Q z=LspEwmqf}da%$;b{Faw8qz4-iI`G!xU{@BKv&2d6H~urDcpH;0qO{W3Q3Ev zO(^I%Xii@s2eM7qs#ZJYc5j6a70F1^_kjR`&jNE@VXd1c%`8f8QaDa$kLmf%@+*5e zAzaBk0v16A#B_GSA)X~nao_BqEcQ)|R0FSfnZKKlMjH{w2Ag-$H9vVtNOlRKJX%s{ z@&NxdpbtjtFa#||ISAa&4|wWF1(xv%Tx$~uVu1@jxwPZkoK%E;JAdJ5@~g~0*!yod zS4FoN$Yu|D5)g4venNG|-6#KR6&f3F<{|~z=|h)!IdX-`gfr-W>DTpCvr5ZY zCR5F)lzq-ryqHTo8n~X_o-*O#e*2ZUvfYr~eyq6dx=mT(9qdpK$ZoIJGn?Am22X(U zecu9&Ifq?Gs3_c?x2g@4*w0C_BI5(*w>>U}dyU5Ttp#CuPN=<@e?$!=e1DBN017V9 zx<%V{+&xX7bp(hm*fqLFe3$}Z<&z#cH}!wWYt!&*fgkkuoZNiaCB1E-`9Xo>Cz=Qw zqx=>Wut|iP!^^on{O9OjFV`EHHhMRaju`rCAG!LenHKW9gDyVo(X$uRnUPEP$6QWF zJl8!&sxr_gpDfllDi;9{H9tOAO78!W0n&K}UTEEK{iUX!zgxTA>deB$cd1Ponie$w7P9Vms}-`%K! z3L12%fN4z!OzjG5YK@X+y^82Hiu(k0uWI7_({sKHF9-$)lSYJ7nZe3u3hm`5CH$Y_ zzZ5&JJHT14bw96S5~(5peWQs)?}QKDz&W4xAm!YEPLcgl_;iqe><#nX{;9S(Jk(v@U$Pws-DfoU zjB!H#V9?zjfF=c>MSai&icLVQQ1hyx0i!Xjn}Yvzi_M_3Hgwjtxz%|mlej8y$}NTF zx*Mp1|6C9}XwyZm@X+t(cW5tlTV;ard ztu~L>^Hi#Rz1|bNC-7-m!7vfYHlRceQu{xm7x~mWdl!7*L82Yw$egC%acPH6;o;b- zq4j8WrgI(m6A?fg$jMH&>fcE5C}&Mh7tKW%cJBCWOY zeMk{jiYLA0Fo6dRy(gtRQvqEqm2HVrxll7utJ3@ZyT#!7aidTxP;2T3vx8*9>zhk9 z8P&kPT-VE9);*2rRki3gavpBbF*_umnRBGRhSAQ6J8=%kzFX0iBm&P53-qtC>G1@` z3=eI5(_IN4*8MyN(ihq%S&@4Z(O$OFuYV}vr`xC+FrAH?oH7AD>gnLMobN(7oZ3}o zk~GcLOJ@I1-YjS}>;o&kPF(p7u6}wuj)@wCzezui5Y6DA|IX6}bf9r|V%q#@3oC0_ zfDiky>oGdkS#C|WWfUoLPy8$=p?fA+e50!NN30nfSFo%c;++}NN=`{6qt|KJ9Bl@X z%49`!{2!KIJ$TK|%9GtG!aiNX#L!{k3GYci9u4p3G|?I8=uX_S55QKSJhkON|Udti;7xHQ*F{u zXd_PC9=Mbk@C^!?uDSV;>8z38QT|a4{&!5kI#-}Ef`GL~ZJoIZnwjJ!^Rl3wmCK6f z@bjgx|BIu*p4?=qzlK2vB~FLw?6~>CpQi-EDx*NZ%FdnwHk&wqqLh+X`SZ2Y>u5< z0c7e-)aYO}@B>dLwxr}VsZKWUXt+K?MHzXlN(URxq=Kb&hz%jgc)LL%eD#;hd*AVr zSh-0$001Kz_1kN={qth#=UJab{8QtBr>8)Yogwc_ra_3~r4a2(5r&6=g^M#hZM$eW zf|pi*IrQ#b$7Z0=f6ZZwC`{gNmp53jnIVZBh5o)_1Hje5*CY^14jbQL);8z0uTQlO z$F!gye0V37cx{>;-M+B067vjV^s?sCH6JsBTIlz@>fNpv?Jjg?NC5Ye5LrY~3qBj) zw5p8dRSW8p`FxZWU6>mJ!1e%d+5Ry)Y^M?$JVlke^=~nmM>F{+O8QyjyJDub%Pzb( z&`*1oOo2GiLeyW}?)j8X`)3uB@~7 z6%q0gHi!=b!8)q&YH9Ethereum logo \ No newline at end of file diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 00000000..30459e49 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,136 @@ +# Contribution Guidelines + +This file contains instructions that will help you make a contribution. + +## Licensing + +The Ethereum.nix packages, modules and this user guide are licensed under the [MIT license](license.md). + +## Before you contribute + +Here you can take a look at the [existing issues](https://github.com/nix-community/ethereum.nix/issues). Feel free to contribute, but make sure you have a [GitHub account](https://github.com/join) first :) . + +If you're new to open source, please read GitHub's guide on [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/). It's a quick read, and it's a great way to introduce yourself to how things work behind the scenes in open-source projects. + +Before sending a pull request, make sure that you've read all the guidelines. If you don't understand something, please [state your question clearly in an issue](https://github.com/nix-community/ethereum.nix/issues/new). + +## Creating an issue + +If you need to create an issue, make sure to clearly describe it, including: + +- The steps to reproduce it if it's a bug +- The version of ethereum.nix used + +## Making changes + +If you want to introduce changes to the project, please follow these steps: + +- Fork the repository on GitHub +- Create a branch on your fork. Don't commit directly to main +- Add the necessary tests for your changes +- Push your changes to the branch in your repository fork +- Submit a pull request to the original repository + +Make sure you based your commits on logical and atomic units! + +## Examples of git history + +Git history that we want to have: + +Git history that we are trying to avoid: + +
+ +Git history that we want to have + +``` + +* e3ed88b (HEAD -> contribution-guide, upstream/main, origin/main, origin/HEAD, main) Merge pull request #470 from zimbatm/fix_lru_cache + +|\ + +| * 1ab7d9f Use rayon for multithreading command + +|/ + +* e9c5bb4 Merge pull request #468 from zimbatm/multithread + +|\ + +| * de2d6cf Add lint property for Formatter struct + +| * cd2ed17 Fix impl on Formatter get_command() function + +|/ + +* 028c344 Merge pull request #465 from rayon/0.15.0-release + +|\ + +| * 7b619d6 0.15.0 release + +|/ + +* acdf7df Merge pull request #463 from zimbatm/support-multi-part-namespaces + +``` + +
+ +
+ +Git history that we are trying to avoid: + +``` + +* 4c8aca8 Merge pull request #120 from zimbatm/add-rayon + +|\ + +| * fc2b449 use rayon for engine now + +| * 2304683 add rayon config + +| * 5285bd3 bump base image to F30 + +* | 4d0fbe2 Merge pull request #114 from rizary/create_method_create_release + +|\ \ + +| * | 36a9396 test changed + +| * | 22f681d method create release for github created + +* | | 2ef4ea1 Merge pull request #119 from rizary/config.rs + +|\ \ \ + +| |/ / + +|/| | + +| * | 5f1b8f0 unused functions removed + +* | | a93c361 Merge pull request #117 from zimbatm/add-getreleases-to-abstract + +|\ \ \ + +| |/ / + +|/| | + +| * | 0a97236 add get_releses for Cargo + +| * | 55e4c57 add get_releases/get_release into engine.rs + +|/ / + +* | badeddd Merge pull request #101 from zimbatm/extreme-cachin + +``` + +
+ +Additionally, it's always good to work on improving documentation and adding examples. + +Thank you for considering contributing to `ethereum.nix`. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..f0f5ef01 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,10 @@ +# About the Project + +`Ethereum.nix` is a collection of [Nix](https://nixos.org) packages and [NixOS](https://nixos.wiki/wiki/NixOS_modules) modules +designed to make it easier to operate [Ethereum](https://ethereum.org) related services and infrastructure. + +## Background + +In the beginning `Ethereum.nix` was a playground for [Aldo Borrero](https://aldoborrero.com/) to experiment with _nix'ifying_ +Ethereum related processes. Since then, it has a grown into an ever-increasing number of packages and modules targeted towards +streamlining day-to-day operations across a variety of different projects. diff --git a/LICENSE b/docs/license.md similarity index 100% rename from LICENSE rename to docs/license.md diff --git a/flake.nix b/flake.nix index 492b2832..5fa29d54 100644 --- a/flake.nix +++ b/flake.nix @@ -65,6 +65,7 @@ ./nix ./packages ./modules + ./mkdocs.nix ]; systems = [ "x86_64-linux" diff --git a/mkdocs.nix b/mkdocs.nix new file mode 100644 index 00000000..8be826b5 --- /dev/null +++ b/mkdocs.nix @@ -0,0 +1,46 @@ +{ + perSystem = { + lib, + pkgs, + ... + }: let + inherit (pkgs) stdenv mkdocs python310Packages; + reference-doc = pkgs.callPackage ./reference.nix {inherit lib;}; + in { + packages.docs = stdenv.mkDerivation { + src = ./.; + name = "ethereum-nix-docs"; + + buildInput = [reference-doc]; + nativeBuildInputs = [mkdocs python310Packages.mkdocs-material]; + + buildPhase = '' + ln -s ${reference-doc} ./docs/reference.md + ls -al ./docs + cat ./docs/modules/reference.md + mkdocs build + ''; + + installPhase = '' + mv site $out + ''; + }; + + mission-control.scripts = let + category = "Docs"; + in + with lib; { + docs = { + inherit category; + description = "Serve docs"; + exec = '' + # link in options reference + rm -f ./docs/modules/reference.md + ln -s ${reference-doc} ./docs/modules/reference.md + + mkdocs serve + ''; + }; + }; + }; +} diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..2b523fb5 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,59 @@ +site_name: Ethereum.nix +site_description: Nix packages and NixOS modules for the Ethereum ecosystem +site_url: https://nix-community.github.io/ethereum.nix + +repo_url: https://github.com/nix-community/ethereum.nix +edit_uri: edit/main/docs + +theme: + name: material + logo: assets/logo.svg + favicon: assets/favicon.png + + palette: + # Palette toggle for automatic mode + - media: "(prefers-color-scheme)" + primary: teal + accent: amber + toggle: + icon: material/brightness-auto + name: Switch to light mode + + - scheme: default + primary: teal + accent: amber + toggle: + icon: material/brightness-5 + name: Switch to dark mode + + - scheme: slate + primary: blue grey + accent: amber + toggle: + icon: material/brightness-2 + name: Switch to light mode + + features: + - navigation.instant + - navigation.tracking + + - navigation.sections + - navigation.top + - toc.follow + - content.action.edit + - content.action.view + - search.suggest + - search.highlight + - search.share + + + +extra: + homepage: https://nix-community.github.io/ethereum.nix + social: + - icon: fontawesome/brands/github + link: https://github.com/nix-community/ethereum.nix + name: Ethereum.nix on Github + generator: false # hide the line "Made with Material for MkDocs" + +copyright: Copyright © 41North and Ethereum.nix contributors \ No newline at end of file diff --git a/modules/clients/consensus/default.nix b/modules/clients/consensus/default.nix deleted file mode 100644 index 7fda8619..00000000 --- a/modules/clients/consensus/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - imports = [ - ./prysm - ]; -} diff --git a/modules/clients/consensus/prysm/beacon.nix b/modules/clients/consensus/prysm/beacon.nix deleted file mode 100644 index bb587041..00000000 --- a/modules/clients/consensus/prysm/beacon.nix +++ /dev/null @@ -1,259 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - inherit (lib.lists) optionals findFirst; - inherit (lib.strings) hasPrefix; - inherit (lib.attrsets) zipAttrsWith mapAttrsRecursive optionalAttrs; - inherit (lib) mdDoc flatten nameValuePair filterAttrs mapAttrs mapAttrs' mapAttrsToList; - inherit (lib) optionalString literalExpression mkEnableOption mkIf mkBefore mkOption mkMerge types concatStringsSep; - - modulesLib = import ../../../lib.nix {inherit lib pkgs;}; - inherit (modulesLib) mkArgs baseServiceConfig foldListToAttrs scripts; - - settingsFormat = pkgs.formats.yaml {}; - - eachBeacon = config.services.ethereum.prysm-beacon; - - beaconOpts = { - options = { - enable = mkEnableOption (mdDoc "Ethereum Beacon Chain Node from Prysmatic Labs"); - - args = { - network = mkOption { - type = types.nullOr (types.enum ["goerli" "prater" "ropsten" "sepolia"]); - default = null; - description = mdDoc "The network to connect to. Mainnet (null) is the default ethereum network."; - }; - - jwt-secret = mkOption { - type = types.str; - default = null; - description = mdDoc "Path to a file containing a hex-encoded string representing a 32 byte secret used for authentication with an execution node via HTTP"; - example = "/var/run/prysm/jwtsecret"; - }; - - checkpoint-sync-url = mkOption { - type = types.nullOr types.str; - default = null; - description = mdDoc "URL of a synced beacon node to trust in obtaining checkpoint sync data. As an additional safety measure, it is strongly recommended to only use this option in conjunction with --weak-subjectivity-checkpoint flag"; - example = "https://goerli.checkpoint-sync.ethpandaops.io"; - }; - - genesis-beacon-api-url = mkOption { - type = types.nullOr types.str; - default = null; - description = mdDoc "URL of a synced beacon node to trust for obtaining genesis state. As an additional safety measure, it is strongly recommended to only use this option in conjunction with --weak-subjectivity-checkpoint flag"; - example = "https://goerli.checkpoint-sync.ethpandaops.io"; - }; - - p2p-udp-port = mkOption { - type = types.port; - default = 12000; - description = mdDoc "The port used by discv5."; - }; - - p2p-tcp-port = mkOption { - type = types.port; - default = 13000; - description = mdDoc "The port used by libp2p."; - }; - - disable-monitoring = mkOption { - type = types.bool; - default = false; - description = mdDoc "Disable monitoring service."; - }; - - monitoring-host = mkOption { - type = types.str; - default = "127.0.0.1"; - description = mdDoc "Host used to listen and respond with metrics for prometheus."; - }; - - monitoring-port = mkOption { - type = types.port; - default = 8080; - description = mdDoc "Port used to listen and respond with metrics for prometheus."; - }; - - disable-grpc-gateway = mkOption { - type = types.bool; - default = false; - description = mdDoc "Disable the gRPC gateway for JSON-HTTP requests "; - }; - - grpc-gateway-host = mkOption { - type = types.str; - default = "127.0.0.1"; - description = mdDoc "The host on which the gateway server runs on."; - }; - - grpc-gateway-port = mkOption { - type = types.port; - default = 3500; - description = mdDoc "The port on which the gateway server runs."; - }; - - rpc-host = mkOption { - type = types.str; - default = "127.0.0.1"; - description = mdDoc "Host on which the RPC server should listen."; - }; - - rpc-port = mkOption { - type = types.port; - default = 4000; - description = mdDoc "RPC port exposed by a beacon node."; - }; - - pprof = mkOption { - type = types.bool; - default = false; - description = mdDoc "Enable the pprof HTTP server."; - }; - - pprofaddr = mkOption { - type = types.str; - default = "127.0.0.1"; - description = mdDoc "pprof HTTP server listening interface."; - }; - - pprofport = mkOption { - type = types.port; - default = 6060; - description = mdDoc "pprof HTTP server listening port."; - }; - }; - - extraArgs = mkOption { - type = types.listOf types.str; - description = mdDoc "Additional arguments to pass to Prysm Beacon Chain."; - default = []; - }; - - package = mkOption { - default = pkgs.prysm; - defaultText = literalExpression "pkgs.prysm"; - type = types.package; - description = mdDoc "Package to use for Prysm binary"; - }; - - openFirewall = mkOption { - type = types.bool; - default = false; - description = lib.mdDoc "Open ports in the firewall for any enabled networking services"; - }; - - # mixin backup options - backup = let - inherit (import ../../../backup/lib.nix lib) options; - in - options; - - # mixin restore options - restore = let - inherit (import ../../../restore/lib.nix lib) options; - in - options; - }; - }; -in { - ###### interface - - options = { - services.ethereum.prysm-beacon = mkOption { - type = types.attrsOf (types.submodule beaconOpts); - default = {}; - description = mdDoc "Specification of one or more prysm beacon chain instances."; - }; - }; - - ###### implementation - - config = mkIf (eachBeacon != {}) { - # configure the firewall for each service - networking.firewall = let - openFirewall = filterAttrs (_: cfg: cfg.openFirewall) eachBeacon; - perService = - mapAttrsToList - ( - _: cfg: - with cfg.args; { - allowedUDPPorts = [p2p-udp-port]; - allowedTCPPorts = - [rpc-port p2p-tcp-port] - ++ (optionals (!disable-monitoring) [monitoring-port]) - ++ (optionals (!disable-grpc-gateway) [grpc-gateway-port]) - ++ (optionals pprof [pprofport]); - } - ) - openFirewall; - in - zipAttrsWith (name: flatten) perService; - - systemd.services = - mapAttrs' - ( - beaconName: let - serviceName = "prysm-beacon-${beaconName}"; - in - cfg: let - scriptArgs = let - # generate args - args = mkArgs { - inherit (cfg) args; - opts = beaconOpts.options.args; - }; - - # filter out certain args which need to be treated differently - specialArgs = ["--network" "--jwt-secret"]; - isNormalArg = name: (findFirst (arg: hasPrefix arg name) null specialArgs) == null; - filteredArgs = builtins.filter isNormalArg args; - - network = - if cfg.args.network != null - then "--${cfg.args.network}" - else ""; - - jwtSecret = - if cfg.args.jwt-secret != null - then "--jwt-secret %d/jwt-secret" - else ""; - in '' - --accept-terms-of-use ${network} ${jwtSecret} \ - --datadir %S/${serviceName} \ - ${concatStringsSep " \\\n" filteredArgs} \ - ${lib.escapeShellArgs cfg.extraArgs} - ''; - in - nameValuePair serviceName (mkIf cfg.enable { - after = ["network.target"]; - wantedBy = ["multi-user.target"]; - description = "Prysm Beacon Node (${beaconName})"; - - environment = { - GRPC_GATEWAY_HOST = cfg.args.grpc-gateway-host; - GRPC_GATEWAY_PORT = builtins.toString cfg.args.grpc-gateway-port; - }; - - # create service config by merging with the base config - serviceConfig = mkMerge [ - baseServiceConfig - { - User = serviceName; - StateDirectory = serviceName; - ExecStart = "${cfg.package}/bin/beacon-chain ${scriptArgs}"; - MemoryDenyWriteExecute = "false"; # causes a library loading error - } - (mkIf (cfg.args.jwt-secret != null) { - LoadCredential = ["jwt-secret:${cfg.args.jwt-secret}"]; - }) - ]; - }) - ) - eachBeacon; - }; -} diff --git a/modules/clients/consensus/prysm/default.nix b/modules/clients/consensus/prysm/default.nix deleted file mode 100644 index 9e2c4ac8..00000000 --- a/modules/clients/consensus/prysm/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - imports = [ - ./beacon.nix - ]; -} diff --git a/modules/clients/default.nix b/modules/clients/default.nix deleted file mode 100644 index 947c3d21..00000000 --- a/modules/clients/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./consensus - ./execution - ]; -} diff --git a/modules/clients/execution/default.nix b/modules/clients/execution/default.nix deleted file mode 100644 index b82e190d..00000000 --- a/modules/clients/execution/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - imports = [ - ./erigon.nix - ./geth - ./nethermind - ]; -} diff --git a/modules/clients/execution/geth/bootnode.nix b/modules/clients/execution/geth/bootnode.nix deleted file mode 100644 index d207649d..00000000 --- a/modules/clients/execution/geth/bootnode.nix +++ /dev/null @@ -1,200 +0,0 @@ -/* -* Derived from https://github.com/NixOS/nixpkgs/blob/45b92369d6fafcf9e462789e98fbc735f23b5f64/nixos/modules/services/blockchain/ethereum/geth.nix -*/ -{ - config, - lib, - pkgs, - ... -}: let - modulesLib = import ../../../lib.nix {inherit lib pkgs;}; - inherit (modulesLib) mkArgs baseServiceConfig scripts; - - # capture config for all configured geths - eachBootnode = config.services.ethereum.geth-bootnode; - - # submodule options - bootnodeOpts = { - options = with lib; rec { - enable = mkEnableOption (mdDoc "Go Ethereum Boot Node"); - - args = { - addr = mkOption { - # todo use regex matching - type = types.str; - default = ":30301"; - description = mdDoc "Listen address"; - }; - - genkey = mkOption { - type = types.nullOr types.str; - default = null; - description = mdDoc "Generate a node key"; - }; - - nat = mkOption { - # todo use regex matching - type = types.str; - default = "none"; - description = mdDoc "Port mapping mechanism (any|none|upnp|pmp|pmp:|extip:)"; - }; - - netrestrict = mkOption { - # todo use regex matching - type = types.nullOr types.str; - default = null; - description = mdDoc "Restrict network communication to the given IP networks (CIDR masks)"; - }; - - nodekey = mkOption { - type = types.nullOr types.path; - default = null; - description = mdDoc "Private key filename"; - }; - - nodekeyhex = mkOption { - type = types.nullOr types.str; - default = null; - description = mdDoc "Private key as hex (for testing)"; - }; - - v5 = mkOption { - type = types.nullOr types.bool; - default = null; - description = mdDoc "Run a V5 topic discovery bootnode"; - }; - - verbosity = mkOption { - type = types.ints.between 0 5; - default = 3; - description = mdDoc "log verbosity (0-5)"; - }; - - vmodule = mkOption { - type = types.nullOr types.str; - default = null; - description = mdDoc "Log verbosity pattern"; - }; - - writeaddress = mkOption { - type = types.nullOr types.bool; - default = null; - description = mdDoc "Write out the node's public key and quit"; - }; - }; - - extraArgs = mkOption { - type = types.listOf types.str; - description = mdDoc "Additional arguments to pass to the Go Ethereum Bootnode."; - default = []; - }; - - package = mkOption { - type = types.package; - default = pkgs.geth; - defaultText = literalExpression "pkgs.geth"; - description = mdDoc "Package to use as Go Ethereum Boot node."; - }; - - openFirewall = mkOption { - type = types.bool; - default = false; - description = lib.mdDoc "Open ports in the firewall for any enabled networking services"; - }; - }; - }; -in { - # Disable the service definition currently in nixpkgs - disabledModules = ["services/blockchain/ethereum/geth.nix"]; - - ###### interface - - options = { - services.ethereum.geth-bootnode = with lib; - mkOption { - type = types.attrsOf (types.submodule bootnodeOpts); - default = {}; - description = mdDoc "Specification of one or more geth bootnode instances."; - }; - }; - - ###### implementation - - config = with lib; - mkIf (eachBootnode != {}) { - # configure the firewall for each service - networking.firewall = let - openFirewall = filterAttrs (_: cfg: cfg.openFirewall) eachBootnode; - perService = - mapAttrsToList - ( - _: cfg: - with cfg.args; let - # todo this can probably be improved with regex - port = toInt (last (builtins.split ":" addr)); - in { - allowedUDPPorts = [port]; - } - ) - openFirewall; - in - zipAttrsWith (name: flatten) perService; - - # create a service for each instance - systemd.services = - mapAttrs' - ( - gethName: let - serviceName = "geth-bootnode-${gethName}"; - in - cfg: let - scriptArgs = let - # of course flags for this process are `-foo` instead of `--foo`... - pathReducer = path: let - arg = concatStringsSep "-" path; - in "-${arg}"; - - # generate flags - args = mkArgs { - inherit pathReducer; - inherit (cfg) args; - opts = bootnodeOpts.options.args; - }; - - # filter out certain args which need to be treated differently - specialArgs = ["-nodekey"]; - isNormalArg = name: (findFirst (arg: arg == name) null specialArgs) == null; - - filteredArgs = builtins.filter isNormalArg args; - - nodekey = - if cfg.args.nodekey != null - then "-nodekey %d/nodekey" - else ""; - in '' - ${concatStringsSep " \\\n" filteredArgs} \ - ${lib.escapeShellArgs cfg.extraArgs} - ''; - in - nameValuePair serviceName (mkIf cfg.enable { - after = ["network.target"]; - wantedBy = ["multi-user.target"]; - description = "Go Ethereum Bootnode (${gethName})"; - - # create service config by merging with the base config - serviceConfig = mkMerge [ - baseServiceConfig - { - User = serviceName; - StateDirectory = serviceName; - ExecStart = "${cfg.package}/bin/bootnode ${scriptArgs}"; - } - (mkIf (cfg.args.nodekey != null) { - LoadCredential = ["nodekey:${cfg.args.nodekey}"]; - }) - ]; - }) - ) - eachBootnode; - }; -} diff --git a/modules/clients/execution/geth/default.nix b/modules/clients/execution/geth/default.nix deleted file mode 100644 index 354df45f..00000000 --- a/modules/clients/execution/geth/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./bootnode.nix - ./geth.nix - ]; -} diff --git a/modules/clients/execution/geth/geth.nix b/modules/clients/execution/geth/geth.nix deleted file mode 100644 index 7206a597..00000000 --- a/modules/clients/execution/geth/geth.nix +++ /dev/null @@ -1,342 +0,0 @@ -/* -* Derived from https://github.com/NixOS/nixpkgs/blob/45b92369d6fafcf9e462789e98fbc735f23b5f64/nixos/modules/services/blockchain/ethereum/geth.nix -*/ -{ - config, - lib, - pkgs, - modulesPath, - ... -}: let - inherit (lib.lists) optionals findFirst; - inherit (lib.strings) hasPrefix; - inherit (lib.attrsets) zipAttrsWith mapAttrsRecursive optionalAttrs; - inherit (lib) mdDoc flatten nameValuePair filterAttrs mapAttrs mapAttrs' mapAttrsToList; - inherit (lib) optionalString literalExpression mkEnableOption mkIf mkMerge mkBefore mkOption types concatStringsSep; - - modulesLib = import ../../../lib.nix {inherit lib pkgs;}; - inherit (modulesLib) mkArgs baseServiceConfig scripts; - - # capture config for all configured geths - eachGeth = config.services.ethereum.geth; - - # submodule options - gethOpts = { - options = rec { - enable = mkEnableOption (mdDoc "Go Ethereum Node"); - - args = { - port = mkOption { - type = types.port; - default = 30303; - description = mdDoc "Port number Go Ethereum will be listening on, both TCP and UDP."; - }; - - http = { - enable = mkEnableOption (mdDoc "Go Ethereum HTTP API"); - - addr = mkOption { - type = types.str; - default = "127.0.0.1"; - description = mdDoc "HTTP-RPC server listening interface"; - }; - - port = mkOption { - type = types.port; - default = 8545; - description = mdDoc "Port number of Go Ethereum HTTP API."; - }; - - api = mkOption { - type = types.nullOr (types.listOf types.str); - default = null; - description = mdDoc "API's offered over the HTTP-RPC interface"; - example = ["net" "eth"]; - }; - - corsdomain = mkOption { - type = types.nullOr (types.listOf types.str); - default = null; - description = mdDoc "List of domains from which to accept cross origin requests"; - example = ["*"]; - }; - - rpcprefix = mkOption { - type = types.nullOr types.str; - default = null; - description = mdDoc "HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths."; - example = "/"; - }; - - vhosts = mkOption { - type = types.listOf types.str; - default = ["localhost"]; - description = mdDoc '' - Comma separated list of virtual hostnames from which to accept requests (server enforced). - Accepts '*' wildcard. - ''; - example = ["localhost" "geth.example.org"]; - }; - }; - - ws = { - enable = mkEnableOption (mdDoc "Go Ethereum WebSocket API"); - addr = mkOption { - type = types.str; - default = "127.0.0.1"; - description = mdDoc "Listen address of Go Ethereum WebSocket API."; - }; - - port = mkOption { - type = types.port; - default = 8546; - description = mdDoc "Port number of Go Ethereum WebSocket API."; - }; - - api = mkOption { - type = types.nullOr (types.listOf types.str); - default = null; - description = mdDoc "APIs to enable over WebSocket"; - example = ["net" "eth"]; - }; - }; - - authrpc = { - addr = mkOption { - type = types.str; - default = "127.0.0.1"; - description = mdDoc "Listen address of Go Ethereum Auth RPC API."; - }; - - port = mkOption { - type = types.port; - default = 8551; - description = mdDoc "Port number of Go Ethereum Auth RPC API."; - }; - - vhosts = mkOption { - type = types.listOf types.str; - default = ["localhost"]; - description = mdDoc "List of virtual hostnames from which to accept requests."; - example = ["localhost" "geth.example.org"]; - }; - - jwtsecret = mkOption { - type = types.nullOr types.str; - default = null; - description = mdDoc "Path to a JWT secret for authenticated RPC endpoint."; - example = "/var/run/geth/jwtsecret"; - }; - }; - - metrics = { - enable = mkEnableOption (mdDoc "Go Ethereum prometheus metrics"); - addr = mkOption { - type = types.str; - default = "127.0.0.1"; - description = mdDoc "Listen address of Go Ethereum metrics service."; - }; - - port = mkOption { - type = types.port; - default = 6060; - description = mdDoc "Port number of Go Ethereum metrics service."; - }; - }; - - network = mkOption { - type = types.nullOr (types.enum ["goerli" "kiln" "rinkeby" "ropsten" "sepolia"]); - default = null; - description = mdDoc "The network to connect to. Mainnet (null) is the default ethereum network."; - }; - - networkid = mkOption { - type = types.int; - default = 1; - description = mdDoc "The network id used for peer to peer communication"; - }; - - netrestrict = mkOption { - # todo use regex matching - type = types.nullOr types.str; - default = null; - description = mdDoc "Restrict network communication to the given IP networks (CIDR masks)"; - }; - - verbosity = mkOption { - type = types.ints.between 0 5; - default = 3; - description = mdDoc "log verbosity (0-5)"; - }; - - nodiscover = mkOption { - type = types.bool; - default = false; - description = "Disable discovery"; - }; - - bootnodes = mkOption { - # todo use regex matching - type = types.nullOr (types.listOf types.str); - default = null; - description = mdDoc "List of bootnodes to connect to"; - }; - - syncmode = mkOption { - type = types.enum ["snap" "fast" "full" "light"]; - default = "snap"; - description = mdDoc "Blockchain sync mode."; - }; - - gcmode = mkOption { - type = types.enum ["full" "archive"]; - default = "full"; - description = mdDoc "Blockchain garbage collection mode."; - }; - - maxpeers = mkOption { - type = types.int; - default = 50; - description = mdDoc "Maximum peers to connect to."; - }; - }; - - extraArgs = mkOption { - type = types.listOf types.str; - description = mdDoc "Additional arguments to pass to Go Ethereum."; - default = []; - }; - - package = mkOption { - type = types.package; - default = pkgs.geth; - defaultText = literalExpression "pkgs.geth"; - description = mdDoc "Package to use as Go Ethereum node."; - }; - - openFirewall = mkOption { - type = types.bool; - default = false; - description = lib.mdDoc "Open ports in the firewall for any enabled networking services"; - }; - - # mixin backup options - backup = let - inherit (import ../../../backup/lib.nix lib) options; - in - options; - - # mixin restore options - restore = let - inherit (import ../../../restore/lib.nix lib) options; - in - options; - }; - }; -in { - # Disable the service definition currently in nixpkgs - disabledModules = ["services/blockchain/ethereum/geth.nix"]; - - ###### interface - - options = { - services.ethereum.geth = mkOption { - type = types.attrsOf (types.submodule gethOpts); - default = {}; - description = mdDoc "Specification of one or more geth instances."; - }; - }; - - ###### implementation - - config = mkIf (eachGeth != {}) { - # configure the firewall for each service - networking.firewall = let - openFirewall = filterAttrs (_: cfg: cfg.openFirewall) eachGeth; - perService = - mapAttrsToList - ( - _: cfg: - with cfg.args; { - allowedUDPPorts = [port]; - allowedTCPPorts = - [port authrpc.port] - ++ (optionals http.enable [http.port]) - ++ (optionals ws.enable [ws.port]) - ++ (optionals metrics.enable [metrics.port]); - } - ) - openFirewall; - in - zipAttrsWith (name: flatten) perService; - - # create a service for each instance - systemd.services = - mapAttrs' - ( - gethName: let - serviceName = "geth-${gethName}"; - in - cfg: let - scriptArgs = let - # replace enable flags like --http.enable with just --http - pathReducer = path: let - arg = concatStringsSep "." (lib.lists.remove "enable" path); - in "--${arg}"; - - # generate flags - args = mkArgs { - inherit pathReducer; - inherit (cfg) args; - opts = gethOpts.options.args; - }; - - # filter out certain args which need to be treated differently - specialArgs = ["--network" "--authrpc.jwtsecret"]; - isNormalArg = name: (findFirst (arg: hasPrefix arg name) null specialArgs) == null; - - filteredArgs = builtins.filter isNormalArg args; - - network = - if cfg.args.network != null - then "--${cfg.args.network}" - else ""; - - jwtSecret = - if cfg.args.authrpc.jwtsecret != null - then "--authrpc.jwtsecret %d/jwtsecret" - else ""; - in '' - --ipcdisable ${network} ${jwtSecret} \ - --datadir %S/${serviceName} \ - ${concatStringsSep " \\\n" filteredArgs} \ - ${lib.escapeShellArgs cfg.extraArgs} - ''; - in - nameValuePair serviceName (mkIf cfg.enable { - after = ["network.target"]; - wantedBy = ["multi-user.target"]; - description = "Go Ethereum node (${gethName})"; - - environment = { - WEB3_HTTP_HOST = cfg.args.http.addr; - WEB3_HTTP_PORT = builtins.toString cfg.args.http.port; - }; - - # create service config by merging with the base config - serviceConfig = mkMerge [ - baseServiceConfig - { - User = serviceName; - StateDirectory = serviceName; - ExecStart = "${cfg.package}/bin/geth ${scriptArgs}"; - } - (mkIf (cfg.args.authrpc.jwtsecret != null) { - LoadCredential = ["jwtsecret:${cfg.args.authrpc.jwtsecret}"]; - }) - ]; - }) - ) - eachGeth; - }; -} diff --git a/modules/clients/execution/nethermind/default.nix b/modules/clients/execution/nethermind/default.nix deleted file mode 100644 index bb3b84f7..00000000 --- a/modules/clients/execution/nethermind/default.nix +++ /dev/null @@ -1,318 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - inherit - (builtins) - isBool - isList - isNull - toString - ; - inherit - (lib) - boolToString - concatStringsSep - filterAttrs - findFirst - flatten - hasPrefix - literalExpression - mapAttrs' - mapAttrsRecursive - mapAttrsToList - mdDoc - mkEnableOption - mkIf - mkBefore - mkMerge - mkOption - nameValuePair - optionalAttrs - optionals - types - zipAttrsWith - ; - - modulesLib = import ../../../lib.nix {inherit lib pkgs;}; - inherit (modulesLib) mkArgs baseServiceConfig scripts; - - # capture config for all configured netherminds - eachNethermind = config.services.ethereum.nethermind; - - # submodule options - nethermindOpts = { - options = { - enable = mkEnableOption (mdDoc "Nethermind Ethereum Node."); - - package = mkOption { - type = types.package; - default = pkgs.nethermind; - defaultText = literalExpression "pkgs.nethermind"; - description = mdDoc "Package to use as Nethermind."; - }; - - args = { - baseDbPath = mkOption { - type = types.nullOr types.path; - default = null; - description = mdDoc "Configures the path of the Nethermind's database folder."; - }; - - config = mkOption { - type = types.nullOr types.str; - default = null; - example = "mainnet"; - description = mdDoc "Determines the configuration file of the network on which Nethermind will be running."; - }; - - configsDirectory = mkOption { - type = types.nullOr types.path; - default = null; - description = mdDoc "Changes the source directory of your configuration files."; - }; - - log = mkOption { - type = types.enum [ - "OFF" - "TRACE" - "DEBUG" - "INFO" - "WARN" - "ERROR" - ]; - default = "INFO"; - description = mdDoc "Changes the logging level."; - }; - - loggerConfigSource = mkOption { - type = types.nullOr types.str; - default = null; - description = mdDoc "Changes the path of the NLog.config file."; - }; - - modules = { - # https://docs.nethermind.io/nethermind/ethereum-client/configuration/network - Network = { - DiscoveryPort = mkOption { - type = types.port; - default = 30303; - description = mdDoc "UDP port number for incoming discovery connections."; - }; - - P2PPort = mkOption { - type = types.port; - default = 30303; - description = mdDoc "TPC/IP port number for incoming P2P connections."; - }; - }; - - # https://docs.nethermind.io/nethermind/ethereum-client/configuration/jsonrpc - JsonRpc = { - Enabled = mkOption { - type = types.bool; - default = true; - description = mdDoc "Defines whether the JSON RPC service is enabled on node startup."; - }; - - Port = mkOption { - type = types.port; - default = 8545; - description = mdDoc "Port number for JSON RPC calls."; - }; - - WebSocketsPort = mkOption { - type = types.port; - default = 8545; - description = mdDoc "Port number for JSON RPC web sockets calls."; - }; - - EngineHost = mkOption { - type = types.str; - default = "127.0.0.1"; - description = mdDoc "Host for JSON RPC calls."; - }; - - EnginePort = mkOption { - type = types.port; - default = 8551; - description = mdDoc "Port for Execution Engine calls."; - }; - - JwtSecretFile = mkOption { - type = types.nullOr types.str; - default = null; - description = mdDoc "Path to file with hex encoded secret for jwt authentication."; - example = "/var/run/geth/jwtsecret"; - }; - }; - - # https://docs.nethermind.io/nethermind/ethereum-client/configuration/healthchecks - HealthChecks = { - Enabled = mkOption { - type = types.bool; - default = true; - description = mdDoc "If 'true' then Health Check endpoints is enabled at /health."; - }; - }; - - # https://docs.nethermind.io/nethermind/ethereum-client/configuration/metrics - Metrics = { - Enabled = mkOption { - type = types.bool; - default = true; - description = mdDoc "If 'true',the node publishes various metrics to Prometheus Pushgateway at given interval."; - }; - - ExposePort = mkOption { - type = types.nullOr types.port; - default = null; - description = mdDoc "If 'true' then Health Check endpoints is enabled at /health"; - }; - }; - }; - }; - - extraArgs = mkOption { - type = types.listOf types.str; - description = mdDoc "Additional arguments to pass to Nethermind."; - default = []; - }; - - openFirewall = mkOption { - type = types.bool; - default = false; - description = lib.mdDoc "Open ports in the firewall for any enabled networking services"; - }; - - # mixin backup options - backup = let - inherit (import ../../../backup/lib.nix lib) options; - in - options; - - # mixin restore options - restore = let - inherit (import ../../../restore/lib.nix lib) options; - in - options; - }; - }; -in { - ###### interface - - options = { - services.ethereum.nethermind = mkOption { - type = types.attrsOf (types.submodule nethermindOpts); - default = {}; - description = mdDoc "Specification of one or more Nethermind instances."; - }; - }; - - ###### implementation - - config = mkIf (eachNethermind != {}) { - # configure the firewall for each service - networking.firewall = let - openFirewall = filterAttrs (_: cfg: cfg.openFirewall) eachNethermind; - perService = - mapAttrsToList - ( - _: cfg: - with cfg.args; { - allowedUDPPorts = [modules.Network.DiscoveryPort]; - allowedTCPPorts = - [modules.Network.P2PPort modules.JsonRpc.EnginePort] - ++ (optionals modules.JsonRpc.Enabled [modules.JsonRpc.Port modules.JsonRpc.WebSocketsPort]) - ++ (optionals modules.Metrics.Enabled && (modules.Metrics.ExposePort != null) [modules.Metrics.ExposePort]); - } - ) - openFirewall; - in - zipAttrsWith (name: flatten) perService; - - # create a service for each instance - systemd.services = - mapAttrs' ( - nethermindName: let - serviceName = "nethermind-${nethermindName}"; - in - cfg: let - scriptArgs = let - # custom arg reducer for nethermind - argReducer = value: - if (isList value) - then concatStringsSep "," value - else if (isBool value) - then boolToString value - else toString value; - - # remove modules from arguments - pathReducer = path: let - arg = concatStringsSep "." (lib.lists.remove "modules" path); - in "--${arg}"; - - # custom arg formatter for nethermind - argFormatter = { - opt, - path, - value, - argReducer, - pathReducer, - }: let - arg = pathReducer path; - in "${arg} ${argReducer value}"; - - jwtSecret = - if cfg.args.modules.JsonRpc.JwtSecretFile != null - then "--JsonRpc.JwtSecretFile %d/jwtsecret" - else ""; - - # generate flags - args = mkArgs { - inherit pathReducer argReducer argFormatter; - inherit (cfg) args; - opts = nethermindOpts.options.args; - }; - - # filter out certain args which need to be treated differently - specialArgs = ["--JsonRpc.JwtSecretFile"]; - isNormalArg = name: (findFirst (arg: hasPrefix arg name) null specialArgs) == null; - - filteredArgs = builtins.filter isNormalArg args; - in '' - --datadir %S/${serviceName} \ - ${jwtSecret} \ - ${concatStringsSep " \\\n" filteredArgs} \ - ${lib.escapeShellArgs cfg.extraArgs} - ''; - in - nameValuePair serviceName (mkIf cfg.enable { - after = ["network.target"]; - wantedBy = ["multi-user.target"]; - description = "Nethermind Node (${nethermindName})"; - - environment = { - WEB3_HTTP_HOST = cfg.args.modules.JsonRpc.EngineHost; - WEB3_HTTP_PORT = builtins.toString cfg.args.modules.JsonRpc.Port; - }; - - # create service config by merging with the base config - serviceConfig = mkMerge [ - baseServiceConfig - { - User = serviceName; - StateDirectory = serviceName; - ExecStart = "${cfg.package}/bin/Nethermind.Runner ${scriptArgs}"; - } - (mkIf (cfg.args.modules.JsonRpc.JwtSecretFile != null) { - LoadCredential = ["jwtsecret:${cfg.args.modules.JsonRpc.JwtSecretFile}"]; - }) - ]; - }) - ) - eachNethermind; - }; -} diff --git a/modules/default.nix b/modules/default.nix index 0cd404f8..64163087 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -6,9 +6,13 @@ # create a default nixos module which mixes in all modules flake.nixosModules.default = { imports = [ - ./clients ./backup ./restore + ./geth + ./geth-bootnode + ./nethermind + ./erigon + ./prysm-beacon ]; }; } diff --git a/modules/erigon/args.nix b/modules/erigon/args.nix new file mode 100644 index 00000000..141077b1 --- /dev/null +++ b/modules/erigon/args.nix @@ -0,0 +1,214 @@ +lib: +with lib; { + port = mkOption { + type = types.port; + default = 30303; + description = mdDoc "Network listening port."; + }; + + snapshots = mkOption { + type = types.bool; + default = true; + description = mdDoc '' + Default: use snapshots "true" for BSC, Mainnet and Goerli. use snapshots "false" in all other cases. + ''; + }; + + externalcl = mkEnableOption (mdDoc "enables external consensus"); + + chain = mkOption { + type = types.enum [ + "mainnet" + "rinkeby" + "goerli" + "sokol" + "fermion" + "mumbai" + "bor-mainnet" + "bor-devnet" + "sepolia" + "gnosis" + "chiado" + ]; + default = "mainnet"; + description = mdDoc "Name of the network to join. If null the network is mainnet."; + }; + + torrent = { + port = mkOption { + type = types.port; + default = 42069; + description = mdDoc "Port to listen and serve BitTorrent protocol ."; + }; + }; + + http = { + enable = mkOption { + type = types.bool; + default = true; + description = mdDoc "Enable HTTP-RPC server"; + }; + + addr = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "HTTP-RPC server listening interface."; + }; + + port = mkOption { + type = types.port; + default = 8545; + description = mdDoc "HTTP-RPC server listening port."; + }; + + compression = mkEnableOption (mdDoc "Enable compression over HTTP-RPC."); + + corsdomain = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + description = mdDoc "List of domains from which to accept cross origin requests."; + example = ["*"]; + }; + + vhosts = mkOption { + type = types.listOf types.str; + default = ["localhost"]; + description = mdDoc '' + Comma separated list of virtual hostnames from which to accept requests (server enforced). + Accepts '*' wildcard. + ''; + example = ["localhost" "erigon.example.org"]; + }; + + api = mkOption { + type = types.nullOr (types.listOf types.str); + description = mdDoc "API's offered over the HTTP-RPC interface."; + example = ["net" "eth"]; + }; + + trace = mkEnableOption (mdDoc "Trace HTTP requests with INFO level"); + + timeouts = { + idle = mkOption { + type = types.str; + default = "2m0s"; + description = '' + Maximum amount of time to wait for the next request when keep-alives are enabled. If http.timeouts.idle + is zero, the value of http.timeouts.read is used. + ''; + example = "30s"; + }; + read = mkOption { + type = types.str; + default = "30s"; + description = "Maximum duration for reading the entire request, including the body."; + example = "30s"; + }; + write = mkOption { + type = types.str; + default = "30m0s"; + description = '' + Maximum duration before timing out writes of the response. It is reset whenever a new request's + header is read. + ''; + example = "30m0s"; + }; + }; + }; + + ws = { + enable = mkEnableOption (mdDoc "Erigon WebSocket API"); + compression = mkEnableOption (mdDoc "Enable compression over HTTP-RPC."); + }; + + authrpc = { + addr = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "HTTP-RPC server listening interface for the Engine API."; + }; + + port = mkOption { + type = types.port; + default = 8551; + description = mdDoc "HTTP-RPC server listening port for the Engine API"; + }; + + vhosts = mkOption { + type = types.listOf types.str; + default = ["localhost"]; + description = mdDoc '' + Comma separated list of virtual hostnames from which to accept Engine API requests + (server enforced). Accepts '*' wildcard." + ''; + example = ["localhost" "erigon.example.org"]; + }; + + jwtsecret = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "Path to the token that ensures safe connection between CL and EL."; + example = "/var/run/erigon/jwtsecret"; + }; + + timeouts = { + idle = mkOption { + type = types.str; + default = "2m0s"; + description = '' + Maximum amount of time to wait for the next request when keep-alives are enabled. If http.timeouts.idle + is zero, the value of http.timeouts.read is used. + ''; + example = "30s"; + }; + read = mkOption { + type = types.str; + default = "30s"; + description = "Maximum duration for reading the entire request, including the body."; + example = "30s"; + }; + write = mkOption { + type = types.str; + default = "30m0s"; + description = '' + Maximum duration before timing out writes of the response. It is reset whenever a new request's + header is read. + ''; + example = "30m0s"; + }; + }; + }; + + private.api = { + addr = mkOption { + type = types.str; + default = "127.0.0.1:9090"; + description = mdDoc '' + Private api network address, for example: 127.0.0.1:9090, empty string means not to start the listener. Do not expose to public network. Serves remote database interface. + ''; + }; + ratelimit = mkOption { + type = types.int; + default = 31872; + description = mdDoc '' + Amount of requests server handle simultaneously - requests over this limit will wait. Increase it - if clients see 'request timeout' while server load is low - it means your 'hot data' is small or have much RAM. + ''; + }; + }; + + metrics = { + enable = mkEnableOption (mdDoc "Enable metrics collection and reporting."); + + addr = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "Enable stand-alone metrics HTTP server listening interface."; + }; + + port = mkOption { + type = types.port; + default = 6060; + description = mdDoc "Metrics HTTP server listening port"; + }; + }; +} diff --git a/modules/clients/execution/erigon.nix b/modules/erigon/default.nix similarity index 96% rename from modules/clients/execution/erigon.nix rename to modules/erigon/default.nix index 67059ae3..bf5d54bb 100644 --- a/modules/clients/execution/erigon.nix +++ b/modules/erigon/default.nix @@ -268,14 +268,7 @@ in { disabledModules = ["services/blockchain/ethereum/erigon.nix"]; ###### interface - - options = { - services.ethereum.erigon = mkOption { - type = types.attrsOf (types.submodule erigonOpts); - default = {}; - description = mdDoc "Specification of one or more erigon instances."; - }; - }; + inherit (import ./options.nix {inherit lib pkgs;}) options; ###### implementation @@ -321,11 +314,13 @@ in { in "--${arg}"; # generate flags - args = mkArgs { - inherit pathReducer; - inherit (cfg) args; - opts = erigonOpts.options.args; - }; + args = let + opts = import ./args.nix lib; + in + mkArgs { + inherit pathReducer opts; + inherit (cfg) args; + }; in '' --datadir %S/${serviceName} \ ${concatStringsSep " \\\n" args} \ diff --git a/modules/erigon/options.nix b/modules/erigon/options.nix new file mode 100644 index 00000000..ee5eb74d --- /dev/null +++ b/modules/erigon/options.nix @@ -0,0 +1,51 @@ +{ + lib, + pkgs, + ... +}: let + args = import ./args.nix lib; + + erigonOpts = with lib; { + options = { + enable = mkEnableOption (mdDoc "Erigon Ethereum Node."); + + subVolume = mkEnableOption (mdDoc "Use a subvolume for the state directory if the underlying filesystem supports it e.g. btrfs"); + + inherit args; + + extraArgs = mkOption { + type = types.listOf types.str; + description = mdDoc "Additional arguments to pass to Erigon."; + default = []; + }; + + package = mkOption { + type = types.package; + default = pkgs.erigon; + defaultText = literalExpression "pkgs.erigon"; + description = mdDoc "Package to use as Erigon node."; + }; + + service = { + supplementaryGroups = mkOption { + default = []; + type = types.listOf types.str; + description = mdDoc "Additional groups for the systemd service e.g. sops-nix group for secret access"; + }; + }; + + openFirewall = mkOption { + type = types.bool; + default = false; + description = lib.mdDoc "Open ports in the firewall for any enabled networking services"; + }; + }; + }; +in { + options.services.ethereum.erigon = with lib; + mkOption { + type = types.attrsOf (types.submodule erigonOpts); + default = {}; + description = mdDoc "Specification of one or more erigon instances."; + }; +} diff --git a/modules/geth-bootnode/args.nix b/modules/geth-bootnode/args.nix new file mode 100644 index 00000000..26228663 --- /dev/null +++ b/modules/geth-bootnode/args.nix @@ -0,0 +1,65 @@ +lib: +with lib; { + addr = mkOption { + # todo use regex matching + type = types.str; + default = ":30301"; + description = mdDoc "Listen address"; + }; + + genkey = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "Generate a node key"; + }; + + nat = mkOption { + # todo use regex matching + type = types.str; + default = "none"; + description = mdDoc "Port mapping mechanism (any|none|upnp|pmp|pmp:IP|extip:IP)"; + }; + + netrestrict = mkOption { + # todo use regex matching + type = types.nullOr types.str; + default = null; + description = mdDoc "Restrict network communication to the given IP networks (CIDR masks)"; + }; + + nodekey = mkOption { + type = types.nullOr types.path; + default = null; + description = mdDoc "Private key filename"; + }; + + nodekeyhex = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "Private key as hex (for testing)"; + }; + + v5 = mkOption { + type = types.nullOr types.bool; + default = null; + description = mdDoc "Run a V5 topic discovery bootnode"; + }; + + verbosity = mkOption { + type = types.ints.between 0 5; + default = 3; + description = mdDoc "log verbosity (0-5)"; + }; + + vmodule = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "Log verbosity pattern"; + }; + + writeaddress = mkOption { + type = types.nullOr types.bool; + default = null; + description = mdDoc "Write out the node's public key and quit"; + }; +} diff --git a/modules/geth-bootnode/default.nix b/modules/geth-bootnode/default.nix new file mode 100644 index 00000000..2d0777db --- /dev/null +++ b/modules/geth-bootnode/default.nix @@ -0,0 +1,103 @@ +/* +* Derived from https://github.com/NixOS/nixpkgs/blob/45b92369d6fafcf9e462789e98fbc735f23b5f64/nixos/modules/services/blockchain/ethereum/geth.nix +*/ +{ + config, + lib, + pkgs, + ... +}: let + modulesLib = import ../lib.nix {inherit lib pkgs;}; + inherit (modulesLib) mkArgs baseServiceConfig scripts; + + # capture config for all configured geths + eachBootnode = config.services.ethereum.geth-bootnode; +in { + # Disable the service definition currently in nixpkgs + disabledModules = ["services/blockchain/ethereum/geth.nix"]; + + ###### interface + inherit (import ./options.nix {inherit lib pkgs;}) options; + + ###### implementation + + config = with lib; + mkIf (eachBootnode != {}) { + # configure the firewall for each service + networking.firewall = let + openFirewall = filterAttrs (_: cfg: cfg.openFirewall) eachBootnode; + perService = + mapAttrsToList + ( + _: cfg: + with cfg.args; let + # todo this can probably be improved with regex + port = toInt (last (builtins.split ":" addr)); + in { + allowedUDPPorts = [port]; + } + ) + openFirewall; + in + zipAttrsWith (name: flatten) perService; + + # create a service for each instance + systemd.services = + mapAttrs' + ( + gethName: let + serviceName = "geth-bootnode-${gethName}"; + in + cfg: let + scriptArgs = let + # of course flags for this process are `-foo` instead of `--foo`... + pathReducer = path: let + arg = concatStringsSep "-" path; + in "-${arg}"; + + # generate flags + args = let + opts = import ./args.nix lib; + in + mkArgs { + inherit pathReducer opts; + inherit (cfg) args; + }; + + # filter out certain args which need to be treated differently + specialArgs = ["-nodekey"]; + isNormalArg = name: (findFirst (arg: arg == name) null specialArgs) == null; + + filteredArgs = builtins.filter isNormalArg args; + + nodekey = + if cfg.args.nodekey != null + then "-nodekey %d/nodekey" + else ""; + in '' + ${concatStringsSep " \\\n" filteredArgs} \ + ${lib.escapeShellArgs cfg.extraArgs} + ''; + in + nameValuePair serviceName (mkIf cfg.enable { + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + description = "Go Ethereum Bootnode (${gethName})"; + + # create service config by merging with the base config + serviceConfig = mkMerge [ + baseServiceConfig + { + User = serviceName; + StateDirectory = serviceName; + ExecStart = "${cfg.package}/bin/bootnode ${scriptArgs}"; + } + (mkIf (cfg.args.nodekey != null) { + LoadCredential = ["nodekey:${cfg.args.nodekey}"]; + }) + ]; + }) + ) + eachBootnode; + }; +} diff --git a/modules/clients/execution/geth/bootnode.test.nix b/modules/geth-bootnode/default.test.nix similarity index 90% rename from modules/clients/execution/geth/bootnode.test.nix rename to modules/geth-bootnode/default.test.nix index 4f944e52..6f274bd2 100644 --- a/modules/clients/execution/geth/bootnode.test.nix +++ b/modules/geth-bootnode/default.test.nix @@ -14,7 +14,7 @@ openFirewall = true; args = { nat = "extip:192.168.1.1"; - nodekey = ./testing/keys/alpha.key; + nodekey = ../geth/testing/keys/alpha.key; netrestrict = "192.168.1.0/24"; }; }; diff --git a/modules/geth-bootnode/options.nix b/modules/geth-bootnode/options.nix new file mode 100644 index 00000000..867e83a8 --- /dev/null +++ b/modules/geth-bootnode/options.nix @@ -0,0 +1,41 @@ +{ + lib, + pkgs, + ... +}: let + args = import ./args.nix lib; + + bootnodeOpts = with lib; { + options = with lib; rec { + enable = mkEnableOption (mdDoc "Go Ethereum Boot Node"); + + inherit args; + + extraArgs = mkOption { + type = types.listOf types.str; + description = mdDoc "Additional arguments to pass to the Go Ethereum Bootnode."; + default = []; + }; + + package = mkOption { + type = types.package; + default = pkgs.geth; + defaultText = literalExpression "pkgs.geth"; + description = mdDoc "Package to use as Go Ethereum Boot node."; + }; + + openFirewall = mkOption { + type = types.bool; + default = false; + description = lib.mdDoc "Open ports in the firewall for any enabled networking services"; + }; + }; + }; +in { + options.services.ethereum.geth-bootnode = with lib; + mkOption { + type = types.attrsOf (types.submodule bootnodeOpts); + default = {}; + description = mdDoc "Specification of one or more geth bootnode instances."; + }; +} diff --git a/modules/clients/execution/geth/README.md b/modules/geth/README.md similarity index 100% rename from modules/clients/execution/geth/README.md rename to modules/geth/README.md diff --git a/modules/geth/args.nix b/modules/geth/args.nix new file mode 100644 index 00000000..73ce759a --- /dev/null +++ b/modules/geth/args.nix @@ -0,0 +1,176 @@ +lib: +with lib; { + port = mkOption { + type = types.port; + default = 30303; + description = mdDoc "Port number Go Ethereum will be listening on, both TCP and UDP."; + }; + + http = { + enable = mkEnableOption (mdDoc "Go Ethereum HTTP API"); + + addr = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "HTTP-RPC server listening interface"; + }; + + port = mkOption { + type = types.port; + default = 8545; + description = mdDoc "Port number of Go Ethereum HTTP API."; + }; + + api = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + description = mdDoc "API's offered over the HTTP-RPC interface"; + example = ["net" "eth"]; + }; + + corsdomain = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + description = mdDoc "List of domains from which to accept cross origin requests"; + example = ["*"]; + }; + + rpcprefix = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths."; + example = "/"; + }; + + vhosts = mkOption { + type = types.listOf types.str; + default = ["localhost"]; + description = mdDoc '' + Comma separated list of virtual hostnames from which to accept requests (server enforced). + Accepts '*' wildcard. + ''; + example = ["localhost" "geth.example.org"]; + }; + }; + + ws = { + enable = mkEnableOption (mdDoc "Go Ethereum WebSocket API"); + addr = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "Listen address of Go Ethereum WebSocket API."; + }; + + port = mkOption { + type = types.port; + default = 8546; + description = mdDoc "Port number of Go Ethereum WebSocket API."; + }; + + api = mkOption { + type = types.nullOr (types.listOf types.str); + default = null; + description = mdDoc "APIs to enable over WebSocket"; + example = ["net" "eth"]; + }; + }; + + authrpc = { + addr = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "Listen address of Go Ethereum Auth RPC API."; + }; + + port = mkOption { + type = types.port; + default = 8551; + description = mdDoc "Port number of Go Ethereum Auth RPC API."; + }; + + vhosts = mkOption { + type = types.listOf types.str; + default = ["localhost"]; + description = mdDoc "List of virtual hostnames from which to accept requests."; + example = ["localhost" "geth.example.org"]; + }; + + jwtsecret = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "Path to a JWT secret for authenticated RPC endpoint."; + example = "/var/run/geth/jwtsecret"; + }; + }; + + metrics = { + enable = mkEnableOption (mdDoc "Go Ethereum prometheus metrics"); + addr = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "Listen address of Go Ethereum metrics service."; + }; + + port = mkOption { + type = types.port; + default = 6060; + description = mdDoc "Port number of Go Ethereum metrics service."; + }; + }; + + network = mkOption { + type = types.nullOr (types.enum ["goerli" "kiln" "rinkeby" "ropsten" "sepolia"]); + default = null; + description = mdDoc "The network to connect to. Mainnet (null) is the default ethereum network."; + }; + + networkid = mkOption { + type = types.int; + default = 1; + description = mdDoc "The network id used for peer to peer communication"; + }; + + netrestrict = mkOption { + # todo use regex matching + type = types.nullOr types.str; + default = null; + description = mdDoc "Restrict network communication to the given IP networks (CIDR masks)"; + }; + + verbosity = mkOption { + type = types.ints.between 0 5; + default = 3; + description = mdDoc "log verbosity (0-5)"; + }; + + nodiscover = mkOption { + type = types.bool; + default = false; + description = "Disable discovery"; + }; + + bootnodes = mkOption { + # todo use regex matching + type = types.nullOr (types.listOf types.str); + default = null; + description = mdDoc "List of bootnodes to connect to"; + }; + + syncmode = mkOption { + type = types.enum ["snap" "fast" "full" "light"]; + default = "snap"; + description = mdDoc "Blockchain sync mode."; + }; + + gcmode = mkOption { + type = types.enum ["full" "archive"]; + default = "full"; + description = mdDoc "Blockchain garbage collection mode."; + }; + + maxpeers = mkOption { + type = types.int; + default = 50; + description = mdDoc "Maximum peers to connect to."; + }; +} diff --git a/modules/clients/execution/geth/backup.test.nix b/modules/geth/backup.test.nix similarity index 100% rename from modules/clients/execution/geth/backup.test.nix rename to modules/geth/backup.test.nix diff --git a/modules/geth/default.nix b/modules/geth/default.nix new file mode 100644 index 00000000..4725952f --- /dev/null +++ b/modules/geth/default.nix @@ -0,0 +1,123 @@ +/* +* Derived from https://github.com/NixOS/nixpkgs/blob/45b92369d6fafcf9e462789e98fbc735f23b5f64/nixos/modules/services/blockchain/ethereum/geth.nix +*/ +{ + config, + lib, + pkgs, + modulesPath, + ... +}: let + inherit (lib.lists) optionals findFirst; + inherit (lib.strings) hasPrefix; + inherit (lib.attrsets) zipAttrsWith mapAttrsRecursive optionalAttrs; + inherit (lib) mdDoc flatten nameValuePair filterAttrs mapAttrs mapAttrs' mapAttrsToList; + inherit (lib) optionalString literalExpression mkEnableOption mkIf mkMerge mkBefore mkOption types concatStringsSep; + + modulesLib = import ../lib.nix {inherit lib pkgs;}; + inherit (modulesLib) mkArgs baseServiceConfig scripts; + + # capture config for all configured geths + eachGeth = config.services.ethereum.geth; +in { + # Disable the service definition currently in nixpkgs + disabledModules = ["services/blockchain/ethereum/geth.nix"]; + + ###### interface + inherit (import ./options.nix {inherit lib pkgs;}) options; + + ###### implementation + + config = mkIf (eachGeth != {}) { + # configure the firewall for each service + networking.firewall = let + openFirewall = filterAttrs (_: cfg: cfg.openFirewall) eachGeth; + perService = + mapAttrsToList + ( + _: cfg: + with cfg.args; { + allowedUDPPorts = [port]; + allowedTCPPorts = + [port authrpc.port] + ++ (optionals http.enable [http.port]) + ++ (optionals ws.enable [ws.port]) + ++ (optionals metrics.enable [metrics.port]); + } + ) + openFirewall; + in + zipAttrsWith (name: flatten) perService; + + # create a service for each instance + systemd.services = + mapAttrs' + ( + gethName: let + serviceName = "geth-${gethName}"; + in + cfg: let + scriptArgs = let + # replace enable flags like --http.enable with just --http + pathReducer = path: let + arg = concatStringsSep "." (lib.lists.remove "enable" path); + in "--${arg}"; + + # generate flags + args = let + opts = import ./args.nix lib; + in + mkArgs { + inherit pathReducer opts; + inherit (cfg) args; + }; + + # filter out certain args which need to be treated differently + specialArgs = ["--network" "--authrpc.jwtsecret"]; + isNormalArg = name: (findFirst (arg: hasPrefix arg name) null specialArgs) == null; + + filteredArgs = builtins.filter isNormalArg args; + + network = + if cfg.args.network != null + then "--${cfg.args.network}" + else ""; + + jwtSecret = + if cfg.args.authrpc.jwtsecret != null + then "--authrpc.jwtsecret %d/jwtsecret" + else ""; + in '' + --ipcdisable ${network} ${jwtSecret} \ + --datadir %S/${serviceName} \ + ${concatStringsSep " \\\n" filteredArgs} \ + ${lib.escapeShellArgs cfg.extraArgs} + ''; + in + nameValuePair serviceName (mkIf cfg.enable { + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + description = "Go Ethereum node (${gethName})"; + + environment = { + WEB3_HTTP_HOST = cfg.args.http.addr; + WEB3_HTTP_PORT = builtins.toString cfg.args.http.port; + }; + + # create service config by merging with the base config + serviceConfig = mkMerge [ + baseServiceConfig + { + User = serviceName; + StateDirectory = serviceName; + ExecStart = "${cfg.package}/bin/geth ${scriptArgs}"; + } + (mkIf (cfg.args.authrpc.jwtsecret != null) { + LoadCredential = ["jwtsecret:${cfg.args.authrpc.jwtsecret}"]; + }) + ]; + }) + ) + eachGeth; + }; +} diff --git a/modules/clients/execution/geth/geth.test.nix b/modules/geth/default.test.nix similarity index 100% rename from modules/clients/execution/geth/geth.test.nix rename to modules/geth/default.test.nix diff --git a/modules/geth/options.nix b/modules/geth/options.nix new file mode 100644 index 00000000..802ed289 --- /dev/null +++ b/modules/geth/options.nix @@ -0,0 +1,53 @@ +{ + lib, + pkgs, + ... +}: let + args = import ./args.nix lib; + + gethOpts = with lib; { + options = rec { + enable = mkEnableOption (mdDoc "Go Ethereum Node"); + + inherit args; + + extraArgs = mkOption { + type = types.listOf types.str; + description = mdDoc "Additional arguments to pass to Go Ethereum."; + default = []; + }; + + package = mkOption { + type = types.package; + default = pkgs.geth; + defaultText = literalExpression "pkgs.geth"; + description = mdDoc "Package to use as Go Ethereum node."; + }; + + openFirewall = mkOption { + type = types.bool; + default = false; + description = lib.mdDoc "Open ports in the firewall for any enabled networking services"; + }; + + # mixin backup options + backup = let + inherit (import ../backup/lib.nix lib) options; + in + options; + + # mixin restore options + restore = let + inherit (import ../restore/lib.nix lib) options; + in + options; + }; + }; +in { + options.services.ethereum.geth = with lib; + mkOption { + type = types.attrsOf (types.submodule gethOpts); + default = {}; + description = mdDoc "Specification of one or more geth instances."; + }; +} diff --git a/modules/clients/execution/geth/restore.test.nix b/modules/geth/restore.test.nix similarity index 100% rename from modules/clients/execution/geth/restore.test.nix rename to modules/geth/restore.test.nix diff --git a/modules/clients/execution/geth/testing/datadir/20/.backup/content-hash b/modules/geth/testing/datadir/20/.backup/content-hash similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/.backup/content-hash rename to modules/geth/testing/datadir/20/.backup/content-hash diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/000014.ldb b/modules/geth/testing/datadir/20/geth/chaindata/000014.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/000014.ldb rename to modules/geth/testing/datadir/20/geth/chaindata/000014.ldb diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/000015.ldb b/modules/geth/testing/datadir/20/geth/chaindata/000015.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/000015.ldb rename to modules/geth/testing/datadir/20/geth/chaindata/000015.ldb diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/000018.ldb b/modules/geth/testing/datadir/20/geth/chaindata/000018.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/000018.ldb rename to modules/geth/testing/datadir/20/geth/chaindata/000018.ldb diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/000019.log b/modules/geth/testing/datadir/20/geth/chaindata/000019.log similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/000019.log rename to modules/geth/testing/datadir/20/geth/chaindata/000019.log diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/CURRENT b/modules/geth/testing/datadir/20/geth/chaindata/CURRENT similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/CURRENT rename to modules/geth/testing/datadir/20/geth/chaindata/CURRENT diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/CURRENT.bak b/modules/geth/testing/datadir/20/geth/chaindata/CURRENT.bak similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/CURRENT.bak rename to modules/geth/testing/datadir/20/geth/chaindata/CURRENT.bak diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/LOCK b/modules/geth/testing/datadir/20/geth/chaindata/LOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/LOCK rename to modules/geth/testing/datadir/20/geth/chaindata/LOCK diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/LOG b/modules/geth/testing/datadir/20/geth/chaindata/LOG similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/LOG rename to modules/geth/testing/datadir/20/geth/chaindata/LOG diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/MANIFEST-000020 b/modules/geth/testing/datadir/20/geth/chaindata/MANIFEST-000020 similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/MANIFEST-000020 rename to modules/geth/testing/datadir/20/geth/chaindata/MANIFEST-000020 diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/FLOCK b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/FLOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/FLOCK rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/FLOCK diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.0000.cdat b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.0000.cdat rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.cidx b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.cidx rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.cidx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.meta b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.meta rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/bodies.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.0000.rdat b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.0000.rdat rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.meta b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.meta rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.ridx b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.ridx rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/diffs.ridx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.0000.rdat b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.0000.rdat rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.meta b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.meta rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.ridx b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.ridx rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/hashes.ridx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.0000.cdat b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.0000.cdat rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.cidx b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.cidx rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.cidx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.meta b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.meta rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/headers.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.0000.cdat b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.0000.cdat rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.cidx b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.cidx rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.cidx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.meta b/modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.meta rename to modules/geth/testing/datadir/20/geth/chaindata/ancient/chain/receipts.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/000001.log b/modules/geth/testing/datadir/20/geth/lightchaindata/000001.log similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/000001.log rename to modules/geth/testing/datadir/20/geth/lightchaindata/000001.log diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/CURRENT b/modules/geth/testing/datadir/20/geth/lightchaindata/CURRENT similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/CURRENT rename to modules/geth/testing/datadir/20/geth/lightchaindata/CURRENT diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/LOCK b/modules/geth/testing/datadir/20/geth/lightchaindata/LOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/LOCK rename to modules/geth/testing/datadir/20/geth/lightchaindata/LOCK diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/LOG b/modules/geth/testing/datadir/20/geth/lightchaindata/LOG similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/LOG rename to modules/geth/testing/datadir/20/geth/lightchaindata/LOG diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/MANIFEST-000000 b/modules/geth/testing/datadir/20/geth/lightchaindata/MANIFEST-000000 similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/MANIFEST-000000 rename to modules/geth/testing/datadir/20/geth/lightchaindata/MANIFEST-000000 diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/FLOCK b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/FLOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/FLOCK rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/FLOCK diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.0000.cdat b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.0000.cdat rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.cidx b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.cidx rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.cidx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.meta b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.meta rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/bodies.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.0000.rdat b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.0000.rdat rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.meta b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.meta rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.ridx b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.ridx rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/diffs.ridx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.0000.rdat b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.0000.rdat rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.meta b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.meta rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.ridx b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.ridx rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/hashes.ridx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.0000.cdat b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.0000.cdat rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.cidx b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.cidx rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.cidx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.meta b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.meta rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/headers.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.0000.cdat b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.0000.cdat rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.cidx b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.cidx rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.cidx diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.meta b/modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.meta rename to modules/geth/testing/datadir/20/geth/lightchaindata/ancient/chain/receipts.meta diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/nodekey b/modules/geth/testing/datadir/20/geth/nodekey similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/nodekey rename to modules/geth/testing/datadir/20/geth/nodekey diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/nodes/000014.ldb b/modules/geth/testing/datadir/20/geth/nodes/000014.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/nodes/000014.ldb rename to modules/geth/testing/datadir/20/geth/nodes/000014.ldb diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/nodes/000015.ldb b/modules/geth/testing/datadir/20/geth/nodes/000015.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/nodes/000015.ldb rename to modules/geth/testing/datadir/20/geth/nodes/000015.ldb diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/nodes/000016.log b/modules/geth/testing/datadir/20/geth/nodes/000016.log similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/nodes/000016.log rename to modules/geth/testing/datadir/20/geth/nodes/000016.log diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/nodes/CURRENT b/modules/geth/testing/datadir/20/geth/nodes/CURRENT similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/nodes/CURRENT rename to modules/geth/testing/datadir/20/geth/nodes/CURRENT diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/nodes/CURRENT.bak b/modules/geth/testing/datadir/20/geth/nodes/CURRENT.bak similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/nodes/CURRENT.bak rename to modules/geth/testing/datadir/20/geth/nodes/CURRENT.bak diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/nodes/LOCK b/modules/geth/testing/datadir/20/geth/nodes/LOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/nodes/LOCK rename to modules/geth/testing/datadir/20/geth/nodes/LOCK diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/nodes/LOG b/modules/geth/testing/datadir/20/geth/nodes/LOG similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/nodes/LOG rename to modules/geth/testing/datadir/20/geth/nodes/LOG diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/nodes/MANIFEST-000017 b/modules/geth/testing/datadir/20/geth/nodes/MANIFEST-000017 similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/nodes/MANIFEST-000017 rename to modules/geth/testing/datadir/20/geth/nodes/MANIFEST-000017 diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/transactions.rlp b/modules/geth/testing/datadir/20/geth/transactions.rlp similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/transactions.rlp rename to modules/geth/testing/datadir/20/geth/transactions.rlp diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.0.bin b/modules/geth/testing/datadir/20/geth/triecache/data.0.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.0.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.0.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.1.bin b/modules/geth/testing/datadir/20/geth/triecache/data.1.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.1.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.1.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.10.bin b/modules/geth/testing/datadir/20/geth/triecache/data.10.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.10.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.10.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.11.bin b/modules/geth/testing/datadir/20/geth/triecache/data.11.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.11.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.11.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.12.bin b/modules/geth/testing/datadir/20/geth/triecache/data.12.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.12.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.12.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.13.bin b/modules/geth/testing/datadir/20/geth/triecache/data.13.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.13.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.13.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.14.bin b/modules/geth/testing/datadir/20/geth/triecache/data.14.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.14.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.14.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.15.bin b/modules/geth/testing/datadir/20/geth/triecache/data.15.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.15.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.15.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.16.bin b/modules/geth/testing/datadir/20/geth/triecache/data.16.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.16.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.16.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.17.bin b/modules/geth/testing/datadir/20/geth/triecache/data.17.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.17.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.17.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.18.bin b/modules/geth/testing/datadir/20/geth/triecache/data.18.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.18.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.18.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.19.bin b/modules/geth/testing/datadir/20/geth/triecache/data.19.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.19.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.19.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.2.bin b/modules/geth/testing/datadir/20/geth/triecache/data.2.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.2.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.2.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.20.bin b/modules/geth/testing/datadir/20/geth/triecache/data.20.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.20.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.20.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.21.bin b/modules/geth/testing/datadir/20/geth/triecache/data.21.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.21.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.21.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.22.bin b/modules/geth/testing/datadir/20/geth/triecache/data.22.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.22.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.22.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.23.bin b/modules/geth/testing/datadir/20/geth/triecache/data.23.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.23.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.23.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.24.bin b/modules/geth/testing/datadir/20/geth/triecache/data.24.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.24.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.24.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.25.bin b/modules/geth/testing/datadir/20/geth/triecache/data.25.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.25.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.25.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.26.bin b/modules/geth/testing/datadir/20/geth/triecache/data.26.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.26.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.26.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.27.bin b/modules/geth/testing/datadir/20/geth/triecache/data.27.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.27.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.27.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.28.bin b/modules/geth/testing/datadir/20/geth/triecache/data.28.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.28.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.28.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.29.bin b/modules/geth/testing/datadir/20/geth/triecache/data.29.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.29.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.29.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.3.bin b/modules/geth/testing/datadir/20/geth/triecache/data.3.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.3.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.3.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.30.bin b/modules/geth/testing/datadir/20/geth/triecache/data.30.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.30.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.30.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.31.bin b/modules/geth/testing/datadir/20/geth/triecache/data.31.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.31.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.31.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.4.bin b/modules/geth/testing/datadir/20/geth/triecache/data.4.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.4.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.4.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.5.bin b/modules/geth/testing/datadir/20/geth/triecache/data.5.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.5.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.5.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.6.bin b/modules/geth/testing/datadir/20/geth/triecache/data.6.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.6.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.6.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.7.bin b/modules/geth/testing/datadir/20/geth/triecache/data.7.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.7.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.7.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.8.bin b/modules/geth/testing/datadir/20/geth/triecache/data.8.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.8.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.8.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.9.bin b/modules/geth/testing/datadir/20/geth/triecache/data.9.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/data.9.bin rename to modules/geth/testing/datadir/20/geth/triecache/data.9.bin diff --git a/modules/clients/execution/geth/testing/datadir/20/geth/triecache/metadata.bin b/modules/geth/testing/datadir/20/geth/triecache/metadata.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/20/geth/triecache/metadata.bin rename to modules/geth/testing/datadir/20/geth/triecache/metadata.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/.backup/content-hash b/modules/geth/testing/datadir/40/.backup/content-hash similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/.backup/content-hash rename to modules/geth/testing/datadir/40/.backup/content-hash diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/000024.ldb b/modules/geth/testing/datadir/40/geth/chaindata/000024.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/000024.ldb rename to modules/geth/testing/datadir/40/geth/chaindata/000024.ldb diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/000025.log b/modules/geth/testing/datadir/40/geth/chaindata/000025.log similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/000025.log rename to modules/geth/testing/datadir/40/geth/chaindata/000025.log diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/000027.ldb b/modules/geth/testing/datadir/40/geth/chaindata/000027.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/000027.ldb rename to modules/geth/testing/datadir/40/geth/chaindata/000027.ldb diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/CURRENT b/modules/geth/testing/datadir/40/geth/chaindata/CURRENT similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/CURRENT rename to modules/geth/testing/datadir/40/geth/chaindata/CURRENT diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/CURRENT.bak b/modules/geth/testing/datadir/40/geth/chaindata/CURRENT.bak similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/CURRENT.bak rename to modules/geth/testing/datadir/40/geth/chaindata/CURRENT.bak diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/LOCK b/modules/geth/testing/datadir/40/geth/chaindata/LOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/LOCK rename to modules/geth/testing/datadir/40/geth/chaindata/LOCK diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/LOG b/modules/geth/testing/datadir/40/geth/chaindata/LOG similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/LOG rename to modules/geth/testing/datadir/40/geth/chaindata/LOG diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/MANIFEST-000026 b/modules/geth/testing/datadir/40/geth/chaindata/MANIFEST-000026 similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/MANIFEST-000026 rename to modules/geth/testing/datadir/40/geth/chaindata/MANIFEST-000026 diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/FLOCK b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/FLOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/FLOCK rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/FLOCK diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.0000.cdat b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.0000.cdat rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.cidx b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.cidx rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.cidx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.meta b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.meta rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/bodies.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.0000.rdat b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.0000.rdat rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.meta b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.meta rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.ridx b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.ridx rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/diffs.ridx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.0000.rdat b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.0000.rdat rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.meta b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.meta rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.ridx b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.ridx rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/hashes.ridx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.0000.cdat b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.0000.cdat rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.cidx b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.cidx rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.cidx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.meta b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.meta rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/headers.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.0000.cdat b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.0000.cdat rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.cidx b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.cidx rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.cidx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.meta b/modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.meta rename to modules/geth/testing/datadir/40/geth/chaindata/ancient/chain/receipts.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/000001.log b/modules/geth/testing/datadir/40/geth/lightchaindata/000001.log similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/000001.log rename to modules/geth/testing/datadir/40/geth/lightchaindata/000001.log diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/CURRENT b/modules/geth/testing/datadir/40/geth/lightchaindata/CURRENT similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/CURRENT rename to modules/geth/testing/datadir/40/geth/lightchaindata/CURRENT diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/LOCK b/modules/geth/testing/datadir/40/geth/lightchaindata/LOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/LOCK rename to modules/geth/testing/datadir/40/geth/lightchaindata/LOCK diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/LOG b/modules/geth/testing/datadir/40/geth/lightchaindata/LOG similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/LOG rename to modules/geth/testing/datadir/40/geth/lightchaindata/LOG diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/MANIFEST-000000 b/modules/geth/testing/datadir/40/geth/lightchaindata/MANIFEST-000000 similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/MANIFEST-000000 rename to modules/geth/testing/datadir/40/geth/lightchaindata/MANIFEST-000000 diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/FLOCK b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/FLOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/FLOCK rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/FLOCK diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.0000.cdat b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.0000.cdat rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.cidx b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.cidx rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.cidx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.meta b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.meta rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/bodies.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.0000.rdat b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.0000.rdat rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.meta b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.meta rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.ridx b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.ridx rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/diffs.ridx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.0000.rdat b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.0000.rdat rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.meta b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.meta rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.ridx b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.ridx rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/hashes.ridx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.0000.cdat b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.0000.cdat rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.cidx b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.cidx rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.cidx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.meta b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.meta rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/headers.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.0000.cdat b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.0000.cdat rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.cidx b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.cidx rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.cidx diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.meta b/modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.meta rename to modules/geth/testing/datadir/40/geth/lightchaindata/ancient/chain/receipts.meta diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodekey b/modules/geth/testing/datadir/40/geth/nodekey similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodekey rename to modules/geth/testing/datadir/40/geth/nodekey diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/000014.ldb b/modules/geth/testing/datadir/40/geth/nodes/000014.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/000014.ldb rename to modules/geth/testing/datadir/40/geth/nodes/000014.ldb diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/000015.ldb b/modules/geth/testing/datadir/40/geth/nodes/000015.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/000015.ldb rename to modules/geth/testing/datadir/40/geth/nodes/000015.ldb diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/000018.ldb b/modules/geth/testing/datadir/40/geth/nodes/000018.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/000018.ldb rename to modules/geth/testing/datadir/40/geth/nodes/000018.ldb diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/000021.ldb b/modules/geth/testing/datadir/40/geth/nodes/000021.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/000021.ldb rename to modules/geth/testing/datadir/40/geth/nodes/000021.ldb diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/000022.log b/modules/geth/testing/datadir/40/geth/nodes/000022.log similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/000022.log rename to modules/geth/testing/datadir/40/geth/nodes/000022.log diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/CURRENT b/modules/geth/testing/datadir/40/geth/nodes/CURRENT similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/CURRENT rename to modules/geth/testing/datadir/40/geth/nodes/CURRENT diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/CURRENT.bak b/modules/geth/testing/datadir/40/geth/nodes/CURRENT.bak similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/CURRENT.bak rename to modules/geth/testing/datadir/40/geth/nodes/CURRENT.bak diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/LOCK b/modules/geth/testing/datadir/40/geth/nodes/LOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/LOCK rename to modules/geth/testing/datadir/40/geth/nodes/LOCK diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/LOG b/modules/geth/testing/datadir/40/geth/nodes/LOG similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/LOG rename to modules/geth/testing/datadir/40/geth/nodes/LOG diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/nodes/MANIFEST-000023 b/modules/geth/testing/datadir/40/geth/nodes/MANIFEST-000023 similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/nodes/MANIFEST-000023 rename to modules/geth/testing/datadir/40/geth/nodes/MANIFEST-000023 diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/transactions.rlp b/modules/geth/testing/datadir/40/geth/transactions.rlp similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/transactions.rlp rename to modules/geth/testing/datadir/40/geth/transactions.rlp diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.0.bin b/modules/geth/testing/datadir/40/geth/triecache/data.0.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.0.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.0.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.1.bin b/modules/geth/testing/datadir/40/geth/triecache/data.1.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.1.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.1.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.10.bin b/modules/geth/testing/datadir/40/geth/triecache/data.10.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.10.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.10.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.11.bin b/modules/geth/testing/datadir/40/geth/triecache/data.11.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.11.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.11.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.12.bin b/modules/geth/testing/datadir/40/geth/triecache/data.12.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.12.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.12.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.13.bin b/modules/geth/testing/datadir/40/geth/triecache/data.13.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.13.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.13.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.14.bin b/modules/geth/testing/datadir/40/geth/triecache/data.14.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.14.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.14.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.15.bin b/modules/geth/testing/datadir/40/geth/triecache/data.15.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.15.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.15.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.16.bin b/modules/geth/testing/datadir/40/geth/triecache/data.16.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.16.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.16.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.17.bin b/modules/geth/testing/datadir/40/geth/triecache/data.17.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.17.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.17.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.18.bin b/modules/geth/testing/datadir/40/geth/triecache/data.18.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.18.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.18.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.19.bin b/modules/geth/testing/datadir/40/geth/triecache/data.19.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.19.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.19.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.2.bin b/modules/geth/testing/datadir/40/geth/triecache/data.2.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.2.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.2.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.20.bin b/modules/geth/testing/datadir/40/geth/triecache/data.20.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.20.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.20.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.21.bin b/modules/geth/testing/datadir/40/geth/triecache/data.21.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.21.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.21.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.22.bin b/modules/geth/testing/datadir/40/geth/triecache/data.22.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.22.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.22.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.23.bin b/modules/geth/testing/datadir/40/geth/triecache/data.23.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.23.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.23.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.24.bin b/modules/geth/testing/datadir/40/geth/triecache/data.24.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.24.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.24.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.25.bin b/modules/geth/testing/datadir/40/geth/triecache/data.25.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.25.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.25.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.26.bin b/modules/geth/testing/datadir/40/geth/triecache/data.26.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.26.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.26.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.27.bin b/modules/geth/testing/datadir/40/geth/triecache/data.27.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.27.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.27.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.28.bin b/modules/geth/testing/datadir/40/geth/triecache/data.28.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.28.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.28.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.29.bin b/modules/geth/testing/datadir/40/geth/triecache/data.29.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.29.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.29.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.3.bin b/modules/geth/testing/datadir/40/geth/triecache/data.3.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.3.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.3.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.30.bin b/modules/geth/testing/datadir/40/geth/triecache/data.30.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.30.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.30.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.31.bin b/modules/geth/testing/datadir/40/geth/triecache/data.31.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.31.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.31.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.4.bin b/modules/geth/testing/datadir/40/geth/triecache/data.4.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.4.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.4.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.5.bin b/modules/geth/testing/datadir/40/geth/triecache/data.5.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.5.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.5.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.6.bin b/modules/geth/testing/datadir/40/geth/triecache/data.6.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.6.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.6.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.7.bin b/modules/geth/testing/datadir/40/geth/triecache/data.7.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.7.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.7.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.8.bin b/modules/geth/testing/datadir/40/geth/triecache/data.8.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.8.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.8.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.9.bin b/modules/geth/testing/datadir/40/geth/triecache/data.9.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/data.9.bin rename to modules/geth/testing/datadir/40/geth/triecache/data.9.bin diff --git a/modules/clients/execution/geth/testing/datadir/40/geth/triecache/metadata.bin b/modules/geth/testing/datadir/40/geth/triecache/metadata.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/40/geth/triecache/metadata.bin rename to modules/geth/testing/datadir/40/geth/triecache/metadata.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/.backup/content-hash b/modules/geth/testing/datadir/63/.backup/content-hash similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/.backup/content-hash rename to modules/geth/testing/datadir/63/.backup/content-hash diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/000037.ldb b/modules/geth/testing/datadir/63/geth/chaindata/000037.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/000037.ldb rename to modules/geth/testing/datadir/63/geth/chaindata/000037.ldb diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/000038.log b/modules/geth/testing/datadir/63/geth/chaindata/000038.log similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/000038.log rename to modules/geth/testing/datadir/63/geth/chaindata/000038.log diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/000040.ldb b/modules/geth/testing/datadir/63/geth/chaindata/000040.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/000040.ldb rename to modules/geth/testing/datadir/63/geth/chaindata/000040.ldb diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/CURRENT b/modules/geth/testing/datadir/63/geth/chaindata/CURRENT similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/CURRENT rename to modules/geth/testing/datadir/63/geth/chaindata/CURRENT diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/CURRENT.bak b/modules/geth/testing/datadir/63/geth/chaindata/CURRENT.bak similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/CURRENT.bak rename to modules/geth/testing/datadir/63/geth/chaindata/CURRENT.bak diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/LOCK b/modules/geth/testing/datadir/63/geth/chaindata/LOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/LOCK rename to modules/geth/testing/datadir/63/geth/chaindata/LOCK diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/LOG b/modules/geth/testing/datadir/63/geth/chaindata/LOG similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/LOG rename to modules/geth/testing/datadir/63/geth/chaindata/LOG diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/MANIFEST-000039 b/modules/geth/testing/datadir/63/geth/chaindata/MANIFEST-000039 similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/MANIFEST-000039 rename to modules/geth/testing/datadir/63/geth/chaindata/MANIFEST-000039 diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/FLOCK b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/FLOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/FLOCK rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/FLOCK diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.0000.cdat b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.0000.cdat rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.cidx b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.cidx rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.cidx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.meta b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.meta rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/bodies.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.0000.rdat b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.0000.rdat rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.meta b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.meta rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.ridx b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.ridx rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/diffs.ridx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.0000.rdat b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.0000.rdat rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.meta b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.meta rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.ridx b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.ridx rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/hashes.ridx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.0000.cdat b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.0000.cdat rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.cidx b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.cidx rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.cidx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.meta b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.meta rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/headers.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.0000.cdat b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.0000.cdat rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.cidx b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.cidx rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.cidx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.meta b/modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.meta rename to modules/geth/testing/datadir/63/geth/chaindata/ancient/chain/receipts.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/000001.log b/modules/geth/testing/datadir/63/geth/lightchaindata/000001.log similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/000001.log rename to modules/geth/testing/datadir/63/geth/lightchaindata/000001.log diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/CURRENT b/modules/geth/testing/datadir/63/geth/lightchaindata/CURRENT similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/CURRENT rename to modules/geth/testing/datadir/63/geth/lightchaindata/CURRENT diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/LOCK b/modules/geth/testing/datadir/63/geth/lightchaindata/LOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/LOCK rename to modules/geth/testing/datadir/63/geth/lightchaindata/LOCK diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/LOG b/modules/geth/testing/datadir/63/geth/lightchaindata/LOG similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/LOG rename to modules/geth/testing/datadir/63/geth/lightchaindata/LOG diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/MANIFEST-000000 b/modules/geth/testing/datadir/63/geth/lightchaindata/MANIFEST-000000 similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/MANIFEST-000000 rename to modules/geth/testing/datadir/63/geth/lightchaindata/MANIFEST-000000 diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/FLOCK b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/FLOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/FLOCK rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/FLOCK diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.0000.cdat b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.0000.cdat rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.cidx b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.cidx rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.cidx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.meta b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.meta rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/bodies.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.0000.rdat b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.0000.rdat rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.meta b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.meta rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.ridx b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.ridx rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/diffs.ridx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.0000.rdat b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.0000.rdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.0000.rdat rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.0000.rdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.meta b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.meta rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.ridx b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.ridx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.ridx rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/hashes.ridx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.0000.cdat b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.0000.cdat rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.cidx b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.cidx rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.cidx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.meta b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.meta rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/headers.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.0000.cdat b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.0000.cdat similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.0000.cdat rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.0000.cdat diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.cidx b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.cidx similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.cidx rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.cidx diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.meta b/modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.meta similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.meta rename to modules/geth/testing/datadir/63/geth/lightchaindata/ancient/chain/receipts.meta diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodekey b/modules/geth/testing/datadir/63/geth/nodekey similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodekey rename to modules/geth/testing/datadir/63/geth/nodekey diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/000027.ldb b/modules/geth/testing/datadir/63/geth/nodes/000027.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/000027.ldb rename to modules/geth/testing/datadir/63/geth/nodes/000027.ldb diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/000028.ldb b/modules/geth/testing/datadir/63/geth/nodes/000028.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/000028.ldb rename to modules/geth/testing/datadir/63/geth/nodes/000028.ldb diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/000031.ldb b/modules/geth/testing/datadir/63/geth/nodes/000031.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/000031.ldb rename to modules/geth/testing/datadir/63/geth/nodes/000031.ldb diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/000034.ldb b/modules/geth/testing/datadir/63/geth/nodes/000034.ldb similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/000034.ldb rename to modules/geth/testing/datadir/63/geth/nodes/000034.ldb diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/000035.log b/modules/geth/testing/datadir/63/geth/nodes/000035.log similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/000035.log rename to modules/geth/testing/datadir/63/geth/nodes/000035.log diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/CURRENT b/modules/geth/testing/datadir/63/geth/nodes/CURRENT similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/CURRENT rename to modules/geth/testing/datadir/63/geth/nodes/CURRENT diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/CURRENT.bak b/modules/geth/testing/datadir/63/geth/nodes/CURRENT.bak similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/CURRENT.bak rename to modules/geth/testing/datadir/63/geth/nodes/CURRENT.bak diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/LOCK b/modules/geth/testing/datadir/63/geth/nodes/LOCK similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/LOCK rename to modules/geth/testing/datadir/63/geth/nodes/LOCK diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/LOG b/modules/geth/testing/datadir/63/geth/nodes/LOG similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/LOG rename to modules/geth/testing/datadir/63/geth/nodes/LOG diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/nodes/MANIFEST-000036 b/modules/geth/testing/datadir/63/geth/nodes/MANIFEST-000036 similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/nodes/MANIFEST-000036 rename to modules/geth/testing/datadir/63/geth/nodes/MANIFEST-000036 diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/transactions.rlp b/modules/geth/testing/datadir/63/geth/transactions.rlp similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/transactions.rlp rename to modules/geth/testing/datadir/63/geth/transactions.rlp diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.0.bin b/modules/geth/testing/datadir/63/geth/triecache/data.0.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.0.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.0.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.1.bin b/modules/geth/testing/datadir/63/geth/triecache/data.1.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.1.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.1.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.10.bin b/modules/geth/testing/datadir/63/geth/triecache/data.10.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.10.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.10.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.11.bin b/modules/geth/testing/datadir/63/geth/triecache/data.11.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.11.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.11.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.12.bin b/modules/geth/testing/datadir/63/geth/triecache/data.12.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.12.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.12.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.13.bin b/modules/geth/testing/datadir/63/geth/triecache/data.13.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.13.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.13.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.14.bin b/modules/geth/testing/datadir/63/geth/triecache/data.14.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.14.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.14.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.15.bin b/modules/geth/testing/datadir/63/geth/triecache/data.15.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.15.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.15.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.16.bin b/modules/geth/testing/datadir/63/geth/triecache/data.16.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.16.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.16.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.17.bin b/modules/geth/testing/datadir/63/geth/triecache/data.17.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.17.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.17.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.18.bin b/modules/geth/testing/datadir/63/geth/triecache/data.18.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.18.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.18.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.19.bin b/modules/geth/testing/datadir/63/geth/triecache/data.19.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.19.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.19.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.2.bin b/modules/geth/testing/datadir/63/geth/triecache/data.2.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.2.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.2.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.20.bin b/modules/geth/testing/datadir/63/geth/triecache/data.20.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.20.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.20.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.21.bin b/modules/geth/testing/datadir/63/geth/triecache/data.21.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.21.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.21.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.22.bin b/modules/geth/testing/datadir/63/geth/triecache/data.22.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.22.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.22.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.23.bin b/modules/geth/testing/datadir/63/geth/triecache/data.23.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.23.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.23.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.24.bin b/modules/geth/testing/datadir/63/geth/triecache/data.24.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.24.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.24.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.25.bin b/modules/geth/testing/datadir/63/geth/triecache/data.25.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.25.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.25.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.26.bin b/modules/geth/testing/datadir/63/geth/triecache/data.26.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.26.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.26.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.27.bin b/modules/geth/testing/datadir/63/geth/triecache/data.27.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.27.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.27.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.28.bin b/modules/geth/testing/datadir/63/geth/triecache/data.28.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.28.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.28.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.29.bin b/modules/geth/testing/datadir/63/geth/triecache/data.29.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.29.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.29.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.3.bin b/modules/geth/testing/datadir/63/geth/triecache/data.3.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.3.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.3.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.30.bin b/modules/geth/testing/datadir/63/geth/triecache/data.30.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.30.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.30.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.31.bin b/modules/geth/testing/datadir/63/geth/triecache/data.31.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.31.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.31.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.4.bin b/modules/geth/testing/datadir/63/geth/triecache/data.4.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.4.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.4.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.5.bin b/modules/geth/testing/datadir/63/geth/triecache/data.5.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.5.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.5.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.6.bin b/modules/geth/testing/datadir/63/geth/triecache/data.6.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.6.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.6.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.7.bin b/modules/geth/testing/datadir/63/geth/triecache/data.7.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.7.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.7.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.8.bin b/modules/geth/testing/datadir/63/geth/triecache/data.8.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.8.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.8.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.9.bin b/modules/geth/testing/datadir/63/geth/triecache/data.9.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/data.9.bin rename to modules/geth/testing/datadir/63/geth/triecache/data.9.bin diff --git a/modules/clients/execution/geth/testing/datadir/63/geth/triecache/metadata.bin b/modules/geth/testing/datadir/63/geth/triecache/metadata.bin similarity index 100% rename from modules/clients/execution/geth/testing/datadir/63/geth/triecache/metadata.bin rename to modules/geth/testing/datadir/63/geth/triecache/metadata.bin diff --git a/modules/clients/execution/geth/testing/genesis.json b/modules/geth/testing/genesis.json similarity index 100% rename from modules/clients/execution/geth/testing/genesis.json rename to modules/geth/testing/genesis.json diff --git a/modules/clients/execution/geth/testing/keys/alpha.key b/modules/geth/testing/keys/alpha.key similarity index 100% rename from modules/clients/execution/geth/testing/keys/alpha.key rename to modules/geth/testing/keys/alpha.key diff --git a/modules/clients/execution/geth/testing/keys/beta.key b/modules/geth/testing/keys/beta.key similarity index 100% rename from modules/clients/execution/geth/testing/keys/beta.key rename to modules/geth/testing/keys/beta.key diff --git a/modules/clients/execution/geth/testing/keys/delta.key b/modules/geth/testing/keys/delta.key similarity index 100% rename from modules/clients/execution/geth/testing/keys/delta.key rename to modules/geth/testing/keys/delta.key diff --git a/modules/nethermind/args.nix b/modules/nethermind/args.nix new file mode 100644 index 00000000..a41a3e06 --- /dev/null +++ b/modules/nethermind/args.nix @@ -0,0 +1,121 @@ +lib: +with lib; { + baseDbPath = mkOption { + type = types.nullOr types.path; + default = null; + description = mdDoc "Configures the path of the Nethermind's database folder."; + }; + + config = mkOption { + type = types.nullOr types.str; + default = null; + example = "mainnet"; + description = mdDoc "Determines the configuration file of the network on which Nethermind will be running."; + }; + + configsDirectory = mkOption { + type = types.nullOr types.path; + default = null; + description = mdDoc "Changes the source directory of your configuration files."; + }; + + log = mkOption { + type = types.enum [ + "OFF" + "TRACE" + "DEBUG" + "INFO" + "WARN" + "ERROR" + ]; + default = "INFO"; + description = mdDoc "Changes the logging level."; + }; + + loggerConfigSource = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "Changes the path of the NLog.config file."; + }; + + modules = { + # https://docs.nethermind.io/nethermind/ethereum-client/configuration/network + Network = { + DiscoveryPort = mkOption { + type = types.port; + default = 30303; + description = mdDoc "UDP port number for incoming discovery connections."; + }; + + P2PPort = mkOption { + type = types.port; + default = 30303; + description = mdDoc "TPC/IP port number for incoming P2P connections."; + }; + }; + + # https://docs.nethermind.io/nethermind/ethereum-client/configuration/jsonrpc + JsonRpc = { + Enabled = mkOption { + type = types.bool; + default = true; + description = mdDoc "Defines whether the JSON RPC service is enabled on node startup."; + }; + + Port = mkOption { + type = types.port; + default = 8545; + description = mdDoc "Port number for JSON RPC calls."; + }; + + WebSocketsPort = mkOption { + type = types.port; + default = 8545; + description = mdDoc "Port number for JSON RPC web sockets calls."; + }; + + EngineHost = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "Host for JSON RPC calls."; + }; + + EnginePort = mkOption { + type = types.port; + default = 8551; + description = mdDoc "Port for Execution Engine calls."; + }; + + JwtSecretFile = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "Path to file with hex encoded secret for jwt authentication."; + example = "/var/run/geth/jwtsecret"; + }; + }; + + # https://docs.nethermind.io/nethermind/ethereum-client/configuration/healthchecks + HealthChecks = { + Enabled = mkOption { + type = types.bool; + default = true; + description = mdDoc "If 'true' then Health Check endpoints is enabled at /health."; + }; + }; + + # https://docs.nethermind.io/nethermind/ethereum-client/configuration/metrics + Metrics = { + Enabled = mkOption { + type = types.bool; + default = true; + description = mdDoc "If 'true',the node publishes various metrics to Prometheus Pushgateway at given interval."; + }; + + ExposePort = mkOption { + type = types.nullOr types.port; + default = null; + description = mdDoc "If 'true' then Health Check endpoints is enabled at /health"; + }; + }; + }; +} diff --git a/modules/nethermind/default.nix b/modules/nethermind/default.nix new file mode 100644 index 00000000..259d5b01 --- /dev/null +++ b/modules/nethermind/default.nix @@ -0,0 +1,154 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit + (builtins) + isBool + isList + isNull + toString + ; + inherit + (lib) + boolToString + concatStringsSep + filterAttrs + findFirst + flatten + hasPrefix + literalExpression + mapAttrs' + mapAttrsRecursive + mapAttrsToList + mdDoc + mkEnableOption + mkIf + mkBefore + mkMerge + mkOption + nameValuePair + optionalAttrs + optionals + types + zipAttrsWith + ; + + modulesLib = import ../lib.nix {inherit lib pkgs;}; + inherit (modulesLib) mkArgs baseServiceConfig scripts; + + # capture config for all configured netherminds + eachNethermind = config.services.ethereum.nethermind; +in { + ###### interface + inherit (import ./options.nix {inherit lib pkgs;}) options; + + ###### implementation + + config = mkIf (eachNethermind != {}) { + # configure the firewall for each service + networking.firewall = let + openFirewall = filterAttrs (_: cfg: cfg.openFirewall) eachNethermind; + perService = + mapAttrsToList + ( + _: cfg: + with cfg.args; { + allowedUDPPorts = [modules.Network.DiscoveryPort]; + allowedTCPPorts = + [modules.Network.P2PPort modules.JsonRpc.EnginePort] + ++ (optionals modules.JsonRpc.Enabled [modules.JsonRpc.Port modules.JsonRpc.WebSocketsPort]) + ++ (optionals modules.Metrics.Enabled && (modules.Metrics.ExposePort != null) [modules.Metrics.ExposePort]); + } + ) + openFirewall; + in + zipAttrsWith (name: flatten) perService; + + # create a service for each instance + systemd.services = + mapAttrs' ( + nethermindName: let + serviceName = "nethermind-${nethermindName}"; + in + cfg: let + scriptArgs = let + # custom arg reducer for nethermind + argReducer = value: + if (isList value) + then concatStringsSep "," value + else if (isBool value) + then boolToString value + else toString value; + + # remove modules from arguments + pathReducer = path: let + arg = concatStringsSep "." (lib.lists.remove "modules" path); + in "--${arg}"; + + # custom arg formatter for nethermind + argFormatter = { + opt, + path, + value, + argReducer, + pathReducer, + }: let + arg = pathReducer path; + in "${arg} ${argReducer value}"; + + jwtSecret = + if cfg.args.modules.JsonRpc.JwtSecretFile != null + then "--JsonRpc.JwtSecretFile %d/jwtsecret" + else ""; + + # generate flags + args = let + opts = import ./args.nix lib; + in + mkArgs { + inherit pathReducer argReducer argFormatter opts; + inherit (cfg) args; + }; + + # filter out certain args which need to be treated differently + specialArgs = ["--JsonRpc.JwtSecretFile"]; + isNormalArg = name: (findFirst (arg: hasPrefix arg name) null specialArgs) == null; + + filteredArgs = builtins.filter isNormalArg args; + in '' + --datadir %S/${serviceName} \ + ${jwtSecret} \ + ${concatStringsSep " \\\n" filteredArgs} \ + ${lib.escapeShellArgs cfg.extraArgs} + ''; + in + nameValuePair serviceName (mkIf cfg.enable { + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + description = "Nethermind Node (${nethermindName})"; + + environment = { + WEB3_HTTP_HOST = cfg.args.modules.JsonRpc.EngineHost; + WEB3_HTTP_PORT = builtins.toString cfg.args.modules.JsonRpc.Port; + }; + + # create service config by merging with the base config + serviceConfig = mkMerge [ + baseServiceConfig + { + User = serviceName; + StateDirectory = serviceName; + ExecStart = "${cfg.package}/bin/Nethermind.Runner ${scriptArgs}"; + } + (mkIf (cfg.args.modules.JsonRpc.JwtSecretFile != null) { + LoadCredential = ["jwtsecret:${cfg.args.modules.JsonRpc.JwtSecretFile}"]; + }) + ]; + }) + ) + eachNethermind; + }; +} diff --git a/modules/clients/execution/nethermind/nethermind.test.nix b/modules/nethermind/default.test.nix similarity index 100% rename from modules/clients/execution/nethermind/nethermind.test.nix rename to modules/nethermind/default.test.nix diff --git a/modules/nethermind/options.nix b/modules/nethermind/options.nix new file mode 100644 index 00000000..78fa8a69 --- /dev/null +++ b/modules/nethermind/options.nix @@ -0,0 +1,53 @@ +{ + lib, + pkgs, + ... +}: let + args = import ./args.nix lib; + + nethermindOpts = with lib; { + options = { + enable = mkEnableOption (mdDoc "Nethermind Ethereum Node."); + + package = mkOption { + type = types.package; + default = pkgs.nethermind; + defaultText = literalExpression "pkgs.nethermind"; + description = mdDoc "Package to use as Nethermind."; + }; + + inherit args; + + extraArgs = mkOption { + type = types.listOf types.str; + description = mdDoc "Additional arguments to pass to Nethermind."; + default = []; + }; + + openFirewall = mkOption { + type = types.bool; + default = false; + description = lib.mdDoc "Open ports in the firewall for any enabled networking services"; + }; + + # mixin backup options + backup = let + inherit (import ../backup/lib.nix lib) options; + in + options; + + # mixin restore options + restore = let + inherit (import ../restore/lib.nix lib) options; + in + options; + }; + }; +in { + options.services.ethereum.nethermind = with lib; + mkOption { + type = types.attrsOf (types.submodule nethermindOpts); + default = {}; + description = mdDoc "Specification of one or more Nethermind instances."; + }; +} diff --git a/modules/prysm-beacon/args.nix b/modules/prysm-beacon/args.nix new file mode 100644 index 00000000..4bd21c43 --- /dev/null +++ b/modules/prysm-beacon/args.nix @@ -0,0 +1,107 @@ +lib: +with lib; { + network = mkOption { + type = types.nullOr (types.enum ["goerli" "prater" "ropsten" "sepolia"]); + default = null; + description = mdDoc "The network to connect to. Mainnet (null) is the default ethereum network."; + }; + + jwt-secret = mkOption { + type = types.str; + default = null; + description = mdDoc "Path to a file containing a hex-encoded string representing a 32 byte secret used for authentication with an execution node via HTTP"; + example = "/var/run/prysm/jwtsecret"; + }; + + checkpoint-sync-url = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "URL of a synced beacon node to trust in obtaining checkpoint sync data. As an additional safety measure, it is strongly recommended to only use this option in conjunction with --weak-subjectivity-checkpoint flag"; + example = "https://goerli.checkpoint-sync.ethpandaops.io"; + }; + + genesis-beacon-api-url = mkOption { + type = types.nullOr types.str; + default = null; + description = mdDoc "URL of a synced beacon node to trust for obtaining genesis state. As an additional safety measure, it is strongly recommended to only use this option in conjunction with --weak-subjectivity-checkpoint flag"; + example = "https://goerli.checkpoint-sync.ethpandaops.io"; + }; + + p2p-udp-port = mkOption { + type = types.port; + default = 12000; + description = mdDoc "The port used by discv5."; + }; + + p2p-tcp-port = mkOption { + type = types.port; + default = 13000; + description = mdDoc "The port used by libp2p."; + }; + + disable-monitoring = mkOption { + type = types.bool; + default = false; + description = mdDoc "Disable monitoring service."; + }; + + monitoring-host = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "Host used to listen and respond with metrics for prometheus."; + }; + + monitoring-port = mkOption { + type = types.port; + default = 8080; + description = mdDoc "Port used to listen and respond with metrics for prometheus."; + }; + + disable-grpc-gateway = mkOption { + type = types.bool; + default = false; + description = mdDoc "Disable the gRPC gateway for JSON-HTTP requests "; + }; + + grpc-gateway-host = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "The host on which the gateway server runs on."; + }; + + grpc-gateway-port = mkOption { + type = types.port; + default = 3500; + description = mdDoc "The port on which the gateway server runs."; + }; + + rpc-host = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "Host on which the RPC server should listen."; + }; + + rpc-port = mkOption { + type = types.port; + default = 4000; + description = mdDoc "RPC port exposed by a beacon node."; + }; + + pprof = mkOption { + type = types.bool; + default = false; + description = mdDoc "Enable the pprof HTTP server."; + }; + + pprofaddr = mkOption { + type = types.str; + default = "127.0.0.1"; + description = mdDoc "pprof HTTP server listening interface."; + }; + + pprofport = mkOption { + type = types.port; + default = 6060; + description = mdDoc "pprof HTTP server listening port."; + }; +} diff --git a/modules/prysm-beacon/default.nix b/modules/prysm-beacon/default.nix new file mode 100644 index 00000000..101b4921 --- /dev/null +++ b/modules/prysm-beacon/default.nix @@ -0,0 +1,110 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib.lists) optionals findFirst; + inherit (lib.strings) hasPrefix; + inherit (lib.attrsets) zipAttrsWith mapAttrsRecursive optionalAttrs; + inherit (lib) mdDoc flatten nameValuePair filterAttrs mapAttrs mapAttrs' mapAttrsToList; + inherit (lib) optionalString literalExpression mkEnableOption mkIf mkBefore mkOption mkMerge types concatStringsSep; + + modulesLib = import ../lib.nix {inherit lib pkgs;}; + inherit (modulesLib) mkArgs baseServiceConfig foldListToAttrs scripts; + + settingsFormat = pkgs.formats.yaml {}; + + eachBeacon = config.services.ethereum.prysm-beacon; +in { + ###### interface + inherit (import ./options.nix {inherit lib pkgs;}) options; + + ###### implementation + + config = mkIf (eachBeacon != {}) { + # configure the firewall for each service + networking.firewall = let + openFirewall = filterAttrs (_: cfg: cfg.openFirewall) eachBeacon; + perService = + mapAttrsToList + ( + _: cfg: + with cfg.args; { + allowedUDPPorts = [p2p-udp-port]; + allowedTCPPorts = + [rpc-port p2p-tcp-port] + ++ (optionals (!disable-monitoring) [monitoring-port]) + ++ (optionals (!disable-grpc-gateway) [grpc-gateway-port]) + ++ (optionals pprof [pprofport]); + } + ) + openFirewall; + in + zipAttrsWith (name: flatten) perService; + + systemd.services = + mapAttrs' + ( + beaconName: let + serviceName = "prysm-beacon-${beaconName}"; + in + cfg: let + scriptArgs = let + # generate args + args = let + opts = import ./args.nix lib; + in + mkArgs { + inherit (cfg) args opts; + }; + + # filter out certain args which need to be treated differently + specialArgs = ["--network" "--jwt-secret"]; + isNormalArg = name: (findFirst (arg: hasPrefix arg name) null specialArgs) == null; + filteredArgs = builtins.filter isNormalArg args; + + network = + if cfg.args.network != null + then "--${cfg.args.network}" + else ""; + + jwtSecret = + if cfg.args.jwt-secret != null + then "--jwt-secret %d/jwt-secret" + else ""; + in '' + --accept-terms-of-use ${network} ${jwtSecret} \ + --datadir %S/${serviceName} \ + ${concatStringsSep " \\\n" filteredArgs} \ + ${lib.escapeShellArgs cfg.extraArgs} + ''; + in + nameValuePair serviceName (mkIf cfg.enable { + after = ["network.target"]; + wantedBy = ["multi-user.target"]; + description = "Prysm Beacon Node (${beaconName})"; + + environment = { + GRPC_GATEWAY_HOST = cfg.args.grpc-gateway-host; + GRPC_GATEWAY_PORT = builtins.toString cfg.args.grpc-gateway-port; + }; + + # create service config by merging with the base config + serviceConfig = mkMerge [ + baseServiceConfig + { + User = serviceName; + StateDirectory = serviceName; + ExecStart = "${cfg.package}/bin/beacon-chain ${scriptArgs}"; + MemoryDenyWriteExecute = "false"; # causes a library loading error + } + (mkIf (cfg.args.jwt-secret != null) { + LoadCredential = ["jwt-secret:${cfg.args.jwt-secret}"]; + }) + ]; + }) + ) + eachBeacon; + }; +} diff --git a/modules/prysm-beacon/options.nix b/modules/prysm-beacon/options.nix new file mode 100644 index 00000000..06f10ac7 --- /dev/null +++ b/modules/prysm-beacon/options.nix @@ -0,0 +1,53 @@ +{ + lib, + pkgs, + ... +}: let + args = import ./args.nix lib; + + beaconOpts = with lib; { + options = { + enable = mkEnableOption (mdDoc "Ethereum Beacon Chain Node from Prysmatic Labs"); + + inherit args; + + extraArgs = mkOption { + type = types.listOf types.str; + description = mdDoc "Additional arguments to pass to Prysm Beacon Chain."; + default = []; + }; + + package = mkOption { + default = pkgs.prysm; + defaultText = literalExpression "pkgs.prysm"; + type = types.package; + description = mdDoc "Package to use for Prysm binary"; + }; + + openFirewall = mkOption { + type = types.bool; + default = false; + description = lib.mdDoc "Open ports in the firewall for any enabled networking services"; + }; + + # mixin backup options + backup = let + inherit (import ../backup/lib.nix lib) options; + in + options; + + # mixin restore options + restore = let + inherit (import ../restore/lib.nix lib) options; + in + options; + }; + }; +in { + options.services.ethereum.prysm-beacon = with lib; + mkOption { + type = types.attrsOf (types.submodule beaconOpts); + default = {}; + description = mdDoc "Specification of one or more prysm beacon chain instances."; + }; +} diff --git a/nix/default.nix b/nix/default.nix index a107c2aa..31e3fe27 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -3,7 +3,7 @@ inputs.flake-root.flakeModule inputs.mission-control.flakeModule ./checks.nix - ./shell.nix ./formatter.nix + ./shell.nix ]; } diff --git a/nix/shell.nix b/nix/shell.nix index 1d2c8841..47c0c8b0 100644 --- a/nix/shell.nix +++ b/nix/shell.nix @@ -1,5 +1,6 @@ { perSystem = { + lib, pkgs, config, inputs', @@ -7,11 +8,16 @@ }: let inherit (config.mission-control) installToDevShell; inherit (pkgs) mkShellNoCC; - inherit (inputs'.nixpkgs-unstable.legacyPackages) nix-update statix; + inherit (inputs'.nixpkgs-unstable.legacyPackages) nix-update statix mkdocs; in { devShells.default = installToDevShell (mkShellNoCC { name = "ethereum.nix"; - packages = [nix-update statix]; + packages = [ + nix-update + statix + mkdocs + pkgs.python310Packages.mkdocs-material + ]; }); }; } diff --git a/reference.nix b/reference.nix new file mode 100644 index 00000000..730b4f3d --- /dev/null +++ b/reference.nix @@ -0,0 +1,31 @@ +{ + lib, + nixosOptionsDoc, + runCommand, + fetchurl, + pandoc, +}: let + optionsModule = {lib, ...}: let + eachOptions = with lib; + filterAttrs + (_: hasSuffix "options.nix") + (fs.flattenTree {tree = fs.rakeLeaves ./modules;}); + in { + imports = lib.attrValues eachOptions; + }; + + eval = lib.evalModules { + modules = [ + optionsModule + ]; + }; + options = nixosOptionsDoc { + inherit (eval) options; + }; +in + runCommand "reference.md" {} '' + cat >$out <>$out + ''