设置能够抵御提示注入的代理支出控制。
在仪表板中设置支出权限 - 每个周期的限额加上每笔交易的上限 - 后端在每次支付时强制执行它。因为它存在于后端,API 是只读的,所以劫持代理计划的提示注入仍然无法提高限制。您的代码通过 API 读取权限以显示或围绕它进行规划。
在您开始之前。
- 一个现有的代理(请参阅add-payments-to-agent guide)。
- 拥有代理的工作区的仪表板访问 - 权限在此设置,而不是通过 API。
- 预期每日支出的粗略想法 - 津贴应为正常使用的 2-3 倍,而不是 100 倍,因此它实际上是承载的。
- 读取权限的API密钥(
sk_test_密钥适用于本指南)。 - 熟悉代理支出政策概念 - 本指南是其操作对应。
在仪表板中设置权限。
在Blockchain0x仪表板中打开代理并设置两个数字:在一个周期内的津贴(一天、一周或30天)和每笔交易的上限。津贴限制了整个周期内的最坏情况;每笔交易的上限防止单个异常请求一次性花费所有。这是一个故意的仪表板操作 - 它是代理运行内部的人为设定的边界。
Amounts are USDC base units (6 decimals). An allowance_wei of "20000000" is 20 USDC; a per_tx_wei of "2000000" is 2 USDC. The period is a period_seconds value: 86400 for a day, 604800 for a week, 2592000 for 30 days.
通过 API 读取权限。
您的代码可以获取实时权限以在 UI 中显示,或让代理检查在尝试支付之前剩余多少空间。该路由是只读的 - 没有变更端点,这正是代理的密钥无法扩大其自身限制的原因。
curl https://api.blockchain0x.com/v1/agents/agt_123/spend-permissions \
-H "Authorization: Bearer $BLOCKCHAIN0X_API_KEY"{
"allowance_wei": "20000000",
"per_tx_wei": "2000000",
"period_seconds": 86400,
"start_at": "2026-05-15T00:00:00Z",
"end_at": null,
"revoked_at": null
}在时间上绑定,或撤销它。
两个字段将权限变为时间限制的控制。start_at 和 end_at 设置其生效的窗口,因此您可以为计划作业预先设置预算或让其自行过期;在窗口外不授权任何内容。revoked_at 是杀开关:从仪表板撤销后,任何后续评估的付款的津贴降至零。
为了更严格的停止,使用 apiKeys.revoke 或 apiKeys.rotate 撤销或旋转代理的 API 密钥 - 这会完全切断凭证,而不仅仅是支出。权限撤销是外科手术;密钥撤销是杀死开关。
处理达到上限的支付。
当支付超过活动权限时,后端在任何操作触及链之前拒绝它 - 没有资金移动。您的 payments.create 调用返回错误;像处理其他失败调用一样处理它,向您的操作员展示,并且不要盲目重试同样的操作。
要查看代理尝试了什么,请查看仪表板的活动日志,并使用 transactions.get 进行实际移动的对账。一系列被拒绝的尝试是您的早期警告信号:要么是配置错误的津贴,要么是失控的循环,或者是注入探测。以您对任何失败调用激增的警报方式进行警报。
五个击败控制的错误。
将支出上限放在代理代码中而不是后端
代理的计划者或系统提示中的支出规则不是安全边界。覆盖计划者的提示注入攻击也会覆盖上限。支出权限的整个意义在于它存在于代理可操作范围之外 - 在后端,在仪表板中设置 - 因此代理无法更改它。在那里进行配置,而不是使用“告诉代理不要花费超过 $X”。
期待代理的 API 密钥扩大限制
API 对支出权限是只读的:没有端点,也没有 SDK 方法可以提高限额。这是故意的。如果一个被攻击或注入的代理能够使用它已经持有的密钥调用一个变更端点,那么控制将毫无价值。要更改限制,您需要使用仪表板,在那里更改是带有审计跟踪的人为操作。
设置一个如此高的限额,以至于它从未咬过
权限仅在承载时保护您。将津贴设置为正常使用的 100 倍不会停止失控循环,直到它已经支出远超过您希望的金额。将津贴和每笔交易的上限设置为大约 2-3 倍的预期使用量,然后在实际流量证明您需要时故意扩大。
忘记每笔交易上限
allowance_wei 限制整个期间的最坏情况;per_tx_wei 限制任何单一支付。它们的工作不同。慷慨的期间津贴没有每笔交易上限,仍然允许一个异常请求 - 一个有缺陷的重试,一个恶意报价 - 在一次操作中移动大量资金。设置两者。
没有快速关闭开关的排练
当凌晨 2 点出现问题时,您希望采取您已经练习过的措施。有两种方法:在仪表板中撤销权限(设置 revoked_at,将津贴设置为零),或使用 apiKeys.revoke / apiKeys.rotate 撤销/轮换代理的 API 密钥(完全切断凭证)。知道您要使用哪一个,并且可以快速执行。
在权限到位之后。
在权限得到执行后,最有价值的后续工作是可靠的 webhook 处理(以便支付事件实际到达您的处理程序)、身份验证(以便对方信任代理的资料)和预发布安全审查(以便您没有留下其他漏洞)。
完整参考见docs.blockchain0x.com。产品表面:支出控制。