示意图 · 05
角色与信任边界
谁能对参考代币做什么、与钩子之间的信任边界在哪里,以及每把密钥的推荐保管方式。权限绝不源自余额。
参与者及其能力
flowchart LR
subgraph GOV["治理多签 + 时间锁"]
ADMIN[DEFAULT_ADMIN_ROLE]
UPG[UPGRADER_ROLE]
HADM[HOOK_ADMIN_ROLE]
end
subgraph ENF["强制执行多签(合规 + 法务)"]
ENFR[ENFORCER_ROLE]
end
subgraph OPS["运营服务,最小权限"]
ISS[ISSUER_ROLE]
STA[STATUS_ROLE]
TRA[TRANSFORMER_ROLE]
PAU[PAUSER_ROLE]
end
T[(ARexToken)]
UPG -->|upgradeTo| T
HADM -->|registerHook / removeHook| T
ENFR -->|setFrozenTokens / forcedTransfer| T
ISS -->|createBatch| T
STA -->|setBatchStatus / setBatchMetadata| T
TRA -->|"transform(加工)"| T
PAU -->|pause / unpause| T
HOLD["持有人 / 获批准的操作方"] -->|"转移 · 销毁 · 重新分批"| T
T -->|check · onExecuted · canSend · canReceive| HOOKS["钩子"]
HOOKS -.->|"不能重入,不能移动余额"| T钩子的信任边界
| 钩子可以 | 钩子不可以 |
|---|---|
| 以代码拒绝一项操作 | 更改任何余额 |
| 观察已执行的操作 | 重新进入代币(锁) |
回答 canSend / canReceive | 在不重新注册的情况下更改其自身被缓存的标志 |
通过 IARexBatch(msg.sender) 读取批次 | 以 EOA 身份或在没有 ERC-165 支持的情况下被注册 |
针对恶意或失效钩子的缓解措施:HOOK_ADMIN_ROLE 将其移除(顺序保持不变);PAUSER_ROLE 暂停除强制转移之外的一切;对钩子变更设置时间锁,使其在生效之前即可见。