一次函数调用即可出售 USDC。
无需成为交易所即可加入提现功能。一次 SDK 调用即可在 Base 上创建存款、委托定价,并返回你的应用所需的标识符。当你需要路径选择、浏览器上下文、webhook 或由 agent 运营的基础设施时,再加入 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 是采用 MIT 许可的 TypeScript,提供 core 和 React 两个入口点。
一次钱包签名即可在 Base 上创建存款。你的应用只需支付正常的 Base gas。
路径规划、orderbook 读取、浏览器上下文、x402、API 额度和 webhook 都位于此处。
生产流程
先构建最短路径,再加入私有订单和可观测性。
- 01使用 offramp() 从用户钱包或机器人钱包创建一笔委托存款。
- 02在刷新、重试或机器人重启后,使用 deposits() 对本地状态进行对账。
- 03当买家已知且订单不应公开可成交时,传入 otcTaker。
- 04当你需要路径规划、公开成交链接、浏览器上下文或 webhook 时,加入 @peerlytics/sdk。
开发者问题
SDK 会托管私钥吗?
不会。SDK 使用你传入的 viem WalletClient 签名:你用户的钱包、一个服务器钱包或一个机器人钱包。它从不持有私钥。
SDK 会转移法币吗?
不会。法币在所选支付应用中直接在买卖双方之间流转。SDK 只处理链上的 USDC 和存款生命周期。
创建存款需要 API 密钥吗?
不需要。创建存款无需许可,因为由你的钱包签名。只有在注册 webhooks 和使用 Peerlytics API 时才需要 API 密钥。
我该如何测试集成?
没有公开的沙盒;SDK 面向 Base 主网,因此测试存款是真实的、可在公开 orderbook 上被发现的。使用 1 USDC 的最小金额,并将其限定为 OTC 存款(传入 otcTaker,使只有你自己的钱包能成交),或者接受买家可能在你调用 close() 之前成交的风险。先在链上以及通过 deposits() 确认它,然后再 close() 掉它。
Webhooks 是如何验证的?
每次投递都带有 X-Usdctofiat-Signature: t=<unix>,v1=<hex>,即对 timestamp.rawBody 的 HMAC-SHA256。starters 仓库中的参考验证方会将早于 5 分钟的时间戳视为过期,以防范重放;该窗口由你在自己的验证方中设定,发送方不强制执行。