底层机制
架构概览
BNB Chain 上的八个可升级合约负责结算全部交易;链下服务负责签名价格、打包意图与提供只读数据。
链上合约#
shadowpaper 部署在 BNB Chain(BSC)。仓位、余额、赔付队列、SPAPER 铸造与质押等全部交易状态,均保存在八个可升级合约中,另为每个用户部署一个充值代理。
| 合约 | 作用 |
|---|---|
| Exchange | 仓位、余额、结算、赔付队列与费用 |
| PriceOracle | 为当前批次验证签名指数价 |
| BatchExecutor | 在一笔交易内执行一个区块的签名交易 |
| SessionKeyManager | 会话密钥的注册、撤销与 nonce |
| PaperTokenomics | 计算每笔亏损铸造的 SPAPER |
| PaperToken | SPAPER 代币(不可转让) |
| PaperStaking | SPAPER 质押与 USDT 分红 |
| DepositProxyFactory | 部署每个用户的 CREATE2 充值地址 |
平仓与清算的结算逻辑以外部库(SettleLib)链接。合约地址见「合约地址」。
治理#
所有合约经 TimelockController(时间锁,延迟 24 小时)管理,时间锁由 2-of-3 Safe 多签控制。每个代理各有一个 ProxyAdmin,其 owner 为时间锁。
guardian 角色由同一 Safe 持有,可即时暂停协议,但不能解除暂停、升级合约或修改参数;上述操作均须经时间锁执行。
链下服务#
| 服务 | 作用 |
|---|---|
| Relayer | 接收签名意图,执行准入规则,并逐块打包 |
| 价格签名者 | 在不持有任何资金的独立机器上签署 Binance USDⓈ-M 指数价 |
| Indexer | 提供公开只读 API |
| Keeper | 执行清算、队列支付、持仓上限调整、分红分发与充值归集 |
链下服务无法动用用户资金。其提交的每一项操作均由合约重新校验;清算、队列支付与充值归集均为公开函数,任何人都可以调用。
交易流程#
以下步骤以一笔交易(例如以 100 USDT 保证金开立的 100× BTC 多单)为例,说明从签名到结算的过程。
签名
交易者用会话密钥签署开仓意图,不支付 gas。
打包
Relayer 将意图加入下一个区块的批次,平仓排在开仓之前。
推价
批次交易首先为每个市场推入一条签名指数价,PriceOracle 验证签名与时间戳。
结算
Exchange 按该价格逐项独立结算,单项失败不会使整批回滚。
铸造与发布
亏损平仓与爆仓经 PaperTokenomics 铸造 SPAPER,Indexer 将结果发布到 API。
签名价与其结算的全部交易位于同一笔交易内,因此任何交易都不会按未经链上验证的价格结算。