Anoma Node: Proper Scry support

Proceedings from SKAN Meetings: Jul 18/24

Currently as of v0.17.0 of Anoma, our implementation of snapshotting and our mnesia tables are laid out, leaves a lot to be desired.

Thus the focus of this proceeding was to tackle pain points in our architecture.

The Rough Plan

During the proceedings we came up with a proper way that our scry ought to work and how storage should interact with it:

This diagram describes a layout of a few things:

  1. key_A has 3 timestamps for which it’s been updated: 45, 97 and 191.
  2. We can do a logical read like /123/key_A which should give the user /97/key_A
  3. Further when we attempt to read at some random id like [cf1409], the engine sending the scry with receive a please wait until a please wait can be sent.
  4. Further before a block is done and during the mid transactions we will have half-done storage that can be made permanent when we commit to a block.

Creating a Plan

In order to actualize our implementation strategy, we came up with a value map from what the user values, along with the supply chain of work that needs to be done.

The user will be calling scry directly and thus it’s the natural entry point that a consumer (Juvix, etc) cares about.

This particular map is made of two major sub components to get proper scry semantics:

  1. Proper timestamped storage
  2. A global data broker that can be found in this thread: Anoma Topics Meeting Digest: Global Data Brokers

The time-frame to attack this problem isn’t too bad. We estimate the work for the global data broker ought to take a week (with nominal delays let’s say 2 weeks) and then we shall use one the proceedings to implement 1. once we have 2. ready.

Further these plans also encompass the work to get parallel reads online.

Each of these nodes will be augmented by an issue to track the progress.