Skip to content

Conventions

Description

Shared terminology and format conventions for ERC-8004 Offchain Standards

Purpose

This document defines the common conventions, terminology, and data format standards used across all ERC-8004 offchain standard documents in this specification set. It serves as a normative reference for understanding field types, constraints, and validation requirements.

RFC 2119 Key Words

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in all standard documents are to be interpreted as described in RFC 2119.

Summary:

  • MUST / REQUIRED / SHALL: Absolute requirement of the specification
  • MUST NOT / SHALL NOT: Absolute prohibition
  • SHOULD / RECOMMENDED: Valid reasons may exist to ignore, but implications must be understood
  • SHOULD NOT / NOT RECOMMENDED: Valid reasons may exist to permit, but implications must be understood
  • MAY / OPTIONAL: Truly optional; implementers can choose to include or omit

Field Type System

All field specifications in standard documents use the following type notation:

JSON Primitive Types

TypeDescriptionExamples
stringUTF-8 text string"DataAnalyst Pro", "https://example.com"
numberJavaScript number (integer or float)42, 3.14, 100
booleanTrue or false valuetrue, false
objectJSON object (key-value pairs){"key": "value"}
arrayOrdered list of values[1, 2, 3], ["a", "b"]
nullNull valuenull

Constrained Types

When fields have specific constraints, they are documented as:

Type: number
Constraints: uint256, ≥ 0, ≤ 100

Common Constraint Patterns:

  • uint256: Unsigned 256-bit integer (0 to 2^256-1)
  • 0–100 inclusive: Integer or number in range [0, 100]
  • ≥ 0: Non-negative number
  • enum: "A" | "B" | "C": One of the specified string values
  • ISO 8601: ISO 8601 date-time format
  • CAIP-2: CAIP-2 blockchain identifier format
  • CAIP-10: CAIP-10 account address format
  • hex (0x...): Hexadecimal string prefixed with "0x"
  • URI: Uniform Resource Identifier (https://, ipfs://, ar://, data:)

Type Notation in Tables

Standard documents use tables with the following columns:

FieldTypeConstraintsDescription
fieldNamestringenum: "A" | "B"Human-readable explanation

Address and Chain Identifiers

CAIP-2: Blockchain ID Format

Specification: CAIP-2

Format: namespace:reference

For EVM chains: eip155:chainId

Examples:

text
eip155:1          → Ethereum Mainnet
eip155:11155111   → Sepolia Testnet
eip155:8453       → Base Mainnet
eip155:84532      → Base Sepolia
eip155:137        → Polygon PoS
eip155:42161      → Arbitrum One
eip155:10         → Optimism

CAIP-10: Account Address Format

Specification: CAIP-10

Format: namespace:chainId:address

For EVM chains: eip155:chainId:0x...

Examples:

text
eip155:1:0x8004a6090Cd10A7288092483047B097295Fb8847
eip155:84532:0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
eip155:137:0xABCDEF1234567890ABCDEF1234567890ABCDEF12

Validation Rules:

  • Address MUST be checksummed (EIP-55) or lowercase
  • Chain ID MUST be valid for the namespace
  • Format MUST match exactly namespace:chainId:address

CAIP-10 for Contract Addresses

For referencing smart contracts (e.g., agent registries):

Format: namespace:chainId:contractAddress

Example:

text
eip155:84532:0x8004C269D0A5647E51E121FeB226200ECE932d55

This uses the CAIP-10 format for contract references in the standards.

OASF: Agent Skills and Domains Taxonomy

Overview

Specification: OASF v0.8.0
Full Name: Open Agent Skills Framework

OASF provides a standardized hierarchical taxonomy for describing agent capabilities and application domains.

Skills Format

Format: category/skill_name

Skills describe what agents can do, organized hierarchically.

Examples:

text
analytical_skills/data_analysis
communication_skills/natural_language_processing
creative_skills/content_generation
technical_skills/code_generation

Domains Format

Format: domain_name

Domains categorize agent application areas.

Examples:

text
finance_and_business
healthcare_and_medicine
education_and_training
creative_arts

Usage in Standards

OASF taxonomy is used in Agent Metadata Standard for declaring agent capabilities. See Agent Metadata Standard for detailed endpoint specification.

Timestamp Format

All timestamps in standard documents MUST use ISO 8601 format in UTC timezone.

ISO 8601 Extended Format

Format: YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.sssZ

Examples:

text
2025-12-21T14:30:00Z
2025-12-21T14:30:00.123Z

Requirements:

  • Date separator: - (hyphen)
  • Date-time separator: T (capital T)
  • Time separator: : (colon)
  • Timezone: Z (UTC) REQUIRED
  • Milliseconds: .sss (OPTIONAL)

Invalid Examples:

text
❌ 2025-12-21 14:30:00        (missing T)
❌ 2025-12-21T14:30:00+08:00  (non-UTC timezone)
❌ 12/21/2025 2:30 PM         (non-ISO format)

Unix Timestamps

In some contexts (e.g., updatedAt field in Agent Metadata), Unix timestamps (seconds since epoch) MAY be used:

Type: number
Constraints: uint, ≥ 0

Example: 1763112328 (represents 2025-12-21 14:30:28 UTC)

When both ISO 8601 and Unix timestamps are acceptable, the standard document will specify clearly.

URI Schemes

All URI fields (e.g., agentURI, feedbackUri, image, endpoint) MUST use one of the following schemes:

Supported Schemes

SchemeDescriptionExampleUse Case
https://HTTP Securehttps://example.com/file.jsonProduction APIs, hosted files
ipfs://IPFS Content IDipfs://bafkreiabc...Decentralized immutable storage
ar://Arweave Transaction IDar://abc123...Permanent decentralized storage
data:Data URIdata:application/json;base64,ew...Inline data embedding

Implementations SHOULD support at minimum:

  • REQUIRED: https://
  • RECOMMENDED: ipfs://, data:
  • OPTIONAL: ar://

IPFS URI Format

CIDv0 (legacy):

text
ipfs://QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco

CIDv1 (recommended):

text
ipfs://bafkreiaqdaerh5dvqmtjievkfnwfft6psghkxezygncbuvhl2uwyu6scn4

Gateway Translation (informative):

text
ipfs://bafkreiabc...
  → https://ipfs.io/ipfs/bafkreiabc...
  → https://cloudflare-ipfs.com/ipfs/bafkreiabc...

Data URI Format

Syntax: data:[<mediatype>][;base64],<data>

Example (JSON):

text
data:application/json;base64,eyJuYW1lIjoiQWdlbnQifQ==

Example (inline JSON without encoding):

text
data:application/json,{"name":"Agent"}

URI Validation

Implementations MUST:

  • Validate scheme is supported
  • Reject relative URIs (e.g., ./file.json, ../data.json)
  • Reject URIs without scheme (e.g., example.com/file.json)

Implementations SHOULD:

  • Support scheme-specific validation (e.g., IPFS CID format)
  • Handle gateway fallbacks for decentralized schemes

Versioning Strategy

Standard Document Versions

Each standard document has an independent version number following Semantic Versioning (SemVer) principles:

Format: MAJOR.MINOR

  • MAJOR: Incremented for breaking changes (incompatible field changes, removals)
  • MINOR: Incremented for backward-compatible additions (new optional fields, clarifications)

Version 0.x (Pre-release)

  • Version 0.x indicates draft status
  • Breaking changes MAY occur between 0.x versions
  • Once stable, version advances to 1.0

Version 1.x+ (Stable)

  • Version 1.x and above follow strict backward compatibility
  • Breaking changes REQUIRE advancing to next MAJOR version
  • OPTIONAL fields may be promoted to RECOMMENDED/REQUIRED in MINOR versions with transition period

Document Version Table

Each standard document includes a version table:

VersionDateChanges
1.02025-12-21Initial stable release
0.22025-12-15Added optional field X
0.12025-12-01Initial draft

Normative vs Non-normative Content

Normative Content

Content that defines requirements and MUST be followed for compliance.

Normative sections include:

  • Field requirements (MUST, SHOULD, MAY)
  • Field types and constraints
  • Validation rules
  • Format specifications

Non-normative Content

Content that provides informative guidance but does not define requirements.

Non-normative sections are marked with:

Non-normative: This section provides informative guidance and examples. It does not define normative requirements.

Examples of Non-normative Content:

  • Real-world usage statistics
  • Implementation recommendations beyond SHOULD/MAY
  • Design philosophy and rationale
  • Historical context
  • Migration suggestions
  • Extended examples and tutorials

Relationship to EIP-8004

These standard documents are supplementary and non-normative with respect to the official EIP-8004 specification.

Scope Distinction

AspectEIP-8004 (Official)These Standards (Supplementary)
DefinesSmart contract interfacesOffchain data formats
ScopeOnchain behaviorOffchain metadata schemas
StatusEthereum EIP processCommunity recommendations
AuthorityNormative for ERC-8004Informative guidance
CompatibilityMUST complySHOULD adopt for interoperability

Design Goals

  1. Complement, not replace: These standards fill gaps in offchain data formats not covered by EIP-8004
  2. Implementation-agnostic: Any ERC-8004 registry or explorer MAY adopt these formats
  3. Interoperability: Following these standards improves cross-platform compatibility
  4. Flexibility: Allow custom extensions while maintaining core interoperability

Non-normative Status

  • These standards do not override EIP-8004 requirements
  • Where conflicts exist, EIP-8004 takes precedence
  • Implementations MAY use alternative offchain formats
  • Adoption of these standards is RECOMMENDED but OPTIONAL

Field Specification Format

All core standard documents (Agent Metadata, Feedback, Validation) use consistent field specification tables:

Standard Field Table

FieldTypeConstraintsDescription
fieldNamestringmaxLength: 100Human-readable explanation of the field's purpose and usage

Extended Field Specification

For complex fields, specifications include:

Field Name: fieldName
Type: string
Constraints: maxLength: 100, pattern: ^[a-z0-9-]+$
Required: MUST / SHOULD / MAY
Default: (if applicable)

Purpose: High-level description

Validation:

  • ✅ Valid example
  • ❌ Invalid example with error code

Example:

json
{
  "fieldName": "example-value"
}

Unknown Field Handling

Forward Compatibility Principle

To support extensibility and forward compatibility, implementations SHOULD adopt the following behavior for unknown fields:

  1. MUST NOT reject documents containing unknown fields
  2. SHOULD preserve unknown fields when re-serializing data
  3. SHOULD log warnings for unexpected fields (informative, not errors)
  4. MAY ignore unknown fields in processing logic

Custom Extensions

Implementations MAY add custom extension fields using reverse domain notation:

Recommended pattern: x-<domain>-<fieldname>

Examples:

json
{
  "name": "Agent",
  "x-8004scan-internal-id": "abc123",
  "x-mycompany-custom-tag": "value"
}

Constraints:

  • Extension fields SHOULD use x- prefix
  • Extension fields MUST NOT conflict with standard field names
  • Extension fields SHOULD be documented in implementation guides

Content Hashing

When standards reference content hashing (e.g., feedbackHash, requestHash, responseHash), the following applies:

Hash Algorithm

Algorithm: Keccak-256 (Ethereum standard)

Output Format:

  • Type: bytes32 (onchain)
  • Type: string with hex (0x...) prefix (offchain references)

Example:

text
0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd

Hash Computation

For JSON content:

  1. Serialize JSON with no whitespace (compact form)
  2. Encode as UTF-8 bytes
  3. Compute Keccak-256 hash
  4. Represent as hex string with 0x prefix

Example (informative):

javascript
import { keccak256 } from "ethers";

const data = JSON.stringify({ name: "Agent" });
const hash = keccak256(toUtf8Bytes(data));
// Result: 0x...

MIME Types

When specifying file types (e.g., in Attachment Pattern), use standard IANA MIME types:

Common MIME Types

File TypeMIME TypeUsage
JSONapplication/jsonStructured data
PDFapplication/pdfDocuments
PNGimage/pngImages
JPEGimage/jpegImages
SVGimage/svg+xmlVector images
Plain Texttext/plainText files
CSVtext/csvTabular data
MP4video/mp4Videos
ZIPapplication/zipArchives

Custom MIME Types

For custom or specialized formats, use application/x-<format>:

Examples:

text
application/x-groth16-proof
application/x-plonk-proof

Validation and Error Codes

Standard documents reference validation error codes in the format:

Pattern: <scope>_<description>

Examples:

  • missing_required_name: Missing required field name
  • invalid_caip2_format: Invalid CAIP-2 blockchain identifier format
  • mcp_missing_endpoint: MCP endpoint configuration missing required endpoint field

Scope Prefixes:

  • missing_: Field is absent
  • invalid_: Field has incorrect format or value
  • empty_: Field is present but empty (array, string, object)
  • <protocol>_: Protocol-specific validation (e.g., mcp_, a2a_)

Character Encoding

All text content MUST use UTF-8 encoding.

Requirements:

  • JSON files MUST be valid UTF-8
  • String fields MUST support Unicode characters
  • No BOM (Byte Order Mark) in JSON files

Number Precision

Integer Values

For integer fields (e.g., agentId, score):

  • Use JSON number type without decimal point
  • Support range: 0 to 2^53-1 (JavaScript safe integer)
  • For Ethereum uint256, use string representation if value > 2^53-1

Decimal Values

For decimal fields (e.g., amount in payment proofs):

  • Use string representation for precision-sensitive values
  • Recommended: Wei/smallest unit representation as string
  • Example: "1000000000000000000" (1 ETH in wei)

Language and Localization

Default Language

All standard documents and examples use English (en-US) as the default language.

Localization Support

Standards do not currently define localization requirements. Implementations MAY support:

  • Language tags (e.g., description-en, description-zh)
  • Accept-Language header negotiation
  • Separate localized metadata files

Abbreviations and Acronyms

Standard Abbreviations

AbbreviationFull Term
A2AAgent-to-Agent Protocol
CAIPChain Agnostic Improvement Proposal
CIDContent Identifier (IPFS)
EIPEthereum Improvement Proposal
ERCEthereum Request for Comments
IPFSInterPlanetary File System
JSONJavaScript Object Notation
MCPModel Context Protocol
NFTNon-Fungible Token
OASFOpen Agent Skills Framework
TEETrusted Execution Environment
URIUniform Resource Identifier
URLUniform Resource Locator
UTCCoordinated Universal Time
zkMLZero-Knowledge Machine Learning
zkSNARKZero-Knowledge Succinct Non-Interactive Argument of Knowledge

First Use Convention

When introducing an abbreviation for the first time in a document:

  • Write full term followed by abbreviation in parentheses
  • Example: "Model Context Protocol (MCP)"

References

Version: 1.0
Last Updated: 2025-12-21
Status: Normative