Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Design proposal: fail-closed counterparty trust verification for payment action providers (signed one-time verdicts, ATC/1.0)

Open
#1,568 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
cryptography, python, typescript

Research direction

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.

Written by the indexing model from the issue text.

Description

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:

  1. obtain the counterparty's ATC/1.0 card (from payment metadata or a card URL the counterparty presents);
  2. verify it — via a verification endpoint, or locally (the reference scorer is small and dependency-free);
  3. 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);
  4. 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):

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.

Dominant language
TypeScript
Stars
1.3k
Forks
857
PR merge metrics
No merged PRs in 30d

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from coinbase/agentkit

All issues in coinbase/agentkit

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.