{"id":22072619,"url":"https://github.com/broxus/nodekeeper","last_synced_at":"2025-08-09T16:02:40.260Z","repository":{"id":64830636,"uuid":"546791037","full_name":"broxus/nodekeeper","owner":"broxus","description":"All-in-one node management tool with support for stEVER DePools","archived":false,"fork":false,"pushed_at":"2024-05-27T13:03:02.000Z","size":862,"stargazers_count":11,"open_issues_count":3,"forks_count":2,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-07-24T13:47:24.084Z","etag":null,"topics":["everscale","stever","venom-blockchain","venom-developer-program","venom-tools"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/broxus.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2022-10-06T16:45:46.000Z","updated_at":"2024-05-27T13:02:45.000Z","dependencies_parsed_at":"2023-02-19T11:20:25.456Z","dependency_job_id":"bb2700fa-e0fd-4fab-9bf7-036f2db715ed","html_url":"https://github.com/broxus/nodekeeper","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/broxus/nodekeeper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fnodekeeper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fnodekeeper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fnodekeeper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fnodekeeper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/broxus","download_url":"https://codeload.github.com/broxus/nodekeeper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/broxus%2Fnodekeeper/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269598872,"owners_count":24444628,"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-08-09T02:00:10.424Z","response_time":111,"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":["everscale","stever","venom-blockchain","venom-developer-program","venom-tools"],"created_at":"2024-11-30T21:13:55.912Z","updated_at":"2025-08-09T16:02:39.942Z","avatar_url":"https://github.com/broxus.png","language":"Rust","readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/venom-blockchain/developer-program\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/venom-blockchain/developer-program/main/vf-dev-program.png\" alt=\"Logo\" width=\"366.8\" height=\"146.4\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# nodekeeper \u0026emsp; [![rust-version-badge]][rust-version-link] [![workflow-badge]][workflow-link]\n\n[rust-version-badge]: https://img.shields.io/badge/rustc-1.67+-lightgray.svg\n[rust-version-link]: https://blog.rust-lang.org/2023/01/26/Rust-1.67.0.html\n[workflow-badge]: https://img.shields.io/github/actions/workflow/status/broxus/nodekeeper/master.yml?branch=master\n[workflow-link]: https://github.com/broxus/nodekeeper/actions?query=workflow%3Amaster\n\nAll-in-one node management tool.\n\n## How to install\n\n* Using Debian package\n  ```bash\n  sudo apt install curl gnupg\n\n  # Add custom ppa repo\n  curl https://europe-west1-apt.pkg.dev/doc/repo-signing-key.gpg \\\n    | sudo apt-key add -\n  echo 'deb [arch=amd64] https://europe-west1-apt.pkg.dev/projects/broxus-infrastructure broxus-deb-pub main' \\\n    | sudo tee -a  /etc/apt/sources.list.d/broxus.list\n\n  # Install the tool\n  sudo apt update\n  sudo apt install nodekeeper\n\n  # Add current user to the nodekeeper group\n  sudo usermod -a -G nodekeeper $USER\n  # Update groups cache (you can just relogin instead)\n  newgrp nodekeeper\n  ```\n\n* Using `cargo install`\n  ```bash\n  # Install deps for the node\n  sudo apt install curl pkg-config libssl-dev libzstd-dev libclang-dev libtcmalloc-minimal4 libprotobuf-dev libgoogle-perftools-dev\n\n  # Install the app\n  cargo install --locked --git https://github.com/broxus/nodekeeper\n  ```\n\n  \u003e NOTE: `systemd` configuration is different for cargo installation,\n    see **Validation** section for more info.\n\n## How to use\n\n### Validation\n\nFor Debian installation:\n```bash\n# Install Rust\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsource \"$HOME/.cargo/env\"\n# Or update to the latest stable version:\n# rustup update stable\n\n# Configure node\nnodekeeper init\n\n# Start services\nsudo systemctl restart validator\nsudo systemctl restart validator-manager\nsudo systemctl restart validator-exporter\n```\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eFor cargo installation:\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# Optionally configure root directory:\n# export NODEKEEPER_ROOT=/var/nodekeeper\n#\n# Or explicitly specify it as a param, e.g.:\n# nodekeeper --root /var/nodekeeper init\n\n# Configure node\nnodekeeper init\n\nsudo $(which nodekeeper) init systemd\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\u003cbr\u003e\n\n\u003e NOTE: Make sure you back up your keys after initial configuration!\n\u003e\n\u003e All keys are stored at `/var/nodekeeper/keys/` (or `$HOME/.nodekeeper/keys/` by default for the cargo installation).\n\nYou can also configure different steps separately:\n\n```bash\n# Initialize only node configs\nnodekeeper init node\n\n# Initialize only contracts\nnodekeeper init contracts\n```\n\nUpdating the node:\n\n```bash\nnodekeeper init node --rebuild\nsudo systemctl restart validator\n```\n\n### Metrics exporter\n\n```bash\n# Metrics exporter as a server\nnodekeeper exporter --addr 0.0.0.0:10100\n\n# Metrics exporter to the file\nnodekeeper exporter --file /var/www/node_metrics.txt\n```\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eExample metrics\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```\ncollected_at 1669042606\nnode_ready 1\nnode_version_major 0\nnode_version_minor 51\nnode_version_patch 1\nmc_seqno 155886\nmc_time 1669042601\nmc_time_diff 5\nsc_time_diff 5\nin_current_vset{adnl=\"d5af8f62c027774831aea3fe00d78fc78ed69f233d885382e72f9adefd8c4f05\"} 1\nin_next_vset 0\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n### Seed generator\n\n```bash\n# Generate new seed\nnodekeeper seed generate\n#decline weapon swift luggage gorilla odor clown million leaf royal object movie\n\n# Derive keypair from the seed\nnodekeeper seed generate | nodekeeper seed derive\n#{\n#  \"public\": \"72e8cb80621c41a95da3a004139ceefa39e8709e7a8183ed9ad601ce9a13714d\",\n#  \"secret\": \"435726770e17089f6c0b647f5ce7418ba6d07ca6b8c15d0c42e2379d1a09b6cc\"\n#}\n\n# Derive keypair from the secret\nnodekeeper seed pubkey 435726770e17089f6c0b647f5ce7418ba6d07ca6b8c15d0c42e2379d1a09b6cc\n#{\n#  \"public\": \"72e8cb80621c41a95da3a004139ceefa39e8709e7a8183ed9ad601ce9a13714d\",\n#  \"secret\": \"435726770e17089f6c0b647f5ce7418ba6d07ca6b8c15d0c42e2379d1a09b6cc\"\n#}\n```\n\n### Contract interaction\n\n```bash\n# Compute account address and stateinit\nnodekeeper contract stateinit \u003c ./path/to/Contract.tvc\n#{\n#  \"address\": \"0:1df86a0f06aec400d04719052e6a17dffadc09f915c5e35e959d37d59beb7ac3\",\n#  \"tvc\": \"te6ccgICAQAAA...some long base64 encoded BOC...AxWw==\"\n#}\n\n# Execute getters locally\nnodekeeper contract call \\\n    getParticipantInfo \\\n    '{\"addr\":\"0:2f61300e70e2cdb5f96d3d7a0d60c70dfa515f89c3d4926e958b5eb147977469\"}' \\\n    --addr '0:5325f4965e6388f97ae2578c19e8ffbc080f29d2357c5712d2a21d640dc10fb7' \\\n    --abi ./path/to/Contract.abi.json\n#{\n#  \"code\": 0,\n#  \"output\": {\n#    \"lockDonor\": \"0:0000000000000000000000000000000000000000000000000000000000000000\",\n#    \"locks\": [],\n#    \"reinvest\": true,\n#    \"reward\": \"0\",\n#    \"stakes\": [],\n#    \"total\": \"0\",\n#    \"vestingDonor\": \"0:0000000000000000000000000000000000000000000000000000000000000000\",\n#    \"vestings\": [],\n#    \"withdrawValue\": \"0\"\n#  }\n#}\n\n# and others\n```\n\n### Execute node commands\n\n```bash\n# Get config params\nnodekeeper node getparam 14\n#{\n#  \"block_id\": \"-1:8000000000000000:156446:e6a099e43ba0e2a9b7b0d1e9b5207cef4e0e54c1dc2ea8811f0877ad78516bc0:fdca14025ba3b16b4286a561b7ade73f3e26a0224e9492cefc77b83ed649f37d\",\n#  \"value\": {\n#    \"basechain_block_fee\": \"073b9aca00\",\n#    \"basechain_block_fee_dec\": \"1000000000\",\n#    \"masterchain_block_fee\": \"076553f100\",\n#    \"masterchain_block_fee_dec\": \"1700000000\"\n#  }\n#}\n\n# Send message\nnodekeeper node sendmessage \u003c ./path/to/message.boc\n\n# and others\n```\n\n---\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eAll options\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```\nUsage: nodekeeper [--root \u003croot\u003e] \u003ccommand\u003e [\u003cargs\u003e]\n\nAll-in-one node management tool.\n\nOptions:\n  --root            path to the root directory\n  --help            display usage information\n\nCommands:\n  init              Prepares configs and binaries\n  validator         Validation manager service\n  contract          Contract interaction stuff\n  exporter          Prometheus metrics exporter\n  node              Raw node tools operations\n  seed              Seed utils\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n## FAQ\n\n- **I'm trying to participate in elections, but the node fails to generate keys with `Error: Permission denied (os error 13)`**\n\n  **Answer:** Ensure that the configs folder has correct permissions. This might help:\n  ```bash\n  sudo chown -hR nodekeeper /var/nodekeeper\n  ```\n\n## How it works\n\nThis tool is a replacement of `ever-node-tools` and contains all the necessary functionality to manage a node.\nDuring initialization steps it prepares configs (at `$HOME/.nodekeeper` by default), downloads and builds the node,\nand deploys necessery contracts (all this through a cli with convenient choices!).\n\nAfter contracts configuration this tool manages validator wallet (which is [EVER Wallet contract](https://github.com/broxus/ever-wallet-contract))\nand optionally a DePool (default v3 or stEVER variant);\n\nThe update logic is based on two `systemd` services:\n\n- `validator` - the node itself;\n- `validator-manager` - service wrapper around `nodekeeper validator` command;\n\nIt uses two protocols to communicate with the node - the first one is for the control server (`TCP ADNL`),\nand the second is for other stuff (`UDP ADNL`, same as the protocol used by all nodes in the network).\n\n## Contributing\n\nWe welcome contributions to the project! If you notice any issues or errors, feel free to open an issue or submit a pull request.\n\n## License\n\nThis project is licensed under the [License Apache](https://opensource.org/licenses/Apache-2.0).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbroxus%2Fnodekeeper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbroxus%2Fnodekeeper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbroxus%2Fnodekeeper/lists"}