<div dir="ltr">Hi there!<div><br></div><div>Lately we have been bumping up against the limitations of DNS as a protocol for learning about the p2p network. As a proposal for how to address this, I have written a new network crawler and seed:</div><div><br></div><div><a href="https://github.com/mikehearn/httpseed">https://github.com/mikehearn/httpseed</a><br></div><div><br></div><div>It implements a standard DNS seed with a minimal embedded DNS server (you can find one running at <a href="http://dnsseed.vinumeris.com">dnsseed.vinumeris.com</a>) and also has the following extra features:</div><div><br></div><div><ul class="" style="padding:0px 0px 0px 2em;margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif;line-height:20.4799995422363px"><li>Can serve seed data using gzipped, timestamped digitally signed protocol buffers over HTTP. This fixes authentication, auditability, malware false positives and extensibility. The signature uses secp256k1. SSL is <b>not</b> used, to simplify deployment and to allow ISPs to cache the results transparently when a future version sets cache control headers.</li><li>Can additionally serve data in JSON, XML and HTML (examples for <a href="http://vinumeris.com:8081/peers.json">json</a> <a href="http://vinumeris.com:8081/peers.xml">xml</a> <a href="http://vinumeris.com:8081/peers.html">html</a>) for ease of use with other tools, like web browsers.</li><li>Results can be restricted using query parameters, e.g. for a service flags bit mask. Cartographer tests nodes that set service bit 2 to see if they really support BIP 64, and this requirement can also be specified as an argument to the query.</li><li><span style="line-height:20.4799995422363px">Crawl speed can be specified in terms of successful connects per second, rather than the number-of-threads approach used by other crawlers.</span><br></li><li>Can export statistics and controls using JMX, so you can reconfigure it at runtime and view charts of things like connects/sec or CPU usage using any JMX console, like Mission Control.</li><li>A client for it is in bitcoinj master branch.</li></ul><div><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif"><span style="line-height:20.4799995422363px">To provide all these features Cartographer relies heavily on libraries and is written in a concise new language called <a href="http://kotlinlang.org/">Kotlin</a>, so it fits in about 650 lines of code. Kotlin is easy to learn for anyone who knows Scala or Java, so it should be straightforward to hack on and there is no chance of any buffer/heap exploits in the DNS, HTTP or Bitcoin protocol stacks.</span></font></div></div><div><br></div><div>In the new year I will probably write a BIP describing the protocol. For now you can see the definition <a href="https://github.com/mikehearn/httpseed/blob/master/src/main/peerseeds.proto">here</a> or just read the textual forms from the links above. It&#39;s pretty self explanatory. I hope that in future other DNS seeds will start supporting this protocol too, as it has many advantages.</div><div><br></div><div>Future versions might include data like how long the peer has been around, node keys if we add auth/encrypt support to the p2p protocol and so on.</div></div>