# Oracles v1.6 Upgrade Guide - Step 1 *Disclaimer: These instructions are made for Ubuntu 20.04. The commands may not match 100% on other distros, nor is there any guarantee that it will work.* # Introduction Oracles-v2 v1.6 introduces two new software components, `gofer` and `spire`, which will improve the robustness of Maker Oracles, as well as set the stage for future growth. ## gofer Gofer is a service that continuously polls the data sources and provide aggregated data to omnia. `gofer` duplicates the functionality of `setzer` and will become the primary data source for `omnia`. Omnia reverts to `setzer` when `gofer` fails. `gofer` caches the API responses, which will greatly reduce the quantity of API requests and will allow omnia to cycle much more quickly through the expanding list of asset pairs. For more information about `gofer`: https://github.com/makerdao/oracle-suite/tree/master/cmd/gofer By default, gofer is enabled after installing v1.16. Omnia will query the price information from `gofer` and falls to `setzer` on errors. ## spire Spire is a new P2P network to transport signed price messages from feeds to relayers. Based on libp2p, developed for ipfs and now used by Ethereum 2.0, filecoin and Polkadot, `spire` will allow an easier and more open access to the oracle network. Both Scuttlebut and Spire will now be used to broadcast signed messages, and relayers will pick the most recent message from either transport. This will add redundancy on a critical element of the network. By default, `spire` is turned off and will remain disabled for now. We'll instruct you to activate it at a later date, once we've established that gofer doesn't introduce undesirable effects. For more information about `spire`: https://github.com/makerdao/oracle-suite/tree/master/cmd/spire # Backup Take a backup of your existing configuration. `cp /etc/omnia.conf ~/omnia-15.conf` # Upgrade **Install Omnia and Dependencies** `nix-env --install --verbose --file https://github.com/makerdao/oracles-v2/tarball/stable` **Configure Gofer, Scuttlebot and Omnia** ``` install-omnia feed --ssb-caps ~/caps.json --ssb-external <your external ip here> ``` **Configure Gofer Config File** *install-omnia will have copied the gofer configuration file to /etc/gofer.json* This file defines the data models, and under normal circunstances you shouldn't need to play with that file, except to set some API-specific (called 'origins' in gofer) configs. `sudo vim /etc/gofer.json` In `rpc`, set the `address` to `127.0.0.1` to an arbitrary port: ``` "rpc": { "address": "127.0.0.1:31822" }, ``` In `origins`, set the `API_KEY` for `openexchangerates` as below: ``` "origins": { "openexchangerates": { "type": "openexchangerates", "name": "openexchangerates", "params": { "apiKey": "41d14458c27c46c1a5c91a92ab5959dc" } } }, ``` **Set Scuttlebot, Omnia and Gofer as systemd services and schedule to run on system boot** ``` sudo systemctl daemon-reload sudo systemctl enable gofer-agent.service sudo systemctl enable ssb-server.service sudo systemctl enable omnia.service ``` Start gofer for the first time ``` sudo systemctl start gofer-agent ``` Restart omnia and ssb to run the latest versions ``` sudo systemctl restart ssb-server sudo systemctl restart omnia ``` **[fyi] To stop running Omnia, Gofer and Scuttlebot** ``` sudo systemctl stop ssb-server sudo systemctl stop omnia sudo systemctl stop gofer-agent ``` **[fyi] To stop Omnia and Scuttlebot from starting on system boot** ``` sudo systemctl disable --now ssb-server sudo systemctl disable --now omnia sudo systemctl disable --now gofer-agent ``` **[fyi] To query gofer and confirm that the agent works** ``` gofer prices MANA/USD --config /etc/gofer.json --format=trace ``` This should return an aggregated price, and the trace for its calculations. Then you can check the agent logs (`sudo journalctl -feu gofer-agent`) and confirm that there are no errors in the agent logs either. # Final steps **Check Status of Omnia and Scuttlebot** ``` sudo systemctl status ssb-server sudo systemctl status omnia sudo systemctl status gofer-agent ``` **Check Scuttlebot logs** `sudo journalctl --follow --unit ssb-server` **Check Omnia logs** `sudo journalctl --follow --unit omnia` Here, we want to make sure that omnia is publishing messages to Scuttlebot (e.g. `Publishing SOLUSD price message with transport-ssb`) and that it is obtaining the data from `gofer` (e.g. `Querying AAVE/USD prices and calculating median with setzer...`). It is normal for `omnia` to use setzer to query prices when `gofer-agent` was just started, as it will take 1 or 2 minutes to the agent to fetch the initial state. **Check Gofer logs** `sudo journalctl --follow --unit gofer-agent` There shouldn't be any errors in the gofer logs. **Verify that ssb-server is running on ports 8007 and 8988.** If these ports are not correct, your Feed will not function correctly! `sudo lsof -i -P -n | grep LISTEN | grep ssb-serve` **Notify** Let @marcandu on Keybase know that you completed the upgrade, so they can confirm that your feed is properly broadcasting messages.