开发者 · 私有 OTC

用代码将一笔 USDC 存款限定给一个买方钱包。

私有 OTC 把一笔公开存款变成单一买方路线。当你的产品已经知道交易对手时,它正是合适的工具:工资发放式的付款、协商好的交易,或已知买方的结算。

01

创建一笔受限存款

  1. 1调用 offramp(walletClient, { amount, platform, currency, identifier, otcTaker })。
  2. 2SDK 先创建存款,再为 otcTaker 钱包附加一个白名单钩子。
  3. 3从结果中读取 otcLink,并将其发送给已批准的买方。
  4. 4除 otcTaker 外的任何钱包,在能够发起成交之前都会在链上被拒绝。
02

管理现有存款的限制

辅助函数作用
enableOtc(walletClient, depositId, taker)将一笔现有存款限定给一个买方钱包
disableOtc(walletClient, depositId)解除限制,让存款重新对公众开放
getOtcLink(depositId)为一笔受限存款构建可分享的买方链接
03

为什么需要不止一笔交易

EscrowV2 的 createDeposit 不接受白名单参数,因此 SDK 会在存款创建之后,用一笔后续交易附加该钩子。该限制由 Base 合约强制执行,而非由 UI 或链接强制,这就是为什么即便某个未获批准的钱包拿到了链接,也会在链上被拒绝。

链上强制执行

把守存款的是白名单钩子,而非链接。

OTC 链接只是便利。真正的保护是附加在 Base 存款上的预意图(pre-intent)钩子。

createDeposit 不接受白名单参数,因此该钩子在一笔后续交易中附加。

EscrowV20x777777779d229cdF3110e9de47943791c26300Ef存款与钩子附加
白名单钩子0xda023Ea0d789A41BcF5866F7B6BBd2CaDF9b79B8拦截未获批准的钱包
买方链接otc.usdctofiat.xyz/d/<escrow>/<depositId>一个买方,一个 URL

Common questions

我如何用代码把一笔存款设为私有?

创建存款时向 offramp() 传入 otcTaker,或对现有存款调用 enableOtc。SDK 会附加一个链上白名单钩子,使只有该买方钱包能成交,并返回一个可分享的 otcLink。

之后可以更换已批准的买方吗?

可以。用 disableOtc 解除限制,或用新的 taker 重新运行 enableOtc。每次更改都是一次链上更新,新买方必须使用由此生成的存款链接。

私有 OTC 能消除支付应用风险吗?

不能。它限制的是谁能成交该存款。法币环节仍通过所选支付应用进行,并受该应用的限额、审查与撤回机制约束。