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

Updates for v4 installation steps #178

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 69 additions & 48 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Sommelier

Sommelier is a coprocessor blockchain for Ethereum DeFi.
Sommelier is a platform for running DeFi strategies managed by off-chain computation. It's a blockchain built with the [Cosmos SDK](https://github.com/cosmos/cosmos-sdk), and uses its own fork of the [Gravity Bridge](https://github.com/peggyjv/gravity-bridge) to enable cross-chain execution.

[![codecov](https://codecov.io/gh/peggyjv/sommelier/branch/main/graph/badge.svg)](https://codecov.io/gh/peggyjv/sommelier)
[![Go Report Card](https://goreportcard.com/badge/github.com/peggyjv/sommelier)](https://goreportcard.com/report/github.com/peggyjv/sommelier)
Expand All @@ -25,92 +25,98 @@ The initial release of the Sommelier blockchain will consist of a standard cosmo
The Gravity Bridge requires some additional pieces to be deployed to support it:

- [ ] [Ethereum Contract](https://github.com/PeggyJV/gravity-bridge/tree/main/solidity) and associated tooling
- [ ] Orchestrator/Relayer binaries built from the `go.mod` commit
- [ ] Orchestrator/Relayer binaries built from the `go.mod` commit

### Steward

[Steward](https://github.com/peggyjv/steward) is a middleware between the Strategy Provider and the protocol that facilitates Cellar function calls. It's also a CLI that subsumes the functionality of `gorc`, and is used in this document to configure and run the orchestrator.

## Join the mainnet!

Running a validator node on the Sommelier mainnet requires three processes:

1. The validator node
2. The Gravity Bridge Orchestrator
3. [Steward](https://github.com/peggyjv/steward)

We also recommend running a local `geth` process. Though a public Ethereum API service can work, you may run into request limits because of the frequent requests made by the `orchestrator` process.

The Steward CLI now supports all of the same commands as `gorc` and is the recommended way to configure delegate keys for new validators and to run the Orchestrator. __The Steward CLI is used to run *both* the `steward` and `orchestrator` processes__. There are post-installation steps for the `steward` process outlined at the end of the installation steps below. These are required for your Steward to participate in the protocol. For more information on these setup steps for Steward, see [Validators Instructions for Setting Up Steward](https://github.com/PeggyJV/steward/blob/main/docs/02-StewardForValidators.md) in the Steward repository.

> NOTE: The Steward CLI and Steward itself are distinct concepts in this document. The Steward CLI is used to start both the `steward` and `orchestrator` processes, while "Steward" refers specifically to the `steward` process.

### Installation

```bash
```bash
# Create an installation directory
mkdir install && cd install

# Install Orchestrator
wget https://github.com/PeggyJV/gravity-bridge/releases/download/v0.3.9/gorc && chmod +x * && sudo mv * /usr/bin
# Install Steward
wget https://github.com/PeggyJV/steward/releases/download/v2.0.2/steward && chmod +x * && sudo mv * /usr/bin

# Install Geth
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.4-aa637fd3.tar.gz && tar -xvf geth-linux-amd64-1.10.4-aa637fd3.tar.gz && sudo mv geth-linux-amd64-1.10.4-aa637fd3/geth /usr/bin/geth && rm -rf geth-linux-amd64-1.10.4-aa637fd3*
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.23-d901d853.tar.gz && tar -xvf geth-linux-amd64-1.10.23-d901d853.tar.gz && sudo mv geth-linux-amd64-1.10.23-d901d853/geth /usr/bin/geth && rm -rf geth-linux-amd64-1.10.23-d901d853*

# Install Sommelier
wget https://github.com/PeggyJV/sommelier/releases/download/v3.1.1/sommelier_3.1.1_linux_amd64.tar.gz && tar -xf sommelier_3.1.1_linux_amd64.tar.gz && sudo mv sommelier /usr/bin && rm -rf sommelier_3.1.1_linux_amd64* LICENSE README.md
wget https://github.com/PeggyJV/sommelier/releases/download/v4.0.1/sommelier_4.0.1_linux_amd64.tar.gz && tar -xf sommelier_4.0.1_linux_amd64.tar.gz && sudo mv sommelier /usr/bin && rm -rf sommelier_4.0.1_linux_amd64* LICENSE README.md
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's nice that we provide direct commands, but every time the version of the node bumps (e.g. we just had a patch update for Dragonberry) we'd have to update these commands. Is there a way to point to "latest" or something?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a latest page but I don't see how you could select a specific binary architecture without being explicit about the file name. Maybe we just make this a manual step?


# Fetch systemd unit files
wget https://raw.githubusercontent.com/PeggyJV/sommelier/main/contrib/systemd/geth.service https://raw.githubusercontent.com/PeggyJV/sommelier/main/contrib/systemd/gorc.service https://raw.githubusercontent.com/PeggyJV/sommelier/main/contrib/systemd/sommelier.service
# Fetch systemd unit file examples
wget https://raw.githubusercontent.com/PeggyJV/sommelier/main/contrib/systemd/geth.service https://raw.githubusercontent.com/PeggyJV/sommelier/main/contrib/systemd/sommelier.service https://raw.githubusercontent.com/PeggyJV/sommelier/main/contrib/systemd/orchestrator.service https://raw.githubusercontent.com/PeggyJV/sommelier/main/contrib/systemd/steward.service

# Modify the unit files to fit your environment
nano geth.service
nano gorc.service
nano orchestrator.service
nano steward.service
nano sommelier.service

# And install them to systemd
sudo mv geth.service /etc/systemd/system/geth.service && sudo mv gorc.service /etc/systemd/system/ && sudo mv sommelier.service /etc/systemd/system/ && sudo systemctl daemon-reload
sudo mv geth.service /etc/systemd/system/geth.service \
&& sudo mv orchestrator.service /etc/systemd/system/ \
&& sudo mv steward.service /etc/systemd/system/ \
&& sudo mv sommelier.service /etc/systemd/system/ \
&& sudo systemctl daemon-reload

# Start geth
sudo systemctl start geth && sudo journalctl -u geth -f

# Init gorc configuration
mkdir -p $HOME/gorc && cd $HOME/gorc
# Init steward/orchestrator configuration. Note that the steward and orchestrator processes share
# much of the same configuration fields, so we share the config.toml for convenience.
mkdir -p $HOME/steward && cd $HOME/steward
wget https://raw.githubusercontent.com/PeggyJV/sommelier/main/contrib/mainnet/sommelier-3/config.toml

# modify gorc config for your environment
# You can use alchemy, infura endpoint as RPC and not necessarily need to sync the blockchain eth with geth
# modify steward/orchestrator config for your environment
# You can use alchemy or infura endpoints as your RPC and don't necessarily need to sync the
# blockchain eth with geth
nano config.toml

# Initialize the validator files
sommelier init myval --chain-id sommelier-3
```

# create/restore 2 cosmos keys and 1 ethereum key
# NOTE: be sure to save the mnemonics and eth private key

# restore orchestrator key with gorc
gorc --config $HOME/gorc/config.toml keys cosmos recover orchestrator "{menmonic}"

# OR: create orchestrator key with gorc
gorc --config $HOME/gorc/config.toml keys cosmos add orchestrator

# restore eth key

# EITHER: restore eth priv key from metamask with gorc
gorc --config $HOME/gorc/config.toml keys eth import signer "0x0000..."

# OR: restore eth mnemonic with gorc
gorc --config $HOME/gorc/config.toml keys eth recover signer "{menomonic}"

# OR: create eth key with gorc
gorc --config $HOME/gorc/config.toml keys eth add signer
At this point you need to create orchestrator keys OR restore them if you already created them. __Please follow [these instructions](https://github.com/PeggyJV/steward/blob/main/docs/03-TheOrchestrator.md#setup) to create or restore these keys with the Steward CLI__, then return to this doc for steps to add them to your validator.

```bash
# restore your validator mnemonic to the sommelier binary
sommelier keys add validator --recover

# OR: create your validator mnemonic to the sommelier binary
sommelier keys add validator

# NOTE: at the end of this process you need to have:
# - a key named "orchestrator" with funds on the cosmos chain in the gorc keystore
# - a key named "signer" with funds on connected ETH chain in the gorc keystore
# - a key named "orchestrator" with funds on the cosmos chain in the steward keystore
# - a key named "signer" with funds on connected ETH chain in the steward keystore
# - a key named "validator" with funds on the cosmos chain in the sommelier keystore

# Add the peers from contrib/mainnet/sommelier-3/peers.txt to the ~/.sommelier/config/config.toml file
nano ~/.sommelier/config/config.toml

# pull the genesis file
# pull the genesis file
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given there has been an upgrade in the intervening time, I don't think downloading the v4 binary will work for syncing from the genesis, which started on v3. Should we provide some instructions to use Cosmovisor or how to handle this manually?

wget https://raw.githubusercontent.com/PeggyJV/sommelier/main/contrib/mainnet/sommelier-3/genesis.json -O $HOME/.sommelier/config/genesis.json

# start your sommelier node - note it may take a minute or two to sync all of the blocks
sudo systemctl start sommelier && sudo journalctl -u sommelier -f

# once your node is synced, create your validator
# once your node is synced, create your validator
sommelier tx staking create-validator \
--amount=1000000usomm \
--pubkey=$(sommelier tendermint show-validator) \
Expand All @@ -120,24 +126,39 @@ sommelier tx staking create-validator \
--commission-max-rate="0.20" \
--commission-max-change-rate="0.01" \
--min-self-delegation="1" \
--gas 300000
--gas 300000
--fees="0usomm"
--from=validator

# register delegate keys for eth and orchestrator keys
sommelier tx gravity set-delegate-keys \
$(sommelier keys show validator --bech val -a) \ # validator address
$(gorc --config $HOME/gorc/config.toml keys cosmos show orchestrator) \ # orchestrator address (this must be run manually and address extracted)
$(gorc --config $HOME/gorc/config.toml keys eth show signer) \ # eth signer address
$(gorc --config $HOME/gorc/config.toml sign-delegate-keys signer $(sommelier keys show validator --bech val -a)) \
--chain-id sommelier-3 \
--from validator \
$(steward --config $HOME/steward/config.toml keys cosmos show orchestrator) \ # orchestrator address (this must be run manually and address extracted)
$(steward --config $HOME/steward/config.toml keys eth show signer) \ # eth signer address
$(steward --config $HOME/steward/config.toml sign-delegate-keys signer $(sommelier keys show validator --bech val -a)) \
--chain-id sommelier-3 \
--from validator \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIRC some folks were having issues with setting gas correctly for set-delegate-keys, do we need to specify it manually?

-y

# start the orchestrator
sudo systemctl start gorc && sudo journalctl -u gorc -f
# start the orchestrator. note that we are not yet starting steward
sudo systemctl start orchestrator && sudo journalctl -u orchestrator -f
```

At this point, you should have a running validator node and Orchestrator.

Now it's time to complete the setup for Steward. Please follow the detailed guide in [Validators Instructions for Setting Up Steward](https://github.com/PeggyJV/steward/blob/main/docs/02-StewardForValidators.md) and return here.

At this point you should have a server CA and server certificate for Steward, and your `config.toml` should be configured with those values. Now we can start the Steward service that we created during the other installation steps.

```bash
# start steward
sudo systemctl start steward && sudo journalctl -u steward -f
```

Once your Steward is running, ensure that its server endpoint is reachable over the internet. Then, if you haven't already, follow the steps outlined in the [Steward Registry repository](https://github.com/PeggyJV/steward-registry) to register your steward instance.

Your installation is complete! If you have any problems, please reach out in the validator lobby channels in Discord or Telegram.

### Actions

Now you can try the bridge!!
Expand All @@ -161,7 +182,7 @@ gorc eth-to-cosmos \
--erc20-address="0x0000000000000000000000000000000000000000" \
--amount="1.3530000" \
--cosmos-destination="$(sommelier keys show orchestrator -a)"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We may want to remove these from the default README, there's really no need for an individual validator to bridge assets during their setup, and the extra traffic spends ETH.

```

## Notes:
Expand Down Expand Up @@ -204,5 +225,5 @@ gorc deploy erc20 \
--contract-address="0x8887F26882a3F920e40A91969D1A40D1Ef7efe10" \
--erc20-name=usomm \
--erc20-symbol=usomm \
--erc20-decimals=6
--erc20-decimals=6
```
16 changes: 13 additions & 3 deletions contrib/mainnet/sommelier-3/config.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
keystore = "/home/ubuntu/gorc/keystore/" #edit this value for what it is your sommelier v2 gorc
keystore = "/home/ubuntu/steward/keystore/" #edit this value for what it is for your sommelier v3 steward or gorc keystore.

[gravity]
contract = "0x69592e6f9d21989a043646fE8225da2600e5A0f7"
contract = "0x69592e6f9d21989a043646fE8225da2600e5A0f7"
fees_denom = "usomm"

[ethereum]
Expand All @@ -22,4 +22,14 @@ amount = 0.000
denom = "usomm"

[metrics]
listen_addr = "127.0.0.1:3000"
listen_addr = "127.0.0.1:3000"

[keys]
delegate_key = "orchestrator" # Edit if your orchestrator's Cosmos key name is different
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we add a comment indicating delegate_key is only used by steward and not the orchestrator?


# Please leave the client_ca_cert_path field unset for now
[server]
address = "0.0.0.0"
port = 5734
server_cert_path = "/server/cert/path" # Edit this value after completing the Steward setup process
server_key_path = "/server/key/path" # Edit this value after completing the Steward setup process
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ Type=simple
User=ubuntu
Environment="RUST_LOG=INFO"
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/gorc --config /home/ubuntu/gorc/config.toml orchestrator start --cosmos-key orchestrator --ethereum-key signer
ExecStart=/usr/bin/steward --config /home/ubuntu/steward/config.toml orchestrator start --cosmos-key orchestrator --ethereum-key signer --orchestrator-only
Restart=on-failure
RestartSec=3
LimitNOFILE=4096

[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target
16 changes: 16 additions & 0 deletions contrib/systemd/steward.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[Unit]
Description=Sommelier Steward
After=online.target

[Service]
Type=simple
User=ubuntu
Environment="RUST_LOG=INFO"
WorkingDirectory=/home/ubuntu
ExecStart=/usr/bin/steward --config /home/ubuntu/steward/config.toml start
Restart=on-failure
RestartSec=3
LimitNOFILE=4096

[Install]
WantedBy=multi-user.target