Cobo Argus
(CN)
(CN)
  • 公告
    • Cobo Argus V2 正式上线
  • Cobo Argus 产品手册
    • 账户与组织
      • 注册
        • Web3 注册
        • 邮箱注册
      • 创建 Organization
        • 邀请 Member
        • 加入 Organization
      • 管理账户
        • 登录
        • 添加登录地址
        • 绑定邮箱
        • 管理双重身份验证
        • 钱包设置
          • 更改钱包名称
          • 添加 Safe Owner(s)
          • 更改多签阈值
    • Safe{Wallet} 与 Cobo Safe
      • 创建 Safe{Wallet}
      • 导入 Safe{Wallet} 至 Cobo Argus
      • 创建 Cobo Safe
      • 添加地址
        • 团队成员添加地址
    • 自定义访问控制
      • 预授权策略
        • 策略市场(Farming)
        • 交易市场(Trading)
        • 授权流程
          • 修改授权
          • 移除授权
      • Member 与 DeFi 协议交互
        • 查看被授权的角色
        • 与 DeFi 协议单签交互
      • 自定义 DeFi 权限
        • 功能入口
        • 创建 Safe Role 并设置权限
        • 授权 Role 给成员地址
        • 发起多签交易
    • DeFi 机器人
      • 策略机器人
        • 自动收菜机器人
        • 自动撤退机器人
      • 自定义机器人
      • Webhook
        • 如何在 Cobo Argus 配置 Webhook
        • 如何连接 Argus 和 Chainbot Webhook
        • 设置 Webhook 监控合约升级事件
    • 交易管理
      • Safe Owner(s) 签名确认
    • Token Approval 管理
      • Token Approval 入口
      • 取消授权
      • 批量取消授权
      • 更新授权
    • 更新日志
  • 基础使用教程
    • Curve-Convex 策略授权和机器人教程
    • EQB 自动收菜机器人教程
    • BendDAO 自动收菜和自动撤退机器人教程
    • 使用 Argus 监控稳定币价格并在脱锚时自动撤退或兑换
    • Cobo Argus 连接 Rabby Wallet 使用教程
    • 导入 Mantle Network 教程
    • 如何使用 Cobo Argus 调整保证金比例和抵押率
    • Cobo Argus 收菜机器人自动领取 Pendle 挖矿收益!
  • Cobo Safe 技术文档
    • Cobo Account
      • Cobo Safe Account
      • Cobo Smart Account
      • 发起交易
    • Role Manager
    • Authorizer
      • Authorizer 示例
      • BaseACL
      • 其他 Authorizer
      • Hint
    • Argus 的集成
    • 审计报告与开源代码
    • 部署地址
Powered by GitBook
On this page
  1. Cobo Safe 技术文档
  2. Authorizer

Authorizer 示例

如下是一个简单的 Authorizer 示例,实现的访问控制逻辑是:

  • 在交易发生前,检查交易中转账的 ETH 要小于 1000

  • 在交易完成后,检查交易发起者(也就是钱包地址)的 ETH 余额要大于 10000

// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity ^0.8.19;

import "../base/BaseAuthorizer.sol";

contract SampleAuthorizer is BaseAuthorizer {
    bytes32 public constant NAME = "SampleAuthorizer";
    uint256 public constant VERSION = 1;
    uint256 public constant flag = AuthFlags.FULL_MODE;

    constructor(address _owner, address _caller) BaseAuthorizer(_owner, _caller) {}

    function _preExecCheck(
        TransactionData calldata transaction
    ) internal override returns (AuthorizerReturnData memory authData) {
        if(transaction.value < 1000){
            authData.result = AuthResult.SUCCESS;
        }else {
            authData.result = AuthResult.FAILED;
            authData.message = "Value over 1k not allowed";
        }
    }

    function _postExecCheck(
        TransactionData calldata transaction,
        TransactionResult calldata callResult,
        AuthorizerReturnData calldata preData
    ) internal override returns (AuthorizerReturnData memory authData) {
        if(transaction.from.balance > 10000){
            authData.result = AuthResult.SUCCESS;
        }else{
            authData.result = AuthResult.FAILED;
            authData.message = "Wallet balance dropped below 10k";
        }
    }
}

其他开发建议

  • 如果 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 返回值权限验证的结果。

PreviousAuthorizerNextBaseACL

Last updated 1 year ago