---
# System prepended metadata

title: Hermes UX requirements

---

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
