에이전트가 돈을 내고 나에게 메시지를 보낼 수 있는지 확인해 보고 싶었습니다.
연락처 양식을 작성하는 사람이 아니라, CAPTCHA도 아니고, 지갑과 할 일, 그리고 저에게 연락하고 싶은 의지를 가진 에이전트 말입니다.
저는 특별한 존재가 아닙니다. 저는 그저 컴퓨터가 뭔가 말을 걸고 싶어 할 만한 평범한 사람일 뿐입니다.
연락처 페이지에 명시된 대로, 사람은 원할 때 언제든지 LinkedIn이나 X를 통해 저에게 연락할 수 있습니다.
이 사이트에 연락처 엔드포인트를 추가하면, 관리해야 할 새로운 수신함이 생깁니다. 스팸, 봇, 무작위 영업 연락 등이 쏟아지죠. CAPTCHA는 인간을 걸러냅니다. 결제는 모든 사람을 걸러내지만, 신용카드 역시 인간만을 걸러냅니다. 저는 에이전트의 작동 방식에 본질적으로 부합하는 무언가가 필요했습니다.
x402가 바로 그 관문입니다. 이는 HTTP 402 ‘결제 필요(Payment Required)’를 기반으로 구축된 프로토콜로, 인터넷에서 결제를 위해 예약해 두었지만 결코 정의되지 않았던 상태 코드입니다. x402가 이를 정의합니다. 서버는 가격과 stablecoin 주소를 포함한 402 응답을 반환합니다. 에이전트는 응답을 읽고, 지갑으로 허가서에 서명한 후, 결제 헤더를 포함해 재시도하면 서버가 온체인에서 결제를 처리합니다. 결제 페이지도, 양식도, 계정도 필요 없습니다. 단지 상태 코드와 서명만 있으면 됩니다.
사람에게는 끔찍한 경험이지만, 에이전트에게는 훌륭한 경험입니다.
작동 방식
이 엔드포인트는 이 사이트의 /contact/send에 위치합니다. 에이전트는 OpenAPI 사양이나 agents.md를 통해 이를 확인합니다. 첫 번째 POST 요청에는 결제 헤더가 포함되지 않습니다. 서버는 가격, 허용되는 자산, 포함해야 할 필드를 설명하는 스키마와 함께 402 응답을 반환합니다. 에이전트는 응답 자체 외에 별도의 문서가 필요하지 않습니다.
sequenceDiagram
participant Human as Human
participant Agent as Agent
participant Site as benmilne.com
participant Facilitator as x402 Facilitator
participant Chain as Blockchain
participant Admin as Admin Panel
Human-->>Agent: "Contact Ben Milne about X"
Agent-->>Site: POST /contact/send (no payment)
Site-->>Agent: 402 + price + assets + field schema
Agent-->>Agent: Sign stablecoin permit
Agent-->>Site: POST + PAYMENT-SIGNATURE + message body
Site-->>Facilitator: Verify signature
Facilitator-->>Site: Valid
Site-->>Facilitator: Settle
Facilitator->>Chain: On-chain transfer (SBC)
Chain-->>Facilitator: Tx hash
Facilitator-->>Site: Settlement confirmed
Site-->>Site: Store message in D1
Site-->>Agent: 200 + receipt with tx hash
Admin-->>Admin: Message appears with block explorer link
rect rgba(200, 120, 50, 0.08)
Note over Human,Admin: Future: callback URL enables two-way communication
end
The Stable Coin Company는 에이전트의 서명된 허가서를 검증하고 온체인 이체를 실행하며, 양 당사자를 대신해 가스비를 지불하는 중개자 역할을 수행합니다. 에이전트는 ETH나 SOL을 보유할 필요가 없습니다. 에이전트는 결제 수단으로 사용하는 단일 자산만 보유하면 됩니다.
시작하기
이를 위해 x402-payment-path라는 작은 라이브러리를 작성했습니다. 이 라이브러리는 402 챌린지, 서명 검증, 정산 및 영수증 생성을 처리합니다.
이 기반이 되는 프로토콜은 x402로, 코인베이스(Coinbase)가 오픈소스로 공개하고 현재 x402 재단이 리눅스 재단(Linux Foundation) 프로젝트로 유지 관리하고 있는 ‘stablecoin’ 네이티브 결제 표준입니다. 스테이블 코인 컴퍼니는 Base, Solana, Radius에서 ‘USDC’와 SBC를 모두 지원하는 중개자(facilitator)를 운영합니다. 저는 제가 가장 잘 아는 자산인 SBC를 사용했습니다.
메시지가 아닌 제품에 이를 구현하려면, 결제 후 발생하는 동작을 변경하면 됩니다. 메시지를 저장하는 대신 다운로드 URL을 생성하거나, 웹훅을 트리거하거나, 배송을 시작하면 됩니다. 이 라이브러리는 구체적인 동작이 무엇인지에 상관하지 않습니다. 단지 결제를 통해 해당 동작을 제어할 수 있도록 할 뿐입니다.
결정 사항
이 엔드포인트는 USDC와 SBC를 모두 수용합니다. 제가 SBC를 사용한 이유는 제가 가장 잘 아는 자산일 뿐만 아니라, 두 체인 모두에서 종단 간 검증을 수행하고 싶었기 때문입니다.
저는 두 개의 지갑을 가지고 있습니다. 제 EVM 지갑은 Base에서 SBC를 수신하고, 별도의 Solana 지갑은 Solana에서 SBC를 수신합니다. 동일한 엔드포인트, 동일한 가격이지만 정산 경로는 다릅니다.
메시지는 D1 테이블에 저장됩니다. 저는 관리자 패널에서 이를 확인합니다. 이메일 전달도 없고, 모니터링해야 할 수신함도 없습니다. 메시지는 단순히 메시지로 존재하는 것 외에는 어떤 기능도 수행해서는 안 됩니다.
가격은 1달러입니다. 스팸을 보내기에는 비경제적일 만큼 충분히 높고, 정당한 참여자에게는 사소한 수준일 만큼 충분히 낮습니다.
잘 작동합니다
다음은 2026년 6월 13일의 실제 거래 내역입니다. 각 메시지 비용은 SBC로 0.10달러였습니다. 정산은 온체인에서 이루어졌습니다.
| 발신자 | 네트워크 | 금액 | 거래 |
|---|---|---|---|
cursor-agent/0.46.2 | 기본 | /bin/sh.10 SBC | 베이스스캔 |
claude-research-agent/1.2 | 기본 | 0.10 SBC | 베이스스캔 |
e2e-test-agent | 기본 | 0.10 SBC | 베이스스캔 |
e2e-test-agent | 솔라나 | 0.10 SBC | 솔스캔 |

이게 제 관리자 패널입니다. 메시지가 일곱 개 있습니다. Base와 Solana입니다. 각 메시지는 화면에 표시되기 전에 체인상에서 이미 처리되었습니다.
메시지 전송
에이전트를 개발 중이라면, 엔드포인트는 POST benmilne.com/contact/send입니다. 이는 OpenAPI 사양과 agents.md에 문서화되어 있습니다.
결제 헤더 없이 POST 요청을 보내면 서버에서 필요한 모든 정보가 포함된 402 응답을 반환합니다. x402 클라이언트 라이브러리가 이후의 서명 및 재시도 처리를 담당합니다. 요금은 Base와 Solana에서 각각 . SBC입니다. 콜백 URL을 포함하면, 향후 해당 URL로 응답할 수 있게 됩니다.
배운 점
402 응답은 기계가 읽을 수 있는 청구서입니다. 에이전트에는 UI가 필요하지 않습니다. 가격, 자산 주소, 네트워크만 있으면 됩니다. 에이전트는 서명하고, 결제하고, 재시도합니다.
저는 ‘키리스(keyless)’를 표방하는 커뮤니티 중개자를 통해 USDC 지원을 추가해 보았습니다. 그중 어느 것도 허가 없이 작동하지 않았습니다. 하나는 주소 등록을 요구했고, 다른 하나는 버전 호환성 문제가 있었습니다. The Stable Coin Company를 통한 SBC가 아무런 설정 없이도 작동한 유일한 중개자였습니다. 키도, 계정도, 등록 절차도 필요 없습니다. 사람이 먼저 무언가를 설정하지 않아도 에이전트가 결제를 수행할 수 있게 하려면 이 점이 중요합니다.
또 한 가지 놀라웠던 점은, MetaMask와 Phantom 모두 제가 여러 번 승인했음에도 불구하고 지갑에서 SBC를 계속 숨겨버렸다는 것입니다. 토큰을 추가하고, 거래를 확인하고, 잔액을 확인하면 자산이 다시 사라져 버렸습니다. 테스트 기간 동안 이런 일이 반복적으로 발생했습니다. 두 팀 모두에 깊은 존경심을 가지고 있지만, 규제 대상 발행사의 자산을 사용하겠다고 내 기기의 지갑에 반복해서 알려야 한다는 사실은 터무니없게 느껴졌습니다. 인터넷은 광활합니다. 지갑은 사용자가 이미 내린 선택을 신뢰해야 합니다.
이 작업에 사용한 코드는 오픈 소스이며, MetaMask나 Phantom이 여러분의 작업에 간섭하지 않는 한, 이 코드를 원하는 대로 자유롭게 활용하셔도 됩니다.