diff --git a/contrib/seeds/generate-seeds.py b/contrib/seeds/generate-seeds.py
--- a/contrib/seeds/generate-seeds.py
+++ b/contrib/seeds/generate-seeds.py
@@ -128,6 +128,9 @@
     indir = sys.argv[1]
     g.write('#ifndef BITCOIN_CHAINPARAMSSEEDS_H\n')
     g.write('#define BITCOIN_CHAINPARAMSSEEDS_H\n')
+    g.write('#include <chainparams.h>\n')
+    g.write('#include <util/strencodings.h>\n')
+    g.write('#include <tinyformat.h>\n')
     g.write('/**\n')
     g.write(' * List of fixed seed nodes for the bitcoin network\n')
     g.write(' * @{} by contrib/seeds/generate-seeds.py\n'.format('generated'))
@@ -141,6 +144,20 @@
     g.write('\n')
     with open(os.path.join(indir, 'nodes_test.txt'), 'r', encoding="utf8") as f:
         process_nodes(g, f, 'pnSeed6_test', 18333)
+    g.write(
+        'std::vector<SeedSpec6> FixedSeedsList(const std::string &chain) {\n')
+    g.write('    if (chain == CBaseChainParams::MAIN) {\n')
+    g.write('        return std::vector<SeedSpec6>(\n')
+    g.write('            pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));\n')
+    g.write('    }\n')
+    g.write('    if (chain == CBaseChainParams::TESTNET) {\n')
+    g.write('        return std::vector<SeedSpec6>(\n')
+    g.write('            pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));\n')
+    g.write('    }\n')
+    g.write('    throw std::runtime_error(\n')
+    g.write(
+        '        strprintf("%s: Unknown or unsupported chain %s.", __func__, chain));\n')
+    g.write('}\n')
     g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n')
 
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -440,6 +440,7 @@
 	cashaddrenc.cpp
 	chainparams.cpp
 	chainparamsconstants.cpp
+	chainparamsseeds.cpp
 	config.cpp
 	consensus/merkle.cpp
 	coins.cpp
diff --git a/src/chainparams.h b/src/chainparams.h
--- a/src/chainparams.h
+++ b/src/chainparams.h
@@ -142,4 +142,6 @@
 
 const CCheckpointData &CheckpointData(const std::string &chain);
 
+std::vector<SeedSpec6> FixedSeedsList(const std::string &chain);
+
 #endif // BITCOIN_CHAINPARAMS_H
diff --git a/src/chainparams.cpp b/src/chainparams.cpp
--- a/src/chainparams.cpp
+++ b/src/chainparams.cpp
@@ -7,7 +7,6 @@
 #include <chainparams.h>
 
 #include <chainparamsconstants.h>
-#include <chainparamsseeds.h>
 #include <consensus/merkle.h>
 #include <network.h>
 #include <tinyformat.h>
@@ -200,9 +199,7 @@
         base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x88, 0xB2, 0x1E};
         base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x88, 0xAD, 0xE4};
         cashaddrPrefix = "bitcoincash";
-
-        vFixedSeeds = std::vector<SeedSpec6>(
-            pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
+        vFixedSeeds = FixedSeedsList(CBaseChainParams::MAIN);
 
         fDefaultConsistencyChecks = false;
         fRequireStandard = true;
@@ -344,8 +341,7 @@
         base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF};
         base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94};
         cashaddrPrefix = "bchtest";
-        vFixedSeeds = std::vector<SeedSpec6>(
-            pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
+        vFixedSeeds = FixedSeedsList(CBaseChainParams::TESTNET);
 
         fDefaultConsistencyChecks = false;
         fRequireStandard = false;
diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.cpp
rename from src/chainparamsseeds.h
rename to src/chainparamsseeds.cpp
--- a/src/chainparamsseeds.h
+++ b/src/chainparamsseeds.cpp
@@ -1,5 +1,8 @@
 #ifndef BITCOIN_CHAINPARAMSSEEDS_H
 #define BITCOIN_CHAINPARAMSSEEDS_H
+#include <chainparams.h>
+#include <util/strencodings.h>
+#include <tinyformat.h>
 /**
  * List of fixed seed nodes for the bitcoin network
  * @generated by contrib/seeds/generate-seeds.py
@@ -122,4 +125,16 @@
     {{0x20,0x01,0x0b,0xc8,0x18,0x28,0x13,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 18433},
     {{0x26,0x01,0x06,0x02,0x8d,0x80,0x0b,0x63,0xdc,0x6d,0x61,0xff,0xfe,0x9f,0x7f,0x29}, 18333}
 };
+std::vector<SeedSpec6> FixedSeedsList(const std::string &chain) {
+    if (chain == CBaseChainParams::MAIN) {
+        return std::vector<SeedSpec6>(
+            pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main));
+    }
+    if (chain == CBaseChainParams::TESTNET) {
+        return std::vector<SeedSpec6>(
+            pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
+    }
+    throw std::runtime_error(
+        strprintf("%s: Unknown or unsupported chain %s.", __func__, chain));
+}
 #endif // BITCOIN_CHAINPARAMSSEEDS_H