SCW(AA) intro
AA is ?
At the core of account abstraction is the smart account -- an account powered by a smart contract. The fact that smart accounts are smart contracts is what allows us to abstract their logic, from authentication to gas payments and more. from zerodev »
SCW is ?
SCW is a smart contract wallet 智能合约钱包 from 登链社区 »
智能合约钱包
智能合约钱包(SCW)是一种建立在区块链网络上的智能合约上的加密货币钱包类型,例如以太坊。与传统的由私钥控制的外部拥有账户(EOA)不同,智能合约钱包提供了额外的功能和安全特性。它们允许进行更复杂的操作、可定制的规则、恢复选项和多签功能。
智能合约钱包的关键特性包括:
- 可定制性:用户可以根据自己的需求添加特定功能或修改现有功能。
- 安全性:这些钱包使用先进的安全功能,如多签访问和恢复机制。
- 可升级性:智能合约钱包的功能可以更新,而不会丢失存储的资产。
- 可互操作性:它们可以与区块链网络上的其他智能合约和去中心化应用程序(dApp)进行交互。
ERC4337 Guide
https://docs.stackup.sh/docs/erc-4337-guides
ERC-4337,也称为以太坊改进提案(EIP)4337,是以太坊中的账户抽象标准。它旨在通过引入新的交易类型“UserOperation”简化用户体验,该类型将交易验证与执行分离。该标准允许用户使用智能合约钱包与以太坊网络进行交互,而无需直接管理 gas 费用和 nonce 管理。
ERC-4337 的关键组件包括:
- UserOperation:一种封装用户期望操作的新交易类型,包括发送者、有效载荷和与 gas 相关的信息。“UserOperation”将验证和执行步骤分离,从而实现更高效和安全的交易处理。
- EntryPoint:作为“UserOperations”的网关的智 能合约。它负责验证和执行“UserOperations”,并可以与其他合约(如 Paymasters 和 Factories)进行交互,以促进交易。
- Paymasters:这些是可以代表用户赞助交易的智能合约。它们支持各种支付机制,如 ERC-20 代币,用于 gas 费用,为用户提供更大的灵活性。
- Factories:负责创建新智能合约钱包的智能合约。它们使用 CREATE2 确保钱包地址是确定性的,并且独立于钱包创建的顺序。这允许用户在本地生成钱包地址,而无需依赖现有用户或执行自定义操作。
- 声誉评分和节流:为防止滥用和拒绝服务(DoS)攻击,ERC-4337 引入了全局实体的声誉评分和节流机制,如 Paymaster 和 Factories。实体需要抵押一定数量的 ETH,以确保它们的行为不会导致其他“UserOperations”失效。
- 总之,ERC-4337 旨在通过简化与以太坊网络的交互并通过智能合约钱包引入高级功能,改善用户体验。它将交易验证与执行分离,允许更灵活的 gas 支付选项,并支持无缝账户创建。
合约如何签署消息?
当用户将他们的钱包连接到应用时,可能会被要求签署一条消息以证明他们的身份。对于外部拥有账户(EOA),用户使用他们的私钥对消息进行签名。验证方可以使用恢复算法 ,如 ecrecover,来确定谁签署了消息。
智能合约钱包不可以生成签名,但它们没有像 EOA 那样的私钥。但是,智 能合约本身可提供验证签名的机制。EIP-1271 通过一个标准接口解决了这个问题。
EIP-1271
EIP-1271 是一个用于验证由智能合约钱包(SCW)生成的签名的合约的标准接口。它于 2018 年作为以太坊改进提案(EIP)提出,并已被广泛采用,用于需要签名验证的 DApp。
EIP-1271 接口定义了一个名为 isValidSignature 的函数。该函数接受两个参数:
bytes32 _messageHash:被签名的消息哈希
bytes _signature:智能合约钱包生成的签名
该函数返回一个 bytes4 值,指示签名是否有效。可能的返回值包括:
`0x1626ba7e`:签名有效
`0xffffffff`:签名无效
什么是 Create2 solidity?
在Solidity中,CREATE2是一个EVM(Ethereum Virtual Machine)操作码,它允许在智能合约中创建新合约,并且与传统的CREATE操作码相比,CREATE2的特别之处在于它允许开发者在合约创建之前预测合约地址。
CREATE2提供了一种方式,可以通过一组特定的参数来确定性地计算出新合约的地址。这些参数包括:
- 发送者地址(通常是创建合约的合约地址)
- 一个盐值(salt),这是一个任意的32字节的哈希值,可以由开发者自定义
- 新合约的初始化代码的哈希值
新合约的地址是通过对上述三个参数加上一个固定前缀(0xff)进行Keccak-256哈希运算后的最后20个字节来确定的。因此,只要这些参数保持不变,无论何时执行CREATE2操作,生成的合约地址都将是相同的。
CREATE2的使用场景包括:
-
可预测的合约地址: 开发者可以在合约部署之前知道合约的确切地址,这对于某些应用程序和协议来说非常有用。
-
最小化链上状态: 由于可以预先知道地址,可以在合约实际部署之前与合约进行交互,比如在用户界面上显示合约信息或进行链下计算。
-
更复杂的合约交互:
CREATE2可以用于构建更复杂的合约创建模式,比如代理工厂模式,允许合约在使用前按需“按需”创建。 -
安全性: 如果合约被销毁,可以确保使用相同的盐值和初始化代码再次创建合约,合约地址将保持不变。
在智能合约代码中,CREATE2可以通过内联汇编使用,或者在Solidity 0.8.0及以上版本中,可以使用new关键字与create2指令结合使用,如下所示:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Factory {
function deploy(bytes32 salt, bytes memory bytecode) public returns (address) {
address newContract;
assembly {
newContract := create2(0, add(bytecode, 0x20), mload(bytecode), salt)
}
require(newContract != address(0), "Failed to deploy the new contract");
return newContract;
}
}
在这个例子中,deploy函数接收一个盐值和合约的字节码,然后使用create2汇编指令创建一个新合约,并返回新合约的地址。
ERC6900
ERC-6900: Modular Smart Contract Accounts and PluginsERC-6900 introduces a standardized framework for modular smart accounts and plugins within the Ethereum ecosystem. ERC-6900 为以太坊生态系统中的模块化智能账户和插件引入了一个标准化框架。
The proposal aims to enhance the flexibility and composability of smart contract accounts by allowing developers to separate different functionalities into distinct modules that can be upgraded and interacted with independently. ERC-6900 accounts must follow ERC-4337. 该提案旨在通过允许开发人员将不同的功能分离为可以独立升级和交互的不同模块来增强智能合约账户的灵活性和可组合性。ERC-6900 帐户必须遵循 ERC-4337。
from stackup modular-account-standard-erc-6900 »
ERC7579
ERC-7579: Minimal Modular Smart AccountsERC-7579 概述了模块化智能账户的接口和行为,以确保互操作性。它由 Rhinestone、ZeroDev、Biconomy 和 OKX 根据 ERC-6900 开发的经验开发而开发。 ERC-7579 智能账户是符合 ERC-4337 标准的智能合约账户,采用模块化架构
from stackup erc-7579 »
ERC-7579 vs ERC-6900
Why we are building Kernel on ERC-7579 (and not ERC-6900)参考链接
- https://github.com/erc6900/reference-implementation
- https://docs.alchemy.com/docs/account-abstraction-overview
- https://docs.zerodev.app/
- https://github.com/zerodevapp/kernel
- https://eips.ethereum.org/EIPS/eip-165
- https://docs.stackup.sh/docs/account-abstraction
- https://docs.stackup.sh/docs/recommendations
- https://uniswap.org/developers
- https://hardhat.org/hardhat-runner/docs/getting-started