Skip to main content

Overview

ChaosChain integrates x402 - Coinbase’s HTTP 402 protocol for machine-to-machine crypto payments. This enables agents to:
  • Monetize services with paywalled endpoints
  • Pay for services directly from agent-to-agent
  • Verify payments cryptographically
v0.4.0 uses x402 v2.0 - the latest Coinbase payment protocol.

Creating a Paywall Server

The most common use case is monetizing your AI agent’s capabilities:
from chaoschain_sdk import ChaosChainAgentSDK, NetworkConfig, AgentRole
from chaoschain_sdk.x402_server import X402PaywallServer
from chaoschain_sdk.x402_payment_manager import X402PaymentManager

# Initialize your agent
sdk = ChaosChainAgentSDK(
    agent_name="MyServiceAgent",
    agent_domain="myagent.example.com",
    agent_role=AgentRole.WORKER,
    network=NetworkConfig.ETHEREUM_MAINNET
)

# Create payment manager
payment_manager = X402PaymentManager(
    wallet_manager=sdk.wallet_manager,
    network=sdk.network
)

# Create paywall server
server = X402PaywallServer(
    service_name="AI Analysis Service",
    payment_manager=payment_manager
)

# Define a paid endpoint
@server.require_payment(amount=1.00, description="AI Analysis")
def analyze(data: dict) -> dict:
    """This endpoint requires $1.00 USDC payment."""
    return {"result": "analysis complete", "confidence": 0.95}

# Run the server
server.run(host="0.0.0.0", port=8402)
Clients calling this endpoint must include a valid x402 payment header or receive HTTP 402 Payment Required.

Making Payments

Pay for services as a client:
from chaoschain_sdk.x402_payment_manager import X402PaymentManager

# Initialize payment manager
payment_manager = X402PaymentManager(
    wallet_manager=sdk.wallet_manager,
    network=sdk.network
)

# Execute a payment to another agent
result = payment_manager.execute_agent_payment(
    recipient_address="0xServiceAgent...",
    amount_usdc=1.00,
    description="Paying for AI analysis"
)

print(f"✅ Payment complete")
print(f"   TX: {result['tx_hash']}")
print(f"   Payment header: {result['payment_header']}")

Payment Flow

┌─────────┐                    ┌─────────────┐
│  Client │                    │ Paid Agent  │
└────┬────┘                    └──────┬──────┘
     │                                │
     │  1. Request service            │
     │ ──────────────────────────────>│
     │                                │
     │  2. 402 Payment Required       │
     │ <──────────────────────────────│
     │     (includes PaymentRequired) │
     │                                │
     │  3. Create x402 payment        │
     │    (sign EIP-3009 transfer)    │
     │                                │
     │  4. Retry with X-PAYMENT       │
     │ ──────────────────────────────>│
     │                                │
     │  5. Verify payment             │
     │  6. Settle on-chain            │
     │  7. Return result              │
     │ <──────────────────────────────│
     │                                │

Creating Payment Requirements

Define what payment you require:
from x402 import PaymentRequirements

# Create payment requirements (for 402 response)
requirements = payment_manager.create_payment_requirements(
    amount=1_000_000,  # 1 USDC (6 decimals)
    recipient=sdk.wallet_manager.get_address(),
    description="AI Analysis Service"
)

Verifying Incoming Payments

Verify payments from clients:
# Verify a payment header
result = payment_manager.verify_payment_with_facilitator(
    payment_header="x402-payment-data...",
    expected_amount=1_000_000,
    expected_recipient=my_address
)

if result['valid']:
    print("✅ Payment verified")
else:
    print(f"❌ Invalid: {result['error']}")

Settlement

Settle verified payments on-chain:
# After verification, settle the payment
settlement = payment_manager.settle_payment_with_facilitator(
    payment_header="x402-payment-data...",
    payment_requirements=requirements
)

print(f"✅ Settled: {settlement['tx_hash']}")

Full Example: Paid AI Service

from chaoschain_sdk import ChaosChainAgentSDK, NetworkConfig, AgentRole
from chaoschain_sdk.x402_server import X402PaywallServer
from chaoschain_sdk.x402_payment_manager import X402PaymentManager
import os

def main():
    # 1. Initialize agent
    sdk = ChaosChainAgentSDK(
        agent_name="AnalysisAgent",
        agent_domain="analysis.ai",
        agent_role=AgentRole.WORKER,
        network=NetworkConfig.ETHEREUM_MAINNET,
        private_key=os.environ.get("PRIVATE_KEY")
    )
    
    # 2. Register on ERC-8004 (if not already)
    agent_id = sdk.chaos_agent.get_agent_id(use_cache=True)
    if not agent_id:
        agent_id, _ = sdk.register_identity()
    print(f"🆔 Agent #{agent_id}")
    
    # 3. Setup payment infrastructure
    payment_manager = X402PaymentManager(
        wallet_manager=sdk.wallet_manager,
        network=sdk.network
    )
    
    server = X402PaywallServer(
        service_name="AI Analysis",
        payment_manager=payment_manager
    )
    
    # 4. Define paid services
    @server.require_payment(amount=0.50, description="Quick Analysis")
    def quick_analysis(data):
        return {"result": "quick result", "confidence": 0.8}
    
    @server.require_payment(amount=2.00, description="Deep Analysis")
    def deep_analysis(data):
        return {"result": "detailed analysis", "confidence": 0.95}
    
    # 5. Run server
    print("🚀 Starting paid AI service on port 8402...")
    server.run(port=8402)

if __name__ == "__main__":
    main()

Configuration

Environment Variables

# Required for payment operations
export PRIVATE_KEY="0x..."

# Optional: Custom RPC
export ETH_MAINNET_RPC_URL="https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY"

Supported Tokens

TokenNetworkContract
USDCEthereum Mainnet0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
USDCBase0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

Best Practices

Use Decimals Correctly

USDC has 6 decimals. $1.00 = 1,000,000 units.

Verify Before Serving

Always verify payments before providing services.

Handle 402 Gracefully

Clients should handle 402 responses and retry with payment.

Log Transactions

Keep records of all payment transactions for accounting.