开发者

一次函数调用即可出售 USDC。

无需成为交易所即可加入提现功能。一次 SDK 调用即可在 Base 上创建存款、委托定价,并返回你的应用所需的标识符。当你需要路径选择、浏览器上下文、webhook 或由 agent 运营的基础设施时,再加入 Peerlytics。

@usdctofiat/offramp v4.xBase 主网MIT · ESM + CJS
一次调用的出金通道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>
  );
}
创建一笔存款并读取结果
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.

SDK 接口面

让产品代码贴近真实操作:创建、列出、关闭、限制、观察。

offramp()

创建或恢复一笔出售 USDC 的存款、委托定价,并返回 depositId + txHash。

deposits()

当应用需要进行小范围的所有者状态对账时,列出某个地址的存款。

close()

使用签名钱包从现有存款中提取未成交的 USDC。

OTC 辅助方法

将订单限定给单个 taker 钱包、生成分享链接,或移除限制。

React hooks

面向钱包应用前端的 useOfframp() 和 usePeerExtensionRegistration()。

类型化映射

PLATFORMS、CURRENCIES、校验辅助方法以及 OfframpError 代码。

成本几何

开发者接口面就是软件包、起步模板和类型化的 SDK 契约。

软件包
$0

@usdctofiat/offramp 是采用 MIT 许可的 TypeScript,提供 core 和 React 两个入口点。

创建存款
无需密钥

一次钱包签名即可在 Base 上创建存款。你的应用只需支付正常的 Base gas。

数据平面
Peerlytics

路径规划、orderbook 读取、浏览器上下文、x402、API 额度和 webhook 都位于此处。

生产流程

先构建最短路径,再加入私有订单和可观测性。

  1. 01使用 offramp() 从用户钱包或机器人钱包创建一笔委托存款。
  2. 02在刷新、重试或机器人重启后,使用 deposits() 对本地状态进行对账。
  3. 03当买家已知且订单不应公开可成交时,传入 otcTaker。
  4. 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 分钟的时间戳视为过期,以防范重放;该窗口由你在自己的验证方中设定,发送方不强制执行。