Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Blockchain

On a usual blockchain, a block is verified by checking its parent hash against the hash of the previous block, which can be directly computed. If the node does this all the way back to a trusted block, then chain is valid. The only block that can be trusted initially is the genesis block, which typically ships with the verifying code.

Lucidchart
autoSize1
macroId1ab8a6f6-180c-44cd-80ff-7ecb7d517093
pageCount1
instanceId7bf7a548-f937-390d-b7ee-64c4940fe12e
pages
width700
documentIdd87e1bb1-bac1-41e5-af4a-c04c3d7e03df
alignleft
typesimple
updated1505446469187
height500

Blocktree

If namespaces could be disjoint, with no possibility of crossing the streams, then namespaces could form the basis for completely separate blockchains. They could even branch, though not join without a tremendous amount of work, and every block would be traceable back to genesis.

Lucidchart
autoSize1
macroId9c404230-9194-4cdc-b981-83393948d2ef
pageCount1
instanceId7bf7a548-f937-390d-b7ee-64c4940fe12e
pages
width700
documentIdce35df7c-5ed4-47e9-8f56-0afc35443c35
alignleft
typesimple
updated1505447074662
height500

This does lead to a world where a part of the tree (each path outward from genesis) forms a complete blockchain, but it lacks the fluidity in namespaces that our rhetoric prefers.

Blockfail

It's not clear what to call it when two namespaces cross at a transaction. One thought brought up in a meeting was that the crossed transaction could go into either namespace's chain. If, in the following diagram, the Block AB1 is inserted into Namespace A's chain, then either (1) the B subchain lacks some blocks involving B or (2) the B subchain is complete, but non-contiguous. In the first case, block B2 simply connects to B1, and the AB transaction is never seen on that chain. In the second, B1 and Bm both terminate subchains.

Lucidchart
autoSize1
macroId8fa29097-d79e-4135-a4dd-ded4189c82b0
pageCount1
instanceId7bf7a548-f937-390d-b7ee-64c4940fe12e
pages
width700
documentId6e9a540e-6075-4568-a0d1-fa7c2491822b
alignleft
typesimple
updated1505445735357
height500

This second alternative is likely preferable and might even be workable. Some auxiliary pointer to the orphaned part of the chain may be necessary.

BlockDAG

Obviously, recovering a partial chain covering a subset of names is easier if the namespace is known upfront. In fact, if namespaces are registered, first-class entities, the blockchain hash/pointer mechanism could be extended to thread namespaces through the blockchain itself. In this namespace, there are multiple parent hashes, and following the ParentN hash all the way back to genesis both verifies a namespace and allows a smaller download.

Lucidchart
autoSize1
macroIdd6b4a09b-a8ea-4381-a6ff-551bcc41bfd2
pageCount1
instanceId7bf7a548-f937-390d-b7ee-64c4940fe12e
pages
width700
documentIded994669-a830-43be-9f6d-b712ac0fc58c
alignleft
typesimple
updated1505419479789
height500

Auxiliary

In the running code, it seems most natural to track namespace inclusion in a separate data structure, using auxiliary storage either to associate names or namespaces to blocks in the chain.

Lucidchart
autoSize1
macroId586f6ef4-05f0-49f3-aef3-d1f04c469458
pageCount1
instanceId7bf7a548-f937-390d-b7ee-64c4940fe12e
pages
width700
documentId3d34e4e1-ac44-4e90-ac59-3c00f9da0b72
alignleft
typesimple
updated1505447741238
height500

If names are not resolvable upfront to a single namespace, then recording the names themselves in this way is possible. In fact, assuming that a list of names in a block is much shorter than the list of state changes stored in the block (the transactions or formulae), perhaps it makes sense to store the names in its own genesis-rooted blockchain that carries "pointers" to transaction-carrying blocks on the transaction blockchain.

Lucidchart
autoSize1
macroId10587f53-141f-4164-9bd0-238b8b01560e
pageCount1
instanceId7bf7a548-f937-390d-b7ee-64c4940fe12e
pages
width700
documentId0448abbf-b615-4f8a-aeef-75a7411ca9cc
alignleft
typesimple
updated1505950656208
height500

In the above diagram, Nj represents the list of names used in at least one transaction in block j. If names are reducible to namespaces, this is even shorter as only the list of (registered, accessible) namespaces needs to be memorialized in the namechain.




Page Properties
hiddentrue


AuthorChris Kirkwood-Watts
Updated