Verax
Verax Attestation Registry

Verax is a shared registry for storing attestations of public interest on EVM chains, designed to improve discoverability and reuse across applications.

Links • Repository Organisation • Global Setup • Workspace Quickstart • Environment Files • Contributing • Contracts Addresses • Subgraphs URLs • Network Prefixes • Deployment and Release Notes • License

## Links - [Published documentation](https://docs.ver.ax/) - [Contribution guide](./CONTRIBUTING.md) - [Explorer](https://explorer.ver.ax) - [SDK package](https://www.npmjs.com/package/@verax-attestation-registry/verax-sdk) ## Statuses [![Lint](https://github.com/Consensys/linea-attestation-registry/actions/workflows/lint.yml/badge.svg)](https://github.com/Consensys/linea-attestation-registry/actions/workflows/lint.yml) [![Contracts](https://github.com/Consensys/linea-attestation-registry/actions/workflows/contracts.yml/badge.svg)](https://github.com/Consensys/linea-attestation-registry/actions/workflows/contracts.yml) [![Examples](https://github.com/Consensys/linea-attestation-registry/actions/workflows/contracts-examples.yml/badge.svg)](https://github.com/Consensys/linea-attestation-registry/actions/workflows/contracts-examples.yml) [![Subgraph](https://github.com/Consensys/linea-attestation-registry/actions/workflows/subgraph.yml/badge.svg)](https://github.com/Consensys/linea-attestation-registry/actions/workflows/subgraph.yml) [![SDK](https://github.com/Consensys/linea-attestation-registry/actions/workflows/sdk.yml/badge.svg)](https://github.com/Consensys/linea-attestation-registry/actions/workflows/sdk.yml) [![Explorer](https://github.com/Consensys/linea-attestation-registry/actions/workflows/explorer-build.yml/badge.svg)](https://github.com/Consensys/linea-attestation-registry/actions/workflows/explorer-build.yml) [![npm](https://img.shields.io/npm/v/@verax-attestation-registry/verax-sdk?color=blue&label=Verax%20SDK)](https://www.npmjs.com/package/@verax-attestation-registry/verax-sdk) [![npm](https://img.shields.io/npm/v/@verax-attestation-registry/verax-contracts?color=blue&label=Verax%20Contracts)](https://www.npmjs.com/package/@verax-attestation-registry/verax-contracts) ## Repository Organisation | Workspace | Purpose | Contributor guide | | ------------ | ----------------------------------------------------------------------------- | ------------------------------------------- | | `contracts/` | Core registries, deploy scripts, upgrade scripts, published contracts package | [contracts/README.md](contracts/README.md) | | `examples/` | Example portals/modules and example-contract CI workspace | [examples/README.md](examples/README.md) | | `sdk/` | TypeScript SDK, generated Graph client, examples and tests | [sdk/README.md](sdk/README.md) | | `subgraph/` | Graph manifests, mappings, tests and Studio deploy scripts | [subgraph/README.md](subgraph/README.md) | | `explorer/` | Public Verax explorer frontend | [explorer/README.md](explorer/README.md) | | `tutorial/` | Demo/tutorial app built on top of the SDK | [tutorial/README.md](tutorial/README.md) | | `doc/` | GitBook source for the published docs | GitBook entrypoint lives in `doc/README.md` | ## Global Setup CI reads Node.js and pnpm directly from the root `package.json`. On this branch, that means: - Node.js `24.22.1` - pnpm `11.9.0` Install dependencies once from the monorepo root: ```bash pnpm install ``` Foundry is required when working on `contracts/` or `examples/`. Other workspaces use the root Node.js/pnpm toolchain plus package-local scripts. ## Workspace Quickstart Run the commands below from the monorepo root. | Area | Common commands | Notes | | --------- | ------------------------------------------------------------------------------------ | ---------------------------------------- | | Contracts | `pnpm --filter @verax-attestation-registry/verax-contracts build` / `test` | Requires Foundry | | Examples | `pnpm --filter @verax-attestation-registry/verax-examples build` / `test` | Requires Foundry | | SDK | `pnpm --filter @verax-attestation-registry/verax-sdk test:unit` / `test:integration` | Uses `.env.example` | | Subgraph | `pnpm --filter linea-attestation-registry-subgraph build:linea-sepolia` / `test` | Deploys to The Graph Studio | | Explorer | `pnpm --filter verax-explorer dev` / `build` | Uses `VITE_*` env vars | | Tutorial | `pnpm --filter @verax-attestation-registry/verax-tutorial dev` / `build` | Demo app, no dedicated CI workflow today | Each workspace README describes the maintainer workflow for that package in more detail. ## Environment Files | Workspace | Expected file | Purpose | | ------------ | ----------------------------------------------------------- | ------------------------------------------------------ | | `contracts/` | `contracts/.env` copied from `contracts/env/.env.` | Deployments, upgrades, explorer verification, reimport | | `sdk/` | `sdk/.env` copied from `sdk/.env.example` | Examples and integration tests | | `explorer/` | `explorer/.env` copied from `explorer/.env.example` | WalletConnect, Infura, The Graph gateway | | `tutorial/` | `tutorial/.env` copied from `tutorial/.env.example` | WalletConnect and Infura for the demo app | | `subgraph/` | No repo-local `.env.example` | Use `graph auth ` when deploying | ## Contributing Day-to-day contributions target `dev`. For contributor workflow, review expectations, package-specific validation, and maintainer/community process, see [CONTRIBUTING.md](./CONTRIBUTING.md). ## Contracts Addresses The core registry and `AttestationReader` addresses below are sourced from the deployment env templates under `contracts/env/` and aligned with the SDK defaults. The standard library addresses are the current published deployments tracked in this repository and should be updated alongside deployment work.
Linea Sepolia - Router = [0xAfA952790492DDeB474012cEA12ba34B788ab39F](https://sepolia.lineascan.build/address/0xAfA952790492DDeB474012cEA12ba34B788ab39F) - AttestationRegistry = [0xDaf3C3632327343f7df0Baad2dc9144fa4e1001F](https://sepolia.lineascan.build/address/0xDaf3C3632327343f7df0Baad2dc9144fa4e1001F) - ModuleRegistry = [0x3C443B9f0c8ed3A3270De7A4815487BA3223C2Fa](https://sepolia.lineascan.build/address/0x3C443B9f0c8ed3A3270De7A4815487BA3223C2Fa) - PortalRegistry = [0xF35fe79104e157703dbCC3Baa72a81A99591744D](https://sepolia.lineascan.build/address/0xF35fe79104e157703dbCC3Baa72a81A99591744D) - SchemaRegistry = [0x90b8542d7288a83EC887229A7C727989C3b56209](https://sepolia.lineascan.build/address/0x90b8542d7288a83EC887229A7C727989C3b56209)
Standard Library - ECDSAModule: 0x43Ed26E6A6f020687F65cf61125a33EcFCa9D608 - ERC1271Module: 0x3130F70a771DccdE24680656Ab340b579BDF539E - FeeModule: 0xC5555Bf0584AdE1c90DcDCA20Ac4b6814F009a4e - IndexerModule: 0x30b493c00D05F6C3BA090d5FDa8743Fa8c075728 - IssuersModule: 0x0BF811Be65D88739BCdCB36515b2499Af02BE503 - SchemaModule: 0xC3969d728E5e6cf01a8B066d42918970Ee2a9eBe - SenderModule: 0x006764D85A351f508Ec02DBCd010251c66BC849F
Linea Mainnet - Router = [0x4d3a380A03f3a18A5dC44b01119839D8674a552E](https://lineascan.build/address/0x4d3a380A03f3a18A5dC44b01119839D8674a552E) - AttestationRegistry = [0x3de3893aa4Cdea029e84e75223a152FD08315138](https://lineascan.build/address/0x3de3893aa4Cdea029e84e75223a152FD08315138) - ModuleRegistry = [0xf851513A732996F22542226341748f3C9978438f](https://lineascan.build/address/0xf851513A732996F22542226341748f3C9978438f) - PortalRegistry = [0xd5d61e4ECDf6d46A63BfdC262af92544DFc19083](https://lineascan.build/address/0xd5d61e4ECDf6d46A63BfdC262af92544DFc19083) - SchemaRegistry = [0x0f95dCec4c7a93F2637eb13b655F2223ea036B59](https://lineascan.build/address/0x0f95dCec4c7a93F2637eb13b655F2223ea036B59) - AttestationReader = [0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c](https://lineascan.build/address/0x40871e247CF6b8fd8794c9c56bB5c2b8a4FA3B6c)
Standard Library - ECDSAModule: 0x2878bdc6A7615600e9b6Aa04f7802267891FFAE5 - ERC1271Module: 0xb2553A7E443DFA7C9dEc01D327FdDff1A5eF59b0 - FeeModule: 0xD2B60076a83C6f6fad2506aF51b297a8725e8E0b - IndexerModule: 0x29205492435E1b06B20CeAeEC4AC41bcF595DFFd - IssuersModule: 0x5bfe4626632e424C616155e67319767239160871 - SchemaModule: 0x0EE9fCFc4A6eDB21F8bf8D2b694EA5C84F382c6E - SenderModule: 0x2790E1E589aBDbC7Ee53390aacC995539228bC5f
Arbitrum Sepolia - Router = [0x374B686137eC0DB442a8d833451f8C12cD4B5De4](https://sepolia.arbiscan.io/address/0x374B686137eC0DB442a8d833451f8C12cD4B5De4) - AttestationRegistry = [0xee5e23492bf49C1F4CF0676b3bF49d78A6dD61c5](https://sepolia.arbiscan.io/address/0xee5e23492bf49C1F4CF0676b3bF49d78A6dD61c5) - ModuleRegistry = [0xEC572277d4E87a64DcfA774ED219Dd4E69E4BDc6](https://sepolia.arbiscan.io/address/0xEC572277d4E87a64DcfA774ED219Dd4E69E4BDc6) - PortalRegistry = [0x1ceb52584B6C45C7049dc7fDC476bC138E4beaDE](https://sepolia.arbiscan.io/address/0x1ceb52584B6C45C7049dc7fDC476bC138E4beaDE) - SchemaRegistry = [0x025531b655D9EE335B8E6cc4C118b313f26ACc8F](https://sepolia.arbiscan.io/address/0x025531b655D9EE335B8E6cc4C118b313f26ACc8F)
Standard Library - ECDSAModule: 0x84D0c725CCe4eB7a7b95A4C36Bc0Ee5B5Df147d6 - ERC1271Module: 0xFa13B02636d888C46e504C16F267CF87131feB07 - FeeModule: 0x41b809c4B5c61FeBB0323F17aF179F7B16500fb3 - IndexerModule: 0xe0bA3B08dC6d08C95d39BE6e3dDa044f1a2896bF - IssuersModule: 0xCA56378292Fa10d95fF03ADEFF0d349c1bbedb67 - SchemaModule: 0xc1d6Bf1E16A7BEe02d11FBA0FA9cD8ff87DdE715 - SenderModule: 0x6634535e7FA978D1e971130437B72454590B42e6
Arbitrum Mainnet - Router = [0xa77196867bB03D04786EF636cDdD82f37A1248a9](https://arbiscan.io/address/0xa77196867bB03D04786EF636cDdD82f37A1248a9) - AttestationRegistry = [0x335E9719e8eFE2a19A92E07BC4836160fC31cd7C](https://arbiscan.io/address/0x335E9719e8eFE2a19A92E07BC4836160fC31cd7C) - ModuleRegistry = [0x3acF4daAB6cbc01546Dd4a96c9665B398d48A4ba](https://arbiscan.io/address/0x3acF4daAB6cbc01546Dd4a96c9665B398d48A4ba) - PortalRegistry = [0x4042D0A54f997EE3a1b0F51e4813654199BFd8bD](https://arbiscan.io/address/0x4042D0A54f997EE3a1b0F51e4813654199BFd8bD) - SchemaRegistry = [0xE96072F46EA0e42e538762dDc0aFa4ED8AE6Ec27](https://arbiscan.io/address/0xE96072F46EA0e42e538762dDc0aFa4ED8AE6Ec27) - AttestationReader = [0x324C060A26444c3fB9B93e03d31e8cfF4b1715C1](https://arbiscan.io/address/0x324C060A26444c3fB9B93e03d31e8cfF4b1715C1)
Standard Library - ECDSAModule: 0x23178D693eB5D0cB2b4f2e4a4b4CDca9b063dC89 - ERC1271Module: 0x2859B1140B50E3E5a19C194b98887c980266c174 - FeeModule: 0x41b809c4B5c61FeBB0323F17aF179F7B16500fb3 - IndexerModule: 0xDb88823B739cC0D091a6119DC9948DF31Fa7Ba15 - IssuersModule: 0x7899A2eb994886db853414df7C8dE32515ADC0f5 - SchemaModule: 0xbFF5440ea31bbd1e943a758C217B1F0720a9BAff - SenderModule: 0x5BE10EFD4FfeB4410b2BBC5c8a4A623b07df05a8
Base Sepolia - Router = [0xE235826514945186227918325D3E5b5f873861A6](https://sepolia.basescan.org/address/0xE235826514945186227918325D3E5b5f873861A6) - AttestationRegistry = [0x374B686137eC0DB442a8d833451f8C12cD4B5De4](https://sepolia.basescan.org/address/0x374B686137eC0DB442a8d833451f8C12cD4B5De4) - ModuleRegistry = [0xEC572277d4E87a64DcfA774ED219Dd4E69E4BDc6](https://sepolia.basescan.org/address/0xEC572277d4E87a64DcfA774ED219Dd4E69E4BDc6) - PortalRegistry = [0x025531b655D9EE335B8E6cc4C118b313f26ACc8F](https://sepolia.basescan.org/address/0x025531b655D9EE335B8E6cc4C118b313f26ACc8F) - SchemaRegistry = [0x66D2F3DCc970343b83a6263E20832184fa71CFe7](https://sepolia.basescan.org/address/0x66D2F3DCc970343b83a6263E20832184fa71CFe7) - AttestationReader = [0xbCcC37Ea3bEeAE614817f53542F1F4FfAE5E19c7](https://sepolia.basescan.org/address/0xbCcC37Ea3bEeAE614817f53542F1F4FfAE5E19c7)
Standard Library - ECDSAModule: 0xc1d6Bf1E16A7BEe02d11FBA0FA9cD8ff87DdE715 - ERC1271Module: 0x6634535e7FA978D1e971130437B72454590B42e6 - FeeModule: 0x718e541B4ED7AbC9596454C8Fa118cB0E8A69550 - IndexerModule: 0x0620C734A779fCE3F00fA68aFCe08B231019655E - IssuersModule: 0xEe57462A369fB886E66e00B4d46c0D69900aEf0d - SchemaModule: 0x2FEe3B89905D7a286254dBea7fF8fB83E8707D60 - SenderModule: 0x5166b1749ea89069bC0f735A397EF636AeF9BD49
Base Mainnet - Router = [0x63b2d528805Fc9373586366705852FA89debd4d0](https://basescan.org/address/0x63b2d528805Fc9373586366705852FA89debd4d0) - AttestationRegistry = [0xA0080DBd35711faD39258E45d9A5D798852b05D4](https://basescan.org/address/0xA0080DBd35711faD39258E45d9A5D798852b05D4) - ModuleRegistry = [0xAd0C12db58098A6665CBEf48f60eB67d81d1F1ff](https://basescan.org/address/0xAd0C12db58098A6665CBEf48f60eB67d81d1F1ff) - PortalRegistry = [0xcbf28432C25B400E645F0EaC05F8954e8EE7c0d6](https://basescan.org/address/0xcbf28432C25B400E645F0EaC05F8954e8EE7c0d6) - SchemaRegistry = [0x8081dCd745f160c148Eb5be510F78628A0951c31](https://basescan.org/address/0x8081dCd745f160c148Eb5be510F78628A0951c31) - AttestationReader = [0xbEDd72a8cCfBEC4e575dCdC1659A891018051a5C](https://basescan.org/address/0xbEDd72a8cCfBEC4e575dCdC1659A891018051a5C)
Standard Library - ECDSAModule: 0x1Cfaa05f833EB9A45d3f0846De50D97c7a8f256F - ERC1271Module: 0xB20aF6D674E5F25Ce1De91B1B72b9e18320e13A2 - FeeModule: 0xCacfE0C3bc2f160a072f4f72AAe964507f0964a0 - IndexerModule: 0x5b4ECD59b6adf86ABBF607519638C1Ab5C95fd83 - IssuersModule: 0xCce050D3027C4F6817f2F0e5f07e000Cc07AE0e0 - SchemaModule: 0xe50837E0f22B341038D1ea0A40C4Fe2AF26E00B0 - SenderModule: 0x1A8720d71541464e0e0D2cB8627Dadf6BdE757FF
BSC Testnet - Router = [0x90b8542d7288a83EC887229A7C727989C3b56209](https://testnet.bscscan.com/address/0x90b8542d7288a83EC887229A7C727989C3b56209) - AttestationRegistry = [0x5Cc4029f0dDae1FFE527385459D06d81DFD50EEe](https://testnet.bscscan.com/address/0x5Cc4029f0dDae1FFE527385459D06d81DFD50EEe) - ModuleRegistry = [0x6c46c245918d4fcfC13F0a9e2e49d4E2739A353a](https://testnet.bscscan.com/address/0x6c46c245918d4fcfC13F0a9e2e49d4E2739A353a) - PortalRegistry = [0xA4a7517F62216BD42e42a67dF09C25adc72A5897](https://testnet.bscscan.com/address/0xA4a7517F62216BD42e42a67dF09C25adc72A5897) - SchemaRegistry = [0x51929da151eC2C5a5881C750E5b9941eACC46c1d](https://testnet.bscscan.com/address/0x51929da151eC2C5a5881C750E5b9941eACC46c1d)
Standard Library - ECDSAModule: 0x84D0c725CCe4eB7a7b95A4C36Bc0Ee5B5Df147d6 - ERC1271Module: 0xFa13B02636d888C46e504C16F267CF87131feB07 - FeeModule: 0x41b809c4B5c61FeBB0323F17aF179F7B16500fb3 - IndexerModule: 0xe0bA3B08dC6d08C95d39BE6e3dDa044f1a2896bF - IssuersModule: 0xCA56378292Fa10d95fF03ADEFF0d349c1bbedb67 - SchemaModule: 0xc1d6Bf1E16A7BEe02d11FBA0FA9cD8ff87DdE715 - SenderModule: 0x6634535e7FA978D1e971130437B72454590B42e6
BSC Mainnet - Router = [0x7a5C1fAC7fF9908a8b2ED479e060619213116A47](https://bscscan.com/address/0x7a5C1fAC7fF9908a8b2ED479e060619213116A47) - AttestationRegistry = [0x3D8A3a8FF21bD295dbBD5319C399e2C4FD27F261](https://bscscan.com/address/0x3D8A3a8FF21bD295dbBD5319C399e2C4FD27F261) - ModuleRegistry = [0xD70a06f7A0f197D55Fa841fcF668782b2B8266eB](https://bscscan.com/address/0xD70a06f7A0f197D55Fa841fcF668782b2B8266eB) - PortalRegistry = [0xb2553A7E443DFA7C9dEc01D327FdDff1A5eF59b0](https://bscscan.com/address/0xb2553A7E443DFA7C9dEc01D327FdDff1A5eF59b0) - SchemaRegistry = [0x29205492435E1b06B20CeAeEC4AC41bcF595DFFd](https://bscscan.com/address/0x29205492435E1b06B20CeAeEC4AC41bcF595DFFd)
Standard Library - ECDSAModule: 0xd580BD1259576C489543beBa99d4678453112A7f - ERC1271Module: 0x090AbB61eCDa7aD3a2FD83BA5b89bEd2946aA1c8 - FeeModule: 0x88bA70cB465ed130D899e0709CC22757Fa4D3704 - IndexerModule: 0x0B9223633DEF4455228fd1Ad0384a57eEaeE2303 - IssuersModule: 0x8d3634274bD47c6A66e4b216fCcafF99F74460F9 - SchemaModule: 0x65E3025c4B82f35918DeDd57f2058e7de7F92c33 - SenderModule: 0xb439016Da49eA9bD036523F0B5416B0319027e8E
## Subgraphs URLs These URLs should stay aligned across: - `subgraph/package.json` - `sdk/src/VeraxSdk.ts` - `sdk/src/utils/urlResolver.ts` - [Linea Sepolia](https://api.studio.thegraph.com/query/67521/verax-v2-linea-sepolia/v0.0.3) - [Linea Mainnet](https://api.studio.thegraph.com/query/67521/verax-v2-linea/v0.0.1) - [Arbitrum Sepolia](https://api.studio.thegraph.com/query/67521/verax-v2-arbitrum-sepolia/v0.0.3) - [Arbitrum Mainnet](https://api.studio.thegraph.com/query/67521/verax-v2-arbitrum/v0.0.2) - [Base Sepolia](https://api.studio.thegraph.com/query/67521/verax-v2-base-sepolia/v0.0.3) - [Base Mainnet](https://api.studio.thegraph.com/query/67521/verax-v2-base/v0.0.1) - [BSC Testnet](https://api.studio.thegraph.com/query/67521/verax-v2-bsc-testnet/v0.0.2) - [BSC Mainnet](https://api.studio.thegraph.com/query/67521/verax-v2-bsc/v0.0.2) ## Network Prefixes Attestation IDs embed a 32-byte chain prefix. The short forms below correspond to the values declared in `contracts/script/utils.ts`. - Linea Sepolia - `0x0000` - Linea Mainnet - `0x0000` - Arbitrum Sepolia - `0x0001` - Arbitrum Mainnet - `0x0001` - Base Sepolia - `0x0005` - Base Mainnet - `0x0005` - BSC Testnet - `0x0006` - BSC Mainnet - `0x0006` - Ethereum Sepolia - `0x0008` ## Deployment and Release Notes Adding or updating a public Verax deployment usually touches more than one workspace: 1. Deploy or upgrade the core contracts in `contracts/`. 2. Build and publish the matching subgraph deployment in `subgraph/`. 3. Update SDK defaults and fallback URLs in `sdk/`. 4. Update explorer network config and gateway overrides in `explorer/`. 5. Update this root README if public addresses, subgraph URLs, or prefixes changed. Releases are currently maintainers-only and run through the manual `releaser.yml` workflow, which merges `dev` into `main` and then rebases `dev` onto `main`. ## License [![License](https://img.shields.io/badge/license-MIT-green)](./LICENSE)