以太坊的成功催生了一个繁荣的去中心化应用生态系统,但扩展性问题也日益显现。开发人员面临着一个艰难的选择:要么限制其应用的功能和数据丰富性,要么承担过高的Gas费用或Gas限制的负担。如果有一种方法可以让开发人员绕过这些限制呢?
RISC Zero推出的基于Alloy的视图调用证明库Steel,在开发人员与以太坊L1或基于EVM的链交互方式上带来了巨大变化。通过利用零知识证明和RISC Zero zkVM的强大功能,Steel使开发人员能够以可扩展、安全且经济高效的方式执行视图调用,并可验证地读取和计算以太坊的状态。
Steel 弥合了以太坊应用开发与零知识技术之间的差距,使开发人员能够更轻松地在智能合约中利用零知识证明的强大功能。结合 RISC Zero zkVM 的能力,Steel 使开发人员能够在以太坊 L1 或任何 EVM 等效链上构建更安全、可扩展且高效的应用。
使用 Steel,开发人员可以实现以下功能:
使用 Steel,执行视图调用就像指定所需的 Solidity 方法一样简单。无论是检索 ERC-20 代币余额(示例)还是访问以太坊状态的任何方面,Steel 都简化了这一过程,同时通过与 RISC Zero zkVM 的无缝集成确保安全性和高效性。我们的测试显示,Steel 能够在单个视图调用中处理超过 10 万次 SLOAD 操作,这可能在主网上节省数千美元的 Gas 费用。我们可以在大约 15 分钟内使用 Bonsai 证明这一点。这至少需要 2.1 亿 Gas,超过区块限制的 7 倍。
在下面的代码片段中,我们演示了使用Steel在以太坊上部署的ERC-20合约上证明特定地址的余额的过程。这个示例展示了开发人员如何利用Steel在zkVM的限制内与链上以太坊数据进行交互。您可以在这里找到完整的代码。
定义视图函数签名
首先使用sol!宏定义ERC-20 balanceOf函数签名。这将解析Solidity语法以生成相应的Rust结构体,该结构体实现了SolCall trait。这个结构体可以用于调用balanceOf方法,该方法接受一个帐户地址,并返回相应的ERC-20代币余额。
准备调用
接下来,通过实例化balanceOfCall结构体并设置目标账户地址来设置调用。此外,定义要查询的合约地址和调用者地址的常量。
在Main中执行调用
Main会在zkVM中执行,生成零知识证明。它首先读取输入环境,然后构造一个ViewCallEnv对象,确保当前状态与预期的状态根匹配。在提交相关的区块哈希和编号之后,执行视图调用,并打印余额。
Steel通过三个简单的步骤简化了在RISC Zero zkVM中证明Solidity代码执行的过程:
传统的存储证明需要开发人员手动选择智能合约使用的存储槽,并重新实现智能合约逻辑。而使用Steel,所有存储槽都是根据视图调用的执行自动发现和获取的。这节省了开发人员大量的时间,并减少了实现错误的空间,降低了安全漏洞的风险。
在以太坊智能合约中使用blockhash操作码进行验证时,验证的提交必须引用不超过 256 个区块的区块哈希。考虑到平均区块时间为 12 秒,这将在大约 50 分钟的时间内设置一个狭窄的时间范围来完成证明生成,并确认验证交易被包含在一个区块中。
当需要在链上使用超过 256 个区块的已验证区块哈希时,可以使用以下几种策略之一:
我们设想未来会实现链下计算与链上验证的无缝集成。Steel 是我们为实现这一愿景所作出的贡献,它使开发人员能够可验证地访问以太坊的完整历史并在zkVM内进行计算,从而创建下一波数据丰富且功能更强大的链上应用程序。
Steel是RISC Zero致力于推出zkVM 1.0的关键组成部分,这是实现廉价、安全的链上证明验证和通用零知识证明的重要里程碑。立即开始使用Steel,访问我们的GitHub存储库获取文档、代码示例和资源,帮助您将Steel集成到您的项目中。
以太坊的成功催生了一个繁荣的去中心化应用生态系统,但扩展性问题也日益显现。开发人员面临着一个艰难的选择:要么限制其应用的功能和数据丰富性,要么承担过高的Gas费用或Gas限制的负担。如果有一种方法可以让开发人员绕过这些限制呢?
RISC Zero推出的基于Alloy的视图调用证明库Steel,在开发人员与以太坊L1或基于EVM的链交互方式上带来了巨大变化。通过利用零知识证明和RISC Zero zkVM的强大功能,Steel使开发人员能够以可扩展、安全且经济高效的方式执行视图调用,并可验证地读取和计算以太坊的状态。
Steel 弥合了以太坊应用开发与零知识技术之间的差距,使开发人员能够更轻松地在智能合约中利用零知识证明的强大功能。结合 RISC Zero zkVM 的能力,Steel 使开发人员能够在以太坊 L1 或任何 EVM 等效链上构建更安全、可扩展且高效的应用。
使用 Steel,开发人员可以实现以下功能:
使用 Steel,执行视图调用就像指定所需的 Solidity 方法一样简单。无论是检索 ERC-20 代币余额(示例)还是访问以太坊状态的任何方面,Steel 都简化了这一过程,同时通过与 RISC Zero zkVM 的无缝集成确保安全性和高效性。我们的测试显示,Steel 能够在单个视图调用中处理超过 10 万次 SLOAD 操作,这可能在主网上节省数千美元的 Gas 费用。我们可以在大约 15 分钟内使用 Bonsai 证明这一点。这至少需要 2.1 亿 Gas,超过区块限制的 7 倍。
在下面的代码片段中,我们演示了使用Steel在以太坊上部署的ERC-20合约上证明特定地址的余额的过程。这个示例展示了开发人员如何利用Steel在zkVM的限制内与链上以太坊数据进行交互。您可以在这里找到完整的代码。
定义视图函数签名
首先使用sol!宏定义ERC-20 balanceOf函数签名。这将解析Solidity语法以生成相应的Rust结构体,该结构体实现了SolCall trait。这个结构体可以用于调用balanceOf方法,该方法接受一个帐户地址,并返回相应的ERC-20代币余额。
准备调用
接下来,通过实例化balanceOfCall结构体并设置目标账户地址来设置调用。此外,定义要查询的合约地址和调用者地址的常量。
在Main中执行调用
Main会在zkVM中执行,生成零知识证明。它首先读取输入环境,然后构造一个ViewCallEnv对象,确保当前状态与预期的状态根匹配。在提交相关的区块哈希和编号之后,执行视图调用,并打印余额。
Steel通过三个简单的步骤简化了在RISC Zero zkVM中证明Solidity代码执行的过程:
传统的存储证明需要开发人员手动选择智能合约使用的存储槽,并重新实现智能合约逻辑。而使用Steel,所有存储槽都是根据视图调用的执行自动发现和获取的。这节省了开发人员大量的时间,并减少了实现错误的空间,降低了安全漏洞的风险。
在以太坊智能合约中使用blockhash操作码进行验证时,验证的提交必须引用不超过 256 个区块的区块哈希。考虑到平均区块时间为 12 秒,这将在大约 50 分钟的时间内设置一个狭窄的时间范围来完成证明生成,并确认验证交易被包含在一个区块中。
当需要在链上使用超过 256 个区块的已验证区块哈希时,可以使用以下几种策略之一:
我们设想未来会实现链下计算与链上验证的无缝集成。Steel 是我们为实现这一愿景所作出的贡献,它使开发人员能够可验证地访问以太坊的完整历史并在zkVM内进行计算,从而创建下一波数据丰富且功能更强大的链上应用程序。
Steel是RISC Zero致力于推出zkVM 1.0的关键组成部分,这是实现廉价、安全的链上证明验证和通用零知识证明的重要里程碑。立即开始使用Steel,访问我们的GitHub存储库获取文档、代码示例和资源,帮助您将Steel集成到您的项目中。