Troubleshooting & FAQ
On this page
Troubleshooting
ODIS Quota Issues
Problem: “Insufficient quota” error
Solution: Check your remaining quota with getPnpQuotaStatus and purchase more if needed. See ODIS Quota Management.
Rate Limiting
Problem: Too many requests to ODIS
Solution:
- Implement request queuing
- Cache obfuscated identifiers
- Use batch operations when possible
- Monitor quota usage
Transaction Failures
Problem: “Transaction reverted” or gas estimation failed
Solution:
// Ensure sufficient gas
const hash = await contract.write.registerAttestationAsIssuer(
[identifier, address, timestamp],
{
gas: 200000n // Explicit gas limit
}
);
// Check if attestation already exists
const existing = await contract.read.lookupAttestations([
identifier,
[issuerAddress]
]);
if (existing.accounts.length > 0) {
console.log("Attestation already exists");
}
Network Issues
Problem: RPC connection failures
Solution:
// Use fallback RPCs
const transport = fallback([
http("https://forno.celo.org"),
http("https://rpc.ankr.com/celo"),
http("https://1rpc.io/celo")
]);
const client = createPublicClient({
chain: celo,
transport
});
FAQ
Q: Do I need to pay gas for lookups?
A: No, lookups are read-only operations that don’t require gas. You only need ODIS quota.
Q: Can users register themselves?
A: Users can submit the registration transaction if the issuer provides a signed attestation, but the issuer must still verify ownership and provide the obfuscated identifier.
Q: How much does it cost to register a user?
A: With 10 cUSD of ODIS quota, you can register 10,000 users. Gas costs for on-chain registration are typically <0.01 cUSD per transaction.
Q: Can I trust attestations from any issuer?
A: No, you should only trust issuers whose verification standards you trust. Each issuer is responsible for their own verification quality.
Q: What happens if an issuer goes offline?
A: Existing attestations remain on-chain and accessible. Users can register with other issuers for redundancy.
Q: Can I verify multiple identifier types for the same user?
A: Yes, you can register multiple attestations (phone + Twitter + email) for the same address, each with its own prefix.
Q: Is E.164 format required for phone numbers?
A: Yes, the SDK’s getObfuscatedIdentifier function only accepts E.164 formatted phone numbers (e.g., +12345678901).
Q: How do I map attestation results to issuers?
A: The return arrays are ordered by the trustedIssuers input array. See Multi-Issuer Lookup.
Q: Can I use Self Connect on other EVM chains?
A: Self Connect is currently designed for Celo. The contracts and ODIS infrastructure are Celo-specific.
Q: Why use Viem instead of Web3.js or Ethers.js?
A: Viem offers better TypeScript support, smaller bundles, and active maintenance. See Why Viem?.
Q: Do I need to use different RPC endpoints for mainnet vs testnet?
A: Yes. Use the celo or celoAlfajores chain from viem/chains; see Network Configuration.
Thanks for your feedback!