# Swisstronik v5 Testnet

## Upgrade plan for v1.0.4

The upcoming v1.0.4 upgrade includes the following bug fixes:

* Fixed a nasty bug with `logIndex` for EVM events that previously caused issues with EVM block explorers;
* Disabled EIP712 functionality as it was unused and could potentially introduce bugs and vulnerabilities.

### Backup

Prior to the upgrade, validators are encouraged to take a full data snapshot. Snapshotting depends heavily on infrastructure, but generally, this can be done by backing up the `.swisstronik` directory. If you use Cosmovisor to upgrade, by default, Cosmovisor will back up your data upon upgrade. See the "[Upgrade with Cosmovisor](#using-cosmovisor)" section below.

It is critically important for validator operators to back up the `.swisstronik/data/priv_validator_state.json` file after stopping the gaiad process. This file is updated every block as your validator participates in consensus rounds. It is a critical file needed to prevent double-signing in case the upgrade fails and the previous chain needs to be restarted.

### Manually

If you're not using Cosmovisor, you can perform the upgrade manually.

**Prepare New Binary**

Download the new binary:

```bash
wget https://github.com/SigmaGmbH/swisstronik-chain/releases/download/testnet-v1.0.4/swisstronikd.zip
```

Extract the downloaded archive:

```bash
unzip swisstronikd.zip
```

In the `bin` folder, you will find the required files.

Copy the `libsgx_wrapper_v1.0.4.x86_64.so` library:

```bash
sudo cp bin/libsgx_wrapper_v1.0.4.x86_64.so /usr/lib
```

Copy `v1.0.4_enclave.signed.so` to the `ENCLAVE_HOME` directory (by default, it is `$HOME/.swisstronik-enclave`):

```bash
cp bin/v1.0.4_enclave.signed.so $ENCLAVE_HOME
```

**During Upgrade: Modify Your .service File**

Once your validator reaches the upgrade height, it will automatically stop producing new blocks. After your node stops, switch the binary you're using to `swisstronikd` v1.0.4 at `ExecStart` in your `.service` file.

**Note:** `swisstronikd` v1.0.4 is located in the `bin` folder from the previous step of unpacking the `.zip` archive.

Then run:

```bash
sudo systemctl daemon-reload
```

Restart your validator:

```bash
sudo systemctl restart your-validator-service
```

### Using Cosmovisor

If you're running your node using Cosmovisor, please follow these steps.

**Download Binaries**

Download the new binary:

```bash
wget https://github.com/SigmaGmbH/swisstronik-chain/releases/download/testnet-v1.0.4/swisstronikd.zip
```

Extract the downloaded archive:

```bash
unzip swisstronikd.zip
```

In the `bin` folder, you will find the required files.

Copy the `libsgx_wrapper_v1.0.4.x86_64.so` library:

```bash
sudo cp bin/libsgx_wrapper_v1.0.4.x86_64.so /usr/lib
```

Copy `v1.0.4_enclave.signed.so` to the `ENCLAVE_HOME` directory (by default, it is `$HOME/.swisstronik-enclave`):

```bash
cp bin/v1.0.4_enclave.signed.so $ENCLAVE_HOME
```

**Setup Cosmovisor**

If you haven't configured Cosmovisor before, follow these steps.

Install the latest version of Cosmovisor (1.5.0):

```bash
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest
cosmovisor version
# cosmovisor version: v1.5.0
```

Rename and copy `swisstronikd_v1.0.3` to `swisstronikd`:

```bash
cp $(whereis swisstronikd_v1.0.3) .
```

Initialize Cosmovisor:

```bash
export DAEMON_HOME=/path/to/.swisstronik
export DAEMON_NAME=swisstronikd

cosmovisor init swisstronikd
```

**Put v1.0.4 Binaries**

Copy `swisstronikd` v1.0.4 to `$HOME/.swisstronik/cosmovisor/upgrades/v1.0.4/bin`:

```bash
mkdir -p $HOME/.swisstronik/cosmovisor/upgrades/v1.0.4/bin
cp swisstronikd $HOME/.swisstronik/cosmovisor/upgrades/v1.0.4/bin
```

**Note:** `swisstronikd` v1.0.4 is located in the `bin` folder from the previous step of unpacking the `.zip` archive.

**Check Folder Structure**

At this point, you should have the following structure:

```
.
├── current -> genesis or upgrades/<name>
├── genesis
│   └── bin
│       └── swisstronikd  # old: v1.0.3
└── upgrades
    └── v1.0.4
        └── bin
            └── swisstronikd  # new: v1.0.4
```

Export the environmental variables:

```bash
export DAEMON_NAME=swisstronikd
# please change to your own swisstronik home dir
# please note `DAEMON_HOME` has to be an absolute path
export DAEMON_HOME=$HOME/.swisstronik
export DAEMON_RESTART_AFTER_UPGRADE=true
```

**Disable Auto-Downloading of Binaries**

Set `DAEMON_ALLOW_DOWNLOAD_BINARIES` to `false` to avoid Cosmovisor trying to download binaries.

**Start the Node**

Start the node:

```bash
cosmovisor run start --x-crisis-skip-assert-invariants --home $DAEMON_HOME
```

Skipping the invariant checks is strongly encouraged since it decreases the upgrade time significantly and since there are some other improvements coming to the crisis module in the next release of the Cosmos SDK.
