[
  {
    "path": "Crossbuilding.md",
    "content": "## Cross-building\nMake sure you have the Haskell platform installed (<code>sudo apt install haskell-platform</code>). You also <b>need</b> to do this on a aarch64/arm64 machine or simply on your Raspberry Pi.<br>\nWe will build Cabal 3.0 in this tutorial, but you can choose any version you need.\n```\nwget http://hackage.haskell.org/package/cabal-install-3.0.0.0/cabal-install-3.0.0.0.tar.gz\ntar -xf cabal-install-3.0.0.0.tar.gz\ncd cabal-install-3.0.0.0\ncabal update\ncabal install --installdir=$HOME/.local/bin\n```\nThis could take some time. Now check with <code>cabal --version</code> your version.\n"
  },
  {
    "path": "FullGuideDeprecated.md",
    "content": "# How to setup the Cardano Node on Raspberry Pi 4 (Full Guide)\n\n\n\n## Prerequesites\n\n- Raspberry Pi 4 8GB RAM\n- SSD (at least 240GB)\n- microSD Card (at least 1GB)\n- microSD Card Reader\n- Eluteng SATA USB 3.0 Adapter\n- microHDMI to HDMI Adapter\n- Keyboard and Monitor (or use SSH instead)\n- LAN connection\n\n## 1. Upgrading Bootloader\n\nIn order to boot the Raspberry Pi from the SSD, we need to upgrade the bootloader firmware of the Pi. Normally the Pi can just boot from the microSD card slot.\nWe want to run the Pi on SSD because performance and speed is much higher. Also it's much more reliable, because a microSD card is not meant for a lot of read and write actions. These are the steps you need to take:\n\n1. Download <a href=\"https://www.raspberrypi.org/downloads/\">Pi Imager</a> and install it.\n2. Insert the microSD Card in the Card Reader and plug it in your PC.\n3. Open Pi Imager and click \"Choose OS\" -> Raspberry Pi OS (other) -> Raspberry Pi OS Lite (32-bit)\n4. Click on \"Choose SD Card\" and select the microSD Card\n5. Click \"Write\" and wait until finished\n6. Now remove the microSD Card from the PC and plug it into the Pi\n7. Connect a monitor and plugin the keyboard in a USB 2.0 slot (the left ones), also make sure to connect the LAN cabel\n8. Connect the power adapter and now the Pi should turn on and boot.\n9. Just wait until you are at the login screen:\n\n- Username: pi\n- Password: raspberry\n\n10. Enter the following commands to update the distribution:\n\n```\nsudo apt update\nsudo apt full-upgrade\n```\n\n11. In order to receive the latest firmware updates edit the file:\n\n```\nsudo nano /etc/default/rpi-eeprom-update\n```\n\n<img src=\"https://www.maketecheasier.com/assets/uploads/2020/07/raspberry-pi-4-usb-ssd-boot-05.jpg.webp\"></img>\n\n12. Change <code>FIRMWARE_RELEASE_STATUS</code> from \"critical\" to \"stable\". Press <code>CTRL + X</code>, then press <code>Y</code> and then <code>Enter</code> to confirm and leave.\n\n13. Now enter the following command in order to upgrade the bootloader:\n\n```\nsudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-07-31.bin\n```\n\n14. Now you can shutdown/turn off the Pi. The new Bootloader is activated and we can boot from SSD!\n\n## 2. Preparing Ubuntu\n\n1. Insert the SSD together with the Eluteng Adapter in your PC.\n2. Open Pi Imager again and click on \"Choose OS\" -> Ubuntu -> Ubuntu 20.04.1 LTS (Raspberry Pi 3/4). <b>The 64-bit version!</b>\n3. Click on \"Choose SD Card\" and select the SSD\n4. Click \"Write\" and wait until finished\n5. You should now have two partitions on your SSD looking like this:\n   <img src=\"https://github.com/alessandrokonrad/Pi-Pool/raw/master/images/partitions.png\"></img>\n6. For the following it's important to have access to Linux commands on your PC (Windows users can use WSL):<br />\n    \n    1. Go in the system-boot partition of your SSD and open up a terminal inside (Right Click --> Open Terminal). Run this command:\n    ```\n    zcat vmlinuz > vmlinux\n    ```\n    \n    2. Now open the config.txt file and replace the [pi4] section with this:\n    ```\n    [pi4]\n    max_framebuffers=2\n    dtoverlay=vc4-fkms-v3d\n    boot_delay\n    kernel=vmlinux\n    initramfs initrd.img followkernel\n    ```\n    3. Now run this command, also from system-boot partition:\n    ```\n    wget https://raw.githubusercontent.com/alessandrokonrad/Pi-Pool/master/scripts/fullGuide/auto_decompress_kernel\n    sudo chmod +x auto_decompress_kernel\n    ```\n    4. Now go in the writable partition and go to /ect/apt/apt.conf.d/ and open up a new terminal inside:\n    ```\n    wget https://raw.githubusercontent.com/alessandrokonrad/Pi-Pool/master/scripts/fullGuide/999_decompress_rpi_kernel\n    sudo chmod +x 999_decompress_rpi_kernel\n    ```\n\n7. Unplug the SSD from the PC and insert it into one of the USB 3.0 ports (the right ones) of the Pi. (You can remove the SD Card from the Pi, if it's still inserted)\n8. Turn on the Pi and wait until you are at the login screen again:\n\n- Username: ubuntu\n- Password: ubuntu\n\n9. Now you will be prompted to change password. Afterwards you should be successfully logged in your Ubuntu distribution!\n\nFor more information on how to run Ubuntu on SSD, check out <a href=\"https://www.raspberrypi.org/forums/viewtopic.php?t=278791\">this</a> forum post.\n\n## 3. Installing Cardano node\n1. Download the start.sh script and execute it. This script will install all necessary dependencies for the Cardano node:\n```\nwget https://raw.githubusercontent.com/alessandrokonrad/Pi-Pool/master/scripts/fullGuide/start.sh\nchmod +x start.sh\n./start.sh\n```\n2. Install cardano-node and cardano-cli:\n```\nwget https://raw.githubusercontent.com/alessandrokonrad/Pi-Pool/master/scripts/fullGuide/installCardano.sh\nchmod +x installCardano.sh\n./installCardano.sh\n```\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\"><img width=\"80px\" src=\"https://github.com/alessandrokonrad/Pi-Pool/blob/master/images/logo.svg\"></img></p>\n\n# Berry Pool\n\nBerry is a Cardano Stakepool on Raspberry Pi. Check out my <a href=\"https://pipool.online\">website</a> to see more about my stakepool. You can support me by just delegating to my pool. <br>\nThis repository is a guide to setup a stakepool on a Raspberry Pi by your own.\n\n## Why this guide\n\nBasically we have two different popular CPU architectures. Let's only consider 64-bit machines. Many of you know Intel and AMD. They primarily build their CPUs on a x86_64 architecture. Then there is ARM, which CPUs are built on the so called aarch64 architecture, and our Raspberry Pi has an aarch64 CPU. I don't want to dive any deeper in that, but the problem is, that the Cardano-Node setup is made for x86_64 machines and currently doesn't support aarch64 out of the box. The goal of this repository is to make it as easy as possible to run a Cardano-Node on Raspberry Pi.\n\n## Prerequesites\n\n- Raspberry Pi 4 4GB RAM or 8GB RAM (recommended)\n- SSD (at least 20GB)\n- microSD Card (needed to upgrade the bootloader)\n- SATA USB 3.0 Adapter (<a href=\"https://jamesachambers.com/raspberry-pi-4-usb-boot-config-guide-for-ssd-flash-drives/\">list of working adapters</a>)\n\n## Getting started\n\n### Note\n<b>Cardano-Node version <code>1.27.0</code> has been released! This image comes with 1.23.0, so you should directly update the node after installing the image. 1.23.0 can't connect with the network anymore since December 2020.\n   \nDownload 1.27.0 <a href=\"https://ci.zw3rk.com/build/1758/download/1/aarch64-unknown-linux-musl-cardano-node-1.27.0.zip\">here</a>\n\nScroll down to \"Updating the Cardano-Node\" if you don't know how to update the node version.\n\nChanges needed:\n\nRemove \"ChainDB\" from all metrics in Grafana, so that it can be displayed correctly again.\nE.g.: cardano_node_ChainDB_metrics_epoch_int -> cardano_node_metrics_epoch_int\n\n<a href=\"https://github.com/input-output-hk/cardano-node/releases/tag/1.27.0\">Full Release Notes</a>\n</b>\n##\n\n### Upgrading the Bootloader\n\nIf your Pi already boots from SSD (<b>recently shipped Pi 4 have USB Booting already flashed on</b>) you can skip this section.\n\n1. Download <a href=\"https://www.raspberrypi.org/downloads/\">Pi Imager</a> and install it\n2. Insert the microSD Card in a Card Reader and plug it in your PC\n3. Open Pi Imager and click \"Choose OS\" -> Misc utility images -> Raspberry Pi 4 EEPROM boot recovery\n4. Click on \"Choose SD Card\" and select the microSD Card\n5. Click \"Write\" and wait until finished\n6. Now remove the microSD Card from the PC and plug it into the Pi\n7. Connect a monitor to the Pi and turn it on\n8. If you screen shows a <b>green</b> color, the bootloader had been successfully updated!\n9. Remove the microSD from the Pi\n\n### Install the Image\n1. Download the latest <a href=\"https://drive.google.com/u/0/uc?export=download&confirm=iXTs&id=1Gr0iCZHM8tALZ5g6qrZzLkfZPxA5K9NN\">release</a>\n2. Plug in the SSD in your PC\n3. Open <a href=\"https://www.raspberrypi.org/downloads/\">Pi Imager</a> and scroll down to \"Use custom\", select the downloaded release\n4. Click on \"Choose SD Card\" and select the SSD\n5. Click \"Write\" and wait until finished\n6. You can now connect the SSD with the Pi and turn it on.\n\n### Running the Image\nThese are the login credentials:\n\nUsername:<code>ada</code> <br />\nPassword:<code>lovelace</code>\n\nIf you want to change the password, you can do this with <code>passwd</code>\n\n### Running a Cardano-Node:\n\nA sample node configuration folder is already preinstalled. To reproduce:\n\n```\nmkdir pi-node\ncd pi-node\nwget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/mainnet-config.json\nwget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/mainnet-byron-genesis.json\nwget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/mainnet-shelley-genesis.json\nwget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/mainnet-topology.json\n\n```\n\n\n### Starting a Cardano-Node:\n```\ncd pi-node\ncardano-node run \\\n   --topology mainnet-topology.json \\\n   --database-path db \\\n   --socket-path db/socket \\\n   --host-addr 0.0.0.0 \\\n   --port 3000 \\\n   --config mainnet-config.json\n```\n\nThat's it. Your node is now starting to sync!\n\n### Monitoring\nIf you want to monitor your node, you can do this with the command <code>startMonitor</code>.\n\nYou can access another instance of terminal by pressing <code>alt+F2-F12</code> buttons. <code>alt+F1</code> should take you back to the running node.\n\nThis will create a Grafana instance at port 5000. A custom dashboard is also already preinstalled. You can find it in the left panel under Dashboard -> Manage. You should find a Dashboard called \"Raspberry Pi Node\".\n\nTo connect to it find your ip addresss by typing: <code>ip a</code>\n\nIn your browser type your ip address and the port number: <code>XXX.XXX.X.X:5000</code>\n\nDefault Credentials are:<br />\nUsername: <code>admin</code><br />\nPassword: <code>admin</code>\n\nThe whole monitoring configuration you can find under <code>/opt/cardano/monitoring</code>\n\nUse <code>stopMonitor</code> to stop the monitoring process.\n\n\n### Updating the Cardano-Node\n\nCurrently there is no auto updater built in the Image. In order to update the version, this needs to be done manually.\nTo get the latest Cardano-Node version, join this <a href=\"https://t.me/joinchat/FeKTCBu-pn5OUZUz4joF2w\">Telgram group</a> or check in the Getting started section under Note, if there is something new.\n\nDownload it and replace the new binaries with the current ones under <code>~/.local/bin</code> (cardano-node and cardano-cli)\n\nRedownload the the config file: <br />\n``` wget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/mainnet-config.json ``` <br />\nChange the following parameters in the config file:\n```\n  ...\n  \"TraceBlockFetchDecisions\": true,\n  ...\n  \"hasEKG\": 12600,\n  \"hasPrometheus\": [\n    \"127.0.0.1\",\n    12700\n  ],\n  ...\n```\n\n\n## Setup a Stake Pool\n\nI can recommend <a href=\"https://cardano-community.github.io/guild-operators/#/\">CNTools</a> (make sure the CNTools version is compatible with the Cardano-Node version).\n\nThe guide of <a href=\"https://www.coincashew.com/coins/overview-ada/guide-how-to-build-a-haskell-stakepool-node\">CoinCashew</a> is also really helpful.\n\nOtherwise I would follow the official guide of <a href=\"https://cardano-foundation-cardano.readthedocs-hosted.com/en/latest/getting-started/stake-pool-operators/index.html\">cardano.org</a>\n\nFor JavaScript enthusiasts this could be helpful: <a href=\"https://github.com/Berry-Pool/cardanocli-js\">cardanocli-js</a>\n\n## Port forwarding\n\nGo to your router settings. You can access them via your browser with the IP address of the router (e.g. 192.168.178.1 or if you have a FritzBox with fritz.box).\nThen look for an option \"Port Forwarding\". Choose the IP address of your node(s) and open its/their port(s). Allow TCP. Then save it and that's it.\n"
  },
  {
    "path": "ReadMeDeprecated.md",
    "content": "<p align=\"center\"><img width=\"80px\" src=\"https://github.com/alessandrokonrad/Pi-Pool/blob/master/images/logo.svg\"></img></p>\n\n# Berry Pool\n\nBerry is a Cardano Stakepool on Raspberry Pi. Check out my <a href=\"https://pipool.online\">website</a> to see more about my stakepool. You can support me by just delegating to my pool. <br>\nThis repository is a guide to setup a stakepool on a Raspberry Pi by your own.\n\n## Why this guide\n\nBasically we have two different popular CPU architectures. Let's only consider 64-bit machines. Many of you know Intel and AMD. They primarily build their CPUs on a x86_64 architecture. Then there is ARM, which CPUs are built on the so called aarch64 architecture, and our Raspberry Pi has an aarch64 CPU. I don't want to dive any deeper in that, but the problem is, that the Cardano-Node setup is made for x86_64 machines and currently doesn't support aarch64 out of the box. The goal of this repository is to make it as easy as possible to run a Cardano-Node on Raspberry Pi.\n\n## Prerequesites\n\n- Raspberry Pi 4 with 8GB RAM (4GB version works only with Swap partition as extra RAM)\n- Ubuntu 20.04 LTS <b>64-bit</b> (Very easy to install with <a href=\"https://www.raspberrypi.org/downloads/\">Pi Imager</a>. For running Ubuntu on SSD, check below)\n\n## Getting started\n\n## Note\n<b>IOG is currently improving the performance of the Cardano Node on ARM devices. Join this <a href=\"https://t.me/joinchat/FeKTCBu-pn5OUZUz4joF2w\">group</a> to find out more.\nI wouldn't recommend you building the node with the GHC 8.6.5 compiler for ARM any longer, like in this guide.</b>\n\nThis guide is for the Cardano mainnet!\n\n#### 1. First of all let's update and upgrade our Ubuntu:\n\n```\nsudo apt-get update\nsudo apt-get upgrade\n```\n\nYou might reboot your Pi afterwards.\n\n#### 2. Install necessary dependencies:\n\n```\nsudo apt-get install libsodium-dev build-essential pkg-config libffi-dev libgmp-dev libssl-dev libtinfo-dev libsystemd-dev zlib1g-dev make g++ tmux git jq wget libncursesw5 llvm -y\n\n```\n\n#### 3. Get the Haskell platform:\n\n```\nwget https://downloads.haskell.org/ghc/8.6.5/ghc-8.6.5-aarch64-ubuntu18.04-linux.tar.xz\ntar -xf ghc-8.6.5-aarch64-ubuntu18.04-linux.tar.xz\nrm ghc-8.6.5-aarch64-ubuntu18.04-linux.tar.xz\ncd ghc-8.6.5/\n./configure\nsudo make install\ncd ../\nrm -r ghc-8.6.5/\n```\n\nNow you should have GHC 8.6.5. You can check that with <code>ghc --version</code>.\n\n#### 4. Get Cabal 3.2:\n\n```\nwget https://github.com/alessandrokonrad/Pi-Pool/raw/master/aarch64/cabal3.2/cabal\nchmod +x cabal\nmkdir -p ~/.local/bin\nmv cabal ~/.local/bin\n```\n\nYou can also build your own Cabal binary for aarch64. Look <a href=\"/Crossbuilding.md\">here</a>.\n\n#### 5. Add the new Cabal to PATH:\n\nOpen the .bashrc file in your home directory and add at the bottom:\n\n```\nexport PATH=\"~/.local/bin:$PATH\"\n```\n\nTo make the the new PATH active you can either reboot the Pi or type <code>source .bashrc</code> from your home directory. Then run:\n\n```\ncabal update\n```\n\n<br>\n\nNow we are ready to build the Cardano-Node!\n\n#### 6. Clone the cardano-node repository from GitHub and build it (this takes a while):\n\n```\ngit clone https://github.com/input-output-hk/cardano-node.git\ncd cardano-node\necho -e \"package cardano-crypto-praos\\n  flags: -external-libsodium-vrf\" > cabal.project.local\ngit fetch --all --tags\ngit checkout tags/1.21.1\ncabal build all\ncp -p dist-newstyle/build/aarch64-linux/ghc-8.6.5/cardano-node-1.21.1/x/cardano-node/build/cardano-node/cardano-node ~/.local/bin/\ncp -p dist-newstyle/build/aarch64-linux/ghc-8.6.5/cardano-cli-1.21.1/x/cardano-cli/build/cardano-cli/cardano-cli ~/.local/bin/\n\n```\n\nFinally we have our node. If everything worked fine, you should be able to type <code>cardano-cli</code> and <code>cardano-node</code>.\n\n#### 7. Running a node:\n\nWe need first of all some configuration files:\n\n```\nmkdir pi-node\ncd pi-node\nwget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/mainnet-config.json\nwget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/mainnet-byron-genesis.json\nwget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/mainnet-shelley-genesis.json\nwget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/mainnet-topology.json\n\n```\n\nYou can change \"ViewMode\" from \"SimpleView to \"LiveView\" in mainnet-config.json to get a fancy node monitor.<br>\nNow start the node:\n\n```\ncardano-node run \\\n   --topology mainnet-topology.json \\\n   --database-path db \\\n   --socket-path db/socket \\\n   --host-addr 0.0.0.0 \\\n   --port 3000 \\\n   --config mainnet-config.json\n```\n\nThat's it. Your node is now starting to sync!\n\n<b>Note:</b> The syncing process for the mainnet blockchain can take really long. My node also crashed sometimes during the syncing process. Having a backup machine (x86_64) where you sync the node and just copy the db on the Raspberry Pi, makes it much easier and faster. As soon as the Pi is in sync it runs really smooth and just uses about 5% of the CPU.\n\n## Update the node\n\nIf a new version is released, you can update your installed node with the following commands (replace `<version>` with the latest version number):\n\n```\ncd cardano-node\ngit fetch --all --tags\ngit checkout tags/<version>\ncabal update\ncabal build all\ncp -p dist-newstyle/build/aarch64-linux/ghc-8.6.5/cardano-node-<version>/x/cardano-node/build/cardano-node/cardano-node ~/.local/bin/\ncp -p dist-newstyle/build/aarch64-linux/ghc-8.6.5/cardano-cli-<version>/x/cardano-cli/build/cardano-cli/cardano-cli ~/.local/bin/\n```\n\n## Setup a stakepool\n\nI might create a detailed guide soon, on how to register a stakepool. Anyway there are plenty tutorials out there: <br />\nI can recommend <a href=\"https://cardano-community.github.io/guild-operators/Scripts/cntools.html\">CNTools</a> (make sure the CNTools version is compatible with the Cardano-Node version).<br />\nOtherwise I would follow the official guide of <a href=\"https://cardano-foundation-cardano.readthedocs-hosted.com/en/latest/getting-started/stake-pool-operators/index.html\">cardano.org</a>\n\n## Run Ubuntu on a SSD\n\n#### Running Ubuntu from SSD, while booting from SD card:\n\n1. Flash the Ubuntu image on your SSD and your SD card.\n2. Now go to to the boot partition of the SD card and change in cmdline.txt the root path to: <code>root=/dev/sda2</code>\n3. Insert the SD card into the Pi and the SSD into one of the USB 3.0 ports.\n   This should boot now from the SD card, but the OS will run on the SSD then.\n\n#### Running and booting from SSD (no need for SD card):\n\nYou can check that out:\n<a href=\"https://www.raspberrypi.org/forums/viewtopic.php?t=278791\">Directly boot from SSD</a>\n\n#### Problems with running Ubuntu from USB 3.0:\n\n<a href=\"https://jamesachambers.com/raspberry-pi-4-usb-boot-config-guide-for-ssd-flash-drives/\">Adding quirks to your chipset, if it's not working</a>\n\n## Cross-building\n\nIf you want to build your own Cabal binary for aarch64 or a different version of Cabal, follow <a href=\"/Crossbuilding.md\">this</a> guide.\n\n## Port forwarding\n\nGo to your router settings. You can access them via your browser with the IP address of the router (e.g. 192.168.178.1 or if you have a FritzBox with fritz.box).\nThen look for a option Port Forwarding. Choose the IP address of your relay node(s) and open its/their port(s). Allow TCP and UDP. Then save it and that's it.\n"
  },
  {
    "path": "meta/extended_poolmeta.json",
    "content": "{\n  \"info\": {\n    \"url_png_icon_64x64\": \"https://github.com/alessandrokonrad/Pi-Pool/raw/master/images/logo64_64.png\",\n    \"url_png_logo\": \"https://github.com/alessandrokonrad/Pi-Pool/raw/master/images/logo.png\",\n    \"location\": \"Munich, Germany\",\n    \"social\": {\n      \"twitter_handle\": \"berry_ales\",\n      \"telegram_handle\": \"berry_pool\",\n      \"github_handle\": \"alessandrokonrad\"\n    },\n    \"about\": {\n      \"me\": \"My name is Alessandro, I'm a single pool operator and a computer science student from Germany.\",\n      \"server\": \"Berry is the first Stake Pool on Raspberry Pis and it's operational since the first day of Shelley. Here to truly decentralize Cardano in a power efficient way!\"\n    }\n  },\n  \"my-pool-ids\": {\n    \"0\": \"2a748e3885f6f73320ad16a8331247b81fe01b8d39f57eec9caa5091\"\n  },\n  \"telegram-admin-handle\": {\n    \"0\": \"berry_ales\"\n  }\n}\n"
  },
  {
    "path": "meta/poolmeta.json",
    "content": "{\n  \"name\": \"Berry\",\n  \"ticker\": \"BERRY\",\n  \"description\": \"Decentralizing Cardano in the most beautiful way - Let's shape the future together!\",\n  \"homepage\": \"https://pipool.online\",\n  \"extended\": \"https://github.com/alessandrokonrad/Pi-Pool/raw/master/meta/extended_poolmeta.json\"\n}\n"
  },
  {
    "path": "meta/poolmeta_v2.json",
    "content": "{\n  \"name\": \"Berry\",\n  \"ticker\": \"BERRY\",\n  \"description\": \"Decentralizing Cardano in the most beautiful way - Let's shape the future together!\",\n  \"homepage\": \"https://berrypool.io\",\n  \"extended\": \"https://github.com/alessandrokonrad/Pi-Pool/raw/master/meta/extended_poolmeta.json\"\n}\n"
  },
  {
    "path": "monitoring/grafana-dashboard.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"id\": 2,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": null,\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"mappings\": [],\n          \"noValue\": \"[BERRY] Pi Pool\",\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"dark-purple\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 65,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        }\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": null,\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": null\n          },\n          \"mappings\": [],\n          \"max\": 8035200,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"percentage\",\n            \"steps\": [\n              {\n                \"color\": \"light-red\",\n                \"value\": null\n              },\n              {\n                \"color\": \"semi-dark-purple\",\n                \"value\": 30\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 0\n      },\n      \"id\": 69,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_Forge_metrics_remainingKESPeriods_int * 129600\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"KES Expiry\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": null,\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 0\n      },\n      \"hiddenSeries\": false,\n      \"id\": 67,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_BlockFetchDecision_peers_connectedPeers_int{alias=\\\"Pi-Relay\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Connected Peers\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"datasource\": null,\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-purple\",\n                \"value\": null\n              },\n              {\n                \"color\": \"light-red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 2\n      },\n      \"id\": 59,\n      \"options\": {\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"100 - (avg by(alias) (irate(node_cpu_seconds_total{mode=\\\"idle\\\"}[1m])) * 100)\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"CPU Load\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": null,\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"dark-purple\",\n                \"value\": null\n              },\n              {\n                \"color\": \"light-red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 4,\n        \"x\": 4,\n        \"y\": 2\n      },\n      \"id\": 61,\n      \"options\": {\n        \"displayMode\": \"lcd\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"(1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes)))* 100\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Memory Utilization\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"semi-dark-purple\",\n        \"relay\": \"light-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 3\n      },\n      \"hiddenSeries\": false,\n      \"id\": 57,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_metrics_txsInMempool_int\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Mempool Transactions\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"datasource\": null,\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": null\n          },\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-purple\",\n                \"value\": null\n              },\n              {\n                \"color\": \"light-red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 4,\n        \"x\": 4,\n        \"y\": 4\n      },\n      \"id\": 63,\n      \"options\": {\n        \"displayMode\": \"lcd\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"100 - ((node_filesystem_avail_bytes{mountpoint=\\\"/\\\",fstype!=\\\"rootfs\\\"} * 100) / node_filesystem_size_bytes{mountpoint=\\\"/\\\",fstype!=\\\"rootfs\\\"})\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Disk Utilization\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": null,\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              },\n              {\n                \"color\": \"semi-dark-purple\",\n                \"value\": 90\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 55,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        }\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_metrics_Forge_forged_int / cardano_node_metrics_Forge_node_is_leader_int * 100\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Pool Performance\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": null,\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-yellow\",\n                \"value\": null\n              },\n              {\n                \"color\": \"light-yellow\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 8\n      },\n      \"id\": 51,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        }\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_metrics_Forge_forged_int\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Blocks Forged\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": null,\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-yellow\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 4,\n        \"x\": 4,\n        \"y\": 8\n      },\n      \"id\": 53,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        }\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_metrics_Forge_node_is_leader_int\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Blocks Assigned\",\n      \"type\": \"stat\"\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 8\n      },\n      \"hiddenSeries\": false,\n      \"id\": 18,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_ChainDB_metrics_density_real * 100\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"cardano_node_metrics_ChainDB_density_real * 100\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Cardano Chain Density\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"light-blue\",\n                \"value\": null\n              },\n              {\n                \"color\": \"light-blue\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 10\n      },\n      \"id\": 47,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        }\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_ChainDB_metrics_epoch_int{alias=\\\"Pi-Core\\\"}\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Epoch\",\n      \"transformations\": [],\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"light-blue\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 4,\n        \"x\": 4,\n        \"y\": 10\n      },\n      \"id\": 49,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\"mean\"],\n          \"fields\": \"\",\n          \"values\": false\n        }\n      },\n      \"pluginVersion\": \"7.0.3\",\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_ChainDB_metrics_slotInEpoch_int{alias=\\\"Pi-Core\\\"}\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Slot\",\n      \"transformations\": [],\n      \"type\": \"stat\"\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 11\n      },\n      \"hiddenSeries\": false,\n      \"id\": 2,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_ChainDB_metrics_slotNum_int\",\n          \"hide\": false,\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"cardano_node_metrics_ChainDB_slotNum_int\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Cardano Slot Height\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 12\n      },\n      \"hiddenSeries\": false,\n      \"id\": 5,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_ChainDB_metrics_blockNum_int\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"C\"\n        },\n        {\n          \"expr\": \"cardano_node_metrics_ChainDB_blockNum_int\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"cardano_byron_proxy_ChainDB_blockNum_int\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Cardano Last Block Height\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 16\n      },\n      \"hiddenSeries\": false,\n      \"id\": 41,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_metrics_Forge_forged_int - cardano_node_metrics_Forge_adopted_int\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Rejected blocks since last restart\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"decimals\": 5,\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 19\n      },\n      \"hiddenSeries\": false,\n      \"id\": 39,\n      \"interval\": \"20s\",\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"rightSide\": true,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"rate(cardano_node_metrics_Forge_node_is_leader_int[710s])/rate(cardano_node_metrics_Forge_forge_about_to_lead_int[710s])\",\n          \"instant\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"sum(rate(cardano_node_metrics_Forge_node_is_leader_int[710s])/rate(cardano_node_metrics_Forge_forge_about_to_lead_int[710s]))\",\n          \"legendFormat\": \"Total led slots\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Slot leading share (% of slots led)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 1,\n          \"format\": \"percentunit\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"hiddenSeries\": false,\n      \"id\": 3,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_ChainDB_metrics_epoch_int\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"cardano_node_metrics_ChainDB_epoch_int\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Cardano Last Block Epoch\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 24\n      },\n      \"hiddenSeries\": false,\n      \"id\": 28,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"rate(cardano_node_ChainDB_metrics_blockNum_int[150s])*60\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"rate(cardano_node_metrics_ChainDB_blockNum_int[150s])*60\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Block sync speed (blocks / min)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"block-producing\": \"dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 27\n      },\n      \"hiddenSeries\": false,\n      \"id\": 43,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"1/rate(cardano_node_metrics_Forge_forge_about_to_lead_int[710s])\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Slot length\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 3,\n          \"format\": \"s\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 28\n      },\n      \"hiddenSeries\": false,\n      \"id\": 19,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"cardano_node_ChainDB_metrics_slotInEpoch_int\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"cardano_node_metrics_ChainDB_slotInEpoch_int\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Cardano Last Block Slot\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 32\n      },\n      \"hiddenSeries\": false,\n      \"id\": 16,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"node_filefd_allocated\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"File Descriptors\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 35\n      },\n      \"hiddenSeries\": false,\n      \"id\": 37,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"rts_gc_current_bytes_used/(1024*1024)\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Node current \\\"residency\\\" (amount of live data, MBytes)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 36\n      },\n      \"hiddenSeries\": false,\n      \"id\": 30,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"(cardano_node_metrics_Stat_rss_int*4096)/(1024*1026)\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Node RSS (allocated memory in RAM, in MB)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"1h Cluster Data Received, bytes\": \"dark-purple\",\n        \"1h Cluster Data Transmitted, bytes\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"description\": \"/\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 40\n      },\n      \"hiddenSeries\": false,\n      \"id\": 25,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"sum(rate(node_network_receive_bytes_total{alias!~\\\"monitoring.*\\\",device!~\\\"lo\\\"}[1h])) * 3600\",\n          \"legendFormat\": \"1h Cluster Data Received, bytes\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"sum(rate(node_network_transmit_bytes_total{alias!~\\\"monitoring.*\\\",device!~\\\"lo\\\"}[1h])) * 3600\",\n          \"hide\": false,\n          \"legendFormat\": \"1h Cluster Data Transmitted, bytes\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Cluster Aggregate Data Transfer, 1 hr Rolling Window\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"decbytes\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"description\": \"Counts memory that is free as well as reclaimable from caches and buffers\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 43\n      },\n      \"hiddenSeries\": false,\n      \"id\": 23,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"node_memory_MemAvailable_bytes{alias!~\\\"monitoring.*\\\"} / node_memory_MemTotal_bytes{alias!~\\\"monitoring.*\\\"} * 100\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Node Memory Available (%)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 44\n      },\n      \"hiddenSeries\": false,\n      \"id\": 17,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"100 - (avg by(alias) (irate(node_cpu_seconds_total{mode=\\\"idle\\\"}[1m])) * 100)\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"CPU Utilization (1m avg)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"description\": \"Shows how many times cardano related services have been restarted within a 1 hour lookback window\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 48\n      },\n      \"hiddenSeries\": false,\n      \"id\": 35,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"round(increase(node_systemd_unit_state{name=~\\\"cardano.*|byron.*|explorer.*\\\",state=\\\"active\\\"}[1h:10s])) > 0\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}-{{name}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Cardano Service Restarts Per Hour\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 51\n      },\n      \"hiddenSeries\": false,\n      \"id\": 32,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"rts_gc_max_bytes_used/(1024*1024)\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Node max \\\"residency\\\" (amount of live data, MBytes)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 52\n      },\n      \"hiddenSeries\": false,\n      \"id\": 26,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"(time()-node_boot_time_seconds)\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Node Uptime\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Aggregate cluster egress (transmit)\": \"semi-dark-purple\",\n        \"Aggregate cluster ingress (received)\": \"dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"description\": \"20 second rolling time average\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 56\n      },\n      \"hiddenSeries\": false,\n      \"id\": 22,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"sum(rate(node_network_receive_bytes_total{alias!~\\\"monitoring.*\\\",device!~\\\"lo\\\"}[20s])) * 8\",\n          \"legendFormat\": \"Aggregate cluster ingress (received)\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"sum(rate(node_network_transmit_bytes_total{alias!~\\\"monitoring.*\\\",device!~\\\"lo\\\"}[20s]) * -8)\",\n          \"legendFormat\": \"Aggregate cluster egress (transmit)\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Cluster Aggregate Bandwidth (bps)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"decbits\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {\n        \"Pi-Core\": \"semi-dark-purple\",\n        \"Pi-Relay\": \"light-purple\",\n        \"block-producing\": \"dark-purple\",\n        \"relay\": \"semi-dark-purple\"\n      },\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"description\": \"Counts only memory that is physically free\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 59\n      },\n      \"hiddenSeries\": false,\n      \"id\": 34,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"rts_gc_peak_megabytes_allocated\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Node peak memory allocated (from OS, in MBytes)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"prometheus\",\n      \"description\": \"Counts memory that is free as well as reclaimable from caches and buffers\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 60\n      },\n      \"hiddenSeries\": false,\n      \"id\": 24,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"expr\": \"node_memory_MemFree_bytes{alias!~\\\"monitoring.*\\\"} / node_memory_MemTotal_bytes{alias!~\\\"monitoring.*\\\"} * 100\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{alias}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeRegions\": [],\n      \"timeShift\": null,\n      \"title\": \"Node Memory Free (%)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": null,\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": null,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    }\n  ],\n  \"refresh\": \"30s\",\n  \"schemaVersion\": 25,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-12h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\"5m\", \"15m\", \"1h\", \"6h\", \"12h\", \"24h\", \"2d\", \"7d\", \"30d\"]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Pi Pool\",\n  \"uid\": \"pi-node\",\n  \"version\": 29\n}\n"
  },
  {
    "path": "scripts/cardano-scripts/createPool",
    "content": "#!/bin/bash\n\nPOOL_PATH=\"$HOME/priv/pool/$1\"\nTMP=\"/opt/cardano/tmp\"\nmkdir -p \"$POOL_PATH\"\n\ncardano-cli shelley node key-gen-KES \\\n    --verification-key-file \"$POOL_PATH/$1.kes.vkey\" \\\n    --signing-key-file \"$POOL_PATH/$1.kes.skey\"\n\ncardano-cli shelley node key-gen \\\n    --cold-verification-key-file \"$POOL_PATH/$1.node.vkey\" \\\n    --cold-signing-key-file \"$POOL_PATH/$1.node.skey\" \\\n    --operational-certificate-issue-counter \"$POOL_PATH/$1.node.counter\"\n\nslotsPerKESPeriod=$(cat \"$RELAY/files/mainnet-shelley-genesis.json\" | jq -r '.slotsPerKESPeriod')\necho slotsPerKESPeriod: \"${slotsPerKESPeriod}\"\n\nslotNo=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')\necho slotNo: \"${slotNo}\"\n\nkesPeriod=$((${slotNo} / ${slotsPerKESPeriod}))\necho kesPeriod: \"${kesPeriod}\"\n\ncardano-cli shelley node issue-op-cert \\\n    --kes-verification-key-file \"$POOL_PATH/$1.kes.vkey\" \\\n    --cold-signing-key-file \"$POOL_PATH/$1.node.skey\" \\\n    --operational-certificate-issue-counter \"$POOL_PATH/$1.node.counter\" \\\n    --kes-period \"$kesPeriod\" \\\n    --out-file \"$POOL_PATH/$1.node.cert\"\n\ncardano-cli shelley node key-gen-VRF \\\n    --verification-key-file \"$POOL_PATH/$1.vrf.vkey\" \\\n    --signing-key-file \"$POOL_PATH/$1.vrf.skey\"\n\n\nfor f in $POOL_PATH/*; do (cat \"${f}\"; echo; echo) >> \"$POOL_PATH/$1.pool.txt\"; done\nprintf \"$1 Pool\\n\\n\" | cat - \"$POOL_PATH/$1.pool.txt\" > \"$POOL_PATH/temp\" && mv \"$POOL_PATH/temp\" \"$POOL_PATH/$1.pool.txt\"\n\n\necho \"Start core node with the new keys of $1!\"\n\necho \"For Pool registration host your poolmeta.json now\"\necho \"Edit registerPool for adjusting Pledge, Cost, etc.\"\n"
  },
  {
    "path": "scripts/cardano-scripts/createWallet",
    "content": "#!/bin/bash\n\nWALLET_PATH=\"$HOME/priv/wallet/$1\"\nTMP=\"/opt/cardano/tmp\"\nmkdir -p \"$WALLET_PATH\"\n\ncardano-cli shelley query protocol-parameters \\\n    --mainnet \\\n    --out-file \"$TMP/params.json\" \\\n    --cardano-mode\n\ncardano-cli shelley address key-gen \\\n    --verification-key-file \"$WALLET_PATH/$1.payment.vkey\" \\\n    --signing-key-file \"$WALLET_PATH/$1.payment.skey\"\n\ncardano-cli shelley stake-address key-gen \\\n    --verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --signing-key-file \"$WALLET_PATH/$1.stake.skey\"\n\ncardano-cli shelley stake-address build \\\n    --staking-verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --out-file \"$WALLET_PATH/$1.stake.addr\" \\\n    --mainnet\n\ncardano-cli shelley address build \\\n    --payment-verification-key-file \"$WALLET_PATH/$1.payment.vkey\" \\\n    --staking-verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --out-file \"$WALLET_PATH/$1.payment.addr\" \\\n    --mainnet\n\nfor f in $WALLET_PATH/*; do (cat \"${f}\"; echo; echo) >> \"$WALLET_PATH/$1.wallet.txt\"; done\nprintf \"$1 Wallet\\n\\n\" | cat - \"$WALLET_PATH/$1.wallet.txt\" > \"$WALLET_PATH/temp\" && mv \"$WALLET_PATH/temp\" \"$WALLET_PATH/$1.wallet.txt\"\n\necho \"$1 Wallet created!\""
  },
  {
    "path": "scripts/cardano-scripts/decryptPool",
    "content": "#!/bin/bash\n\nTMP=\"/opt/cardano/tmp\"\nPOOL_PATH=\"$HOME/priv/pool/$1\"\n\nread -s -p \"Password: \" PASSWORD\necho\n\necho \"$PASSWORD\" | gpg --decrypt --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$POOL_PATH/$1.node.vkey\" \"$POOL_PATH/$1.node.vkey.gpg\" >/dev/null && rm -f \"$POOL_PATH/$1.node.vkey.gpg\"\necho \"$PASSWORD\" | gpg --decrypt --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$POOL_PATH/$1.node.skey\" \"$POOL_PATH/$1.node.skey.gpg\" >/dev/null && rm -f \"$POOL_PATH/$1.node.skey.gpg\"\necho \"$PASSWORD\" | gpg --decrypt --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$POOL_PATH/$1.node.counter\" \"$POOL_PATH/$1.node.counter.gpg\" >/dev/null && rm -f \"$POOL_PATH/$1.node.counter.gpg\"\n\n\nif [ -f \"$POOL_PATH/$1.node.skey\" ]; then\n   echo \"Cold keys of $1 decrypted!\"\nelse\n   echo \"Failed to decrypt cold keys of $1\"\nfi\n"
  },
  {
    "path": "scripts/cardano-scripts/decryptWallet",
    "content": "#!/bin/bash\n\nTMP=\"/opt/cardano/tmp\"\nWALLET_PATH=\"$HOME/priv/wallet/$1\"\n\nread -s -p \"Password: \" PASSWORD\necho\n\necho \"$PASSWORD\" | gpg --decrypt --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$WALLET_PATH/$1.payment.vkey\" \"$WALLET_PATH/$1.payment.vkey.gpg\" >/dev/null && rm -f \"$WALLET_PATH/$1.payment.vkey.gpg\"\necho \"$PASSWORD\" | gpg --decrypt --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$WALLET_PATH/$1.payment.skey\" \"$WALLET_PATH/$1.payment.skey.gpg\" >/dev/null && rm -f \"$WALLET_PATH/$1.payment.skey.gpg\"\necho \"$PASSWORD\" | gpg --decrypt --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$WALLET_PATH/$1.stake.vkey\" \"$WALLET_PATH/$1.stake.vkey.gpg\" >/dev/null && rm -f \"$WALLET_PATH/$1.stake.vkey.gpg\"\necho \"$PASSWORD\" | gpg --decrypt --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$WALLET_PATH/$1.stake.skey\" \"$WALLET_PATH/$1.stake.skey.gpg\" >/dev/null && rm -f \"$WALLET_PATH/$1.stake.skey.gpg\"\n\n\nif [ -f \"$WALLET_PATH/$1.payment.vkey\" ]; then\n   echo \"$1 Wallet decrypted!\"\nelse\n   echo \"Failed to decrypt $1 Wallet\"\nfi\n"
  },
  {
    "path": "scripts/cardano-scripts/encryptPool",
    "content": "#!/bin/bash\n\nTMP=\"/opt/cardano/tmp\"\nPOOL_PATH=\"$HOME/priv/pool/$1\"\n\nread -s -p \"Password: \" PASSWORD\necho\nread -s -p \"Confirm Password: \" CONFIRM_PASSWORD\necho\n\nif [ \"$PASSWORD\" != \"$CONFIRM_PASSWORD\" ]; then\n   echo \"Passwords do not match!\"\n   exit\nfi\n\n\necho \"$PASSWORD\" | gpg --symmetric --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$POOL_PATH/$1.node.vkey.gpg\" \"$POOL_PATH/$1.node.vkey\" >/dev/null && rm -f \"$POOL_PATH/$1.node.vkey\"\necho \"$PASSWORD\" | gpg --symmetric --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$POOL_PATH/$1.node.skey.gpg\" \"$POOL_PATH/$1.node.skey\" >/dev/null && rm -f \"$POOL_PATH/$1.node.skey\"\necho \"$PASSWORD\" | gpg --symmetric --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$POOL_PATH/$1.node.counter.gpg\" \"$POOL_PATH/$1.node.counter\" >/dev/null && rm -f \"$POOL_PATH/$1.node.counter\"\n\necho \"Cold keys of $1 encrypted!\"\n"
  },
  {
    "path": "scripts/cardano-scripts/encryptWallet",
    "content": "#!/bin/bash\n\nTMP=\"/opt/cardano/tmp\"\nWALLET_PATH=\"$HOME/priv/wallet/$1\"\n\nread -s -p \"Password: \" PASSWORD\necho\nread -s -p \"Confirm Password: \" CONFIRM_PASSWORD\necho\n\nif [ \"$PASSWORD\" != \"$CONFIRM_PASSWORD\" ]; then\n   echo \"Passwords do not match!\"\n   exit\nfi\n\n\necho \"$PASSWORD\" | gpg --symmetric --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$WALLET_PATH/$1.payment.vkey.gpg\" \"$WALLET_PATH/$1.payment.vkey\" >/dev/null && rm -f \"$WALLET_PATH/$1.payment.vkey\"\necho \"$PASSWORD\" | gpg --symmetric --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$WALLET_PATH/$1.payment.skey.gpg\" \"$WALLET_PATH/$1.payment.skey\" >/dev/null && rm -f \"$WALLET_PATH/$1.payment.skey\"\necho \"$PASSWORD\" | gpg --symmetric --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$WALLET_PATH/$1.stake.vkey.gpg\" \"$WALLET_PATH/$1.stake.vkey\" >/dev/null && rm -f \"$WALLET_PATH/$1.stake.vkey\"\necho \"$PASSWORD\" | gpg --symmetric --yes --batch --cipher-algo AES256 --passphrase-fd 0 --output \"$WALLET_PATH/$1.stake.skey.gpg\" \"$WALLET_PATH/$1.stake.skey\" >/dev/null && rm -f \"$WALLET_PATH/$1.stake.skey\"\n\necho \"$1 Wallet encrypted!\"\n"
  },
  {
    "path": "scripts/cardano-scripts/modifyPool",
    "content": "#!/bin/bash\n\n#Pledge in Lovelace\nPLEDGE=1000000000 # 1000 ADA\n#Pool cost in Lovelace\nCOST=340000000 # 340 ADA\n\nMARGIN=0.05 # 5%\n\nRELAY_PORT=3001\n\n# domain name of your relay, e.g relay.stakepool.com\nRELAY_DOMAIN=\"\"\n\n# URL link to meta.json, e.g \nMETA_URL=\"\"\n\nWALLET_PATH=\"$HOME/priv/wallet/$1\"\nPOOL_PATH=\"$HOME/priv/pool/$2\"\nTMP=\"/opt/cardano/tmp\"\n\n\n\nif [ -f \"$POOL_PATH/$1.node.skey.gpg\" ]; then\n   echo \"Cold keys of $2 are encrypted!\"\n   exit\nfi\n\nif [ -f \"$WALLET_PATH/$1.payment.skey.gpg\" ]; then\n   echo \"$1 Wallet is encrypted!\"\n   exit\nfi\n\n\n\ncardano-cli shelley query protocol-parameters \\\n    --mainnet \\\n    --out-file \"$TMP/params.json\" \\\n    --cardano-mode\n\n\ncardano-cli shelley stake-pool metadata-hash --pool-metadata-file \"$POOL_PATH/poolmeta.json\" > \"$POOL_PATH/poolmetaHash.txt\"\n\nminPoolCost=$(cat \"$TMP/params.json\" | jq -r .minPoolCost)\necho minPoolCost: \"${minPoolCost}\"\n\ncardano-cli shelley stake-pool registration-certificate \\\n    --cold-verification-key-file \"$POOL_PATH/$2.node.vkey\" \\\n    --vrf-verification-key-file \"$POOL_PATH/$2.vrf.vkey\" \\\n    --pool-pledge \"$PLEDGE\" \\\n    --pool-cost \"$COST\" \\\n    --pool-margin \"$MARGIN\" \\\n    --pool-reward-account-verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --pool-owner-stake-verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --mainnet \\\n    --single-host-pool-relay \"$RELAY_DOMAIN\" \\\n    --pool-relay-port $RELAY_PORT \\\n    --metadata-url \"$META_URL\" \\\n    --metadata-hash $(cat \"$POOL_PATH/poolmetaHash.txt\") \\\n    --out-file \"$POOL_PATH/$2.pool.cert\"\n\ncardano-cli shelley stake-address delegation-certificate \\\n    --staking-verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --cold-verification-key-file \"$POOL_PATH/$2.node.vkey\" \\\n    --out-file \"$WALLET_PATH/$1.deleg.cert\"\n\n\ncurrentSlot=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')\necho \"Current Slot: $currentSlot\"\n\ncardano-cli shelley query utxo \\\n    --address $(cat \"$WALLET_PATH/$1.payment.addr\") \\\n    --mainnet \\\n    --cardano-mode > \"$TMP/fullUtxo.out\"\n\ntail -n +3 \"$TMP/fullUtxo.out\" | sort -k3 -nr > \"$TMP/balance.out\"\n\ncat \"$TMP/balance.out\"\n\ntx_in=\"\"\ntotal_balance=0\nwhile read -r utxo; do\n    in_addr=$(awk '{ print $1 }' <<< \"${utxo}\")\n    idx=$(awk '{ print $2 }' <<< \"${utxo}\")\n    utxo_balance=$(awk '{ print $3 }' <<< \"${utxo}\")\n    total_balance=$((${total_balance}+${utxo_balance}))\n    echo TxHash: ${in_addr}#${idx}\n    echo ADA: ${utxo_balance}\n    tx_in=\"${tx_in} --tx-in ${in_addr}#${idx}\"\ndone < \"$TMP/balance.out\"\ntxcnt=$(cat \"$TMP/balance.out\" | wc -l)\necho \"Total ADA balance of $1 Wallet\": ${total_balance}\necho Number of UTXOs: ${txcnt}\n\n\npoolDeposit=$(cat \"$TMP/params.json\" | jq -r '.poolDeposit')\necho poolDeposit: \"$poolDeposit\"\n\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+$(( ${total_balance} - ${poolDeposit}))  \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee 0 \\\n    --certificate-file \"$POOL_PATH/$2.pool.cert\" \\\n    --certificate-file \"$WALLET_PATH/$1.deleg.cert\" \\\n    --out-file \"$TMP/tx.tmp\"\n\n\nfee=$(cardano-cli shelley transaction calculate-min-fee \\\n    --tx-body-file \"$TMP/tx.tmp\" \\\n    --tx-in-count ${txcnt} \\\n    --tx-out-count 1 \\\n    --mainnet \\\n    --witness-count 3 \\\n    --byron-witness-count 0 \\\n    --protocol-params-file \"$TMP/params.json\" | awk '{ print $1 }')\necho fee: $fee\n\n\ntxOut=$((${total_balance}-${fee}))\necho txOut: \"${txOut}\"\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+${txOut} \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee ${fee} \\\n    --certificate-file \"$POOL_PATH/$2.pool.cert\" \\\n    --certificate-file \"$WALLET_PATH/$1.deleg.cert\" \\\n    --out-file \"$TMP/tx.raw\"\n\ncardano-cli shelley transaction sign \\\n    --tx-body-file \"$TMP/tx.raw\" \\\n    --signing-key-file \"$WALLET_PATH/$1.payment.skey\" \\\n    --signing-key-file \"$POOL_PATH/$2.node.skey\" \\\n    --signing-key-file \"$WALLET_PATH/$1.stake.skey\" \\\n    --mainnet \\\n    --out-file \"$TMP/tx.signed\"\n\ncardano-cli shelley transaction submit \\\n    --tx-file \"$TMP/tx.signed\" \\\n    --mainnet \\\n    --cardano-mode\n\ncardano-cli shelley stake-pool id --verification-key-file \"$POOL_PATH/$2.node.vkey\" > \"$POOL_PATH/$2.id.txt\"\n\n\necho \"$2 modified with new Pledge: $PLEDGE, Cost: $COST, Margin: $MARGIN\"\n\n\n"
  },
  {
    "path": "scripts/cardano-scripts/registerPool",
    "content": "#!/bin/bash\n\n#Pledge in Lovelace\nPLEDGE=1000000000 # 1000 ADA\n#Pool cost in Lovelace\nCOST=340000000 # 340 ADA\n\nMARGIN=0.05 # 5%\n\nRELAY_PORT=3001\n\n# domain name of your relay, e.g relay.stakepool.com\nRELAY_DOMAIN=\"\"\n\n# URL link to meta.json, e.g \nMETA_URL=\"\"\n\n\n\n\nWALLET_PATH=\"$HOME/priv/wallet/$1\"\nPOOL_PATH=\"$HOME/priv/pool/$2\"\nTMP=\"/opt/cardano/tmp\"\n\n\necho \"Fetching poolmeta.json\"\nwget -P \"$POOL_PATH\" \"$META_URL\"\n\n\ncardano-cli shelley query protocol-parameters \\\n    --mainnet \\\n    --out-file \"$TMP/params.json\" \\\n    --cardano-mode\n\n\ncardano-cli shelley stake-pool metadata-hash --pool-metadata-file \"$POOL_PATH/poolmeta.json\" > \"$POOL_PATH/poolmetaHash.txt\"\n\nminPoolCost=$(cat \"$TMP/params.json\" | jq -r .minPoolCost)\necho minPoolCost: \"${minPoolCost}\"\n\ncardano-cli shelley stake-pool registration-certificate \\\n    --cold-verification-key-file \"$POOL_PATH/$2.node.vkey\" \\\n    --vrf-verification-key-file \"$POOL_PATH/$2.vrf.vkey\" \\\n    --pool-pledge \"$PLEDGE\" \\\n    --pool-cost \"$COST\" \\\n    --pool-margin \"$MARGIN\" \\\n    --pool-reward-account-verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --pool-owner-stake-verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --mainnet \\\n    --single-host-pool-relay \"$RELAY_DOMAIN\" \\\n    --pool-relay-port $RELAY_PORT \\\n    --metadata-url \"$META_URL\" \\\n    --metadata-hash $(cat \"$POOL_PATH/poolmetaHash.txt\") \\\n    --out-file \"$POOL_PATH/$2.pool.cert\"\n\ncardano-cli shelley stake-address delegation-certificate \\\n    --staking-verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --cold-verification-key-file \"$POOL_PATH/$2.node.vkey\" \\\n    --out-file \"$WALLET_PATH/$1.deleg.cert\"\n\n\ncurrentSlot=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')\necho \"Current Slot: $currentSlot\"\n\ncardano-cli shelley query utxo \\\n    --address $(cat \"$WALLET_PATH/$1.payment.addr\") \\\n    --mainnet \\\n    --cardano-mode > \"$TMP/fullUtxo.out\"\n\ntail -n +3 \"$TMP/fullUtxo.out\" | sort -k3 -nr > \"$TMP/balance.out\"\n\ncat \"$TMP/balance.out\"\n\ntx_in=\"\"\ntotal_balance=0\nwhile read -r utxo; do\n    in_addr=$(awk '{ print $1 }' <<< \"${utxo}\")\n    idx=$(awk '{ print $2 }' <<< \"${utxo}\")\n    utxo_balance=$(awk '{ print $3 }' <<< \"${utxo}\")\n    total_balance=$((${total_balance}+${utxo_balance}))\n    echo TxHash: ${in_addr}#${idx}\n    echo ADA: ${utxo_balance}\n    tx_in=\"${tx_in} --tx-in ${in_addr}#${idx}\"\ndone < \"$TMP/balance.out\"\ntxcnt=$(cat \"$TMP/balance.out\" | wc -l)\necho \"Total ADA balance of $1 Wallet\": ${total_balance}\necho Number of UTXOs: ${txcnt}\n\n\npoolDeposit=$(cat \"$TMP/params.json\" | jq -r '.poolDeposit')\necho poolDeposit: \"$poolDeposit\"\n\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+$(( ${total_balance} - ${poolDeposit}))  \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee 0 \\\n    --certificate-file \"$POOL_PATH/$2.pool.cert\" \\\n    --certificate-file \"$WALLET_PATH/$1.deleg.cert\" \\\n    --out-file \"$TMP/tx.tmp\"\n\n\nfee=$(cardano-cli shelley transaction calculate-min-fee \\\n    --tx-body-file \"$TMP/tx.tmp\" \\\n    --tx-in-count ${txcnt} \\\n    --tx-out-count 1 \\\n    --mainnet \\\n    --witness-count 3 \\\n    --byron-witness-count 0 \\\n    --protocol-params-file \"$TMP/params.json\" | awk '{ print $1 }')\necho fee: $fee\n\n\ntxOut=$((${total_balance}-${poolDeposit}-${fee}))\necho txOut: \"${txOut}\"\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+${txOut} \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee ${fee} \\\n    --certificate-file \"$POOL_PATH/$2.pool.cert\" \\\n    --certificate-file \"$WALLET_PATH/$1.deleg.cert\" \\\n    --out-file \"$TMP/tx.raw\"\n\ncardano-cli shelley transaction sign \\\n    --tx-body-file \"$TMP/tx.raw\" \\\n    --signing-key-file \"$WALLET_PATH/$1.payment.skey\" \\\n    --signing-key-file \"$POOL_PATH/$2.node.skey\" \\\n    --signing-key-file \"$WALLET_PATH/$1.stake.skey\" \\\n    --mainnet \\\n    --out-file \"$TMP/tx.signed\"\n\ncardano-cli shelley transaction submit \\\n    --tx-file \"$TMP/tx.signed\" \\\n    --mainnet \\\n    --cardano-mode\n\ncardano-cli shelley stake-pool id --verification-key-file \"$POOL_PATH/$2.node.vkey\" > \"$POOL_PATH/$2.id.txt\"\n\n\necho \"$2 registered with Pledge: $PLEDGE, Cost: $COST, Margin: $MARGIN\"\n\n\n"
  },
  {
    "path": "scripts/cardano-scripts/registerWallet",
    "content": "#!/bin/bash\n\nWALLET_PATH=\"$HOME/priv/wallet/$1\"\nTMP=\"/opt/cardano/tmp\"\n\ncardano-cli shelley query protocol-parameters \\\n    --mainnet \\\n    --out-file \"$TMP/params.json\" \\\n    --cardano-mode\n\ncardano-cli shelley stake-address registration-certificate \\\n    --staking-verification-key-file \"$WALLET_PATH/$1.stake.vkey\" \\\n    --out-file \"$WALLET_PATH/$1.stake.cert\"\n\n\ncurrentSlot=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')\necho \"Current Slot: $currentSlot\"\n\n\ncardano-cli shelley query utxo \\\n    --address $(cat \"$WALLET_PATH/$1.payment.addr\") \\\n    --mainnet \\\n    --cardano-mode > \"$TMP/fullUtxo.out\"\n\ntail -n +3 \"$TMP/fullUtxo.out\" | sort -k3 -nr > \"$TMP/balance.out\"\n\ncat \"$TMP/balance.out\"\n\ntx_in=\"\"\ntotal_balance=0\nwhile read -r utxo; do\n    in_addr=$(awk '{ print $1 }' <<< \"${utxo}\")\n    idx=$(awk '{ print $2 }' <<< \"${utxo}\")\n    utxo_balance=$(awk '{ print $3 }' <<< \"${utxo}\")\n    total_balance=$((${total_balance}+${utxo_balance}))\n    echo TxHash: ${in_addr}#${idx}\n    echo ADA: ${utxo_balance}\n    tx_in=\"${tx_in} --tx-in ${in_addr}#${idx}\"\ndone < \"$TMP/balance.out\"\ntxcnt=$(cat \"$TMP/balance.out\" | wc -l)\necho \"Total ADA balance of $1 Wallet\": ${total_balance}\necho Number of UTXOs: ${txcnt}\n\n\nkeyDeposit=$(cat \"$TMP/params.json\" | jq -r '.keyDeposit')\necho \"keyDeposit: $keyDeposit\"\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+0 \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee 0 \\\n    --out-file \"$TMP/tx.tmp\" \\\n    --certificate \"$WALLET_PATH/$1.stake.cert\"\n\n\nfee=$(cardano-cli shelley transaction calculate-min-fee \\\n    --tx-body-file \"$TMP/tx.tmp\" \\\n    --tx-in-count ${txcnt} \\\n    --tx-out-count 1 \\\n    --mainnet \\\n    --witness-count 2 \\\n    --byron-witness-count 0 \\\n    --protocol-params-file \"$TMP/params.json\" | awk '{ print $1 }')\necho fee: \"$fee\"\n\n\ntxOut=$((${total_balance}-${keyDeposit}-${fee}))\necho \"Change Output: ${txOut}\"\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+${txOut} \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee ${fee} \\\n    --certificate-file \"$WALLET_PATH/$1.stake.cert\" \\\n    --out-file \"$TMP/tx.raw\"\n\ncardano-cli shelley transaction sign \\\n    --tx-body-file \"$TMP/tx.raw\" \\\n    --signing-key-file \"$WALLET_PATH/$1.payment.skey\" \\\n    --signing-key-file \"$WALLET_PATH/$1.stake.skey\" \\\n    --mainnet \\\n    --out-file \"$TMP/tx.signed\"\n\ncardano-cli shelley transaction submit \\\n    --tx-file \"$TMP/tx.signed\" \\\n    --mainnet \\\n    --cardano-mode\n\necho \"Registered $1 Stake Address!\"\n\n\n"
  },
  {
    "path": "scripts/cardano-scripts/send",
    "content": "#!/bin/bash\n\nWALLET_PATH=\"$HOME/priv/wallet/$1\"\nTMP=\"/opt/cardano/tmp\"\n\n\nif [ -f \"$WALLET_PATH/$1.payment.skey.gpg\" ]; then\n   echo \"$1 Wallet is encrypted!\"\n   exit\nfi\n\n\ncardano-cli shelley query protocol-parameters \\\n    --mainnet \\\n    --out-file \"$TMP/params.json\" \\\n    --cardano-mode\n\ncurrentSlot=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')\necho \"Current Slot: $currentSlot\"\n\n\ncardano-cli shelley query utxo \\\n    --address $(cat \"$WALLET_PATH/$1.payment.addr\") \\\n    --mainnet \\\n    --cardano-mode > \"$TMP/fullUtxo.out\"\n\ntail -n +3 \"$TMP/fullUtxo.out\" | sort -k3 -nr > \"$TMP/balance.out\"\n\ncat \"$TMP/balance.out\"\n\ntx_in=\"\"\ntotal_balance=0\nwhile read -r utxo; do\n    in_addr=$(awk '{ print $1 }' <<< \"${utxo}\")\n    idx=$(awk '{ print $2 }' <<< \"${utxo}\")\n    utxo_balance=$(awk '{ print $3 }' <<< \"${utxo}\")\n    total_balance=$((${total_balance}+${utxo_balance}))\n    echo TxHash: ${in_addr}#${idx}\n    echo ADA: ${utxo_balance}\n    tx_in=\"${tx_in} --tx-in ${in_addr}#${idx}\"\ndone < \"$TMP/balance.out\"\ntxcnt=$(cat \"$TMP/balance.out\" | wc -l)\necho \"Total ADA balance of $1 Wallet\": ${total_balance}\necho Number of UTXOs: ${txcnt}\n\n\nif [[ \"$2\" != \"all\" ]]; then\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+0 \\\n    --tx-out \"$3+0\" \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee 0 \\\n    --out-file \"$TMP/tx.tmp\" \\\n\n\nfee=$(cardano-cli shelley transaction calculate-min-fee \\\n    --tx-body-file \"$TMP/tx.tmp\" \\\n    --tx-in-count ${txcnt} \\\n    --tx-out-count 2 \\\n    --mainnet \\\n    --witness-count 1 \\\n    --byron-witness-count 0 \\\n    --protocol-params-file \"$TMP/params.json\" | awk '{ print $1 }')\necho fee: \"$fee\"\n\n\ntxOut=$((${total_balance}-$2-${fee}))\necho \"Change Output: ${txOut}\"\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+${txOut} \\\n    --tx-out \"$3+$2\" \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee ${fee} \\\n    --out-file \"$TMP/tx.raw\"\n\ncardano-cli shelley transaction sign \\\n    --tx-body-file \"$TMP/tx.raw\" \\\n    --signing-key-file \"$WALLET_PATH/$1.payment.skey\" \\\n    --mainnet \\\n    --out-file \"$TMP/tx.signed\"\n\ncardano-cli shelley transaction submit \\\n    --tx-file \"$TMP/tx.signed\" \\\n    --mainnet \\\n    --cardano-mode\n\necho \"Sent $2 Lovelace to $3!\"\n\nelse\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out \"$3+0\" \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee 0 \\\n    --out-file \"$TMP/tx.tmp\" \\\n\n\nfee=$(cardano-cli shelley transaction calculate-min-fee \\\n    --tx-body-file \"$TMP/tx.tmp\" \\\n    --tx-in-count ${txcnt} \\\n    --tx-out-count 1 \\\n    --mainnet \\\n    --witness-count 1 \\\n    --byron-witness-count 0 \\\n    --protocol-params-file \"$TMP/params.json\" | awk '{ print $1 }')\necho fee: \"$fee\"\n\n\ntxOut=$((${total_balance}-${fee}))\necho \"Change Output: ${txOut}\"\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out \"$3+$txOut\" \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee ${fee} \\\n    --out-file \"$TMP/tx.raw\"\n\ncardano-cli shelley transaction sign \\\n    --tx-body-file \"$TMP/tx.raw\" \\\n    --signing-key-file \"$WALLET_PATH/$1.payment.skey\" \\\n    --mainnet \\\n    --out-file \"$TMP/tx.signed\"\n\ncardano-cli shelley transaction submit \\\n    --tx-file \"$TMP/tx.signed\" \\\n    --mainnet \\\n    --cardano-mode\n\n\necho \"Sent $txOut Lovelace to $3\"\n\nfi\n"
  },
  {
    "path": "scripts/cardano-scripts/updateKES",
    "content": "#!/bin/bash\n\nTMP=\"/opt/cardano/tmp\"\nPOOL_PATH=\"$HOME/priv/pool/$1\"\n\n\nif [ -f \"$POOL_PATH/$1.node.skey.gpg\" ]; then\n   echo \"Cold keys of $1 are encrypted!\"\n   exit\nfi\n\n\nslotNo=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')\nslotsPerKESPeriod=$(cat $RELAY/files/mainnet-shelley-genesis.json | jq -r '.slotsPerKESPeriod')\nkesPeriod=$((${slotNo} / ${slotsPerKESPeriod}))\n\ncardano-cli shelley node issue-op-cert \\\n    --kes-verification-key-file \"$POOL_PATH/$1.kes.vkey\" \\\n    --cold-signing-key-file \"$POOL_PATH/$1.node.skey\" \\\n    --operational-certificate-issue-counter \"$POOL_PATH/$1.node.counter\" \\\n    --kes-period ${kesPeriod} \\\n    --out-file \"$POOL_PATH/$1.node.cert\"\n\necho \"Restart your core node with the new keys!\"\n"
  },
  {
    "path": "scripts/cardano-scripts/wallet",
    "content": "#!/bin/bash\n\nWALLET_PATH=\"$HOME/priv/wallet/$1\"\nTMP=\"/opt/cardano/tmp\"\n\n\ncardano-cli shelley query protocol-parameters \\\n    --mainnet \\\n    --out-file \"$TMP/params.json\" \\\n    --cardano-mode\n\n\ncardano-cli shelley query utxo \\\n    --address $(cat \"$WALLET_PATH/$1.payment.addr\") \\\n    --mainnet \\\n    --cardano-mode > \"$TMP/fullUtxo.out\"\n\ntail -n +3 \"$TMP/fullUtxo.out\" | sort -k3 -nr > \"$TMP/balance.out\"\n\n\ntx_in=\"\"\ntotal_balance=0\nwhile read -r utxo; do\n    in_addr=$(awk '{ print $1 }' <<< \"${utxo}\")\n    idx=$(awk '{ print $2 }' <<< \"${utxo}\")\n    utxo_balance=$(awk '{ print $3 }' <<< \"${utxo}\")\n    total_balance=$((${total_balance}+${utxo_balance}))\n    tx_in=\"${tx_in} --tx-in ${in_addr}#${idx}\"\ndone < \"$TMP/balance.out\"\ntxcnt=$(cat \"$TMP/balance.out\" | wc -l)\nBALANCE=`echo \"scale=6; ${total_balance}*10^-6\" | bc -l`\nSTAKE_ADDR=$(cat \"$WALLET_PATH/$1.stake.addr\")\nREWARD=$(cardano-cli shelley query stake-address-info --address \"$STAKE_ADDR\" --mainnet | jq -r '.[]' | jq -r '.rewardAccountBalance')\nREWARD=`echo \"scale=6; ${REWARD}*10^-6\" | bc -l`\n\nSTATUS=\"\"\nif [ -f \"$WALLET_PATH/$1.payment.skey\" ]; then\n    STATUS=\"decrypted\"\nelse \n    STATUS=\"encrypted\"\nfi\n\necho\necho \"$1 Wallet   ($STATUS)\"\necho\necho \"Address: $(cat $WALLET_PATH/$1.payment.addr)\"\necho \"Balance: $BALANCE ADA\"\necho \"Reward: $REWARD ADA\"\necho\n"
  },
  {
    "path": "scripts/cardano-scripts/withdraw",
    "content": "#!/bin/bash\n\nWALLET_PATH=\"$HOME/priv/wallet/$1\"\nTMP=\"/opt/cardano/tmp\"\n\n\nif [ -f \"$WALLET_PATH/$1.payment.skey.gpg\" ]; then\n   echo \"$1 Wallet is encrypted!\"\n   exit\nfi\n\n\ncardano-cli shelley query protocol-parameters \\\n    --mainnet \\\n    --out-file \"$TMP/params.json\" \\\n    --cardano-mode\n\ncurrentSlot=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')\necho \"Current Slot: $currentSlot\"\n\n\ncardano-cli shelley query utxo \\\n    --address $(cat \"$WALLET_PATH/$1.payment.addr\") \\\n    --mainnet \\\n    --cardano-mode > \"$TMP/fullUtxo.out\"\n\ntail -n +3 \"$TMP/fullUtxo.out\" | sort -k3 -nr > \"$TMP/balance.out\"\n\ncat \"$TMP/balance.out\"\n\ntx_in=\"\"\ntotal_balance=0\nwhile read -r utxo; do\n    in_addr=$(awk '{ print $1 }' <<< \"${utxo}\")\n    idx=$(awk '{ print $2 }' <<< \"${utxo}\")\n    utxo_balance=$(awk '{ print $3 }' <<< \"${utxo}\")\n    total_balance=$((${total_balance}+${utxo_balance}))\n    echo TxHash: ${in_addr}#${idx}\n    echo ADA: ${utxo_balance}\n    tx_in=\"${tx_in} --tx-in ${in_addr}#${idx}\"\ndone < \"$TMP/balance.out\"\ntxcnt=$(cat \"$TMP/balance.out\" | wc -l)\necho \"Total ADA balance of $1 Wallet\": ${total_balance}\necho Number of UTXOs: ${txcnt}\n\nSTAKE_ADDR=$(cat \"$WALLET_PATH/$1.stake.addr\")\nREWARD=$(cardano-cli shelley query stake-address-info --address \"$STAKE_ADDR\" --mainnet | jq -r '.[]' | jq -r '.rewardAccountBalance')\n\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+0 \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee 0 \\\n    --out-file \"$TMP/tx.tmp\" \\\n\n\nfee=$(cardano-cli shelley transaction calculate-min-fee \\\n    --tx-body-file \"$TMP/tx.tmp\" \\\n    --tx-in-count ${txcnt} \\\n    --tx-out-count 1 \\\n    --mainnet \\\n    --witness-count 2 \\\n    --byron-witness-count 0 \\\n    --protocol-params-file \"$TMP/params.json\" | awk '{ print $1 }')\necho fee: \"$fee\"\n\n\ntxOut=$((${total_balance}-${fee}+${REWARD}))\necho \"Change Output: ${txOut}\"\n\ncardano-cli shelley transaction build-raw \\\n    ${tx_in} \\\n    --tx-out $(cat \"$WALLET_PATH/$1.payment.addr\")+${txOut} \\\n    --ttl $(( ${currentSlot} + 10000)) \\\n    --fee ${fee} \\\n    --withdrawal \"${STAKE_ADDR}+${REWARD}\" \\\n    --out-file \"$TMP/tx.raw\"\n\ncardano-cli shelley transaction sign \\\n    --tx-body-file \"$TMP/tx.raw\" \\\n    --signing-key-file \"$WALLET_PATH/$1.payment.skey\" \\\n    --signing-key-file \"$WALLET_PATH/$1.stake.skey\" \\\n    --mainnet \\\n    --out-file \"$TMP/tx.signed\"\n\ncardano-cli shelley transaction submit \\\n    --tx-file \"$TMP/tx.signed\" \\\n    --mainnet \\\n    --cardano-mode\n\necho \"Withdrawn $REWARD Lovelace to $1 Wallet\"\n\n\n"
  },
  {
    "path": "scripts/fullGuide/999_decompress_rpi_kernel",
    "content": "DPkg::Post-Invoke {\"/bin/bash /boot/firmware/auto_decompress_kernel\"; };"
  },
  {
    "path": "scripts/fullGuide/auto_decompress_kernel",
    "content": "#!/bin/bash -e\n\n#Set Variables\nBTPATH=/boot/firmware\nCKPATH=$BTPATH/vmlinuz\nDKPATH=$BTPATH/vmlinux\n\n#Check if compression needs to be done.\nif [ -e $BTPATH/check.md5 ]; then\n\tif md5sum --status --ignore-missing -c $BTPATH/check.md5; then\n\techo -e \"\\e[32mFiles have not changed, Decompression not needed\\e[0m\"\n\texit 0\n\telse echo -e \"\\e[31mHash failed, kernel will be compressed\\e[0m\"\n\tfi\nfi\n\n#Backup the old decompressed kernel\nmv $DKPATH $DKPATH.bak\n\nif [ ! $? == 0 ]; then\n\techo -e \"\\e[31mDECOMPRESSED KERNEL BACKUP FAILED!\\e[0m\"\n\texit 1\nelse \techo -e \"\\e[32mDecompressed kernel backup was successful\\e[0m\"\nfi\n\n#Decompress the new kernel\necho \"Decompressing kernel: \"$CKPATH\"..............\"\n\nzcat $CKPATH > $DKPATH\n\nif [ ! $? == 0 ]; then\n\techo -e \"\\e[31mKERNEL FAILED TO DECOMPRESS!\\e[0m\"\n\texit 1\nelse\n\techo -e \"\\e[32mKernel Decompressed Succesfully\\e[0m\"\nfi\n\n#Hash the new kernel for checking\nmd5sum $CKPATH $DKPATH > $BTPATH/check.md5\n\nif [ ! $? == 0 ]; then\n\techo -e \"\\e[31mMD5 GENERATION FAILED!\\e[0m\"\n\telse echo -e \"\\e[32mMD5 generated Succesfully\\e[0m\"\nfi\n\n#Exit\nexit 0"
  },
  {
    "path": "scripts/fullGuide/installCardano.sh",
    "content": "#!/bin/bash\nset -e\n\necho \"Cloning Cardano repository\"\necho\ngit clone https://github.com/input-output-hk/cardano-node.git ~/cardano-node\ncd ~/cardano-node\necho -e \"package cardano-crypto-praos\\n  flags: -external-libsodium-vrf\" > cabal.project.local\ngit fetch --all --tags\necho \"Checking out version 1.19.1\"\ngit checkout tags/1.19.1\necho \"Building node, this takes a while...\"\ncabal build all\ncp -p ~/cardano-node/dist-newstyle/build/aarch64-linux/ghc-8.6.5/cardano-node-1.19.1/x/cardano-node/build/cardano-node/cardano-node ~/.local/bin/\ncp -p ~/cardano-node/dist-newstyle/build/aarch64-linux/ghc-8.6.5/cardano-cli-1.19.1/x/cardano-cli/build/cardano-cli/cardano-cli ~/.local/bin/\ncd\necho \"Done!\"\n"
  },
  {
    "path": "scripts/fullGuide/start.sh",
    "content": "#!/bin/bash\nset -e\n\n# This script installs all necessary dependencies to build the the cardano-node and cardano-cli binaries\n\necho \"Updating Ubuntu\"\necho\nsudo apt-get update\nsudo apt-get upgrade\necho\necho \"Installing dependencies\"\necho\nsudo apt-get install libsodium-dev build-essential pkg-config libffi-dev libgmp-dev libssl-dev libtinfo-dev libsystemd-dev zlib1g-dev make g++ tmux git jq wget libncursesw5 llvm -y\necho\necho \"Installing Haskell platform\"\necho\nsudo apt-get install -y haskell-platform\nwget https://github.com/alessandrokonrad/Pi-Pool/raw/master/aarch64/cabal3.2/cabal\nchmod +x cabal\nmkdir -p ~/.local/bin\nmv cabal ~/.local/bin\nsudo rm /usr/bin/cabal\necho 'export PATH=\"~/.local/bin:$PATH\"' >> .bashrc\nsource ~/.bashrc\necho\necho \"Done!\"\n"
  },
  {
    "path": "scripts/nodes/show-nodes",
    "content": "#!/bin/bash\n\ntmux a -t cardano\n"
  },
  {
    "path": "scripts/nodes/start-nodes",
    "content": "#!/bin/bash\n\ntmux new -s cardano -d\n\n#creating windows\ntmux split-window -h -t cardano\ntmux select-pane -t 0\n\ntmux split-window -v -t cardano\ntmux select-pane -t 2\ntmux split-window -v -t cardano\n\n#core node\ntmux select-pane -t 0\ntmux send-keys \"cardano-node run --topology <path to topology> --database-path <path to db> --socket-path <path to socket> --host-addr <ip> --port <port> --config <path to config> --shelley-kes-key <path to KES skey> --shelley-vrf-key <path to VRF skey> --shelley-operational-certificate <path to node cert>\" C-m\n\n#system info\ntmux select-pane -t 1\ntmux send-keys 'neofetch' C-m\n\n#relay node\ntmux select-pane -t 2\ntmux send-keys \"cardano-node run --topology <path to topology> --database-path <path to db> --socket-path <path to socket> --host-addr <ip> --port <port> --config <path to config>\" C-m\n\n#system performance\ntmux select-pane -t 3\ntmux send-keys 'htop' C-m\n\n\ntmux a -t cardano\n"
  },
  {
    "path": "scripts/nodes/stop-nodes",
    "content": "#!/bin/bash\n\ntmux kill-session -t cardano\n"
  }
]