Skip to content
Juvix imports

module arch.node.engines.signs_for_messages;

import prelude open;
import arch.node.types.identities open;

SignsFor Messages

Message interface

type SignsForMsg :=
| MsgSignsForRequest RequestSignsFor
| MsgSignsForReply ReplySignsFor
| MsgSubmitSignsForEvidenceRequest RequestSubmitSignsForEvidence
| MsgSubmitSignsForEvidenceReply ReplySubmitSignsForEvidence
| MsgQuerySignsForEvidenceRequest RequestQuerySignsForEvidence
| MsgQuerySignsForEvidenceReply ReplyQuerySignsForEvidence;

Message sequence diagrams

Submitting signs_for evidence

sequenceDiagram
    participant Client
    participant SignsForEngine

    Client->>SignsForEngine: RequestSubmitSignsForEvidence
    Note over SignsForEngine: Process and store evidence
    SignsForEngine->>Client: ReplySubmitSignsForEvidence
Submitting evidence of a signs_for relationship

Querying signs_for relationship

sequenceDiagram
    participant Client
    participant SignsForEngine

    Client->>SignsForEngine: RequestSignsFor (X signs for Y?)
    Note over SignsForEngine: Check stored evidence
    SignsForEngine->>Client: ReplySignsFor
Querying whether a specific signs_for relationship exists

Retrieving signs_for evidence

sequenceDiagram
    participant Client
    participant SignsForEngine

    Client->>SignsForEngine: RequestQuerySignsForEvidence (for X)
    Note over SignsForEngine: Retrieve relevant evidence
    SignsForEngine->>Client: ReplyQuerySignsForEvidence
Retrieving all signs_for evidence related to a particular identity

Message types

RequestSignsFor

type RequestSignsFor :=
mkRequestSignsFor@{
externalIdentityA : ExternalIdentity;
externalIdentityB : ExternalIdentity;
};

A RequestSignsFor queries whether externalIdentityA can sign on behalf of externalIdentityB.

Arguments
externalIdentityA:
The identity attempting to sign.
externalIdentityB:
The identity on whose behalf the signature is made.

MsgSignsForReply ReplySignsFor

type ReplySignsFor :=
mkReplySignsFor@{
signsFor : Bool;
err : Option String;
};

A ReplySignsFor indicates whether the signs_for relationship exists.

Arguments
signsFor:
True if externalIdentityA can sign for externalIdentityB, False otherwise.
err:
An error message if the query failed.

RequestSubmitSignsForEvidence

type RequestSubmitSignsForEvidence :=
mkRequestSubmitSignsForEvidence@{
evidence : SignsForEvidence;
};

A RequestSubmitSignsForEvidence submits evidence of a signs_for relationship.

Arguments
evidence:
The evidence supporting the signs_for relationship.

ReplySubmitSignsForEvidence

type ReplySubmitSignsForEvidence :=
mkReplySubmitSignsForEvidence@{
err : Option String;
};

A ReplySubmitSignsForEvidence acknowledges the submission of evidence.

Arguments
err:
An error message if the submission failed.

RequestQuerySignsForEvidence

type RequestQuerySignsForEvidence :=
mkRequestQuerySignsForEvidence@{
externalIdentity : ExternalIdentity;
};

A RequestQuerySignsForEvidence queries all signs_for evidence related to an identity.

Arguments
externalIdentity:
The identity for which to retrieve evidence.

ReplyQuerySignsForEvidence

type ReplyQuerySignsForEvidence :=
mkReplyQuerySignsForEvidence@{
externalIdentity : ExternalIdentity;
evidence : Set SignsForEvidence;
err : Option String;
};

A ReplyQuerySignsForEvidence provides the requested evidence.

Arguments
externalIdentity:
The identity for which to retrieve evidence.
evidence:
A set of SignsForEvidence related to the identity.
err:
An error message if the query failed.

SignsForMsg

type SignsForMsg :=
| MsgSignsForRequest RequestSignsFor
| MsgSignsForReply ReplySignsFor
| MsgSubmitSignsForEvidenceRequest RequestSubmitSignsForEvidence
| MsgSubmitSignsForEvidenceReply ReplySubmitSignsForEvidence
| MsgQuerySignsForEvidenceRequest RequestQuerySignsForEvidence
| MsgQuerySignsForEvidenceReply ReplyQuerySignsForEvidence;

Engine components