Desarrolladores

Vende USDC con una sola llamada de función.

Añade retiros sin convertirte en un exchange. Una sola llamada del SDK crea el depósito en Base, delega la fijación de precios y devuelve los identificadores que tu app necesita. Añade Peerlytics más adelante cuando necesites elección de vía, contexto del explorador, webhooks o infraestructura operada por agentes.

@usdctofiat/offramp v4.xMainnet de BaseMIT · ESM + CJS
Off-ramp de una sola llamadaMainnet de 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>
  );
}
Crea un depósito y lee el resultado
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.

Superficie del SDK

Mantén el código del producto cerca de las acciones reales: crear, listar, cerrar, restringir, observar.

offramp()

Crea o reanuda un depósito de venta de USDC, delega la fijación de precios y devuelve depositId + txHash.

deposits()

Lista los depósitos de una dirección cuando la app necesite una reconciliación acotada del estado del propietario.

close()

Retira el USDC no ejecutado de un depósito existente con la billetera firmante.

Ayudantes OTC

Restringe una orden a una sola billetera taker, genera un enlace para compartir o elimina la restricción.

Hooks de React

useOfframp() y usePeerExtensionRegistration() para frontends de apps de billetera.

Mapas tipados

PLATFORMS, CURRENCIES, ayudantes de validación y códigos OfframpError.

Cuánto cuesta

La superficie para desarrolladores es el paquete, las plantillas iniciales y el contrato tipado del SDK.

Paquete
$0

@usdctofiat/offramp es TypeScript con licencia MIT, con puntos de entrada para core y React.

Creación de depósito
Sin clave

Una firma de billetera crea el depósito en Base. Tu app solo paga el gas normal de Base.

Plano de datos
Peerlytics

La planificación de vías, las lecturas del orderbook, el contexto del explorador, x402, los créditos de API y los webhooks viven ahí.

Flujo de producción

Construye primero la ruta más corta y luego añade órdenes privadas y observabilidad.

  1. 01Crea un depósito delegado desde la billetera del usuario o del bot con offramp().
  2. 02Usa deposits() para reconciliar el estado local tras refrescos, reintentos o reinicios del bot.
  3. 03Pasa otcTaker cuando el comprador es conocido y la orden no debe ser ejecutable públicamente.
  4. 04Añade @peerlytics/sdk cuando necesites planificación de vías, enlaces públicos de toma, contexto del explorador o webhooks.

Preguntas de desarrolladores

¿El SDK custodia claves?

No. El SDK firma con el WalletClient de viem que le pasas: la wallet de tu usuario, una wallet de servidor o una wallet de bot. Nunca guarda claves privadas.

¿El SDK mueve fiat?

No. El fiat se mueve directamente entre el comprador y el vendedor en la app de pago elegida. El SDK solo gestiona el USDC onchain y el ciclo de vida del depósito.

¿Necesito una clave de API para crear depósitos?

No. Crear depósitos no requiere permisos, ya que tu wallet firma. Solo se necesita una clave de API para registrar webhooks y usar la API de Peerlytics.

¿Cómo pruebo una integración?

No hay sandbox público; el SDK apunta a la mainnet de Base, así que un depósito de prueba es real y visible en el orderbook abierto. Usa el mínimo de 1 USDC y, o bien restríngelo como depósito OTC (pasa otcTaker para que solo tu propia wallet pueda completarlo), o acepta que un comprador podría tomarlo antes de que llames a close(). Confírmalo onchain y mediante deposits(), y luego ciérralo con close().

¿Cómo se verifican los webhooks?

Cada entrega lleva X-Usdctofiat-Signature: t=<unix>,v1=<hex>, un HMAC-SHA256 sobre timestamp.rawBody. El verificador de referencia en el repo de starters trata como caducadas las marcas de tiempo de más de 5 minutos para protegerse de repeticiones; esa ventana la fijas tú en tu propio verificador, el emisor no la impone.