Addresses
libID deploys every contract through a factory with CREATE3. An address depends only on the contract’s name and the factory, and each environment has its own factory. So a contract has one address on every production network and another on every testnet. Within an environment these addresses never change: contract updates are upgrades at the same address.
| Contract | Production | Testnet |
|---|---|---|
IdentityRegistry | 0xbefd300aff7d4a67fb381afe8b3596793d3e9a83 | 0x25f29c8c765db2f27d1e2b23987a7b0655c7d640 |
HandleEscrow | 0x17a244e23ef1f12071298a1862194fea3d00bbf7 | 0x57355e1d1bcf61fec9b2e5cad60dcccdddc4d8e5 |
CeremonyProofVerifier | 0x36e6d6cf465cb9f0615ceb0fc37ef30927dac66e | 0xa795b14a2e09daf273bc6971058b0462c7d6be42 |
NotaryService | 0x2feee7c87bec78853afc223135735d4786e75177 | 0xa773ec5e7500d1c87827ab1b899bbd992c1b5931 |
| GitHub platform verifier | 0xdd7d34f2302bc2ccac36bdcec5fdafe0ca91f888 | 0xb5fdf35eedf7c849f3d1e41675d8b8a41487e248 |
| X platform verifier | 0x61d79debf1b7e512ae8b305ba76c6f82f4609142 | 0x9f655c2fe778260d90f3202d97da0a46510aa3d0 |
| Google platform verifier | 0x727f4a1c9040a94ca27f74667c70d1c2951a0b5a | 0x5cfb807545e0e2ce4d7dac7d97ab0583e3fbe1c6 |
GoogleJwtRoots | 0x1f3d9b49efde0c12ed2ffeab67165ebe0c97517a | 0x8a14a5dda7662f88a5448b9b8b2ca9f1d5742904 |
LibidFactory | 0xb7432c991be3167689d5e80c9e2bf1ff5cccd2e0 | 0x9dbf2b5f96cb31a48cca4e25d2c8348be414ebc8 |
Production is Ethereum mainnet. The testnets are Sepolia and Eden testnet. Every network listed here runs libID-contracts v0.17.0, the version these docs describe. The same address on two networks does not by itself mean the same version: an upgrade on one network does not change the other.
These addresses come from
chain-configurations,
where libid-deploy plan --print-addresses generates them. If this page and
that repository disagree, trust the repository.
Most apps only need IdentityRegistry. Your code talks to the others only if it
builds proofs itself.
Local stacks
Section titled “Local stacks”Two ways to run libID on anvil give two different sets of addresses. See Test on a local chain for both.
local-dev.toml in chain-configurations deploys the full stack the way the
public networks do: through a factory with CREATE3, with anvil’s first
account as the deployer. On a fresh anvil:
| Contract | Address |
|---|---|
IdentityRegistry | 0x105b32e3daa9fda3572e89992c73b85a8a1065b3 |
HandleEscrow | 0xcd1fb9627c011cce322dabfcbcb4a09f66b26432 |
CeremonyProofVerifier | 0xbf95e2ecad436a807f3204ac4cf388f3fa7b7b77 |
NotaryService | 0x562ff3231d8d3f8b0615914186e858c7cbfc2994 |
| GitHub platform verifier | 0x12126c434c906ae8fc9731a96845bbf7bb679b9b |
| X platform verifier | 0x2a529253505b724a2ebd284ad40fcde5cc1dd5a7 |
| Google platform verifier | 0xc32fca530bfe3c7f54bcb69cec8d965d4a52c73d |
GoogleJwtRoots | 0x70580b148be716ad86da3f94243c9a8f3d5768bc |
LibidFactory | 0x49852bc32a52a5cb5cdda135d1b244f5f5d57226 |
The local-chain project the guides’ output comes from is different. It
deploys IdentityRegistry, a CeremonyProofVerifier with test verifiers,
and HandleEscrow, with plain CREATE from anvil’s first account. The two
your code uses land at:
| Contract | Address |
|---|---|
IdentityRegistry | 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 |
HandleEscrow | 0x0B306BF915C4d645ff596e518fAf3F9669b97016 |
That project is not published yet.