Skip to content

kashguard/smart-contract-wallet

Repository files navigation

智能合约钱包

基于 ERC-4337 的账户抽象实现,为 Web2 用户提供增强功能。

概述

本项目实现了一个基于 ERC-4337 的账户抽象(AA)钱包系统,并针对 Web2 用户入门和企业用例进行了优化。系统采用模块化架构,包含账户管理、签名聚合、会话密钥管理和灵活的 Gas 支付机制。

架构

核心组件

项目由两个主要部分组成:

  1. 标准 ERC-4337 实现 (contracts/core/, contracts/accounts/)

    • EntryPoint 实现
    • 基础账户合约
    • 简单账户工厂
  2. KashGuard 增强钱包系统 (contracts/kashguard/)

    • 面向 Web2 用户的高级账户抽象
    • 用于集中控制的主签名者系统
    • 会话密钥管理
    • 签名聚合
    • 基于代币的 Gas 支付

KashGuard 智能钱包系统

概述

KashGuard 系统是一个增强的账户抽象钱包实现,旨在连接 Web2 和 Web3 体验。它提供企业级功能,包括集中式主签名者控制、会话密钥管理、签名聚合和灵活的 Gas 支付选项。

核心功能

1. 主签名者系统(Master Signer System)

  • 目的:使 Web2 用户无需管理私钥即可与 Web3 交互
  • 功能
    • 一个主签名者可以控制多个账户
    • 支持批量操作的集中式交易签名
    • 实现企业钱包管理模式
  • 使用场景
    • 企业钱包管理
    • 托管钱包服务
    • 批量交易处理

2. 会话密钥管理(Session Key Management)

  • 目的:提供有时间限制和权限范围的签名能力
  • 功能
    • 创建带过期时间的会话密钥
    • 设置细粒度权限(目标合约、函数选择器)
    • 随时撤销会话密钥
    • 支持批量会话密钥操作
  • 使用场景
    • 临时访问委托
    • DApp 特定权限
    • 有限范围的自动化交易机器人

3. 签名聚合(Signature Aggregation)

  • 目的:降低批量操作的 Gas 成本
  • 功能
    • 将多个用户操作聚合为单个签名
    • 主签名者可以同时为多个账户签名
    • 聚合操作的 Nonce 管理
  • 使用场景
    • 批量转账
    • 多账户操作
    • 高效的交易批处理

4. 基于代币的 Gas 支付(Token-Based Gas Payment)

  • 目的:允许用户使用 ERC20 代币而非 ETH 支付 Gas 费用
  • 功能
    • 基于预言机的动态定价
    • 备用汇率
    • 每个用户的每日支出限额
    • 代币销毁或转移给受益人
  • 使用场景
    • 用户入门(无需 ETH)
    • 基于代币的生态系统
    • 赞助交易

合约组件

AAccount.sol

实现 ERC-4337 并具有增强功能的核心账户合约:

  • 继承关系BaseAccount, UUPSUpgradeable, ERC165
  • 核心功能
    • 所有者签名验证
    • 主签名者签名验证
    • 带权限的会话密钥验证
    • 批量操作的聚合器支持
    • UUPS 可升级模式

初始化参数

  • entryPoint: EntryPoint 合约地址
  • owner: 账户所有者地址
  • masterSigner: 主签名者地址(可选)
  • aggregator: 聚合器合约地址(可选)

AccountManager.sol

用于创建和管理 AA 账户的工厂合约:

  • 模式:基于 Create2 的确定性地址生成
  • 功能
    • 确定性账户地址(owner + masterSigner)
    • 基于代理的账户部署(ERC1967)
    • 授权创建者管理
    • 默认主签名者配置

关键函数

  • createAccount(owner, masterSigner): 创建新账户
  • getAccountAddress(owner, masterSigner): 预测账户地址
  • getInitCode(owner, masterSigner): 为 EntryPoint 生成 initCode

MasterAggregator.sol

用于批量操作的签名聚合合约:

  • 功能
    • 主签名者授权
    • 账户到主签名者的映射
    • Nonce 管理
    • 批量签名验证
    • 可配置的聚合限制

使用场景:单个主签名者可以在一次聚合交易中为多个账户签名,显著降低 Gas 成本。

SessionKeyManager.sol

集中式会话密钥管理:

  • 功能
    • 批量会话密钥操作
    • 基于模板的会话密钥创建
    • 跨账户会话密钥管理
    • 主签名者授权

模板:为常见用例预配置的会话密钥模板(例如:"trading"、"staking"、"withdrawal")。

GasPaymaster.sol

用于基于代币的 Gas 支付的 Paymaster 合约:

  • 功能
    • 接受 ERC20 代币支付 Gas 费用
    • 预言机集成实现动态定价
    • 备用汇率
    • 每日支出限额
    • 代币销毁或转移模式
    • 可暂停功能

配置

  • 代币地址(必须是可销毁或可转移的)
  • 预言机地址(可选)
  • 备用汇率
  • 每个用户的每日限额
  • 代币处理模式(销毁 vs 转移)

GasPriceOracle.sol

用于代币/ETH 汇率的价格预言机:

  • 功能
    • 多价格源支持
    • 价格验证和偏差检查
    • 基于时间戳的新鲜度验证
    • 授权预言机管理
    • 可暂停功能

价格源

  • ETH/USD
  • 代币/USD
  • 自定义源类型

架构图

┌─────────────────────────────────────────────────────────────┐
│                    EntryPoint (ERC-4337)                    │
└──────────────────────────┬──────────────────────────────────┘
                           │
        ┌──────────────────┼──────────────────┐
        │                  │                  │
┌───────▼────────┐  ┌──────▼──────┐  ┌───────▼────────┐
│  AAccount      │  │ AccountManager│  │ GasPaymaster   │
│  (Proxy)       │  │              │  │                │
└───────┬────────┘  └──────────────┘  └───────┬────────┘
        │                                      │
        │                                      │
┌───────▼────────┐                    ┌───────▼────────┐
│ MasterSigner   │                    │ GasPriceOracle │
│                │                    │                │
└───────┬────────┘                    └────────────────┘
        │
        │
┌───────▼────────┐  ┌──────────────┐
│MasterAggregator│  │SessionKeyMgr │
│                │  │              │
└────────────────┘  └──────────────┘

使用场景

1. 企业钱包管理

  • 场景:公司需要管理多个员工钱包
  • 解决方案
    • 使用公司主签名者部署账户
    • 使用 MasterAggregator 进行批量操作
    • 为员工访问实现会话密钥

2. 托管钱包服务

  • 场景:服务提供商为 Web2 用户提供钱包服务
  • 解决方案
    • 创建以服务提供商为主签名者的账户
    • 用户无需管理私钥
    • 服务提供商处理交易签名

3. DApp 集成

  • 场景:DApp 希望提供无缝用户体验
  • 解决方案
    • 集成 AccountManager 进行账户创建
    • 使用 GasPaymaster 进行基于代币的 Gas 支付
    • 为 DApp 特定权限实现会话密钥

4. 批量操作

  • 场景:需要高效执行多个交易
  • 解决方案
    • 使用 MasterAggregator 批量操作
    • 一次签名多个账户
    • 显著降低 Gas 成本

安全考虑

  1. 主签名者控制:主签名者对账户具有重要控制权。确保适当的访问控制和密钥管理。

  2. 会话密钥权限:始终为会话密钥设置适当的权限以限制其范围。

  3. 预言机可靠性:GasPaymaster 依赖预言机进行定价。实现适当的备用机制。

  4. 可升级性:所有合约都使用 UUPS 可升级模式。确保升级函数有适当的访问控制。

  5. 每日限额:GasPaymaster 实现每日限额以防止过度支出。请适当配置。

部署步骤

  1. 部署 EntryPoint(如果尚未部署)
  2. 部署 AccountManager
    • 使用 EntryPoint 地址初始化
  3. 部署 MasterAggregator(可选)
    • 使用授权的主签名者初始化
  4. 部署 GasPriceOracle(可选,用于 GasPaymaster)
    • 使用价格源初始化
  5. 部署 GasPaymaster(可选)
    • 使用 EntryPoint、所有者、代币、预言机和配置初始化
  6. 部署 SessionKeyManager(可选)
    • 使用所有者初始化

开发

编译

yarn compile

测试

yarn test

Gas 计算

yarn gas-calc

依赖项

  • @openzeppelin/contracts: ^5.1.0
  • @openzeppelin/contracts-upgradeable: ^5.4.0
  • hardhat: ^2.22.17

许可证

MIT

About

基于 ERC-4337 的账户抽象(AA)钱包系统,并针对 Web2 用户入门和企业用例进行了优化。系统采用模块化架构,包含账户管理、签名聚合、会话密钥管理和灵活的 Gas 支付机制。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors