1. Verifying Legacy proofs (World ID 3.0)
For v3 proofs, verify againstWorldIDRouter.verifyProof(...). Use the Router address for the chain you’re deploying to:
groupId = 1 (Orb-only on-chain path).
If your v3 proof arrives as ABI-encoded bytes, decode it to uint256[8] before
calling verifyProof:
2. Verifying Uniqueness proofs in WorldIDVerifier.sol (World ID 4.0)
WorldIDVerifier is deployed on World Chain Mainnet as an upgradeable proxy.
WorldIDSatellite is deployed on other chains as an upgradeable proxy.
Use the proxy address for your environment:
For v4 uniqueness proofs, call
verify(...) on the WorldIDVerifier or WorldIDSatellite proxy and
store used nullifiers to enforce one-human-one-action semantics in your
contract.
nullifier=responses[i].nullifieraction=keccak256(action)asuint256rpId= numeric form of yourrp_context.rp_id(therp_-prefixed string from your RP context, not the result)nonce= top-levelnoncesignalHash=responses[i].signal_hashexpiresAtMin=responses[i].expires_at_minissuerSchemaId=responses[i].issuer_schema_idcredentialGenesisIssuedAtMin= the request’sgenesis_issued_at_minconstraint (0if unconstrained) — not returned inresponses[i]proof=responses[i].proof(uint256[5])