D2.1 - Towards the deadline

With the D2.1 deadline we want to have a minimal working DMC
implementation. The implementations consists of an OCaml library
and a CLI that uses the library.

ocaml-dmc

This is the repository of the OCaml DMC implementation.

See the meeting in
February
for
an idea of what the CLI should be able to do. Some things we leave
out.

Todos

  • Persistent storage for ERIS blocks (@nemael is working on
    this)
  • Persistent storage for DMC objects
  • Implementation of RDF Signify using ocaml-rdf and
    ocaml-monocypher
  • Sub-commands
    • init to initialize a new DMC repository
    • add to add an element to a DMC set
    • remove to remove an element from a DMC set
    • state query the state of a DMC container
  • Documentation
    • Simple walk-trough in the Readme

Things for later (not for D2.1)

  • DMC registers (D2.1 will only implement DMC sets)
  • Adding and removing additional authorized public keys to a DMC
    container
  • Transport
  • Datalog REPL

Considerations

Implementation of DMC logic and sub-commands is fairly
straightforward with the ocaml-rdf library which includes a
Datalog engine. No troubles expected.

Tricky part might be persistent storage. @nemael is already
looking into this.

ocaml-monocypher

Bindings to the Monocypher cryptographic library.

Todos

  • Implement bindings to Ed25519 functions (required for RDF Signify/DMC).

This todo is straightforward but quite a bit of mechanical work. If anybody is
interested it is up for grabs.

ocaml-eris

OCaml implementation of ERIS.

Todos

  • Make it work with persistent storage (see notes on ocaml-dmc, @nemael
    is on it)

ocaml-rdf

OCaml RDF library. This is the working horse of the DMC implementation and
includes the tricky parts (Turtle serializer and Datalog implementation).

Todos

  • RDF/Turtle serializer (@arie is working on this)
  • Content-addressable RDF (implementation of FragmentGraph)
  • Datalog. ocaml rdf already contains a working Datalog implementation
    (taken from
    ramsdell/ocaml-datalog).
    However it lacks to essential features: Negation and built-in functions.
    @pukkamustard is working on implementing Negation and built-in functions.

Considerations

We have fall-backs for the critical components:

  • If RDF/Turtle does not work out we use RDF/JSON which is already implemented
    by @arie
  • If we fail at implementing negation/built-in functions in the existing
    Datalog implementation we can use the
    c-cube/datalog
    implementation. c-cube/datalog has support for negation and built-in
    functions however there are some other things that make it not suitable:
  • Implementation is fairly complex (compared to ramsdell/ocaml-datalog.
    This is partly due to support for negation/built-ins but also because it
    allows nested terms (something we do not need/want).
  • No support for persistent storage. ramsdell/ocaml-datalog also does not
    support persistent storage, but it seems easier to implement there as the
    implementation is much more readable and hackable (in @pukkamustard’s
    opinion).
    Nevertheless, @pukkamustard has experimented with c-cube/datalog and thinks
    that it can be hacked to work as we want if necessary. This will be the
    fallback if we do not manage to implement negation/built-ins by our self.

D2.1 post

A public post/page that introduces and summarizes the work done.

Todos

  • Write post. Deferred until ocaml-dmc takes on more shape.
2 Likes