{"id":21641920,"url":"https://github.com/cosmostation/cvms","last_synced_at":"2026-01-19T06:34:54.229Z","repository":{"id":262836810,"uuid":"887647870","full_name":"cosmostation/cvms","owner":"cosmostation","description":"The Cosmos Validator Monitoring Service(CVMS) is integrated monitoring system for validators in the Cosmos app chain ecosystem","archived":false,"fork":false,"pushed_at":"2025-12-13T04:20:42.000Z","size":6847,"stargazers_count":65,"open_issues_count":17,"forks_count":60,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-12-14T18:25:30.964Z","etag":null,"topics":["cosmos","cosmos-sdk","monitoring","tools","validator"],"latest_commit_sha":null,"homepage":"https://public-cvms.cosmostation.io/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cosmostation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-13T03:20:48.000Z","updated_at":"2025-10-26T18:12:00.000Z","dependencies_parsed_at":"2024-11-14T15:32:46.559Z","dependency_job_id":"a42e2007-2e1c-46f8-8d22-00b8fdeeff3e","html_url":"https://github.com/cosmostation/cvms","commit_stats":null,"previous_names":["cosmostation/cvms"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/cosmostation/cvms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmostation%2Fcvms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmostation%2Fcvms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmostation%2Fcvms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmostation%2Fcvms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cosmostation","download_url":"https://codeload.github.com/cosmostation/cvms/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cosmostation%2Fcvms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28562406,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T03:31:16.861Z","status":"ssl_error","status_checked_at":"2026-01-19T03:31:15.069Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cosmos","cosmos-sdk","monitoring","tools","validator"],"created_at":"2024-11-25T05:01:09.706Z","updated_at":"2026-01-19T06:34:54.212Z","avatar_url":"https://github.com/cosmostation.png","language":"Go","funding_links":[],"categories":["Monitoring"],"sub_categories":["Terminal Block Explorers"],"readme":"# Cosmos Validator Monitoring Service(CVMS) 🌌 🔭\n\n✅ Validators in Cosmos-SDK-based chains sometimes have additional responsibilities beyond block production. In this document, we refer to these responsibilities as `duties`.\n\n## Background About CVMS\n\nThe Cosmos ecosystem comprises app chains built on Cosmos-SDK, which, despite having similar system architectures, often **require validators to perform a wider range of customized duties (like oracle or EVM bridging services)** in addition to maintaining standard consensus security.\n\nFor example, a duty might have different names or applications across Chain A and Chain B.\n\nAs a result, **validators use different custom paths designated by each app chain to check their current status and prevent penalties, such as slashing, when performing specific duties.**\nMoreover, for duties outside the consensus, it’s challenging to quickly verify the state of the network and ensure each validator is compliant.\n\n**To alleviate the burden of checking various conditions unique to the Cosmos ecosystem, [Cosmostation](https://cosmostation.io/) has developed the Cosmos Validator Monitoring System (CVMS), an integrated monitoring system for validators and network maintainers in the Cosmos ecosystem.**\n\nThrough **CVMS**, we aim to provide validators, blockchain network maintainers, and other developers in the Cosmos ecosystem with a straightforward way **to monitor and overview the consensus, duties, and other unique characteristics of each Cosmos app chain as integrated metrics without additional effort.**\n\n## Description\n\nThe Cosmos Validator Monitoring Service (CVMS) is an integrated monitoring system for validators within the Cosmos app chain ecosystem.\n\nCVMS consolidates key metrics essential to validators and the network, such as slashing uptime, oracle status, and bridge status, into a single metric view for each chain.\n\n**CVMS supports two modes: validator mode(for monitoring whitelisted validator) and network mode(for monitoring all validators in the network)**, determined by the moniker setup in the configuration. For instance, specifying `moniker=['Cosmostation1', 'Cosmostation2']` enables monitoring of specific validators, representing **validator mode**, while `moniker=['all']` monitors all validators, representing **network mode**.\n\n**Depending on the mode, CVMS provides different overviews.**\n\n### 🚀 Validator Mode\n\nIn validator mode, CVMS offers an overview that makes it easy to check the essential elements required for validators.\n\n- **Example of an integrated dashboard for a solo validator**\n  ![validator mode dashboard](.images/validator-mode-dashboard.png)\n\n### 🛰️ Network Mode\n\nIn network mode, CVMS provides an overview that allows users to check the status of the network alongside the state of distributed validators concerning elements essential to a specific chain.\n\n- **Example Network Mode Dashboard For Oracle Duty**\n\n![network mode dashboard1](.images/network-mode-dashboard1.png)\n\n- **Example Network Mode Dashbord For Vote Extension**\n\n![network mode dashboard2](.images/network-mode-dashboard2.png)\n\n## Supported Packages\n\nThe packages currently supported by CVMS are as follows:\n\n| package                               | support chains                                                |\n| ------------------------------------- | ------------------------------------------------------------- |\n| block                                 | all                                                           |\n| uptime                                | all                                                           |\n| balance                               | all for native token                                          |\n| upgrade                               | all                                                           |\n| eventnonce                            | injective(peggo) / gravity-bridge(gbt) / sommelier(steward)   |\n| oracle                                | sei(price-feeder) / umee(price-feeder) / nibiru(price-feeder) |\n| yoda                                  | band                                                          |\n| axelar-evm                            | axelar                                                        |\n| voteindexer(validator-consensus-vote) | all                                                           |\n| veindexer(validator-extension-vote)   | all if existed                                                |\n\n## Run CVMS\n\n**We recommend running the CVMS application in Docker by default.** If there are components in the default Docker Compose setup that you find unnecessary, you can disable them with a Docker override.\n\n**Initially, we could not account for all app chains within the Cosmos ecosystem.** Therefore, by default, this application operates based on the chains listed in [support_chains.yaml](./docker/cvms/support_chains.yaml)\n\nIf the chain you want to monitor is not in the support chain list, you can add it to the [custom_chains.yaml](./docker/cvms/custom_chains.yaml.example) list or update the support chains list through a PR.\n\nIf you want to know more details how to setup CVMS from scratch, Click [here](./docs/setup.md)👇\n\n```bash\n# 1. Create a config file from example config\n# case1) for validator mode\ncp .resource/example-validator-config.yaml config.yaml\n# case2) for network mode\ncp .resource/example-network-config.yaml config.yaml\n\n# 2. Modify config yaml\nvi config.yaml\n\n# 3. Custom the enviroments to suit your needs\n# This is not necessary, but if you want to make custom config for prometheus, alertmanger or cvms's log level\ncp .resource/.env.example .env\n\n# 4. Run cvms\ndocker compose up --build -d\n```\n\n---\n\n## Additional Information\n\n### Alerting Rule Samples\n\nWe provide alerting rules for easy use by developers. 👉 [Check here!](/./docker/prometheus/rules/)\n\n### Grafana Dashboards Samples\n\nWe provide basic dashboards for easy use by developers. 👉 [Check here!](/./docker/grafana/provisioning/dashboards)\n\n### Prometheus Metrics Description\n\n**All metrics are prefixed with `cvms` as the namespace, with the package name as a subspace.**\n\n- Metric name format: `cvms_\u003cpackage-name\u003e_\u003cmetric-name\u003e`\n- For example: cvms_block_timestamp\n\n#### Block Package Metrics\n\n- **cvms_block_height** (by node): This value represents the latest block's height from the connected endpoint.\n\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: endpoint\n\n- **cvms_block_timestamp** (by node): This value represents the latest block's timestamp from the connected endpoint.\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: endpoint\n\n| **Metric**           | **Example**                                                                                                                                                                      |\n| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| cvms_block_height    | `cvms_block_height{chain=\"cosmos\",chain_id=\"cosmoshub-4\",endpoint=\"http://localhost:26657\",mainnet=\"true\",package=\"block\",table_chain_id=\"cosmoshub_4\"} 2.2962294e+07`           |\n| cvms_block_timestamp | `cvms_block_timestamp{chain=\"cosmos\",chain_id=\"cosmoshub-4\",endpoint=\"https://rpc.cosmos.endpoint\",mainnet=\"true\",package=\"block\",table_chain_id=\"cosmoshub_4\"} 1.730959212e+09` |\n\n#### Uptime Package Metrics\n\n- **cvms_uptime_min_signed_per_window** (by network): This value represents the minimum signed blocks per window to prevent slashing as a validator.\n\n  - **Default labels**: chain, chain_id, mainnet, package\n\n- **cvms_uptime_signed_blocks_window** (by network): This value represents the number of blocks per window for evaluation.\n\n  - **Default labels**: chain, chain_id, mainnet, package\n\n- **cvms_uptime_missed_blocks_counter** (by validator): This value represents the count of missed blocks in the current slashing info.\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: proposer address, validator_operator_address, validator_consensus_address\n\n| **Metric**                        | **Example**                                                                                                                                                                                                                                                                                                                                                                                       |\n| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| cvms_uptime_min_signed_per_window | `cvms_uptime_min_signed_per_window{chain=\"cosmos\",chain_id=\"cosmoshub-4\",mainnet=\"true\",package=\"uptime\",table_chain_id=\"cosmoshub_4\"} 0.05`                                                                                                                                                                                                                                                      |\n| cvms_uptime_signed_blocks_window  | `cvms_uptime_signed_blocks_window{chain=\"cosmos\",chain_id=\"cosmoshub-4\",mainnet=\"true\",package=\"uptime\",table_chain_id=\"cosmoshub_4\"} 10000`                                                                                                                                                                                                                                                      |\n| cvms_uptime_missed_blocks_counter | `cvms_uptime_missed_blocks_counter{chain=\"cosmos\",chain_id=\"cosmoshub-4\",mainnet=\"true\",moniker=\"Cosmostation\",package=\"uptime\",proposer_address=\"099E2B09583331AFDE35E5FA96673D2CA7DEA316\",table_chain_id=\"cosmoshub_4\",validator_consensus_address=\"cosmosvalcons1px0zkz2cxvc6lh34uhafveea9jnaagckmrlsye\",validator_operator_address=\"cosmosvaloper1clpqr4nrk4khgkxj78fcwwh6dl3uw4epsluffn\"} 2` |\n\n#### Balance Package Metrics\n\n- **cvms_balance_remaining_amount** (by config): This value represents the remaining balance amount being monitored.\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: balance_address\n\n| **Metric**                    | **Example**                                                                                                                                                                                                  |\n| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| cvms_balance_remaining_amount | `cvms_balance_remaining_amount{balance_address=\"kava1ujfrlcd0ted58mzplnyxzklsw0sqevlgxndanp\",chain=\"kava\",chain_id=\"kava_2222-10\",mainnet=\"true\",package=\"balance\",table_chain_id=\"kava_2222_10\"} 43.330051` |\n\n#### Upgrade Package Metrics\n\n- **cvms_upgrade_remaining_time** (by network): This value represents the remaining seconds for an on-chain upgrade.\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: upgrade_name\n\n| **Metric**                  | **Example**                                                                                                                                                 |\n| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| cvms_upgrade_remaining_time | `cvms_upgrade_remaining_time{chain=\"sei\",chain_id=\"atlantic-2\",mainnet=\"false\",package=\"upgrade\",table_chain_id=\"atlantic_2\",upgrade_name=\"v6.0.0\"} 119140` |\n\n#### Eventnonce Package Metrics\n\n- **cvms_eventnonce_highest_nonce** (by network): This value represents the highest event nonce value in the network.\n\n  - **Default labels**: chain, chain_id, mainnet, package\n\n- **cvms_eventnonce_nonce** (by validator): This value represents the current event nonce value for a validator.\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: moniker, validator_operator_address, orchestrator_address\n\n| **Metric**                    | **Example**                                                                                                                                                                                                                                                                                                      |\n| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| cvms_eventnonce_highest_nonce | `cvms_eventnonce_highest_nonce{chain=\"injective\",chain_id=\"injective-1\",mainnet=\"true\",package=\"eventnonce\",table_chain_id=\"injective_1\"} 74009`                                                                                                                                                                 |\n| cvms_eventnonce_nonce         | `cvms_eventnonce_nonce{chain=\"injective\",chain_id=\"injective-1\",mainnet=\"true\",moniker=\"Cosmostation\",orchestrator_address=\"inj1mtxhcchfyvvs6u4nmnylgkxvkrax7c2la69l8w\",package=\"eventnonce\",table_chain_id=\"injective_1\",validator_operator_address=\"injvaloper1rvqzf9u2uxttmshn302anlknfgsatrh5v7fl7e\"} 74009` |\n\n#### Oracle Package Metrics\n\n- **cvms_oracle_min_valid_per_window** (by network): This value represents the minimum validated threshold for a window.\n\n  - **Default labels**: chain, chain_id, mainnet, package\n\n- **cvms_oracle_slash_window** (by network): This value represents the slash window for oracle status evaluation.\n\n  - **Default labels**: chain, chain_id, mainnet, package\n\n- **cvms_oracle_vote_period** (by network): This value represents the number of blocks in the vote period.\n\n  - **Default labels**: chain, chain_id, mainnet, package\n\n- **cvms_oracle_vote_window** (by network): This value represents the vote window for validators (calculated as slash window divided by vote period).\n\n  - **Default labels**: chain, chain_id, mainnet, package\n\n- **cvms_oracle_block_height** (by network): This value represents the block height of the connected node for current oracle uptime evaluation.\n\n  - **Default labels**: chain, chain_id, mainnet, package\n\n- **cvms_oracle_miss_counter** (by validator): This value represents the count of missed blocks for oracle validation.\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: moniker, validator_operator_address\n\n| **Metric**                       | **Example**                                                                                                                                                                                                                     |\n| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| cvms_oracle_min_valid_per_window | `cvms_oracle_min_valid_per_window{chain=\"sei\",chain_id=\"pacific-1\",mainnet=\"true\",package=\"oracle\",table_chain_id=\"pacific_1\"} 0.05`                                                                                            |\n| cvms_oracle_slash_window         | `cvms_oracle_slash_window{chain=\"sei\",chain_id=\"pacific-1\",mainnet=\"true\",package=\"oracle\",table_chain_id=\"pacific_1\"} 216000`                                                                                                  |\n| cvms_oracle_vote_period          | `cvms_oracle_vote_period{chain=\"sei\",chain_id=\"pacific-1\",mainnet=\"true\",package=\"oracle\",table_chain_id=\"pacific_1\"} 2`                                                                                                        |\n| cvms_oracle_vote_window          | `cvms_oracle_vote_window{chain=\"sei\",chain_id=\"pacific-1\",mainnet=\"true\",package=\"oracle\",table_chain_id=\"pacific_1\"} 108000`                                                                                                   |\n| cvms_oracle_block_height         | `cvms_oracle_block_height{chain=\"sei\",chain_id=\"pacific-1\",mainnet=\"true\",package=\"oracle\",table_chain_id=\"pacific_1\"} 1.13408997e+08`                                                                                          |\n| cvms_oracle_miss_counter         | `cvms_oracle_miss_counter{chain=\"sei\",chain_id=\"pacific-1\",mainnet=\"true\",moniker=\"Cosmostation\",package=\"oracle\",table_chain_id=\"pacific_1\",validator_operator_address=\"seivaloper1hnkkqnzwmyw652muh6wfea7xlfgplnyj0ku4w4\"} 0` |\n\n#### Yoda Package Metrics\n\n- **cvms_yoda_status** (by validator): This value represents the on-off status for Yoda.\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: moniker\n- **cvms_yoda_max_miss_counter** (by validator): This value represents the maximum response\ndelay in currently active requests assigned to the oracle\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: moniker\n- **cvms_yoda_miss_summary** (by network): Summarizes all response delays for all\ncurrent requests across all validators into percentiles\n  - **Default labels**: chain, chain_id, mainnet, package\n- **cvms_yoda_request_count** (by network): Total Number of all requests on the network so far\n  - **Default labels**: chain, chain_id, mainnet, package\n- **cvms_yoda_slash_window** (by network): Maximum number of blocks a yoda oracle has time to\nrespond if a request was assigned to it\n  - **Default labels**: chain, chain_id, mainnet, package\n- **cvms_yoda_validator_miss_summary** (per validator):  Summarizes all response delays for all\ncurrent requests into percentiles seperated by validator\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: moniker\n\n\n| **Metric**       | **Example**                                                                                                                                                                                                                                  |\n| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| cvms_yoda_status | `cvms_yoda_status{chain=\"band\",chain_id=\"band-laozi-testnet6\",mainnet=\"false\",moniker=\"Cosmostation\",package=\"yoda\",table_chain_id=\"band_laozi_testnet6\",validator_operator_address=\"bandvaloper1kfj48adjsnrgu83lau6wc646q2uf65rf84tzus\"} 1` |\n| cvms_yoda_max_miss_counter | `cvms_yoda_max_miss_counter{chain=\"band\",chain_id=\"laozi-mainnet\",mainnet=\"true\",moniker=\"figment\",package=\"yoda\",table_chain_id=\"laozi_mainnet\",validator_operator_address=\"bandvaloper1zm5p8gg3ugjcdwz9yrxaf6fdptxa4gw04rplr9\"} 0` |\n| cvms_yoda_miss_summary | `cvms_yoda_miss_summary{chain=\"band\",chain_id=\"laozi-mainnet\",mainnet=\"true\",package=\"yoda\",table_chain_id=\"laozi_mainnet\",quantile=\"0.99\"} 2` `cvms_yoda_miss_summary_sum{chain=\"band\",chain_id=\"laozi-mainnet\",mainnet=\"true\",package=\"yoda\",table_chain_id=\"laozi_mainnet\"} 94` `cvms_yoda_miss_summary_count{chain=\"band\",chain_id=\"laozi-mainnet\",mainnet=\"true\",package=\"yoda\",table_chain_id=\"laozi_mainnet\"} 261` |\n| cvms_yoda_request_count | `cvms_yoda_request_count{chain=\"band\",chain_id=\"laozi-mainnet\",mainnet=\"true\",package=\"yoda\",table_chain_id=\"laozi_mainnet\"} 2.4417307e+07` |\n| cvms_yoda_slash_window | `cvms_yoda_slash_window{chain=\"band\",chain_id=\"laozi-mainnet\",mainnet=\"true\",package=\"yoda\",table_chain_id=\"laozi_mainnet\"} 100` |\n| cvms_yoda_validator_miss_summary | `cvms_yoda_validator_miss_summary{chain=\"band\",chain_id=\"laozi-mainnet\",mainnet=\"true\",moniker=\"figment\",package=\"yoda\",table_chain_id=\"laozi_mainnet\",validator_operator_address=\"bandvaloper1zm5p8gg3ugjcdwz9yrxaf6fdptxa4gw04rplr9\",quantile=\"0.99\"} 1` `cvms_yoda_validator_miss_summary_sum{chain=\"band\",chain_id=\"laozi-mainnet\",mainnet=\"true\",moniker=\"figment\",package=\"yoda\",table_chain_id=\"laozi_mainnet\",validator_operator_address=\"bandvaloper1zm5p8gg3ugjcdwz9yrxaf6fdptxa4gw04rplr9\"} 4` `cvms_yoda_validator_miss_summary_count{chain=\"band\",chain_id=\"laozi-mainnet\",mainnet=\"true\",moniker=\"figment\",package=\"yoda\",table_chain_id=\"laozi_mainnet\",validator_operator_address=\"bandvaloper1zm5p8gg3ugjcdwz9yrxaf6fdptxa4gw04rplr9\"} 15` |\n\n#### Axelar-EVM Package Metrics\n\n- **cvms_axelar_evm_activated_chain** (by network): This value represents the on-off status of activated EVM chains for Axelar bridging.\n\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: evm_chain\n\n- **cvms_axelar_evm_maintainer_status** (by validator): This value represents the on-off registration status for an Axelar broadcaster for a validator.\n  - **Default labels**: chain, chain_id, mainnet, package\n  - **Package-specific labels**: evm_chain, moniker, validator_operator_address\n\n| **Metric**                        | **Example**                                                                                                                                                                                                                                                                     |\n| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| cvms_axelar_evm_activated_chain   | `cvms_axelar_evm_activated_chain{chain=\"axelar\",chain_id=\"axelar-dojo-1\",evm_chain=\"Ethereum\",mainnet=\"true\",package=\"axelar-evm\",table_chain_id=\"axelar_dojo_1\"} 1`                                                                                                            |\n| cvms_axelar_evm_maintainer_status | `cvms_axelar_evm_maintainer_status{chain=\"axelar\",chain_id=\"axelar-dojo-1\",evm_chain=\"Ethereum\",mainnet=\"true\",moniker=\"Cosmostation\",package=\"axelar-evm\",table_chain_id=\"axelar_dojo_1\",validator_operator_address=\"axelarvaloper1kj8j6hkmgfvtxpgfuskj602sxs5dsfkm6ewm4l\"} 1` |\n\n### Architecture\n\nCVMS is consists of two parts(exporter \u0026 indexer).\n\nThe Exporter is for providing current status in the onchain, but integrated common metrics name regardless of the app chain such as `eventnonce`, `price-feeder`, `uptime` or something.\n\n#### Example Exporter Package Integration Method\n\n```mermaid\ngraph BT\n    subgraph Cosmos App Chains\n        A1[Injective]\n        A2[Gravity Bridge]\n        A3[Sommelier]\n    end\n\n    subgraph CVMS Exporter\n        subgraph Eventnonce Package\n            B1[Eventnonce Package] -- injective chain's eventnonce query path  ---\u003e A1\n            B1[Eventnonce Package] -- gravity bridge chain's eventnonce query path  ---\u003e A2\n            B1[Eventnonce Package] -- sommelier chain's eventnonce query path  ---\u003e A3\n\n            B1 -- integrated cvms metrics about all chains --\u003e B2[Metrics]\n        end\n\n        subgraph Exporter DB\n            C1[Prometheus] --\u003e B2[Metrics]\n        end\n    end\n```\n\nAnd the Indexer is for providing integrated historical status in the onchain likewise such as `vote status(in the last 10,000 blocks)`, `last proposed block number` or something.\n\n#### Example Indexer Package Integration Method\n\n- currently, support only voteindexer package\n\n```mermaid\ngraph RL\n    subgraph Cosmos App Chains\n        A1[Cosmos]\n        A2[Axelar]\n        A3[Neutron]\n    end\n\n    subgraph CVMS Indexer\n        subgraph Indexer Packages\n            B1[Voteindexer Package] -- collect validators' vote signatures at each blocks ---\u003e A1\n            B2[AxelarEVMIndexer Package] -- collect validators' evm votings at each blocks  ---\u003e A2\n            B3[SlinkyIndexer Package] -- collect validators' oracle voting signatures at each blocks ---\u003e A3\n        end\n\n        subgraph Indexer DB\n            B1 \u0026 B2 \u0026 B3 --\u003e C1[Postgres]\n        end\n    end\n```\n\n#### CVMS System Architecture\n\n```mermaid\ngraph RL\n    subgraph Cosmos App Chains\n        A1[A app chain]\n        A2[B app chain]\n        A3[C app chain]\n    end\n\n    subgraph CVMS\n        subgraph Indexer\n            B2[Indexer] ----\u003e A1 \u0026 A2 \u0026 A3\n        end\n\n        subgraph Exporter\n            B1[Exporter] ----\u003e A1 \u0026 A2 \u0026 A3\n            B1[Exporter] -- integrated cvms metrics ---\u003e B12[Metrics]\n        end\n\n        subgraph Indexer DB\n            B2[Indexer] -- indexing historical data ---\u003e C2[Postgres]\n        end\n\n        subgraph Exporter DB\n            C1[Prometheus] --\u003e B12[Metrics]\n        end\n\n        subgraph Monitoring\n            D1[Grafana] -- PromQL --\u003e C1[Prometheus]\n            D1[Grafana] -- SQL --\u003e C2[Postgres]\n\n            D1 \u0026 C1 -- firing --\u003e D2[Alertmanger]\n        end\n    end\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcosmostation%2Fcvms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcosmostation%2Fcvms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcosmostation%2Fcvms/lists"}