Stargaze
  • Welcome
    • Coming from Ethereum?
    • Coming from Solana?
    • Coming from Coinbase or other exchange?
    • Coming from MANTRA?
  • Introduction
    • What is Stargaze?
    • Meet the Team
  • Core Apps
    • Launchpad
      • Minters
      • Whitelists
      • Minter and Whitelist Fees
    • Marketplace
      • Governance Parameters
    • Names
    • Live Auctions
    • Infinity Swap
      • How it works
      • Price Mechanics
      • Swap
      • Why use Infinity Swap
      • Infinity Swap Fees
      • Examples
    • DAO DAO
    • StarDEX
      • Navigating StarDEX
      • Swapping Tokens
      • Providing Liquidity
      • Pool Analytics & Metrics
      • Managing and Removing Liquidity
  • Creators
    • Launching a Collection on Stargaze
    • Collection Guidelines
    • Content Guidelines
    • Featured Projects
  • Creator Tools
    • Stargaze Studio
      • Create an NFT Collection
        • Upload Assets and Metadata
        • Configure Collection and Minting Details
        • Creating a Standard Collection
          • Upload Assets and Metadata
          • Configure Collection and Minting Details: Standard Collection
          • Whitelist and Royalty Options
        • Creating an Open/Limited Edition Collection
          • Upload Assets and Metadata
          • Configure Collection and Minting Details: OE/LE
          • Whitelist and Royalty Options
        • Creating a 1/1 Collection
          • Upload Assets and Metadata
          • Configure Collection Details: 1/1 Collection
          • Whitelist and Royalty Options
          • Adding Additional Tokens to a 1/1 Collection
        • Creating a Burn to Mint Collection
          • Upload Assets and Metadata
          • Configure Collection and Minting Details: Standard Collection
          • Whitelist and Royalty Options
      • Interact with a Collection
        • Execute Messages
        • Query Data
    • Launching an NFT project via CLI
      • 1. Setup a basic project
        • 1a. Need help?
      • 2. Configure your project
      • 3. Add assets and metadata
        • Pinata Upload
      • 4. Instantiate minter contract on testnet
      • 5. Whitelist
      • 6. Mint from your contract
      • 7. Query contract
      • 8. Testing your contract on testnet
      • 9. Launching on mainnet
        • 9a. Launching on mainnet with Keplr (optional)
    • Create a Multisig Wallet
      • Create a Multisig using Keplr
      • Create a Multisig using DAO DAO
      • Create a Multisig using CLI
    • Stargaze Studio Fees
  • Developers
    • CosmWasm Contracts
      • Contract Code IDs
      • Deploy to Testnet
      • Deploy to Mainnet
    • Stargaze API
    • Indexers
      • Constellations
      • SubQuery
    • Token Factory
    • Minting and Trading Denoms
  • Tokenomics
    • STARS Token
    • Fair Burn
    • Real Yield
    • Governance
  • Nodes & Validators
    • Getting Setup
    • Running a Full Node
    • Setting up Cosmovisor
    • Running a Validator
    • Configuring StateSync
    • Running a Relayer
    • Foundation Delegation Program
  • Extras
    • FAQ
    • Stargaze Assets
    • Ranking and Algorithms
Powered by GitBook
On this page
  • Setting up Cosmovisor
  • Install
  • Add environment variables to your shell
  • Set up folder structure
  • Set up genesis binary
  • Set up systemd service
  • Start Cosmovisor
  1. Nodes & Validators

Setting up Cosmovisor

Utilize cosmovisor for the ease in upgrades

Setting up Cosmovisor

Setting up Cosmovisor is relatively straightforward. However, it does expect certain environment variables and folder structure to be set.

Cosmovisor allows you to download binaries ahead of time for chain upgrades, meaning that you can do zero (or close to zero) downtime chain upgrades. It's also useful if your local timezone means that a chain upgrade will fall at a bad time.

Rather than having to do stressful ops tasks late at night, it's always better if you can automate them away, and that's what Cosmovisor tries to do.

Install

First, go and get Cosmovisor (recommended approach):

go get github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor

# or, with go >= 1.15 you can do.  This is the most common:
go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@latest

# If required you can target a specific version:
go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0

Your installation can be confirmed with:

which cosmovisor

This will return something like:

/home/<your-user>/go/bin/cosmovisor

Building from source allows you to target a specific version of Cosmovisor, in case you do not want to run 1.0.0 yet.

You can also build from source; cosmovisor is in the main cosmos-sdk repo on Github, so you can use Git tags to target a specific version. This example uses a tag, v0.42.7 that refers to the Cosmos SDK, as Cosmovisor-specific tags did not exist before August 2021. The first of these was cosmovisor/v0.1.0, and the second is the current release, cosmovisor/v1.0.0.

git clone https://github.com/cosmos/cosmos-sdk
cd cosmos-sdk
git checkout v0.42.7
make cosmovisor
cp cosmovisor/cosmovisor $GOPATH/bin/cosmovisor
cd $HOME

Add environment variables to your shell

In the .profile file, usually located at ~/.profile, add:

export DAEMON_NAME=starsd
export DAEMON_HOME=$HOME/.starsd

Then source your profile to have access to these variables:

source ~/.profile

You can confirm success like so:

echo $DAEMON_NAME

It should return starsd.

Set up folder structure

Cosmovisor expects a certain folder structure as shown below. You can install the linux utility tree to produce a similar output to check on your own server.

.
├── current -> genesis or upgrades/<name>
├── genesis
│   └── bin
│       └── $DAEMON_NAME
└── upgrades
    └── <name>
        └── bin
            └── $DAEMON_NAME

Don't worry about current - that is simply a symlink used by Cosmovisor. The other folders will need setting up, but this is easy:

mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
mkdir -p $DAEMON_HOME/cosmovisor/upgrades

Set up genesis binary

Cosmovisor needs to know which binary to use at genesis. We put this in $DAEMON_HOME/cosmovisor/genesis/bin.

First, find the location of the binary you want to use:

which starsd

Then use the path returned to copy it to the directory Cosmovisor expects. Let's assume the previous command returned /home/your-user/go/bin/starsd:

cp /home/<your-user>/go/bin/starsd $DAEMON_HOME/cosmovisor/genesis/bin

Once you're done, check the folder structure looks correct using a tool like tree.

Set up systemd service

Commands sent to Cosmovisor are sent to the underlying binary. For example, cosmovisor version is the same as typing starsd version.

Nevertheless, just as we would manage starsd using a process manager, we would like to make sure Cosmovisor is automatically restarted if something happens, for example an error or reboot.

First, create the service file:

sudo nano /etc/systemd/system/cosmovisor.service

Change the contents of the below to match your setup - cosmovisor is likely at ~/go/bin/cosmovisor regardless of which installation path you took above, but it's worth checking.

[Unit]
Description=cosmovisor
After=network-online.target

[Service]
User=<your-user>
ExecStart=/home/<your-user>/go/bin/cosmovisor start
Restart=always
RestartSec=3
LimitNOFILE=65535
Environment="DAEMON_NAME=starsd"
Environment="DAEMON_HOME=/home/<your-user>/.starsd"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="DAEMON_LOG_BUFFER_SIZE=512"

[Install]
WantedBy=multi-user.target

Start Cosmovisor

Finally, enable the service and start it.

sudo -S systemctl daemon-reload
sudo -S systemctl enable cosmovisor
sudo systemctl start cosmovisor

Check it is running using:

sudo systemctl status cosmovisor

If you need to monitor the service after launch, you can view the logs using:

journalctl -u cosmovisor -f
PreviousRunning a Full NodeNextRunning a Validator

Last updated 1 year ago

A description of what the environment variables do can be found . Change them depending on your setup.

Note also that we set buffer size explicitly because of a before version v1.0.0. If you are using v1.0.0, you may omit that line.

here
live bug in Cosmovisor