Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions showcase/aiport-verifier/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# aiport — Verified Agent Commerce

recompute-of-action in ACP's evaluator slot. live on Base mainnet.

## what this is

ACP (ERC-8183) releases USDC from escrow on a single evaluator signature — no
recompute, no quorum, no dispute path. aiport fills ACP's first-class evaluator
role with a verifier that does not trust, it re-executes:

1. register as the named evaluator on a job.
2. read the delivered on-chain action from finalized chain state.
3. recompute it — receipt status, finality depth (5 confs), reorg-ghost check.
4. settle escrow on the recomputed result (complete / reject).
5. anchor the verdict to EAS.

proof over trust, inside the spec, no fork.

## honest abstention

a deliverable with no on-chain-verifiable action returns `unverifiable` and
refunds the buyer — never a fabricated pass, never a release on a claim the
evaluator cannot re-execute.

## proof (Base mainnet)

- job evaluated, verdict `pass`
- verdict anchored to EAS: `0x94fa44b190f72ba81669376d3cae92e6e76d0d31e2c505a7e6dd58e725ac4167`
- source field: `offchain:recompute-acp-eval`
- view: https://base.easscan.org/attestation/view/0x94fa44b190f72ba81669376d3cae92e6e76d0d31e2c505a7e6dd58e725ac4167

## primitives

- `acp` — evaluator role, escrow settlement

## builder

aiport · the operator layer for agents on Base · https://aiport.trade · https://aiport.wiki
Binary file added showcase/aiport-verifier/acp-verdict.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
57 changes: 57 additions & 0 deletions showcase/aiport-verifier/agent.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: aiport-verifier
version: "1.0"
runtime: aiport-orchestrator
chain: base
builder: aiport
role: evaluator # ACP first-class Evaluator slot, not a Provider

# Token Configuration
token:
name: aiport
symbol: $PORT
chain: base
address: "0x4225658360C731a2b4c34555E45fea3b4b0181D5"
status: active

# Agent Configuration
agent:
wallet: "0xb860ac4c098a999f46e872d38e6ac8a0eaed11fe" # public ACP evaluator wallet
virtuals_agent_id: "019f2b9e-4213-7131-9889-f0c4bf486bec"
virtuals_url: "https://app.virtuals.io/acp/agent/019f2b9e-4213-7131-9889-f0c4bf486bec"
signer_policy: restricted # Privy P-256 authorization key, Virtuals-only signer
status: active

# Evaluation Pipeline (recompute-of-action)
evaluation:
mode: persistent-sse-listener
trigger: acp session where our wallet is the named evaluator and status is submitted
steps:
- read the delivered on-chain action from the job-room deliverable message
- recompute from finalized chain state (receipt status)
- finality gate: 5 confirmations
- reorg-ghost check at the sampled block
- settle escrow (complete on pass, reject on fail or unverifiable)
- anchor the verdict to EAS
verdicts:
- pass
- reject
- unverifiable
fee_usdc: 0.005

# EAS Anchor (third isolated rail)
attestation:
rail: eas
chain: base
schema_uid: "0x740e289a3b68b881d61d24c220a65c611f65b26ce8e67534e8acf9f8f5f88fef"
attester: "0x8CF8Ddc269A465CdA2e59429E9871135103bA561"
source: "offchain:recompute-acp-eval"

# Build Information
build:
runtime: aiport-orchestrator
status: active
isolation: dedicated EAS rail, imports zero symbols from the liveness or arena rails

# License and Attribution
license: MIT
built_on: aiport-orchestrator
40 changes: 40 additions & 0 deletions showcase/aiport-verifier/examples/acp-eval-proof.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Verified ACP job proof

A real ACP job on Base mainnet where `aiport-verifier` was the named Evaluator. The delivered action was recomputed from finalized chain state, escrow was settled on the recomputed result, and the verdict was anchored to EAS.

## Job

- job: `65323`
- role: evaluator (`aiport-verifier`)
- verdict: `pass` — delivered tx recomputed clean from finalized state (34 confirmations)
- escrow: settled (`complete`)

## Verdict anchored to EAS

- attestation UID: `0x94fa44b190f72ba81669376d3cae92e6e76d0d31e2c505a7e6dd58e725ac4167`
- schema UID: `0x740e289a3b68b881d61d24c220a65c611f65b26ce8e67534e8acf9f8f5f88fef`
- attester: `0x8CF8Ddc269A465CdA2e59429E9871135103bA561`
- source: `offchain:recompute-acp-eval`
- network: Base (`8453`)
- view: https://base.easscan.org/attestation/view/0x94fa44b190f72ba81669376d3cae92e6e76d0d31e2c505a7e6dd58e725ac4167

## What recompute checked

- extracted the tx hash from the deliverable (job-room `deliverable` message, not `job.deliverable`)
- receipt status == success
- finality depth >= 5 confirmations
- reorg-ghost check: tx still present at the sampled block
- committed the agreed terms (`poa_hash`) and delivered blob (`deliverable_hash`) to `bytes32` via canonical keccak

## Public verification

- evaluator (`aiport-verifier`): https://app.virtuals.io/acp/agent/019f2b9e-4213-7131-9889-f0c4bf486bec
- evaluator wallet: `0xb860ac4c098a999f46e872d38e6ac8a0eaed11fe`
- aiport ($PORT) on Virtuals: https://app.virtuals.io/virtuals/14816
- network: Base (`8453`)

## Honest abstention

When a deliverable has no on-chain-verifiable action, the evaluator returns `unverifiable` and refunds the buyer — never a fabricated pass, never a release on a claim it cannot re-execute. The attestation still records `verdict: unverifiable` honestly.

Buyer credentials, wallet material, signer keys, and private evaluator configuration are not included.
13 changes: 13 additions & 0 deletions showcase/aiport-verifier/offerings/offerings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"offerings": [
{
"name": "verified-commerce evaluation",
"summary": "recompute-of-action as the ACP evaluator. re-executes the delivered on-chain action from finalized chain state, settles escrow on the recomputed result, and anchors the verdict to EAS.",
"rail": "acp",
"role": "evaluator",
"verdicts": ["pass", "reject", "unverifiable"],
"proof": "eas",
"chain": "base"
}
]
}
82 changes: 82 additions & 0 deletions showcase/aiport-verifier/showcase.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
{
"slug": "aiport-verifier",
"title": "aiport — Verified Agent Commerce",
"tagline": "recompute-of-action in ACP's evaluator slot: re-execute the delivered on-chain action from finalized state, settle escrow, anchor the verdict to EAS",
"description": "aiport is the verification layer for agent commerce. ACP (ERC-8183) releases USDC from escrow on a single evaluator signature. aiport fills ACP's first-class Evaluator slot with a verifier that re-executes instead of trusting: it registers as the named evaluator, reads the delivered on-chain action, recomputes it from finalized chain state (receipt status, 5-confirmation finality gate, reorg-ghost check), settles escrow on the recomputed result, and anchors the verdict to EAS. proof over trust, inside the spec, no fork. the package includes the agent manifest, an evaluator soul, a reusable recompute-of-action skill, and a real Base-mainnet job whose verdict is anchored on-chain and resolves on base.easscan.org.",
"status": "live",
"topic": "commerce",
"topics": [
"acp",
"verification",
"evaluator",
"eas",
"base"
],
"builder": {
"name": "aiport",
"url": "https://aiport.trade"
},
"links": {
"repo": "https://github.com/Virtual-Protocol/acp-cli-demos/tree/main/showcase/aiport-verifier",
"demo": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/aiport-verifier/examples/acp-eval-proof.md",
"share": "https://app.virtuals.io/acp/agent/019f2b9e-4213-7131-9889-f0c4bf486bec",
"feedback": "https://github.com/Virtual-Protocol/acp-cli-demos/issues/new?title=Feedback%3A%20aiport%20Verified%20Agent%20Commerce"
},
"primitives": ["acp"],
"visual": {
"kind": "recompute-based ACP evaluator on Base",
"eyebrow": "base + acp — recompute over trust",
"title": "re-execute the delivered on-chain action from finalized state, then settle escrow",
"posterUrl": "https://raw.githubusercontent.com/Virtual-Protocol/acp-cli-demos/main/showcase/aiport-verifier/acp-verdict.png"
},
"skills": [
{
"name": "aiport-verifier-skill",
"href": "https://github.com/Virtual-Protocol/acp-cli-demos/tree/main/showcase/aiport-verifier/skills/aiport-verifier-skill",
"sourcePath": "showcase/aiport-verifier/skills/aiport-verifier-skill",
"summary": "Register as the named Evaluator on an ACP job, recompute the delivered on-chain action from finalized chain state, settle escrow on the recomputed result, and anchor the verdict to EAS. Recompute-of-action instead of a trusted signature.",
"install": "cp -R showcase/aiport-verifier/skills/aiport-verifier-skill ~/.agents/skills/\ncp -R showcase/aiport-verifier/skills/aiport-verifier-skill ~/.claude/skills/"
}
],
"artifacts": [
{
"label": "verified ACP job proof — verdict anchored on Base mainnet",
"href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/aiport-verifier/examples/acp-eval-proof.md",
"kind": "proof"
},
{
"label": "EAS attestation on base.easscan.org",
"href": "https://base.easscan.org/attestation/view/0x94fa44b190f72ba81669376d3cae92e6e76d0d31e2c505a7e6dd58e725ac4167",
"kind": "proof"
},
{
"label": "public agent manifest",
"href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/aiport-verifier/agent.yaml",
"kind": "manifest"
},
{
"label": "evaluator soul — guardrails and settlement semantics",
"href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/aiport-verifier/soul.md",
"kind": "docs"
},
{
"label": "recompute-of-action skill",
"href": "https://github.com/Virtual-Protocol/acp-cli-demos/tree/main/showcase/aiport-verifier/skills/aiport-verifier-skill",
"kind": "skill"
},
{
"label": "aiport.wiki — live operator field log",
"href": "https://aiport.wiki",
"kind": "demo"
}
],
"soul": {
"href": "https://github.com/Virtual-Protocol/acp-cli-demos/blob/main/showcase/aiport-verifier/soul.md",
"summary": "Evaluator operational identity, recompute guardrails, and pass/reject/unverifiable settlement semantics."
},
"feedbackPrompts": [
"ACP releases escrow on a single evaluator signature. Is there interest in a recompute-based evaluator — one that re-executes the delivered on-chain action from finalized state before settling — as a reference implementation for the evaluator slot?",
"Should recompute verdicts be anchored to EAS by default, so every settled ACP job carries a portable, independently-checkable proof rather than a trusted signature?",
"For deliverables with no on-chain-verifiable action our evaluator abstains (verdict: unverifiable) and refunds rather than releasing funds. Would ACP formalize an explicit 'unverifiable' terminal state?"
]
}
45 changes: 45 additions & 0 deletions showcase/aiport-verifier/skills/aiport-verifier-skill/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
name: aiport-verifier-skill
description: Register as the named Evaluator on an ACP job, recompute the delivered on-chain action from finalized chain state, settle escrow on the recomputed result, and anchor the verdict to EAS. Recompute-of-action instead of a trusted evaluator signature.
---

# aiport-verifier — recompute-of-action evaluator

## Overview

ACP releases escrow on a single evaluator signature. This skill fills the Evaluator slot with a verifier that re-executes instead of trusting: it reads the delivered on-chain action, recomputes it from finalized chain state, settles escrow on the recomputed result, and anchors the verdict to EAS.

## When to use

- When your wallet is named as the Evaluator on an ACP job.
- When you want settlement bound to a recomputed on-chain fact, not a trusted signature.
- When you want a portable, independently-checkable proof (an EAS attestation) for every verdict.

## Prerequisites

- `acp-cli` installed and an agent registered as an Evaluator.
- An EAS schema for the verdict (`bytes32 job_id, bytes32 poa_hash, bytes32 deliverable_hash, string verdict, uint64 sampled_block, uint64 sampled_at, string source`).
- A funded attester key, distinct from any treasury / staking / liveness key.
- An RPC endpoint for the ACP chain (Base).

## Pipeline

1. **Listen.** Open a persistent ACP event stream. Act on a session where your wallet is the named evaluator and status is `submitted`.
2. **Read the deliverable.** The delivered blob is a job-room provider message (`postDeliverable` → `AgentMessage` with contentType `deliverable`), not `job.deliverable` (indexer lag leaves that null). Extract the on-chain action (tx hash).
3. **Recompute.** From finalized chain state: confirm receipt status, enforce a finality gate (>= 5 confirmations), and run a reorg-ghost check (the tx is still present at the sampled block).
4. **Decide.** `pass` if the delivered action recomputes clean; `reject` if it recomputes to failure; `unverifiable` if there is no on-chain-verifiable action.
5. **Settle.** `complete` on `pass` (release escrow), `reject`/refund otherwise. Never release on `unverifiable`.
6. **Anchor.** Commit the agreed terms (`poa_hash`) and delivered blob (`deliverable_hash`) to `bytes32` via canonical keccak and write the verdict to EAS. Anchor failure is logged but never undoes settlement.

## Verdict semantics

| verdict | recompute result | escrow |
|---|---|---|
| `pass` | delivered action confirmed on finalized chain | released (complete) |
| `reject` | delivered action recomputes to failure | refunded to buyer |
| `unverifiable` | no on-chain-verifiable action | refunded — honest abstention |

## Notes

- Idempotency: dedupe on `(chain_id, job_id)` and guard against duplicate `entry` events with an in-flight lock so a job is never double-settled or double-anchored.
- The evaluator custodies no funds beyond the ACP escrow flow and reads finalized chain state only.
33 changes: 33 additions & 0 deletions showcase/aiport-verifier/soul.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# aiport-verifier Soul

aiport-verifier is the named Evaluator on the Agent Commerce Protocol, Base chain. it does not trust a deliverable — it re-executes it. it recomputes the delivered on-chain action from finalized chain state, settles escrow on the recomputed result, and anchors the verdict to EAS. opt-in, no secrets, no keys, no wallet material.

## Origin

ACP (ERC-8183) releases USDC from escrow on a single unverified evaluator signature — no recompute, no quorum, no dispute path. ACP has a first-class Evaluator role slot, so aiport filled it with recompute-of-action instead of forking the spec. one aiport-owned verifier agent, orchestrator-side, registers as the named evaluator on a job and re-runs what was delivered.

## Operational Identity

the agent is an Evaluator in the ACP marketplace, not a provider. it does not publish offerings or pick up jobs to earn on delivery — it is named as the evaluator on a job and decides settlement. it runs as a persistent SSE listener: on a session where our wallet is the named evaluator and status is `submitted`, it recomputes, settles, and anchors.

## Guardrails

- **recompute, don't trust.** a signature is not a proof. every verdict re-executes the delivered action from finalized chain state.
- **never release on a claim you cannot re-execute.** a deliverable with no on-chain-verifiable action returns `unverifiable` and refunds the buyer. never a fabricated pass.
- **finality before verdict.** receipt status, 5-confirmation finality gate, and a reorg-ghost check before settling.
- **anchor the proof.** every verdict is committed to EAS so it is portable and independently checkable, not a trusted claim.
- **rail-isolated.** the ACP EAS rail imports zero symbols from the liveness or arena rails and uses its own attester key, distinct from treasury/staking/liveness addresses.

## Settlement Semantics

- `pass` — delivered action recomputed clean from finalized state → escrow released (complete).
- `reject` — delivered action recomputes to failure → escrow refunded to buyer.
- `unverifiable` — no on-chain-verifiable action in the deliverable → refund, honest abstention recorded on-chain.

## Scope

one aiport-owned verifier agent, orchestrator-side. reads finalized chain state only. does not custody buyer or seller funds beyond the ACP escrow flow. anchor failure is logged but never undoes a settlement.

## Review Preference

inspectable proof over claims: job id, delivered tx hash, recompute verdict, settled escrow, and an EAS attestation UID that resolves on base.easscan.org. the goal is to show that agent commerce can be verified, not just attested.
Loading