Starknet 和 EVM
我们所知的智能合约世界一直围绕着以太坊虚拟机(EVM),其主要语言是 Solidity。
尽管 Starknet 通过 STARKs 为以太坊开辟了新的可能性,但其缺点是它有一个不同的虚拟机 (CairoVM),这要求开发者学习 Cairo 编程语言才能在 Starknet 上构建。
因此限制了 Starknet DApps 的影响力,并阻止它们接触到 EVM 生态系统。作为 L2,Starknet 的目标是扩展以太坊,但由于 CairoVM 和以太坊虚拟机(EVM)之间的差距,它无法有效地做到这一点。
Kakarot zkEVM
Kakarot zkEVM 旨在弥合 CairoVM 和 EVM 之间的差距。由 Kakarot Labs开发,它是一个使用Cairo
构建的 EVM。
有了 Kakarot,Starknet 成为一个多虚拟机环境,这意味着开发者现在可以在构建应用程序时利用 CairoVM 和 EVM。
这种能力使 Starknet 兼容 EVM,消除了 Solidity 开发者在 Starknet 上构建时学习全新语言的需求。
Kakarot zkEVM 的关键特性
- 敏捷和轻量级:使用 Cairo 构建,Kakarot 将密码学与工程分离,使其更易于审计、扩展和改进。
- 互操作和模块化:Kakarot 支持多虚拟机环境,允许 Solidity 合约与 Cairo 程序交互,反之亦然。
- 高性能:Kakarot 受益于未来 Cairo 堆栈的升级,例如即将发布的 Stwo,这将使 ZK 证明生成性能提高 100–1,000 倍。
有了 Kakarot,开发者可以在 Starknet 上获得新的可能性,而不失去现有的技能,使其成为去中心化应用未来的关键角色。
让我们使用 Starknet Scaffold 编写一个 Solidity 智能合约
上面的标题感觉像是一个梦 😄 — 捏我一下!
什么是 Starknet Scaffold?
Starknet Scaffold由 Horus Labs构建,是一个为在 Starknet 上开发去中心化应用程序(dApps)而设计的工具包。它包括最流行和功能强大的工具,确保你始终拥有最新的开发环境。
Starknet Scaffold 现在支持 Kakarot,使得创建同时适用于 Solidity 和 Cairo 的 DApps 更加简单。你可以使用 Kakarot zkEVM 上包含的入门模板开始构建你的 DApp。
让我们开始吧
我们将通过 Kakarot 以与你与以太坊主网或任何其他基于以太坊的链(使用 Metamask、Rainbow、使用 Foundry 或 Hardhat 构建等)相同的方式与 Starknet MultiVM 进行交互。
**要求
**在我们开始之前,请确保你已安装以下内容:
- Git
- Node
- Docker
- Yarn
设置
打开你的终端并运行以下命令:
npx create-starknet-app
- 输入你的包名称: 例如,
kakarot-DApp
- 选择包类型: 选择
5
代表 kakarot。 - 运行脚手架:
cd kakarot-DApp
npm run start-kakarot
要使其工作,你需要运行 Docker,否则会出现错误。
继续运行命令,你将在终端中看到以下内容,这意味着 kakarot 当前正在你的机器上运行。
编写和部署智能合约
在你的 vscode 中打开我们搭建的文件夹,你将看到如下的文件夹结构。我们有两个包含智能合约的文件夹:
contracts
: 该文件夹包含 Cairo 智能合约。kakarot
: 包含 Solidity 智能合约。
kakarot zkEVM 通过使 Starknet 成为一个多虚拟机环境来增强和扩展 Starknet,这意味着我们可以将 Solidity 和 Cairo 合约部署到 Starknet。
在 package.json
中,你会找到所有可用的脚本,你可以运行这些脚本以使开发过程更轻松
步骤 1:构建和编译智能合约
此命令构建并编译 Cairo 智能合约。
npm run build-contracts
步骤 2:部署 Kakarot L1 消息合约
npm run deploy-kakarot-l1-messaging-contracts-local
此命令在本地部署 L1KakarotMessaging.sol
和 StarknetMessaging.sol
合约。
合约解释
L1KakarotMessaging.sol
: 该合约通过向 Starknet (L2) 上的合约发送和接收消息来实现 Layer 1 (L1) 和 Layer 2 (L2) 之间的通信。StarknetMessaging.sol
: 该合约管理 Layer 1 和 Layer 2 之间消息传递的机制,并负责维护消息的完整性、处理和确保这两个层之间的可靠通信。
步骤 3:部署 EVM 智能合约
让我们在 example
文件夹中部署 counter.sol
合约。确保你的 Docker 正在运行。
本地部署 EVM 合约
在这里,你可以找到在本地部署时可以使用的 rpc 和私钥。
运行以下命令以在本地部署:
npm run deploy-kakarot-evm-contract --contract-path=solidity_contracts/src/examples/Counter.sol:Counter --rpc-url=http://127.0.0.1:3030 --private-key=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
在 Kakarot Sepolia 测试网上部署 EVM 合约
在我们继续之前,请确保将 Kakarot Sepolia添加到你的 Metamask:
Overview | Kakarot ZK-EVM
我将使用 env.example
文件中的 私钥,如果你想使用你的地址进行部署,可以使用连接到你任何 Metamask 地址的私钥。
运行以下命令在 Kakarot Sepolia 测试网上部署:
npm run deploy-kakarot-evm-contract --contract-path=solidity_contracts/src/examples/Counter.sol:Counter --rpc-url=
--private-key=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
让我们使用合约地址验证合约是否已部署0x3Aa5ebB10DC797CAC828524e59A333d0A371443c
在 Kakarot Sepolia 测试网上与 EVM 合约函数交互
让我们增加 Counter.sol
合约的计数器。
cast send 0x3Aa5ebB10DC797CAC828524e59A333d0A371443c "increment()" --rpc-url=https://sepolia-rpc.kakarot.org --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
现在我们已成功与 increment
函数进行了交互。
README.md 文件
打开 kakarot
文件夹中的 README.md 文件,其中包含我们运行的所有命令及更多内容。
总结
我们已成功在 Kakarot Sepolia 测试网上部署并与我们的 Solidity 合约进行了交互。
在本文的下一部分中,我们将演示如何从 Solidity 合约中与 Cairo 合约进行交互。这是不是很令人兴奋?
Kakarot zkEVM 的集成到 Starknet 标志着在 CairoVM 和以太坊虚拟机(EVM)之间架起桥的重要一步。
借助由Horus Labs提供支持的 Starknet Scaffold工具包,开发人员可以高效且简化地编写、部署和交互 Solidity 和 Cairo 智能合约,https://t.me/gtokentool 。