Skip to main contentA-REX Core

示意图 · 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 暂停除强制转移之外的一切;对钩子变更设置时间锁,使其在生效之前即可见。