SUAVE是由Flashbots开发的去中心化项目,它建立了一个具有TEE(可信执行环境)的网络,以解决MEV(最大可提取价值)过程中遇到的密钥管理和多方信任等问题。SUAVE是以太坊的扩展,与EVM兼容,通过集成TEE,SUAVE不仅解决了MEV相关问题,还开辟了许多可能性,比如安全地存储密钥、实现跨链操作等。
2024年8月8日
感谢来自 Flashbots 的 George Zhang 帮助我们理解技术细节。
SUAVE 是一个由 Flashbots 开发的去中心化项目,它建立了一个具有 TEE(可信执行环境)的网络,以解决 MEV(最大可提取价值)过程中遇到的密钥管理和多方信任等问题。SUAVE 项目中 TEE 的集成不仅解决了与 MEV 相关的问题,还开启了许多其他的可能性。
SUAVE 项目是 Ethereum 的一个扩展,使其天生与 EVM(Ethereum 虚拟机)兼容。目前,GitHub 上的相关项目包括 SUAVE-geth、SUAVE-std 和 SUAVE-examples。
SUAVE-geth 通过在这个安全环境中添加加密计算环境和一些预编译(precompiled contracts),扩展了基于 geth 的执行层代码。值得注意的是,它包括一个用于标准 HTTPS 请求的预编译,允许开发者使用 TEE 环境为用户提供对其他网络的访问。它还包括一系列用于使用 TEE 功能的预编译,例如获取加密参数、存储加密信息和检索加密信息,从而形成基于可信环境的开发基础设施。
SUAVE-std 是一个为方便开发者而设计的项目,本质上是一个开发工具包。例如,它封装了如何使用 HTTP 请求,甚至包括一个用于使用 ChatGPT 的库,允许开发者在组装 HTTP 请求消息时替换他们的 API 密钥,而无需手动组装和解析 ChatGPT 的响应消息。TEE 环境确保了 API 密钥的安全性,因为所有操作都发生在 TEE 内部。最初,这个 ChatGPT 标准库使用 GPT-3.5-turbo 模型,默认温度为 0.7。现在,它还包括灵活的接口,允许将模型作为参数传入。
SUAVE-examples 是一个展示应用程序开发案例研究或初学者教程的项目。SUAVE 应用程序开发的新手可以通过这个项目中的案例进行学习和比较。
由于 SUAVE 是 Ethereum 的一个扩展(它的可执行环境被称为 MEVM,Modified Ethereum Virtual Machine),智能合约开发与 EVM 兼容,并且官方开发文档是在 Solidity 中介绍的。因此,开发者可以充分利用他们的 Solidity 开发经验。在 SUAVE 中开发智能合约可以理解为 Solidity 开发,并在 TEE 环境中添加了加密计算功能。
有几个关键的 SUAVE MEVM 预编译。第一个是 confidentialInputs,它接受来自应用程序请求的加密参数。这些参数通常包括敏感信息,如私钥或 API 密钥,这些信息必须仅在 TEE 环境中保持明文。在应用程序开发中,此接口用于安全地获取明文信息。整个传输过程是加密且可靠的。第二个是 confidentialStore,用于在不需要立即进行计算时存储敏感信息。第三个是 confidentialRetrieve,用于在后续需要敏感信息进行计算时,从 TEE 环境请求明文数据。
SUAVE 安全地存储敏感信息,从而实现诸如“用户上传其私钥,第三方执行业务计算。当满足某些条件时,第三方可以直接使用用户的私钥进行签名。这允许第三方在某些规则下使用用户的私钥进行签名,而无需获得私钥的明文”之类的场景。
SUAVE 使用 HTTPS 请求执行跨链操作。该工具包包括一个名为 gateway 的库,用于直接读取跨链信息,本质上是允许用户为某些链设置 RPC 节点。更常见的是,用户上传诸如 Infura 或 Etherscan 之类的服务的 API 密钥信息,然后根据需要使用 HTTP 请求到相应的节点。对于跨链写入操作,该工具包包括一个事务包,以帮助开发人员编码 EIP1559 消息并通过 eth_sendRawTransaction 接口广播事务。
另一个值得注意的用例是上传和存储 Solidity 合约的已编译字节码作为机密参数,并在满足条件时部署它,从而形成一个私有库。此方案可以扩展到包括私钥 + 私有字节码库,从而在第三方委托调用期间实现完全私有的事务。
SUAVE 的最终状态是一条链,称为 SUAVE 链。我们可以将 SUAVE 链视为实现 MEVM 的链。作为与 EVM 兼容的区块链,我们还可以在 SUAVE 上创建诸如 ERC20 和 ERC721 之类的资产,链上操作类似于其他与 EVM 兼容的链。它的独特之处在于集成了链下操作,例如将事务发送到其他链的节点。链下操作结果或条件可以存储在 SUAVE 链上,存储的结果由共识保证。这确保了链下计算与链上状态之间的一致性。例如,开发人员可以编写智能合约来记录或修改链上条件。当访问另一个链的网络节点时,如果返回的结果符合标准,则会触发预定的 ERC20 资产的转移。
这些是由 SUAVE 中的链下可信计算带来的特性。由于由 Flashbots 团队开发并被认为是“MEV 的未来”,因此本质上支持处理 bundle 交易。与 MEV 相关的原则很简单:组装 bundle 交易并将它们发送到 Flashbots 的 relay 节点。可以安全地存储私钥甚至代码,从而提供巨大的潜在用途。例如,构建者不仅可以在目标链上以 gas 的形式获得奖励,还可以在 SUAVE 链上以数字资产的形式获得奖励。在 MEV 市场中,目前不可能实现具有安全私有信息的灵活业务定义(目前,它们依赖于传统的链下信任、合同、声誉等)。
对于开发人员来说,构建 dapp 不仅涉及链上智能合约开发,还涉及诸如 ether.js 之类的工具。在 SUAVE 应用程序开发中,由于 SUAVE 链是 EVM 修改版,因此可以使用诸如 ether.js 和 web3.js 之类的工具。这些工具与 SUAVE 链上的智能合约的交互方式与其他任何与 EVM 兼容的链一样,但只能调用非机密函数。SUAVE 链智能合约涉及链上(SUAVE 链)和链下(包括跨链操作)操作,其中链下操作是指机密环境计算。对于机密环境计算,Flashbots 团队提供了两种语言(Go 和 TypeScript)的 SDK,SUAVE 文档中描述了用法。当向 SUAVE 节点发送涉及私有计算的机密计算请求(CCR)时,可以包括 confidentialInputs,从而确保这些参数的明文仅出现在 TEE 环境中。
最后,SUAVE 链的测试网,最初名为 Regil,现在已升级到 Toliman,在 SUAVE 文档中具有详细的部署方法。部署过程和部署后的交互类似于 Ethereum 智能合约部署。
SUAVE 上智能合约的实际操作与 Ethereum 不同。SUAVE 中的主要执行单元称为 Kettle,即 TEE 运行时环境(包括 MEVM 节点和机密数据存储)。当开发人员编写和部署智能合约时,涉及机密计算的用户请求(CCR)由 Kettle 处理。
Kettle 结构如下:
开发人员使用 Solidity 开发和部署应用程序。当请求到达 Kettle 时,MEVM 会处理它们。MEVM 包括 geth 函数,并具有用于存储和检索机密数据的附加预编译。它还处理 SUAVE 链的状态。
Kettle 主要接收和处理机密计算,并处理机密数据存储和检索。对于存储机密数据,该过程涉及前端 SDK 或 suave geth 工具将 CCR 发送到 SUAVE 链上的智能合约。SDK 或 suave geth 工具使用仅在 Kettle 内部显示的数据密钥(对称密钥)对机密数据进行加密。SUAVE RPC 节点仅看到密文。从文档中尚不清楚 Kettle 和节点是否具有一对一的关系。但是,基于已知的加密过程,开发人员可以相信可以确保从前端到 Kettle 的 TEE 环境的数据保护。
机密数据存储在机密数据存储中,访问和修改权限由开发人员在智能合约中指定。Kettle 通过其传输网络发布。如果指定了特定于合约的访问权限,则后续 CCR 请求必须发送到同一 Kettle,因为 Kettle 的数据存储不会全局更新。部署智能合约后,用户可以访问相关的 Kettle(在 CCR 请求中指定)以检索机密数据。智能合约中的数据访问使用存储期间建立的 ID 和密钥。
HTTP 请求和类似的操作也由 Kettle 处理,这本质上是 SUAVE 链之外的单节点工作。鉴于链下资源无法保证幂等性,因此这些操作是依赖于节点的操作。开发人员必须在部署期间指定 Kettle 地址,并且后续的用户 CCR 请求必须包括相关的 Kettle 地址。
开发人员需要注意的关键点:目前,在 Toliman 测试网上,Kettle 不保证 TEE 环境执行。在测试网上开发智能合约时,请确保机密数据的保护,以避免泄漏实际的敏感数据。
通过引入 TEE 环境,SUAVE 链为应用程序开发提供了强大的功能,并具有许多潜在的用例。它简单方便的跨链操作为 dapp 设计创新提供了广阔的空间。
SUAVE 链中能够处理链下资源的 Kettle 设计带来了验证和共识方面的挑战。不诚实的 Kettle 可能会对网络造成破坏。确保 Kettle 不会恶意行事,或者恶意行为会受到惩罚或产生高昂的成本,是需要解决的问题。开发人员热切期待 SUAVE 链的 PoA 共识模型的实际可行性。
- 原文链接: devresearch.substack.com...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!