Overview

The ValidationRegistry contract enables authorized validators to submit verification results for AI agents. Validators can submit pass/fail results with supporting evidence, creating an auditable trail of third-party validations. This is useful for security audits, compliance checks, or quality certifications.

Only addresses registered by the contract owner can submit validations.

**Note: Deployed Address: 0xFb009C075e1D212CfDD1b13F9164049eBBCC641f

Functions

FunctionParametersReturnsDescription
registerValidatoraddress validator-Register a new validator (owner only)
submitValidationuint256 agentId, bool passed, string evidence-Submit a validation result for an agent (validators only)
getValidationuint256 agentId, uint256 indexaddress validator, bool passed, string evidence, uint256 timestampGet a specific validation result by index
getValidationCountuint256 agentIduint256 countGet the total number of validations for an agent

Events

EventParametersDescription
ValidatorRegisteredaddress indexed validatorEmitted when a new validator is authorized
ValidationSubmitteduint256 indexed agentId, address indexed validator, bool passed, string evidenceEmitted when a validation result is submitted

Usage Example

Submit and query validation results
import { createPublicClient, createWalletClient, http, parseAbi } from 'viem';
import { kyaChain } from './chains';

const publicClient = createPublicClient({
  chain: kyaChain,
  transport: http('https://rpc.kyachain.xyz'),
});

const walletClient = createWalletClient({
  chain: kyaChain,
  transport: http('https://rpc.kyachain.xyz'),
});

const VALIDATION_REGISTRY = '0xFb009C075e1D212CfDD1b13F9164049eBBCC641f';

// Owner: Register a new validator
const { request: registerReq } = await publicClient.simulateContract({
  address: VALIDATION_REGISTRY,
  abi: parseAbi(['function registerValidator(address validator) external']),
  functionName: 'registerValidator',
  args: ['0xValidatorAddress'],
  account: '0xOwnerAddress',
});

const registerHash = await walletClient.writeContract(registerReq);

// Validator: Submit a validation result
const { request: validationReq } = await publicClient.simulateContract({
  address: VALIDATION_REGISTRY,
  abi: parseAbi([
    'function submitValidation(uint256 agentId, bool passed, string evidence) external',
  ]),
  functionName: 'submitValidation',
  args: [42n, true, 'Security audit passed - no vulnerabilities found'],
  account: '0xValidatorAddress',
});

const validationHash = await walletClient.writeContract(validationReq);

// Read validation count
const count = await publicClient.readContract({
  address: VALIDATION_REGISTRY,
  abi: parseAbi([
    'function getValidationCount(uint256 agentId) external view returns (uint256)',
  ]),
  functionName: 'getValidationCount',
  args: [42n],
});

// Read latest validation (index = count - 1)
const [validator, passed, evidence, timestamp] = await publicClient.readContract({
  address: VALIDATION_REGISTRY,
  abi: parseAbi([
    'function getValidation(uint256 agentId, uint256 index) external view returns (address, bool, string, uint256)',
  ]),
  functionName: 'getValidation',
  args: [42n, count - 1n],
});

console.log('Validator:', validator);
console.log('Passed:', passed);
console.log('Evidence:', evidence);
console.log('Timestamp:', new Date(Number(timestamp) * 1000).toISOString());

ABI

[
  "function registerValidator(address validator) external",
  "function submitValidation(uint256 agentId, bool passed, string calldata evidence) external",
  "function getValidation(uint256 agentId, uint256 index) external view returns (address validator, bool passed, string memory evidence, uint256 timestamp)",
  "function getValidationCount(uint256 agentId) external view returns (uint256 count)",
  "event ValidatorRegistered(address indexed validator)",
  "event ValidationSubmitted(uint256 indexed agentId, address indexed validator, bool passed, string evidence)"
]

On this page