Sommelier
Sommelier is a platform for running DeFi strategies in special vaults, called
Cellars, managed by off-chain computation. It's a blockchain built with the
Cosmos SDK, and uses its own fork of the
Gravity Bridge to enable
cross-chain execution.
For more information you can check out the Sommelier Documentation
Sommelier
The initial release of the Sommelier blockchain consists of a standard
cosmos-sdk chain and Gravity Bridge
refactor.
Steward
Steward is a sidecar process that
facilitates function calls by Strategists to Cellars. 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:
- The validator node
- The Gravity Bridge Orchestrator
- Steward
The Orchestrator (and Relayer if you are designated to run one) need an RPC
endpoint to interact with Ethereum. We recommend using a service such as
Alchemy or Infura. Larger validators may opt to use any existing full node they
are already running for other purposes. Setup and configuration of an Ethereum
node is left as an exercise for the reader.
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
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
# Create an installation directory
mkdir install && cd install
# Install Steward
wget https://github.com/PeggyJV/steward/releases/latest/download/steward \
&& chmod +x * \
&& sudo mv * /usr/bin
# 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
# Fetch systemd unit file examples
wget \
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 orchestrator.service
nano steward.service
nano sommelier.service
# And install them to systemd
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
# 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 steward/orchestrator config for your environment, in particular your RPC URL and keystore path
nano config.toml
# Initialize the validator files
sommelier init myval --chain-id sommelier-3
At this point you need to create orchestrator keys OR restore them if you
already created them. Please follow these
instructions
to create or restore these keys with the Steward CLI, then return to this doc
for steps to add them to your validator.
# 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 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
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
Your node should now be syncing from genesis. You will be required to update
the binary as your sync reaches upgrade block heights. The tool
cosmovisor is useful for
handling this process automatically. Its setup and use is left as an exercise
for the reader. The order of binary versions you will need to complete the sync
process is shown below.
# once your node is synced, create your validator
sommelier tx staking create-validator \
--amount=1000000usomm \
--pubkey=$(sommelier tendermint show-validator) \
--moniker="MYMONIKER" \
--chain-id="sommelier-3" \
--commission-rate="0.10" \
--commission-max-rate="0.20" \
--commission-max-change-rate="0.01" \
--min-self-delegation="1" \
--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
$(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 \
-y
# 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
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.
# 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 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.