# Cosmos Hub Hack Challenge
This challenge is to demonstrate understanding of and ability to use the new Interchain Accounts IBC module and the Cosmos Hub specific Interchain Account Auth module (`mauth`) as well as a general understanding for running cosmos-sdk validators nodes, relayers and IBC.
To begin, we created 3 digital ocean nodes.
## Node 1 - gaia `test-1` (`165.22.23.73`)
This is a gaia blockchain using chain id `test-1` with the ica ibc module, as well as our new mauth module which allows arbitrary messages to be executed by a private key controlled account. On this blockchain we pre-populated 3 accounts with `stake` token.
* `demowallet` (used as a faucet)
* `val` (used as a validator)
* `rly` (used by a relayer)
The `val` key is used to start the node and run so that all default ports are being used and publicly accessible through the IP address of the node.
## Node 2 - gaia `test-2` (`164.90.226.126`)
This is the exact same set up as Node 1, except the chain id is `test-2`.
## Node 3 - relayer (`164.90.211.136`)
This node contains an install of the hermes relayer with configuration data for Node 1 (`test-1`) and Node 2 (`test-2`) as well as the mnemonic phrase for the `rly` account created on Node 1 (`test-1`) and Node 2 (`test-2`).
On this node we ran a command to create a new connection between `test-1` and `test-1`. This is `connection-0` and `connection-0`. Afterwards we ran `hermes start` so that it would complete any new channel handshakes and relay all packets between chains.
# Further Preparation
A few actions were taken to prepare the team for their final tasks. These include:
* Each team member created an account on `test-1` that was populated with `1000stake` from the `demowallet` account.
* Each team member created a `register` transaction on `test-1` that created an interchain account for them on `test-2`.
* Each team members's `test-2` interchain account was populated with `1000stake` from the `test-2` `demowallet`.
# Final Tasks
> NOTE:
> * `a` = account on `test-1`
> * `a'` = account on `test-2` controlled by `a` on `test-1`
> * `A` = account on `test-2`
1) `a'` sends `stake` to `A` (via ICA)
2) `A` sends `stake` back to `a'` (via Bank)
3) `a` sends `stake` to `A` (via IBC-Transfer)
4) `A` sends `ibc/stake` to `a'` (via Bank)
5) `a'` sends `ibc/stake` to `a` (via ICA & IBC-Transfer)
# Solution
A valid solution will include all CLI commands a team member used to complete the tasks.