Giter Club home page Giter Club logo

dcrseeder's Introduction

dcrseeder

Build Status ISC License

Overview

dcrseeder is a crawler for the Decred network, which exposes a list of reliable nodes via a built-in HTTP server.

When dcrseeder is started for the first time, it will connect to the dcrd node specified in config, send a getaddrs request, expecting an addr message response. This message contains hostnames and IPs of peers known by the node. dcrseeder will then connect to each of these peers, send a getaddrs request, and will continue traversing the network in this fashion. dcrseeder maintains a list of all known peers and periodically checks that they are online and available. The list is stored on disk in a json file, so on subsequent start ups the dcrd node specified in config does not need to be online.

When dcrseeder is queried for node information, it responds with details of a random selection of the reliable nodes it knows about.

Requirements

Go 1.20 or newer.

Getting Started

To build and install from a checked-out repo, run go install in the repo's root directory.

To start dcrseeder listening on localhost:8000 with an initial connection to working testnet node 192.168.0.1:

$ ./dcrseeder --testnet.enabled --testnet.seeder 192.168.0.1 --testnet.listen=localhost:8000

You will then need to redirect HTTPS traffic on your public IP to localhost:8000

An example configuration file lists the full set of options available.

Issue Tracker

The integrated github issue tracker is used for this project.

License

dcrseeder is licensed under the copyfree ISC License.

dcrseeder's People

Contributors

chappjc avatar dajohi avatar jholdstock avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dcrseeder's Issues

single process should be able to crawl and resolve multiple networks

Ideally a single dcrseeder process should be able to crawl both mainnet and testnet:

  • Specify one or two hostnames (one or both of mainnet and testnet)
  • Crawl one or both networks simultaneously
  • Launch a single DNS server that resolves one or more host names (two in the case of mainnet and testnet)

e.g.

  • Name server: ns.blah.org
  • Testnet host name: testnet-seed.blah.org (with NS record pointing to ns.blah.org)
  • Mainnet host name: mainnet-seed.blah.org (with NS record also pointing to ns.blah.org)

display statistics

perhaps a configuration option to display statistics every specified unit of time.

number of live nodes grouped by services
total number of live nodes:
number of IPs that still need checking:
number of dns lookups

etc...

Add IP sanity checks

IP addresses that are not publically routable should be ignored and never added to the cache.

ipv6 support

when exec dcrseeder -n seedserver.xxx.xxx -H mainnet-seed.xxx.xxx -l 2001:ac8:40:xxxx::xxxx:xxxx:53 -s 2001:ac8:40:xxxx::xxxx:xxxx
got a problem ResolveUDPAddr: address 2001:ac8:40:xxxx::xxxx:xxxx:53: no suitable address found
So now only support IPv4?

Pruning

Need to remove addresses from the cache that have never worked or haven't worked in some specified duration.

Full working node requirement

It has been a long time since I've looked at the old seeder code but I know that it did not require using a running node for it to run. It would be best if this seeder could do the same.

I do remember that the old seeder had a hardcoded list of all the other seeders:
https://github.com/decred/decred-seeder/blob/19351f3e3ec93b96ca3438c465c04163747d0c5c/main.cpp#L400
Did it use that to get the initial node list (assuming at least one of those must be up and possibly serving a static list of 'good' nodes, at least during the initial network bringup?

Regardless of the exact method, require a full node is a lot to ask for running a seeder (which is otherwise a very light task).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.