neue internet

Devlog №.4

Buff it out

Where has the time gone?! August already, huh? No intro this time, it’s been relatively quiet in the Handshake space. Hop in!


Nameserver gets beefier

Functionally, our nameserver has been solid. The GraphQL API functionality is coming along. Currently, the API supports creating A, AAAA, CAA, CNAME, DNAME, DNSKEY, NS, and PTR records. Querying DNS records via GraphQL sounds weird but here’s how it looks:

query GetRecord($params: RecordQuery) {
  record(params: $params) {
    detail {
      class
      data {
        ... on DataString {
          data
        }
        ... on DataObject {
          flags
          issuerCritical
          tag
          value
        }
      }
      name
      ttl
      type
    }
  }
}

Example values you’d send with the above query:

{
  params: {
    name: "blog.neuenet",
    type: "AAAA"
  }
}

Even if you’re familiar with GraphQL, the ellipsis in the query might look weird.

Basically, detail.data could either be a string (applies to a handful of resource records) or an object (applies to every other resource record) so with GraphQL, we represent those possibilities with a union. DataString and DataObject make up our Data union.

Here’s an example response to the query we shared above:

{
  data: {
    record: {
      detail: [
        {
          class: "IN",
          data: {
            data: "2001:19f0:6001:412e:5400:03ff:fe7f:978d"
          },
          name: "blog.neuenet",
          ttl: 300,
          type: "AAAA"
        }
      ]
    }
  }
}

Ideally, there wouldn’t be a nested data.data param within detail in the response, but that’s something I can abstract away with a future client library for this nameserver.

ANY support

Well. This was a pain to understand and build but worth it. You’re basically cycling through a database for every resource record pertaining to a specific domain name. As you can imagine, this kind of request gets expensive. No wonder most nameservers don’t implement/enable this (at least not for public‑facing nameservers)!

Library update

packet does the heavy lifting for the nameserver and needed an update. Certain resource records (DNSKEY, DS, NSEC3, NULL, RRSIG, and TXT) require keys to be buffers. Figuring out how to store buffers with the API was annoying so I decided to store those keys as strings and offload the buffer conversion to the library.

Success? 🤷🏾‍♂️ Works for me!

What’s Next?

This morning, I had a call with someone who represents an ICANN TLD. I gotta say, it’s quite refreshing to exchange ideas and insight with someone who understands the DNS and blockchain. For the Handshake community, or those interested in it; I can tell you that we’re on the right track. No other blockchain‑based naming system cares about the DNS. No other system cares about providing real‑world utility for their cults communities.

As for beachfront/, there’s only 14 more resource records to implement in the nameserver API (with CRUD operations). After that, integration with the app and a bunch of UI work. Our guiding principle is the question, “how can we improve upon the domain experience?” If you’re a domain owner who is unsatisfied with how things are with Web2 registrars, let us know on Twitter @beachfront_ or @neuenet!

We’re building for the Internet so your input matters.