zkKYC Passed: Why Can't You Access Permissioned Liquidity Pools?

 / 
2

You passed zk KYC, but you still cannot enter the permissioned liquidity pool. This is common. The problem is usually not you. On-chain identity verification has many layers. Passing KYC is not enough.

zkKYC only proves that you passed compliance review at a certain point in time. But a permissioned liquidity pool runs several extra checks on-chain before it lets you in.

First hurdle: the proof is 'static', but the requirement is 'dynamic'

Your zkKYC proof is valid at the moment it is generated. But the entry rules of a permissioned liquidity pool can change in real time. The issuer may adjust the requirements. They may not only require KYC approval, but also require the wallet to hold a certain asset, meet a minimum holding time, or have never interacted with certain contracts.

A KYC proof can only prove 'who you are'. It cannot prove 'whether your current wallet status still meets the requirements'. Some pools even require you to generate a new proof for every interaction.

Second hurdle: putting the proof on-chain may expose your address

Zero-knowledge proofs are designed to protect privacy. But there is an awkward point: when your zkKYC proof interacts with an on-chain smart contract, the existence of that proof is publicly recorded on-chain.

This means that once you have used this proof to interact with an on-chain service, your wallet address may be labeled as 'a wallet that holds a zkKYC proof'. Some pools may actually have an entry rule that says 'addresses holding any KYC proof are not allowed'. The issuer wants the pool to stay anonymous. Your compliance proof becomes a rejection signal instead.

Third hurdle: permissioned liquidity pools use a whitelist

Permissioned liquidity pools from protocols like Raydium and Uniswap work like this: the asset issuer keeps a whitelist. Only wallet addresses on that list can enter. zkKYC proof is just material you submit to the issuer for review. After the issuer approves it, they still need to manually add your address to the pool's entry list.

If the issuer has not added you yet, or your wallet address is not on the whitelist, the contract will simply reject the transaction even if you have a valid compliance proof.

Step 4 (practical): check item by item to find the problem

If you are stuck, check in this order:

  1. Confirm the pool's entry rules: Go to the project website or docs and check the specific requirements of that permissioned pool. Does it only require KYC, or does it also require a wallet whitelist?
  2. Check if your wallet address is on the whitelist: If the pool uses a whitelist, go to a block explorer and check the pool contract's isAllowed mapping or similar mapping to see if your address is included.
  3. Confirm the proof is current: Some protocols require a new zkKYC proof for every interaction. Old proofs may already be marked as 'used' or 'expired' on-chain.
  4. Try a different wallet address: If your current address is rejected by some pools because it has used a zk KYC proof before, consider using a completely clean address that has never interacted on-chain and go through the process again.