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 withc-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.