{"id":21529158,"url":"https://github.com/everx-labs/evernode-ds","last_synced_at":"2025-10-19T06:48:38.644Z","repository":{"id":38775274,"uuid":"284920730","full_name":"everx-labs/evernode-ds","owner":"everx-labs","description":"Community version of Evernode Platform (client supernode with GraphQL API) for TVM blockchains (Everscale, Venom, TON, Gosh) that exposes GraphQL API.","archived":false,"fork":false,"pushed_at":"2024-02-05T21:21:11.000Z","size":16990,"stargazers_count":38,"open_issues_count":2,"forks_count":21,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-24T01:35:35.236Z","etag":null,"topics":["api","blockchain","client","evernode","everscale","fullnode","graphql","node","supernode","ton","toncoin","venom-blockchain","venom-developer-program"],"latest_commit_sha":null,"homepage":"","language":"Solidity","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/everx-labs.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}},"created_at":"2020-08-04T08:23:12.000Z","updated_at":"2024-11-18T19:00:27.000Z","dependencies_parsed_at":"2024-04-16T15:33:06.540Z","dependency_job_id":"2297aa08-4e81-4e4f-acdc-6a0646c5a33a","html_url":"https://github.com/everx-labs/evernode-ds","commit_stats":null,"previous_names":["everx-labs/evernode-ds","tonlabs/evernode-ds"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everx-labs%2Fevernode-ds","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everx-labs%2Fevernode-ds/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everx-labs%2Fevernode-ds/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everx-labs%2Fevernode-ds/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/everx-labs","download_url":"https://codeload.github.com/everx-labs/evernode-ds/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248131467,"owners_count":21052819,"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","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":["api","blockchain","client","evernode","everscale","fullnode","graphql","node","supernode","ton","toncoin","venom-blockchain","venom-developer-program"],"created_at":"2024-11-24T01:56:02.006Z","updated_at":"2025-10-19T06:48:33.608Z","avatar_url":"https://github.com/everx-labs.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Evernode DApp Server\n\nEvernode DApp Server is a community (open source) version of [Ever Platform](https://docs.evercloud.dev/) (client supernode with GraphQL API) for TVM blockchains (Everscale, Venom, TON, Gosh) that exposes [GraphQL API](https://docs.evercloud.dev/reference/graphql-api).\n\nEvernode DApp Server is compatible with [ever-sdk](https://github.com/tonlabs/ever-sdk), [everdev](https://github.com/tonlabs/everdev), [everscale-inpage-provider](https://github.com/broxus/everscale-inpage-provider), [evescale-standalone-client](https://github.com/broxus/everscale-standalone-client) and other libraries and tools for TVM blockchains.\n\nThis repository contains instructions on how to run your own free instance of Evernode Platform to connect your application to TVM blockchains.\\\nThe instructions and scripts were verified on Ubuntu 20.04.\n\n## Table of Contents\n\n-   [1. What is Evernode DApp Server?](#1-what-is-evernode-dapp-server)\n-   [2. Overview of technical architecture](#2-overview-of-technical-architecture)\n    -   [2.1 Service interaction diagram](#21-service-interaction-diagram)\n-   [3. Getting Started](#3-getting-started)\n    -   [3.1 Prerequisites](#31-prerequisites)\n    -   [3.2 Configuration](#32-configuration)\n    -   [3.3 Deployment](#33-deployment)\n    -   [3.4 Tests](#34-tests)\n-   [4. Notes](#4-notes)\n-   [5. Related projects](#5-related-projects)\n\n## 1. What is Evernode DApp Server?\n\nEvernode DApp Server is a set of services that provides a [GraphQL API](https://docs.evercloud.dev/reference/graphql-api) for TVM blockchains.\n\nThe client application can send messages to the blockchain and receive the results by performing the appropriate GraphQL operations:\n\n-   Mutation - to send an external message to the blockchain.\n-   Query - to query blockchain data.\n-   Subscription - to subscribe for blockchain events.\n\nDApp Server consists of:\n\n-   [Evernode](https://github.com/tonlabs/ever-node), written in Rust and focused on performance and safety,\n    is the core element of DApp Server.\n\n-   [Everscale GraphQL Server](https://github.com/tonlabs/ton-q-server) (referred as Q-Server) provides GraphQL\n    endpoint for sending messages and querying blockchain.\n\n-   [ArangoDB](https://www.arangodb.com/documentation/) - multi-model database with the information about all\n    blockchain entities (like accounts, blocks, transactions, etc.) stored over time.\n\n-   [Kafka](https://kafka.apache.org/documentation/) stream-processing platform for communication between services.\n\n-   [StatsD exporter](https://github.com/prometheus/statsd_exporter) to collect and expose metrics to Prometheus.\n\n## 2. Overview of technical architecture\n\nEvernode DApp server provides the following endpoints:\n\n-   https://your.domain/graphql\n-   https://your.domain/arangodb (requires basic authorization)\n-   https://your.domain/metrics\n\n### 2.1 Service interaction diagram:\n\nIn this diagram, the bold arrows show how external messages are processed.\n\n-   The client application sends a message (represented as a GraphQL mutation operation) to the Q-Server.\n-   Q-Server sends this message (via Kafka) to Ever-node for processing.\n-   Ever-node continuously provides (via Kafka) updated blockchain data as JSON documents (blocks, messages, transactions, account states) to ArangoDB.\n-   Q-Server queries ArangoDB, thus knowing the result of the message execution.\n\n![Services interaction](./docs/system_components.svg):\n\nThis scripts run all services as docker containers inside one docker bridge network.\\\nRecommended system configuration for this setup are shown below:\n\n| CPU (cores) | RAM (GiB) | Storage (GiB)                          | Network (Gbit/s) |\n| ----------- | :-------- | :------------------------------------- | :--------------- |\n| 24          | 128       | 2000. (NVMe SSD disks are recommended) | 1                |\n\nSee [4. Notes](#4-notes)\n\n## 3. Getting Started\n\n### 3.1 Prerequisites\n\n-   Host OS: Linux (all scripts tested on Ubuntu 20.04).\n-   DApp server is accessed via HTTPS, so your server must have a fully qualified domain name.\\\n    A self-signed certificate will be received on start-up and will be renewed automatically.\n-   Installed Git, Docker Engine, Docker CLI, Docker Compose v2 or later.\n\n### 3.2 Configuration\n\n3.2.1 Set variables\n\nCheck `configure.sh` and set at least these environment variables:\n\n-   NETWORK_TYPE\n-   EVERNODE_FQDN\n-   LETSENCRYPT_EMAIL\n\n3.2.2 Generate credentials to access the ArangoDB web interface \n\nGenerate credentials (usernames and password) for basic authentication and update `.htpasswd` file.\\\nYou can generate it by running `htpasswd -nb \u003cname\u003e \u003cpassword\u003e`\n\n\n3.2.3 Run configuration script\n\n```\n$ ./configure.sh\n```\n\nThis script creates `./deploy` directory\n\n### 3.3 Deployment\n\nRun `./up.sh`.\n\nAfter the script completes normally (it takes 30 min approx.), the node starts synchronizing its state, which can take several hours.\\\nUse the following command to check the progress:\n\n```\n    docker exec ever-node /ever-node/tools/console -C /ever-node/configs/console.json --cmd getstats\n```\n\nScript output example:\n\n```\ntonlabs console 0.1.286\nCOMMIT_ID: 5efe6bb8f2a974ba0e6b1ea3e58233632236e182\nBUILD_DATE: 2022-10-17 02:32:44 +0300\nCOMMIT_DATE: 2022-08-12 00:22:07 +0300\nGIT_BRANCH: master\n{\n\t\"sync_status\":\t\"synchronization_finished\",\n\t\"masterchainblocktime\":\t1665988670,\n\t\"masterchainblocknumber\":\t9194424,\n\t\"node_version\":\t\"0.51.1\",\n\t\"public_overlay_key_id\":\t\"S4TaVdGitzTApe7GFCj8DbuRIkVEbg+ODzBxhQGIUG0=\",\n\t\"timediff\":\t6,\n\t\"shards_timediff\":\t6,\n     ----%\u003c---------------------\n}\n```\n\nIf the `timediff` parameter is less than 10 seconds, synchronization with masterchain is complete.\\\n`\"sync_status\": \"synchronization finished\"` means synchronization with workchains is complete.\n\n### 3.4 Tests\n\nTo verify that the DApp server is actually functional, after the sync process is complete, run the test below.\nThis test deploys wallet and transfers 0.5 tokens from the wallet to another address.\n\n```\n$ cd tests\n$ chmod o+w package-lock.json\n$ docker build --tag evernode_test .\n$ docker run --rm -e ENDPOINT=https://\u003cyour_domain\u003e/graphql evernode_test\n```\n\n#### Example output\n\n```\n\u003e npx ts-node src/wallet.ts\nYou can topup your wallet from dashboard at https://dashboard.evercloud.dev\nPlease send \u003e= 1 tokens to 0:8a447eca3adde54414ab760d3633b96d5e7706a754450adfed587ac191c5b117\nawaiting...\n```\n\n\u003e Here the test will block until you send some tokens to that address.\\\n\u003e In devnet you can do it using our dashboard at https://dashboard.evercloud.dev or telegram bot https://t.me/everdev_giver_bot\n\n```\nAccount balance is: 100 tokens. Account type is 0\nDeploying wallet contract to address: 0:8a447eca3adde54414ab760d3633b96d5e7706a754450adfed587ac191c5b117 and waiting for transaction...\nContract deployed. Transaction hash 318d2acfabd15a9e5ffd58c06c00074c67eca414f25e973c3332a8aeaa574bf1\nSending 0.5 token to -1:7777777777777777777777777777777777777777777777777777777777777777\nTransfer completed. Transaction hash 54fdd8cce38c6078a25aae61c7deed2e5664c847c171048a814692440ee37610\nTransaction hash: 1d3bf7ef8a50ad38012f304a38c94fe4bca5bc1b50c2d4dd45ce2a71dc7c0921\nTransaction hash: 318d2acfabd15a9e5ffd58c06c00074c67eca414f25e973c3332a8aeaa574bf1\nTransaction hash: 54fdd8cce38c6078a25aae61c7deed2e5664c847c171048a814692440ee37610\n```\n\nCongratulations! Your DApp server is set up.\n\n## 4. Notes\n\n-   This repository is a \"quick start\" to get your first DApp server up and running.\n-   The installation process is simple, written in pure bash and requires installation from scratch.\n-   For simplicity, all services are deployed on one host and the system requirements for it are high, so\n    it makes sense to distribute services across different servers.\\\n    After understanding this installation process, you can easily customize it for yourself.\n\n## 5. Related projects\n\n-   [itgoldio/everscale-dapp-server](https://github.com/itgoldio/everscale-dapp-server)\n    Consider this project if you prefer deployment via Ansible.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feverx-labs%2Fevernode-ds","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feverx-labs%2Fevernode-ds","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feverx-labs%2Fevernode-ds/lists"}