Juvix imports
module arch.node.net.storage;
import arch.node.net.storage_messages open public;
import arch.node.net.storage_config open public;
import arch.node.net.storage_environment open public;
import arch.node.net.storage_behaviour open public;
import arch.node.types.basics open;
import arch.node.types.engine open;
import arch.node.types.anoma as Anoma open;
open storage_config_example;
open storage_environment_example;
open storage_behaviour_example;
Storage Engine¶
Purpose¶
The Storage engine implements distributed object storage. Each stored object is encrypted using convergent encryption with a key derived from the hash of the content and a secret key, then the ciphertext is split into equal-sized parts, and organized in a Merkle-tree.
A Chunk is a Merkle-tree node that is stored by nodes,
with an associated access control list
that may limit access to the chunk
to a list of nodes, e.g. publisher or subscribers of a Topic.
Nodes may commit to store a Chunk via a ChunkCommitment sent to a pub/sub Topic,
and keep track of known commitments by other nodes.
This allows nodes to respond to chunk requests
with either the chunk itself if available locally,
or with a ChunkCommitment by a node that stores the requested chunk.
Brief summary of the purpose of the engine.
Components¶
Useful links¶
- Some
- Useful
- Links
Type¶
StorageEngine : Type :=
  Engine
    StorageLocalCfg
    StorageLocalState
    StorageMailboxState
    StorageTimerHandle
    StorageActionArguments
    Anoma.Msg
    Anoma.Cfg
    Anoma.Env;
Instantiation¶
exStorageEngine : StorageEngine :=
  mkEngine@{
    cfg := exStorageCfg;
    env := exStorageEnv;
    behaviour := exStorageBehaviour;
  };
Where exStorageCfg is defined as follows:
exStorageCfg : StorageCfg :=
  mkEngineCfg@{
    node := Curve25519PubKey "0xabcd1234";
    name := "storage";
    cfg := mkStorageLocalCfg;
  };
exStorageEnv is defined as follows:
exStorageEnv : StorageEnv :=
  mkEngineEnv@{
    localState := mkStorageLocalState;
    mailboxCluster := Map.empty;
    acquaintances := Set.empty;
    timers := [];
  };
and exStorageBehaviour is defined as follows:
module storage_behaviour_example;
  exStorageBehaviour : StorageBehaviour :=
    mkEngineBehaviour@{
      guards := First [exampleReplyGuard];
    };
end;