Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Abstract


Mediator service is like a drop box / post box that Aries agents can use to receive and store encrypted messages in their stead.

Basic flow:

  • people can send you messages at the mediator address if you are not always available to receive messages
  • you can pick them up later from mediator service using pick up protocol

Mediator/ Agency are useful for scenarios like mobile phone agents which can't always receive messages. Due to reasons including:

  • network interruption
  • sleep /power off
  • power conservation optimizations

There exist a agency/mediator service for Aries, but it has limitations:

  • Written in NodeJS. A Rust based mediator service would be desirable for better integration with vcx
  • Does not support pick up protocol (uses custom data exchange)

A new Rust based Aries mediator service would offer.

  • High performance
  • Horizontal scalability
  • Simpler and more robust integration with Aries-vcx
  • Support for newer standard protocols like Pick Up protocol.

Deliverables

Main Deliverables:

  •  Specialized high performance Aries agent (mediator to-be) that can store "forward messages" received through connection protocol.
  •  Pickup protocol data structs and impl inside aries-vcx
  •  Mediator service that can answer pick up protocol requests to authenticated peers
  •  CI to build and test on new commits.


Extra Deliverables:

  •  CI to make releases based on tags and provide binaries or docker image in Github's release section.
  •  (stretch goal): design/document mediator service component that can notify registered peers on inbox message available.

Project Plan

Stage 1: HTTP

...

Server 

  •  Research and choose rust based web framework, suitable for project goals
  •  Answerable HTTP end points to connect to service
  •  Define storage traits and impl
  •  Tests to ensure proper functioning of above features
  •  CI: Build on commit/pushed commits.

Stage 2: Add data structures for Connection protocol to service

  •  Load required modules from Aries-VCX and use in service to handle aries connections
  • Implement simple http service with some endpoints
  •  Include logging library (env_logger is popular choice)
  •  Include E2E test - make request against the endpoints, expect appropriate response
  •  CI: Lint, build, run & test each commit

Stage 2: Storage

  •  Understand pick-up protocol specification
  •  Based on the specification, design trait for retrieving messages and storing messages
  •  Provide mysql implementation
  •  Include integration tests
  •  CI: Include new set of tests in CI

Stage 3: Integrate Aries-vcx

  •  Include aries-vcx as project dependency
  •  Initialize aries-vcx library (create wallet)
  •  Add endpoint for clients to fetch connection invitation (built using aries-vcx)

Stage 4: Support establishing didcomm connections

  •  Decide if there is need to alter storage traits, or to just create new implementations, and act accordingly.
  •  Optimise endpoints (API etc) for with Aries connection and to handle multiple of them simultaneously
  •  tests (see if data is being stored in database.)

stage 3: Add pickup protocol data structure to Aries-Vcx

  •  Add data structures and maybe traits to Ariec vcx related to pickup protocol
  •  (this could take time to design, iterate, and code inside vcx.). So break into sub-tasks as necessary.
  •  Tests for above

Stage 4: Integrate included pickup protocol stuff in mediator code.

  •   Pull pickup struct definitions / traits from vcx and integrate with local impl
  •  see if additional local interfaces need to be defined for http / mediation (like accounts etc)
  •  Tests.

Milestones

Eval1:
- setup development environment
- rust learning (learn and gain good pedagogical familiarity with concepts used: structs, impls, macros, etc)
- basic web service skeleton ready
- CI for making sure builds succeed

Eval2:
- Demonstrate grasp of basic rust concepts (mentioned earlier)
- Grasp understanding of more advanced rust concepts (arc etc)
- Able to use existing sophisticated/complex rust library inside a different project.

...

Eval4

...

  •  Implement endpoint to fetch mediator's connection invitiation
  •  Support establishing didcomm connection between client and mediator using aries-vcx Connection state machine
  •  Create e2e test for establishing didcomm connection betwen test client and the mediator

stage 5: Receiving and storing didcomm messages

  •  Enable receiving messages (mediation) on behalf of a connected client (which established connection and requested mediation - stage 4)
  •  Add medaitor e2e test where mediator receives and stores didcomm message

stage 6: Add pickup protocol support

  •  Add pick-up protocol data model to aries-vcx messages crate
  •  Add pick-up protocol messages parsing to mediator
  •  Add mediator e2e test performing message pick-up

stage 7: Bonus - websocket

  •  Implement websocket interface for pickup protocol (think can be broken down further if we start working on this)

stage 8: Bonus - notifications

  •  Implement pub/sub mechanism in distributed environment to assure instant notification of connected websocket clients about a newly received message (think can be broken down further if we start working on this)


Milestones

Evaluation 1 (July 11):

  • Development environment setup
  • Rust learning, http framework research
  • Evaluation of Stage 1

Evaluation 2 (August 22):

  • Evaluation of Stage 2, 3, 4

Evaluation 3 (October 6):

  • Evaluation of Stage 5, 6

Evaluation 4 (November 14):

  • Evaluation of Stage 7 / 8 or overall solution polishing&refactoring

Timeline

Week

Activity

Status

June 1 - June 30

Onboarding, research, rust learning

July 1 - July 11

Evaluation 1

Stage 1 (server)


July 11 - July 25

Stage 2 (storage)


July 26 - August 2

Stage 3 (aries-vcx as dependency)


August 3 - August 22

Evaluation 2

Stage 4 (didcomm connections)


August 23 - September 5

Stage 5 (Receiving&storing didcomm messages)





September 6 - October 3

Evaluation 3

Stage 6 (Add pickup protocol)


October 4 - November 14

Evaluation 4

Refactoring / Stage 7, 8 / Other improvements / catch-ups


Future plans

Design and document ways in which websocket persistent connection based notification service could be integrated into mediator service project.

Benchmark the service.

Add support for did:peer:4 based did exchange.


Participants (Mentors/Mentees)

Mentors

NameHyperledger DiscordAffiliation
Patrik StasPatrik Stas#7722Absa Group
Bogdan Mircea

bobozaur#5997

Absa Group

Miroslav Kovar

mirgee#3763Absa Group
George Mulhearngmulhearn#0356

Mentee

Name
Hyperledger Discord
Email
Naian G
@naine
ng.p.ref+hlfwiki@mailbox.org


Processes

Internal communication and updates:

    • Slack is used for regular communications and updates
    • Weekly Zoom meetings are scheduled to discuss the progress, blocks, questions, advice
    • Biweekly mentee-mentee meetings for knowledge sharing, active collaboration.

Mentee maintains a blog with frequent updates:

Other useful information can be found on this page