Skip to main content

Open, deterministic protocol core for the DNS of Money A2A payment surface (FAS-1 pay: addressing, canonical hashing, payment-hook client).

Project description

a2a-protocol-core

License: Apache 2.0

The open, deterministic protocol core of the DNS of Money agent-to-agent (A2A) payment surface — the dependency-light layer external AI agents adopt to resolve, hash, and initiate pay: payments.

The intelligence lives in the calling agent. This package serves deterministic, inspectable primitives — no rail selection, no scoring, no model anywhere in the money path.

Install

pip install a2a-protocol-core

Runtime deps are intentionally minimal: pydantic and requests.

What's in here

Module A2A ref Purpose
addressing FAS-1 pay: URI grammar + validation (is_valid_pay_uri)
semantic_normalizer A2A-009 collapse synonym verbs → canonical action codes
canonical_hash A2A-008 metadata- & vocabulary-stable payment-intent hash
schemas A2A-041 payment-hook request/response wire models
client A2A-041 A2APaymentHookClient over /v1/a2a/*

Quick start

from a2a_protocol_core import (
    A2APaymentHookClient,
    compute_canonical_hash,
    normalize_message,
)

# Your agent describes intent however it likes...
intent = {"action": "send", "amount": "2.50", "currency": "USD", "alias": "pay:agent.compute"}

# ...which collapses to a stable hash regardless of wording ("send" == "transfer" == "pay").
semantic_hash = compute_canonical_hash(normalize_message(intent))

client = A2APaymentHookClient(base_url="https://api.dnsofmoney.com")
result = client.trigger(
    job_id="job-001",
    provider_pay_address="pay:agent.compute",
    requester_pay_address="pay:vendor.alpha",
    amount="2.50",
    currency="USD",
    semantic_hash=semantic_hash,
)
print(result.settlement_result.status, result.iso_message_ref)

See examples/trigger_payment_hook.py.

Why canonical hashing?

Two agents describing the same payment with different words ("send" vs "transfer") or different session/trace metadata must produce the same intent fingerprint. compute_canonical_hash excludes non-semantic noise (session/request/trace ids, timestamps, idempotency keys, memos) and normalizes the action verb, so the hash captures what is being paid — not how it was phrased. That fingerprint binds an agent's intent to a settlement without trusting free text.

Design constraints

  • Deterministic only. Nothing here selects or scores a rail.
  • Off the money path. The hash and client describe and carry intent; the deterministic core (server-side) resolves, generates ISO 20022, and settles.
  • Dependency-light. Safe to embed in an agent runtime.

Development

pip install -e ".[dev]"
pytest
ruff check src tests

License

Apache-2.0 — permissive with an explicit patent grant. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

a2a_protocol_core-0.1.0.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

a2a_protocol_core-0.1.0-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file a2a_protocol_core-0.1.0.tar.gz.

File metadata

  • Download URL: a2a_protocol_core-0.1.0.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for a2a_protocol_core-0.1.0.tar.gz
Algorithm Hash digest
SHA256 66946f2a71dbc1af17030cb978c3c56bd994aa7ed3407f3426a71c0084ac0ea7
MD5 7f0dc8391330fed63b10222656ea90d0
BLAKE2b-256 5128ec6178ebe094fcef19969e8d1ce275327830acb178ef0dd1029c471c6b6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for a2a_protocol_core-0.1.0.tar.gz:

Publisher: publish.yml on dnsofmoney/a2a-protocol-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a2a_protocol_core-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for a2a_protocol_core-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 245dc838259635482c4b7dac0ecdb097032b34068afa56292b20f4c11c6189e8
MD5 f07976231d470419901bfcbdad16b184
BLAKE2b-256 f0be8d276657bf9703ad9280a017b4113ba9440613f30928ce1a8eed6f2ed506

See more details on using hashes here.

Provenance

The following attestation bundles were made for a2a_protocol_core-0.1.0-py3-none-any.whl:

Publisher: publish.yml on dnsofmoney/a2a-protocol-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page