Интеграция платежей LangChain.
Добавьте платежи USDC к любому агенту LangChain. Реальный пакет Python предоставляет инструменты для кошелька - отправка, завершение и чтение - всего в несколько строк.
Blockchain0x поставляет реальный Python package, , который дает агенту LangChain нативные инструменты кошелька: отправлять USDC на Base, закрывать счет с on-chain proof и читать кошельки и транзакции. Установите его, задайте , вызовите и передайте инструменты вашему агенту. На TypeScript? npm adapter нет - оберните x402 client в инструмент LangChain.js.
Один тонкий слой над HTTP API Blockchain0x.
Каждый инструмент в blockchain0x-langchain является тонкой оберткой над официальным ядром SDK blockchain0x. Никакой повторной реализации REST или логики x402, никакого хранения ключей: адаптер пересылает ваш API-ключ на сервер и не хранит никаких секретов. create_blockchain0x_toolset(client) передает LangChain пять инструментов - отправить платеж, рассчитать счет, прочитать кошелек, перечислить кошельки, прочитать транзакцию - каждый уже типизирован и ограничен.
Вы все еще можете напрямую вызывать сырой API или основной SDK, если предпочитаете. Адаптер - это путь наименьшего сопротивления; API - это контракт. Закрепите blockchain0x-langchain за диапазоном langchain-core, который он поддерживает, а не гонитесь за последними версиями обоих.
Одна установка. Одна переменная окружения. Готово.
Пакет требует Python 3.9 или новее. Он включает в себя основной SDK blockchain0x и langchain-core как зависимости; ничего больше добавлять не нужно.
pip install blockchain0x-langchainexport BLOCKCHAIN0X_API_KEY=sk_test_... # sk_test_ = Base Sepolia, sk_live_ = Base mainnet
BLOCKCHAIN0X_API_KEY - это ключ sk_test_ для testnet или sk_live_ для mainnet из вашего dashboard Blockchain0x. Это единственная переменная, которая нужна адаптеру; он передает ключ на backend и не хранит собственных секретов. Для показанного ниже обработчика webhook также задайте BLOCKCHAIN0X_WEBHOOK_SECRET, который dashboard выдает один раз при создании или ротации webhook.
Рабочий агент LangChain с поддержкой платежей.
Ниже приведен полный агент LangChain на Python. create_blockchain0x_toolset возвращает инструменты кошелька, create_react_agent подключает их к циклу ReAct, и модель выбирает правильный инструмент из подсказки. Установите BLOCKCHAIN0X_API_KEY, запустите его, и агент сможет перемещать и читать USDC на Base.
from blockchain0x import Client from blockchain0x_langchain import create_blockchain0x_toolset from langchain_openai import ChatOpenAI from langgraph.prebuilt import create_react_agent client = Client() # reads BLOCKCHAIN0X_API_KEY from the environment tools = create_blockchain0x_toolset(client) llm = ChatOpenAI(model="gpt-4o") agent = create_react_agent(llm, tools) result = agent.invoke({ "messages": [{ "role": "user", "content": "Pay 0.01 USDC from my agent to 0xRecipient for the dataset.", }], })
Run it with the prompt above and the model picks the send-payment tool, the SDK submits the transfer on Base, and you get a transaction hash back. amount_wei is USDC base units (6 decimals), so 0.01 USDC is the string "10000". A sk_test_ key keeps you on Base Sepolia until you switch to sk_live_. Heads up: payments.create can answer 503 until the chain adapter is wired for your network.
Что происходит после того, как пользователь платит.
URL вебхука вашего агента (установленный на панели управления Blockchain0x) получает POST, когда платеж завершается. Помощник проверки вебхука находится в Node SDK, поэтому этот обработчик написан на TypeScript, даже если ваш агент написан на Python. Ниже приведен обработчик Express, который проверяет подпись и выполняет оплачиваемую работу. Используйте тот же шаблон в любом HTTP-фреймворке.
import express from "express"; import { webhooks } from "@blockchain0x/node"; const app = express(); // Capture the RAW body. The HMAC is over the exact bytes on the wire. app.use(express.raw({ type: "application/json" })); app.post("/webhooks/payment", (req, res) => { const result = webhooks.verify({ headers: req.headers, rawBody: req.body, // Buffer, raw bytes secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET!, }); if (!result.ok) return res.status(400).json({ code: result.code }); if (result.eventType === "payment.received") { // USDC landed in your agent wallet - do the paid work } res.status(200).send("ok"); });
webhooks.verify выполняет HMAC-SHA256 за постоянное время и возвращает дискриминированный союз, поэтому вы разделяете по result.ok без try/catch и читаете result.eventType. Читайте сырое тело, а не разобранную копию: разбор, а затем повторная сериализация нарушает подпись. Доставленные события: payment.received, payment.sent, wallet.deployed и webhook.test; входящий платеж вашему агенту - это payment.received.
Нет адаптера npm LangChain. Вот честный рецепт.
Отгруженный адаптер LangChain только для Python. Адаптера LangChain в npm нет. Для агента TypeScript LangChain или LangGraph вы оборачиваете реальный клиент x402 в инструмент LangChain.js самостоятельно. Это несколько строк, и именно это сделает специализированный адаптер под капотом.
import { createClient } from "@blockchain0x/node"; import { createX402Client } from "@blockchain0x/x402/client"; import { tool } from "@langchain/core/tools"; import { z } from "zod"; const sdk = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! }); const fetchWithPay = createX402Client({ sdk }); // There is no npm LangChain adapter. Wrap the x402 client in a LangChain.js tool. export const payAndFetch = tool( async ({ url }) => (await fetchWithPay(url)).text(), { name: "pay_and_fetch", description: "Fetch a URL, answering any x402 payment challenge automatically", schema: z.object({ url: z.string().url() }), }, );
Исходный код и примеры для testnet находятся в the Python SDK repo; матрица поддержки SDK - в the docs. Python smoke example отправляет реальный перевод $0.01 USDC в Base Sepolia через то же действие send-payment, которое оборачивает tool LangChain.
Пять вещей, которые подводят при первой интеграции.
Эти данные поступают из нашего почтового ящика поддержки. Ни одно из них не является критическим, но знание о них заранее экономит по часу размышлений на каждом.
Суммы представлены в базовых единицах USDC, как строки
The payment tools take amount_wei: a string of USDC base units, not a float and not a dollar figure. USDC has 6 decimals, so 0.01 USDC is "10000" and 5 USDC is "5000000". Always pass a string; large integers lose precision as JSON numbers. Send "5.00" and you will either get a validation error or move a millionth of what you meant.
Инструмент счета рассчитывается, он не создает
blockchain0x_settle_invoice завершает СУЩЕСТВУЮЩИЙ запрос на платеж с доказательством в цепочке. Нет инструмента, который создает новый счет или хостит ссылку на оформление заказа: запросы на платеж создаются в панели управления, а основной SDK предоставляет только возможность завершения. Если вы ожидали, что агент сгенерирует ссылку для оплаты на лету, это не так. Создайте запрос вне канала, затем позвольте агенту завершить его.
Проверьте вебхуки по необработанному телу.
Вебхуки отправляют POST на ваш URL, и любой, кто узнал этот URL, может отправить мусор. Запустите webhooks.verify из @blockchain0x/node над сырыми байтами запроса, прежде чем доверять событию. Сначала разберите JSON, и HMAC не совпадет, потому что подпись охватывает точные байты, которые пришли. Это HMAC-SHA256 с окном повторной передачи в 300 секунд. Пропуск этого шага - самая распространенная ошибка в производстве.
send_payment может ответить 503 на раннем этапе
payments.create, который оборачивает blockchain0x_send_payment, по умолчанию не повторяет и может вернуть 503, пока адаптер цепочки не подключен к вашей сети. Не позволяйте LLM бить по инструменту в цикле повторных попыток при ошибке: это сжигает токены и загрязняет ваш журнал намерений. Полагайтесь на встроенный ключ идемпотентности, выявляйте сбой, двигайтесь дальше.
Совпадение версии langchain-core
blockchain0x-langchain 0.1.x нацелен на langchain-core >=0.2,<0.4. Если у вас core новее, чем поддерживает adapter, зафиксируйте подходящую пару, а не гонитесь за самым новым в обоих пакетах. Матрица поддержки находится в docs.