x402 Seller Kit

O código de um endpoint x402 é a parte fácil.

Servidor vendedor e cliente comprador, com as guardas de gasto, o conferidor de pré-voo e a camada de RPC que os exemplos oficiais não têm — mais nove modos de falha medidos em operação real, cada um com o teste que separa a causa verdadeira da aparente.

O problema

Existem starter kits de x402, e alguns são bons. Todos param no mesmo lugar: o servidor sobe, o 402 aparece, e o exemplo termina.

O que vem depois não está documentado em lugar nenhum. Uma validação que devolve a mesma mensagem para dois problemas opostos. Uma guarda que passa no seu terminal e falha aberta no supervisor. Um saldo que não pôde ser lido e chega ao código de decisão como o número zero. Um RPC que responde vazio em vez de responder erro.

Nada disso aparece em teste unitário, e nenhum deles avisa quando erra.

O que vem dentro

Servidor vendedor

Express com @x402/express. 402 com termos legíveis por máquina, liquidação pelo facilitador da CDP em mainnet e pelo facilitador público em testnet.

Cliente comprador

Dry-run por padrão. Nada é assinado sem --confirm, e o --confirm é recusado quando o destino não indexa.

Guardas de gasto

Divergência de payTo, domínio de túnel compartilhado, saldo desconhecido — na ordem certa, e a ordem é deliberada.

Conferidor de pré-voo

Identidade, payTo, preço anunciado contra o configurado, endpoint, alcance público. Imprime a origem de cada valor.

Configuração unificada

Um módulo interpreta a configuração, uma precedência declarada. Nenhuma guarda lê process.env direto.

Camada de RPC

Multicall3 que corta a rajada de 70 para 17 requisições, fallback entre endpoints e retry com backoff em 429.

ARMADILHAS.md — o índice

Cada seção tem a mesma estrutura: o que parece, o que é, como separar os dois. A parte que importa é sempre a terceira — é o teste discriminante que sobrevive ao próximo caso, não a conclusão.

  1. Um Skipped na validação da CDP não é bloqueio de hostname

    A mesma mensagem aparece para dois problemas opostos. A sonda de controle — um app inexistente no mesmo domínio — separa os dois em dois minutos.

  2. Vender e ser descoberto são coisas diferentes

    Um endpoint que vende e não indexa não tem o mesmo problema, nem a mesma solução, de um que indexa e não vende.

  3. Uma guarda que lê variável de ambiente falha ABERTA

    Passa no seu terminal, deixa passar no supervisor — no único script que gasta dinheiro. Com o comando que reproduz.

  4. A ordem das guardas é parte da guarda

    "Você não tem o dinheiro" é recuperável; "este gasto não compra nada" não é. Na ordem errada, a pessoa deposita para receber a notícia que já existia.

  5. Uma conta com delegação EIP-7702 não serve como compradora

    O verify do facilitador reverte. Como confirmar com eth_getCode antes de procurar o erro no seu payload — e a ressalva do que não foi possível isolar.

  6. Nonce 0 não prova que nenhum dinheiro saiu

    USDC implementa EIP-3009: o saldo se move por assinatura off-chain e o nonce do dono nunca incrementa. A única fonte é o log de Transfer.

  7. Verificar o handler isolado não é verificar

    Os dois defeitos que derrubaram a primeira compra real só existiam no caminho pago completo. Nenhum deles estava no handler.

  8. mainnet.base.org não pode ser trocado por "um RPC melhor"

    Dos sete RPCs públicos da Base medidos, foi o único que suportou getLogs; os outros seis falharam 20 de 20. A solução foi o oposto de trocar.

  9. Saldo desconhecido não é saldo zero

    Um .catch(() => 0) replicado em cinco arquivos transformou falha de leitura em autorização de compra. Custou US$ 5 reais. Vem com a guarda estrutural que impede a sexta cópia.

O que é verificável

Testes
19 arquivos, 211 testes, suíte verde — incluindo o que atravessa o caminho pago completo e duas guardas estruturais.
Standalone
A suíte é rodada num diretório fora do repositório de origem antes de o pacote ser fechado. tsc --noEmit limpo.
Sem segredo
Nenhuma carteira, chave, credencial ou arquivo .env acompanha o pacote. Os únicos endereços no código são contratos públicos da Base e endereços de teste.
Licença
MIT. Obra derivada, com LICENSE original e NOTICE declarando o que foi extraído, adaptado e removido.
Requisitos
Node ≥ 20. TypeScript. Sem serviço pago para rodar os testes.

O que este pacote não é

  • Não é bot de trading, nem estratégia, nem sinal de mercado.
  • Não promete receita. Não há projeção, previsão ou número de vendas em lugar nenhum.
  • Não traz carteira, chave nem conta — você usa as suas.
  • Não é um framework. São arquivos que você lê, entende e edita.
  • Não garante indexação no Bazaar: a política de quem indexa é de terceiro e pode mudar. O que o pacote dá é o método para descobrir por que não indexou.
Comprar

Link de pagamento ainda não publicado.