本文档描述了一种可扩展的Safe架构,旨在增加Safe的新颖集成和应用。该架构通过ExtensibleFallbackHandler实现,允许自定义方法调用和EIP-712签名验证,同时保持与现有Safe功能的向后兼容性,例如ERC-1271签名和Token回调,从而扩展Safe的功能,并允许更灵活的交互方式。
本文档概述了一个*可扩展的* `Safe` 架构,旨在增加 `Safe` 的新型集成/应用。
以下指导原则已被严格采用:
目前,与 `safe` 的交互只能通过以下方式进行:
此修订后的架构旨在实现的用例包括:
任何 _未_在 `Safe` 单例中实现的方法调用的执行路径如下:
```mermaid flowchart TD A[SafeProxy] -->|delegatecall| B[Safe - `FallbackManager`] B -->|call| C[CompatibilityFallbackHandler] ```
`CompatibilityFallbackHandler` 提供:
如果开发人员希望扩展 `Safe` 的功能,他们必须替换 `CompatibilityFallbackHandler`,这需要大量繁重的工作,并且要小心不要删除任何现有功能,以免破坏 `Safe`(现有基础架构的某些部分需要使用阈值签名,并且某些应用程序正在使用批准的哈希,例如 CoW Protocol dapp)。
开发人员可以*扩展* `CompatibilityFallbackHandler`,但是如果可以简单地为任意单个方法指定自定义处理程序,则可以使它变得更加容易。 这就是 `ExtensibleFallbackHandler` 的用武之地。
此处理程序替换 `CompatibilityFallbackHandler`,但保留与以下内容的向后兼容性:
除了向后兼容性之外,用户还可以:
安全要求:
\* `Safe` 应确定(基于 setter 中的授权),自定义方法是否为 `view`(即,自定义方法是否可以在调用时修改状态)。
执行路径:
```mermaid flowchart TD A[SafeProxy] -->|delegatecall| B[Safe - `FallbackManager`] B -->|call| C[ExtensibleFallbackHandler] C -->|call| D[IFallbackMethod] C -->|staticcall| E[IStaticFallbackMethod] ```
用户要求:
安全要求:
\* `EIP-712` 域分隔符必须对照 `hash` 进行检查,以确保域分隔符和 `ISafeSignatureVerifier` 之间存在 1:1 的关系。
`isValidSignature(bytes32,bytes)` 的执行路径:
```mermaid flowchart TD A[SafeProxy] -->|delegatecall| B[Safe - `FallbackManager`] B -->|call| C[ExtensibleFallbackHandler - `SignatureVerifierMuxer`] C --> D[Approved Hash] C --> E[Threshold Signature] C -->|call| F[ISafeSignatureVerifier] ```
\ `approvedhash` - `signature` 设置为零长度 `bytes`。 \* `threshold` - `signature` 是 65 字节的倍数(对于 `r`,`s`,`v`)。 \ `custom`(即 `ISafeSignatureVerifier`)- `signature` 是一个 ABI 编码的函数调用 `safeSignature(bytes32,bytes32,bytes32,bytes)`,其中元组等效于 `(bytes32 domainSeparator, bytes32 typeHash, bytes32 encodeData, bytes payload)`。 ABI 编码的函数调用中的 `4bytes` 选择器用于触发自定义签名者。
在 `SignatureVerifierMuxer` 调用自定义验证器之前,它必须将 `domainSeparator` 与 `hash` 匹配。 因此,这意味着如果从 `SignatureVerifierMuxer` 调用,则 `typeHash` 和 `encodeData` 可以在 `ISafeSignatureVerifier` 中被信任。
安全要求:
\* 实现可以重新断言 `_hash = h(abi.encodePacked("\x19\x01", domainSeparator, h(typeHash || encodeData)))`。
自定义方法处理程序和自定义域验证器的存储包含在 `ExtensibleFallbackhandler` 部署中。 因此,对 `Safe` 的 `fallbackHandler` 的任何更新实际上都会“重置” `Safe` 的自定义方法/域验证器。
- 原文链接: hackmd.io/-nLuF3JIRyuS5w...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!