Back to Blog

AI and MCP / D08

x402 Pay-Per-Use: Покупайте TRON Energy без аккаунта

Проблема регистрации

Каждый блокчейн-сервис следует одной схеме: создать аккаунт, подтвердить email, сгенерировать API ключ, пополнить внутренний баланс, затем начать использовать сервис. Для человека это небольшое неудобство. Для автономного AI-агента это непреодолимое препятствие.

Агенты не имеют адресов электронной почты. Они не хотят, чтобы внутренние балансы управлялись третьими лицами. Они не хотят доверять платформе хранение своих средств. Чего хотят агенты, так это просто: заплатить за сервис, получить сервис, двигаться дальше. Никаких отношений. Никакого состояния. Никакого доверия.

Протокол x402 делает это возможным. Вдохновлённый HTTP 402 "Payment Required" (определён в 1997 году, но никогда не был широко реализован), x402 обеспечивает коммерцию с оплатой за использование, где платёж проверяется в блокчейне, а не через аккаунты и API ключи.

MERX реализует x402 для покупки энергии. Любой субъект с TRON кошельком — человек, агент или смарт-контракт — может купить энергию в одной транзакции без создания аккаунта, без пополнения средств и без какого-либо предыдущего взаимодействия с платформой MERX.

Как это работает

Поток x402 состоит из пяти шагов. Каждый шаг проверяется в блокчейне, и покупателю никогда не нужно доверять MERX хранение своих средств.

Шаг 1: Запрос счёта

Покупатель вызывает create_paid_order с желаемыми параметрами энергии:

Tool: create_paid_order
Input: {
  "energy_amount": 65000,
  "duration_hours": 1,
  "target_address": "TBuyerAddress..."
}

Response:
{
  "invoice": {
    "order_id": "xpay_abc123",
    "amount_trx": 1.43,
    "amount_sun": 1430000,
    "pay_to": "TMerxTreasuryAddress...",
    "memo": "merx_xpay_abc123",
    "expires_at": "2026-03-30T12:05:00Z",
    "energy_amount": 65000,
    "duration_hours": 1,
    "target_address": "TBuyerAddress..."
  }
}

Счёт — это предложение цены, а не обязательство. Никакие средства не переместились. Покупатель может проверить цену, сравнить её с альтернативами и решить, продолжать ли. Счёт истекает через 5 минут — если не оплачен в этот период, цена больше не гарантируется.

Шаг 2: Подпишите платёж локально

Покупатель создаёт транзакцию передачи TRX со своего кошелька на адрес казны MERX. Критическая деталь — поле memo, которое должно содержать точную строку из счёта.

const tx = await tronWeb.transactionBuilder.sendTrx(
  invoice.pay_to,        // TMerxTreasuryAddress
  invoice.amount_sun,    // 1430000 (1.43 TRX в SUN)
  buyerAddress
);

// Добавить memo в данные транзакции
const txWithMemo = await tronWeb.transactionBuilder.addUpdateData(
  tx,
  invoice.memo,          // "merx_xpay_abc123"
  'utf8'
);

// Подпишите локально - приватный ключ никогда не покидает машину покупателя
const signedTx = await tronWeb.trx.sign(txWithMemo);

Платёж подписывается приватным ключом покупателя на машине покупателя. Приватный ключ никогда не передаётся MERX, никогда не передаётся по сети и никогда не хранится где-либо вне контроля покупателя.

Шаг 3: Трансляция платежа

Подписанная транзакция транслируется в сеть TRON:

const result = await tronWeb.trx.sendRawTransaction(signedTx);
const txHash = result.txid;

На этом этапе платёж находится в блокчейне. Он видим каждому, кто запрашивает блокчейн TRON. TRX переместился с адреса покупателя на адрес казны MERX, и поле memo содержит идентификатор счёта.

Шаг 4: MERX проверяет в блокчейне

MERX отслеживает свой адрес казны на входящие транзакции. Когда приходит транзакция, MERX:

  1. Читает поле memo
  2. Сопоставляет его с непокрытыми счётами
  3. Проверяет, что сумма соответствует счёту (требуется точная сумма)
  4. Проверяет, что счёт не истёк
  5. Проверяет, что счёт не был уже оплачен (предотвращает двойное требование)
Verification:
  TX hash: 7f3a2b...
  From: TBuyerAddress...
  To: TMerxTreasuryAddress...
  Amount: 1,430,000 SUN (1.43 TRX) - MATCHES
  Memo: "merx_xpay_abc123" - MATCHES invoice
  Invoice status: UNPAID - OK
  Invoice expiry: 2026-03-30T12:05:00Z - NOT EXPIRED

  Result: VERIFIED

Шаг 5: Делегирование энергии

Платёж проверен, MERX размещает заказ энергии через сеть поставщиков:

Order placed:
  Energy: 65,000
  Duration: 1 hour
  Target: TBuyerAddress...
  Provider: sohu (best price at time of order)

Delegation confirmed after 4.1 seconds
Energy available at TBuyerAddress: 65,000

Покупатель теперь имеет 65 000 энергии, делегированной на его адрес на 1 час. Он может использовать её для передачи USDT, обмена на DEX или любого другого взаимодействия со смарт-контрактом.

Полный поток агента

Вот как AI-агент выполняет весь поток x402 через MCP-сервер MERX:

Agent: "I need to send 100 USDT to TRecipient. I don't have a MERX account."

Step 1: Agent calls create_paid_order
  -> Receives invoice: 1.43 TRX, memo "merx_xpay_abc123"

Step 2: Agent calls transfer_trx
  -> Sends 1.43 TRX to TMerxTreasury with memo "merx_xpay_abc123"
  -> TX hash: 7f3a2b...

Step 3: Agent waits for verification (automatic)
  -> MERX detects payment, verifies on-chain
  -> Energy delegated to agent's address

Step 4: Agent calls transfer_trc20
  -> Sends 100 USDT to TRecipient
  -> Uses delegated energy instead of burning TRX
  -> Cost: 1.43 TRX instead of ~27 TRX

Total interaction with MERX: 2 tool calls
Account created: No
API key used: No
Funds deposited: No
Trust required: Minimal (payment verified on-chain)

Безопасность: почему memo важна

Поле memo — основа безопасности x402. Без неё любая передача TRX на казну MERX могла бы быть заявлена как платёж для любого счёта. Это создаёт два вектора атак:

Перекрёстная атака на платёж

Без проверки memo злоумышленник мог бы:

  1. Запросить счёт на 65 000 энергии (1.43 TRX)
  2. Дождаться, пока кто-то другой отправит 1.43 TRX на казну MERX по какой-то другой причине
  3. Заявить этот не связанный платёж как платёж за свой счёт
  4. Получить бесплатную энергию

Memo это предотвращает. Каждый счёт имеет уникальную строку memo. Платёж сопоставляется со счётом только если поле memo содержит точную строку. Случайные передачи TRX на адрес казны — которые происходят на любом активном адресе — игнорируются, потому что им не хватает действительного memo.

Атака воспроизведения

Без истечения и однократного применения злоумышленник мог бы:

  1. Оплатить счёт легально
  2. Ссылаться на эту же транзакцию платежа для второго счёта
  3. Получить энергию дважды за одну оплату

MERX предотвращает это двумя механизмами:

Проверка суммы

Сумма платежа должна точно совпадать с суммой счёта. Отправка 1.42 TRX вместо 1.43 TRX приводит к неудачной проверке. Это предотвращает атаки, когда злоумышленник отправляет минимальную сумму (например, 0.000001 TRX) с действительным memo, чтобы заявить счёт за дробную часть цены.

Реальная транзакция в Mainnet

Вот проверенная транзакция x402 из mainnet TRON:

Invoice:
  Order ID: xpay_m7k2p9
  Energy: 65,000
  Duration: 1 hour
  Price: 1.43 TRX
  Memo: merx_xpay_m7k2p9

Payment Transaction:
  Hash: 8d4f1a7b3c2e...
  Block: 58,234,891
  From: TWallet...
  To: TMerxTreasury...
  Amount: 1,430,000 SUN
  Memo: merx_xpay_m7k2p9
  Status: CONFIRMED

Verification:
  Timestamp: 2026-03-28T14:22:17Z
  Match: Amount OK, Memo OK, Not expired, Not previously paid
  Result: VERIFIED

Energy Delegation:
  Delegated: 65,000 energy
  Provider: catfee
  Delegation TX: 3a8b2c...
  Confirmed at: 2026-03-28T14:22:23Z
  Expires at: 2026-03-28T15:22:23Z

От запроса счёта до делегирования энергии: 23 секунды. Никакого аккаунта. Никакого API ключа. Никакого предыдущего взаимодействия.

Когда использовать x402 вместо доступа на основе аккаунта

x402 идеален для:

Доступ на основе аккаунта лучше для:

Многие пользователи начинают с x402 для оценки и мигрируют на доступ на основе аккаунта по мере роста использования. Эти две модели дополняют друг друга, а не конкурируют.

x402 и будущее торговли агентов

Протокол x402 представляет более широкий сдвиг в том, как потребляются сервисы. Традиционный биллинг SaaS — ежемесячные подписки, уровневое ценообразование, лимиты использования — предполагает человеческого клиента, который создаёт аккаунт, оценивает ценовые уровни и принимает решение о покупке. Эта модель ломается, когда клиент — AI-агент, который должен принимать решения о покупке автономно, в реальном времени, для конкретных задач.

x402 соответствует экономике агентов:

MERX — первая энергетическая биржа, реализующая x402. По мере развития протокола мы ожидаем, что другие блокчейн-сервисы примут аналогичные модели оплаты за использование, оптимизированные для потребления агентами.

Детали реализации для разработчиков

Создание клиента x402

Если вы создаёте приложение, использующее MERX x402 без MCP-сервера, вот минимальная реализация:

const TronWeb = require('tronweb');

async function buyEnergyX402(tronWeb, energyAmount, durationHours, targetAddress) {
  // Step 1: Get invoice
  const invoiceRes = await fetch('https://merx.exchange/api/v1/x402/invoice', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      energy_amount: energyAmount,
      duration_hours: durationHours,
      target_address: targetAddress
    })
  });
  const invoice = await invoiceRes.json();

  // Step 2: Build payment transaction
  const tx = await tronWeb.transactionBuilder.sendTrx(
    invoice.pay_to,
    invoice.amount_sun,
    tronWeb.defaultAddress.base58
  );

  const txWithMemo = await tronWeb.transactionBuilder.addUpdateData(
    tx, invoice.memo, 'utf8'
  );

  // Step 3: Sign and broadcast
  const signedTx = await tronWeb.trx.sign(txWithMemo);
  const result = await tronWeb.trx.sendRawTransaction(signedTx);

  // Step 4: Poll for order completion
  let order;
  for (let i = 0; i < 20; i++) {
    await new Promise(r => setTimeout(r, 3000));
    const orderRes = await fetch(
      `https://merx.exchange/api/v1/x402/order/${invoice.order_id}`
    );
    order = await orderRes.json();
    if (order.status === 'completed') break;
  }

  return order;
}

Обработка ошибок

Распространённые режимы отказа и их решения:

Data table
ОшибкаПричинаРешение
INVOICE_EXPIREDПлатёж не отправлен в течение 5 минутЗапросить новый счёт
AMOUNT_MISMATCHСумма платежа отличается от счётаОтправить точную сумму; запросить новый счёт, если цена изменилась
MEMO_NOT_FOUNDВ платёже отсутствует поле memoОтправить снова с правильным memo; средства из неудачной попытки не возвращаются автоматически
ALREADY_PAIDСчёт уже был исполненПроверить статус заказа; это не ошибка, если вы опрашиваете
PROVIDER_UNAVAILABLEНи один поставщик не может выполнить заказПовторить попытку через несколько минут; сумма платежа будет зачислена на баланс MERX для ручивого вывода

Политика возврата

Если MERX не может выполнить заказ после проверки платежа (например, все поставщики временно недоступны), сумма платежа зачисляется на затребуемый баланс, связанный с адресом TRON плательщика. Плательщик может затребовать этот баланс через отдельный endpoint без создания аккаунта — затребование проверяется подписанием сообщения тем же приватным ключом, который отправил исходный платёж.

Заключение

Код состояния HTTP 402 был определён почти 30 лет назад с видением нативных интернет-платежей. Это видение было впереди своего времени. Блокчейны, наконец, предоставляют инфраструктуру, чтобы сделать это реальностью.

MERX x402 превращает покупку энергии в один атомарный поток: запрос, оплата, получение. Никаких аккаунтов. Никаких API ключей. Никаких предположений о доверии, выходящих за рамки того, что предоставляет блокчейн.

Для AI-агентов это естественная модель покупки. Для разработчиков это самый простой путь интеграции. Для экосистемы это доказательство концепции того, как блокчейн-сервисы будут потребляться в экономике агентов.


Ссылки:

Попробуйте прямо сейчас с AI

Добавьте MERX в Claude Desktop или любой MCP-совместимый клиент — без установки, никакой API ключ не требуется для инструментов только для чтения:

{
  "mcpServers": {
    "merx": {
      "url": "https://merx.exchange/mcp/sse"
    }
  }
}

Спросите вашего AI-агента: "What is the cheapest TRON energy right now?" и получите живые цены от всех подключённых поставщиков.

Полная документация MCP: merx.exchange/docs/tools/mcp-server


All Articles