安全说明
写给要把钱包连到 PaperHedge 的人:我们到底拿到了什么权限、拿不到什么、存了什么、怎么收回、怎么自己验证。
1. 连接钱包时发生了什么
两次签名,都不是交易、不花 gas:
- 登录签名:签一条明文消息(内容就是"PaperHedge 登录 + 你的地址 + 一个随机数")。只用来证明你是这个地址的主人,签完我们发你一个 7 天有效的登录凭证。不授权任何东西。
- 授权签名:签 Papertrade 的
RegisterSessionKey(EIP-712 结构化数据,钱包里能看清每个字段)。意思是:允许地址 X(我们服务器生成的一把密钥)在你的 Papertrade 账户里开仓、平仓,有效期到 Y。这是 Papertrade 自己的机制,官网前端每个用户也是这样授权的。
你的钱包私钥、助记词从头到尾不经过我们。网页没有任何地方让你输它们。
2. 这把交易密钥能做什么、不能做什么
| 动作 | 密钥能不能 | 谁能 |
|---|---|---|
| 开仓 / 平仓 | 能 | 密钥(这就是它存在的目的) |
| 提现 | 不能 | 只有你的钱包签 WithdrawToCore |
| 把 USDC 转给别人 | 不能 | Papertrade 根本没有这种操作 |
| 质押 / 解押 / 领分红 | 不能 | 只有你的钱包签 PaperStaking 的意图(我们网页上的按钮也是每次让你钱包签) |
| 动你钱包里的其它资产 | 不能 | 密钥只在 Papertrade 的 Exchange 合约里有意义 |
| 到期后做任何事 | 不能 | 最长 7 天,你选 |
这不是我们说了算,是 Papertrade 合约和 relayer 的规则:withdrawToCore、paperStake、paperClaim 必须由钱包本人签,密钥签的会被拒。协议文档见 docs.papertrade.xyz。
3. 最坏情况
假设我们的服务器被攻破、密钥被人拿走:攻击者能在你账户里乱开仓,把保证金亏掉(和你自己乱开仓一样),但拿不走一分钱——提不了现、转不了账。所以只放你愿意烧掉的钱,这本来就是挖 PAPER 的前提。
密钥在服务器上用 AES-256-GCM 加密存储,密钥的密钥在环境变量里,不在数据库里。
4. 我们存什么
- 你的钱包地址、授权的交易密钥(加密)、有效期
- 策略参数、预算、每轮记录(成本、铸了多少 PAPER)、运行日志
- 服务费账户:你预付的交易哈希、余额、每轮结算
不存:钱包私钥、助记词、邮箱、IP 以外的任何身份信息。
5. 怎么撤销
- 停止策略:首页"停止"按钮,可选这轮平完再停或立刻全平。
- 撤销密钥:在 Papertrade 网站的设置里 revoke 这把 session key,或者直接在链上调 Exchange 合约的
revokeSessionKey。撤了之后我们什么都做不了。 - 不管它:到期自动失效。
6. 钱的流向
- 你的 USDC 一直在 Papertrade 的合约里,不在我们这。
- 服务费是你钱包直接转 USDC 到公示地址(首页"预付"时钱包会显示收款地址),链上可查,我们按交易哈希记账。
- 现在不收服务费。以后如果收,会提前说,而且只收策略净已实现亏损的一小部分。
7. 自己验证
- 看代码:github.com/borispie/paperhedge。服务器跑的就是这份,交易逻辑在
server/farmer.mjs,签名流程在server/api.mjs。 - 看签名:授权时钱包弹出的 EIP-712 内容里,
user是你、key是那把密钥、expiry是到期时间、feeAddress是 0x0。没有别的字段。 - 看链上:Papertrade 网站的 Settings 能看到你账户下注册了哪些 session key 和到期时间。
- 自己跑:README 有本地跑法,把代码放自己电脑上跑也行,不用经过我们。
8. 我们不是什么
这是我一个人做的(X:@siyiluo2),和 Papertrade 没有任何关系,不是官方工具。本站只提供托管执行,不构成投资建议。Papertrade 的规则随时可能改,PAPER 现在不能转账,它值多少钱没人能保证。