调用策略 – ZeroDev

zerodev 发布于 2026-07-14 阅读 11

本文档介绍了ZeroDev智能账户权限系统中的Call Policy,用于限制UserOp可交互的目标地址、合约函数及参数值。通过toCallPolicy函数配置目标地址、值限制、ABI、函数名和参数条件,支持多种运算符(如EQUAL、GREATER_THAN等)。文档提供了API定义和代码示例,适用于开发者实现精细化的合约调用权限控制。

调用策略

调用策略限制了 UserOp 可以交互的目标(合约或 EOA)。如果目标是合约,则可以进一步指定 UserOp 可以交互的函数,以及约束函数参数的值。

API

import { ParamCondition, toCallPolicy, CallPolicyVersion } from "@zerodev/permissions/policies"
 
const callPolicy = toCallPolicy({
  policyVersion: CallPolicyVersion.V0_0_4,
  permissions: [
    {
      // 目标地址
      target: contractAddress,
      // 可以转移的最大值。在此例中我们将其设置为零,因此无法转移任何价值。
      valueLimit: BigInt(0),
      // 合约 ABI
      abi: contractABI,
      // 函数名称
      functionName: "mint",
      // 条件数组,每个条件对应函数的一个参数。
      args: [
        {
          condition: ParamCondition.EQUAL,
          value: value,
        },
      ],
    },
  ],
})
 
const validator = toPermissionValidator(publicClient, {
  entryPoint,
  kernelVersion,
  signer: someSigner,
  policies: [
    callPolicy,
    // ...其他策略
  ],
})
  • target:要调用的目标合约或要发送 ETH 的地址。如果为 zeroAddress,则目标可以是任何合约,只要 ABI 匹配(如果未指定 ABI,则可以是任何地址)。
  • valueLimit:可以转移的最大值。
  • abi:合约 ABI
  • functionName:函数名称
  • selector:如果存在多个同名函数,可以通过 selector 区分它们。例如:selector: toFunctionSelector("transfer(uint256, uint256)")
  • args:条件数组,每个条件对应一个参数,按照参数的排列顺序。使用 null 跳过某个参数。
    • operator:可以是 EQUALGREATER_THANLESS_THANGREATER_THAN_OR_EQUALLESS_THAN_OR_EQUALNOT_EQUAL
    • value:与运算符一起使用的参数值。例如,operator = EQUALvalue = 2 表示“参数必须等于 2”。
  • operation:是 call 还是 delegatecall。默认为 call。
  • 原文链接: docs.zerodev.app/smart-a...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论