Sviluppatori

Vendi USDC in una sola chiamata di funzione.

Aggiungi l'incasso senza diventare un exchange. Una sola chiamata SDK crea il deposito su Base, delega la determinazione del prezzo e restituisce gli identificativi che la tua app richiede. Aggiungi Peerlytics in seguito, quando ti servono scelta del percorso, contesto dell'explorer, webhook o infrastruttura gestita da agenti.

@usdctofiat/offramp v4.xMainnet di BaseMIT · ESM + CJS
Off-ramp con una sola chiamataMainnet di 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 deposito e leggi il risultato
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 dell'SDK

Tieni il codice del prodotto vicino alle azioni reali: creare, elencare, chiudere, limitare, osservare.

offramp()

Crea o riprendi un deposito di vendita di USDC, delega la determinazione del prezzo e restituisce depositId + txHash.

deposits()

Elenca i depositi di un indirizzo quando l'app necessita di una riconciliazione mirata dello stato del proprietario.

close()

Preleva l'USDC non eseguito da un deposito esistente con il wallet firmatario.

Helper OTC

Limita un ordine a un solo wallet taker, genera un link da condividere o rimuovi la restrizione.

Hook React

useOfframp() e usePeerExtensionRegistration() per i frontend delle app di wallet.

Mappe tipizzate

PLATFORMS, CURRENCIES, helper di validazione e codici OfframpError.

Quanto costa

La superficie per sviluppatori è il pacchetto, i template iniziali e il contratto tipizzato dell'SDK.

Pacchetto
$0

@usdctofiat/offramp è TypeScript con licenza MIT, con entry point core e React.

Creazione del deposito
Nessuna chiave

Una firma del wallet crea il deposito su Base. La tua app paga solo il normale gas di Base.

Piano dati
Peerlytics

Pianificazione del percorso, letture dell'orderbook, contesto dell'explorer, x402, crediti API e webhook risiedono lì.

Flusso di produzione

Costruisci prima il percorso più breve, poi aggiungi ordini privati e osservabilità.

  1. 01Crea un deposito delegato dal wallet dell'utente o del bot con offramp().
  2. 02Usa deposits() per riconciliare lo stato locale dopo aggiornamenti, retry o riavvii del bot.
  3. 03Passa otcTaker quando l'acquirente è noto e l'ordine non deve essere eseguibile pubblicamente.
  4. 04Aggiungi @peerlytics/sdk quando ti servono pianificazione del percorso, link pubblici di esecuzione, contesto dell'explorer o webhook.

Domande degli sviluppatori

L'SDK custodisce le chiavi?

No. L'SDK firma con il WalletClient di viem che gli passi: il wallet del tuo utente, un server wallet o un bot wallet. Non detiene mai chiavi private.

L'SDK movimenta fiat?

No. Il fiat si muove direttamente tra acquirente e venditore sull'app di pagamento scelta. L'SDK gestisce solo gli USDC onchain e il ciclo di vita del deposito.

Mi serve una chiave API per creare depositi?

No. La creazione dei depositi è permissionless, dato che firma il tuo wallet. Una chiave API serve solo per registrare i webhook e per usare l'API Peerlytics.

Come si testa un'integrazione?

Non esiste una sandbox pubblica; l'SDK opera sulla mainnet di Base, quindi un deposito di prova è reale e individuabile sull'orderbook aperto. Usa il minimo di 1 USDC e o limitalo come deposito OTC (passa otcTaker così solo il tuo wallet può eseguirlo) oppure accetta che un acquirente possa eseguirlo prima che tu chiami close(). Confermalo onchain e tramite deposits(), poi esegui close().

Come si verificano i webhook?

Ogni consegna porta X-Usdctofiat-Signature: t=<unix>,v1=<hex>, un HMAC-SHA256 su timestamp.rawBody. Il verificatore di riferimento nel repository degli starter considera obsoleti i timestamp più vecchi di 5 minuti per difendersi dai replay; imposti quella finestra nel tuo verificatore, il mittente non la impone.