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
[](https://github.com/Consensys/linea-attestation-registry/actions/workflows/lint.yml)
[](https://github.com/Consensys/linea-attestation-registry/actions/workflows/contracts.yml)
[](https://github.com/Consensys/linea-attestation-registry/actions/workflows/contracts-examples.yml)
[](https://github.com/Consensys/linea-attestation-registry/actions/workflows/subgraph.yml)
[](https://github.com/Consensys/linea-attestation-registry/actions/workflows/sdk.yml)
[](https://github.com/Consensys/linea-attestation-registry/actions/workflows/explorer-build.yml)
[](https://www.npmjs.com/package/@verax-attestation-registry/verax-sdk)
[](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)