Design proposal: fail-closed counterparty trust verification for payment action providers (signed one-time verdicts, ATC/1.0)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- cryptography, python, typescript
- Área
- api, backend-api-design, security
Línea de trabajo
Start by reading the payment action provider integration, especially BasePayActionProvider, and the policy-hook scaffolding referenced in #1349. Review the 14 conformance vectors and the existing pay-mcp-bridge tests, which demonstrate deny-before-spend behavior across failure classes. The issue defines the desired verification and fail-closed behavior, but leaves implementation scope, trust-band semantics, configuration, and completion criteria to clarify.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Language Implementation
- TypeScript
- Python
Feature Type
- Framework Extension
🚀 The feature, motivation and pitch
AgentKit agents can send USDC to counterparties they have never interacted with (#1565 covers this from the decision side). Today, a pre-spend trust check has no standard, verifiable primitive to consume: reputation scores are unsigned and replayable, so a policy hook built on them cannot be fail-closed by construction — an unverifiable score is indistinguishable from a spoofed one, and a missing field silently becomes "score = 0" or "score = OK" depending on the client.
Proposal: a counterparty trust verification hook for payment action providers (BasePayActionProvider and similar), consuming Agent Trust Cards (ATC/1.0) — Ed25519-signed agent identity cards whose verification produces a one-time signed verdict: verdict_id, trust band (B0–A1), per-stage outcomes, sha256 digest of the canonical signed subtree, JCS (RFC 8785) canonicalisation, two-sided validity window, pinned CA anchors.
The hook runs before a transfer:
- obtain the counterparty's ATC/1.0 card (from payment metadata or a card URL the counterparty presents);
- verify it — via a verification endpoint, or locally (the reference scorer is small and dependency-free);
- enforce a configured minimum trust band: verdict below threshold, missing field, bad signature, or verifier unreachable ⇒ deny by default (fail-closed; deny-before-invoke is the invariant);
- attach the signed
verdict_id+ band to the transaction record for audit.
This composes with the policy-hook scaffolding in #1349: verification supplies evidence; the policy layer remains the single authority that decides.
Production evidence (already running):
- Live x402 verification endpoint on Base mainnet (0.01 USDC/verify; 0.08 USDC per 10-card batch — batch fits marketplace/escrow flows), ATC/1.0, x402 v2:
https://uta-trust-api.eddyflores100.workers.dev/v1 - 14/14 conformance vectors public (canonicalisation byte-exact against published canonical files)
- Fail-closed runtime bridge with 17 green tests demonstrating the deny-before-spend invariant across 6 failure classes: https://github.com/alicelabs-llc/universal-trust-adapter/tree/main/pay-mcp-bridge
- Crosswalk to ERC-8004 (identity + reputation registries deployed on Base) showing how cards layer on 8004 identities: https://github.com/alicelabs-llc/universal-trust-adapter/blob/main/docs/crosswalks/erc-8004-atc-v1.md
Alternatives
- Static YAML/JSON policy snapshots (#1349's direction): necessary, but a snapshot cannot answer "is this counterparty trustworthy right now" — no runtime evidence.
- Unsigned reputation APIs (score-only endpoints): not fail-closed; see above.
- ERC-8004 reputation read directly on-chain: valuable, but per-action weighting is unstandardised; ATC verdicts are signed by a pinned CA with explicit, published scoring semantics.
Additional context
Related: #1565 (pre-payment counterparty trust check — complementary: it makes the pay/caution/skip decision, ATC verdicts supply the verified identity evidence behind it), #1349 (policy hook scaffolding — the natural host for this hook).
Non-goals: no duplication of wallet runtime authority; no per-payment remote dependency by default (verification at first interaction + TTL re-check suffices for most flows); strictly opt-in configuration.
Happy to provide the reference scorer port, the conformance vectors, or a minimal provider implementation in TypeScript or Python.
- Lenguaje dominante
- TypeScript
- Estrellas
- 1.3k
- Forks
- 871
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de coinbase/agentkit
-
Moonwell redeem fails on Base Sepolia and uses 18 decimals for cbBTCPosiblemente ocupada @sebxt la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
ERC20 transfer reports "Transferred" when the transaction reverts (receipt status ignored)Posiblemente ocupada @AgenticFinanceGraph la tomó hace 9 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
coinbase/agentkit#1558 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[TypeScript] `ViemWalletProvider` rejects a wallet client from a newer viem than the exactly pinned one (TS2345, `tokens` missing on `Client`)Posiblemente ocupada @PrabalParihar la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
coinbase/agentkit#1532 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
coinbase-agentkit 0.7.x fails on fresh install: imports solana.rpc.api, which solana>=0.37 removedPosiblemente ocupada @JulienKervarrec la tomó hace 28 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
x402 action provider: optional beforePayment hook to approve or block a paymentPosiblemente ocupada @snefhew la tomó hace 2 días. Abierto
Dificultad 4/5 1-2 días Aptitud para principiantes 55/100
coinbase/agentkit#1576 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de coinbase/agentkit
Issues similares
-
ready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
xavxyz/bei-shan-lin-shui#57 ·
Los mantenedores suelen responder en 1 día
-
[BUG] rag: sentence content can cross the reported sentence boundariesPosiblemente ocupada @LJK-ikun la tomó hoy. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
README: the Resource URI Schemas example's file://documents/* pattern only matches that literal URIAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
platformatic/mcp#361 ·
Los mantenedores suelen responder en 1 día
-
最近文档这个弹窗,左右宽度没有最小宽度限制Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
siyuan-note/siyuan#20799 · 7 comentarios ·
Los mantenedores suelen responder en 1 día