Blockstore proposal: add a call for defining a new namespace

Original Submission

(This was originally found on https://github.com/blockstack/blockstore/issues/76 and I’m just porting my comments over so that we can have a discussion here instead of on GitHub.)

In the current system, all namespaces simply exist and don’t need to be created. If you want to start operating in a namespace, you simply use a prefix that has the namespace properties in it (like pricing rules and whether names expire or not) and a human-readable identifier of length 1 (in order to distinguish it from other namespace with the same properties).

I’d like to explore a new system, whereby namespaces are explicitly defined and then they can be used from that point on. In this system, names could only be registered in existing namespaces.

Namespaces would be created with a namespace creation operation with the following effects:

the properties of the namespace are laid out, including the identifier of the namespace, the name pricing rules, and the name expiration rules
a namespace creation fee is paid (to prevent spam)
the namespace is added to the list of existing namespaces
Here is an example of a possible namespace creation operation as part of this system:

CREATE NAMESPACE

  1. Operation fee: 1 BTC
  2. TLD: .cool
  3. Name lifetime: 1 year
  4. Baseline name price: 0.01 BTC
  5. Name auctioning: false
  6. Name price decay per letter: 2x

There are 26^4 or 0.5M possible 4-letter TLDs. This means that 0.5M bitcoins would have to be spent to initialize all of the possible namespaces. People would be wise to choose TLDs that don’t conflict with existing ICANN TLDs. Further, TLDs don’t have to be used in practice. At minimum they act as a unique identifier for the namespace.

To be clear, if a namespace is defined it is not owned by anyone. The person who defines the namespace simply gets to set the properties of that namespace.

Update 1:

I’d like to modify this proposal and suggest that a namespace can be instantiated with a list of pre-registered names and their owning ScriptPubKeys (consult https://en.bitcoin.it/wiki/Transaction if you’re not familiar with this term).

The remarkable thing about this is it would essentially upgrade the “create namespace” call into an “import namespace” call. Namespaces could be migrated over seamlessly from other blockchains like Namecoin. And the best part is that users would be able to use their existing private keys to manage the names.

Update 2

Originally I thought that we would do the following:

  1. allow a namespace creator to specify the hash of a file with a list of pre-registered names
  2. either (a) have the file be stored in a DHT (which unfortunately makes naming dependent on external storage) or (b) have namespace creation files distributed with the code (which is cumbersome and is only realistic if namespaces are infrequently instantiated, maybe if it was costly to do so).
  3. have nodes that reconstruct and resolve the namespace respect all the names in the instantiation file

Now I’m thinking there’s a better way to do this:

  1. have two operations to create a namespace: “define” and “begin”
  2. in the “define” step, allow a namespace creator to define the details of the namespace, other than the pre-registered names
  3. only open up name registrations once the “begin” operation has been submitted
  4. allow names to be registered exclusively by the instantiator between the “define” operation and the “begin” operation

The advantages of this are that all names are stored inside of the blockchain, no external storage with an instantiation file is required.

Yes, this could be viewed as costly, since 1 transaction is required per name registered, but I argue this is a good thing, as namespace instantiation should be costly. And name registration shouldn’t just be free for the instantiator.

I also argue that this wouldn’t be prohibitively expensive, as a namespace with 30K names would only cost about $1,000 to port over, which is quite reasonable.

I also argue that this wouldn’t be prohibitively expensive, as a namespace with 30K names would only cost about $1,000 to port over, which is quite reasonable.

How quickly can I add 30K transactions to Bitcoin? It looks like this past month there were between 80K and 130K transactions per day [1], and between 700 and 900 transactions per block [2]. But, what’s the fastest rate that an individual can broadcast transactions at, without significantly driving up mining fees? Assuming I can push through 25 name transactions per block (e.g. I contribute about 3% of each block’s transactions on average), I can import 30K names in about 8 days plus 8 more hours. Can it go faster?

[1] https://blockchain.info/charts/n-transactions?timespan=30days&showDataPoints=true&daysAverageString=1&show_header=true&scale=0&address=
[2] https://blockchain.info/charts/n-transactions-per-block?timespan=30days&showDataPoints=true&daysAverageString=7&show_header=true&scale=0&address=

1 Like

Yes, 8 days sounds reasonable. And I would say we should be able to be patient enough to wait 8 days anyway.

The big advantage of this is it stays true to allowing each user to have his/her own name registration transaction in the blockchain.

140K transactions per day were done during a recent “stress test” [1], but from the blockchain.info graphs it looks like the average volume has been going up steadily over the past year and will likely approach that number soon anyway.

[1] https://www.reddit.com/r/Bitcoin/comments/37ub2k/stress_test_recap/