shadowpaper文档交易 ↗
打开 App交易 ↗
底层机制

充值:CREATE2 代理

每个钱包都有一个由 CREATE2 推导的固定充值地址,其唯一功能是把 USDT 转入 Exchange 并记入该钱包。

充值地址#

用户的充值地址由钱包地址经 CREATE2 计算得出,salt 为 keccak256(wallet)。该地址在合约部署前即可确定,且永不改变。充值页与公开 API 端点 deposit-address 均返回该地址。

代理合约#

充值代理是极简、不可升级的合约,仅存储所属钱包与 Exchange 地址两项数据,只支持两项操作:

  • 将全部 USDT 余额转入 Exchange,记入所属钱包;
  • 由所属钱包取回误转入该地址的非 USDT 代币。

归集#

Keeper 监听转入充值地址的 USDT。地址余额达到 10 USDT 时,Keeper 部署代理(仅首次充值)并归集余额。Exchange 在同一笔交易内记入用户的交易余额,并校验其 USDT 持仓仍足以覆盖全部账户。

部署与归集均为公开函数。Keeper 不可用时,用户或任何第三方均可直接调用。

示例#

Alice 的钱包对应一个充值地址,她分两次向该地址转入 USDT。

步骤地址余额规则结果
转入 6 USDT6 USDT低于 10 USDT 归集下限资金留在地址中
转入 94 USDT100 USDT达到 10 USDTKeeper 部署代理并归集
归集交易0 USDT同一笔交易内记账交易余额 +100 USDT
6 USDT < 10 USDT          → 不归集
6 + 94 = 100 USDT ≥ 10    → 归集 100 USDT,记账 100 USDT

← 公式过长时可横向滑动

低于下限的充值不会丢失,地址余额达到 10 USDT 后将与后续转账一并归集。

设计原因#

该设计无需代币授权、无两步充值、无待确认余额。直接转入 Exchange 合约的 USDT 不会记入任何账户,只能经 24 小时时间锁取回。

注意
请向应用中显示的充值地址转入 USDT(BEP-20),不要直接转入 Exchange 合约。
在 GitHub 上编辑此页 ↗更新于 2026-10-29