{"id":34590815,"url":"https://github.com/graphops/graphcast-registry","last_synced_at":"2026-04-19T16:01:28.358Z","repository":{"id":168346186,"uuid":"546681990","full_name":"graphops/graphcast-registry","owner":"graphops","description":"Graphcast Registry allows registering a Graphcast ID to join Graphcast","archived":false,"fork":false,"pushed_at":"2024-02-01T13:32:49.000Z","size":692,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2024-02-01T19:45:15.963Z","etag":null,"topics":["gossip","graph-protocol","registry","solidity","the-graph"],"latest_commit_sha":null,"homepage":"https://github.com/graphops/graphcast-registry","language":"JavaScript","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/graphops.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"contributing.md","funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"security.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-10-06T13:26:44.000Z","updated_at":"2024-02-01T19:45:15.964Z","dependencies_parsed_at":null,"dependency_job_id":"89b4f112-1b91-4f9a-baaf-132805d871de","html_url":"https://github.com/graphops/graphcast-registry","commit_stats":null,"previous_names":["graphops/graphcast-registry"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/graphops/graphcast-registry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphops%2Fgraphcast-registry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphops%2Fgraphcast-registry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphops%2Fgraphcast-registry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphops%2Fgraphcast-registry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/graphops","download_url":"https://codeload.github.com/graphops/graphcast-registry/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphops%2Fgraphcast-registry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32012787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"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":["gossip","graph-protocol","registry","solidity","the-graph"],"created_at":"2025-12-24T10:51:00.705Z","updated_at":"2026-04-19T16:01:28.352Z","avatar_url":"https://github.com/graphops.png","language":"JavaScript","readme":"# Graphcast Registry Contract\n\n[![Docs](https://img.shields.io/badge/docs-latest-brightgreen.svg)](https://docs.graphops.xyz/graphcast/intro)\n\n## Introduction\n\nGraphcast is a decentralized, distributed peer-to-peer (P2P) communication tool that allows Indexers across the network to exchange information in real-time. This registry contract allows Indexers to register a separate identity to send messages on the Graphcast network as an Indexer securely. \n\nTo see the full idea behind Graphcast, you can check out our [docs](https://docs.graphops.xyz/graphcast/intro) for it.\n\n## Features\n\nGraphcast Registry contract allows an address to set GraphcastID by calling `setGraphcastID(indexer_address, graphcastID_address)` as either indexer or indexer operator, or calling `setGraphcastID(graphcastID_address)` as the indexer address. The relationship between an indexer address to its GraphcastID is limited to 1:1, and cannot be set to itself. This restriction provides consistency and security for the indexer identity to operate on Graphcast as one GraphcastID operating across radio applications. \n\nThe initial GraphcastID for all addresses are simply 0x0. Calling `setGraphcastIDFor` with a new address will overwrite the previous relationship, and can be unset completely by setting the address back to 0x0.\n\nThe contract is verified, upgradable, and owned by a Gnosis safe multisig. Any upgrades to the Registry contract will require signature from the multisig.\n\n## Quickstart\n\nTo deploy the contract, provide environmental variables as shown in `.env.example` for whichever network you want to deploy to ({NETWORK}_PRIVATE_KEY, {NETWORK}_ETH_PROVIDER, ETHERSCAN_API_KEY, {NETWORK}_GNOSIS_SAFE, PROXY_ADDRESS). \n\nWith Hardhat CLI:\n\n- `npx hardhat node` if you would like to deploy in a local environment.\n- `npx hardhat compile` to compile the Registry contract.\n- `npx hardhat run scripts/deploy.js --network [localhost/goerli/mainnet]` to simply deploy the contract. \n- `npx hardhat run scripts/upgrade.js --network [localhost/goerli/mainnet]` to upgrade the contract. \n- `npx hardhat run scripts/deploy_verify_admin.js --network [localhost/goerli/mainnet]` to run the script that deploys, verifies, and update admin address of the contract. Provide the Gnosis safe address as the proxy admin for secure upgrades.\n\n## Current addresses\n\nThe contract proxy addresses are listed below, which should link to implementation and proxyAdmin addresses.\n\n| Network ID         | Network                           | Proxy Contract Address                                                               |\n| --------- | ------------------------------ | ------------------------------------------------------------------------- |\n| 1 | `Mainnet`          | `0x89f97698d6006f25570cd2e31737d3d22aedcbcf`             |\n| 5 | `Goerli`           | `0x26ebbA649FAa7b56FDB8DE9Ea17aF3504B76BFA0`                                                |\n| 42161 | `Arbitrum-one`           | `0xfae79e8cb8fbac2408e5baf89262bd92b6ca464a`                             |\n| 421613 | `Arbitrum-goerli`         | `0x50c2d70a41ecefe4cc54a331457ea204ecf97292`                  |\n| 421614 | `Arbitrum-sepolia`         | `0x17c3a072E5b1B2c260C29D289ee2E7372b8f7C69`                  |\n\n\nSetting a graphcast id on the registry require validation through The Graph network contracts, listed below. \n\n- Service Registry is used in the Registry subgraph to validate an indexer account on The Graph, as it checks if an Eth address is a registered indexer to the Graph network.\n- Staking contract validates the indexer authorization to an operator. The registry contract uses the staking contract `isOperator` function to allow either indexer address or an indexer operator to call setGraphcastIDFor.\n\n| Network ID         | Network                           | Service Registry                            |Staking contract                            |\n| --------- | ------------------------------ | ------------------------------------------ | ------------------------------------------ |\n| 1 | `Mainnet`          |    `0xaD0C9DaCf1e515615b0581c8D7E295E296Ec26E6`          | `0xF55041E37E12cD407ad00CE2910B8269B01263b9` |\n| 5 | `Goerli`           | `0x7CF8aD279E9F26b7DAD2Be452A74068536C8231F` |    `0x35e3Cb6B317690d662160d5d02A5b364578F62c9` | \n| 42161 | `Arbitrum-one`           |      `0x072884c745c0A23144753335776c99BE22588f8A`                        | `0x00669A4CF01450B64E8A2A20E9b1FCB71E61eF03` |\n| 421613 | `Arbitrum-goerli`         |    `0x07ECDD4278D83Cd2425cA86256634f666b659e53`               | `0xcd549d0C43d915aEB21d3a331dEaB9B7aF186D26` |\n\n\n## Configuring\n\n| Name                           | Description                                                               |\n| ------------------------------ | ------------------------------------------------------------------------- |\n| `{NETWORK}_PRIVATE_KEY`           | Eth Network address private key                                                |\n| `{NETWORK}_ETH_PROVIDER`          | Eth Network block provider API endpoint (ex. Infura, Alchemy, ...)             |\n| `{NETWORK}_GNOSIS_SAFE`           | Eth Network Gnosis Safe address for contract owner                             |\n| `{NETWORK}_PROXY_ADDRESS`         | Eth Network Contract proxy address for upgrading the contract                  |\n| `ETHERSCAN_API_KEY`            | Etherscan (or Arbiscan) account API key used for contract verification                  |\n| `DEFENDER_TEAM_API_KEY`        | Openzeppelin Upgrade defender key for upgrading the contract              |\n| `DEFENDER_TEAM_API_SECRET_KEY` | Openzeppelin Upgrade defender secret key for upgrading the contract       |\n\n## Upgrading\n\nAfter writing the new contract version (`GraphcastRegistryV#`), update `upgrade.js` with the new version number, double check the proxy address, and run the script.\n\nUpdate the abis files from generated artifcats. \n\n## Contributing\n\nWe welcome and appreciate your contributions! Please see the [Contributor Guide](/CONTRIBUTING.md), [Code Of Conduct](/CODE_OF_CONDUCT.md) and [Security Notes](/SECURITY.md) for this repository.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphops%2Fgraphcast-registry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraphops%2Fgraphcast-registry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphops%2Fgraphcast-registry/lists"}