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.
Use the proxy address for your environment:
For v4 uniqueness proofs, call
verify(...) on the WorldIDVerifier 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])