About Multisig & AA

多签钱包

多签钱包是一种电子钱包,特点是交易被多个私钥持有者(多签人)授权后才能执行:例如钱包由3个多签人管理,每笔交易需要至少2人签名授权。多签钱包可以防止单点故障(私钥丢失,单人作恶),更加去中心化,更加安全,被很多DAO采用。

多签钱包合约

在以太坊上的多签钱包其实是智能合约,属于合约钱包。下面我们写一个极简版多签钱包MultisigWallet合约,它的逻辑非常简单:

  1. 设置多签人和门槛(链上):部署多签合约时,我们需要初始化多签人列表和执行门槛(至少n个多签人签名授权后,交易才能执行)。Gnosis Safe多签钱包支持增加/删除多签人以及改变执行门槛,但在咱们的极简版中不考虑这一功能。

  2. 创建交易(链下):一笔待授权的交易包含以下内容

    • to:目标合约。

    • value:交易发送的以太坊数量。

    • data:calldata,包含调用函数的选择器和参数。

    • nonce:初始为0,随着多签合约每笔成功执行的交易递增的值,可以防止签名重放攻击。

    • chainid:链id,防止不同链的签名重放攻击。

  3. 收集多签签名(链下):将上一步的交易ABI编码并计算哈希,得到交易哈希,然后让多签人签名,并拼接到一起的到打包签名。

    交易哈希 + 多签人A签名 + 多签人B签名 = 打包签名
    
  4. 调用多签合约的执行函数,验证签名并执行交易(链上)。

账户抽象(ERC-4337)

什么是ERC-4337?

以太坊账户抽象旨在将协议现有两类账户(外部拥有账户(EOA)和合约账户)的功能合二为一。

最终要实现的目标是单一合约账户与代币交易并同时创建合约。这一变化使创新型钱包设计成为可能,如社交恢复、定制和可升级性等。

换个角度看,ERC-4337为单一账户中的钱包带来了合约功能。这样一来,多重身份验证和自动支付等服务将更易于设置。

为何需要ERC-4337?

与比特币网络的未花费交易输出(UTXO)模块不同,以太坊协议使用基于账户的模式。也就是说,以太坊协议会在交易确认时追踪并更新账户的可用余额。

以太坊中的两种账户各自具有不同的功能。外部拥有账户由用户拥有和控制,而合约账户是部署到网络中的智能合约。两种账户均可接收、持有和发送以太币或代币。

以太坊中现有的大多数加密货币钱包均为外部拥有钱包,如MetaMask等。这些钱包都受限于外部拥有钱包的设定规则。受限条件包括账户访问完全依靠私钥,且所有交易均需签名。因此,钱包设置程序和私钥安全措施通常十分复杂,且不便于用户使用。如果用户丢失助记词,就意味着无法再访问钱包。

ERC-4337消除了此类限制。由智能合约账户而非外部拥有账户管理的智能合约钱包,例如UniPass和Safe等,可以达到同样的目的。但是,用户必须在两个账户中管理以太币,用于支付燃料费或依靠中心化中继系统。ERC-4337将两个账户的功能合二为一,便于所需钱包功能进行部署,从而消除了此类限制。

ERC-4337如何运作?

ERC-4337通过引入称为“UserOperation”的更高层伪交易对象来实现账户抽象。UserOperation与汇总具有相似之处。在ERC-4337中,不同的用户将UserOperation对象发送到单独的内存池中。

捆绑者(Bundler)将这些对象打包成一笔交易,纳入到一个区块当中。捆绑者支付捆绑交易的燃料费,但收取单独执行UserOperation的费用。捆绑者与验证者的工作方式类似,即根据费用优先等级逻辑选择要纳入的对象。

钱包添加了包括validateUserOp在内的新功能,从而还可用作智能合约。名为“EntryPoint”的新合约也引入其中,充当执行这些新功能的安全门。

ERC-4337要达成哪些目标?

账户抽象:用户可以享用同时具备智能合约和外部拥有账户功能的单一账户。

去中心化:任意捆绑者均可参与到流程当中。

避免共识更改:以太坊共识层侧重于针对可扩展性的升级,因此能加快应用普及速度。

启用创新用例:包括聚合签名、每日交易限额设置、账户紧急冻结、白名单设置以及保护隐私的应用程序等。

省时并节省燃料费:捆绑者能将UserOperation对象打包到一笔交易中,因此能节省时间和燃料费。

ERC-4337对用户有何意义?

**低门槛钱包和恢复 & 更好的安全性:**无需助记词。多重身份验证和账户恢复。

**可定制的钱包功能:**用户可以享用丰富的定制服务,包括自动支付、预先批准交易和捆绑交易。

**更灵活的燃料费支付方式:**由ERC-4337提供支持的钱包现在可用任意ERC-20代币和其他币种支付燃料费。