diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..1899643 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ + * @dappnode/package-mantainers diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a5f346f..0747657 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,15 +15,24 @@ jobs: name: Build test if: github.event_name != 'push' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: npx @dappnode/dappnodesdk build --skip_save + e2e-test: + runs-on: gnosis + needs: build-test + if: github.event_name != 'push' + name: End to end tests + steps: + - uses: actions/checkout@v4 + - run: npx @dappnode/dappnodesdk@latest github-action test-end-to-end --errorLogsTimeout 120 --healthCheckUrl http://beacon-validator.nimbus-gnosis.dappnode:4500/eth/v1/beacon/genesis --network gnosis --environmentByService="{\"beacon-validator\":{\"CHECKPOINT_SYNC_URL\":\"https://checkpoint.gnosischain.com\"}}" + release: name: Release runs-on: ubuntu-latest if: github.event_name == 'push' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Publish run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset env: diff --git a/DISCLAIMER.md b/DISCLAIMER.md new file mode 100644 index 0000000..05509b5 --- /dev/null +++ b/DISCLAIMER.md @@ -0,0 +1,92 @@ +## Terms of Use - DAppNode + +Effective as of Oct 14, 2020 + +By downloading, accessing or using this DAppNode Package ("DNP"), you (referenced herein as “you” or the “user”) certify that you have read and agreed to the terms and conditions below (the “Terms”) which form a binding contract between you and DAppNode Association (referenced herein as “we” or “us”). If you do not agree to the Terms, do not download or use DAppNode. + +### About DAppNode + +DAppNode is Free Open Source Software ("FOSS") aimed at facilitating the use of decentralized technologies. DAppNode is developed by the DAppNode Association, a voluntary association with the purpose of empowering users to participate in decentralized networks and to help such networks become more resilient by promoting the deployment of more nodes. +The modular structure of the DAppNode FOSS allows for the wrapping of 3rd party software with the intention of facilitating its deployment. In no way we are responsible for the misuse of such software and in no way we warrant its functionalities. We accept no responsibiity for its errors, or for the errors that the wrapping process might have introduced. Any usage of DAppNode and a DNP is strictly at your own risk. + +### About this DNP + +This software is experimental, presented 'as is' and inherently carries risks. By installing it, you acknowledge that DAppNode Association has done its best to mitigate these risks and accept to waive any liability or responsibility for DAppNode Association in case of any shortage, discrepancy, damage, loss or destruction of any digital asset managed within this DAppNode package. + +This package stores private keys. Neither DAppNode Association nor the developers of this software can have access to your private keys, nor help you recover it if you lose them. + +You are solely responsible for keeping your private keys and password safe and to perform secure backups, as well as to restrict access to your computer and other equipment. To the extent permitted by applicable law, you agree to be responsible for all activities that have been conducted from your account. You must take all necessary steps to ensure that your private key, password, and recovery phrase remain confidential and secured. + +This is experimental open source software released under an GPLv3 license and may contain errors and/or bugs. No guarantee or representations whatsoever is made regarding its suitability (or its use) for any purpose or regarding its compliance with any applicable laws and regulations. Use of the software is at your own risk and discretion and by using the software you acknowledge that you have read this disclaimer, understand its contents, assume all risk related thereto and hereby release, waive, discharge and covenant not to sue DAppNode Association or any officers, employees or affiliates from and for any direct or indirect liability resulting from the use of the software as permissible by applicable laws and regulations. + +### Licensing Terms + +DAppNode FOSS is a fully open-source software program licensed pursuant to the GNU General Public License v3.0. + +The DAppNode name, the term “DAppNode” and all related names, logos, product and service names, designs and slogans are trademarks of DAppNode Association or its affiliates and/or licensors. You must not use such marks without our prior written permission. + +### Risks of Operating DAppNode + +The use of DAppNode and the 3rd party software included within its different DNPs can lead to loss of money. Blockchain technologies and in particular Ethereum are still experimental systems and ETH and other cryptocurrencies remain a risky investment. You alone are responsible for your actions on DAppNode including the security of your ETH and meeting any applicable minimum system requirements. + +Furthermore the Wider Crypto Industry including Ethereum is still nascesnt in most respects: Technologically it remains experimental and as such laws and regulations surrounding the industry are still developing, many of which contrast dramatically with the ideological values of much of the Ethereum community mainly related to censorhip. + +Use the 3rd party software included within its different DNPs might be subject to Terms and Conditions of the 3rd party. DAppNode association has done its best to include such Terms and Conditions, however we do not warrant the accuracy, completeness or usefulness of the 3rd party Terms and Conditions. Any reliance you place on such information is strictly at your own risk. We recommend consulting with the 3rd party responsible for the software for its most updated Terms and Conditions. + +We make no claims that DAppNode is appropriate or permitted for use in any specific jurisdiction. Access to DAppNode may not be legal by certain persons or in certain jurisdictions or countries. If you access DAppNode, you do so on your own initiative and are responsible for compliance with local laws. + +Some Internet plans will charge an additional amount for any excess upload bandwidth used that isn’t included in the plan and may terminate your connection without warning because of overuse. We advise that you check whether your Internet connection is subjected to such limitations and monitor your bandwidth use so that you can stop DAppNode before you reach your bandwidth limit. + +### OFAC + MEV-Boost + +One of the most contentious issues in Ethereum at the moment is related to a new technology known as Proposer-Builder Separation (PBS). So far, the primary implementation of this protocol is highly centralized to a single program called MEV-Boost, which is developed by Flashbots. This technology is designed to try to increase rewards for block proposers by finding the (MEV) Maximal Extractable Value. It is the profit a block proposer (miner or validator) can make through their ability to arbitrarily include, exclude, or re-order transactions from the blocks they propose. MEV-Boost accomplishes this by outsourcing the block building/transaction bundling duties of the validator to an external specialized builder running a builder relay(s). There are many builder relays availible from several different sources. The main differences between builder relays are primarily how they bundle these transactions, however the more important difference is whether or not the relay censors any transactions, by not includidng them in the block, regardless of the fee or tip the transaction is paying to be included in the block. This censorship is a legal and regulatory quandary that goes against the very ideological nature of Ethereum as a censorship resistent, free, open, and permissionless financial ecosystem. + +The censorship at the crux of this quandary is related to the Office of Foreign Asset Control (OFAC) which is one of the enforcement arms of the United States Treasury Department. OFAC has wide authority over financial transactions and is charged with monitoring and enforcing US financial sanctions against certain countries, organizations, and individuals. Penalties are strong for OFAC violations and the reach of OFAC extends far beyond US borders; according to OFAC's October 2021 "Sanctions Compliance Guidance for the Virtual Currency Industry", when asked "Who Must Comply with OFAC Sanctions?" the response is as follows: "All U.S. persons are required to comply with OFAC regulations. This includes all U.S. citizens and lawful permanent residents, +wherever located; all individuals and entities within the United States; and all entities organized under the laws of the United States or +any jurisdiction within the United States, including any foreign branches of those entities. Accordingly, anyone engaging in virtual currency +activities in the United States, or that involve U.S. individuals or entities, should be aware of OFAC sanctions requirements and the +circumstances in which they must comply with those requirements. +Depending on the authorities governing each sanctions program, others may also be required to adhere to OFAC sanctions requirements. +For example, OFAC’s Cuba, Iran, and North Korea sanctions programs extend sanctions prohibitions to certain foreign entities owned or +controlled by U.S. persons or U.S. financial institutions. Certain activities by non-U.S. persons that involve the United States, U.S. persons, +or goods or services exported from the United States may also be subject to OFAC sanctions regulations. +Additionally, in most sanctions programs, any transaction that causes a violation — including a transaction by a non-U.S. person that causes +a U.S. person to violate sanctions — is also prohibited. For certain sanctions programs, U.S. persons, wherever located, also are prohibited +from facilitating actions on behalf of non-U.S. persons if the activity would be prohibited by sanctions regulations if directly performed by a +U.S. person or within the United States. +**Strict Liability Regulations** +OFAC may impose civil penalties for sanctions violations generally based on a strict liability legal standard. This means that, in many cases, +a U.S. person may be held civilly liable for sanctions violations even without having knowledge or reason to know it was engaging in such +a violation. As a general matter, however, OFAC takes into consideration the totality of facts and circumstances surrounding an apparent +violation to determine the appropriate enforcement response. " + +As such, relay providers offer: + - Non-Compliant: relays that attempt to maximize the fees paid to the block proposer by using every possible strategy, including not filtering or censoring any transactions, even those that may be destined to or coming from an address that has been blacklisted by OFAC. + - Compliant: relays that attempt to maximize fees paid to the block proposor, but filter out and censor any transactions destined to or coming from an OFAC blacklisted address. + +Your use of DAppNode is subject to all applicable laws of any governmental authority You are subject to, including, without limitation, federal, state and foreign securities laws, tax laws, tariff and trade laws, ordinances, judgments, decrees, injunctions, writs and orders or like actions of any governmental authority and rules, regulations, orders, interpretations, licenses, and permits of any federal, regional, state, county, municipal or other governmental authority and you agree to comply with all such laws in Your use of DAppNode. You are solely responsible for determining what rules and regulations apply to Your personal actions that may arise as the result of using MEV-Boost and/or any relays that do not comply with OFAC. The owners of, or contributors to, DAppNode are not responsible for any unnanounced changes to the availability or reliability of any relays, nor determining the rules and regulations that apply to cryptocurrency transactions users may propose using the DAppNode Platform. DAppNode does not explicitly endorse the use of MEV-Boost or any paricular relay in any way; it is Your responsibility to determine what laws apply to You and abide by them. DAppNode will not be held liable for any of your choices or actions as a result of using DAppNode. Continued use of DAppNode constitutes Your understanding and agreement with these updated terms. + +### Warranty Disclaimer + +DAPPNODE IS PROVIDED ON AN “AS-IS” BASIS AND MAY INCLUDE ERRORS, OMISSIONS, OR OTHER INACCURACIES. DAPPNODE ASSOCIATION AND ITS CONTRIBUTORS MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT DAPNODDE FOR ANY PURPOSE, AND HEREBY EXPRESSLY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT OR ANY OTHER IMPLIED WARRANTY UNDER THE UNIFORM COMPUTER INFORMATION TRANSACTIONS ACT AS ENACTED BY ANY STATE. WE ALSO MAKE NO REPRESENTATIONS OR WARRANTIES THAT DAPPNODE WILL OPERATE ERROR-FREE, UNINTERRUPTED, OR IN A MANNER THAT WILL MEET YOUR REQUIREMENTS AND/OR NEEDS. THEREFORE, YOU ASSUME THE ENTIRE RISK REGARDING THE QUALITY AND/OR PERFORMANCE OF DAPPNODE AND ANY TRANSACTIONS ENTERED INTO THEREON. + +### Limitation of Liability + +In no event will DAppNode Association or any of its contributors be liable, whether in contract, warranty, tort (including negligence, whether active, passive or imputed), product liability, strict liability or other theory, breach of statutory duty or otherwise arising out of, or in connection with, your use of DAppNode, for any direct, indirect, incidental, special or consequential damages (including any loss of profits or data, business interruption or other pecuniary loss, or damage, loss or other compromise of data, in each case whether direct, indirect, incidental, special or consequential) arising out of the use of DAppNode, even if we or other users have been advised of the possibility of such damages. The foregoing limitations and disclaimers shall apply to the maximum extent permitted by applicable law, even if any remedy fails of its essential purpose. You acknowledge and agree that the limitations of liability afforded us hereunder constitute a material and actual inducement and condition to entering into these Terms, and are reasonable, fair and equitable in scope to protect our legitimate interests in light of the fact that we are not receiving consideration from you for providing DAppNode. + +### Indemnification + +To the maximum extent permitted by law, you will defend, indemnify and hold DAppNode and its contributors harmless from and against any and all claims, actions, suits, investigations, or proceedings by any third party (including any party or purported party to or beneficiary or purported beneficiary of any transaction on DAppNode), as well as any and all losses, liabilities, +damages, costs, and expenses (including reasonable attorneys’ fees) arising out of, accruing from, or in any way related to (i) your breach of the terms of this Agreement, (ii) any transaction, or the failure to occur of any transaction on DAppNode, and (iii) your negligence, fraud, or willful misconduct. + +### Compliance with Laws and Tax Obligations + +Your use of DAppNode is subject to all applicable laws of any governmental authority, including, without limitation, federal, state and foreign securities laws, tax laws, tariff and trade laws, ordinances, judgments, decrees, injunctions, writs and orders or like actions of any governmental authority and rules, regulations, orders, interpretations, licenses, and permits of any federal, regional, state, county, municipal or other governmental authority and you agree to comply with all such laws in your use of DAppNode. The users of DAppNode are solely responsible to determinate what, if any, taxes apply to their cryptocurrency transactions. The owners of, or contributors to, DAppNode are not responsible for determining the taxes that apply to cryptocurrency transactions. + +### Miscellaneous + +We reserve the right to revise these Terms, and your rights and obligations are at all times subject to the then-current Terms provided on DAppNode. Your continued use of DAppNode constitutes acceptance of such revised Terms. + +These Terms constitute the entire agreement between you and DAppNode Association regarding use of DAppNode FOSS and will supersede all prior agreements whether, written or oral. No usage of trade or other regular practice or method of dealing between the parties will be used to modify, interpret, supplement, or alter the terms of these Terms. + +If any portion of these Terms is held invalid or unenforceable, such invalidity or enforceability will not affect the other provisions of these Terms, which will remain in full force and effect, and the invalid or unenforceable portion will be given effect to the greatest extent possible. The failure of a party to require performance of any provision will not affect that party’s right to require performance at any time thereafter, nor will a waiver of any breach or default of these Terms or any provision of these Terms constitute a waiver of any subsequent breach or default or a waiver of the provision itself. diff --git a/GETTING_STARTED.md b/GETTING_STARTED.md index 62e5612..b56057b 100644 --- a/GETTING_STARTED.md +++ b/GETTING_STARTED.md @@ -1,3 +1,4 @@ -## Welcome to your eth2 client Nimbus-gnosis: +## Welcome to the Gnosis Chain Consensus Client: Nimbus -- Upload your keystores in the [web3signer-ui](http://ui.web3signer-gnosis.dappnode?signer_url=http://web3signer.web3signer-gnosis.dappnode:9000) (do not have web3singer yet? install it [here](http://my.dappnode/#/installer/web3signer-gnosis.dnp.dappnode.eth)) +- Your keystores should now be managed in the Web3Signer's [New Staking Brain](http://brain.web3signer-gnosis.dappnode/) +- All Staking Management has a new home in the Comprehensive [StakersUI](http://my.dappnode/stakers/gnosis) diff --git a/README.md b/README.md index 87391d5..ad4a1da 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,9 @@ -# Nimbus DAppNode package (gnosis config) +# Nimbus Gnosis Dappnode package -**Nimbus gnosis ETH2.0 Beacon chain + validator** +**Nimbus ETH2.0 Beacon chain + validator** -Nimbus is a client implementation for both the consensus layer (eth2) and execution layer (eth1) that strives to be as lightweight as possible in terms of resources used. This allows it to perform well on embedded systems, resource-restricted devices -- including Raspberry Pis and mobile devices. +Nimbus is a client implementation for both the consensus layer (eth2) and execution layer (eth1) that strives to be as lightweight as possible in terms of resources used. This allows it to perform well on embedded systems, resource-restricted devices (including Raspberry Pis and mobile devices). However, resource-restricted hardware is not the only thing Nimbus is good for. Its low resource consumption makes it easy to run Nimbus together with other workloads on your server (this is especially valuable for stakers looking to lower the cost of their server instances). ![avatar](nimbus-avatar.png) - -| Updated | Champion/s | -| :----------------: | :-------------: | -| :heavy_check_mark: | @pablomendez_95 | diff --git a/build/Dockerfile b/build/Dockerfile index eda0e20..69eb3c1 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -1,11 +1,12 @@ ARG UPSTREAM_VERSION -FROM statusim/nimbus-eth2:multiarch-${UPSTREAM_VERSION} +FROM ghcr.io/gnosischain/gnosis-nimbus-eth2:${UPSTREAM_VERSION} USER root RUN apt update && apt install curl jq -y COPY entrypoint.sh /usr/bin/entrypoint.sh COPY auth-token /home/user/nimbus-eth2/build/data/auth-token +COPY jwtsecret.hex /jwtsecret ENTRYPOINT [ "entrypoint.sh" ] \ No newline at end of file diff --git a/build/entrypoint.sh b/build/entrypoint.sh index 3e51187..9be7964 100755 --- a/build/entrypoint.sh +++ b/build/entrypoint.sh @@ -1,9 +1,7 @@ #!/bin/bash -CLIENT="nimbus" NETWORK="gnosis" VALIDATOR_PORT=3500 -WEB3SIGNER_API="http://web3signer.web3signer-${NETWORK}.dappnode:9000" DATA_DIR="/home/user/nimbus-eth2/build/data" VALIDATORS_DIR="${DATA_DIR}/validators" @@ -12,50 +10,41 @@ TOKEN_FILE="${DATA_DIR}/auth-token" # Create validators dir mkdir -p ${VALIDATORS_DIR} -WEB3SIGNER_RESPONSE=$(curl -s -w "%{http_code}" -X GET -H "Content-Type: application/json" -H "Host: beacon-validator.${CLIENT}-${NETWORK}.dappnode" "${WEB3SIGNER_API}/eth/v1/keystores") -HTTP_CODE=${WEB3SIGNER_RESPONSE: -3} -CONTENT=$(echo "${WEB3SIGNER_RESPONSE}" | head -c-4) -if [ "${HTTP_CODE}" == "403" ] && [ "${CONTENT}" == "*Host not authorized*" ]; then - echo "${CLIENT} is not authorized to access the Web3Signer API. Start without pubkeys" -elif [ "$HTTP_CODE" != "200" ]; then - echo "Failed to get keystores from web3signer, HTTP code: ${HTTP_CODE}, content: ${CONTENT}" -else - PUBLIC_KEYS_WEB3SIGNER=($(echo "${CONTENT}" | jq -r 'try .data[].validating_pubkey')) - if [ ${#PUBLIC_KEYS_WEB3SIGNER[@]} -gt 0 ]; then - echo "found validators in web3signer, starting vc with pubkeys: ${PUBLIC_KEYS_WEB3SIGNER[*]}" - for PUBLIC_KEY in "${PUBLIC_KEYS_WEB3SIGNER[@]}"; do - # Docs: https://github.com/status-im/nimbus-eth2/pull/3077#issue-1049195359 - # create a keystore file with the following format - # { - # "version": "1", - # "description": "This is simple remote keystore file", - # "type": "web3signer", - # "pubkey": "0x8107ff6a5cfd1993f0dc19a6a9ec7dc742a528dd6f2e3e10189a4a6fc489ae6c7ba9070ea4e2e328f0d20b91cc129733", - # "remote": "http://127.0.0.1:15052", - # "ignore_ssl_verification": true - # } - - echo "creating keystore for pubkey: ${PUBLIC_KEY}" - mkdir -p "${VALIDATORS_DIR}"/"${PUBLIC_KEY}" - echo "{\"version\": 1,\"description\":\"This is simple remote keystore file\",\"type\":\"web3signer\",\"pubkey\":\"${PUBLIC_KEY}\",\"remote\":\"${WEB3SIGNER_API}\",\"ignore_ssl_verification\":true}" >/home/user/nimbus-eth2/build/data/validators/${PUBLIC_KEY}/remote_keystore.json - done - fi -fi +case $_DAPPNODE_GLOBAL_EXECUTION_CLIENT_GNOSIS in +"nethermind-xdai.dnp.dappnode.eth") + HTTP_ENGINE="http://nethermind-xdai.dappnode:8551" + ;; +"gnosis-erigon.dnp.dappnode.eth") + HTTP_ENGINE="http://gnosis-erigon.dappnode:8551" + ;; +*) + echo "Unknown value for _DAPPNODE_GLOBAL_EXECUTION_CLIENT_GNOSIS: $_DAPPNODE_GLOBAL_EXECUTION_CLIENT_GNOSIS" + # TODO: this default value must be temporary and changed once there is more than 1 EC + HTTP_ENGINE="http://nethermind-xdai.dappnode:8551" + ;; +esac # Run checkpoint sync script if provided [[ -n $CHECKPOINT_SYNC_URL ]] && - /home/user/nimbus-eth2/build/nimbus_beacon_node trustedNodeSync \ + /home/user/nimbus_beacon_node trustedNodeSync \ --network=${NETWORK} \ --trusted-node-url=${CHECKPOINT_SYNC_URL} \ --backfill=false \ --data-dir=//home/user/nimbus-eth2/build/data -[[ -n $WEB3_BACKUP_URL ]] && EXTRA_OPTS="--web3-url=${WEB3_BACKUP_URL} ${EXTRA_OPTS}" -exec -c /home/user/nimbus-eth2/build/nimbus_beacon_node \ +#Apply graffiti limit to non-unicode characters +oLang=$LANG oLcAll=$LC_ALL +LANG=C LC_ALL=C +graffitiString=${GRAFFITI:0:32} +LANG=$oLang LC_ALL=$oLcAll + +exec -c /home/user/nimbus_beacon_node \ --network=${NETWORK} \ --data-dir=${DATA_DIR} \ + --tcp-port=$P2P_TCP_PORT \ + --udp-port=$P2P_UDP_PORT \ --validators-dir=${VALIDATORS_DIR} \ - --log-level=info \ + --log-level=${LOG_TYPE} \ --rest \ --rest-port=4500 \ --rest-address=0.0.0.0 \ @@ -66,5 +55,8 @@ exec -c /home/user/nimbus-eth2/build/nimbus_beacon_node \ --keymanager-port=${VALIDATOR_PORT} \ --keymanager-address=0.0.0.0 \ --keymanager-token-file=${TOKEN_FILE} \ - --graffiti=\"$GRAFFITI\" \ - $EXTRA_OPTS + --graffiti="${graffitiString}" \ + --jwt-secret=/jwtsecret \ + --web3-url=$HTTP_ENGINE \ + --suggested-fee-recipient="${FEE_RECIPIENT_ADDRESS}" \ + $EXTRA_OPTS \ No newline at end of file diff --git a/build/jwtsecret.hex b/build/jwtsecret.hex new file mode 100644 index 0000000..53d2fa8 --- /dev/null +++ b/build/jwtsecret.hex @@ -0,0 +1 @@ +7ad9cfdec75eceb662f5e48f5765701c17f51a5233a60fbcfa5f9e495fa99d17 \ No newline at end of file diff --git a/dappnode_package.json b/dappnode_package.json index 64cfc30..9a8cf46 100644 --- a/dappnode_package.json +++ b/dappnode_package.json @@ -1,17 +1,18 @@ { "name": "nimbus-gnosis.dnp.dappnode.eth", "version": "0.1.0", - "upstreamVersion": "v22.6.0", + "upstreamVersion": "v24.1.1", "upstreamRepo": "status-im/nimbus-eth2", "upstreamArg": "UPSTREAM_VERSION", "architectures": ["linux/amd64"], - "shortDescription": "Nimbus gnosis ETH2.0 Beacon chain + validator", - "description": "nimbus-gnosis.public.dappnode.eth description", + "shortDescription": "Nimbus ETH2.0 Beacon chain + validator", + "description": "Nimbus is a client implementation that strives to be as lightweight as possible in terms of resources used. This allows it to perform well on embedded systems, resource-restricted devices -- including Raspberry Pis and mobile devices -- and multi-purpose servers.", "type": "service", "author": "DAppNode Association (https://github.com/dappnode)", "contributors": [ "pablo (https://github.com/pablomendezroyo)", - "marce (https://github.com/mgarciate)" + "marce (https://github.com/mgarciate)", + "filoozom (https://github.com/filoozom)" ], "license": "GPL-3.0", "repository": { @@ -22,21 +23,27 @@ "url": "https://github.com/dappnode/DAppNodePackage-nimbus-gnosis/issues" }, "requirements": { - "minimumDappnodeVersion": "0.2.51" + "minimumDappnodeVersion": "0.2.60" }, - "categories": ["Blockchain", "ETH2.0"], + "categories": ["Blockchain"], "links": { - "ui": "http://ui.web3signer-gnosis.dappnode?signer_url=http://web3signer.web3signer-gnosis.dappnode:9000", + "ui": "http://brain.web3signer-gnosis.dappnode", "homepage": "https://nimbus.team/", "readme": "https://github.com/dappnode/DAppNodePackage-nimbus-gnosis", - "docs": "https://www.nimbusproject.org/docs" + "docs": "https://nimbus.guide" }, "chain": { "driver": "ethereum-beacon-chain", "serviceName": "beacon-validator", "portNumber": 4500 }, - "dependencies": { - "web3signer-gnosis.dnp.dappnode.eth": "latest" - } + "warnings": { + "onRemove": "Make sure your StakersUI does not have this client selected! Double check in the Stakers Tab in the left NavBar" + }, + "globalEnvs": [ + { + "envs": ["EXECUTION_CLIENT_GNOSIS"], + "services": ["beacon-validator"] + } + ] } diff --git a/docker-compose.yml b/docker-compose.yml index 0643058..2fad77c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,22 +4,22 @@ services: build: context: ./build args: - UPSTREAM_VERSION: v22.6.0 + UPSTREAM_VERSION: v24.1.1 restart: unless-stopped stop_grace_period: 1m environment: LOG_TYPE: INFO - HTTP_WEB3PROVIDER: "http://nethermind-xdai.dappnode:8545" GRAFFITI: validating_from_DAppNode - WEB3_BACKUP: "https://rpc.gnosischain.com/" + P2P_TCP_PORT: 9106 + P2P_UDP_PORT: 9106 CHECKPOINT_SYNC_URL: "" EXTRA_OPTS: "" FEE_RECIPIENT_ADDRESS: "" ports: - - 9000/tcp - - 9000/udp + - "9106:9106/tcp" + - "9106:9106/udp" volumes: - - "nimbus-gnosis-data:/home/user/nimbus-eth2/build/data" + - "nimbus-data:/home/user/nimbus-eth2/build/data" image: "beacon-validator.nimbus-gnosis.dnp.dappnode.eth:0.1.0" volumes: - nimbus-gnosis-data: {} + nimbus-data: {} diff --git a/nimbus-avatar.png b/nimbus-avatar.png index 8214f68..e66a1d8 100644 Binary files a/nimbus-avatar.png and b/nimbus-avatar.png differ diff --git a/nimbus-grafana-dashboard.json b/nimbus-grafana-dashboard.json index 0a4b869..e268e4c 100644 --- a/nimbus-grafana-dashboard.json +++ b/nimbus-grafana-dashboard.json @@ -22,7 +22,11 @@ "cacheTimeout": null, "colorBackground": true, "colorValue": false, - "colors": ["#37872D", "#37872D", "#37872D"], + "colors": [ + "#37872D", + "#37872D", + "#37872D" + ], "datasource": null, "description": "", "fieldConfig": { @@ -114,7 +118,11 @@ "cacheTimeout": null, "colorBackground": true, "colorValue": false, - "colors": ["#F2495C", "#F2495C", "#F2495C"], + "colors": [ + "#F2495C", + "#F2495C", + "#F2495C" + ], "datasource": null, "fieldConfig": { "defaults": { @@ -205,7 +213,11 @@ "cacheTimeout": null, "colorBackground": true, "colorValue": false, - "colors": ["#1F60C4", "#1F60C4", "#1F60C4"], + "colors": [ + "#1F60C4", + "#1F60C4", + "#1F60C4" + ], "datasource": null, "description": "", "fieldConfig": { @@ -313,7 +325,7 @@ } ] }, - "unit": "ETH" + "unit": "mGNO" }, "overrides": [] }, @@ -330,14 +342,16 @@ "justifyMode": "auto", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "values": false } }, "pluginVersion": "7.0.0", "targets": [ { - "expr": "attached_validator_balance_total{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}/1000000000", + "expr": "attached_validator_balance_total{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}/1000000000", "instant": true, "interval": "", "legendFormat": "vbal", @@ -346,13 +360,13 @@ ], "timeFrom": null, "timeShift": null, - "title": "Total Validator Balance (ETH)", + "title": "Total Validator Balance (mGNO)", "type": "stat" }, { "cacheTimeout": null, "datasource": null, - "description": "Total ETH return on the initial effective stake of active local validators.", + "description": "Total mGNO return on the initial effective stake of active local validators.", "fieldConfig": { "defaults": { "custom": {}, @@ -384,7 +398,7 @@ } ] }, - "unit": "ETH" + "unit": "mGNO" }, "overrides": [] }, @@ -401,20 +415,24 @@ "options": { "colorMode": "value", "fieldOptions": { - "calcs": ["lastNotNull"] + "calcs": [ + "lastNotNull" + ] }, "graphMode": "area", "justifyMode": "auto", "orientation": "horizontal", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "values": false } }, "pluginVersion": "7.0.0", "targets": [ { - "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"})/1000000000-(count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)*32)", + "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"})/1000000000-(count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)*32)", "instant": true, "interval": "", "legendFormat": "", @@ -423,7 +441,7 @@ ], "timeFrom": null, "timeShift": null, - "title": "Total Earnings (ETH)", + "title": "Total Earnings (mGNO)", "type": "stat" }, { @@ -431,7 +449,11 @@ "colorBackground": false, "colorPostfix": true, "colorValue": true, - "colors": ["#F2495C", "#FADE2A", "#73BF69"], + "colors": [ + "#F2495C", + "#FADE2A", + "#73BF69" + ], "datasource": null, "decimals": 4, "description": "Total percentage return on the initial effective stake of active local validators. Excess deposits will be reflected as earnings.", @@ -495,7 +517,7 @@ "tableColumn": "", "targets": [ { - "expr": "(sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"})/1000000000-(count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)*32))/(count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)*32) ", + "expr": "(sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"})/1000000000-(count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)*32))/(count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)*32) ", "instant": true, "interval": "", "legendFormat": "", @@ -556,7 +578,11 @@ "alias": "", "align": "auto", "colorMode": null, - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 2, "mappingType": 1, @@ -569,7 +595,11 @@ "alias": "public key", "align": "auto", "colorMode": null, - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "decimals": 2, "link": false, "linkTargetBlank": false, @@ -584,7 +614,11 @@ "alias": "", "align": "auto", "colorMode": null, - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 2, "mappingType": 1, @@ -597,7 +631,11 @@ "alias": "", "align": "auto", "colorMode": null, - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 2, "mappingType": 1, @@ -610,7 +648,11 @@ "alias": "attested", "align": "auto", "colorMode": null, - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 0, "mappingType": 1, @@ -623,7 +665,11 @@ "alias": "aggregated", "align": "auto", "colorMode": null, - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 0, "mappingType": 1, @@ -636,7 +682,11 @@ "alias": "proposed", "align": "auto", "colorMode": null, - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 0, "mappingType": 1, @@ -649,7 +699,11 @@ "alias": "failed attestations", "align": "auto", "colorMode": "value", - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 0, "mappingType": 1, @@ -662,7 +716,11 @@ "alias": "failed aggregations", "align": "auto", "colorMode": "value", - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 0, "mappingType": 1, @@ -675,7 +733,11 @@ "alias": "balance", "align": "auto", "colorMode": "value", - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 4, "link": false, @@ -684,7 +746,10 @@ "linkUrl": "", "mappingType": 1, "pattern": "Value #F", - "thresholds": ["24", "32"], + "thresholds": [ + "24", + "32" + ], "type": "number", "unit": "short" }, @@ -692,7 +757,11 @@ "alias": "pubkey", "align": "auto", "colorMode": null, - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 2, "link": false, @@ -709,12 +778,18 @@ "alias": "last inclusion distance", "align": "auto", "colorMode": null, - "colors": ["#F2495C", "#FF9830", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "#F2495C", + "#FF9830", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 0, "mappingType": 1, "pattern": "Value #H", - "thresholds": [""], + "thresholds": [ + "" + ], "type": "number", "unit": "short" }, @@ -722,7 +797,11 @@ "alias": "status", "align": "auto", "colorMode": null, - "colors": ["rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)"], + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], "dateFormat": "YYYY-MM-DD HH:mm:ss", "decimals": 0, "mappingType": 1, @@ -764,7 +843,7 @@ ], "targets": [ { - "expr": "label_replace(max by(pubkey) (attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}/1000000000), \"pubkey_short\", \"$1\", \"pubkey\", \"(.{8}).*\") ", + "expr": "label_replace(max by(pubkey) (attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}/1000000000), \"pubkey_short\", \"$1\", \"pubkey\", \"(.{8}).*\") ", "format": "table", "instant": true, "interval": "", @@ -831,14 +910,16 @@ "justifyMode": "auto", "orientation": "auto", "reduceOptions": { - "calcs": ["mean"], + "calcs": [ + "mean" + ], "values": false } }, "pluginVersion": "7.0.0", "targets": [ { - "expr": "libp2p_peers{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "libp2p_peers{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "instant": true, "interval": "", "legendFormat": "", @@ -856,7 +937,11 @@ "colorPostfix": true, "colorPrefix": false, "colorValue": true, - "colors": ["#F2495C", "rgba(237, 129, 40, 0.89)", "#299c46"], + "colors": [ + "#F2495C", + "rgba(237, 129, 40, 0.89)", + "#299c46" + ], "datasource": null, "decimals": 1, "description": "The length of time the beacon chain process has been running", @@ -917,10 +1002,10 @@ "ymax": null, "ymin": null }, - "tableColumn": "{instance=\"127.0.0.1:8008\", instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "tableColumn": "{instance=\"127.0.0.1:8008\", instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "targets": [ { - "expr": "(time()-process_start_time_seconds{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"})/3600", + "expr": "(time()-process_start_time_seconds{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"})/3600", "instant": true, "interval": "", "legendFormat": "", @@ -978,7 +1063,9 @@ "justifyMode": "center", "orientation": "auto", "reduceOptions": { - "calcs": ["last"], + "calcs": [ + "last" + ], "fields": "", "values": false } @@ -986,7 +1073,7 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "beacon_active_validators{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} ", + "expr": "beacon_active_validators{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} ", "instant": true, "interval": "", "legendFormat": "active", @@ -1046,7 +1133,9 @@ "justifyMode": "auto", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false } @@ -1054,7 +1143,7 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "clamp_min((1-(4*((finalization_delay{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}-2)/100))),0)", + "expr": "clamp_min((1-(4*((finalization_delay{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}-2)/100))),0)", "interval": "", "legendFormat": "", "refId": "A" @@ -1067,7 +1156,7 @@ }, { "datasource": "Prometheus", - "description": "Sum of all validator balances multiplied by the price of ETH in USD.", + "description": "Sum of all validator balances multiplied by the price of mGNO in USD.", "fieldConfig": { "defaults": { "custom": {}, @@ -1100,7 +1189,9 @@ "justifyMode": "auto", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "values": false } }, @@ -1115,7 +1206,7 @@ "refId": "A" }, { - "expr": "attached_validator_balance_total{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}/1000000000", + "expr": "attached_validator_balance_total{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}/1000000000", "hide": false, "instant": true, "interval": "", @@ -1192,20 +1283,24 @@ "options": { "colorMode": "value", "fieldOptions": { - "calcs": ["lastNotNull"] + "calcs": [ + "lastNotNull" + ] }, "graphMode": "area", "justifyMode": "auto", "orientation": "horizontal", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "values": false } }, "pluginVersion": "7.0.0", "targets": [ { - "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"})/1000000000-(count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)*32)", + "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"})/1000000000-(count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)*32)", "instant": true, "interval": "", "legendFormat": "total_balance", @@ -1246,7 +1341,7 @@ { "cacheTimeout": null, "datasource": null, - "description": "Price of ETH in USD.", + "description": "Price of mGNO in USD.", "fieldConfig": { "defaults": { "custom": {}, @@ -1288,13 +1383,17 @@ "options": { "colorMode": "value", "fieldOptions": { - "calcs": ["lastNotNull"] + "calcs": [ + "lastNotNull" + ] }, "graphMode": "area", "justifyMode": "auto", "orientation": "horizontal", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "values": false } }, @@ -1310,7 +1409,7 @@ ], "timeFrom": null, "timeShift": null, - "title": "ETH Price (USD)", + "title": "mGNO Price (USD)", "transformations": [ { "id": "calculateField", @@ -1380,7 +1479,7 @@ "steppedLine": false, "targets": [ { - "expr": "libp2p_peers{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "libp2p_peers{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "interval": "", "legendFormat": "peers", "refId": "A" @@ -1462,7 +1561,9 @@ "justifyMode": "center", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false } @@ -1470,14 +1571,14 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "beacon_current_justified_epoch{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_current_justified_epoch{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "instant": true, "interval": "", "legendFormat": "justified", "refId": "C" }, { - "expr": "beacon_finalized_epoch {instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} ", + "expr": "beacon_finalized_epoch {instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} ", "format": "time_series", "instant": true, "interval": "", @@ -1523,7 +1624,9 @@ "justifyMode": "center", "orientation": "auto", "reduceOptions": { - "calcs": ["last"], + "calcs": [ + "last" + ], "fields": "", "values": false } @@ -1531,14 +1634,14 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "beacon_slot{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_slot{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "instant": true, "interval": "", "legendFormat": "current slot", "refId": "A" }, { - "expr": "beacon_head_slot{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_head_slot{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "instant": true, "interval": "", "legendFormat": "head slot", @@ -1554,7 +1657,11 @@ "cacheTimeout": null, "colorBackground": true, "colorValue": false, - "colors": ["#8F3BB8", "#8F3BB8", "#8F3BB8"], + "colors": [ + "#8F3BB8", + "#8F3BB8", + "#8F3BB8" + ], "datasource": null, "fieldConfig": { "defaults": { @@ -1708,13 +1815,13 @@ "steppedLine": false, "targets": [ { - "expr": "beacon_pending_deposits{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_pending_deposits{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "interval": "", "legendFormat": "pending", "refId": "B" }, { - "expr": "beacon_active_validators{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_active_validators{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "interval": "", "legendFormat": "active validators", "refId": "D" @@ -1768,7 +1875,11 @@ "colorBackground": false, "colorPostfix": true, "colorValue": true, - "colors": ["#F2495C", "#FADE2A", "#73BF69"], + "colors": [ + "#F2495C", + "#FADE2A", + "#73BF69" + ], "datasource": null, "decimals": 4, "description": "Increase in all local validator balances over the last hour", @@ -1778,7 +1889,7 @@ }, "overrides": [] }, - "format": "ETH", + "format": "mGNO", "gauge": { "maxValue": 100, "minValue": 0, @@ -1832,7 +1943,7 @@ "tableColumn": "", "targets": [ { - "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"})/1000000000 - sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 1h != 0)/1000000000 - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 1h > 16))", + "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"})/1000000000 - sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 1h != 0)/1000000000 - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 1h > 16))", "instant": false, "interval": "", "intervalFactor": 3, @@ -1860,7 +1971,11 @@ "colorBackground": false, "colorPostfix": true, "colorValue": true, - "colors": ["#d44a3a", "#FADE2A", "#73BF69"], + "colors": [ + "#d44a3a", + "#FADE2A", + "#73BF69" + ], "datasource": null, "decimals": 4, "description": "Increase in all local validator balances over the last day", @@ -1870,7 +1985,7 @@ }, "overrides": [] }, - "format": "ETH", + "format": "mGNO", "gauge": { "maxValue": 100, "minValue": 0, @@ -1924,7 +2039,7 @@ "tableColumn": "", "targets": [ { - "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"})/1000000000 - sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 1d != 0)/1000000000 - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 1d > 16))", + "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"})/1000000000 - sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 1d != 0)/1000000000 - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 1d > 16))", "instant": false, "interval": "", "legendFormat": "", @@ -1951,7 +2066,11 @@ "colorBackground": false, "colorPostfix": true, "colorValue": true, - "colors": ["#F2495C", "#FADE2A", "#73BF69"], + "colors": [ + "#F2495C", + "#FADE2A", + "#73BF69" + ], "datasource": null, "decimals": 4, "description": "Increase in all local validator balances over the last week", @@ -1961,7 +2080,7 @@ }, "overrides": [] }, - "format": "ETH", + "format": "mGNO", "gauge": { "maxValue": 100, "minValue": 0, @@ -2015,7 +2134,7 @@ "tableColumn": "", "targets": [ { - "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"})/1000000000 - sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 7d != 0)/1000000000 - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 7d > 16))", + "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"})/1000000000 - sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 7d != 0)/1000000000 - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 7d > 16))", "instant": false, "interval": "", "legendFormat": "", @@ -2042,7 +2161,11 @@ "colorBackground": false, "colorPostfix": true, "colorValue": true, - "colors": ["#F2495C", "#FADE2A", "#299c46"], + "colors": [ + "#F2495C", + "#FADE2A", + "#299c46" + ], "datasource": null, "decimals": 4, "description": "Increase in all local validator balances over the last month", @@ -2052,7 +2175,7 @@ }, "overrides": [] }, - "format": "ETH", + "format": "mGNO", "gauge": { "maxValue": 100, "minValue": 0, @@ -2106,7 +2229,7 @@ "tableColumn": "", "targets": [ { - "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"})/1000000000 - sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 30d != 0)/1000000000 - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 30d > 16))", + "expr": "sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"})/1000000000 - sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 30d != 0)/1000000000 - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 30d > 16))", "instant": false, "interval": "", "legendFormat": "", @@ -2161,7 +2284,9 @@ "justifyMode": "center", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false } @@ -2169,14 +2294,14 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "beacon_blocks_proposed_total{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_blocks_proposed_total{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "instant": true, "interval": "", "legendFormat": "proposals", "refId": "B" }, { - "expr": "beacon_attestations_sent_total{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_attestations_sent_total{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "interval": "", "legendFormat": "attestations", "refId": "A" @@ -2220,7 +2345,9 @@ "justifyMode": "center", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false } @@ -2228,13 +2355,13 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "beacon_proposer_slashings_received_total{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_proposer_slashings_received_total{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "interval": "", "legendFormat": "proposer", "refId": "A" }, { - "expr": "beacon_attester_slashings_received_total{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_attester_slashings_received_total{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "instant": true, "interval": "", "legendFormat": "attester", @@ -2251,7 +2378,11 @@ "colorBackground": false, "colorPostfix": true, "colorValue": true, - "colors": ["#F2495C", "#FADE2A", "#73BF69"], + "colors": [ + "#F2495C", + "#FADE2A", + "#73BF69" + ], "datasource": null, "decimals": 4, "description": "Percentage increase in all local validator balances over the last hour", @@ -2315,7 +2446,7 @@ "tableColumn": "annualized hourly return", "targets": [ { - "expr": "((sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}) - sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 1h != 0) - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 1h > 16)))/(32 * avg_over_time(count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)[1h:])))/1000000000 * 365 * 24", + "expr": "((sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}) - sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 1h != 0) - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 1h > 16)))/(32 * avg_over_time(count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)[1h:])))/1000000000 * 365 * 24", "hide": false, "interval": "", "legendFormat": "annualized hourly return", @@ -2342,7 +2473,11 @@ "colorBackground": false, "colorPostfix": true, "colorValue": true, - "colors": ["#F2495C", "#FADE2A", "#73BF69"], + "colors": [ + "#F2495C", + "#FADE2A", + "#73BF69" + ], "datasource": null, "decimals": 4, "description": "Percentage increase in all local validator balances over the last day", @@ -2406,7 +2541,7 @@ "tableColumn": "annualized daily return", "targets": [ { - "expr": "((sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}) - sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 1d != 0) - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 1d > 16)))/(32 * avg_over_time(count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)[1d:])))/1000000000 * 365", + "expr": "((sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}) - sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 1d != 0) - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 1d > 16)))/(32 * avg_over_time(count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)[1d:])))/1000000000 * 365", "hide": false, "interval": "", "legendFormat": "annualized daily return", @@ -2433,7 +2568,11 @@ "colorBackground": false, "colorPostfix": true, "colorValue": true, - "colors": ["#F2495C", "#FADE2A", "#73BF69"], + "colors": [ + "#F2495C", + "#FADE2A", + "#73BF69" + ], "datasource": null, "decimals": 4, "description": "Percentage increase in all local validator balances over the last week", @@ -2497,7 +2636,7 @@ "tableColumn": "annualized weekly return", "targets": [ { - "expr": "((sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}) - sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 7d != 0) - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 7d > 16)))/(32 * avg_over_time(count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)[7d:])))/1000000000 * (365/7)", + "expr": "((sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}) - sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 7d != 0) - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 7d > 16)))/(32 * avg_over_time(count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)[7d:])))/1000000000 * (365/7)", "hide": false, "interval": "", "legendFormat": "annualized weekly return", @@ -2524,7 +2663,11 @@ "colorBackground": false, "colorPostfix": true, "colorValue": true, - "colors": ["#F2495C", "#FADE2A", "#73BF69"], + "colors": [ + "#F2495C", + "#FADE2A", + "#73BF69" + ], "datasource": null, "decimals": 4, "description": "Percentage increase in all local validator balances over the last month", @@ -2588,7 +2731,7 @@ "tableColumn": "", "targets": [ { - "expr": "((sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}) - sum(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 30d != 0) - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} offset 30d > 16)))/(32 * avg_over_time(count(attached_validator_balance{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"} > 16)[30d:])))/1000000000 * (365/30)", + "expr": "((sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}) - sum(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 30d != 0) - (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)) + (32 * count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} offset 30d > 16)))/(32 * avg_over_time(count(attached_validator_balance{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"} > 16)[30d:])))/1000000000 * (365/30)", "hide": false, "interval": "", "legendFormat": "annualized monthly return", @@ -2643,7 +2786,9 @@ "justifyMode": "center", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false } @@ -2651,7 +2796,7 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "beacon_voluntary_exits_received_total{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_voluntary_exits_received_total{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "instant": true, "interval": "", "legendFormat": "voluntary exits received", @@ -2700,7 +2845,9 @@ "justifyMode": "center", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false } @@ -2708,7 +2855,7 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "failed_web3_requests_total{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "failed_web3_requests_total{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "instant": true, "interval": "", "legendFormat": "failed requests", @@ -2752,7 +2899,9 @@ "justifyMode": "center", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false } @@ -2760,7 +2909,7 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "beacon_pending_deposits{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "beacon_pending_deposits{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "instant": true, "interval": "", "legendFormat": "pending", @@ -2806,7 +2955,9 @@ "justifyMode": "center", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false } @@ -2814,7 +2965,7 @@ "pluginVersion": "7.0.0", "targets": [ { - "expr": "((beacon_pending_deposits{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}/4)*6.4)", + "expr": "((beacon_pending_deposits{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}/4)*6.4)", "instant": true, "interval": "", "legendFormat": "pending", @@ -2830,7 +2981,11 @@ "cacheTimeout": null, "colorBackground": true, "colorValue": false, - "colors": ["rgb(105, 70, 0)", "rgb(105, 70, 0)", "rgb(105, 70, 0)"], + "colors": [ + "rgb(105, 70, 0)", + "rgb(105, 70, 0)", + "rgb(105, 70, 0)" + ], "datasource": null, "fieldConfig": { "defaults": { @@ -2983,7 +3138,7 @@ "steppedLine": false, "targets": [ { - "expr": "nim_gc_mem_occupied_bytes{instance=\"beacon-validator.nimbus-gnosis.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus-gnosis.dappnode\"}", + "expr": "nim_gc_mem_occupied_bytes{instance=\"beacon-validator.nimbus.dappnode:8008\", job=\"manager_sd\", package=\"nimbus-gnosis.dnp.dappnode.eth\", service=\"beacon-validator.nimbus.dappnode\"}", "interval": "", "intervalFactor": 1, "legendFormat": "beacon memory", @@ -3751,9 +3906,19 @@ "to": "now" }, "timepicker": { - "refresh_intervals": ["10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"] + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] }, "timezone": "", "title": "Ethereum 2", "version": 1 -} +} \ No newline at end of file diff --git a/prometheus-targets.json b/prometheus-targets.json index 437230f..1921305 100644 --- a/prometheus-targets.json +++ b/prometheus-targets.json @@ -1,9 +1,11 @@ -[ +[ { - "labels": { - "package": "nimbus-gnosis.dnp.dappnode.eth", - "service": "beacon-validator.nimbus-gnosis.dappnode" - }, - "targets": ["beacon-validator.nimbus-gnosis.dappnode:8008"] + "labels": { + "package": "nimbus-gnosis.dnp.dappnode.eth", + "service": "beacon-validator.nimbus-gnosis.dappnode" + }, + "targets": [ + "beacon-validator.nimbus-gnosis.dappnode:8008" + ] } -] +] \ No newline at end of file diff --git a/setup-wizard.yml b/setup-wizard.yml index 216859c..7404aba 100644 --- a/setup-wizard.yml +++ b/setup-wizard.yml @@ -9,16 +9,6 @@ fields: maxLength: 32 description: >- Add a string to your proposed blocks, which will be seen on the block explorer - - id: HTTP_WEB3PROVIDER - target: - type: environment - name: HTTP_WEB3PROVIDER - service: beacon-validator - title: Gnosis chain node URL - description: >- - Your Beacon chain node must have access to a syncronized xdai mainnet node. - If you have not already, make sure to install and sync an xdai node of your choice ([install nethermind gnosis](http://my.dappnode/#/installer/nethermind-xdai.dnp.dappnode.eth)) and use its RPC url - Or use the official one: https://rpc.gnosischain.com/ - id: checkpointSyncUrl target: type: environment @@ -26,15 +16,18 @@ fields: service: beacon-validator title: Checkpoint for fast sync description: >- - To get Nimbus up and running in only a few minutes, you can start Nimbus from a recent finalized checkpoint state rather than syncing from genesis. This is substantially **faster** and consumes **less resources** than syncing from genesis, while still providing all the same features. Be sure you are using a trusted node for the fast sync. - Get your checkpoint sync from a running gnosis beacon chain node or use the official one **https://rpc-gbc.gnosischain.com/** + To get Nimbus up and running in only a few minutes, you can start Nimbus from a recent finalized checkpoint state rather than syncing from genesis. This is substantially **faster** and consumes **less resources** than syncing from genesis, while still providing all the same features. Be sure you are using a trusted node for the fast sync. Check the [Nimbus docs](https://nimbus.guide/trusted-node-sync.html) for more information. + Use the dappnode official endpoint `https://checkpoint-sync-gnosis.dappnode.io` or the official one from Gnosis `https://checkpoint.gnosischain.com`. + *Note - If you are going to provide your own checkpoint sync endpoint, make sure you do not use a slash `/` at the end of the URL.* required: false - - id: web3Backup + - id: feeRecipientAddress target: type: environment - name: WEB3_BACKUP + name: FEE_RECIPIENT_ADDRESS service: beacon-validator - title: Add a backup web3 provider + title: Fee Recipient Address description: >- - It's a good idea to add a backup web3 provider in case your main one goes down. You can use the official one: **https://rpc.gnosischain.com/** - required: false + Fee Recipient is a feature that lets you specify a priority fee recipient address on your validator client instance and beacon node. Make sure this is an address you control. After The Merge, Execution Clients will begin depositing priority fees into this address whenever your validator proposes a new block. + required: true + pattern: "^0x[a-fA-F0-9]{40}$" + patternErrorMessage: Must be a valid address (0x1fd16a...)