Разработчикам

Продайте USDC одним вызовом функции.

Добавьте вывод, не становясь биржей. Один вызов SDK создаёт депозит в Base, делегирует ценообразование и возвращает идентификаторы, которые нужны вашему приложению. Добавьте Peerlytics позже, когда понадобятся выбор пути, контекст эксплорера, вебхуки или инфраструктура, управляемая агентами.

@usdctofiat/offramp v4.xMainnet BaseMIT · ESM + CJS
Off-ramp одним вызовомMainnet Base
import { useOfframp } from "@usdctofiat/offramp/react";
import { CURRENCIES, PLATFORMS } from "@usdctofiat/offramp";

function SellButton({ walletClient }) {
  const { offramp, isLoading } = useOfframp();

  return (
    <button
      disabled={isLoading}
      onClick={() =>
        offramp(walletClient, {
          amount: "100",
          platform: PLATFORMS.VENMO,
          currency: CURRENCIES.USD,
          identifier: "alice",
        })
      }
    >
      Sell 100 USDC
    </button>
  );
}
Создайте депозит и прочитайте результат
create-deposit.ts
import { CURRENCIES, PLATFORMS, offramp } from "@usdctofiat/offramp";

const result = await offramp(walletClient, {
  amount: "100",
  platform: PLATFORMS.REVOLUT,
  currency: CURRENCIES.EUR,
  identifier: "alice",
  integratorId: "your-app",
  referralId: "partner-123",
});

console.log(result.depositId, result.txHash, result.resumed);
OfframpResult
depositId
Escrow deposit ID. Reconcile and close against it.
txHash
Base transaction hash for the deposit creation.
resumed
true when an existing undelegated deposit was reused.
otcLink
Buyer link for private deposits; null when public.

Поверхность SDK

Держите код продукта близко к реальным действиям: создать, перечислить, закрыть, ограничить, наблюдать.

offramp()

Создайте или возобновите депозит на продажу USDC, делегируйте ценообразование и верните depositId + txHash.

deposits()

Перечислите депозиты для адреса, когда приложению нужна узкая сверка состояния владельца.

close()

Выведите неисполненный USDC из существующего депозита с помощью подписывающего кошелька.

Помощники OTC

Ограничьте ордер одним кошельком тейкера, сгенерируйте ссылку для обмена или снимите ограничение.

Хуки React

useOfframp() и usePeerExtensionRegistration() для фронтендов кошельковых приложений.

Типизированные карты

PLATFORMS, CURRENCIES, помощники валидации и коды OfframpError.

Сколько это стоит

Поверхность для разработчиков — это пакет, стартовые шаблоны и типизированный контракт SDK.

Пакет
$0

@usdctofiat/offramp — это TypeScript под лицензией MIT с точками входа core и React.

Создание депозита
Без ключа

Подпись кошелька создаёт депозит в Base. Ваше приложение платит только обычный газ Base.

Плоскость данных
Peerlytics

Планирование пути, чтение ордербука, контекст эксплорера, x402, кредиты API и вебхуки находятся там.

Производственный поток

Сначала постройте кратчайший путь, затем добавьте приватные ордера и наблюдаемость.

  1. 01Создайте делегированный депозит из кошелька пользователя или бота с помощью offramp().
  2. 02Используйте deposits() для сверки локального состояния после обновлений, повторных попыток или перезапусков бота.
  3. 03Передавайте otcTaker, когда покупатель известен и ордер не должен быть публично исполняемым.
  4. 04Добавьте @peerlytics/sdk, когда вам нужны планирование пути, публичные ссылки на исполнение, контекст эксплорера или вебхуки.

Вопросы разработчиков

Хранит ли SDK ключи?

Нет. SDK подписывает с помощью viem WalletClient, который вы передаёте: кошельком вашего пользователя, серверным кошельком или кошельком бота. Он никогда не хранит приватные ключи.

Перемещает ли SDK фиат?

Нет. Фиат перемещается напрямую между покупателем и продавцом в выбранном платёжном приложении. SDK обрабатывает только onchain USDC и жизненный цикл депозита.

Нужен ли мне API-ключ для создания депозитов?

Нет. Создание депозитов не требует разрешений, поскольку подписывает ваш кошелёк. API-ключ нужен только для регистрации webhooks и использования Peerlytics API.

Как протестировать интеграцию?

Публичной песочницы нет; SDK работает с мейннетом Base, поэтому тестовый депозит реален и обнаруживается в открытом ордербуке. Используйте минимум в 1 USDC и либо ограничьте его как OTC-депозит (передайте otcTaker, чтобы только ваш собственный кошелёк мог его закрыть), либо примите, что покупатель может взять его до того, как вы вызовете close(). Подтвердите его onchain и через deposits(), затем закройте через close().

Как верифицируются webhooks?

Каждая доставка несёт X-Usdctofiat-Signature: t=<unix>,v1=<hex>, HMAC-SHA256 по timestamp.rawBody. Эталонный верификатор в репозитории стартеров считает метки времени старше 5 минут устаревшими для защиты от повторного воспроизведения; вы задаёте это окно в собственном верификаторе, отправитель его не навязывает.