Skip to content

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.

ContractProductionTestnet
IdentityRegistry0xbefd300aff7d4a67fb381afe8b3596793d3e9a830x25f29c8c765db2f27d1e2b23987a7b0655c7d640
HandleEscrow0x17a244e23ef1f12071298a1862194fea3d00bbf70x57355e1d1bcf61fec9b2e5cad60dcccdddc4d8e5
CeremonyProofVerifier0x36e6d6cf465cb9f0615ceb0fc37ef30927dac66e0xa795b14a2e09daf273bc6971058b0462c7d6be42
NotaryService0x2feee7c87bec78853afc223135735d4786e751770xa773ec5e7500d1c87827ab1b899bbd992c1b5931
GitHub platform verifier0xdd7d34f2302bc2ccac36bdcec5fdafe0ca91f8880xb5fdf35eedf7c849f3d1e41675d8b8a41487e248
X platform verifier0x61d79debf1b7e512ae8b305ba76c6f82f46091420x9f655c2fe778260d90f3202d97da0a46510aa3d0
Google platform verifier0x727f4a1c9040a94ca27f74667c70d1c2951a0b5a0x5cfb807545e0e2ce4d7dac7d97ab0583e3fbe1c6
GoogleJwtRoots0x1f3d9b49efde0c12ed2ffeab67165ebe0c97517a0x8a14a5dda7662f88a5448b9b8b2ca9f1d5742904
LibidFactory0xb7432c991be3167689d5e80c9e2bf1ff5cccd2e00x9dbf2b5f96cb31a48cca4e25d2c8348be414ebc8

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.

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:

ContractAddress
IdentityRegistry0x105b32e3daa9fda3572e89992c73b85a8a1065b3
HandleEscrow0xcd1fb9627c011cce322dabfcbcb4a09f66b26432
CeremonyProofVerifier0xbf95e2ecad436a807f3204ac4cf388f3fa7b7b77
NotaryService0x562ff3231d8d3f8b0615914186e858c7cbfc2994
GitHub platform verifier0x12126c434c906ae8fc9731a96845bbf7bb679b9b
X platform verifier0x2a529253505b724a2ebd284ad40fcde5cc1dd5a7
Google platform verifier0xc32fca530bfe3c7f54bcb69cec8d965d4a52c73d
GoogleJwtRoots0x70580b148be716ad86da3f94243c9a8f3d5768bc
LibidFactory0x49852bc32a52a5cb5cdda135d1b244f5f5d57226

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:

ContractAddress
IdentityRegistry0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
HandleEscrow0x0B306BF915C4d645ff596e518fAf3F9669b97016

That project is not published yet.