Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

State machine <-> Client: interaction specification #198

Closed
DmiSergeev opened this issue Sep 27, 2018 · 0 comments
Closed

State machine <-> Client: interaction specification #198

DmiSergeev opened this issue Sep 27, 2018 · 0 comments
Labels
enhancement tech debt ~tendermint component: tendermint ~worker component: worker
Milestone

Comments

@DmiSergeev
Copy link
Contributor

Motivation

The interaction protocol between the State machine and the client primarily based on Tendermint protocol which is fairly clear and well-documented. At the same time, Tendermint architecture is rather flexible and doesn't restrict concrete solutions like RPC message formats, encoding, error handling, timeouts, etc.
The Fluence also introduces additional layers of interaction logic: transaction authentication, deduplication, and ordering.

These aspects make the current protocol rather complicated. Currently, there is no single source of some documentation/specification describing this protocol: there is implementation code only. Also, some interaction cases are not even implemented yet. Such a situation leaves the protocol unclear and tangled, obstructs the understanding of the whole picture of the interaction, which is quite important. It also slows down the future development of the new interaction features and alternative client implementations.

Proposition

To implement the interaction protocol specification. It would describe the interactions from different points of view and different levels:

  • The client:
    • Language-specific client high-level API: how to use this API, what to expect, what guarantees it provides. Currently such API implemented in Python
    • Tendermint RPC message formats. It's primarily a specification for transaction (broadcact_tx_*) and query (abci_query) RPCs: what is request format, what response fields (Info, Result, Proof, etc.) mean.
  • The state machine ABCI methods implementation specification: how they act depending on the current state and given arguments.

The specification must describe both normal behavior and various corner cases, including client/node failures and Byzantine behavior. The specification must explicitly inform what features are not actually implemented.

It's supposed that the required specification would be implemented as Markdown document(s) and placed in Fluence main repo.

@folex folex added ~tendermint component: tendermint ~worker component: worker enhancement and removed ~consensus labels Feb 12, 2019
@alari alari closed this as completed Feb 14, 2019
@alari alari reopened this Feb 14, 2019
@alari alari added this to the !verification milestone Feb 14, 2019
@alari alari closed this as completed Nov 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement tech debt ~tendermint component: tendermint ~worker component: worker
Projects
None yet
Development

No branches or pull requests

3 participants