在 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 综…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
