module arch.node.types.storage;

import prelude open;

import arch.node.types.basics open;
import arch.node.types.crypto open;
import arch.node.types.identities open;

type ACL :=
  mkACL@{
    members : Set ExternalID;
    version : Nat;
    sig : Commitment;
  };

type Chunk :=
  mkChunk@{
    children : List ChunkID;
    expiry : AbsTime;
    acl : Option ACL;
    content : ByteString;
  };

type ChunkContent :=
  | InternalNode (List SecretKey)
  | LeafNode ByteString;

type ChunkCommitment :=
  mkChunkCommitment@{
    chunk : ChunkID;
    node : NodeID;
    expiry : AbsTime;
    sig : Commitment;
  };