账户模块
ERC-7579
ERC-7579 定义了一种用于模块化智能账户的标准接口。 此标准使得账户能够以与不同账户实现可组合的方式安装、卸载模块并与之交互,从而扩展其功能。
账户
OpenZeppelin 实现了 AccountERC7579
合约,该合约允许安装符合此标准的模块。 还有一个 AccountERC7579Hooked
变体,支持安装 hook。 类似于 大多数账户,实例应该定义一个初始化函数,在其中设置控制账户的第一个模块:
Unresolved include directive in modules/ROOT/pages/account-modules.adoc - include::api:example$account/MyAccountERC7579.sol[]
为简单起见,AccountERC7579Hooked 仅支持单个 hook。 一个常见的解决方法是安装一个 带有复用器模式的单个 hook,以将功能扩展到多个 hook。
|
模块
通过部署为智能合约(称为 模块)的封装功能将功能添加到帐户。 该标准定义了四种主要模块类型:
-
验证器模块(类型 1):处理签名验证和用户操作验证
-
执行器模块(类型 2):代表帐户执行操作
-
回退模块(类型 3):处理特定函数选择器的回退调用
-
Hook 模块(类型 4):在操作之前和之后执行逻辑
模块可以同时实现多种类型,这意味着您可以将执行器模块与 hook 结合使用,以强制执行账户的行为,例如维护 ERC-20 批准或防止删除某些权限。
参见 流行的模块实现。
构建自定义模块
该库提供 标准可组合模块 作为构建块,并为开发人员提供内部 API。 通过组合这些组件,您可以创建丰富的变体集,而无需包含不必要的功能。
一个好的起点是 ERC7579Executor
或 ERC7579Validator
,其中包括一个带有主观看法的基本层,可以轻松地与其他抽象模块组合。 Hook 和回退处理程序可以直接从接口实现,这更加简单:
Unresolved include directive in modules/ROOT/pages/account-modules.adoc - include::api:example$account/modules/MyERC7579Modules.sol[]
在 API 参考 中探索这些抽象的 ERC-7579 模块。 |
执行模式
ERC-7579 支持各种执行模式,这些模式被编码为 bytes32
值。 ERC7579Utils
库提供了使用这些模式的实用函数:
// 执行模式的部分
type Mode is bytes32;
type CallType is bytes1;
type ExecType is bytes1;
type ModeSelector is bytes4;
type ModePayload is bytes22;
示例
社交恢复
当访问丢失时,社交恢复允许通过依赖于受信任的各方(“守护者”)来验证用户的身份并帮助恢复访问来恢复帐户。
社交恢复不是一个单一的解决方案,而是一个具有多种配置选项的设计空间:
-
延迟配置
-
过期设置
-
不同的守护者类型
-
取消窗口
-
确认要求
为了支持 不同的守护者类型,我们可以利用 ERC-7913,如 多重签名 部分所述。 对于 ERC-7579 模块,这是通过 ERC7579Multisig
验证器实现的。
与 ERC7579Executor
结合使用,它提供了一个基本的基础,可以通过更复杂的功能进行扩展:
Unresolved include directive in modules/ROOT/pages/account-modules.adoc - include::api:example$account/modules/MyERC7579SocialRecovery.sol[]
为了增强安全性,您可以使用 ERC7579DelayedExecutor
通过调度、延迟和取消来扩展此基础。 这允许守护者调度具有时间延迟的恢复操作,从而提供一个安全窗口来检测和取消可疑的恢复尝试,然后再执行:
Unresolved include directive in modules/ROOT/pages/account-modules.adoc - include::api:example$account/modules/MyERC7579DelayedSocialRecovery.sol[]
延迟执行器的签名验证不需要 nonce,因为操作由其 操作 ID 唯一标识,并且不能被调度两次。 |
这些实现演示了如何构建逐渐更安全的社交恢复机制,从基本的多重签名恢复到具有取消功能的时间延迟恢复。
对于其他功能,开发人员可以使用:
-
ERC7579MultisigWeighted
为签名者分配不同的权重 -
ERC7579MultisigConfirmation
实现一个确认系统,该系统在添加签名者时验证签名 -
ERC7579MultisigStorage
允许守护者预先签署恢复操作以实现更灵活的协调