partial bitcoin#21560: Add Tor v3 hardcoded seeds

excludes:
- 2a257de113fd31539b68c28c47ef94f257b6e427
- 9b29d5df7fc555eaea42029f334f2995c6ccde3d
This commit is contained in:
Kittywhiskers Van Gogh 2023-09-10 19:40:08 +05:30 committed by PastaPastaPasta
parent 4041d20716
commit aa76506bc9
5 changed files with 255 additions and 239 deletions

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
# Copyright (c) 2014-2017 Wladimir J. van der Laan
# Copyright (c) 2014-2021 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
'''
@ -13,19 +13,13 @@ argument:
These files must consist of lines in the format
<ip>
<ip>:<port>
[<ipv6>]
[<ipv6>]:<port>
<onion>.onion
0xDDBBCCAA (IPv4 little-endian old pnSeeds format)
<onion>.onion:<port>
The output will be two data structures with the peers in binary format:
static SeedSpec6 pnSeed6_main[]={
...
}
static SeedSpec6 pnSeed6_test[]={
static const uint8_t chainparams_seed_{main,test}[]={
...
}
@ -33,24 +27,33 @@ These should be pasted into `src/chainparamsseeds.h`.
'''
from base64 import b32decode
from binascii import a2b_hex
from enum import Enum
import struct
import sys
import os
import re
# ipv4 in ipv6 prefix
pchIPv4 = bytearray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff])
# tor-specific ipv6 prefix
pchOnionCat = bytearray([0xFD,0x87,0xD8,0x7E,0xEB,0x43])
class BIP155Network(Enum):
IPV4 = 1
IPV6 = 2
TORV2 = 3
TORV3 = 4
I2P = 5
CJDNS = 6
def name_to_ipv6(addr):
if len(addr)>6 and addr.endswith('.onion'):
def name_to_bip155(addr):
'''Convert address string to BIP155 (networkID, addr) tuple.'''
if addr.endswith('.onion'):
vchAddr = b32decode(addr[0:-6], True)
if len(vchAddr) != 16-len(pchOnionCat):
if len(vchAddr) == 10:
return (BIP155Network.TORV2, vchAddr)
elif len(vchAddr) == 35:
assert(vchAddr[34] == 3)
return (BIP155Network.TORV3, vchAddr[:32])
else:
raise ValueError('Invalid onion %s' % vchAddr)
return pchOnionCat + vchAddr
elif '.' in addr: # IPv4
return pchIPv4 + bytearray((int(x) for x in addr.split('.')))
return (BIP155Network.IPV4, bytes((int(x) for x in addr.split('.'))))
elif ':' in addr: # IPv6
sub = [[], []] # prefix, suffix
x = 0
@ -67,13 +70,12 @@ def name_to_ipv6(addr):
sub[x].append(val & 0xff)
nullbytes = 16 - len(sub[0]) - len(sub[1])
assert((x == 0 and nullbytes == 0) or (x == 1 and nullbytes > 0))
return bytearray(sub[0] + ([0] * nullbytes) + sub[1])
elif addr.startswith('0x'): # IPv4-in-little-endian
return pchIPv4 + bytearray(reversed(a2b_hex(addr[2:])))
return (BIP155Network.IPV6, bytes(sub[0] + ([0] * nullbytes) + sub[1]))
else:
raise ValueError('Could not parse address %s' % addr)
def parse_spec(s, defaultport):
def parse_spec(s):
'''Convert endpoint string to BIP155 (networkID, addr, port) tuple.'''
match = re.match(r'\[([0-9a-fA-F:]+)\](?::([0-9]+))?$', s)
if match: # ipv6
host = match.group(1)
@ -85,17 +87,39 @@ def parse_spec(s, defaultport):
(host,_,port) = s.partition(':')
if not port:
port = defaultport
port = 0
else:
port = int(port)
host = name_to_ipv6(host)
host = name_to_bip155(host)
return (host,port)
return host + (port, )
def process_nodes(g, f, structname, defaultport):
g.write('static SeedSpec6 %s[] = {\n' % structname)
first = True
def ser_compact_size(l):
r = b""
if l < 253:
r = struct.pack("B", l)
elif l < 0x10000:
r = struct.pack("<BH", 253, l)
elif l < 0x100000000:
r = struct.pack("<BI", 254, l)
else:
r = struct.pack("<BQ", 255, l)
return r
def bip155_serialize(spec):
'''
Serialize (networkID, addr, port) tuple to BIP155 binary format.
'''
r = b""
r += struct.pack('B', spec[0].value)
r += ser_compact_size(len(spec[1]))
r += spec[1]
r += struct.pack('>H', spec[2])
return r
def process_nodes(g, f, structname):
g.write('static const uint8_t %s[] = {\n' % structname)
for line in f:
comment = line.find('#')
if comment != -1:
@ -103,14 +127,12 @@ def process_nodes(g, f, structname, defaultport):
line = line.strip()
if not line:
continue
if not first:
g.write(',\n')
first = False
(host,port) = parse_spec(line, defaultport)
hoststr = ','.join(('0x%02x' % b) for b in host)
g.write(' {{%s}, %i}' % (hoststr, port))
g.write('\n};\n')
spec = parse_spec(line)
blob = bip155_serialize(spec)
hoststr = ','.join(('0x%02x' % b) for b in blob)
g.write(f' {hoststr},\n')
g.write('};\n')
def main():
if len(sys.argv)<2:
@ -124,14 +146,13 @@ def main():
g.write(' * List of fixed seed nodes for the dash network\n')
g.write(' * AUTOGENERATED by contrib/seeds/generate-seeds.py\n')
g.write(' *\n')
g.write(' * Each line contains a 16-byte IPv6 address and a port.\n')
g.write(' * IPv4 as well as onion addresses are wrapped inside an IPv6 address accordingly.\n')
g.write(' * Each line contains a BIP155 serialized (networkID, addr, port) tuple.\n')
g.write(' */\n')
with open(os.path.join(indir,'nodes_main.txt'), 'r', encoding="utf8") as f:
process_nodes(g, f, 'pnSeed6_main', 9999)
process_nodes(g, f, 'chainparams_seed_main')
g.write('\n')
with open(os.path.join(indir,'nodes_test.txt'), 'r', encoding="utf8") as f:
process_nodes(g, f, 'pnSeed6_test', 19999)
process_nodes(g, f, 'chainparams_seed_test')
g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n')
if __name__ == '__main__':

View File

@ -245,7 +245,7 @@ public:
// Dash BIP44 coin type is '5'
nExtCoinType = 5;
vFixedSeeds = std::vector<SeedSpec6>(std::begin(pnSeed6_main), std::end(pnSeed6_main));
vFixedSeeds = std::vector<uint8_t>(std::begin(chainparams_seed_main), std::end(chainparams_seed_main));
// long living quorum params
AddLLMQ(Consensus::LLMQType::LLMQ_50_60);
@ -417,7 +417,7 @@ public:
assert(genesis.hashMerkleRoot == uint256S("0xe0028eb9648db56b1ac77cf090b99048a8007e2bb64b68f092c03c7f56a662c7"));
vFixedSeeds.clear();
vFixedSeeds = std::vector<SeedSpec6>(std::begin(pnSeed6_test), std::end(pnSeed6_test));
vFixedSeeds = std::vector<uint8_t>(std::begin(chainparams_seed_test), std::end(chainparams_seed_test));
vSeeds.clear();
// nodes with support for servicebits filtering should be at the top

View File

@ -19,11 +19,6 @@
#include <string>
#include <vector>
struct SeedSpec6 {
uint8_t addr[16];
uint16_t port;
};
typedef std::map<int, uint256> MapCheckpoints;
struct CCheckpointData {
@ -127,7 +122,7 @@ public:
const std::vector<std::string>& DNSSeeds() const { return vSeeds; }
const std::vector<unsigned char>& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; }
int ExtCoinType() const { return nExtCoinType; }
const std::vector<SeedSpec6>& FixedSeeds() const { return vFixedSeeds; }
const std::vector<uint8_t>& FixedSeeds() const { return vFixedSeeds; }
const CCheckpointData& Checkpoints() const { return checkpointData; }
//! Get allowed assumeutxo configuration.
@ -161,7 +156,7 @@ protected:
std::string strNetworkID;
CBlock genesis;
CBlock devnetGenesis;
std::vector<SeedSpec6> vFixedSeeds;
std::vector<uint8_t> vFixedSeeds;
bool fDefaultConsistencyChecks;
bool fRequireStandard;
bool fRequireRoutableExternalIP;

View File

@ -4,190 +4,189 @@
* List of fixed seed nodes for the dash network
* AUTOGENERATED by contrib/seeds/generate-seeds.py
*
* Each line contains a 16-byte IPv6 address and a port.
* IPv4 as well as onion addresses are wrapped inside an IPv6 address accordingly.
* Each line contains a BIP155 serialized (networkID, addr, port) tuple.
*/
static SeedSpec6 pnSeed6_main[] = {
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x02,0x38,0xd5,0xdd}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x02,0x43,0xbe}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x02,0x49,0x3a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x09,0xed,0x22}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x4f,0x6d,0xf3}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x65,0x2c,0xe1}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0xa1,0x57,0xb8}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0xa1,0x78,0x23}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0xa1,0x7e,0x07}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0xb5,0xca,0x12}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0x8b,0xf4,0x09}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0x9d,0x81,0x94}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0x51,0xf6,0x2a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0x53,0x85,0x0a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0x53,0x85,0xc4}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0x0a,0x61,0x24}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0x94,0x63,0xf2}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0xb2,0x04,0x32}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x22,0xd1,0xed,0xf2}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x12,0xe3,0x38}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x61,0xe3,0x15}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2a,0xc2,0x85,0x77}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2b,0xe5,0x4d,0x2e}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x21,0x18,0x18}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x38,0x40,0x6b}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x38,0x46,0x71}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x3f,0x6b,0x5a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x47,0x9e,0x3a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x47,0x9e,0x42}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x47,0x9f,0x68}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x4c,0x27,0xf1}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x4c,0x59,0x3f}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x4f,0x2e,0x47}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x55,0x75,0x2d}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x55,0x75,0xca}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x56,0xa2,0x53}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x56,0xa2,0x55}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x56,0xa2,0x9a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x1e,0xbd,0xbd}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x1e,0xbd,0xd5}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x1e,0xbd,0xd6}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x1e,0xbd,0xfb}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x24,0x28,0xf2}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0xfe,0xf1,0x18}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0xfe,0xf1,0x1c}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x38,0x76,0x14}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x5b,0x98,0xe8}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x62,0x7b,0x6a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x32,0x11,0xaf,0x5b}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x0f,0x60,0xce}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x0f,0x75,0x2a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x0f,0xfe,0xe0}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x26,0xb3,0xe6}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x53,0xbf,0xd2}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x9e,0xa9,0xed}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0xca,0x8d,0x3c}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x36,0xa4,0xb9,0x60}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x36,0xda,0xda,0x2b}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3e,0xab,0xbe,0x8c}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x40,0xfb,0x41,0xce}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x42,0xac,0x0c,0x56}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x42,0xf4,0xf3,0x45}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x43,0xca,0x14,0xe6}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x45,0x3d,0x6b,0xd7}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x45,0x3d,0x6b,0xd9}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x45,0x3d,0x6b,0xf2}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4d,0xdc,0xd4,0xb3}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0x55,0x88,0xf8}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0xd1,0xea,0xaa}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0xf0,0x84,0xe7}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0x02,0xf0,0x76}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0x47,0x0d,0xa5}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0xab,0x02,0xf5}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0xe2,0xdf,0x99}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x52,0xca,0xe6,0x53}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x52,0xd3,0x15,0x17}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x52,0xd3,0x15,0xb3}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x52,0xd3,0x19,0x69}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x52,0xd3,0x19,0xc1}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x54,0x34,0x74,0x34}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x54,0xf2,0xb3,0xcc}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0x11,0xf8,0x5b}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xce,0xa5,0x59}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xce,0xa5,0x5a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xd1,0xf1,0x23}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xd1,0xf1,0xbe}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xd1,0xf2,0x04}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xd1,0xf2,0x62}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x57,0x62,0xfd,0x56}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0x28,0x0d,0x2c}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0x2d,0x43,0x36}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0x2d,0x43,0x8a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5d,0xbe,0x8c,0x72}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xb7,0x33,0x8d}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xb7,0x33,0x92}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xb7,0x35,0x27}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd3,0xc4,0x22}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd7,0x2d,0xe1}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd7,0x6e,0x78}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x67,0xa0,0x5f,0xdb}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x67,0xa0,0x5f,0xe1}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0x80,0xef,0xd6}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6a,0x34,0x79,0xda}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6b,0xa1,0x18,0x5a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6b,0xbf,0x65,0xd4}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6c,0x3d,0xf7,0x46}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x7b,0xc1,0x40,0xa6}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8a,0x44,0x1c,0x08}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8b,0x09,0xc7,0xf0}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8c,0xee,0xd2,0x22}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8d,0x5f,0x35,0x6b}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8e,0xca,0xcd,0x65}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x90,0x7e,0x8e,0xa7}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x91,0x83,0x1c,0x42}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x91,0x83,0x1c,0x44}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x91,0x83,0x1d,0xd6}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x91,0x83,0x2a,0x60}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x92,0xb9,0xaf,0xce}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x98,0x43,0x45,0xe4}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9e,0x65,0xa2,0x4a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9e,0x65,0xa8,0x1c}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x47,0x33,0xcd}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x56,0x4f,0x3e}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa8,0x77,0x50,0x04}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa8,0xeb,0x51,0x55}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa8,0xeb,0x55,0xf1}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xaa,0x4b,0xaa,0x87}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xf9,0x15,0x7a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xf9,0x1a,0x14}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xae,0x22,0xe9,0xc9}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xae,0x22,0xe9,0xca}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xae,0x22,0xe9,0xcb}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xae,0x22,0xe9,0xcc}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0x66,0x41,0x91}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0x7b,0x39,0xc6}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0x7b,0x39,0xc8}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0x7b,0x39,0xcb}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0x7b,0x39,0xcd}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0xdf,0x88,0x2b}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x3f,0x79,0x81}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x9d,0x5b,0x7e}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x9d,0x5b,0xb0}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x9d,0x5b,0xb3}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x05,0x34,0xe0}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x3e,0x97,0xaa}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x3e,0x97,0xae}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x40,0x68,0xde}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x40,0x68,0xdf}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x8e,0xd4,0x90}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xa5,0xab,0x75}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xaf,0x9e,0x28}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xb1,0x3b,0x25}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xe4,0x53,0x71}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xe4,0x53,0x9c}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xf3,0x0a,0x70}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xf3,0x0a,0x73}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x28,0xf1,0x6a}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x7f,0xe6,0x28}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x7f,0xed,0xf3}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0xf4,0x75,0x0c}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc0,0xa9,0x06,0x19}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc1,0x1d,0x38,0x58}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc1,0x1d,0x3b,0x60}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc1,0xed,0x51,0xe0}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x1a,0xe8,0xc3}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0xb6,0x4b,0x88}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc3,0xb5,0xd2,0x11}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc3,0xb5,0xd3,0x40}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xca,0x3d,0xc6,0x70}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xca,0x3d,0xf8,0xd3}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd8,0x6b,0xd9,0x3e}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd8,0xbd,0x93,0x5f}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd8,0xbd,0x93,0xb2}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd8,0xbd,0x97,0x5e}, 9999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xde,0x74,0x40,0xe5}, 9999}
static const uint8_t chainparams_seed_main[] = {
0x01,0x04,0x02,0x38,0xd5,0xdd,0x27,0x0f,
0x01,0x04,0x05,0x02,0x43,0xbe,0x27,0x0f,
0x01,0x04,0x05,0x02,0x49,0x3a,0x27,0x0f,
0x01,0x04,0x05,0x09,0xed,0x22,0x27,0x0f,
0x01,0x04,0x05,0x4f,0x6d,0xf3,0x27,0x0f,
0x01,0x04,0x05,0x65,0x2c,0xe1,0x27,0x0f,
0x01,0x04,0x05,0xa1,0x57,0xb8,0x27,0x0f,
0x01,0x04,0x05,0xa1,0x78,0x23,0x27,0x0f,
0x01,0x04,0x05,0xa1,0x7e,0x07,0x27,0x0f,
0x01,0x04,0x05,0xb5,0xca,0x12,0x27,0x0f,
0x01,0x04,0x12,0x8b,0xf4,0x09,0x27,0x0f,
0x01,0x04,0x12,0x9d,0x81,0x94,0x27,0x0f,
0x01,0x04,0x17,0x51,0xf6,0x2a,0x27,0x0f,
0x01,0x04,0x17,0x53,0x85,0x0a,0x27,0x0f,
0x01,0x04,0x17,0x53,0x85,0xc4,0x27,0x0f,
0x01,0x04,0x1f,0x0a,0x61,0x24,0x27,0x0f,
0x01,0x04,0x1f,0x94,0x63,0xf2,0x27,0x0f,
0x01,0x04,0x1f,0xb2,0x04,0x32,0x27,0x0f,
0x01,0x04,0x22,0xd1,0xed,0xf2,0x27,0x0f,
0x01,0x04,0x25,0x12,0xe3,0x38,0x27,0x0f,
0x01,0x04,0x25,0x61,0xe3,0x15,0x27,0x0f,
0x01,0x04,0x2a,0xc2,0x85,0x77,0x27,0x0f,
0x01,0x04,0x2b,0xe5,0x4d,0x2e,0x27,0x0f,
0x01,0x04,0x2d,0x21,0x18,0x18,0x27,0x0f,
0x01,0x04,0x2d,0x38,0x40,0x6b,0x27,0x0f,
0x01,0x04,0x2d,0x38,0x46,0x71,0x27,0x0f,
0x01,0x04,0x2d,0x3f,0x6b,0x5a,0x27,0x0f,
0x01,0x04,0x2d,0x47,0x9e,0x3a,0x27,0x0f,
0x01,0x04,0x2d,0x47,0x9e,0x42,0x27,0x0f,
0x01,0x04,0x2d,0x47,0x9f,0x68,0x27,0x0f,
0x01,0x04,0x2d,0x4c,0x27,0xf1,0x27,0x0f,
0x01,0x04,0x2d,0x4c,0x59,0x3f,0x27,0x0f,
0x01,0x04,0x2d,0x4f,0x2e,0x47,0x27,0x0f,
0x01,0x04,0x2d,0x55,0x75,0x2d,0x27,0x0f,
0x01,0x04,0x2d,0x55,0x75,0xca,0x27,0x0f,
0x01,0x04,0x2d,0x56,0xa2,0x53,0x27,0x0f,
0x01,0x04,0x2d,0x56,0xa2,0x55,0x27,0x0f,
0x01,0x04,0x2d,0x56,0xa2,0x9a,0x27,0x0f,
0x01,0x04,0x2e,0x1e,0xbd,0xbd,0x27,0x0f,
0x01,0x04,0x2e,0x1e,0xbd,0xd5,0x27,0x0f,
0x01,0x04,0x2e,0x1e,0xbd,0xd6,0x27,0x0f,
0x01,0x04,0x2e,0x1e,0xbd,0xfb,0x27,0x0f,
0x01,0x04,0x2e,0x24,0x28,0xf2,0x27,0x0f,
0x01,0x04,0x2e,0xfe,0xf1,0x18,0x27,0x0f,
0x01,0x04,0x2e,0xfe,0xf1,0x1c,0x27,0x0f,
0x01,0x04,0x2f,0x38,0x76,0x14,0x27,0x0f,
0x01,0x04,0x2f,0x5b,0x98,0xe8,0x27,0x0f,
0x01,0x04,0x2f,0x62,0x7b,0x6a,0x27,0x0f,
0x01,0x04,0x32,0x11,0xaf,0x5b,0x27,0x0f,
0x01,0x04,0x33,0x0f,0x60,0xce,0x27,0x0f,
0x01,0x04,0x33,0x0f,0x75,0x2a,0x27,0x0f,
0x01,0x04,0x33,0x0f,0xfe,0xe0,0x27,0x0f,
0x01,0x04,0x33,0x26,0xb3,0xe6,0x27,0x0f,
0x01,0x04,0x33,0x53,0xbf,0xd2,0x27,0x0f,
0x01,0x04,0x33,0x9e,0xa9,0xed,0x27,0x0f,
0x01,0x04,0x34,0xca,0x8d,0x3c,0x27,0x0f,
0x01,0x04,0x36,0xa4,0xb9,0x60,0x27,0x0f,
0x01,0x04,0x36,0xda,0xda,0x2b,0x27,0x0f,
0x01,0x04,0x3e,0xab,0xbe,0x8c,0x27,0x0f,
0x01,0x04,0x40,0xfb,0x41,0xce,0x27,0x0f,
0x01,0x04,0x42,0xac,0x0c,0x56,0x27,0x0f,
0x01,0x04,0x42,0xf4,0xf3,0x45,0x27,0x0f,
0x01,0x04,0x43,0xca,0x14,0xe6,0x27,0x0f,
0x01,0x04,0x45,0x3d,0x6b,0xd7,0x27,0x0f,
0x01,0x04,0x45,0x3d,0x6b,0xd9,0x27,0x0f,
0x01,0x04,0x45,0x3d,0x6b,0xf2,0x27,0x0f,
0x01,0x04,0x4d,0xdc,0xd4,0xb3,0x27,0x0f,
0x01,0x04,0x50,0x55,0x88,0xf8,0x27,0x0f,
0x01,0x04,0x50,0xd1,0xea,0xaa,0x27,0x0f,
0x01,0x04,0x50,0xf0,0x84,0xe7,0x27,0x0f,
0x01,0x04,0x51,0x02,0xf0,0x76,0x27,0x0f,
0x01,0x04,0x51,0x47,0x0d,0xa5,0x27,0x0f,
0x01,0x04,0x51,0xab,0x02,0xf5,0x27,0x0f,
0x01,0x04,0x51,0xe2,0xdf,0x99,0x27,0x0f,
0x01,0x04,0x52,0xca,0xe6,0x53,0x27,0x0f,
0x01,0x04,0x52,0xd3,0x15,0x17,0x27,0x0f,
0x01,0x04,0x52,0xd3,0x15,0xb3,0x27,0x0f,
0x01,0x04,0x52,0xd3,0x19,0x69,0x27,0x0f,
0x01,0x04,0x52,0xd3,0x19,0xc1,0x27,0x0f,
0x01,0x04,0x54,0x34,0x74,0x34,0x27,0x0f,
0x01,0x04,0x54,0xf2,0xb3,0xcc,0x27,0x0f,
0x01,0x04,0x55,0x11,0xf8,0x5b,0x27,0x0f,
0x01,0x04,0x55,0xce,0xa5,0x59,0x27,0x0f,
0x01,0x04,0x55,0xce,0xa5,0x5a,0x27,0x0f,
0x01,0x04,0x55,0xd1,0xf1,0x23,0x27,0x0f,
0x01,0x04,0x55,0xd1,0xf1,0xbe,0x27,0x0f,
0x01,0x04,0x55,0xd1,0xf2,0x04,0x27,0x0f,
0x01,0x04,0x55,0xd1,0xf2,0x62,0x27,0x0f,
0x01,0x04,0x57,0x62,0xfd,0x56,0x27,0x0f,
0x01,0x04,0x59,0x28,0x0d,0x2c,0x27,0x0f,
0x01,0x04,0x59,0x2d,0x43,0x36,0x27,0x0f,
0x01,0x04,0x59,0x2d,0x43,0x8a,0x27,0x0f,
0x01,0x04,0x5d,0xbe,0x8c,0x72,0x27,0x0f,
0x01,0x04,0x5f,0xb7,0x33,0x8d,0x27,0x0f,
0x01,0x04,0x5f,0xb7,0x33,0x92,0x27,0x0f,
0x01,0x04,0x5f,0xb7,0x35,0x27,0x27,0x0f,
0x01,0x04,0x5f,0xd3,0xc4,0x22,0x27,0x0f,
0x01,0x04,0x5f,0xd7,0x2d,0xe1,0x27,0x0f,
0x01,0x04,0x5f,0xd7,0x6e,0x78,0x27,0x0f,
0x01,0x04,0x67,0xa0,0x5f,0xdb,0x27,0x0f,
0x01,0x04,0x67,0xa0,0x5f,0xe1,0x27,0x0f,
0x01,0x04,0x68,0x80,0xef,0xd6,0x27,0x0f,
0x01,0x04,0x6a,0x34,0x79,0xda,0x27,0x0f,
0x01,0x04,0x6b,0xa1,0x18,0x5a,0x27,0x0f,
0x01,0x04,0x6b,0xbf,0x65,0xd4,0x27,0x0f,
0x01,0x04,0x6c,0x3d,0xf7,0x46,0x27,0x0f,
0x01,0x04,0x7b,0xc1,0x40,0xa6,0x27,0x0f,
0x01,0x04,0x8a,0x44,0x1c,0x08,0x27,0x0f,
0x01,0x04,0x8b,0x09,0xc7,0xf0,0x27,0x0f,
0x01,0x04,0x8c,0xee,0xd2,0x22,0x27,0x0f,
0x01,0x04,0x8d,0x5f,0x35,0x6b,0x27,0x0f,
0x01,0x04,0x8e,0xca,0xcd,0x65,0x27,0x0f,
0x01,0x04,0x90,0x7e,0x8e,0xa7,0x27,0x0f,
0x01,0x04,0x91,0x83,0x1c,0x42,0x27,0x0f,
0x01,0x04,0x91,0x83,0x1c,0x44,0x27,0x0f,
0x01,0x04,0x91,0x83,0x1d,0xd6,0x27,0x0f,
0x01,0x04,0x91,0x83,0x2a,0x60,0x27,0x0f,
0x01,0x04,0x92,0xb9,0xaf,0xce,0x27,0x0f,
0x01,0x04,0x98,0x43,0x45,0xe4,0x27,0x0f,
0x01,0x04,0x9e,0x65,0xa2,0x4a,0x27,0x0f,
0x01,0x04,0x9e,0x65,0xa8,0x1c,0x27,0x0f,
0x01,0x04,0xa7,0x47,0x33,0xcd,0x27,0x0f,
0x01,0x04,0xa7,0x56,0x4f,0x3e,0x27,0x0f,
0x01,0x04,0xa8,0x77,0x50,0x04,0x27,0x0f,
0x01,0x04,0xa8,0xeb,0x51,0x55,0x27,0x0f,
0x01,0x04,0xa8,0xeb,0x55,0xf1,0x27,0x0f,
0x01,0x04,0xaa,0x4b,0xaa,0x87,0x27,0x0f,
0x01,0x04,0xad,0xf9,0x15,0x7a,0x27,0x0f,
0x01,0x04,0xad,0xf9,0x1a,0x14,0x27,0x0f,
0x01,0x04,0xae,0x22,0xe9,0xc9,0x27,0x0f,
0x01,0x04,0xae,0x22,0xe9,0xca,0x27,0x0f,
0x01,0x04,0xae,0x22,0xe9,0xcb,0x27,0x0f,
0x01,0x04,0xae,0x22,0xe9,0xcc,0x27,0x0f,
0x01,0x04,0xb0,0x66,0x41,0x91,0x27,0x0f,
0x01,0x04,0xb0,0x7b,0x39,0xc6,0x27,0x0f,
0x01,0x04,0xb0,0x7b,0x39,0xc8,0x27,0x0f,
0x01,0x04,0xb0,0x7b,0x39,0xcb,0x27,0x0f,
0x01,0x04,0xb0,0x7b,0x39,0xcd,0x27,0x0f,
0x01,0x04,0xb0,0xdf,0x88,0x2b,0x27,0x0f,
0x01,0x04,0xb2,0x3f,0x79,0x81,0x27,0x0f,
0x01,0x04,0xb2,0x9d,0x5b,0x7e,0x27,0x0f,
0x01,0x04,0xb2,0x9d,0x5b,0xb0,0x27,0x0f,
0x01,0x04,0xb2,0x9d,0x5b,0xb3,0x27,0x0f,
0x01,0x04,0xb9,0x05,0x34,0xe0,0x27,0x0f,
0x01,0x04,0xb9,0x3e,0x97,0xaa,0x27,0x0f,
0x01,0x04,0xb9,0x3e,0x97,0xae,0x27,0x0f,
0x01,0x04,0xb9,0x40,0x68,0xde,0x27,0x0f,
0x01,0x04,0xb9,0x40,0x68,0xdf,0x27,0x0f,
0x01,0x04,0xb9,0x8e,0xd4,0x90,0x27,0x0f,
0x01,0x04,0xb9,0xa5,0xab,0x75,0x27,0x0f,
0x01,0x04,0xb9,0xaf,0x9e,0x28,0x27,0x0f,
0x01,0x04,0xb9,0xb1,0x3b,0x25,0x27,0x0f,
0x01,0x04,0xb9,0xe4,0x53,0x71,0x27,0x0f,
0x01,0x04,0xb9,0xe4,0x53,0x9c,0x27,0x0f,
0x01,0x04,0xb9,0xf3,0x0a,0x70,0x27,0x0f,
0x01,0x04,0xb9,0xf3,0x0a,0x73,0x27,0x0f,
0x01,0x04,0xbc,0x28,0xf1,0x6a,0x27,0x0f,
0x01,0x04,0xbc,0x7f,0xe6,0x28,0x27,0x0f,
0x01,0x04,0xbc,0x7f,0xed,0xf3,0x27,0x0f,
0x01,0x04,0xbc,0xf4,0x75,0x0c,0x27,0x0f,
0x01,0x04,0xc0,0xa9,0x06,0x19,0x27,0x0f,
0x01,0x04,0xc1,0x1d,0x38,0x58,0x27,0x0f,
0x01,0x04,0xc1,0x1d,0x3b,0x60,0x27,0x0f,
0x01,0x04,0xc1,0xed,0x51,0xe0,0x27,0x0f,
0x01,0x04,0xc2,0x1a,0xe8,0xc3,0x27,0x0f,
0x01,0x04,0xc2,0xb6,0x4b,0x88,0x27,0x0f,
0x01,0x04,0xc3,0xb5,0xd2,0x11,0x27,0x0f,
0x01,0x04,0xc3,0xb5,0xd3,0x40,0x27,0x0f,
0x01,0x04,0xca,0x3d,0xc6,0x70,0x27,0x0f,
0x01,0x04,0xca,0x3d,0xf8,0xd3,0x27,0x0f,
0x01,0x04,0xd8,0x6b,0xd9,0x3e,0x27,0x0f,
0x01,0x04,0xd8,0xbd,0x93,0x5f,0x27,0x0f,
0x01,0x04,0xd8,0xbd,0x93,0xb2,0x27,0x0f,
0x01,0x04,0xd8,0xbd,0x97,0x5e,0x27,0x0f,
0x01,0x04,0xde,0x74,0x40,0xe5,0x27,0x0f,
};
static SeedSpec6 pnSeed6_test[] = {
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2b,0xe5,0x4d,0x2e}, 19999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x4d,0xa7,0xf7}, 19999},
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x3e,0xcb,0xf9}, 19999}
static const uint8_t chainparams_seed_test[] = {
0x01,0x04,0x2b,0xe5,0x4d,0x2e,0x4e,0x1f,
0x01,0x04,0x2d,0x4d,0xa7,0xf7,0x4e,0x1f,
0x01,0x04,0xb2,0x3e,0xcb,0xf9,0x4e,0x1f,
};
#endif // BITCOIN_CHAINPARAMSSEEDS_H

View File

@ -166,8 +166,8 @@ bool GetLocal(CService& addr, const CNetAddr *paddrPeer)
return nBestScore >= 0;
}
//! Convert the pnSeed6 array into usable address objects.
static std::vector<CAddress> convertSeed6(const std::vector<SeedSpec6> &vSeedsIn)
//! Convert the serialized seeds into usable address objects.
static std::vector<CAddress> ConvertSeeds(const std::vector<uint8_t> &vSeedsIn)
{
// It'll only connect to one or two seed nodes because once it connects,
// it'll get a pile of addresses with newer timestamps.
@ -175,13 +175,14 @@ static std::vector<CAddress> convertSeed6(const std::vector<SeedSpec6> &vSeedsIn
// weeks ago.
const int64_t nOneWeek = 7*24*60*60;
std::vector<CAddress> vSeedsOut;
vSeedsOut.reserve(vSeedsIn.size());
FastRandomContext rng;
for (const auto& seed_in : vSeedsIn) {
struct in6_addr ip;
memcpy(&ip, seed_in.addr, sizeof(ip));
CAddress addr(CService(ip, seed_in.port), GetDesirableServiceFlags(NODE_NONE));
CDataStream s(vSeedsIn, SER_NETWORK, PROTOCOL_VERSION | ADDRV2_FORMAT);
while (!s.eof()) {
CService endpoint;
s >> endpoint;
CAddress addr{endpoint, GetDesirableServiceFlags(NODE_NONE)};
addr.nTime = GetTime() - rng.randrange(nOneWeek) - nOneWeek;
LogPrint(BCLog::NET, "Added hardcoded seed: %s\n", addr.ToString());
vSeedsOut.push_back(addr);
}
return vSeedsOut;
@ -2258,7 +2259,7 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
LogPrintf("Adding fixed seed nodes as DNS doesn't seem to be available.\n");
CNetAddr local;
local.SetInternal("fixedseeds");
addrman.Add(convertSeed6(Params().FixedSeeds()), local);
addrman.Add(ConvertSeeds(Params().FixedSeeds()), local);
done = true;
}
}