{"content":{"title":"EIP-1271 解读","body":"---\r\ntitle: EIP-1271 Explained\r\nauthorURL: \"\"\r\noriginalURL: https://blog.cow.fi/eip-1271-explained-008210ead865\r\ntranslator: \"sum\"\r\nreviewer: \"\"\r\n---\r\n\r\n<!-- more -->\r\n\r\n## EIP-1271是以太坊网络的一个重大升级，引发了热议，但它究竟是什么呢？\r\n\r\nEIP-1271（也称为ERC-1271）是一个能够让智能合约验证签名的以太坊改进方案，使其能够像传统的EOA钱包一样对交易签名。\r\n\r\n起初EIP-1271看起来像是一个小的技术改进方案，但这一标准为智能合约解锁了一个全新的世界，包括基于意图的交易（intent-based trading）、高级订单类型以及其他所有需要钱包签名的区块链交互。\r\n\r\n# 什么是EIP-1271\r\n\r\nEIP-1271 作为“[合约签名验证方法的标准](https://eips.ethereum.org/EIPS/eip-1271)”，使得智能合约能够验证某个合约上的签名是否有效——这是外部账户（EOA）已经内置的功能。\r\n\r\n在EIP-1271之前，智能合约可以发送交易，但无法像传统钱包那样签署消息。EOA拥有私钥，使用私钥签名可以验证消息是否来自该钱包。然而，智能合约没有私钥，因此，EIP-1271作为一种智能合约验证签名的标准被引入，使它们也能签署信息。\r\n\r\n## EIP-1271和ERC-1271的区别\r\n\r\n“EIP-1271”和“ERC-1271”有时可以互换使用，这两个术语指的是同一个概念。以太坊通过提案流程接受对以太坊网络的改进想法，因此有了“以太坊改进提案（EIP）”这个名称。另一方面，“ERC”代表“以太坊意见征求稿”，用来指加入到以太坊网络的内容，这些内容并不改变底层协议本身。\r\n\r\n这意味着“EIP-1271”更准确地应该被称为“ERC-1271”，因为该补充并未改变协议功能。然而如前所述，这两个术语常常被互换使用。\r\n\r\n# 为何EIP-1271如此有用？\r\n\r\n在过去的几年中，以太坊见证了利用ERC-1271签署信息的智能合约的蓬勃发展。签署信息对于诸多事务至关重要，包括使用链下订单簿在去中心化交易所下单、验证给定的钱包是否属于某个用户等等。\r\n\r\n然而，支持ERC-1271的智能合约解锁了一组全新的用例。这是因为ERC-1271的“isValidSignature”方法可以接受任意的指令逻辑，使得智能合约钱包变成了可以基于链上条件自动签署消息的自治代理。\r\n\r\n让我们看看ERC-1271使智能合约成为可能的各种用例。\r\n\r\n## 链下订单簿\r\n\r\nERC-1271最常见的用途之一是关于去中心化交易所（DEX）上的订单。像CoW Protocol和Matcha这样的交易所使用链下订单簿来收集签名信息，在这些信息变成订单之前做出额外的优化。为了使智能合约能够使用这些系统进行交易，它们需要ERC-1271来验证签名。\r\n\r\n限价单（Limit order）是一种常见的DEX订单类型，它依赖于链下订单簿，因此智能合约需要支持ERC-1271标准才能下限价订单。\r\n\r\n## 签名验证\r\n\r\n在Web3中，身份验证是必须的。\r\n\r\n很多web3应用程序要求用户签名一条消息，证明他们控制着连接的钱包后才能使用该应用程序。与此同时，OpenSea和Rarible等NFT市场要求用户签署消息来进行出价、更新个人资料图像以及执行其他无Gas费的交易。\r\n\r\n在这两种情况下，智能合约钱包都利用ERC-1271来签署验证信息。\r\n\r\n## 智能合约意图(Intents for Smart Contracts)\r\n\r\n最近，许多DeFi解决方案开始使用[意图](https://docs.cow.fi/cow-protocol/concepts/introduction/intents)（intents）作为一种机制，为用户提供更好的价格、MEV保护、高级订单类型和其他一系列好处。\r\n\r\nCoW Protocol是一个元DEX聚合器，它开创了许多意图（intents）用例，所有用例都依赖于签名消息。常规EOA订单需要提前签名，但得益于ERC-1271，智能合约订单可以在结算时才对订单进行签名，并在交易完成前检查是否满足价格预言机的价格、当前余额、区块时间等条件。这解锁了很多只能通过智能合约钱包实现的特殊交易策略。\r\n\r\n**让交易更安全的Milkman(Milkman for Safe Trading)**\r\n\r\n[Yearn.fi](https://yearn.fi/)团队与[CoW Grants项目](https://grants.cow.fi/)合作，推出了[Milkman](https://medium.com/@cow-protocol/what-is-milkman-cow-swaps-solution-for-delayed-execution-trading-c0d647832d38)，以简化DAO交易并保护其免受MEV影响。DAO治理流程意味着从提议交易到实际执行交易之间会有相当长的时间间隔。在此期间，市场可能会发生变化，导致交易无效，或者更糟糕的是-MEV搜索者可能会等待确切的交易时间并操纵价格以利用这笔交易获利。\r\n\r\nMilkman提供了一种解决方案，允许DAO指定一个价格源，智能合约在执行时检查这个价格源并根据资产的实时价格进行交易。\r\n\r\n这意味着DAO不再必须提前承诺执行价格，而是可以利用智能合约和EIP-1271发出条件订单，其价格在执行时决定。\r\n\r\n**高级订单类型（Advanced Order Types）**\r\n\r\nCoW Protocol上的智能合约签名允许多种高级订单类型。值得一提的是CoW Protocol的[TWAP](https://blog.cow.fi/cow-swap-launches-twap-orders-d5583135b472)订单，它使用ERC-1271智能合约签名在固定的时间间隔自主下单。\r\n\r\n**程序化订单框架（The Programmatic Order Framework）**\r\n\r\nCoW Protocol的程序化订单框架充分利用了ERC-1271的优势，允许任何人为任何类型的订单编写自定义逻辑。\r\n\r\n程序化订单根据链上条件长期执行。这些条件可以包括检查链上价格、智能合约钱包余额、区块时间、交易量等任意逻辑。\r\n\r\n有许多已经部署的支持ERC-1271程序化订单的用例，包括：\r\n\r\n-   自动化DAO操作，包括工资单、资金多元化和手续费归集\r\n-   根据智能合约钱包中的资产状态进行投资组合再平衡\r\n-   特殊订单类型，包括止损、延时和止盈\r\n\r\n## 任何需要签名的应用程序\r\n\r\n我们已经介绍了许多需要签名消息的用例，但ERC-1271开启了无限的潜在使用场景……只要智能合约想使用需要钱包签名的应用程序，都需要ERC-1271。\r\n\r\n以下是需要签名的几个示例:\r\n\r\n-   **零Gas交易**：一些基于意图（intents）的去中心化交易所已经开始提供“零Gas交易”，该功能允许用户无需支付ETH Gas费用即可进行交易。例如，在CoW Protocol上，所有交易都采用出售的代币来支付gas费，利用签名消息来指定订单详细信息。\r\n-   **原生代币流程**：在CoW Protocol上，用户可以交易原生ETH，而无需使用ERC-20 “WETH”包装版本。这再次得益于签名消息，该消息指定订单详细信息，同时委托第三方（[solvers](https://docs.cow.fi/cow-protocol/concepts/introduction/solvers)）负责执行。\r\n-   **Web3登录**：[Dynamic.xyz](https://www.dynamic.xyz/)等服务构建帐户抽象功能，允许用户仅通过传统的web2电子邮件地址即可使用去中心化应用程序。当使用智能合约钱包时，这些服务严重依赖ERC-1271来提供完整的签名功能。\r\n\r\n# EIP-1271工作原理\r\n\r\n随着ERC-1271的引入，智能合约现在可以定义“isValidSignature”方法，该方法确定智能合约验证签名和执行交易所需的条件。\r\n\r\n在签署交易方面，这种实现使智能合约比EOA更具优势。这是因为“isValidSignature”方法可以包含任意逻辑，允许每个智能合约定义自己的参数来生成有效签名。\r\n\r\n举例说明“isValidSignature”返回有效的条件包括：\r\n\r\n-   一组硬编码EOA地址的签名（用于Safe的多重签名模型）\r\n-   链上条件，例如订单之间的时间间隔或达到给定的预言机价格\r\n如果智能合约的所有者们希望将订单委托给其他人，他们可以在“isValidSignature”中编写验证签名所需的条件。每次有人调用智能合约时都会检查这些条件，并且仅在满足条件时才执行。\r\n\r\n![](https://miro.medium.com/v2/resize:fit:640/format:webp/1*ENRRQis22l7l-FFS4Nwy5g.png)\r\n\r\nERC-1271’的“isValidSignature”方法\r\n\r\n该方法接受两个参数，一个代表订单哈希的“bytes32 hash”和一个包含签名条件的任意长度的byte数组。这个数组可以是很多内容——来自智能合约所有者或委托人的EOA签名、检查预言机价格或链上状态以确定订单是否应该执行的智能合约，或其他任意逻辑。\r\n\r\n最后，通过“isValidSignature”方法返回值决定订单是否应该执行。\r\n\r\n本质上，整个签名验证过程是这样的：\r\n\r\n![](https://miro.medium.com/v2/resize:fit:640/format:webp/1*ZM3Ar3SbDTyDZ-66oRykWQ.png)\r\n\r\n创建需要签署的订单\r\n\r\n![](https://miro.medium.com/v2/resize:fit:640/format:webp/1*GMEOyrtJm19x0uBXuuX4LQ.png)\r\n\r\n该订单生成一个订单哈希\r\n\r\n![](https://miro.medium.com/v2/resize:fit:640/format:webp/1*Pveow971Ch3TRKHKnTBs_A.png)\r\n\r\n调用智能合约的“isValidSignature”方法，并将哈希值和签名作为参数传入\r\n\r\n# EIP-1271：开启智能合约交易的未来\r\n\r\n随着以太坊的普及和发展，交易者的需求变得更加复杂，超越了传统EOA的内置功能。ERC-1271为使用智能合约进行交易打开了新的大门，这些智能合约可以创建自主、有条件的订单，为用户提供更强大的交易能力。\r\n\r\nCoW Protocol依托ERC-1271走在了创新前沿，你已经可以通过在CoW Swap上进行交换或通过[程序化订单框架](https://hackmd.io/pmZX_qT2Q1yw59KiiT6TPQ)（也称为ComposableCoW）开发自定义解决方案来创建新型订单。\r\n\r\n和以前一样，交易愉快！"},"author":{"user":"https://learnblockchain.cn/people/14524","address":null},"history":null,"timestamp":1713095239,"version":1}