How the x402 Protocol Enables Machine-to-Machine USDC Payments in CloddsBot
CloddsBot implements the x402 protocol through a gateway-agent architecture that uses hash-locked payment channels to automate USDC transfers between autonomous agents without human intervention.
The x402 protocol standardizes machine-to-machine (M2M) cryptocurrency payments using USDC on EVM-compatible chains. In the alsk1992/CloddsBot repository, this protocol is realized through a specialized trade tool and RESTful gateway that manage channel creation, off-chain commitment, and atomic settlement. This article examines the source code to reveal how the system achieves secure, programmable financial transactions between AI agents.
Architecture of the x402 Implementation
The CloddsBot implementation consists of three interconnected layers that handle authentication, transaction construction, and autonomous decision-making.
Gateway Layer
The gateway layer (src/gateway/index.ts) exposes HTTP endpoints for payment channel operations and enforces rate limits via a token-bucket algorithm. When an agent initiates a payment, the gateway authenticates the request at POST /api/payments/channel and stores channel metadata—receiver address, amount, and hashlock—in the SQLite-based data layer referenced in docs/ARCHITECTURE.md. The gateway runs on port 18789 by default and provides the external API surface for the x402 protocol.
Trade Tool
The trade tool (src/tools/trade.ts) is one of 21 built-in tools available to agents. It constructs and signs ERC-20 transfer transactions for USDC settlements. The tool exposes three primary methods for the x402 workflow:
commit– Records an off-chain commitment locked by a hash (HTLC-style)settle– Executes the on-chain USDC transfer when the secret preimage is revealedclose– Handles timeout-based channel closure for refunds
This tool interfaces directly with the blockchain provider configured in the bot's multichain router, allowing it to broadcast transactions to Ethereum, Arbitrum, Base, or other supported networks.
Agent System
The agent system (src/agents/trading-agent.ts) contains the autonomous logic that triggers payments. When an agent determines that a payment is required—such as compensating an arbitrage executor—it invokes the trade tool with an x402 payload containing the receiver's address, USDC amount (specified in 6-decimal units), and a unique channel identifier. The agent's semantic memory maintains the state of pending commitments until they are settled or expired.
The x402 Payment Flow
The protocol achieves atomic, trustless payments through a hash-time-locked contract (HTLC) pattern simplified for USDC transfers.
Channel Creation and Hash-Locking
Payment channels are initialized via the gateway endpoint. The sender provides a hashlock (the keccak256 hash of a secret) when opening the channel. This hashlock ensures that funds can only be claimed by a party that knows the secret preimage. The gateway persists this channel state to the SQLite database through the sql tool, ensuring durability across bot restarts.
Off-Chain Commitment
Before touching the blockchain, the sender records an off-chain commitment: "I owe X USDC to receiver Y, locked by hash H." This commitment is stored in the agent's semantic memory and written to the data layer via src/tools/trade.ts. This step allows agents to negotiate and agree on payment terms instantly without gas fees or block confirmation delays.
Atomic Settlement via Secret Revelation
When the receiving agent is ready to claim funds, it reveals the secret S that produces the original hashlock. The receiver invokes the trade tool with method: "settle", providing the channel ID and secret. The tool constructs a standard ERC-20 transfer or transferFrom transaction, moving USDC from the sender's wallet to the receiver's address. If the secret is never revealed before the timeout expires, the sender can invoke the close method to reclaim the funds, ensuring atomicity and preventing indefinite locks.
Key Implementation Features
Rate Limiting and Security. The gateway implements a token-bucket rate limiter (configured in GatewayConfig per docs/ARCHITECTURE.md) to prevent spam and ensure the system can handle thousands of concurrent M2M payment requests without congestion.
Multichain Compatibility. Because src/tools/trade.ts utilizes the bot's multichain router, the x402 protocol is blockchain-agnostic within the EVM ecosystem. The same code path settles USDC on Ethereum mainnet, Polygon, or Layer 2 networks like Arbitrum, with the target chain specified in the payment request.
Audit Trail and Compliance. Every payment is logged in the gateway audit trail accessible via GET /api/payments/:channelId at src/gateway/index.ts. These logs include the transaction hash, block number, and original x402 payload, providing full traceability for risk management and regulatory compliance modules.
Practical Implementation Example
The following TypeScript demonstrates how a custom skill or external service interacts with CloddsBot's x402 implementation:
// 1️⃣ Open a payment channel (sender side)
await fetch('http://127.0.0.1:18789/api/payments/channel', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
receiver: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', // USDC on Polygon
amount: 100_000000, // 100 USDC (6 decimals)
hashlock: '0x5f3c2a...' // keccak256(secret)
})
});
// 2️⃣ Commit off-chain (sender agent)
await clodds.tools.trade({
method: 'commit',
channelId: '<channel-id>',
secretHash: '0x5f3c2a...'
});
// 3️⃣ Settle the channel (receiver side)
await clodds.tools.trade({
method: 'settle',
channelId: '<channel-id>',
secret: 'my-super-secret' // reveals preimage of hashlock
});
These calls execute through the built-in trade tool at src/tools/trade.ts, which handles transaction signing via the bot's embedded wallet and broadcasting through the configured blockchain provider.
Summary
- x402 protocol enables automated USDC payments between AI agents via hash-locked channels in CloddsBot.
- Three-layer architecture: Gateway (
src/gateway/index.ts) for API access, Trade tool (src/tools/trade.ts) for transaction construction, and Agent system (src/agents/trading-agent.ts) for autonomous decision-making. - Atomic settlement uses HTLC-style hashlocks where funds transfer only upon secret revelation, with timeout-based refunds for security.
- Persistent storage uses SQLite via the data layer to maintain channel state across restarts.
- Multichain support allows the same implementation to settle payments across Ethereum, Polygon, Arbitrum, Base, and other EVM chains.
Frequently Asked Questions
What is the x402 protocol?
The x402 protocol is a standard for machine-to-machine payments that builds on the HTTP 402 Payment Required status code. It defines how autonomous agents can negotiate, commit, and settle cryptocurrency payments—in this case USDC—using hash-locked channels and blockchain settlements. In CloddsBot, it transforms the traditional request-response model into a programmatic financial transaction layer.
How does CloddsBot ensure payment atomicity?
Atomicity is guaranteed through hash-time-locked contracts (HTLCs) implemented in src/tools/trade.ts. The sender locks USDC behind a cryptographic hash; the receiver must reveal the secret preimage to claim funds. If the secret remains unrevealed past the timeout block, the sender can reclaim the USDC via the close method. This ensures either the payment completes successfully or the funds return to the sender, with no intermediary risk.
Which blockchains does the x402 implementation support?
The implementation is chain-agnostic across EVM-compatible networks. Because the trade tool interfaces with CloddsBot's multichain router, it can settle USDC on Ethereum, Polygon, Arbitrum, Base, Optimism, and any other chain where USDC contracts are deployed. The target blockchain is specified as a parameter in the payment channel creation request handled by src/gateway/index.ts.
How are payment channels persisted across bot restarts?
Channel state is written to a SQLite database via the data layer referenced in docs/ARCHITECTURE.md and accessible through the sql tool. When the gateway at src/gateway/index.ts creates a channel, it persists the receiver address, amount, hashlock, and timeout parameters. Upon restart, the agent system reloads pending commitments from this storage, ensuring that payment obligations survive process termination or hardware failures.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →