Metanet node

Metanet Unspendable

A transaction that is a node in a tree of on-chain content, linked to its parent by the parent's signature.

What it is

The Metanet structures data on chain as a directed graph, so content in different transactions can be related, named and found. A node is a transaction with an OP_RETURN output that starts with the four-byte Metanet flag, "meta", followed by the node's public key and its parent's transaction id. An edge from parent to child exists only when the parent's key signs an input of the child, so only a parent can add children. Nobody needs to trust an index: anyone can rebuild the whole graph from the chain.

Script pattern

  1. Input: <Sig P_parent> <P_parent> The parent's signature and key. This is what creates the edge.
  2. OP_FALSE OP_RETURN A data output.
  3. "meta" The Metanet flag: this transaction is a node.
  4. <P_node> The node's public key: its address.
  5. <TxID_parent> The parent's transaction id. Without it, the node is a root.
  6. <attributes and content> … Optional: a name, keywords, a file and its type.

The node's id is H(P_node || TxID_node): its key and its own transaction id, hashed together.

How it is spent

The node's OP_RETURN output cannot be spent. Its key, P_node, signs for the node's children in later transactions.

Background

nChain proposed the Metanet as a layer on the blockchain that needs no change to the protocol or its consensus rules. Its technical summary describes how nodes, edges, versions and names give the chain the shape of an internet, with resource locators like URLs. Bitblocks detects Metanet nodes as they sync, and the Metanet explorer walks their trees.

Concepts

Node
A transaction carrying the Metanet flag. It stores content, and it has a public key, P_node, written in its OP_RETURN. Its id is the hash of that key and its transaction id.
Edge
A link from a parent to a child. It exists only when the parent's key signs an input of the child, so a parent alone decides its children. A node has at most one parent and may have any number of children. An edge is a logical link: the child need not spend an output of the parent.
Root
A node with no parent, or whose parent field does not point to a valid Metanet node. A root is like a top-level domain; its children are sub-domains, and a node with no children is an end point.
Versions
Two nodes with the same public key are versions of one node. The one with the most proof of work behind it is the latest: the higher block, or within a block, the later transaction.
MURL
A Metanet URL, built like a web address from a domain name, a path and a file: mnp://bobsblog/path/file. Each part maps to a node in the tree.
Insertion methods
Content can go in one OP_RETURN after the node fields; in an OP_RETURN header followed by pushes that are dropped with OP_DROP; or across several sibling transactions that share a parent and carry an index for reassembly.

On chain

Transactions our protocol detector tagged Metanet. Transaction pages need sign-in.

Specification