{"id":15172288,"url":"https://github.com/rpc-ag/rpc-aggregator","last_synced_at":"2025-10-30T15:16:30.972Z","repository":{"id":82800127,"uuid":"603771797","full_name":"rpc-ag/rpc-aggregator","owner":"rpc-ag","description":"docs are at https://docs.rpc.ag/","archived":false,"fork":false,"pushed_at":"2024-01-22T20:15:50.000Z","size":73,"stargazers_count":16,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-31T13:43:26.419Z","etag":null,"topics":["balancer","blockchain","grafana","infrastructure","monitoring","observability","prometheus","proxy","quicknode","quicknode-rpc","solana"],"latest_commit_sha":null,"homepage":"https://rpc.ag/","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/rpc-ag.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}},"created_at":"2023-02-19T14:32:42.000Z","updated_at":"2025-01-10T03:16:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"e9049345-2e75-4eea-b05a-e70bfdce90ac","html_url":"https://github.com/rpc-ag/rpc-aggregator","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpc-ag%2Frpc-aggregator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpc-ag%2Frpc-aggregator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpc-ag%2Frpc-aggregator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpc-ag%2Frpc-aggregator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rpc-ag","download_url":"https://codeload.github.com/rpc-ag/rpc-aggregator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238247978,"owners_count":19440879,"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":["balancer","blockchain","grafana","infrastructure","monitoring","observability","prometheus","proxy","quicknode","quicknode-rpc","solana"],"created_at":"2024-09-27T10:00:29.695Z","updated_at":"2025-10-26T02:31:08.056Z","avatar_url":"https://github.com/rpc-ag.png","language":"Go","funding_links":[],"categories":["Solana Infrastructure and RPC"],"sub_categories":["Notes"],"readme":"# RPC Aggregator\n\nWelcome to rpc.ag, the rpc aggregator tool for DApps! It simplifies node provider integration\nby balancing requests across multiple providers through a single endpoint. rpc.ag also enhances observability, improving\nthe overall management and efficiency of your DApp infrastructure. Empower the community with better control and\nobservability by using rpc.ag as the homepage of DApp blockchain infrastructure. Big brothers started watching node\nproviders.\n\n## Architecture\n\nThe architecture of the RPC aggregator with load balancing is shown in the following flowchart:\n\n```mermaid\nflowchart LR \n    CC(CLI) --\u003e RPCProxy\n    RC(Rest) --\u003e RPCProxy\n    RPCC(RPC) --\u003e RPCProxy\n    WSC(WS) --\u003e RPCProxy\n    subgraph RPC Proxy\n      RPCProxy(Handler) --\u003e Routing\n        subgraph fasthttp\n         Routing --\u003e Auth(Auth \u0026 Cors) \n         Auth --\u003e Balancer\n        end\n         Balancer --\u003e Proxy\n    end\n    Proxy --\u003e|TCP -\u003e 100ms| Upstream1[Provider 1]  \n    Proxy --\u003e|TCP -\u003e 101ms| Upstream2[Provider 2] \n    Proxy --\u003e|TCP -\u003e 200ms| Upstream3[Provider 3] \n    Proxy --\u003e|TCP -\u003e 300ms| Upstream4[Provider N]\n```\n\nif you are curious about details\n\n## Short-Term TODO\n\n- [x] Implement rate limiting\n- [x] Implement CORS Policy and api keys\n- [ ] Implement a ping metric fetcher from all providers\n- [ ] Implement a healthcheck scheduler to add the provider(node) back when they are functioning properly\n- [ ] Detect when a node is behind, remove it and watch closely again\n- [ ] Implement prometheus metrics \u0026 endpoint\n- [ ] Implement an API lists all nodes (except their API keys) their performance and a simple uptime\n\n## Roadmap\n\n### Phase 0: Release v0 ⌛️\n\n- [x] Distribute api keys for every project attends to [grizzlython](https://solana.com/grizzlython) with ability of;\n- [x] Api key auth \u0026 CORS\n- [x] Rate limiting\n\n### Phase 1: Public Page\n\n- [ ] Build a public page on [rpc.ag](rpc.ag) that showcases the RPC Aggregator and its features.\n- [ ] Include information on how to use the RPC Aggregator.\n- [ ] Build an uptime page for transparency and accountability.\n- [ ] Show fastest \u0026 most available node providers with uptime history\n- [ ] Show average ping time with ability of filtering by provider and region\n\n### Phase 2: Prometheus Exporter and Grafana Dashboards\n\n- Build a Prometheus exporter that exposes the collected metrics in a format that can be scraped by Prometheus.\n- Create a set of Grafana dashboards that visualize the performance metrics for the RPC Aggregator and its providers.\n\n### Phase 3: Uptime Page\n\n- Develop an uptime page that displays the current status of the RPC Aggregator and the providers.\n- Integrate the monitoring system with the uptime page to display real-time health and performance metrics.\n- Allow users to subscribe alerts for downtime or performance issues.\n\n### Phase 4: Become the home page of blockchain infrastructure\n\n- Yes.\n\nWith this roadmap, we aim to add a robust monitoring and performance tracking system to the RPC Aggregator, along with a\nPrometheus exporter, Grafana dashboards, an uptime page, and a public page. These features will provide greater\nvisibility into the health and performance of the RPC Aggregator and its providers, and promote transparency and\naccountability for blockchain world.\n\n## Developers\n\nrpc.ag provides free rpc endpoints for developers and for projects at their super early stage. Please reach us at\ninfo@rpc.ag\n\n## Providers\n\nIf you are a node provider and want to support developer community and want to be mentioned here, reach us at\ninfo@rpc.ag\n\n## Contributing\n\nIf you would like to contribute to the RPC Aggregator with load balancing, please fork the repository and create a pull\nrequest with your changes. Be sure to include unit tests and adhere to the project's coding style.\n\nMakefile Overview\n-----------------\n\nThis project uses a Makefile to manage different actions related to the project, including building, running, testing,\nchecking, creating a Docker image, running a Docker container, and cleaning. The following is a brief overview of each\ntarget in the Makefile:\n\n- `build`: builds the project using the `go build` command and generates the binary file in the `bin/` directory\n- `run`: runs the binary file generated by the `build` target and passes the configuration file as an argument\n- `runp`: runs the binary file generated by the `build` target with a private configuration file located in\n  the `_private/` directory\n- `test`: tests the project using the `go test` command\n- `check`: runs various checks on the project, including verifying the module dependencies, building, vetting, and\n  linting the code\n- `image`: builds a Docker image of the project using the `docker build` command\n- `run-docker`: runs a Docker container of the project using the `docker run` command and maps port 8080\n- `clean`: removes the binary file and the `bin/` directory\n\nUsage\n-----\n\n1. Build the project using the `make build` command\n2. Run the project using the `make run` or `make runp` command\n3. Test the project using the `make test` command\n4. Check the project using the `make check` command\n5. Build a Docker image of the project using the `make image` command\n6. Run a Docker container of the project using the `make run-docker` command\n7. Clean the project using the `make clean` command\n\nNote: Some Makefile targets require the `go`, `docker`, `staticcheck`, and `golint` commands to be installed.\n\n\u003e IF, the project get support (grant from any blockchain) to cover some server expenses and a bit more, we will share it\n\u003e to developers who contribute to rpc.ag at any level (proxy, doc, monitoring, etc) we will also open some grants for\n\u003e huge tasks and/or issues\n\nTotal grant so far: $0  \nSol Wallet to support, donate \u0026 track `rpcroe9QQug5tfnG5hvZRCv65R27n3JdFpWuxhBkekH`\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frpc-ag%2Frpc-aggregator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frpc-ag%2Frpc-aggregator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frpc-ag%2Frpc-aggregator/lists"}