{"id":31619302,"url":"https://github.com/multiversx/mx-chain-observing-squad","last_synced_at":"2025-10-06T14:04:43.719Z","repository":{"id":38076547,"uuid":"295684749","full_name":"multiversx/mx-chain-observing-squad","owner":"multiversx","description":"Docker images and scripts for setting up an MultiversX Observing Squad","archived":false,"fork":false,"pushed_at":"2025-09-09T08:49:32.000Z","size":233,"stargazers_count":11,"open_issues_count":0,"forks_count":12,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-09-09T11:11:40.338Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/multiversx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2020-09-15T09:53:44.000Z","updated_at":"2025-09-09T08:49:04.000Z","dependencies_parsed_at":"2024-05-13T08:32:25.211Z","dependency_job_id":"44d9d247-8c10-4db4-8ac6-a5f9df656d1f","html_url":"https://github.com/multiversx/mx-chain-observing-squad","commit_stats":null,"previous_names":[],"tags_count":60,"template":false,"template_full_name":null,"purl":"pkg:github/multiversx/mx-chain-observing-squad","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiversx%2Fmx-chain-observing-squad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiversx%2Fmx-chain-observing-squad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiversx%2Fmx-chain-observing-squad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiversx%2Fmx-chain-observing-squad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/multiversx","download_url":"https://codeload.github.com/multiversx/mx-chain-observing-squad/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiversx%2Fmx-chain-observing-squad/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278621844,"owners_count":26017253,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2025-10-06T14:03:24.194Z","updated_at":"2025-10-06T14:04:43.708Z","avatar_url":"https://github.com/multiversx.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# observing-squad\n\nDocker images and scripts for setting up a MultiversX Observing Squad.\n\n## How to build the images\n\nSkip this if you prefer to pull from [docker hub](https://hub.docker.com/u/multiversx) instead.\n\n```bash\ncd mainnet\ndocker image build . -t multiversx/chain-observer:v1.10.6.0 -f ./chain-observer\ndocker image build . -t multiversx/chain-squad-proxy:v1.3.2 -f ./chain-proxy\n```\n\n```bash\ncd utils\ndocker image build . -t multiversx/chain-keygenerator:latest -f ./chain-keygenerator\n```\n\n## How to pull the images from Docker Hub\n\n```bash\ndocker pull multiversx/chain-observer:v1.10.6.0\ndocker pull multiversx/chain-squad-proxy:v1.3.2\ndocker pull multiversx/chain-keygenerator:latest\n```\n\n## How to setup the Docker-based Observing Squad\n\n### Generate PEM files\n\nFirst, generate 4 PEM files, one for each Observer by running the keygenerator 4 times:\n\n```bash\nexport KEYS_FOLDER=~/keys\ndocker run --rm --mount type=bind,source=${KEYS_FOLDER},destination=/keys --workdir /keys multiversx/chain-keygenerator:latest\n```\n\nAfter running the command 4 times, rename the resulted files to:\n\n- `observerKey_0.pem`\n- `observerKey_1.pem`\n- `observerKey_2.pem`\n- `observerKey_metachain.pem`\n\n**Note:** the files will be owned by the `root` user. In order to `chown` them, do as follows:\n\n```bash\nsudo chown $(whoami) *\n```\n\n### Prepare folder structure\n\nIn a folder of your choice (e.g. `MyObservingSquad`), create the following structure, and copy the observer PEM files in the `node-n/config` subfolders:\n\n```\n.\n├── node-0\n│   ├── config\n│   │   └── observerKey_0.pem\n│   ├── db\n│   │   └──\n│   └── logs\n├── node-1\n│   ├── config\n│   │   └── observerKey_1.pem\n│   ├── db\n│   └── logs\n├── node-2\n│   ├── config\n│   │   └── observerKey_2.pem\n│   ├── db\n│   └── logs\n├── node-metachain\n│   ├── config\n│   │   └── observerKey_metachain.pem\n│   ├── db\n│   └── logs\n└── proxy\n    └── config\n```\n\n### Create a docker network\n\n```bash\ndocker network create --subnet=10.0.0.0/24 multiversx-squad\n```\n\n### Clone repository\n\nClone this repository in order to get a copy of the files `run-observer.sh` and `run-proxy.sh`, which are needed below.\n\n```bash\ngit clone https://github.com/multiversx/mx-chain-observing-squad.git \u0026\u0026 cd mx-chain-observing-squad\n```\n\n### Start Observers 0, 1, 2, Metachain\n\n**Start Observer of Shard 0:**\n\n```bash\nexport SHARD=0\nexport DISPLAY_NAME=\"MyObservingSquad-0\"\nexport OBSERVER_DIR=~/MyObservingSquad/node-0\nexport P2P_PORT=10000\nexport IP=10.0.0.6\n./mainnet/run-observer.sh\n```\n\n**Start Observer of Shard 1:**\n\n```bash\nexport SHARD=1\nexport DISPLAY_NAME=\"MyObservingSquad-1\"\nexport OBSERVER_DIR=~/MyObservingSquad/node-1\nexport P2P_PORT=10001\nexport IP=10.0.0.5\n./mainnet/run-observer.sh\n```\n\n**Start Observer of Shard 2:**\n\n```bash\nexport SHARD=2\nexport DISPLAY_NAME=\"MyObservingSquad-2\"\nexport OBSERVER_DIR=~/MyObservingSquad/node-2\nexport P2P_PORT=10002\nexport IP=10.0.0.4\n./mainnet/run-observer.sh\n```\n\n**Start Observer of Metachain:**\n\n```bash\nexport SHARD=metachain\nexport DISPLAY_NAME=\"MyObservingSquad-metachain\"\nexport OBSERVER_DIR=~/MyObservingSquad/node-metachain\nexport P2P_PORT=10003\nexport IP=10.0.0.3\n./mainnet/run-observer.sh\n```\n\n### Start Proxy\n\n```bash\nexport IP=10.0.0.2\n./mainnet/run-proxy.sh\n```\n\n### How to upgrade the Docker-based Observing Squad\n\n1. Pull the new images:\n```\ndocker pull multiversx/chain-observer:v1.10.6.0\ndocker pull multiversx/chain-squad-proxy:v1.3.2\n```\n2. Get the latest version of this repository.\n```\ncd mx-chain-observing-squad\ngit pull origin\n```\n3. Stop the 5 containers (Proxy and Observers).\n4. Optionally, remove the old Docker images (not needed anymore).\n5. Remove the existing Docker network: \n```\ndocker network rm multiversx-squad\n```\n6. [Create a Docker network](#create-a-docker-network)\n7. [Start Observers 0, 1, 2, Metachain](#start-observers-0-1-2-metachain). Make sure you set `OBSERVER_DIR` environment variables accordingly, **in advance, with respect to your current setup**.\n8. [Start Proxy](#start-proxy).\n9. [Verify the running containers](#verify-the-running-containers).\n10. Wait until the nodes are synchronized with the Netwtork. Then [verify the running containers](#verify-the-running-containers) again.\n\n### Verify the running containers\n\nDo a smoke test by running some queries against the MultiversX Proxy.\n\n```bash\nPROXY=http://10.0.0.2:8079\ncurl ${PROXY}/network/config | jq\ncurl ${PROXY}/network/status/0 | jq\ncurl ${PROXY}/network/status/1 | jq\ncurl ${PROXY}/network/status/2 | jq\ncurl ${PROXY}/network/status/4294967295 | jq\n```\n\nExtra smoke test - fetch a hyperblock:\n```\nSMOKE_TEST_HYPERBLOCK_NONCE=$(curl http://10.0.0.2:8079/network/status/4294967295 | jq '.data[\"status\"][\"erd_highest_final_nonce\"]')\ncurl http://10.0.0.2:8079/hyperblock/by-nonce/${SMOKE_TEST_HYPERBLOCK_NONCE} | jq\n```\n\nExtra smoke test - fetch a transaction, and inspect its `status` and `hyperblockNonce` fields (which must be set):\n```\nPROXY=http://10.0.0.2:8079\nTRANSACTION_HASH=a7264ecf00ad4e760d6a6bfdb3dcd1f8fb2acacb8d53577e74c09b6148812bd8\ncurl ${PROXY}/transaction/${TRANSACTION_HASH} | jq\ncurl ${PROXY}/transaction/${TRANSACTION_HASH} | jq '.data[\"transaction\"][\"status\"]'\ncurl ${PROXY}/transaction/${TRANSACTION_HASH} | jq '.data[\"transaction\"][\"hyperblockNonce\"]'\n```\n\n### Check versions of running Nodes (containers)\n\n```\ncurl 10.0.0.6:8080/node/status | jq '.data[\"metrics\"][\"erd_app_version\"]'\ncurl 10.0.0.5:8080/node/status | jq '.data[\"metrics\"][\"erd_app_version\"]'\ncurl 10.0.0.4:8080/node/status | jq '.data[\"metrics\"][\"erd_app_version\"]'\ncurl 10.0.0.3:8080/node/status | jq '.data[\"metrics\"][\"erd_app_version\"]'\n```\n\n### Check public keys of Observers\n\n```\ncurl 10.0.0.6:8080/node/status | jq '.data[\"metrics\"][\"erd_public_key_block_sign\"]'\ncurl 10.0.0.5:8080/node/status | jq '.data[\"metrics\"][\"erd_public_key_block_sign\"]'\ncurl 10.0.0.4:8080/node/status | jq '.data[\"metrics\"][\"erd_public_key_block_sign\"]'\ncurl 10.0.0.3:8080/node/status | jq '.data[\"metrics\"][\"erd_public_key_block_sign\"]'\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmultiversx%2Fmx-chain-observing-squad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmultiversx%2Fmx-chain-observing-squad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmultiversx%2Fmx-chain-observing-squad/lists"}