{"id":13564986,"url":"https://github.com/vocdoni/vocdoni-node","last_synced_at":"2025-10-04T05:52:58.336Z","repository":{"id":37801066,"uuid":"264170702","full_name":"vocdoni/vocdoni-node","owner":"vocdoni","description":"A set of libraries and tools for the Vocdoni decentralized backend infrastructure, the main ground of our universally verifiable, privacy-centric and scalable digital voting protocol","archived":false,"fork":false,"pushed_at":"2025-04-01T08:16:32.000Z","size":17415,"stargazers_count":89,"open_issues_count":76,"forks_count":19,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-08-30T06:25:11.806Z","etag":null,"topics":["blockchain","ethereum","golang","ipfs","privacy-by-design","tendermint","vote-application","vote-system","voting","voting-system","zk-snarks","zksnarks"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vocdoni.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"code-of-conduct.md","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":"2020-05-15T10:58:39.000Z","updated_at":"2025-08-06T19:17:14.000Z","dependencies_parsed_at":"2023-10-11T05:27:51.241Z","dependency_job_id":"4dc854b5-3e7b-4262-b512-d0fabdf138c1","html_url":"https://github.com/vocdoni/vocdoni-node","commit_stats":{"total_commits":3103,"total_committers":29,"mean_commits":107.0,"dds":0.6187560425394779,"last_synced_commit":"baef75f45f0a66859f3a5166ead1744fe556890e"},"previous_names":["vocdoni/go-dvote"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/vocdoni/vocdoni-node","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vocdoni%2Fvocdoni-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vocdoni%2Fvocdoni-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vocdoni%2Fvocdoni-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vocdoni%2Fvocdoni-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vocdoni","download_url":"https://codeload.github.com/vocdoni/vocdoni-node/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vocdoni%2Fvocdoni-node/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277002714,"owners_count":25743355,"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-09-25T02:00:09.612Z","response_time":80,"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":["blockchain","ethereum","golang","ipfs","privacy-by-design","tendermint","vote-application","vote-system","voting","voting-system","zk-snarks","zksnarks"],"created_at":"2024-08-01T13:01:38.882Z","updated_at":"2025-10-04T05:52:58.319Z","avatar_url":"https://github.com/vocdoni.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\u003cp align=\"center\" width=\"100%\"\u003e\n    \u003cimg src=\"https://developer.vocdoni.io/img/vocdoni_logotype_full_white.svg\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\" width=\"100%\"\u003e\n    \u003ca href=\"https://github.com/vocdoni/vocdoni-node/commits/main/\"\u003e\u003cimg src=\"https://img.shields.io/github/commit-activity/m/vocdoni/vocdoni-node\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/vocdoni/vocdoni-node/issues\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/vocdoni/vocdoni-node\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/vocdoni/vocdoni-node/actions/workflows/main.yml/\"\u003e\u003cimg src=\"https://github.com/vocdoni/vocdoni-node/actions/workflows/main.yml/badge.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://godoc.org/go.vocdoni.io/dvote\"\u003e\u003cimg src=\"https://godoc.org/go.vocdoni.io/dvote?status.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://goreportcard.com/report/go.vocdoni.io/dvote\"\u003e\u003cimg src=\"https://goreportcard.com/badge/go.vocdoni.io/dvote\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://coveralls.io/github/vocdoni/vocdoni-node\"\u003e\u003cimg src=\"https://coveralls.io/repos/github/vocdoni/vocdoni-node/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://discord.gg/xFTh8Np2ga\"\u003e\u003cimg src=\"https://img.shields.io/badge/discord-join%20chat-blue.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://twitter.com/vocdoni\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/vocdoni.svg?style=social\u0026label=Follow\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\n  \u003cdiv align=\"center\"\u003e\n    Vocdoni is the first universally verifiable, censorship-resistant, anonymous, and self-sovereign governance protocol. \u003cbr /\u003e\n    Our main aim is a trustless voting system where anyone can speak their voice and where everything is auditable. \u003cbr /\u003e\n    We are engineering building blocks for a permissionless, private and censorship resistant democracy.\n    \u003cbr /\u003e\n    \u003ca href=\"https://developer.vocdoni.io/\"\u003e\u003cstrong\u003eExplore the developer portal »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003ch3\u003eMore About Us\u003c/h3\u003e\n    \u003ca href=\"https://vocdoni.io\"\u003eVocdoni Website\u003c/a\u003e\n    |\n    \u003ca href=\"https://vocdoni.app\"\u003eWeb Application\u003c/a\u003e\n    |\n    \u003ca href=\"https://explorer.vote/\"\u003eBlockchain Explorer\u003c/a\u003e\n    |\n    \u003ca href=\"https://law.mit.edu/pub/remotevotingintheageofcryptography/release/1\"\u003eMIT Law Publication\u003c/a\u003e\n    |\n    \u003ca href=\"https://chat.vocdoni.io\"\u003eContact Us\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003ch3\u003eKey Repositories\u003c/h3\u003e\n    \u003ca href=\"https://github.com/vocdoni/vocdoni-node\"\u003eVocdoni Node\u003c/a\u003e\n    |\n    \u003ca href=\"https://github.com/vocdoni/vocdoni-sdk/\"\u003eVocdoni SDK\u003c/a\u003e\n    |\n    \u003ca href=\"https://github.com/vocdoni/ui-components\"\u003eUI Components\u003c/a\u003e\n    |\n    \u003ca href=\"https://github.com/vocdoni/ui-scaffold\"\u003eApplication UI\u003c/a\u003e\n    |\n    \u003ca href=\"https://github.com/vocdoni/census3\"\u003eCensus3\u003c/a\u003e\n  \u003c/div\u003e\n\n# vocdoni-node\n\nThis repository contains a set of libraries and tools for the **Vocdoni** decentralized protocol, as described [in the documentation](https://developer.vocdoni.io/protocol).\nIt is written in golang and comprises the core of Vocdoni's distributed node architecture. Vocdoni-node is uniquely designed to run all components within a single process, giving full control and eliminating the need for local RPC or IPC connections. This is in contrast to other projects, as Vocdoni-node incorporates go-ethereum, go-ipfs, and tendermint directly as GoLang libraries.\n\nThe latest release is available at https://github.com/vocdoni/vocdoni-node/tree/v1.10.1\n\n### Table of Contents\n- [Getting Started](#getting-started)\n- [Reference](#reference)\n- [Examples](#examples)\n- [Contributing](#contributing)\n- [License](#license)\n\n\n## Getting Started\n\nThere are two operational modes available for the node:\n\n- Gateway: This mode runs a full block validation node and serves as an access point for the API and other services.\n\n- Miner: In this mode, the node can validate blocks or run as a full node. It does not offer external services but can propose and validate new blocks.\n\n### Gateway mode\n\nThe gateway mode is the most frequently used and likely the one you need.\n\nTo run a Vocdoni-node as a gateway, it's recommended to have at least 4 GiB of RAM and 40 GiB of disk space.\n\n#### Compile and run\n\nCompile from source in a golang environment (Go\u003e1.23 required):\n\n```bash\ngit clone https://github.com/vocdoni/vocdoni-node.git -b release-lts-1\ncd vocdoni-node\ngo build ./cmd/node\n./node --help\n./node --mode=gateway --logLevel=info\n```\n\n#### Docker\n\nYou can run vocdoni node as a standalone container with docker compose (recommended).\nIt is recommended to also start `watchtower` to automatically update the container when a new version is released.\n\n```bash\ngit clone https://github.com/vocdoni/vocdoni-node.git -b release-lts-1\ncd vocdoni-node/dockerfiles/vocdoninode\ncp env.example env # see env file for config options\nCOMPOSE_PROFILES=watchtower docker compose up -d\n```\n\nAll data will be stored in the shared volume `run` and the API will be available at `http://127.0.0.1:9090/v2`. Once the node has finished the blockchain sync process, you can connect query the API at this address.\n\nIf the computer has the port 443 available and mapped to a public IP, you might want to enable TLS support (HTTPS) using letsencrypt by setting the environment variable `VOCDONI_TLS_DOMAIN=your.domain.io` in the `env` file.\n\nTo stop the container: \n\n```bash\ndocker compose down\n```\n\n### Miner mode\n\nMiners, also known as validators, play a crucial role in proposing and validating new blocks on the blockchain, ensuring the network operates correctly.\n\nThe process of becoming a validator is selective to mitigate the risk of malicious activity. Although the role is not currently compensated, those interested in supporting the open-source protocol are encouraged to apply.\n\nTo become a validator, there is a manual verification process in place. If you're interested, please follow these steps and reach out to our team via Discord or email for further instructions.\n\nGenerate a private key: `hexdump -n 32 -e '4/4 \"%08x\" 1 \"\"' /dev/urandom`\n\nClone and prepare environment:\n```bash\ngit clone https://github.com/vocdoni/vocdoni-node.git -b release-lts-1\ncd vocdoni-node/dockerfiles/vocdoninode\necho \"VOCDONI_NODE_TAG=release-lts-1\" \u003e .env\n```\n\nCreate the config `env` file.\n\n```bash\nVOCDONI_DATADIR=/app/run\nVOCDONI_MODE=miner\nVOCDONI_CHAIN=lts\nVOCDONI_LOGLEVEL=info\nVOCDONI_VOCHAIN_LOGLEVEL=error\nVOCDONI_DEV=True\nVOCDONI_ENABLEAPI=False\nVOCDONI_ENABLERPC=False\nVOCDONI_LISTENHOST=0.0.0.0\nVOCDONI_LISTENPORT=9090\nVOCDONI_VOCHAIN_MINERKEY=\u003cYOUR_HEX_PRIVATE_KEY\u003e\nVOCDONI_VOCHAIN_MEMPOOLSIZE=20000\nVOCDONI_METRICS_ENABLED=True # if you want prometheus metrics enabled\nVOCDONI_METRICS_REFRESHINTERVAL=5\n```\n\nFinally start the container: `COMPOSE_PROFILES=watchtower docker compose up -d`\n\nYou can monitor the log output: `docker compose logs -f vocdoninode`\n\n#### Fetch the validator key\n\nAt this point **if you want your node to become validator**, you need to extract the public key from the logs: \n\n`docker compose logs vocdoninode | grep publicKey`.\n\nProvide the public key and a name to the Vocdoni team so they can upgrade your node to validator.\n\n## Reference\n\nVocdoni Node provides a core API with which anyone can interact with the Vocdoni protocol. This REST API is documented at our [developer portal](https://developer.vocdoni.io/vocdoni-api/vocdoni-api). You can also generate these API docs by following the instructions in https://github.com/vocdoni/vocdoni-node/blob/main/api/docs/README.md. \n\nThis API is abstracted by the [Vocdoni SDK](https://developer.vocdoni.io/sdk), a typescript library that facilitates integration with vocdoni-node.\n\nThe overall design of the Vocdoni Protocol is [documented](https://developer.vocdoni.io/protocol) as well. This provides a high-level specification of much of the functionality of vocdoni-node. \n\nAdditional lower-level documentation and guidance is provided in the README files for many of the libraries in this repository, especially for internal tools. An example of this is the [statedb](https://github.com/vocdoni/vocdoni-node/blob/main/statedb/README.md) package. \n\n## Examples\n\nVocdoni Node is an extensive library and protocol with many different elements. \n\nYou can see example usage of many of the components in the [test](https://github.com/vocdoni/vocdoni-node/tree/main/test) folder. \n\nWe have also created a standalone node configuration called [vocone](https://github.com/vocdoni/vocdoni-node/tree/main/vocone) to be used for testing. You can see how to build vocone and run a full end-to-end example in the corresponding dockerfile [folder](https://github.com/vocdoni/vocdoni-node/blob/main/dockerfiles/vocone/README.md). You can also just build and run vocone and use it to locally test the API or other vocdoni node functionality.\n\n## Contributing \n\nWhile we welcome contributions from the community, we do not track all of our issues on Github and we may not have the resources to onboard developers and review complex pull requests. That being said, there are multiple ways you can get involved with the project. \n\nPlease review our [development guidelines](https://developer.vocdoni.io/development-guidelines).\n\n### Testing\n\nThe test suite for this repo is an all-in-one compose file to bootstrap a minimal testing environment. To do a voting process test, follow the examples mentioned in the included `dockerfiles/testsuite/README.md`:\n\n```bash\ncd dockerfiles/testsuite\ncat README.md\nbash start_test.sh # creates the environment and runs all tests\n```\n\n## License\n\nThis repository is licensed under the [GNU Affero General Public License v3.0.](./LICENSE)\n\n    Vocdoni Node core library\n    Copyright (C) 2024 Vocdoni Association\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n\n\n---\n\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg)](code-of-conduct.md) [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvocdoni%2Fvocdoni-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvocdoni%2Fvocdoni-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvocdoni%2Fvocdoni-node/lists"}