在 Kakarot ZkEVM 上使用 Starknet Scaffold 构建应用
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 。
相关文章:
在 Kakarot ZkEVM 上使用 Starknet Scaffold 构建应用
Starknet 和 EVM 我们所知的智能合约世界一直围绕着以太坊虚拟机(EVM),其主要语言是 Solidity。 尽管 Starknet 通过 STARKs 为以太坊开辟了新的可能性,但其缺点是它有一个不同的虚拟机 (CairoVM),这要求开发者学习 …...
DBeave如何连接达梦数据库,设置达梦驱动,真酷
前言 我们在使用DBeaver连接数据库时,默认可以连接常用的数据库,如mysql数据库,postgresql数据库,oracle数据库。但是,我们的国产数据库达梦数据库,默认在IDEA里面没有驱动,所以还得配置一下才…...
2024年全球 MoonBit 编程创新赛-零基础早鸟教程-使用wasm4八小时开发井子棋小游戏
前言 本篇文章主要分享 “2024年全球 MoonBit 编程创新赛 游戏赛道”参赛过程中九宫棋游戏的开发技巧和心得。以此抛砖引玉。首先介绍下 MoonBit。 月兔语言 MoonBit 是一个用于云计算和边缘计算的 WebAssembly 端到端的编程语言工具链。 您可以访问 https://try.moonbitlang.…...
机器学习4
第3章 线性模型 3.1 线性模型的基本形式 3.1.1 线性模型的核心公式 线性模型通过属性的线性组合进行预测,其核心公式为: [ f(x) \omega_1 X_1 \omega_2 X_2 … \omega_d X_d b ] 其中: ω 1 , ω 2 , . . . , ω d \omega_1, \omega_…...
Python数值计算(33)——simpson 3/8积分公式
1. 背景知识 既然前的Simpson可以通过使用三个点构造二次曲线近似积分,那么,如果点数增加到了4个,然后不就可以构造三次多项式的曲线,实现对目标值的积分吗? 如果采用和上一节介绍的同样的方法,我们可以推…...
<项目代码>YOLOv8路面垃圾识别<目标检测>
YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...
Java中的注解(白金版)
Spring中常用注解 Springboot中@Validated注解的使用 Swagger中常用注解 @Validate...
actor模型
Actor模型(Actor Model)是一种用于并发计算的数学模型和编程概念,它最早由计算机科学家 Carl Hewitt 等人提出,用于简化对多线程或并发系统的设计和实现。Actor模型在并发编程、分布式系统、消息传递系统等领域具有广泛应用。 核…...
合约门合同全生命周期管理系统:企业智能合同管理的新时代
合约门合同全生命周期管理系统:企业智能合同管理的新时代 1. 引言 随着现代企业的快速发展,合同管理的复杂性日益增加。无论是采购合同、销售合同还是合作协议,合同管理已成为企业运营中至关重要的一环。传统的手工合同管理方式往往效率低下…...
vscode如何debug环境配置?torchrun与deepspeed库又该如何配置?
文章目录 前言一、vscode命令参数传递1、验证参数py文件2、第一种vscode调用方法(launch.json配置)3、第二种vscode调用方法(launch.json配置)二、deepspeed运行py文件代码(deepspeed_test.py)三、deepspeed命令调用(无法debug)四、deepspeed使用vscode进行调试(能debug)五、vs…...
Qt元对象系统 —— 信号与槽
信号与槽讨论的是Qt对象之间的连接与交互。我们就是使用这种方式实现了一个简单的异步调用。换而言之,信号与槽让我们可以不必考虑复杂的调用。只需要当我们需要在程序中表达:“希望在程序中通知一个事件而且按照我们设定的方式给出回应”的时候…...
单细胞配色效果模拟器 | 简陋版(已有颜色数组)
目的:假设你有一组颜色了,怎么模拟查看它们在单细胞DimPlot中的美学效果呢?要足够快,还要尽可能有模拟效果。 1. 尝试1: 随机矩阵,真的UMAP降维后绘图(失败) 造一个随机矩阵,使用S…...
面向对象编程中类与类之间的关系(一)
目录 1.引言 2."有一个"关系 3."是一个"关系(继承) 4.“有一个”与“是一个”的区别 5.not-a关系 6.层次结构 7.多重继承 8.混入类 1.引言 作为程序员,必然会遇到这样的情况:不同的类具有共同的特征,至少看起来彼…...
streamlit 实现 flink SQL运行界面
实现效果 streamlit flink-playground.py 文件如下: import streamlit as st import io import contextlib import sys import os import uuid import subprocess from jinja2 import Templatest.set_page_config(layout"wide")# 设置页面标题 st.title…...
鲸鱼优化算法(Whale Optimization Algorithm, WOA)原理与MATLAB例程
鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种基于鲸鱼捕食行为的智能优化算法。它模拟了座头鲸在狩猎时的“气泡网”捕食策略。 文章目录 1.适应度函数2. 更新公式2.1 突袭行为2.2 螺旋更新3.线性递减参数4. 边界处理 MATLAB 实现示例代码说明…...
MFC七段码显示实例
在MFC中添加iSenvenSegmentAnalogX控件,添加编辑框和按钮实现在编辑框中输入数字点击按钮后数字用七段码显示 1、在对话框中点击右键如下图添加控件和变量 2、在sevenDlg.h中添加代码 public: void ShowInd(int,double);3、在sevenDlg.cpp中添加代码 void CSe…...
【日常知识点】到底推不推荐用JWT?
👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 中级 🙉八股文专题:剑指大厂,手撕 J…...
网络编程项目之FTP服务器
项目介绍 模拟FTP核心原理:客户端连接服务器后,向服务器发送一个文件。文件名可以通过参数指定,服务器端接收客户端传来的文件(文件名随意),如果文件不存在自动创建文件,如果文件存在࿰…...
SpringBoot02:第一个springboot程序
3、第一个springboot程序 3.1、准备工作 我们将学习如何快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。 我的环境准备: java version "…...
快速入门HTML
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 目录 第一个html文件 标签 h1~h6 p >段落标签 br > 换行标签 img >图片标签 a >超链接标签 表格标签 表单标签 表单控件 form表单 ⽆语义标签:div&span 综…...
【搭建单双目散斑结构光Demo】
介绍 最近搭了一个用于研究的单目散斑结构光的硬件Demo。发射端使用VCSEL模组投影散斑,接收端使用工业相机采集图像。工业相机曝光时输出同步信号给驱动板,驱动板控制VCSEL发光投射出散斑图案,同步时间精度可以达到十微秒。也可以配两个工业…...
别再傻傻分不清了!IM和RTC到底差在哪?从微信聊天到腾讯会议的技术选择
IM与RTC技术选型指南:从协议栈到商业场景的深度解析 当你的产品经理在白板上画出一个"消息气泡"和一个"视频通话图标"时,技术团队首先需要面对的灵魂拷问是:这到底该用IM架构还是RTC架构?2019年某在线教育初创…...
告别重复代码:BaseMapperPlus在SpringBoot项目中的5个高级用法
BaseMapperPlus实战:SpringBoot项目中提升开发效率的5个高阶技巧 在SpringBoot项目中使用MyBatis-Plus进行数据持久层开发时,BaseMapperPlus作为社区广泛采用的扩展接口,能显著减少模板代码。本文将分享五个实际业务场景中的高阶用法…...
PlayCover深度技术解析:如何在M系列Mac上实现iOS游戏原生运行体验
PlayCover深度技术解析:如何在M系列Mac上实现iOS游戏原生运行体验 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover PlayCover作为一款创新的开源工具,让Apple Silicon Mac用户能…...
MambaAD实战:5分钟搞定工业缺陷检测的SoTA模型部署(附代码)
MambaAD工业缺陷检测实战:从模型原理到产线部署全指南 引言:当状态空间模型遇见工业质检 在液晶面板生产线上,一个0.1mm的亮点缺陷可能导致整批产品报废;在汽车零部件铸造车间,细微的表面裂纹可能引发严重的安全隐患。…...
MobaXterm远程连接频繁掉线?3个SSH保活设置让你告别断连烦恼
MobaXterm远程连接频繁掉线?3个SSH保活设置让你告别断连烦恼 当你在深夜调试代码,或是处理关键服务器运维任务时,突然弹出的"Connection closed"提示足以让人抓狂。MobaXterm作为Windows平台最受欢迎的全能终端工具,其免…...
Ryujinx:高性能Nintendo Switch模拟器技术指南
Ryujinx:高性能Nintendo Switch模拟器技术指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx是一款采用C#开发的开源Nintendo Switch模拟器,它通过精确…...
华为交换机流量统计配置全攻略:从ACL到流策略的保姆级教程
华为交换机流量统计配置全攻略:从ACL到流策略的保姆级教程 在网络运维工作中,流量统计是排查故障、优化性能的基础技能。想象一下这样的场景:某天凌晨,核心业务突然出现访问延迟,你需要快速判断是服务器问题还是网络链…...
云服务器购买怎么选?2026云服务器优惠与租赁指南
在AI创作、3D渲染、远程办公快速发展的今天,「云服务器购买」「云服务器租赁」已经成为越来越多个人和企业的刚需。但面对复杂的配置和价格体系,很多人都会问:👉 到底怎么选最划算? 👉 有没有长期稳定又有“…...
Original PIPE vs. Serdes PIPE: Understanding the Key Differences in PHY Interface Design
1. 从零理解PIPE接口:物理层设计的通用语言 第一次接触PIPE接口时,我完全被各种缩写搞晕了。直到在某个PCIe项目中被时序问题折磨了整整两周后,才真正明白这个接口的重要性。简单来说,PIPE(PHY Interface for PCI Expr…...
