# Cosmovisor

`cosmovisor` is a lightweight process manager for Cosmos SDK application binaries that automates the upgrade process. It monitors the governance module for on-chain upgrade proposals and seamlessly handles binary upgrades by:

* Downloading and preparing the new binary
* Stopping the current binary
* Switching to the upgraded binary
* Restarting the node with the new binary

### **Why Use Cosmovisor?**

For validators, `cosmovisor` significantly reduces downtime during chain upgrades. Instead of manually handling upgrades, validators can pre-install new binaries, allowing `cosmovisor` to execute upgrades automatically when a proposal passes.

***

## **Configuration**

More details about `cosmovisor` settings can be found in the [official documentation](https://docs.cosmos.network/main/build/tooling/cosmovisor).

***

## **Installation**

### **1. Using Go Install**

Install the latest version of `cosmovisor` with:

```bash
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest
```

### **2. Manual Build**

Alternatively, build from source:

```bash
git clone https://github.com/cosmos/cosmos-sdk.git
cd cosmos-sdk
git checkout cosmovisor/vx.x.x
make cosmovisor
```

This builds `cosmovisor` in the `/cosmovisor` directory. To add it to your system’s PATH:

```bash
cp cosmovisor/cosmovisor ~/go/bin/cosmovisor
```

Verify the installation:

```bash
cosmovisor version
```

***

## **Directory Structure**

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

***

## **Manual Software Upgrade Using Cosmovisor**

This tutorial assumes you have set up a validator node using [this guide](https://docs.orai.io/nodes-and-validators/networks/mainnet/become-a-full-node-operator-from-source).

### **Upgrade Process Overview**

#### **1. Foundation Team Publishes a New Release**

Example: [v0.50.8 Release](https://github.com/oraichain/wasmd/releases/tag/v0.50.8)

#### **2. Foundation Team Submits a Software Upgrade Proposal**

Example: [Proposal #310](https://scanium.io/Oraichain/gov/310)

* The most important detail is the **block height** at which the upgrade takes effect. In Proposal #310, the upgrade happens at block **`53006170`**.
* You can track this block height and estimate when the upgrade will occur.

#### **3. Validator's Steps: Prepare the Upgrade Binary**

1. Create the upgrade binary folder:

   ```bash
   mkdir -p $HOME/.oraid/cosmovisor/upgrades/v0.50.8/bin
   ```
2. Build the new binary:

   ```bash
   cd orai
   git pull
   git checkout v0.50.8
   make build
   ```
3. Copy the binary to the upgrade folder:

   ```bash
   cp $(which oraid) $HOME/.oraid/cosmovisor/upgrades/v0.50.8/bin
   ```
4. Verify the new binary version:

   ```bash
   oraid version
   $HOME/.oraid/cosmovisor/upgrades/v0.50.8/bin/oraid version
   ```

If both commands return `v0.50.8`, the setup is correct, and you are now ready for the upgrade.

#### **4. Automatic Upgrade at the Specified Block Height**

Once the network reaches block **`53006170`**, `cosmovisor` will automatically:

* Stop the current binary
* Switch to the new binary (`upgrades/v0.50.8/bin`)
* Restart the node

When **2/3 of validators approve the next block (`53006170`)**, the upgrade is considered **successful**.

***

### **Final Thoughts**

With `cosmovisor`, software upgrades are seamless and reduce validator downtime. Make sure to follow this guide for every upgrade and ensure your node is prepared in advance.

🚀 **Happy Validating!**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.orai.io/nodes-and-validators/tutorials/cosmovisor.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
