{"id":24196581,"url":"https://github.com/dedis/example-grpc","last_synced_at":"2025-08-18T03:32:26.619Z","repository":{"id":140111638,"uuid":"218546775","full_name":"dedis/example-grpc","owner":"dedis","description":"Example of a simplified Onet using gRPC","archived":false,"fork":false,"pushed_at":"2019-11-29T09:52:47.000Z","size":176,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2023-03-11T19:18:14.387Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/dedis.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}},"created_at":"2019-10-30T14:29:27.000Z","updated_at":"2024-06-19T06:34:14.036Z","dependencies_parsed_at":"2024-06-19T06:46:11.049Z","dependency_job_id":null,"html_url":"https://github.com/dedis/example-grpc","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"purl":"pkg:github/dedis/example-grpc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dedis%2Fexample-grpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dedis%2Fexample-grpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dedis%2Fexample-grpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dedis%2Fexample-grpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dedis","download_url":"https://codeload.github.com/dedis/example-grpc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dedis%2Fexample-grpc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270940360,"owners_count":24671669,"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-18T02:00:08.743Z","response_time":89,"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-01-13T19:35:58.268Z","updated_at":"2025-08-18T03:32:26.564Z","avatar_url":"https://github.com/dedis.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Onet using gRPC\n\nThis repository contains an example of an network overlay that is using gRPC\nfor the network layer.\n\n## How to\n\nInstall the required protoc-gen-go plugin with:\n```\nmake protoc-gen-go\n```\n\nGenerate code from proto files:\n```\nmake generate\n```\n\nRun the tests:\n```\nmake test\n```\n\n## Aggregation\n\nThe overlay provides an aggregation protocol using a tree-based topology. When\ndefined, the protocol will take care of gathering the public identity of each\nnode.\n\n## Architecture\n\nThe overlay is built on top of gRPC. It provides features to create protocols\nbased on multiple interfaces. The first available protocol is the aggregation\nthat will contact a roster of nodes and ask them for a specific value defined\nby the protocol implementation. It will then gather and merge the responses to\nthe root.\n\nTLS is configured with self-signed certificates which means that the public key\nneeds to be passed around the roster so that each node has the certificate of\nthe neighbours it wants to communicate with. TLS is configured to ask for a\ncertificate but anonymous client can still make requests. Some logic requires\na client authentication like for the protocols.\n\nA wrapper is used to enable Web API compatibility and the requests are made on\nthe same port than P2P requests but it is limited according to [gRPC-web](https://github.com/improbable-eng/grpc-web).\n\n### Aggregation with identity\n\nThe aggregation protocol will provide the protocol identities when the dedicated\ninterface is implemented. It is up to the protocol implementation to cache them.\nThe overlay insures that all the identities required are present before calling\n`Process`.\n\nTODO: what to do when a node is offline ? Continue with a truncated\nroster ?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdedis%2Fexample-grpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdedis%2Fexample-grpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdedis%2Fexample-grpc/lists"}