Authorizer 示例
如下是一个简单的 Authorizer 示例,实现的访问控制逻辑是:
在交易发生前,检查交易中转账的 ETH 要小于 1000
在交易完成后,检查交易发起者(也就是钱包地址)的 ETH 余额要大于 10000
其他开发建议
如果
BaseACL
可以满足您的开发需求,请直接使用BaseACL
。如果不能,请阅读接下来的建议。开发者只需实现
IAuthorizer
接口就能实现一个 Cobo Safe 框架可兼容的 Authorizer。但更推荐的方式是继承BaseAuthorizer
。BaseAuthorizer
内实现了一些常用的内部方法,并且进行了调用方的检查,更加安全。BaseAuthorizer
的caller
指调用Authorizer
的合约,通常为上级Authorizer
或者Cobo Account
。BaseAuthorizer
的owner
为可以修改Authorizer
配置的地址,通常为Cobo Account
对应的 wallet 地址。在 Argus 中,这个地址通常为 Gnosis Safe 钱包的地址。关于
Check
和Process
:在
preExecCheck
postExecCheck
中建议只进行数据检查,不进行数据更新(如 storage 的写入)。在
preExecProcess
postExecProcess
中建议只进行数据更新,不进行数据检查。4 个函数大多数时候不会都被使用到(大多数情况只使用
preExecCheck
),可以通过设置flag
来标识您开发的Authorizer
正常工作流程中需要的接口,减少整体权限检查流程的复杂度,从而节约 gas。preExecCheck
postExecCheck
中最好不要使用revert
来表示拒绝,推荐的方式是使用authData.result
返回值权限验证的结果。
Last updated