Hermes UX requirements
===
> Status: draft
> Version: 0
> Date: 23/07/2021
[TOC]
Hermes stack
---
In terms of personas, the Hermes stack has roughly four layers:
- front-end users
- a relayer operations team that is in charge of running Hermes (e.g., Cephalopod)
- a chain operations team that is in charge of running a validator on some network (e.g., Cephalopod)
- the relayer development team
- the chain development team
These layers can be stacked and we can identify customer-performer relations between them. For example, the front-end user is a costumer for the relayer operations team.
```mermaid
flowchart TB
subgraph 1 [Frontend]
A[\User/]
end
subgraph 2 [Hermes Ops]
B[\Cephalopod/]
end
subgraph 3 [Hermes Dev]
C[\IBC-rs team/]
end
subgraph 4 [Chain Ops]
D[\Cephalopod/]
end
subgraph 5 [Chain Dev]
E[\Ecosystem teams/]
end
1 --> 2
2 --> 3
4 --> 5
2 --> 4
3 --> 5
```
User stories
---
### Relaying as a service
In this story, a user logs in from a Hermes web portal (front-end) and
establishes a new channel between an existing zone (the "hub") and a new zone.
```gherkin=
Feature: Relaying as a Service
As an organization launching a new zone
I want to connect my zone to the hub
Scenario:
Given Organization 'O' launches new zone 'Z'
Given Zone 'Z' is IBC-enabled
Given Organization 'O' is a logged-in user in the Hermes web portal
When 'O' registers their zone 'Z' in the portal, and
When 'O' links 'Z' with the Hub
Then Hermes creates a channel between 'Z' and the Hub
```
#### Dependencies:
The first two steps -- lines 6 and 7 -- are outside the scope of this story.
The step at line 8 is a simple registration/login page for the web portal; there is nothing Hermes-specific about it. Dependencies include: name, email, organization name.
The step at line 9 has several dependencies. Concretely, to register a new zone in the portal, the following information is necessary and minimal:
```toml
# chain identifier
id = 'ibc-1'
# addresses and ports of a node of the new zone
rpc_addr = 'http://127.0.0.1:26557'
grpc_addr = 'http://127.0.0.1:9091'
websocket_addr = 'ws://127.0.0.1:26557/websocket'
# prefix for the accounts, which is zone-specific, e.g 'cosmos', 'osmosis', etc.
account_prefix = 'cosmos'
# mnemonic for a key registered on this zone
key_mnemonic = " .... "
```
In other words, this is the minimal information that the user has to input for fulfilling step at line 9.
The steps at line 10 and 11 require no input.
### Browse public zone
In this story, a user logs in from a Hermes web portal (front-end) and
browses the list of publicly accessible zones that Hermes can currently
communicate with. All of these zones are interconnected, and the user may
initiate a specific IBC action (e.g., token transfer across zone), but that
will be defined in another user story.
```gherkin=
Feature: Browse publicly accessible zones
As a user owning tokens in some IBC-enabled zones,
I want to browse which zones can Hermes relay my tokens to and from.
Scenario:
Given User 'U' is logged-in the Hermes web portal
When 'U' presses the "browse zones" button,
Then The user is taken to a new page, displaying the identifiers
of all the zones that Cephalopod is currently operating
Hermes on.
```
<!-- > Read more about Gherkin here: https://docs.cucumber.io/gherkin/reference/ -->
<!-- > Read more about sequence-diagrams here: http://bramp.github.io/js-sequence-diagrams/ -->
## References