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
| Function | Parameters | Returns | Description |
|---|---|---|---|
registerValidator | address validator | - | Register a new validator (owner only) |
submitValidation | uint256 agentId, bool passed, string evidence | - | Submit a validation result for an agent (validators only) |
getValidation | uint256 agentId, uint256 index | address validator, bool passed, string evidence, uint256 timestamp | Get a specific validation result by index |
getValidationCount | uint256 agentId | uint256 count | Get the total number of validations for an agent |
Events
| Event | Parameters | Description |
|---|---|---|
ValidatorRegistered | address indexed validator | Emitted when a new validator is authorized |
ValidationSubmitted | uint256 indexed agentId, address indexed validator, bool passed, string evidence | Emitted when a validation result is submitted |
Usage Example
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)"
]