Demonstration

In the following, we present a demo of a simplistic application running on top of a Ledgera network with 4 nodes.

Toy use-case

To actually run a Ledgera network, we need to specify an application use-case. For this demo, we consider the following toy use-case in which:

  • data values are chains of alphabetic characters
  • there is only one possible operation : the concatenation of two strings
  • we consider predicates of the form “the string is longer than X characters” for any positive X

Network and its initialization

Below, we initialize a network with 4 Ledgera nodes:

  • “node1” plays the client and voter roles
  • “node2” plays the storage and voter roles
  • “node3” plays the client, voter and storage roles
  • “node4” plays the voter and logger roles

In the following we may call “client1” the client component running on “node1” and “client3” the client component running on “node3”.

Storage request

Below, we have a user submit a storage request on “client1” and then we have another user retrieve the corresponding Proof Of Storage and value from “client3”:

Simple computation on two raw concrete values

Below, we have a user submit a computation request on “client1”. This instance of a computation corresponds to concatenating two raw string values that are exchanged in clear.

Simple computation with an argument being a reference to the storage

Below, we have a user submit a storage request on “client3”. Then, another user submits a computation request on “client1”. This time, instead of having two raw values as arguments, the computation instance is such that one of the arguments is instead a reference to the value previously stored in the storage.

Notice that the “client1” does not know the value that has been submitted by “client3” but can still use it (by referring to its digest) when instanciating the computation.

Computation with an argument that is not known in advance

Below, we have a user submit a computation request on “client1”. This time, when specifying the computation, we de not provide all the arguments. Instead, one of the arguments is an unknown which concrete value will be eventually agreed-upon by the system.

As a result, as long as the agreement has not yet been reached, the computation cannot be be executed.

Later in the video, we have another user propose a value for the missing argument via submitting an argument proposal on “client3”.

Upon that value being agreed upon, the computation can be executed and the corresponding Proof of Integrity eventually produced.

Last updated on