Продайте USDC одним вызовом функции.
Добавьте вывод, не становясь биржей. Один вызов SDK создаёт депозит в Base, делегирует ценообразование и возвращает идентификаторы, которые нужны вашему приложению. Добавьте Peerlytics позже, когда понадобятся выбор пути, контекст эксплорера, вебхуки или инфраструктура, управляемая агентами.
Mainnet Baseimport { 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>
);
}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);- 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 из существующего депозита с помощью подписывающего кошелька.
Ограничьте ордер одним кошельком тейкера, сгенерируйте ссылку для обмена или снимите ограничение.
useOfframp() и usePeerExtensionRegistration() для фронтендов кошельковых приложений.
PLATFORMS, CURRENCIES, помощники валидации и коды OfframpError.
Пути разработки
Начните с жизненного цикла депозита, затем добавляйте данные и операции только при необходимости.
Сколько это стоит
Поверхность для разработчиков — это пакет, стартовые шаблоны и типизированный контракт SDK.
@usdctofiat/offramp — это TypeScript под лицензией MIT с точками входа core и React.
Подпись кошелька создаёт депозит в Base. Ваше приложение платит только обычный газ Base.
Планирование пути, чтение ордербука, контекст эксплорера, x402, кредиты API и вебхуки находятся там.
Производственный поток
Сначала постройте кратчайший путь, затем добавьте приватные ордера и наблюдаемость.
- 01Создайте делегированный депозит из кошелька пользователя или бота с помощью offramp().
- 02Используйте deposits() для сверки локального состояния после обновлений, повторных попыток или перезапусков бота.
- 03Передавайте otcTaker, когда покупатель известен и ордер не должен быть публично исполняемым.
- 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 минут устаревшими для защиты от повторного воспроизведения; вы задаёте это окно в собственном верификаторе, отправитель его не навязывает.