Développeurs

Vendez des USDC en un seul appel de fonction.

Ajoutez l'encaissement sans devenir un exchange. Un seul appel du SDK crée le dépôt sur Base, délègue la tarification et renvoie les identifiants dont votre appli a besoin. Ajoutez Peerlytics plus tard, quand vous aurez besoin du choix de voie, du contexte de l'explorateur, de webhooks ou d'une infrastructure pilotée par des agents.

@usdctofiat/offramp v4.xMainnet BaseMIT · ESM + CJS
Rampe de sortie en un appelMainnet 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>
  );
}
Créez un dépôt et lisez le résultat
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.

Surface du SDK

Gardez le code produit au plus près des actions réelles : créer, lister, clôturer, restreindre, observer.

offramp()

Créez ou reprenez un dépôt de vente d'USDC, déléguez la tarification et renvoyez depositId + txHash.

deposits()

Listez les dépôts d'une adresse quand l'appli a besoin d'une réconciliation restreinte de l'état du propriétaire.

close()

Retirez les USDC non exécutés d'un dépôt existant avec le portefeuille signataire.

Assistants OTC

Restreignez un ordre à un seul portefeuille taker, générez un lien de partage ou supprimez la restriction.

Hooks React

useOfframp() et usePeerExtensionRegistration() pour les frontends d'applis de portefeuille.

Maps typées

PLATFORMS, CURRENCIES, assistants de validation et codes OfframpError.

Ce que ça coûte

La surface développeur, c'est le paquet, les modèles de départ et le contrat typé du SDK.

Paquet
$0

@usdctofiat/offramp est du TypeScript sous licence MIT, avec des points d'entrée core et React.

Création de dépôt
Sans clé

Une signature de portefeuille crée le dépôt sur Base. Votre appli ne paie que le gas normal de Base.

Plan de données
Peerlytics

La planification de voie, les lectures de l'orderbook, le contexte de l'explorateur, x402, les crédits d'API et les webhooks y résident.

Flux de production

Construisez d'abord le chemin le plus court, puis ajoutez les ordres privés et l'observabilité.

  1. 01Créez un dépôt délégué depuis le portefeuille de l'utilisateur ou du bot avec offramp().
  2. 02Utilisez deposits() pour réconcilier l'état local après des rafraîchissements, des relances ou des redémarrages du bot.
  3. 03Passez otcTaker quand l'acheteur est connu et que l'ordre ne doit pas être exécutable publiquement.
  4. 04Ajoutez @peerlytics/sdk quand vous avez besoin de planification de voie, de liens publics d'exécution, du contexte de l'explorateur ou de webhooks.

Questions des développeurs

Le SDK détient-il les clés ?

Non. Le SDK signe avec le WalletClient viem que vous passez : le wallet de votre utilisateur, un wallet serveur ou un wallet de bot. Il ne détient jamais de clés privées.

Le SDK déplace-t-il du fiat ?

Non. Le fiat circule directement entre l'acheteur et le vendeur sur l'application de paiement choisie. Le SDK ne gère que l'USDC onchain et le cycle de vie du dépôt.

Ai-je besoin d'une clé d'API pour créer des dépôts ?

Non. La création de dépôts est sans permission, puisque votre wallet signe. Une clé d'API n'est nécessaire que pour enregistrer des webhooks et utiliser l'API Peerlytics.

Comment tester une intégration ?

Il n'y a pas de sandbox public ; le SDK cible le mainnet Base, donc un dépôt de test est réel et trouvable sur l'orderbook ouvert. Utilisez le minimum de 1 USDC, et soit restreignez-le en dépôt OTC (passez otcTaker pour que seul votre propre wallet puisse le remplir), soit acceptez qu'un acheteur puisse le prendre avant que vous n'appeliez close(). Confirmez-le onchain et via deposits(), puis appelez close().

Comment les webhooks sont-ils vérifiés ?

Chaque livraison porte X-Usdctofiat-Signature: t=<unix>,v1=<hex>, un HMAC-SHA256 sur timestamp.rawBody. Le vérificateur de référence dans le dépôt des starters traite les timestamps de plus de 5 minutes comme périmés pour se prémunir des replays ; vous définissez cette fenêtre dans votre propre vérificateur, l'émetteur ne l'impose pas.