[
  {
    "path": "ChangeLogArchive.md",
    "content": "# Ethereum Staking Guides - Change Log Archive#\n\n## Mainnet Staking Guides ##\n\n| Guide <img width=150/> | Change Log *(dd-mm-yy)* <img width=450/> |\n| :--------- | :---------- |\n| [Ubuntu/Lighthouse](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-lighthouse-773f5d982e03) | *12-11-23* - Updated Nethermind service config to specify new binary name. <br> *12-11-23* - Fixed various broken links and updated all clients to latest version. <br> *20-05-23* - Added [link](https://validator-queue-monitoring.vercel.app/) to validator queue. <br> *09-04-23* - Updated all clients to latest version. <br> *09-04-23* - Added `--db.engine pebble` flag for Geth. <br> *09-04-23* - Added instructions for `--eth1_withdrawal_address` for new and existing mnemonic. <br> *21-03-23* - Updated Lighthouse release to 3.5.1. <br> *21-03-23* - Updated Requirements to 16GB RAM minimum. <br> *21-03-23* - Updated Besu release to 23.1.1. <br> *21-03-23* - Updated `JAVA_OPTS=-Xmx3g` to `-Xmx5g` on Besu client config. <br> *10-02-23* - Removed incorrectly placed `=` sign in flag description. See [here](https://github.com/SomerEsat/ethereum-staking-guides/issues/8) for details. <br> *19-11-22* - Added `TimeoutStopSec=600` to Geth config. See [here](https://github.com/SomerEsat/ethereum-staking-guides/issues/6) for details. <br> *14-11-22* - Added required flag `--externalcl` to Erigon config. <br> *18-10-22* - Replaced Infura with [Checkpoint Sync Endpoints](https://eth-clients.github.io/checkpoint-sync-endpoints/). <br> *08-10-22* - Added `--prune-payloads` to Lighthouse service config. <br> *08-10-22* - Added `--logfile-max-number` & `--logfile-max-size` to Lighthouse service config. <br> *08-10-22* - Added `--Xplugin-rocksdb-high-spec-enabled` to Besu service config. <br> *08-10-22* - Added graffiti max 32 char limit note. <br> *08-10-22* - Removed section on merge. <br> *08-10-22* - Updated Besu, Erigon, Nethermind client versions. <br> *17-09-22* - Updated Erigon release to 2022.09.02. <br> *17-09-22* - Updated Geth release to 1.10.25. <br> *17-09-22* - Updated Nethermind release to 1.14.2. <br> *11-09-22* - Updated Besu service config to use 4GB RAM (-Xmx4g). <br> *08-09-22* - Updated Besu release to 22.7.2. <br> *08-09-22* - Updated Nethermind release to 1.14.1. <br> *06-09-22* - Updated Erigon release to 2022.09.01. <br> *01-09-22* - Updated Lighthouse release to 3.1.0.<br> *28-08-22* - Updated Erigon release to 2022-08-03-Alpha. <br> *27-08-22* - Added missing `chown` step. <br> *24-08-22* - Updated Geth release to 1.10.23. <br> *24-08-22* - Added link to the [supplementary guide](https://someresat.medium.com/supplementary-guide-to-staking-on-ethereum-for-existing-stakers-57493678a460). <br> *23-08-22* - Added \"A Note on the Merge\" section. <br> *22-08-22* - Merge-Ready version published. <br> *26-11-20* - Beacon Chain Genesis version published. |\n| [Ubuntu/Lodestar](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-lodestar-193a2553a161) | <br> *12-11-23* - Updated Nethermind service config to specify new binary name. <br> *12-11-23* - Fixed various broken links and updated all clients to latest version. <br> *20-05-23* - Added [link](https://validator-queue-monitoring.vercel.app/) to validator queue. <br> *09-04-23* - Updated all clients to latest version. <br> *09-04-23* - Added `--db.engine pebble` flag for Geth. <br> *09-04-23* - Added instructions for `--eth1_withdrawal_address` for new and existing mnemonic. <br> *04-04-23* - Updated NodeJS version to 18.15 (LTS). Added `--check-files` flag to yarn install. <br> *21-03-23* - Updated Requirements to 16GB RAM minimum. <br> *21-03-23* - Updated Besu release to 23.1.1. <br> *21-03-23* - Updated `JAVA_OPTS=-Xmx3g` to `-Xmx5g` on Besu client config. <br> *19-11-22* - Added `TimeoutStopSec=600` to Geth config. See [here](https://github.com/SomerEsat/ethereum-staking-guides/issues/6) for details. <br> *14-11-22* - Added required flag `--externalcl` to Erigon config. <br> *18-10-22* - Replaced Infura with [Checkpoint Sync Endpoints](https://eth-clients.github.io/checkpoint-sync-endpoints/). <br> *08-10-22* - Added `--Xplugin-rocksdb-high-spec-enabled` to Besu service config. <br> *08-10-22* - Added graffiti max 32 char limit note. <br> *08-10-22* - Removed section on merge. <br> *08-10-22* - Updated Besu, Erigon, Nethermind client versions. <br> *17-09-22* - Updated Erigon release to 2022.09.02. <br> *17-09-22* - Updated Geth release to 1.10.25. <br> *17-09-22* - Updated Nethermind release to 1.14.2. <br> *11-09-22* - Updated Besu service config to use 4GB RAM (-Xmx4g). <br> *08-09-22* - Updated Nimbus release to 22.9.0. <br> *08-09-22* - Updated Besu release to 22.7.2. <br> *08-09-22* - Updated Nethermind release to 1.14.1. <br> *06-09-22* - Updated Erigon release to 2022.09.01. <br> *01-09-22* - Updated Nimbus release to 22.8.2. <br> *30-08-22* - Updated Nimbus release to 22.8.1. <br> *28-08-22* - Updated Erigon release to 2022-08-03-Alpha. <br> *24-08-22* - Updated Geth release to 1.10.23. <br> *24-08-22* - Added link to the [supplementary guide](https://someresat.medium.com/supplementary-guide-to-staking-on-ethereum-for-existing-stakers-57493678a460). <br> *23-08-22* - Added \"A Note on the Merge\" section. <br> *22-08-22* - Merge-Ready version published. <br> *26-11-20* - Beacon Chain Genesis version published. |\n| [Ubuntu/Nimbus](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-nimbus-31f56657ea8f) | <br> *12-11-23* - Updated Nethermind service config to specify new binary name. <br> *12-11-23* - Fixed various broken links and updated all clients to latest version. <br> *20-05-23* - Added [link](https://validator-queue-monitoring.vercel.app/) to validator queue. <br> *09-04-23* - Updated all clients to latest version. <br> *09-04-23* - Added `--db.engine pebble` flag for Geth. <br> *09-04-23* - Added instructions for `--eth1_withdrawal_address` for new and existing mnemonic. <br> *21-03-23* - Updated Requirements to 16GB RAM minimum. <br> *21-03-23* - Updated Besu release to 23.1.1. <br> *21-03-23* - Updated `JAVA_OPTS=-Xmx3g` to `-Xmx5g` on Besu client config. <br> *19-11-22* - Added `TimeoutStopSec=600` to Geth config. See [here](https://github.com/SomerEsat/ethereum-staking-guides/issues/6) for details. <br> *14-11-22* - Added required flag `--externalcl` to Erigon config. <br> *18-10-22* - Updated Nimbus logo and release to 22.10.1. <br> *18-10-22* - Replaced Infura with [Checkpoint Sync Endpoints](https://eth-clients.github.io/checkpoint-sync-endpoints/). <br> *08-10-22* - Added `--Xplugin-rocksdb-high-spec-enabled` to Besu service config. <br> *08-10-22* - Added graffiti max 32 char limit note. <br> *08-10-22* - Removed section on merge. <br> *08-10-22* - Updated Besu, Erigon, Nethermind client versions. <br> *17-09-22* - Updated Erigon release to 2022.09.02. <br> *17-09-22* - Updated Geth release to 1.10.25. <br> *17-09-22* - Updated Nethermind release to 1.14.2. <br> *11-09-22* - Updated Besu service config to use 4GB RAM (-Xmx4g). <br> *08-09-22* - Updated Nimbus release to 22.9.0. <br> *08-09-22* - Updated Besu release to 22.7.2. <br> *08-09-22* - Updated Nethermind release to 1.14.1. <br> *06-09-22* - Updated Erigon release to 2022.09.01. <br> *01-09-22* - Updated Nimbus release to 22.8.2. <br> *30-08-22* - Updated Nimbus release to 22.8.1. <br> *28-08-22* - Updated Erigon release to 2022-08-03-Alpha. <br> *24-08-22* - Updated Geth release to 1.10.23. <br> *24-08-22* - Added link to the [supplementary guide](https://someresat.medium.com/supplementary-guide-to-staking-on-ethereum-for-existing-stakers-57493678a460). <br> *23-08-22* - Added \"A Note on the Merge\" section. <br> *22-08-22* - Merge-Ready version published. <br> *26-11-20* - Beacon Chain Genesis version published. |\n| [Ubuntu/Prysm](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-prysm-581fb1969460) | <br> *12-11-23* - Updated Nethermind service config to specify new binary name. <br> *12-11-23* - Fixed various broken links and updated all clients to latest version. <br> *20-05-23* - Added [link](https://validator-queue-monitoring.vercel.app/) to validator queue. <br> *09-04-23* - Updated all clients to latest version. <br> *09-04-23* - Added `--db.engine pebble` flag for Geth. <br> *09-04-23* - Added instructions for `--eth1_withdrawal_address` for new and existing mnemonic. <br> *21-03-23* - Updated Requirements to 16GB RAM minimum. <br> *21-03-23* - Updated Besu release to 23.1.1. <br> *21-03-23* - Updated `JAVA_OPTS=-Xmx3g` to `-Xmx5g` on Besu client config. <br> *19-11-22* - Added `TimeoutStopSec=600` to Geth config. See [here](https://github.com/SomerEsat/ethereum-staking-guides/issues/6) for details. <br> *14-11-22* - Added required flag `--externalcl` to Erigon config. <br> *18-10-22* - Replaced Infura with [Checkpoint Sync Endpoints](https://eth-clients.github.io/checkpoint-sync-endpoints/). <br> *08-10-22* - Added `--Xplugin-rocksdb-high-spec-enabled` to Besu service config. <br> *08-10-22* - Added graffiti max 32 char limit note. <br> *08-10-22* - Removed section on merge. <br> *08-10-22* - Updated Besu, Erigon, Nethermind client versions. <br> *17-09-22* - Updated Erigon release to 2022.09.02. <br> *17-09-22* - Updated Geth release to 1.10.25. <br> *17-09-22* - Updated Nethermind release to 1.14.2. <br> *11-09-22* - Updated Besu service config to use 4GB RAM (-Xmx4g). <br> *08-09-22* - Updated Besu release to 22.7.2. <br> *08-09-22* - Updated Nethermind release to 1.14.1. <br> *06-09-22* - Updated Erigon release to 2022.09.01. <br> *05-09-22* - Updated Prysm release to 3.1.0. <br> *28-08-22* - Updated Erigon release to 2022-08-03-Alpha. <br> *27-08-22* - Added missing `chown` step. <br> 26-08-22 - Added `suggested-fee-recipient` to validator config. <br> *24-08-22* - Updated Geth release to 1.10.23. <br> *24-08-22* - Added link to the [supplementary guide](https://someresat.medium.com/supplementary-guide-to-staking-on-ethereum-for-existing-stakers-57493678a460). <br> *23-08-22* - Replaced `--http-web3provider` with `--execution-endpoint`. <br> *23-08-22* - Added \"A Note on the Merge\" section. <br> *22-08-22* - Merge-Ready version published. <br> *27-11-20* - Beacon Chain Genesis version published. |\n| [Ubuntu/Teku](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-teku-f09ecd9ef2ee) | <br> *12-11-23* - Updated Nethermind service config to specify new binary name. <br> *12-11-23* - Fixed various broken links and updated all clients to latest version. <br> *18-07-23* - Updated Teku client prerequisite to Java 17 for install and update. <br> *20-05-23* - Added [link](https://validator-queue-monitoring.vercel.app/) to validator queue. <br> *09-04-23* - Updated all clients to latest version. <br> *09-04-23* - Added `--db.engine pebble` flag for Geth. <br> *09-04-23* - Added instructions for `--eth1_withdrawal_address` for new and existing mnemonic. <br> *21-03-23* - Updated Requirements to 16GB RAM minimum. <br> *21-03-23* - Updated Besu release to 23.1.1. <br> *21-03-23* - Updated `JAVA_OPTS=-Xmx3g` to `-Xmx5g` on Besu client config. <br> *20-03-23* - Updated `JAVA_OPTS=-Xmx3g` to `-Xmx5g` on Teku client config at request of Teku Team. <br> *19-11-22* - Added `TimeoutStopSec=600` to Geth config. See [here](https://github.com/SomerEsat/ethereum-staking-guides/issues/6) for details. <br> *14-11-22* - Added required flag `--externalcl` to Erigon config. <br> *18-10-22* - Replaced Infura with [Checkpoint Sync Endpoints](https://eth-clients.github.io/checkpoint-sync-endpoints/). <br> *08-10-22* - Added `--Xplugin-rocksdb-high-spec-enabled` to Besu service config. <br> *08-10-22* - Added graffiti max 32 char limit note. <br> *08-10-22* - Removed section on merge. <br> *08-10-22* - Updated Besu, Erigon, Nethermind client versions. <br> *19-09-22* - Updated Teku release to 22.9.1. <br> *17-09-22* - Updated Erigon release to 2022.09.02. <br> *17-09-22* - Updated Geth release to 1.10.25. <br> *17-09-22* - Updated Nethermind release to 1.14.2. <br> *11-09-22* - Updated Besu service config to use 4GB RAM (-Xmx4g). <br> *08-09-22* - Updated Besu release to 22.7.2. <br> *08-09-22* - Updated Nethermind release to 1.14.1. <br> *06-09-22* - Updated Erigon release to 2022.09.01. <br> *01-09-22* - Updated Teku release to 22.9.0. <br> *30-08-22* - Updated Teku release to 22.8.2. <br> *28-08-22* - Updated Erigon release to 2022-08-03-Alpha. <br> *24-08-22* - Updated Geth client version to 1.10.23. <br> *24-08-22* - Added link to the [supplementary guide](https://someresat.medium.com/supplementary-guide-to-staking-on-ethereum-for-existing-stakers-57493678a460). <br> *23-08-22* - Added \"A Note on the Merge\" section. <br> *22-08-22* - Merge-Ready version published. <br> *26-11-20* - Beacon Chain Genesis version published. |\n\n<br/>\n\n## Goerli Testnet Staking Guides ##\n\n| Guide <img width=150/> | Change Log *(dd-mm-yy)* <img width=450/> |\n| :---- | :--------- |\n| [Ubuntu/Lighthouse](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-g%C3%B6erli-lighthouse-8d0a2a811e6e) | Published 06-08-22, Updated 19-11-22 |\n| [Ubuntu/Lodestar](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-goerli-lodestar-f3c8f77e7097) | Published 10-09-22, Updated 19-11-22 |\n| [Ubuntu/Prysm](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-goerli-prysm-4a640794e8b5) | Published 07-08-22, Updated 19-11-22 |\n| [Ubuntu/Nimbus](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-goerli-nimbus-3b0e2c0c6e0e) | Published 06-08-22, Updated 19-11-22 |\n| [Ubuntu/Teku](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-g%C3%B6erli-teku-6512b26f1372) | Published 06-08-22, Updated 19-11-22 |\n\n<br/>\n\n## Mainnet Migration Guides (Not Merge Ready - Updates Pending) ##\n\n| Guide <img width=150/> | Change Log *(dd-mm-yy)* <img width=450/> |\n| :---- | :--------- |\n| [Series Introduction](https://someresat.medium.com/ethereum-staker-migration-guides-introduction-45505079b1f0) | Published 12-04-22 |\n| [Migrating from Prysm to Nimbus](https://someresat.medium.com/ethereum-staker-migration-guide-migrating-from-prysm-to-nimbus-b802a7dcb31e) (NOT Merge Ready)| Published 11-05-22 |\n| Migrating from Prysm to Teku - coming soon! | |\n| Migrating from Prysm to Lodestar - coming soon! | |\n| Migrating from Prysm to Lighthouse - coming soon! | |\n| Series Conclusion - coming soon! | |\n"
  },
  {
    "path": "LICENSE",
    "content": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "README.md",
    "content": "\n# Ethereum Staking Guides #\n\n## Introduction ##\n\nWelcome!\n\nIf you would like to become a solo staker, the **gold standard** for staking on the Ethereum network, then these guides are for you! \n\nRequired is a machine running Ubuntu (22.04 LTS or newer) with a modern CPU, 16GB RAM (32GB is better) and a good quality 2TB SSD (4TB is better).\n\nTo get started, go to one of the [**Mainnet Staking Guides**](https://github.com/SomerEsat/ethereum-staking-guides#mainnet-staking-guides) below.\n\nIf you're not sure which client to use, go with the one that has the lowest share. See here: https://clientdiversity.org. The guides below are named after the major **Consensus Clients** (Lighthouse, Lodestar, Prysm, Nimbus, and Teku) so you'll have to choose that one first. Each guide then contains instructions for installing an **Execution Client** which is required for staking as well. Again, it is recommended that you choose the one with the lowest share.\n\nFinally, be aware that there may be a queue to start validating on the mainnet. Check here: https://validator-queue-monitoring.vercel.app.\n\nSomer Esat \n\n<br/>\n\n## Mainnet Staking Guides ##\n\nUse these guides for staking on the Ethereum mainnet.\n\n| Guide <img width=150/> | Change Log *(dd-mm-yy)* <img width=450/> |\n| :--------- | :---------- |\n| [Lighthouse](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-lighthouse-773f5d982e03) | <br> *27-11-25* - Updated deposit CLI to EthStaker version. <br> *27-11-25* - Added section to explain the difference between compounding and regular validators. <br> *27-11-25* - Updated Linux OS version. Fixed broken links. <br> *20-08-24* - Added Reth Execution Client. <br> *18-08-24* - Updated Lighthouse client to 5.3.0. <br> *19-06-24* - Updated Lighthouse client to 5.2.0. <br> *18-06-24* - Updated Besu client to 24.5.4. <br> *09-06-24* - Updated Nethermind config to add Pruning flags. <br> *09-06-24* - Updated Nethermind config to remove Sync.AncientBodies/Receipts flags. <br> *09-06-24* - Updated Nethermind client to 1.26.0. <br> *09-06-24* - Updated Geth client to 1.14.5. <br> *09-06-24* - Updated Erigon client to 2.6.1. <br> *02-06-24* - Updated Erigon client to 2.6.0. <br> *02-06-24* - Removed Erigon deprecated config flag --externalcl per [Issue 13](https://github.com/SomerEsat/ethereum-staking-guides/issues/13). <br> *02-06-24* - Updated Erigon config to use the prebuilt binary. <br> *02-06-24* - Removed redundant Erigon prerequisites. <br> *30-05-24* - Updated Besu client to 24.5.2 and fixed broken links in Besu config flags section. <br> *30-05-24* - Updated Besu config to rename X_SNAP to SNAP per [#6405](https://github.com/hyperledger/besu/pull/6405). <br> *30-05-24* - Updated Besu prerequisites to require Java Runtime v21 (headless). <br> *14-04-24* - Added table of contents. <br> *14-04-24* - Increased Ubuntu Server Version to 22.04. <br> See [Change Log Archive](https://github.com/SomerEsat/ethereum-staking-guides/blob/master/ChangeLogArchive.md). |\n| [Lodestar](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-lodestar-193a2553a161) | <br> *27-11-25* - Updated deposit CLI to EthStaker version. <br> *27-11-25* - Added section to explain the difference between compounding and regular validators. <br> *27-11-25* - Updated Linux OS version. Fixed broken links. <br> *20-08-24* - Added Reth Execution Client. <br> *11-08-24* - Fixed incorrect link to Lodestar releases. <br> *18-06-24* - Removed redundant Lodestar prerequisites (NodeJS and build-essential). <br> *18-06-24* - Updated Lodestar config to use the prebuilt binary. <br> *18-06-24* - Updated Lodestar client to 1.19.0. <br> *18-06-24* - Updated Besu client to 24.5.4. <br> *18-06-24* - Updated Nethermind config to add Pruning flags. <br> *18-06-24* - Updated Nethermind config to remove Sync.AncientBodies/Receipts flags. <br> *18-06-24* - Updated Nethermind client to 1.26.0. <br> *18-06-24* - Updated Geth client to 1.14.5. <br> *18-06-24* - Updated Erigon client to 2.6.1. <br> *02-06-24* - Updated Erigon client to 2.6.0. <br> *02-06-24* - Removed Erigon deprecated config flag --externalcl per [Issue 13](https://github.com/SomerEsat/ethereum-staking-guides/issues/13). <br> *02-06-24* - Updated Erigon config to use the prebuilt binary. <br> *02-06-24* - Removed redundant Erigon prerequisites. <br> *30-05-24* - Updated Besu client to 24.5.2 and fixed broken links in Besu config flags section. <br> *30-05-24* - Updated Besu config to rename X_SNAP to SNAP per [#6405](https://github.com/hyperledger/besu/pull/6405). <br> *30-05-24* - Updated Besu prerequisites to require Java Runtime v21 (headless). <br> *27-04-24* - Added table of contents. <br> *27-04-24* - Increased Ubuntu Server Version to 22.04. <br> See [Change Log Archive](https://github.com/SomerEsat/ethereum-staking-guides/blob/master/ChangeLogArchive.md). |\n| [Prysm](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-prysm-581fb1969460) | <br> *27-11-25* - Updated deposit CLI to EthStaker version. <br> *27-11-25* - Added section to explain the difference between compounding and regular validators. <br> *27-11-25* - Updated Linux OS version. Fixed broken links. <br> *20-08-24* - Added Reth Execution Client. <br> *24-06-24* - Updated Prysm client to 5.0.4. <br> *19-06-24* - Updated Prysm client to 5.0.3. <br> *18-06-24* - Updated Besu client to 24.5.4. <br> *18-06-24* - Updated Nethermind config to add Pruning flags. <br> *18-06-24* - Updated Nethermind config to remove Sync.AncientBodies/Receipts flags. <br> *18-06-24* - Updated Nethermind client to 1.26.0. <br> *18-06-24* - Updated Geth client to 1.14.5. <br> *18-06-24* - Updated Erigon client to 2.6.1. <br> *02-06-24* - Updated Erigon client to 2.6.0. <br> *02-06-24* - Removed Erigon deprecated config flag --externalcl per [Issue 13](https://github.com/SomerEsat/ethereum-staking-guides/issues/13). <br> *02-06-24* - Updated Erigon config to use the prebuilt binary. <br> *02-06-24* - Removed redundant Erigon prerequisites. <br> *30-05-24* - Updated Besu client to 24.5.2 and fixed broken links in Besu config flags section. <br> *30-05-24* - Updated Besu config to rename X_SNAP to SNAP per [#6405](https://github.com/hyperledger/besu/pull/6405). <br> *30-05-24* - Updated Besu prerequisites to require Java Runtime v21 (headless). <br> *27-04-24* - Added table of contents. <br> *27-04-24* - Increased Ubuntu Server Version to 22.04. <br> See [Change Log Archive](https://github.com/SomerEsat/ethereum-staking-guides/blob/master/ChangeLogArchive.md). |\n| [Nimbus](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-nimbus-31f56657ea8f) | <br> *27-11-25* - Updated deposit CLI to EthStaker version. <br> *27-11-25* - Added section to explain the difference between compounding and regular validators. <br> *27-11-25* - Updated Linux OS version. Fixed broken links. <br> *20-08-24* - Added Reth Execution Client. <br> *24-06-24* - Updated Nimbus client to 24.6.0. <br> *19-06-24* - Updated Nimbus client to 24.5.0. <br> *18-06-24* - Updated Besu client to 24.5.4. <br> *18-06-24* - Updated Nethermind config to add Pruning flags. <br> *18-06-24* - Updated Nethermind config to remove Sync.AncientBodies/Receipts flags. <br> *18-06-24* - Updated Nethermind client to 1.26.0. <br> *18-06-24* - Updated Geth client to 1.14.5. <br> *18-06-24* - Updated Erigon client to 2.6.1. <br> *02-06-24* - Updated Erigon client to 2.6.0. <br> *02-06-24* - Removed Erigon deprecated config flag --externalcl per [Issue 13](https://github.com/SomerEsat/ethereum-staking-guides/issues/13). <br> *02-06-24* - Updated Erigon config to use the prebuilt binary. <br> *02-06-24* - Removed redundant Erigon prerequisites. <br> *30-05-24* - Updated Besu client to 24.5.2 and fixed broken links in Besu config flags section. <br> *30-05-24* - Updated Besu config to rename X_SNAP to SNAP per [#6405](https://github.com/hyperledger/besu/pull/6405). <br> *30-05-24* - Updated Besu prerequisites to require Java Runtime v21 (headless). <br> *27-04-24* - Added table of contents. <br> *27-04-24* - Increased Ubuntu Server Version to 22.04. <br> See [Change Log Archive](https://github.com/SomerEsat/ethereum-staking-guides/blob/master/ChangeLogArchive.md). |\n| [Teku](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-teku-f09ecd9ef2ee) | <br> *27-11-25* - Updated deposit CLI to EthStaker version. <br> *27-11-25* - Added section to explain the difference between compounding and regular validators. <br> *27-11-25* - Updated Linux OS version. Fixed broken links. <br> *20-08-24* - Added Reth Execution Client. <br> *19-06-24* - Updated Teku prerequisites to require Java Runtime v21 (headless). <br> *19-06-24* - Updated Teku client to 24.6.0. <br> *18-06-24* - Updated Besu client to 24.5.4. <br> *18-06-24* - Updated Nethermind config to add Pruning flags. <br> *18-06-24* - Updated Nethermind config to remove Sync.AncientBodies/Receipts flags. <br> *18-06-24* - Updated Nethermind client to 1.26.0. <br> *18-06-24* - Updated Geth client to 1.14.5. <br> *18-06-24* - Updated Erigon client to 2.6.1. <br> *02-06-24* - Updated Erigon client to 2.6.0. <br> *02-06-24* - Removed Erigon deprecated config flag --externalcl per [Issue 13](https://github.com/SomerEsat/ethereum-staking-guides/issues/13). <br> *02-06-24* - Updated Erigon config to use the prebuilt binary. <br> *02-06-24* - Removed redundant Erigon prerequisites. <br> *30-05-24* - Updated Besu client to 24.5.2 and fixed broken links in Besu config flags section. <br> *30-05-24* - Updated Besu config to rename X_SNAP to SNAP per [#6405](https://github.com/hyperledger/besu/pull/6405). <br> *30-05-24* - Updated Besu prerequisites to require Java Runtime v21 (headless). <br> *18-05-24* - Added table of contents. <br> *18-05-24* - Increased Ubuntu Server Version to 22.04. <br> See [Change Log Archive](https://github.com/SomerEsat/ethereum-staking-guides/blob/master/ChangeLogArchive.md). |\n\n<br/>\n\n## Update Withdrawal Credentials Guide ##\n\nStakers may use this guide to update withdrawal credentials on their validator(s) from 0x00 to 0x01.\n\n| Guide | Change Log *(dd-mm-yy)* <img width=450/> |\n| :--------- | :---------- |\n| [Guide to Configuring <br> Withdrawal Credentials <br> on Ethereum](https://someresat.medium.com/guide-to-configuring-withdrawal-credentials-on-ethereum-812dce3193a) | <br> *14-04-24* - Added table of contents. <br> *12-11-23* - Fixed various broken links. <br> *16-04-23* - Fix typo & add extra warning prior to Submit & Broadcast. <br> *13-04-23* - Various updates to improve readability. <br> *12-04-23* - Added example Beaconcha.in submit success message. <br> *11-04-23* - Published. |\n\n<br/>\n\n## Donations Appreciated ##\n\nSomer.eth (0x32B74B90407309F6637245292cd90347DE658A37)\n\n<br/>\n"
  },
  {
    "path": "UbuntuPrysmTopaz.md",
    "content": "# Ethereum 2.0 Staking Guide (Ubuntu / Prysm / Topaz)\n\n<br>\n\nThis is a step-by-step guide to staking on Ethereum 2.0. It is based on the following technologies:\n- Ubuntu v20.04 (LTS) x64 server ([link](https://ubuntu.com/))\n- Prysmatic Labs Ethereum 2.0 client - Prysm ([link](https://prysmaticlabs.com/))\n- Prysmatic Labs Topaz Testnet public network\n- MetaMask crypto wallet browser extension ([link](https://metamask.io/))\n- Prometheus metrics ([link](https://prometheus.io/))\n- Grafana dashboard ([link](https://grafana.com/))\n  \nThis guide includes instructions on how to:\n- Configure a newly running Ubuntu server instance\n- Install and configue the Prysmatic Labs beacon-chain and validator software\n- Send validator deposits for staking on the Topaz Testnet\n- Install and configure Prometheus metrics and set up a Grafana dashboard to view them\n\n### Acknowledgements\nThis guide is based on information I got from various sources. They are listed in the references section at the bottom and this guide wouldn't exist without them. Thank you, all! Thanks also to Prysmatic Labs for their cool software, great documentation, and their assistance with running my own staking setup.\n\n### Disclaimer\nI'm not an expert in any of the technologies listed in this guide (basically I am a noob). I got it working and it's a lot of fun, so I wanted to share it with others. Please forgive any errors or ill-informed choices. Feedback is appreciated!\n\n### Note for Raspberry Pi Users\nI haven't tested this guide on a Rpi. If you want to try, just swap out any required softare for the ARM version where available (e.g. Prometheus has an ARM binary available on the download page - replace the amd64 link with that). No guarantee it will work! You can get support on the Prysmatic Labs Discord.\n\n### Prerequisites\nThis guide assumes basic knowledge of Ethereum, ETH, staking, Linux, and MetaMask. Before you get started you will need to have your Ubuntu server instance up and running. For simplicity I used a VM hosted in a virtual public cloud, but a locally hosted instance is also fine. It will help to have the MetaMask browser extension installed and configured. The rest we will do along the way. GLHF!\n\n### Requirements\n- Ubuntu server instance. I used v20.04 (LTS) x64 server VM.\n- MetaMask crypto wallet browser extension, installed and configured.\n- Prysm software [minimum requirements](https://docs.prylabs.network/docs/install/linux/):\n  - Operating System: 64-bit Linux\n  - Processor: Intel Core i5–760 or AMD FX-8100 or better\n  - Memory: 4GB RAM\n  - Storage: 20GB available space SSD\n  - Internet: Broadband connection\n\n<br>\n\n## Step 1 - Secure Your System\nSecurity is important. This is not a comprehensive security guide, rather just some basic settings: a firewall and a user account. This assumes you have console access to your Ubuntu instance and are logged in as the root user.\n\n### Configure the firewall\n\nUbuntu 20.04 servers can use the default [UFW firewall](https://help.ubuntu.com/community/UFW) to restrict traffic to the server. We need to allow SSH, RDP (for remote desktop connections), Grafana (for metrics), and Prysm (for incoming P2P connections) to connect to the server.\n\nAllow SSH - Allows connection to the server over SSH (port 22/TCP).\n\n```\nufw allow 22/tcp\n```\n\nAllow Grafana - Allows incoming requests to the Grafana web server (port 3000/TCP):\n\n```\nufw allow 3000/tcp\n```\n\nAllow RDP - Allows connection to the server over RDP (port 3389/TCP). This is so we can (optionally) remote into the server and run the Prysm clients (beacon and validator). We will configure a minimal desktop environment for the server below.\n\n```\nufw allow 3389/tcp\n```\n\nOr if you want better security you can limit connections to just your local IP address:\n\n```\nufw allow from <yourlocalipaddress> to any port 22 proto tcp\nufw allow from <yourlocalipaddress> to any port 3389 proto tcp\nufw allow from <yourlocalipaddress> to any port 3000 proto tcp\n```\n\nAllow Prysm - Allows P2P connections with peers for actions on the beacon node:\n\n> 13000/TCP and 12000/UDP are [recommended](https://docs.prylabs.network/docs/prysm-usage/p2p-host-ip/#incoming-p2p-connection-prerequisites) by Prysmatic Labs.\n\n```\nufw allow 13000/tcp\nufw allow 12000/udp\n```\n\nNow enable the firewall:\n\n```\nufw enable\n```\n\nCheck to verify the rules have been correctly configured:\n\n```\nufw status numbered\n```\n\nOutput should look something like this:\n\n```\nStatus: Active\n\n     To                   Action      From\n     --                   ------      ----\n[ 1] 22/tcp               ALLOW IN    Anywhere\n[ 3] 3000/tcp             ALLOW IN    Anywhere\n[ 2] 3389/tcp             ALLOW IN    Anywhere\n[ 3] 13000/tcp            ALLOW IN    Anywhere\n[ 4] 12000/udp            ALLOW IN    Anywhere\n```\n\n### Create a new user and grant administrative privileges\n\nUsing the root user to log in is [risky](https://askubuntu.com/questions/16178/why-is-it-bad-to-log-in-as-root). Instead, create a user-level account with admin privileges.\n\n```\nadduser <yourusername>\n```\n\nYou will asked to create a password and some other information.\n\nNext, modify the permissions of the new user to grant admin rights to the user by adding them to the sudo group.\n\n```\nusermod -aG sudo <yourusername>\n```\n\nWhen you log in as `<yourusername>` you can type sudo before commands to perform actions with superuser privileges.\n\n<br>\n\n## Step 2 - Update Your System\n\nSSH into your Ubuntu instance with your newly created username and apply the following commands to update the system.\n\n```\nsudo apt update && sudo apt upgrade\nsudo apt dist-upgrade && sudo apt autoremove\n```\n\n<br>\n\n## Step 3 - Install a lightweight GUI for RDP\n\nNot the cleanest approach, but it makes things much easier to visualize. The Prysm beacon and validator services could be run as background services on startup so you don't have to manually start them, however, the validator requires a password, and I'm not sure how to store it in a secure way. Probably via an [ethdo wallet](https://docs.prylabs.network/docs/prysm-usage/wallet-keymanager/).\n\nThe following will install a lightweight GUI onto the Ubuntu server called [xfce](https://www.xfce.org/). If it gives you the option during setup, select `lightdm`.\n\n```\nsudo apt-get -y install xfce4 \n```\n\nNext wire up the RDP to the xfce OS.\n\n```\nsudo apt-get -y install xrdp\nsudo systemctl enable xrdp\necho xfce4-session >~/.xsession\nsudo service xrdp restart\n```\n\nNow you can RDP into the Ubuntu instance using a RDP client.\n\n<br>\n\n## Step 4 - Install Prysm\n\nNext we will install the Prysm software which includes a beacon chain and validator. This is done using the Prysm installation script (Prysm.sh). The instructions to do this are on Prysm's [website](https://docs.prylabs.network/docs/install/linux/), and I will summarize the steps here.\n\n> It's also possible to build the software yourself using Prysmatic's build tool, [Bazel](https://docs.prylabs.network/docs/install/lin/bazel).\n\n### Pull down the Prysm.sh script and execute the beacon chain\n\n```\ncd ~\nmkdir prysm && cd prysm\ncurl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod +x prysm.sh\n```\n\nExecute the beacon chain. The prysm.sh script will download and run the beacon-chain binary.\n\n```\n./prysm.sh beacon-chain --p2p-host-ip=$(curl -s v4.ident.me)\n```\n\nUse the --p2p-host-ip parameter to specify your public IP. From Prysmatic Labs:\n\n> \"The beacon node needs to know what your public IP address is so that it can inform other peers how to reach your node. Do this by including the --p2p-host-ip=<your public IP> flag when you start up the beacon-chain.\"\n\nThe first thing it does is process deposits. The output looks like this:\n\n```\n[2020-05-17 21:49:52]  INFO powchain: Processing deposits from Ethereum 1 chain deposits=8192\n[2020-05-17 21:49:55]  INFO powchain: Processing deposits from Ethereum 1 chain deposits=8704\n```\n\nOnce that is done it will wait for suitable peers. The output looks like this:\n\n```\n[2020-05-17 21:52:20]  INFO initial-sync: Waiting for enough suitable peers before syncing required=3 suitable=2\n[2020-05-17 21:52:25]  INFO initial-sync: Waiting for enough suitable peers before syncing required=3 suitable=2\n```\n\nAnd then once it has found and connected to the minimum number of peers, it begins the sync process. The output looks like this:\n\n```\n[2020-05-17 21:53:02]  INFO initial-sync: Processing block 0xc7c761d3... 532/215365 - estimated time remaining 2h31m23s blocksPerSecond=23.6 peers=12\n[2020-05-17 21:53:02]  INFO initial-sync: Processing block 0xf0a3de3a... 533/215365 - estimated time remaining 2h31m4s blocksPerSecond=23.7 peers=12\n```\n\nThe beacon-chain will begin to sync. It may take several hours for the node to fully sync. The terminal output gives status information and an estimate for time remaining. Prysmatic Labs recommends that you wait for this to complete before you run the validator:\n\n> \"NOTICE: The beacon node you are using should be completely synced before submitting your deposit for the validator client, otherwise the validator will not be able to validate and will inflict minor inactivity balance penalties.\"\n\nWhile the beacon node is syncing, let's move onto the next steps. \n\n<br>\n\n## Step 5 - Configure validator staking keys\n\n*Your beacon node does not have to be synced to do these steps.*\n\nThe validator allows you to define one or more validator keys. Each key will need to be associated with a 32 ETH deposit into the Topaz Testnet staking deposit contract.\n\n### Get staking ETH\n\nTo become a validator on the Topaz testnet you will need to get 32 ETH from the Göerli Test Network. **Do not use mainnet ETH**. Follow these steps:\n\na) Click on the MetaMask browser extension and log in.\n\nb) Using the dropdown at the top, select the Goerli Test Network.\n\nc) Cick on your name to copy your Goerli ETH wallet address.\n\nd) Head over to the [Prysm Labs Discord](https://discord.gg/YMVYzv6).\n\ne) Ask one of the mods *nicely* to transfer you some ETH and paste your Goerli ETH wallet address. \n\nf) If you are planning on running multiple validators you can ask for what you need (32 x number of validators).\n\nOnce the ETH appears in your MetaMask wallet we are ready to continue to the next step.\n\n### Connect your MetaMask wallet\n\nAs I mentioned above, in order to validate you will need to deposit 32 Göerli ETH into the Topaz Testnet staking deposit contract. To do this you send the Göerli ETH in a deposit transaction with your validator key data attached, or you can use the Prysm Labs validator participation web page. Let's do that. Go to [Prysm Labs Testnet Participation](https://prylabs.net/participate) in your web browser.\n\nClick on `Step 2` on the web page then click on the MetaMask button. Log into MetaMask (if necessary) and click `Connect`. The web page should then display a confirmation that you have sufficient Göerli ETH in your wallet to stake:\n\n```\nThis test network leverages the Goerli test network to simulate validator deposits on a proof-of-work chain.\n\nYou are 0x724F321C4efeD5e3C7CcA40168810c258c82d02F and you have 631 GöETH.\n\nTo deposit as a validator you'll need at least 32.0 GöETH.\n```\n\n### Generate validator keys\n\nIf you have >= 32 Göerli ETH the page will allow you to click on `Step 3`. This is where you will paste your validator's staking data and send Göerli ETH to the deposit contact. Next we will get the staking data.\n\n#### a) Run the validator\n\nIn a new terminal window run this command to create a validator account:\n\n```\ncd prysm/\n./prysm.sh validator accounts create\n```\n\nThe Prysm validator binary will be downloaded and executed. \n\n#### b) Set up the keystore\n\nIt will prompt you to specify the keystore path where your validator account keys will be stored. \n\n```\nINFO accounts: Please specify the keystore path for your private keys (default: \"/root/.eth2validators\"):\n```\n   \nYou can provide a different value if you like, but, to keep things simple go with the default keystore by pressing **\\<enter\\>**.\n\n#### c) Secure the key data\n\nNext it will ask you for a password. This is the password for your key. **You will need to specify this password each time you run the validator binary** so you will want to make a note of it. For now, I *recommend* using the same key for each validator you create. This will likely change by the time we go to production. \n\nAfter you enter your password and confirm it you should get the following output:\n\n```\nINFO accounts: Account creation complete! Copy and paste the raw transaction data shown below \nwhen issuing a transaction into the ETH1.0 deposit contract to activate your validator client\n\n========================Raw Transaction Data=======================\n\n0x228951180000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000\n00000000000000000000e000000000000000000000000000000000000000000000000000000000000001206617145a28456c7f0670d52cffbad3\nd3baad15e1df92f1f1ecdf0c493080c9150000000000000000000000000000000000000000000000000000000000000030aef319a5d9c4ae04a7\n5e651558384cf86eed7d010d814cff776185a9ec22661fbe99d651e3f4ddd7096ca218c6b29290000000000000000000000000000000000000000\n000000000000000000000000000000000000000000000000000000020009a3665a747517ea6df3a95eb81d3047a496c505dc9eba79471fccd9704\n49270000000000000000000000000000000000000000000000000000000000000060ab767dbd67471ffabfab8096c5b6cc4d998017be9feed0826\n13a3ea3465014c1660f7862ef26b90462980668b4cff21c189b41dbde0cb15b621c3d12fc4a4c67e288ab8c0b42e36463ff432005829ced527458\n926a6d9a1e2d252438ceb5a25e\n\n===================================================================\nINFO accounts: Deposit data displayed for public key: \n0xaef319a5d9c4ae04a75e651558384cf86eed7d010d814cff776185a9ec22661fbe99d651e3f4ddd7096ca218c6b29290\n```\n\nMake a note of your public Key. This will be useful later to view the validator account status on [beaconcha.in](http://www.beaconcha.in).\n\n#### d) Make the deposit\n\nCopy the **Raw Transaction Data** without the header and footer and paste it into the box under the heading **Your validator deposit data** at `Step 3` on the [Prysm Labs Testnet Participation](https://prylabs.net/participate) web page.\n\nIgnore `Step 4` and click on `Step 5`. Click on the `Make deposit` button. MetaMask will pop-up and once you examine and verify the transaction details, click on the **Confirm** button. MetaMask will eventually confirm the transaction and a message will show at the bottom of the web page: **Transaction Confirmed. You are deposited**. You can also confirm the transaction on the blockchain via Etherscan by clicking on the small arrow on the confirmed transaction in MetaMask.\n\n> Sometimes the Prysm web page locks up after you submit. It's not a major problem - the main thing to verify is that your deposit is confimred as successful in Etherscan.\n\nRepeat steps **a** through **d** in this section for each validator account you would like to create. Keys will all be stored in the keystore and the validator binary will manage all of the keys for you.\n\n> Remember: Each validator account you create corresponds to a unique set of transaction data paired with a 32 ETH deposit. For simplicity use the same password for each key.\n\n<br>\n\n## Step 6 - Begin validating (and earning sweet testnet ETH!)\n\n*Your beacon node should be **fully synced** before continuing with this step.*\n\n### Run the validator\n\nIt will prompt you for your password - this is the password you supplied in the previous step. If you used the default key manager, the syntax is:\n\n```\ncd ~\ncd prysm/\n./prysm.sh validator --keymanager=keystore --enable-account-metrics\n```\n\nThe `--enable-account-metrics` parameter is an important addition that will allow us to expose metrics on the validator and the validations that it does. More about that in the next step.\n\nIt can take more than 12 hours to activate the validation key(s). The output from the validator process indicates the status. \n\n```\n[2020-05-18 02:08:55]  INFO validator: Deposit for validator received but not processed into the beacon state eth1DepositBlockNumber=2714819 expectedInclusionSlot=217796 pubKey=0xaef319a5d9c4 status=DEPOSITED\n```\n\nOnce activated you should see something like this for each key: \n\n```\n[2020-05-17 18:18:47]  INFO validator: Validator activated pubKey=0xaef319a5d9c4\n```\n\nYou can check the status of your validator via [beaconcha.in](http://www.beaconcha.in). Simply do a search for your validator public key.\n\n<br>\n\n## Step 7 - Install Prometheus\n\n*Your beacon node does not have to be synced to do these steps.*\n\nPrometheus is an open-source systems monitoring and alerting toolkit. It runs as a service on your Ubuntu server and its job is to capture metrics. More information [here](https://prometheus.io/docs/introduction/overview/).\n\nWe are going to use Prometheus to expose runtime data from the beacon-chain and validator as well as instance specific metrics.\n\n### Create user accounts\n\nAccounts for the services to run under. These accounts can't log into the server.\n\n```\ncd ~\nsudo useradd --no-create-home --shell /bin/false prometheus\nsudo useradd --no-create-home --shell /bin/false node_exporter\n```\n\n### Create directories\n\nProgram and data directories.\n\n```\nsudo mkdir /etc/prometheus\nsudo mkdir /var/lib/prometheus\n```\n\nSet directory ownership. The prometheus account will manage these.\n\n```\nsudo chown prometheus:prometheus /etc/prometheus\nsudo chown prometheus:prometheus /var/lib/prometheus\n```\n\n### Download Prometheus software\n\nAdjust the version number for the version you want from the [Prometheus download page](https://prometheus.io/download/).\n\n> For Raspberry Pi users - get the link for the arm version and substitute that for the link below.\n\n```\ncd ~\ncurl -LO https://github.com/prometheus/prometheus/releases/download/v2.18.1/prometheus-2.18.1.linux-amd64.tar.gz\n```\n\nUnpack the archive. It contains two binaries and some content files.\n\n```\ntar xvf prometheus-2.18.1.linux-amd64.tar.gz\n```\n\nCopy the binaries to the following locations.\n\n```\nsudo cp prometheus-2.18.1.linux-amd64/prometheus /usr/local/bin/\nsudo cp prometheus-2.18.1.linux-amd64/promtool /usr/local/bin/\n```\n\nSet directory ownership. The prometheus account will manage these.\n\n```\nsudo chown prometheus:prometheus /usr/local/bin/prometheus\nsudo chown prometheus:prometheus /usr/local/bin/promtool\n\n```\n\nCopy the content files to the following locations:\n\n```\nsudo cp -r prometheus-2.18.1.linux-amd64/consoles /etc/prometheus\nsudo cp -r prometheus-2.18.1.linux-amd64/console_libraries /etc/prometheus\n```\n\nSet directory and file (-R) ownership. The prometheus account will manage these.\n\n```\nsudo chown -R prometheus:prometheus /etc/prometheus/consoles\nsudo chown -R prometheus:prometheus /etc/prometheus/console_libraries\n```\n\nRemove the downloaded archive.\n\n```\nrm -rf prometheus-2.18.1.linux-amd64.tar.gz prometheus-2.18.1.linux-amd64\n```\n\n\n### Edit the configuration file\n\nPrometheus uses a configuration file so it knows where to scrape the data from. We will set this up here.\n\nOpen the YAML config file for editing.\n\n```\nsudo nano /etc/prometheus/prometheus.yml\n```\n\nPaste the following into the file taking care not to make any additional edits and exit and save the file.\n\n```\nglobal:\n  scrape_interval:     15s # Set the scrape interval to every 15 seconds.\n  evaluation_interval: 15s # Evaluate rules every 15 seconds.\n  # scrape_timeout is set to the global default (10s).\n\n\n# Alertmanager configuration:\n\nalerting:\n  alertmanagers:\n  - static_configs:\n    - targets:\n      # - alertmanager:9093\n\n\n# Load rules once and periodically evaluate them:\n\nrule_files:\n\n  # - \"first_rules.yml\"\n  # - \"second_rules.yml\"\n\n\n# The scrape configuration:\n\nscrape_configs:\n  - job_name: 'validator'\n    scrape_interval: 5s\n    static_configs:\n      - targets: ['localhost:8081']\n\n  - job_name: 'beacon node'\n    scrape_interval: 5s\n    static_configs:\n      - targets: ['localhost:8080']\n\n  - job_name: 'node_exporter'\n    scrape_interval: 5s\n    static_configs:\n      - targets: ['localhost:9100']\n```\n\nThe **scrape_configs** define the output target for the different job names. We have 3 job names: validator, beacon node, and node_exporter. The first two are obvious, the last one is for metrics related to the server instance itself (memory, CPU, disk, network etc.). We will install and configure node_exporter below.\n\nSet ownership for the config file. The prometheus account will own this.\n\n```\nsudo chown prometheus:prometheus /etc/prometheus/prometheus.yml\n```\n\nFinally, let's test the service is running correctly.\n\n```\nsudo -u prometheus /usr/local/bin/prometheus \\\n    --config.file /etc/prometheus/prometheus.yml \\\n    --storage.tsdb.path /var/lib/prometheus/ \\\n    --web.console.templates=/etc/prometheus/consoles \\\n    --web.console.libraries=/etc/prometheus/console_libraries\n```\n\nOutput should look something like this. Press Ctrl + C to exit.\n\n```\nlevel=info ts=2020-05-17T18:31:33.012Z caller=main.go:302 msg=\"No time or size retention was set so using the default time retention\" duration=15d\nlevel=info ts=2020-05-17T18:31:33.012Z caller=main.go:337 msg=\"Starting Prometheus\" version=\"(version=2.18.1, branch=HEAD, revision=ecee9c8abfd118f139014cb1b174b08db3f342cf)\"\nlevel=info ts=2020-05-17T18:31:33.012Z caller=main.go:338 build_context=\"(go=go1.14.2, user=x@x, date=20200507-16:51:47)\"\nlevel=info ts=2020-05-17T18:31:33.012Z caller=main.go:339 host_details=\"(Linux 5.4.0-29-generic #33-Ubuntu SMP Wed Apr 29 14:32:27 UTC 2020 x86_64 ETH-STAKER (none))\"\nlevel=info ts=2020-05-17T18:31:33.012Z caller=main.go:340 fd_limits=\"(soft=1024, hard=1048576)\"\nlevel=info ts=2020-05-17T18:31:33.013Z caller=main.go:341 vm_limits=\"(soft=unlimited, hard=unlimited)\"\nlevel=info ts=2020-05-17T18:31:33.019Z caller=web.go:523 component=web msg=\"Start listening for connections\" address=0.0.0.0:9090\nlevel=info ts=2020-05-17T18:31:33.021Z caller=main.go:678 msg=\"Starting TSDB ...\"\nlevel=info ts=2020-05-17T18:31:33.038Z caller=head.go:575 component=tsdb msg=\"Replaying WAL, this may take awhile\"\nlevel=info ts=2020-05-17T18:31:33.038Z caller=head.go:624 component=tsdb msg=\"WAL segment loaded\" segment=0 maxSegment=0\nlevel=info ts=2020-05-17T18:31:33.039Z caller=head.go:627 component=tsdb msg=\"WAL replay completed\" duration=451.301µs\nlevel=info ts=2020-05-17T18:31:33.041Z caller=main.go:694 fs_type=EXT4_SUPER_MAGIC\nlevel=info ts=2020-05-17T18:31:33.041Z caller=main.go:695 msg=\"TSDB started\"\nlevel=info ts=2020-05-17T18:31:33.041Z caller=main.go:799 msg=\"Loading configuration file\" filename=/etc/prometheus/prometheus.yml\nlevel=info ts=2020-05-17T18:31:33.052Z caller=main.go:827 msg=\"Completed loading of configuration file\" filename=/etc/prometheus/prometheus.yml\nlevel=info ts=2020-05-17T18:31:33.052Z caller=main.go:646 msg=\"Server is ready to receive web requests.\"\n```\n\n### Set Prometheus to autostart as a service\n\nCreate a systemd service file to store the service config which tells systemd to run Prometheus as the prometheus user, with the configuration file located in the /etc/prometheus/prometheus.yml directory, and to store its data in the /var/lib/prometheus directory.\n\n```\nsudo nano /etc/systemd/system/prometheus.service\n```\n\nPaste the following into the file. Exit and save.\n\n```\n[Unit]\nDescription=Prometheus\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nUser=prometheus\nGroup=prometheus\nType=simple\nExecStart=/usr/local/bin/prometheus \\\n    --config.file /etc/prometheus/prometheus.yml \\\n    --storage.tsdb.path /var/lib/prometheus/ \\\n    --web.console.templates=/etc/prometheus/consoles \\\n    --web.console.libraries=/etc/prometheus/console_libraries\n\n[Install]\nWantedBy=multi-user.target\n```\n\nReload systemd to reflect the changes.\n\n```\nsudo systemctl daemon-reload\n```\n\nAnd then start the service with the following command.\n\n```\nsudo systemctl start prometheus\n```\n\nCheck the status to make sure it's running correctly.\n\n```\nsudo systemctl status prometheus\n```\n\nOutput should look something like this. If you did everything right, it should say **Active: active (running)**. If not then go back and repeat the steps to fix the problem. Press Q to quit.\n\n```\n● prometheus.service - Prometheus\n     Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)\n     Active: active (running) since Sun 2020-05-17 22:53:29 UTC; 31min ago\n   Main PID: 32345 (prometheus)\n      Tasks: 10 (limit: 9513)\n     Memory: 24.1M\n     CGroup: /system.slice/prometheus.service\n             └─32345 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries\nlines 1-19/19 (END)                                                                                                     \n```\n\nLastly enable Prometheus to start on boot.\n\n```\nsudo systemctl enable prometheus\n```\n\n### Install Node Exporter\n\nPrometheus will provide metrics about the beacon chain and validators. If we want metrics about our Ubuntu instance, we'll need an extension called [Node_Exporter](https://github.com/prometheus/node_exporter). You can find the latest stable version [here](https://prometheus.io/download/) if you want to specify a different version below.\n\n> For Raspberry Pi users - get the link for the arm version and substitute that for the link below.\n\n```\ncd ~\ncurl -LO https://github.com/prometheus/node_exporter/releases/download/v1.0.0-rc.1/node_exporter-1.0.0-rc.1.linux-amd64.tar.gz\n```\n\nUnpack the downloaded software.\n\n```\ntar xvf node_exporter-1.0.0-rc.1.linux-amd64.tar.gz\n```\n\nCopy the binary to the /usr/local/bin directory and set the user and group ownership to the node_exporter user we created above.\n\n```\nsudo cp node_exporter-1.0.0-rc.1.linux-amd64/node_exporter /usr/local/bin\nsudo chown node_exporter:node_exporter /usr/local/bin/node_exporter\n```\n\nRemove the downloaded archive.\n\n```\nrm -rf node_exporter-1.0.0-rc.1.linux-amd64.tar.gz node_exporter-1.0.0-rc.1.linux-amd64\n```\n\n### Set Node Exporter to autostart as a service\n\nCreate a systemd service file to store the service config which tells systemd to run Node_Exporter as the node_exporter user.\n\n```\nsudo nano /etc/systemd/system/node_exporter.service\n```\n\nPaste the following into the file. Exit and save.\n\n```\n[Unit]\nDescription=Node Exporter\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nUser=node_exporter\nGroup=node_exporter\nType=simple\nExecStart=/usr/local/bin/node_exporter\n\n[Install]\nWantedBy=multi-user.target\n```\n\nReload systemd to relfect the changes.\n\n```\nsudo systemctl daemon-reload\n```\n\nAnd then start the service with the following command.\n\n```\nsudo systemctl start node_exporter\n```\n\nCheck the status to make sure it's running correctly.\n\n```\nsudo systemctl status node_exporter\n```\n\nOutput should look something like this. If you did everything right, it should say **Active: active (running)**. If not then go back and repeat the steps to fix the problem. Press Q to quit.\n\n```\n● node_exporter.service - Node Exporter\n     Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: enabled)\n     Active: active (running) since Sun 2020-05-17 23:24:04 UTC; 5s ago\n   Main PID: 33035 (node_exporter)\n      Tasks: 6 (limit: 9513)\n     Memory: 5.1M\n     CGroup: /system.slice/node_exporter.service\n             └─33035 /usr/local/bin/node_exporter\n```\n\nEnable Node Exporter to start on boot.\n\n```\nsudo systemctl enable node_exporter\n```\n\n### Test prometheus and node_exporter\n\nEverything should be ready to go. You may test the functionality by running a browser on your instance and navigating to [http://localhost:9090]. From there you can run queries to view different metrics. For example try this query to see how much memory is free in bytes:\n\n```\nhttp://localhost:9090/new/graph?g0.expr=node_memory_MemFree_bytes&g0.tab=1&g0.stacked=0&g0.range_input=1h\n```\n\nOr try this query to see the balance for all of your validators:\n\n```\nhttp://localhost:9090/graph?g0.range_input=1h&g0.expr=validator_balance&g0.tab=1\n```\n\n> If you would rather not do this via RDP, open up port 9090 and you can hit the endpoint remotely.\n\n<br>\n\n## Step 8 - Install Grafana\n\nWhile Prometheus is our datasource, Grafana is going provide our reporting dashboard capability. Let's install it and configure a dashboard.\n\nWe will install using an APT repository beacuse it is easier to install and update. Grafana is available in the official Ubuntu packages repository, however the version of Grafana there may not be the latest, so we will use Grafana’s official repository.\n\nDownload the Grafana GPG key with wget, then pipe the output to apt-key. This will add the key to your APT installation’s list of trusted keys.\n\n```\nwget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -\n```\n\nAdd the Grafana repository to the APT sources.\n\n```\nsudo add-apt-repository \"deb https://packages.grafana.com/oss/deb stable main\"\n```\n\nRefresh the apt cache.\n\n```\nsudo apt update\n```\n\nMake sure Grafana is installed from the repository.\n\n```\napt-cache policy grafana\n```\n\nOutput should look like this:\n\n```\ngrafana:\n  Installed: (none)\n  Candidate: 6.7.3\n  Version table:\n     6.7.3 500\n        500 https://packages.grafana.com/oss/deb stable/main amd64 Packages\n     6.7.2 500\n        500 https://packages.grafana.com/oss/deb stable/main amd64 Packages\n     ...\n```\n\nVerify the version at the top matches the latest version shown [here](https://grafana.com/grafana/download). Then proceed with the installation.\n\n```\nsudo apt install grafana\n```\n\nStart the Grafana server.\n\n```\nsudo systemctl start grafana-server\n```\n\nCheck the status to make sure it's running correctly.\n\n```\nsudo systemctl status grafana-server\n```\n\nOutput should look something like this. If you did everything right, it should say **Active: active (running)**. If not then go back and repeat the steps to fix the problem. Press Q to quit.\n\n```\n● grafana-server.service - Grafana instance\n     Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)\n     Active: active (running) since Sun 2020-05-17 23:59:24 UTC; 5s ago\n       Docs: http://docs.grafana.org\n   Main PID: 35118 (grafana-server)\n      Tasks: 14 (limit: 9513)\n     Memory: 16.5M\n     CGroup: /system.slice/grafana-server.service\n```\n\nEnable Grafana to start on boot.\n\n```\nsudo systemctl enable grafana-server\n```\n\n### Configure Grafana login\n\nGreat job on getting this far! Now that you have everything up and running you can \ngo to [http://\\<yourServerIPAddress\\>:3000/] in a browser and the Grafana login screen should come up.\n\nYou can go further to set up a Nginx web server and add an SSL certificate to secure your connection. This is testnet stuff so I didn't bother. \n\nEnter `admin` for the username and password. It will prompt you to change your password and you should do that.\n\n### Configure Grafana data source\n\nLet's configure a datasource. Move your mouse over the gear icon on the left menu bar. A menu will pop-up - choose `Data Sources`.\n\nClick on `Add Data Source` and then choose `Prometheus`. Enter `http://localhost:9090` for the URL then click on `Save and Test`.\n\n### Import Grafana dashboard\n\nNow let's import a dashboard. Move your mouse over the `+` icon on the left menu bar. A menu will pop-up - choose `Import`.\n\nPaste the JSON from [here](https://github.com/GuillaumeMiralles/prysm-grafana-dashboard/blob/master/less_10_validators.json) and click `Load`. You should be able to view the dashboard. At first you won't have sufficient data, especially if you haven't run your validator yet, but after running for a while you will see some metrics.\n\n> Credit goes to Github user [GuillaumeMiralles](https://github.com/GuillaumeMiralles) for the ace dashboard.\n\n<br>\n\n## Final Remarks\n\nThat's it! I hope you enjoyed this guide! \n\n- If you have feedback you can reach me on [Twitter](https://www.twitter.com/SomerEsat).\n\n- If you liked this guide and think others would benefit from it then please share it!\n\nDonations/tips are always welcome. Mainnet ETH: 0x724F321C4efeD5e3C7CcA40168610c258c82d02F\n\n<br>\n\n## References\n\nI used a bunch of sites and guides to put this together. Thank you to those authors for showing me how!\n\n[Logging in as root is bad](https://askubuntu.com/questions/16178/why-is-it-bad-to-log-in-as-root)\n\n[Initial Server Setup with Ubuntu 20.04](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-20-04)\n\n[UFW firewall](https://help.ubuntu.com/community/UFW) \n\n[UFW Essentials](https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands)\n\n[xfce](https://www.xfce.org/)\n\n[Prysmatic Labs](https://prysmaticlabs.com/)\n\n[Prysmatic Eth2 Testnet](https://prylabs.net/)\n\n[Prysmatic Labs Discord](https://discord.gg/YMVYzv6)\n\n[Installing Prysm on GNU/Linux with Prysm.sh](https://docs.prylabs.network/docs/install/linux/)\n\n[ethdo wallet](https://docs.prylabs.network/docs/prysm-usage/wallet-keymanager/)\n\n[Bazel](https://docs.prylabs.network/docs/install/lin/bazel)\n\n[Prometheus](https://prometheus.io/download/)\n\n[Node_Exporter](https://github.com/prometheus/node_exporter)\n\n[How to Install Prometheus on Ubuntu 16.04](https://www.digitalocean.com/community/tutorials/how-to-install-prometheus-on-ubuntu-16-04)\n\n[How to install and secure Grafana on Ubuntu 18.04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-grafana-on-ubuntu-18-04)\n\n[GuillaumeMiralles Grafana dashboard](https://github.com/GuillaumeMiralles/prysm-grafana-dashboard/tree/master)\n\n[Markdownguide.org - Basic Syntax](https://www.markdownguide.org/basic-syntax/)\n\n[Stack Edit](https://stackedit.io/app#)\n\n[beaconcha.in](http://www.beaconcha.in)\n"
  }
]