에이전트가 돈을 내고 나에게 메시지를 보낼 수 있는지 확인해 보고 싶었습니다.

연락처 양식을 작성하는 사람이 아니라, 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입니다. x402는 코인베이스(Coinbase)가 오픈소스로 공개하고 현재 x402 재단이 리눅스 재단(Linux Foundation) 프로젝트로 유지 관리하는 'stablecoin' 네이티브 결제 표준입니다. 스테이블 코인 컴퍼니(The Stable Coin Company)는 Base, Solana, Radius에서 'USDC'와 'SBC'를 모두 지원하는 중개자(facilitator)를 운영합니다. 저는 제가 가장 잘 아는 자산인 SBC를 사용했습니다.

메시지가 아닌 제품에 이를 구현하려면, 결제 후 발생하는 동작을 변경하면 됩니다. 메시지를 저장하는 대신 다운로드 URL을 생성하거나, 웹훅을 트리거하거나, 배송을 시작하면 됩니다. 이 라이브러리는 구체적인 동작이 무엇인지에 상관하지 않습니다. 단지 결제 뒤에 해당 동작을 연결해 줄 뿐입니다.

결정 사항

이 엔드포인트는 USDC와 SBC 모두를 수용합니다. 제가 가장 잘 알고 있는 자산이자 두 체인에서 종단 간 검증을 수행하고자 했던 자산이 SBC였기 때문에 이를 사용했습니다.

저는 두 개의 지갑을 가지고 있습니다. 제 EVM 지갑은 Base에서 SBC를 수신하고, 별도의 Solana 지갑은 Solana에서 SBC를 수신합니다. 동일한 엔드포인트, 동일한 가격, 서로 다른 결제 경로입니다.

메시지는 D1 테이블에 저장됩니다. 저는 관리자 패널에서 이를 확인합니다. 이메일 전달도 없고, 모니터링할 수신함도 없습니다. 메시지는 단순히 메시지로 존재하는 것 외에는 아무것도 할 수 없어야 합니다.

가격은 0.10달러입니다. 스팸을 보내기에는 비경제적일 만큼 충분히 높고, 정당한 에이전트에게는 사소한 수준일 만큼 충분히 낮습니다.

제대로 작동합니다

다음은 2026년 6월 13일의 실제 거래 내역입니다. 각 메시지 비용은 SBC로 /bin/sh.10이었습니다. 정산은 온체인에서 이루어졌습니다.

발신자네트워크금액거래
cursor-agent/0.46.2기본/bin/sh.10 SBC0x5265bdd1…963cd · BaseScan
deal-flow-scout@vcscan.aiBase/bin/sh.10 SBC0xe0aa91c4…4313d · BaseScan
claude-research-agent/1.2Base/bin/sh.10 SBC0xb0c96326…4dd05 · BaseScan
e2e-test-agent기본/bin/sh.10 SBC0x0fca4265…c1b08 · BaseScan
e2e-test-agent솔라나/bin/sh.10 SBC2typCyWo…hsYc · Solscan
Admin panel showing x402 agent messages with sender, message body, network, and transaction hash links to BaseScan and Solscan

이것이 제 관리자 패널입니다. 메시지 7개. Base와 Solana입니다. 각각 표시되기 전에 체인 상에서 처리되었습니다.

저에게 메시지 보내기

에이전트를 구축 중이라면, 엔드포인트는 POST benmilne.com/contact/send입니다. 이는 OpenAPI 사양과 agents.md에 문서화되어 있습니다.

결제 헤더 없이 POST 요청을 보내면 서버에서 필요한 모든 정보를 포함한 402 응답을 반환합니다. x402 클라이언트 라이브러리가 서명 및 재시도를 처리합니다. 요금은 /bin/sh.10입니다. Base와 Solana에서는 SBC 및 USDC를 사용합니다. 콜백 URL을 포함하면, 향후 해당 URL로 응답할 수 있게 됩니다.

배운 점

402 응답은 기계가 읽을 수 있는 청구서입니다. 에이전트에는 UI가 필요하지 않습니다. 가격, 자산 주소, 네트워크만 있으면 됩니다. 에이전트는 서명하고, 결제하고, 재시도합니다.

'키리스(keyless)'를 표방하는 커뮤니티 중개자를 통해 USDC 지원을 추가해 보았습니다. 그 중 어느 것도 허가 없이 작동하지 않았습니다. 하나는 주소 등록을 요구했고, 다른 하나는 버전 호환성 문제가 있었습니다. The Stable Coin Company를 통한 SBC가 아무런 설정 없이도 작동한 유일한 중개자였습니다. 키도, 계정도, 등록 절차도 필요 없습니다. 에이전트가 사람이 먼저 무언가를 설정하지 않아도 지불할 수 있게 하려면 이 점이 중요합니다.

또 하나 놀라웠던 점은, MetaMask와 Phantom 모두 제가 여러 번 승인했음에도 불구하고 지갑에서 SBC를 계속 숨겨버렸다는 것입니다. 토큰을 추가하고, 거래를 확인하고, 잔액을 확인하면 자산이 다시 사라져 있었습니다. 테스트 중 이런 일이 반복적으로 발생했습니다. 두 팀 모두에 대해 존경심만 있을 뿐이지만, 규제 대상 발행사의 자산을 사용하겠다고 내 기기의 지갑에 계속해서 직접 알려야 한다는 건 터무니없는 일처럼 느껴졌습니다. 인터넷은 넓습니다. 지갑은 사용자가 이미 내린 선택을 신뢰해야 합니다.

이 작업에 사용한 코드는 오픈 소스이며, MetaMask나 Phantom이 여러분의 작업에 간섭하지 않는 한 자유롭게 활용하셔도 됩니다.