The latest version of the specification is version v2.

Entry

  1. Attributes
  2. Hash

An entry defines a change in the dataset. The ordered list of entries form the log. Entries are immutable.

Each entry defines a change for an element in the dataset by recording the time the change was added to the log, the numerical order in the log, the key to identify the element the change is for and the reference to the data for that element, the item.

type Entry =
  { number: Integer
  , timestamp: Timestamp
  , key: ID
  , item: Set Hash
  }

Attributes

Number

The entry number is unique and defines the position of the entry within the log.

The range MUST be the positive numbers, that is the natural numbers excluding 0.

The index entry number is unique and defines the entry position within an index log. For an entry in a register the entry-number and index-entry-number are always identical.

Key

  • Type: ID.

The key identifies the element of the dataset which the entry refers to.

Timestamp

The time when the entry was added to the log. This means that the timestamp is no guarantee of entry order, the entry number is.

Item references

  • Type: Set of Hash.

The set of item hashes the entry links to.

Hash

The identity of an entry computed from its content. It is used for audit as the Merkle tree leaf hashes.

The function takes an entry and a hashing algorithm and returns a Hash datatype.

hash : Entry -> HashingAlgorithm -> Hash

To compute the entry hash you need to represent the entry as json and remove all non-significant spaces:

{"index-entry-number":"72","entry-number":"72","entry-timestamp":"2016-04-05T13:23:05Z","key": "GH","item-hash":["sha-256:dc1d12943ea264de937468b254286e5ebd8acd316e21bf667076ebdb8c111bd1"]}

And then hash it with the register HashingAlgorithm.

Notice that the entry representation is a single JSON object but the API always returns an array.

© Crown copyright released under the Open Government Licence.