bloxbean / yaci

A Cardano Mini Protocols implementation in Java
MIT License
25 stars 3 forks source link

[RFC] Feat: Making mini protocol components server/client aware #61

Closed nemo83 closed 7 months ago

nemo83 commented 7 months ago

Cardano mini protocol is a state machine. Server and client move throughout the state machine at the same time, but just either one of them, and in final states none of them, is supposed to send messages. This is called agency.

Agency depends on state and whether the we are on the client or the server.

In Yaci, the state has been cleverly wrapped in enums, that by design are enumeration. In order to implement the isAgency we need to enhance that method with a parameter that tells whether we are on the client or server side.

Agents will be initialised w/ the isClient property and pass it to State enumeration to properly calculate agency.

This PR represents a Request For Comments where to discuss, accept or push back about the suggested design.

The code is not complete but gives an idea on the implementation.