Abstract
Mediator service is like a drop box / post box that Aries agents can use to receive and store encrypted messages in its 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
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 commit.
Extra Deliverables:
- CI to make releases on based on tags and provide binaries in Github's release section.
- (stretch goal): mediator service that can notify registered peers on inbox message available.
Project Plan
Stage 1: HTTP Server and handle simple Json messages
- 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
- Decide if need to alter storage traits, or just create new implementation 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.
Evaluation
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.
Eval3:
- Demonstrate usable rust proficiency to integrate new code/features in complex codebase such as aries-vcx
Eval4
- Deliver functioning mediator service integrated with Aries vcx
- Set up CI on project repositories
Future plans
Design and document ways in which websocket based notification service could be integrated into mediator service project
Participants (Mentors/Mentees)
Mentors
Patrik Stas, Discord: Patrik Stas#7722, Absa Group
Bogdan Mircea, Discord: bobozaur#5997, Absa Group
Miroslav Kovar, Discord: mirgee#3763, Absa Group
George Mulhearn, Discord: gmulhearn#0356
Mentee
Naian G, Discord @nain