撤销代理时的资源回收
撤销资源代理时,网络会按比例结算接收方尚未恢复的资源,避免已消耗资源继续占用被撤回的质押份额。
前置阅读
资源代理把代理方的质押份额临时分配给接收方。接收方使用这些资源后,已消耗部分会在 24 小时滚动窗口内恢复。如果代理方在恢复完成前撤销代理,网络不能只把 TRX 质押份额移回代理方,还必须同步结算接收方尚未恢复的资源。
结算规则很直接:撤销多少质押份额,就按相同比例从接收方尚未恢复的资源中回收多少,并把这部分未恢复资源计入代理方。
为什么需要回收
带宽和能量的额度由质押份额决定。接收方的资源额度可能来自两部分:
- 自己质押获得的资源。
- 其他账户代理来的资源。
在资源计算中,这两部分会合并成接收方的总资源份额。接收方消耗资源后,未恢复资源也基于这个总份额计算。
如果代理方撤回一部分资源,而接收方已经消耗了这部分额度对应的资源,网络需要把相应未恢复资源同步转回代理方。否则接收方会在质押份额减少后继续占用原来代理份额对应的恢复空间。
计算公式
回收的未恢复资源
= 撤销代理的 TRX 数量 / 接收方该资源的总质押 TRX 数量
× 接收方尚未恢复的资源数量公式中的“总质押 TRX 数量”指接收方用于获取该资源的综合质押份额,包括自质押和接收的资源代理。资源类型可以是带宽,也可以是能量。
回收结果还有一个上限:不能超过本次撤销的 TRX 份额在当前全网资源分配比例下对应的最大资源容量。
字段含义
- 撤销代理的 TRX 数量:本次
UnDelegateResourceContract要收回的代理份额。 - 接收方该资源的总质押 TRX 数量:接收方当前用于获取带宽或能量的总质押份额,包含自质押和外部代理。
- 接收方尚未恢复的资源数量:接收方已经消耗、仍处于 24 小时恢复窗口内的带宽或能量。
相关数据可通过 wallet/getaccount 和 wallet/getaccountresource 查询。
账户状态变化
撤销代理后,资源相关状态按以下逻辑变化:
代理方:
资源质押份额 = 原资源质押份额 + 撤销代理的 TRX 数量
尚未恢复资源 = 原尚未恢复资源 + 回收的未恢复资源接收方:
资源质押份额 = 原资源质押份额 - 撤销代理的 TRX 数量
尚未恢复资源 = 原尚未恢复资源 - 回收的未恢复资源这里的“资源质押份额”是用于说明结算逻辑的综合值,并不一定对应单一 API 字段。
恢复窗口带宽和能量按 24 小时滚动窗口线性恢复。账户继续消耗资源、接收新的代理、撤销代理或被回收未恢复资源时,节点会把已有恢复进度与新的资源状态合并计算。
示例
假设当前资源换算比例为 1 TRX 质押份额对应 0.2 Energy。用户 X 向用户 Y 代理了 200 TRX 对应的能量份额。撤销前状态如下:
| 账户 | 角色 | 能量质押份额 | 总 Energy | 尚未恢复 Energy |
|---|---|---|---|---|
| X | 代理方 | 1,000 TRX | 200 Energy | 75 Energy |
| Y | 接收方 | 500 TRX | 100 Energy | 50 Energy |
X 撤销对 Y 的 200 TRX 能量代理时:
回收的未恢复 Energy = (200 / 500) × 50 = 20 Energy撤销后:
| 账户 | 角色 | 能量质押份额 | 总 Energy | 尚未恢复 Energy |
|---|---|---|---|---|
| X | 代理方 | 1,200 TRX | 240 Energy | 95 Energy |
| Y | 接收方 | 300 TRX | 60 Energy | 30 Energy |
Y 的总能量从 100 Energy 降到 60 Energy,尚未恢复 Energy 从 50 降到 30。X 收回质押份额后,总能量从 200 Energy 升到 240 Energy,同时承接 20 Energy 的未恢复状态。
相关资源
- 资源代理 — 代理和撤销资源代理操作
- 资源模型 — 带宽、能量和资源恢复机制
- 带宽与能量 — 资源获取和恢复周期
- HTTP API — undelegateresource
- HTTP API — getaccount
- HTTP API — getaccountresource
Updated 26 days ago