🎣Deterministic resolution
Deterministically resolving an entity instance, including particular versions
To enable persistent resolution of nodes by address, we need to define an algorithm for deterministically traversing the graph. This definition is described assuming little more than functional Sidetree nodes able to find state at given commits, and the implementation of a resolver will differ depending on the practical applications used.
For resolution, we use both the node ID and the version Commit. Both are unique persistent identifiers by Sidetree definition, and uniquely resolvable due to how Sidetree deterministically resolves conflicts and cryptographically ensures document update ordering.
Resolution cases
These cases define one step of addressing, grouped by type of target. However, a link is ideally done directly to a particular version of a node. This means using the unique ID and commit of an attestation to resolve that node, instead of addressing it relative to its target. This way of addressing allows for, more or less, instant lookups where relative addressing can contain multiple resolution steps to resolve.
Root node
Addressing the latest state of some node N:
Query network for status of node
N
Particular version
Addressing a particular commit C of a node N:
Query network for status of node
Nat commitC
Particular time
Addressing the state of a node N as of time T:
Query network for update history of node
NFind the newest commit
Cthat was anchored before or at timeTResolve node
Nat commitC
Particular version index
Addressing a particular version k of a node N:
Query network for update history of node
NSelect commit
Cat indexkin update historyResolve node
Nat commitC
Outgoing edge
Addressing of an outgoing edge from a node N made against some other node:
Resolve
NGet value
Rfrom reference fieldResolve node
R
Versioned outgoing edge
Addressing a versioned outgoing edge from a node N made against some other node:
Query network for status of node
NGet value of reference field
Rand version fieldCResolve node
Rat commitC
Incoming edges
Addressing of an incoming edge to node N, from some node N2 of entity type T:
Query network for all nodes of type
TFind node
N2withReference field set to
N1
Resolve
N2
Versioned incoming edges
Addressing of an incoming edge to node N as of version C, from some node N2 of entity type T:
Query network for all nodes of type
TQuery network for update history
Uof nodeNFind versions
Vof nodeN2withReference field set to
NVersion field value in
Ubefore versionC
Resolve
N2, consideringVthe update history while targetingNatC
Versioned data DAG paths
Addressing a DAG node through UnixFS path P, in research object N as of version C:
Resolve
Nat versionCGet value
DAGin manifest CID fieldWhile
Pnot emptyPop first segment
SfromPSet
DAG' = lookup(S, DAG)Loop with
DAG'asDAG
DAGis now the addressed node or leaf
Last updated

