简短的答案
不能:一个获批的 Hyperliquid 代理密钥不能从你的账户提币,也不能把你的 USDC 或者你的代币转到任何地方,因为交易所拒绝它这些动作是因为它的身份,不是因为金额。它可以下单和撤单,而它确实还能拿你的钱做一件别的事:把账户存入一个 Hyperliquid 金库。
下面的一切都是 2026 年 9 月 28 日在主网上的一次实测,用的是一个测试账户上一个真实的获批代理密钥。本站的智能体钱包页面载有同一份记录。
是怎么测的
一个约有 60 USDC 的测试账户批准了一个新建的代理密钥,为期一小时,就像 Locker Vault 在生产里做的那样。接着这个代理密钥签署了每一个会动用资金的动作,每一个都是 1,000 USDC,远超账户里的钱,所以什么都动不了,有意义的只有每一次拒绝的理由。
然后账户自己签署了同样的请求。凡是代理拿到的回答和账户不同的地方,它就是因为身份是代理而被拦住的。凡是两者拿到同样回答的地方,那个动作会以一个小金额再试一次,目标是一个仍然属于这个账户的去处。
Hyperliquid 回答了什么
| 由代理密钥签署的动作 | Hyperliquid 的回答 |
|---|---|
| 下一笔订单,然后撤掉它 | 接受 |
提币(withdraw3) | 拒绝 |
转出 USDC 或者一个代币(usdSend、spotSend、sendAsset) | 拒绝 |
在现货和永续合约之间划转(usdClassTransfer) | 拒绝 |
批准第二个代理(approveAgent) | 拒绝 |
批准一笔建单方费用(approveBuilderFee) | 拒绝 |
把账户存入一个金库(vaultTransfer) | 接受 |
每一次拒绝读起来都一样:Must deposit before performing actions,点名的是代理自己的地址。Hyperliquid 把这个动作套在了代理的地址上,而那里什么都没有,而不是套在批准它的那个账户上。同样的请求由账户自己签署时遇到的是余额错误,那是另一种回答。
那次被拒绝的 approveAgent 之后,账户的列表里没有出现第二个代理。建单方费用的批准也被拒绝了,这和文档一致:那个动作必须由用户的主钱包签署,不能由智能体钱包签署。
它签成了的那一个资金动作
vaultTransfer 不是套在签名者身上的:它是一个 L1 动作,而 Hyperliquid 把它挂在了批准这个密钥的那个账户上。要 1,000 USDC 时代理拿到的和账户一样是资金不足的回答,所以这次测试改成 5 USDC,目标是 HLP,Hyperliquid 自己的金库,一个仍然属于这个账户的去处。它过去了:账户的现货余额从 60.78 USDC 降到 55.78 USDC,而它的金库权益读出来是 5.0。
一个被窃的代理密钥不能把你的钱拿出去,但它可以把钱挪进一个别人在运行的金库,而那个运营者随后可以通过自己和自己对着交易把它亏掉。所以 一个代理密钥只能交易 这句话是错的。我们改掉了自己那些这么写过的页面,而这也正是为什么真正守得住的那条边界,是一个只放着你准备亏掉的钱的账户。
守护进程加上了什么
lpa 从不签署那个动作。它的守护进程签署的是一张封闭的交易动作清单:下单、改单、撤单,设置一个市场的杠杆和保证金模式,以及设置推荐码。vaultTransfer 不在这张清单上,所以你的、一个脚本的、或者一个 AI 助手的任何命令都造不出一个来。
充值、提币,以及在各个 dex 之间搬保证金,都由你的钱包签署:在离线手机上的 Locker Vault 里以二维码仪式签署,或者作为一个你在浏览器扩展或手机钱包里批准的请求。守护进程还会按这台电脑的额度和你的钱包签署的授权书核查每一次开仓,而且只回答带着它启动时写下的那个令牌的请求。
那是对 lpa 的一条边界,不是对密钥的。一个同时拿到封存密钥文件和你密码的窃贼不需要 lpa,而你电脑上的任何文件都挡不住他。
真正守得住的那条边界
不管电脑上发生什么,有三件事守得住:交易所拒绝那个密钥的每一次提币和每一次转出,这份批准会自行结束,而一个只给智能体用的账户里只有你放进去的那些钱。最后那一条是唯一不依赖软件的边界。
要把它结束掉:lpa mandate revoke 立刻停住每一次开仓,而且不需要钱包;lpa agent revoke 在交易所让这个密钥退役,需要你的钱包;lpa panic 停下每一个每日决策和每一次跟单,并把密钥从内存里拿掉。这三者都不会平掉一个仓位。