Know Your Agent (KYA) verification gate for Agentic Commerce jobs.
This hook implements the IACPHook interface to enforce AsterPay's 5-layer Trust Framework before AI agents can participate in ERC-8183 commerce jobs.
Client creates job with hook = AsterPayKYAHook
│
▼
┌──── setProvider() ────┐
│ beforeAction: │
│ ✓ Sanctions Oracle │
│ ✓ Trust Score ≥ N │
│ ✓ Score freshness │
└───────────────────────┘
│
▼
┌──────── fund() ───────┐
│ beforeAction: │
│ ✓ Same KYA checks │
│ ✓ Cache result │
└───────────────────────┘
│
provider works...
│
┌─────── complete() ────┐
│ afterAction: │
│ → ReputationPositive │
└───────────────────────┘
| Contract | Purpose |
|---|---|
AsterPayKYAHook.sol |
Main hook — sanctions + trust score gate |
IACPHook.sol |
ERC-8183 hook interface |
IAgenticCommerce.sol |
Read-only ACP job interface |
IAgentTrustScore.sol |
AsterPay trust score oracle interface |
ISanctionsOracle.sol |
Chainalysis oracle interface |
- Sanctions screening — Chainalysis Oracle on Base (OFAC, EU, UN). Fail-closed if oracle unreachable.
- Trust Score — Agent must have score ≥
minTrustScore(default: 20 = verified tier) - Score freshness — Score must be updated within
maxScoreAgeseconds (default: 3600) - Tier validation — Agent must not be in "blocked" tier
cd contracts/erc8183-kya-hook
# Install Foundry deps
forge install
# Deploy to Base Sepolia
ACP_ADDRESS=0x... \
TRUST_ORACLE_ADDRESS=0x... \
forge script script/Deploy.s.sol:DeployKYAHook \
--rpc-url base_sepolia --broadcast --verifyforge test -vvvimport { createKYAHookSDK } from './ts-sdk/kya-hook';
import { ethers } from 'ethers';
const provider = new ethers.JsonRpcProvider('https://mainnet.base.org');
const signer = new ethers.Wallet(PRIVATE_KEY, provider);
const sdk = createKYAHookSDK(HOOK_ADDRESS, ACP_ADDRESS, signer);
// Pre-flight check
const result = await sdk.wouldPass('0xAgentWallet...');
console.log(result);
// { passes: true, score: 42, tier: 'verified', sanctionsClear: true }
// Create a KYA-protected job
const jobId = await sdk.createJobWithKYA({
provider: '0xAgentWallet...',
evaluator: '0xEvaluator...',
expiredAt: Math.floor(Date.now() / 1000) + 86400,
description: 'Translate document EN→FR',
});
// Fund triggers KYA check automatically
await sdk.fundJob(jobId, 100n);| Parameter | Default | Description |
|---|---|---|
minTrustScore |
20 | Minimum score (0-100). 20 = verified tier |
maxScoreAge |
3600 | Max seconds since last score update |
sanctionsEnabled |
true | Enable Chainalysis screening |
All configurable by contract owner via setMinTrustScore(), setMaxScoreAge(), setSanctionsEnabled().
| Event | When | Use |
|---|---|---|
KYAVerified |
Agent passes all checks | Index verified agents |
KYABlocked |
Agent fails any check | Alert, compliance logging |
ReputationPositive |
Job completed | Feed into ERC-8004 reputation |
ReputationNegative |
Job rejected | Feed into ERC-8004 reputation |
MIT (hook contract) / CC0 (interfaces aligned with ERC-8183 and EIP-Agent Trust Score)