fhEVM 协处理器介绍:在以太坊、Base 和其他 EVM 链上运行 FHE 智能合约

  • ZamaFHE
  • 发布于 2024-12-07 10:39
  • 阅读 104

Zama发布了fhEVM Coprocessor,这是一种允许开发者在任何EVM链上构建保密智能合约的工具,无需更改底层协议。它通过符号执行和阈值解密技术,实现了在加密数据上运行智能合约,同时保证了高性能和可扩展性,并提供了使用Solidity进行开发的简易性。


验证,而非信任。 这一直是区块链开发十多年来的核心理念,也是围绕共识、ZK、乐观 Rollup 等所做一切工作的基础。但要求状态更新具有公共可验证性的一个主要问题是,所有链上数据都需要公开可用,这造成了一个看似不可能的两难境地:要么使用公共区块链而没有保密性,要么使用私有区块链而没有可验证性。虽然一些基于 ZK 的协议提供了一定程度的保密性,但它们缺乏使区块链独一无二的最基本特征:可组合性。

为了解决这些问题,Zama 创建了 fhEVM:一种利用 FHE 的新型协议,可在 EVM 链上实现保密的智能合约:

  • 数据(交易输入和链上状态)是加密的:任何人都无法看到它,甚至包括验证者。
  • 加密状态是完全可组合的:智能合约可以在加密数据上运行,就像在明文数据上运行一样,这要归功于 FHE。
  • 隐私是可编程的:智能合约定义了谁可以解密数据,从而可以在链上管理访问控制。网络的解密密钥使用阈值 MPC 协议进行去中心化,避免了信任中心化机构的需要。

我们的第一个实现,在一年前发布,可以处理大约每秒两笔交易,并且需要验证者运行支持 FHE 操作的 EVM 修改版本。虽然这种集成对于新的链或rollup来说很容易,但它阻止了现有的链,如 Ethereum、Base 或 Solana,在没有重大升级和减速的情况下从 FHE 中受益。直到现在。

fhEVM 协处理器

今天,我们宣布 Zama 迄今为止最令人兴奋的产品:fhEVM 协处理器。它允许开发人员在任何 EVM 链上构建保密的智能合约,包括那些本身不支持 FHE 的链,而无需更改底层协议。

作为开发人员,你已经可以使用我们的 Sepolia 协处理器测试网开始构建,Ethereum 和许多其他生态系统也将很快跟进。

我们还进行了重大的性能改进,现在可以处理接近每秒 20 笔交易,比一年前增加了十倍,超过了过去 10 年 Ethereum 的平均吞吐量。换句话说,我们可以端到端加密运行 Ethereum。事实上,我们的新架构具有很强的可扩展性,我们有信心在不久的将来能够实现每秒数百甚至数千笔 FHE 交易,只需添加更多硬件即可。

为了实现这一点,我们必须从头开始彻底改造 fhEVM 堆栈,基于两个核心思想:符号执行和阈值解密。

符号执行

符号执行背后的思想是,每当合约在 L1 上调用 Zama 的 TFHE 库来执行 FHE 操作时,L1 本身不会进行任何实际的 FHE 计算,而是生成一个指向结果的指针,然后由监控 L1 的链下服务器计算该结果。这类似于编程语言中惰性求值的工作方式,并允许将计算推迟到稍后的时间点(在本例中为区块最终确定时)。

这有很多优点:

  • L1 不需要运行昂贵的 FHE 操作或使用特定的硬件
  • L1 不会因 FHE 而减慢速度,因此非 FHE 交易可以像往常一样快速执行
  • FHE 操作可以并行执行,而不是按顺序执行,从而显著提高吞吐量。

由于 L1 上的所有密文都只是指针(实际数据存储在 DA 中),因此可以像常规操作一样链接 FHE 操作,而无需等待之前的操作完成。我们唯一需要等待计算密文的时间是必须解密密文时。

从安全的角度来看,协处理器所做的一切都是公开可验证的,任何人都可以重新计算密文以验证结果。最初,Zama 将运行协处理器,但从长远来看,目标是使任何人都可以竞争执行 FHE 操作,利用 ZK-FHE 来证明正确性。

阈值解密

为了保持链上的可组合性,所有密文都需要在同一公钥下加密。这意味着必须以防止非法解密密文的方式保护私有解密密钥。fhEVM 通过使用专用的阈值 MPC 协议(称为 KMS,即密钥管理服务)在多个参与方之间拆分私钥来解决此问题。

为了使用户或合约解密值,他们首先需要获得 L1 上生成该值的合约的明确允许。要从 KMS 请求解密,他们需要提供一个 Merkle 证明,证明他们被允许在 L1 上执行此操作。

在幕后,Zama 的 KMS 实际上是一个区块链 L1,顶部有一个方便的 Web API。每当应用程序通过 Zama 的 API 请求解密时,就会向 Zama 的 KMS 链进行交易,该链验证证明并运行阈值解密协议。我们将很快分享更多相关信息。

你只需要 Solidity

达到这一点很困难。fhEVM 可能是迄今为止被推向生产的最先进、最复杂的加密协议(我们甚至还没有谈到 KMS 的细节!)。但这正是将隐私和保密性带给链上每个人的必要条件,而又不损害安全性和用户体验。

说到用户体验,任何尝试构建保密 dapps 的人都知道这种体验有多么糟糕:你需要学习一种新语言,思考“电路”,然后在缓慢的笔记本电脑上进行繁重的计算,等等。使用 fhEVM,所有这些都不是必需的。你只需要知道 Solidity,就可以立即开始。例如,考虑一个具有加密余额的 ERC20 代币:

// SPDX-License-Identifier: BSD-3-Clause-Clear
pragma solidity ^0.8.4;

import "fhevm/lib/TFHE.sol";
import { IEncryptedERC20 } from "./IEncryptedERC20.sol";

abstract contract EncryptedERC20 is IEncryptedERC20 {

    uint64 internal _totalSupply;
    string internal _name;
    string internal _symbol;

    // Balances are encrypted
    mapping(address account => euint64 balance) internal _balances;

    /// @notice A mapping of the form mapping(account => mapping(address spender => allowance)).
    mapping(address account => mapping(address spender => euint64 allowance)) internal _allowances;

    // Transfer an encrypted amount
    function transfer(address to, einput encryptedAmount, bytes calldata inputProof) public virtual returns (bool) {
        // Verify the input is correct
        euint64 amount = TFHE.asEuint64(encryptedAmount, inputProof);

        // Check if the user can enough balance, otherwise set the transfer amount to zero
        ebool transferValue = TFHE.select(TFHE.le(amount, _balances[msg.sender]), amount, TFHE.asEuint64(0));

        // Make the transfer
        _balances[to] = TFHE.add(_balances[to], transferValue);
        _balances[from] = TFHE.sub(_balances[from], transferValue);

        // Allow users to see their balances, and the contract to update it
        TFHE.allow(_balances[to], to);
        TFHE.allow(_balances[from], from);
        TFHE.allowThis(_balances[to]);
        TFHE.allowThis(_balances[from]);

        return true;
    }
}

这仅涉及 3 个步骤:

  1. 使用 fhEVM javascript SDK 加密用户的传输金额,然后像往常一样提交交易。
  2. 通过将“uint”类型替换为它们的“euint”FHE 等效类型,将你的 ERC20 合约转换为 FHE 等效合约,然后授予用户解密其余额的权限。
  3. 使用 javascript SDK 解密用户的余额并显示它。

就是这样。它真的就是这么简单。你可以查看文档以获取更多示例。

FHE 是区块链的端到端加密

在区块链应用程序中构建保密性的能力不仅仅是个人隐私的问题。这是实现以前不可能实现的一整套用例的问题。以下是一些示例:

  • 保密的稳定币和代币。 你是否愿意与所有人分享你的银行对账单?可能不会。然而,这正是目前代币发生的情况。但是,使用 FHE,你可以保持余额、传输金额甚至资产的私密性,确保除了你之外,没有人知道你拥有多少。
  • 保密的交换。 DeFi 一直是区块链最成功的用例之一,但它存在两个主要问题:人们不喜欢分享他们拥有的所有内容,而 MEV 使最终用户在链上交换资产的成本很高。FHE 可以通过启用端到端加密交换来解决这两个问题,在这种交换中,金额和可能的资产始终保持私密。
  • 链上信用。 借钱需要收集敏感信息,例如信用评分、身份和财务报表。借助 FHE,这可以在链上实现,因为智能合约可以保密地使用所有数据来确定某人是否具有信用。
  • 保密的治理。 自区块链存在以来,人们一直在探索链上投票的想法,无论是对于 DAO 还是政府。但是,在链上公开投出选票可能会导致偏见、敲诈勒索或贿赂。使用 FHE,选票(和质押的代币数量)可以保持私密,确保只显示最终结果,而不显示个人选票。
  • 链上公司。 如果没有保密承诺,在链上管理公司是不可能的。实际上,诸如资本表、财务报表、董事会投票、客户和员工注册表之类的信息不应公开披露。借助 FHE,所有这些信息都可以保存在链上,从而允许智能合约自动化许多日常公司运营。
  • 用于代币销售的密封投标拍卖。 运行公开代币销售作为密封投标拍卖,以获得更好的价格发现。每个参与者都提交一个加密的投标,其中包含代币数量和他们愿意支付的每个代币的价格。当拍卖结束时,从最高到最低运行投标,直到所有代币都被“购买”。购买最后一个代币的价格是结算价格,无论他们的初始出价如何,所有出价较高的人最终都会实际支付该价格。
  • 可组合的链上身份。 在链下,我们一直都在使用我们的身份,从在线购买产品到预订机票。但是,在链上这样做会泄露敏感信息,例如你的姓名、地址、社会安全号码等。但是,使用 FHE,你可以在链上拥有一个完整的 DID+VC 系统,其中你的身份是加密的,同时与去中心化应用程序完全可组合。就像你可以拥有帐户抽象一样,你现在可以拥有身份抽象。

但是,如果我们超越这些呢?如果 FHE 是在链上运行一切的关键呢?从金钱、金融和身份到公司、选举和游戏,从人工智能、社交媒体和云服务,一直到整个国家及其政府——所有这些都可以在公共区块链上运行,同时进行端到端加密。我们将此愿景称为 HTTPZ:就像 HTTPS 将隐私带到线上一样,HTTPZ 将把隐私带到链上。

HTTPZ 的基础设施已经就绪。我们现在需要的是应用程序,因此,如果你是一名构建者,并且希望实现这一未来,如果你想成为 FHE 的先驱,请与我们联系!

附加链接

  • 原文链接: zama.ai/post/fhevm-copro...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ZamaFHE
ZamaFHE
Zama是一家开源密码学公司,专注于为区块链和人工智能构建最先进的完全同态加密(FHE)解决方案。