एक ही फ़ंक्शन कॉल में USDC बेचें।
एक्सचेंज बने बिना कैशआउट जोड़ें। एक SDK कॉल Base डिपॉज़िट बनाती है, मूल्य निर्धारण को डेलिगेट करती है, और आपके ऐप को आवश्यक पहचानकर्ता लौटाती है। जब आपको रास्ते का चुनाव, एक्सप्लोरर संदर्भ, webhook, या एजेंट-संचालित अवसंरचना की ज़रूरत हो, तब बाद में Peerlytics जोड़ें।
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>
);
}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 निकालें।
किसी ऑर्डर को एक taker वॉलेट तक सीमित करें, शेयर लिंक बनाएँ, या प्रतिबंध हटाएँ।
वॉलेट-ऐप फ़्रंटएंड के लिए useOfframp() और usePeerExtensionRegistration()।
PLATFORMS, CURRENCIES, सत्यापन हेल्पर, और OfframpError कोड।
बिल्ड पथ
डिपॉज़िट लाइफ़साइकल से शुरू करें, फिर ज़रूरत होने पर ही डेटा और संचालन जोड़ें।
इसकी लागत क्या है
डेवलपर सतह है पैकेज, स्टार्टर, और टाइप किया गया SDK कॉन्ट्रैक्ट।
@usdctofiat/offramp, core और React एंट्री पॉइंट के साथ MIT-लाइसेंस वाला TypeScript है।
एक वॉलेट सिग्नेचर Base डिपॉज़िट बनाता है। आपका ऐप केवल सामान्य Base गैस चुकाता है।
रूट प्लानिंग, orderbook रीड्स, एक्सप्लोरर संदर्भ, x402, API क्रेडिट और webhook वहीं रहते हैं।
प्रोडक्शन फ़्लो
पहले सबसे छोटा रास्ता बनाएँ, फिर निजी ऑर्डर और ऑब्ज़र्वेबिलिटी जोड़ें।
- 01offramp() के साथ उपयोगकर्ता वॉलेट या बॉट वॉलेट से एक डेलिगेटेड डिपॉज़िट बनाएँ।
- 02रिफ़्रेश, रीट्राई या बॉट रीस्टार्ट के बाद लोकल स्थिति का मिलान करने के लिए deposits() उपयोग करें।
- 03जब खरीदार ज्ञात हो और ऑर्डर सार्वजनिक रूप से फिल होने योग्य नहीं होना चाहिए, तब otcTaker पास करें।
- 04जब आपको रूट प्लानिंग, सार्वजनिक टेक लिंक, एक्सप्लोरर संदर्भ या webhook चाहिए, तब @peerlytics/sdk जोड़ें।
डेवलपर प्रश्न
क्या SDK keys कस्टडी में रखता है?
नहीं। SDK आपके द्वारा पास किए गए viem WalletClient से साइन करता है: आपके यूज़र का वॉलेट, एक सर्वर वॉलेट, या एक बॉट वॉलेट। यह कभी प्राइवेट keys नहीं रखता।
क्या SDK फिएट मूव करता है?
नहीं। फिएट सीधे बायर और सेलर के बीच चुने गए पेमेंट ऐप पर मूव होता है। SDK केवल onchain USDC और डिपॉज़िट लाइफ़साइकल को हैंडल करता है।
क्या डिपॉज़िट बनाने के लिए मुझे API key चाहिए?
नहीं। डिपॉज़िट बनाना permissionless है, क्योंकि आपका वॉलेट साइन करता है। API key केवल webhooks रजिस्टर करने और Peerlytics API इस्तेमाल करने के लिए चाहिए।
मैं इंटीग्रेशन कैसे टेस्ट करूँ?
कोई पब्लिक सैंडबॉक्स नहीं है; SDK Base मेननेट को टार्गेट करता है, इसलिए एक टेस्ट डिपॉज़िट असली है और ओपन ऑर्डरबुक पर खोजा जा सकता है। 1 USDC मिनिमम इस्तेमाल करें, और या तो उसे OTC डिपॉज़िट के रूप में सीमित करें (otcTaker पास करें ताकि केवल आपका अपना वॉलेट उसे फिल कर सके) या इसे स्वीकार करें कि close() कॉल करने से पहले कोई बायर उसे ले सकता है। उसे onchain और deposits() के ज़रिए कन्फ़र्म करें, फिर close() करें।
Webhooks कैसे वेरिफ़ाई किए जाते हैं?
हर डिलीवरी में X-Usdctofiat-Signature: t=<unix>,v1=<hex> होता है, जो timestamp.rawBody पर एक HMAC-SHA256 है। स्टार्टर्स रिपॉज़िटरी का रेफ़रेंस verifier 5 मिनट से पुराने timestamps को रीप्ले से बचाने के लिए बासी मानता है; वह विंडो आप अपने verifier में सेट करते हैं, sender उसे लागू नहीं करता।