message: contrib: recognize CJDNS seeds as such
  An IPv6 address from fc00::/8 could be either from the CJDNS network or
  from a private-unroutable-reserved segment of IPv6. A seed node with
  such an address must be from the CJDNS network, otherwise other peers
  will not be able to connect to it.
diff: @@ -61,7 +61,7 @@ def name_to_bip155(addr):
  raise ValueError(f'Invalid I2P {vchAddr}')
  elif '.' in addr: # IPv4
  return (BIP155Network.IPV4, bytes((int(x) for x in addr.split('.'))))
  - elif ':' in addr: # IPv6
  + elif ':' in addr: # IPv6 or CJDNS
  sub = [[], []] # prefix, suffix
  x = 0
  addr = addr.split(':')
  @@ -77,7 +77,14 @@ def name_to_bip155(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 (BIP155Network.IPV6, bytes(sub[0] + ([0] * nullbytes) + sub[1]))
  + addr_bytes = bytes(sub[0] + ([0] * nullbytes) + sub[1])
  + if addr_bytes[0] == 0xfc:
  + # Assume that seeds with fc00::/8 addresses belong to CJDNS,
  + # not to the publicly unroutable "Unique Local Unicast" network, see
  + # RFC4193: https://datatracker.ietf.org/doc/html/rfc4193#section-8
  + return (BIP155Network.CJDNS, addr_bytes)
  + else:
  + return (BIP155Network.IPV6, addr_bytes)
  else:
  raise ValueError('Could not parse address %s' % addr)
  