Identity#

Every ACE agent has an identity composed of three elements:

  1. A signing key pair — Used to authenticate messages (algorithm defined by signingScheme)
  2. An X25519 encryption key pair — Used for E2E encrypted communication
  3. An ACE ID — Derived deterministically from the signing public key

ACE ID Format#

ace:sha256:<hex(SHA-256(signingPublicKeyBytes))>

The signing public key bytes are the raw key bytes (32 bytes for Ed25519, 33 bytes compressed for secp256k1). The SHA-256 hash is hex-encoded (64 characters).

Example:

ace:sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

The ACE ID is deterministic — the same signing key always produces the same ID.

Identity Tiers#

ACE defines two progressive trust tiers. Higher tiers include the properties of lower tiers.

Tier 0: Key-Only#

  • Requirement: A signing key pair + X25519 encryption key pair
  • Trust model: Self-asserted. No external verification.
  • Suitable for: Any software agent. Zero barrier to entry.
  • Discovery: Direct endpoint exchange, Well-Known URL, or Relay

Tier 1: Chain-Registered#

  • Requirement: Tier 0 + on-chain identity registration (e.g., ERC-8004)
  • Trust model: Immutable on-chain record. Costs gas to register. Enables on-chain reputation.
  • Suitable for: Agents participating in on-chain economic activity
  • Discovery: On-chain registry lookup

Registration File#

Every ACE agent should publish a registration file that describes its identity, capabilities, and settlement methods.

Format#

{
  "ace": "1.0",
  "id": "ace:sha256:e3b0c442...",
  "name": "DataAnalyzer",
  "description": "Real-time market data analysis agent",
  "endpoint": "https://agent.example.com/ace",
  "tier": 0,
  "signing": {
    "scheme": "ed25519",
    "address": "5Ht7RkVSupHeNbGWiHfwJ3RYn4RZfpAv5tk2UrQKbkWR",
    "signingPublicKey": "Base64(Ed25519PublicKey)",
    "encryptionPublicKey": "Base64(X25519PublicKey)"
  },
  "capabilities": [
    {
      "id": "market-analysis",
      "description": "Analyze market trends from on-chain data",
      "input": "application/json",
      "output": "application/json",
      "pricing": {
        "model": "per-call",
        "amount": "0.01",
        "currency": "USD"
      }
    }
  ],
  "settlement": ["crypto/instant"],
  "chains": [
    {
      "network": "eip155:8453",
      "address": "0x7a3b...f91c"
    }
  ]
}

Field Reference#

FieldRequiredDescription
aceYesProtocol version. Must be "1.0"
idYesACE ID (ace:sha256:<fingerprint>)
nameYesHuman-readable agent name
descriptionNoOne-line description
endpointYesURL for receiving ACE messages
tierYesIdentity tier: 0 or 1
hardwareBackingNoKey custody: secure-enclave, tpm, hsm, or tee
signing.schemeYes"ed25519" or "secp256k1"
signing.addressYesAddress derived from signing key
signing.signingPublicKeyConditionalBase64-encoded raw signing public key. Required for secp256k1.
signing.encryptionPublicKeyYesBase64-encoded X25519 public key
capabilitiesNoList of capabilities the agent offers
settlementNoSupported settlement methods
chainsNoBlockchain addresses for receiving payments

Capability Object#

FieldRequiredDescription
idYesUnique capability identifier (kebab-case)
descriptionYesWhat this capability does
inputNoExpected input MIME type
outputNoOutput MIME type
pricing.modelYes"per-call", "per-token", "per-hour", "flat"
pricing.amountYesPrice amount (string to avoid floating point)
pricing.currencyYesCurrency code ("USD", "USDC", "ETH", etc.)