A Dialectic Approach to Namecoin NFTs Provenance

Namecoin NFT enthusiast: I own this amazing 2011 blockchain art!

Namecoin NFT skeptic: The name expired between 2011 and now. You just bought the re-registered version. This re-registration creates a new UTXO chain in Namecoin’s design, so it's a new NFT.

Enthusiast: You’re right that this is a new UTXO. If you are considering the asset to be “UTXO + name”, what changes is the fungible part (unspent NMC = UTXO) and not the non-fungible object/blob itself.

It’s a bit odd to say it’s a new NFT when the only thing changing is the fungible part.

Nevertheless, to keep it technical and not philosophical, I’ll stop calling them assets or tokens, and just keep referring to them as what they are: “names” and “UTXOs“. The fact is, this is a new UTXO, but this new UTXO provides the ownership proof for the old "name" entity.

Skeptic: No, the original name doesn't exist when it expires. When you or someone else re-registers it, it creates a new name. Your re-registration is simply a copymint of the old name.

Enthusiast: Even semantically things that expire continue existing (like the spoilt milk); but in this case, we can also check the chain, the name definitely exists after expiration.

Does this exist?
Does this exist?

Skeptic: At the protocol level, there is literally a rule:

name_firstupdate must be on a name never seen or that has expired”

So “name_firstupdate” function (command) does not distinguish between “expired names” or “never-registered names”. If the actual protocol design is treating the expired names the same as never-registered names, we can conclude that expired names stop existing.

Enthusiast: This is an added interpretation you’re making. In reality, name_firstupdate is a software function (command). At the code level, this function’s scope is simply checking whether a name is controlled (active).

The code that checks whether a name is active
The code that checks whether a name is active

The false equivalence of “never-existing names” and “re-registered names” is a human interpretation. After all, the expired name exists on the chain, unlike never-registered names.

Skeptic: Yes, it physically exists but only as part of the previous transactions. After all, blockchain is just a ledger with a record of historical transactions. A history of its existence doesn't mean it still exists today.

This is like saying the two tokenURIs on Ethereum, on two separate tokens which are from completely separate collections are the same asset!

Enthusiast: That would be a fair point if this was just a message or an entry on the blockchain like metadata; but names aren't just entries, they're the unique identifiers in Namecoin. Namecoin names exist as identifiers just like their UTXOs still exist at the point of expiration.

Skeptic: So how do we know it's the same name?

Enthusiast: It's literally the same text string with the same characters.

Skeptic: Yes, but cryptographically speaking, it has a different UTXO. If different UTXOs are attached to two same-looking names, then these two names are actually different entities. There can be a “John Doe” living in the USA and another “John Doe” living in Singapore, they can have the same name but they would have different DNAs. They’re different people. Their DNA is the distinguishing factor. It’s their unique identifier.

Enthusiast: That’s the thing. In Namecoin, NAMES are the unique identifiers:

In Namecoin, two names with the same set of characters cannot exist at the same time, only ONE can exist.

So yes, names are literally the DNAs.

There are many proofs of this:

  1. Technical proof 1: Consensus code creates a decentralized database where the names are directly used as primary keys of the database.

  2. Technical proof 2: Consensus code itself treats names as unique keys, for example via mapping the value fields to names, or via making controls through names (meanwhile UTXOs keep changing while names never do)

  3. Technical proof 3: Namecoin fork is designed in a way where every single addition to the Bitcoin protocol is designed around names, not UTXOs.

  4. Ecosystem-level proof: RPCs use name-specific calls (and not UTXO calls) such as name_show, name_history since the earliest days of the Namecoin blockchain.

  5. Intention proofs in the documentation: Terms such as “re-registration“ differentiated from “registration”.

  6. Intention proofs from the code syntax: Terms like “active/inactive names” instead of “existing/destroyed names“

My favorite ones are the technical proofs, because I can directly show the code.

the name being added is checked against the existing name list
the name being added is checked against the existing name list

This is one of the examples in the consensus code that checks whether the name being requested is already active. Never mind the fact that the syntax is wholly based around “names” (showing the intention of the protocol), the code directly treats “names” as the technical identifiers of the asset.

Skeptic: Hold up. How does it treat the name as an identifier based on this code piece?

Enthusiast: If you are an administrator of a database, and if a column in the database is used as a key to match with another database entry, then that column is treated as an identifier for that data table. This is just how databases work.

Here, when the user wants to add a NEW name to the database, the code is checking whether it matches an OLD name in the database already. Along with it, it checks whether it’s expired (inactive) or not [Note that this second check is not a key-match but rather a feature of the asset]. If not expired, then the new entry is added to the database. The code is using the “name” field as the database key to match!

This is important.

The fact that the code decides the database entry based on a match between the new name to the old name is proof that the code treats names as “database keys”, i.e. identifiers of that database.

A visual representation of how database identifiers work
A visual representation of how database identifiers work

In fact, in the entire lifetime of this text field (i.e. name), this unique set of characters has multiple UTXO stations even during standard transfers (i.e. separate 0.01 NMCs that keep getting spent and new ones being created) without ever changing the text field itself.

Skeptic: What’s a UTXO station? I heard about UTXOs but never “UTXO stations”.

Enthusiast: That’s the term Daniel Kraft (Chief Namecoin Scientist) used in our conversations. It refers to individual 0.01NMCs that get spent and/or get created throughout a name’s lifecycle. It’s actually what a UTXO is. The term is less important than what actually happens. The point is that your name remains the same during a standard transfer but your UTXO changes. In fact, that even happens in Counterparty and Dogeparty!

Skeptic: Well, UTXOs technically change, but in Counterparty and Dogeparty, and in fact in Namecoin during the standard transfer, there is a clear chain of custody. You can see within the same process that the first UTXO is being spent, and the second UTXO is being created. That’s a clear chain of custody.

That’s not the case with expired and re-registered Namecoin assets. You can’t show clear chain custody for the re-registered Namecoin assets.

Enthusiast: Determining the provenance based on the UTXO chain is a human interpretation rather than technical one. The technical reality, when you look at the snapshot of today, is that the UTXO of the transferred asset is different from the UTXO that was originally issued. But Counterparty protocol ADDS this “UTXO-chain” interpretation to create a provenance record. Just like Namecoin protocol ADDS the “name-chain” interpretation to create a provenance record.

Ultimately, my only point is that we can see that UTXOs are not being treated as unique identifiers.

Coming back to your “name/DNA analogy”; NAMES are the DNAs in Namecoin.

Is your DNA new when you visit a new website?
Is your DNA new when you visit a new website?

Skeptic: Where is the transaction linking this name you’re trading to the old name?

Enthusiast: The easiest way to prove it is using the name_history RPC method to show your currently owned name’s history and how it -the very asset that you hold- was first registered much earlier. Of course RPC methods are external to the protocol, but it’s just a simple way to show how the Namecoin ecosystem tools work to prove the protocol-level provenance.

But you asked about the transactions. At the protocol level, the transaction linking the new UTXO to the name exists exactly on the chain. So does the transaction linking the old UTXO to the same name.

Here they are: The old one and the new one.

Same name, in different transactions
Same name, in different transactions

Skeptic: Yeah but aren’t these just different versions of the same name?

Enthusiast: This is an incorrect interpretation. There is nothing in these transactions that verifies this interpretation. All that we know based on only looking at the chain, the name fields in these transactions are the same text fields and UTXOs are different. Solely based on the information in a ledger of transactions, we have no way to declare whether UTXOs or names should be unique identifiers (and this applies to Counterparty and Dogeparty too).

I actually understand why your initial instinct is to call the UTXO set “the main identifier”. This is an assumption rooted in our knowledge of other chains, but this would mean ignoring the technical design of Namecoin. After all, names have their own tracking as per Namecoin consensus design. It’s right there in the consensus code and the consensus rule.

Chief Namecoin Scientist, creator of Namecoin Core, Daniel Kraft
Chief Namecoin Scientist, creator of Namecoin Core, Daniel Kraft

This is why re-registered Namecoin names are the old names.

Skeptic: Wait; you literally just said the consensus rule says “allow name registration only if the name does not exist already“. Doesn’t this mean the expiration made the name “non-existent”? So indeed the expiration destroys the asset from existence, and when you register it in 2022, this becomes a new name!

Enthusiast: Now you’re making a semantic argument. Technically what you’re referring to is re-registration, as referred to in the Namecoin documentation itself.

re-registration ≠ registration
re-registration ≠ registration

I could even make the semantic argument that there is a reason every Namecoin documentation has different names for “registration” and “re-registration”; meaning that an expired asset is different from a never-existed asset.

But this is of course still just semantics. What matters is the code: The consensus code undoubtedly treats names as unique identifiers, which means names maintain their history throughout expiration and re-registration.

Skeptic: OK, but your argument makes sense in the context of databases, not cryptographic proofs. When we want to track a record of an NFT, we look at the chain of ownership records that link the NFT to a wallet. This is how it works everywhere else. What you’re saying makes no sense…

Enthusiast: There is proof of everything above in the cryptographically secured blockchain and in the blockchain consensus code. In fact, the consensus code constructs the database from the blockchain before making these checks. The database does not exist in isolation.

If we narrow down the definitions, and we were to consider only “proof of ownership with cryptographic private keys” as NFTs, then we would have to consider pre-Bitcoin p2p cryptographic proofs between artists/collectors also NFTs. In this case, the first NFTs would probably be from the 1970s or 1980s :) I don’t think you want to make such an arbitrary and forced definition.

Skeptic: I’m specifically talking about cryptographic ownership records throughout the asset lifecycle in a blockchain. This doesn’t seem to exist in these re-registered assets.

Enthusiast: Different chains have different logic for tracking provenance. There is a world of difference between Bitcoin and Ethereum too. We shouldn’t make conclusions based on “how it should be”, we should make conclusions based on “how it is in reality”. The scientific method dictates systematic observation and modifying hypotheses.

Skeptic: So what, do you call re-registered Namecoin assets “old NFTs” then?

Enthusiast: One could consider the “non-fungible part” (name) in the asset as the NFT and still call these names “old NFTs”. It is a completely acceptable way of defining them. Others can respectfully disagree and say that these are new tokens due to the new UTXOs. The former group is more liberal with its definitions, and the latter group is more conservative with its definitions.

But in both cases, both groups should accept the technical fact that the “name” itself is old.

I prefer the term “blockchain collectible” anyway; and in that context, what’s 100% technically correct is that historical Namecoin assets are the oldest non-fungible blockchain collectibles.

Skeptic: Fair enough. But do you realize that you are making a lot of detailed arguments? Your argument is very nuanced, and you’re having to make all these clarifications. Namecoin assets will always have these debates. Ethereum or Bitcoin assets don’t need these explanations. So Namecoin assets aren’t for me.

Enthusiast: That’s fine. Nothing is for everyone. Every chain has different issues; for example in Counterparty, the issuer (or the name owner) can always change the metadata and rug the buyers. In the end, technology improves iteratively and cumulatively. Namecoin is quirky because it’s the oldest. Ethereum is more sophisticated because it’s newer. Nothing wrong with wanting to collect newer assets.

Skeptic: I prefer old collectibles with clean histories. I think more sophisticated assets with no debates around them (even if slightly newer) will accrue more value over time than older but expiring, nuanced assets.

Enthusiast: I can poke holes in newer but still old assets too. For example there is no way to verify the link between a Rare Pepe token and a Rare Pepe card image, not even through an off-chain URL. Ultimately every step that moved the NFT space forward is interesting, older or newer. I’m just talking about timestamps and technical provenance. We can agree to disagree on significance or valuations.

Skeptic: Agree to disagree then 🤝


Disclaimer: While all the arguments made in this conversation are real; I may edit this conversation later if new arguments or facts arise. Also, unfortunately, most of the conversations in the Vintage NFT space aren’t this respectful. I hope we can start basing our conversations on technical facts.

PS: Special thanks to Daniel Kraft (Chief Namecoin Scientist) who proof-read this article and provided the links to the consensus code. Also thanks to 0xSchatz for his feedback.

Subscribe to Chainleft
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.