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 @@ -22,10 +22,10 @@ The output will be two data structures with the peers in binary format: - static SeedSpec6 pnSeed6_main[]={ + SeedSpec6 pnSeed6_main[]={ ... } - static SeedSpec6 pnSeed6_test[]={ + SeedSpec6 pnSeed6_test[]={ ... } @@ -98,7 +98,7 @@ def process_nodes(g, f, structname, defaultport): - g.write('static SeedSpec6 {}[] = {{\n'.format(structname)) + g.write('SeedSpec6 {}[] = {{\n'.format(structname)) first = True for line in f: comment = line.find('#') @@ -115,6 +115,7 @@ hoststr = ','.join(('0x{:02x}'.format(b)) for b in host) g.write(' {{{{{}}}, {}}}'.format(hoststr, port)) g.write('\n};\n') + g.write('uint16_t {}_len = ARRAYLEN({});\n'.format(structname, structname)) def main(): @@ -126,8 +127,8 @@ sys.exit(1) g = sys.stdout indir = sys.argv[1] - g.write('#ifndef BITCOIN_CHAINPARAMSSEEDS_H\n') - g.write('#define BITCOIN_CHAINPARAMSSEEDS_H\n') + g.write('#include \n') + g.write('#include \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,7 +142,6 @@ 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('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n') if __name__ == '__main__': 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 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 #include -#include #include #include #include @@ -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( - 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( - pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test)); + vFixedSeeds = FixedSeedsList(CBaseChainParams::TESTNET); fDefaultConsistencyChecks = false; fRequireStandard = false; @@ -503,3 +499,21 @@ SelectBaseParams(network); globalChainParams = CreateChainParams(network); } + +extern SeedSpec6 pnSeed6_main[]; +extern uint16_t pnSeed6_main_len; +extern SeedSpec6 pnSeed6_test[]; +extern uint16_t pnSeed6_test_len; + +std::vector FixedSeedsList(const std::string &chain) { + if (chain == CBaseChainParams::MAIN) { + return std::vector(pnSeed6_main, + pnSeed6_main + pnSeed6_main_len); + } + if (chain == CBaseChainParams::TESTNET) { + return std::vector(pnSeed6_test, + pnSeed6_test + pnSeed6_test_len); + } + throw std::runtime_error( + strprintf("%s: Unknown or unsupported chain %s.", __func__, chain)); +} 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,5 @@ -#ifndef BITCOIN_CHAINPARAMSSEEDS_H -#define BITCOIN_CHAINPARAMSSEEDS_H +#include +#include /** * List of fixed seed nodes for the bitcoin network * @generated by contrib/seeds/generate-seeds.py @@ -7,7 +7,7 @@ * Each line contains a 16-byte IPv6 address and a port. * IPv4 as well as onion addresses are wrapped inside an IPv6 address accordingly. */ -static SeedSpec6 pnSeed6_main[] = { +SeedSpec6 pnSeed6_main[] = { {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0d,0x5a,0x8d,0x0d}, 8333}, {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x18,0x78,0x09,0xd8}, 8333}, {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0x19,0xf1,0xe0}, 8333}, @@ -94,8 +94,9 @@ {{0x2a,0x03,0x1b,0x20,0x00,0x01,0xf4,0x10,0x00,0x40,0x00,0x00,0x00,0x00,0xac,0xef}, 8333}, {{0x2a,0x04,0x21,0x80,0x00,0x01,0x00,0x11,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x16}, 8333} }; +uint16_t pnSeed6_main_len = ARRAYLEN(pnSeed6_main); -static SeedSpec6 pnSeed6_test[] = { +SeedSpec6 pnSeed6_test[] = { {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x03,0x89,0x44,0x8c}, 48433}, {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0xbd,0x8d,0x4f}, 18333}, {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x22,0xfd,0x33,0xeb}, 18333}, @@ -122,4 +123,4 @@ {{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} }; -#endif // BITCOIN_CHAINPARAMSSEEDS_H +uint16_t pnSeed6_test_len = ARRAYLEN(pnSeed6_test);