在 Kakarot ZkEVM 上使用 Starknet Scaffold 构建应用

news2024/11/29 22:28:46

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 合约。

合约解释

  1. L1KakarotMessaging.sol : 该合约通过向 Starknet (L2) 上的合约发送和接收消息来实现 Layer 1 (L1) 和 Layer 2 (L2) 之间的通信。
  2. 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   。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多态的体现

多态:当不同的对象去完成某个行为时会产生出不同的状态多态体现: 在代码运行时,当传递不同类对象时,会调用对应类中的方法。 public class Animal {String name;int age;public Animal(String name, int age){this.name name;t…

docker安装、设置非sudo执行、卸载

安装 sudo snap install docker 设置docker非sudo执行 sudo groupadd docker sudo usermod -aG docker $USER newgrp docker sudo chown root:docker /var/run/docker.sock 卸载docker 1.删除docker及安装时自动安装的所有包 apt-get autoremove docker docker-ce docker-…

Java之多线程的实现(创建)(3种实现方式)(面试高频)

目录 一、多线程的3种实现方式 (1)继承Thread类。 (2)实现Runnable接口。(void run():该方法无返回值、无法抛出异常) (3)实现Callable接口。(V call() throw…

Linux补基础之:网络配置

目录 一、检查主机与虚拟机是否能正常通信 二、网络的连接模式 桥接模式 流程 特点 NAT模式 流程 特点 仅主机 流程 特点 三、修改静态IP 四、可能遇到的问题 防火墙 DNS 五、主机名更改 六、登录服务器 实际的大数据管理中,会有由很多服务器构成的…

Android 原生开发与Harmony原生开发浅析

Android系统 基于Linux ,架构如下 底层 (Linux )> Native ( C层) > FrameWork层 (SystemService) > 系统应用 (闹钟/日历等) 从Android发版1.0开始到现在15,经历了大大小小的变革 从Android6.0以下是个分水岭,6.0之前权限都是直接卸载Manifest中配置 6.0开始 则分普…

初识WebGL

思路&#xff1a; 构建<canvas>画布节点&#xff0c;获取其的实例。使用getWebGLContext() 拿到画布上下文。拿到上下文用clearColor() 设置背景颜色。最后清空canvas画布,是为了清除颜色缓冲区。 html结构&#xff1a; <!DOCTYPE html> <html lang"en&…

w外链如何跳转微信小程序

要创建外链跳转微信小程序&#xff0c;主要有以下几种方法&#xff1a; 使用第三方工具生成跳转链接&#xff1a; 注册并登录第三方外链平台&#xff1a;例如 “W外链” 等工具。前往该平台的官方网站&#xff0c;使用手机号、邮箱等方式进行注册并登录账号。选择创建小程序外…

【华为HCIP实战课程二十一】OSPF区域间汇总配置详解,网络工程师

一、OSPF汇总和默认路由 1、大规模的OSPF网络配置路由汇总,减小路由表的规模。 2、路由汇总讲多条连续的IP前缀汇总成一条路由前缀。 3、可以避免网络中的路由震荡,提高网络的稳定性。 4、ABR/ASBR完成路由汇总。 [R4-ospf-1-area-0.0.0.0]abr-summary 11.1.0.0 255.255.…

在C#中使用指针

C#向开发人员隐藏了大部分基本内存管理操作&#xff0c;因为它使用了垃圾回收器和引用。但是&#xff0c;有时候我们也需要直接访问内存&#xff0c;例如&#xff1a;进行平台调用&#xff0c;性能优化等等。 .Net平台定义了两种主要数据类型&#xff1a;值类型和引用类型&…

前端零基础入门到上班:【Day2】开发环境VSCode安装

VSCode 安装教程&#xff1a;图文保姆教程 引言 在前端开发中&#xff0c;选择合适的代码编辑器是提高工作效率的重要一步。Visual Studio Code&#xff08;简称 VSCode&#xff09;作为一款强大的开源编辑器&#xff0c;因其简洁易用、功能强大、扩展性好而广受开发者喜爱。…

MES系列- 统计过程分析(SPC)实现

MES系列文章目录 ISA-95制造业中企业和控制系统的集成的国际标准-(1) ISA-95制造业中企业和控制系统的集成的国际标准-(2) ISA-95制造业中企业和控制系统的集成的国际标准-(3) ISA-95制造业中企业和控制系统的集成的国际标准-(4) ISA-95制造业中企业和控制系统的集成的国际标准…

面对复杂的软件需求:5大关键策略!

面对软件需求来源和场景的复杂性&#xff0c;有效地管理和处理需求资料是确保项目成功的关键&#xff0c;能够提高需求理解的准确性&#xff0c;增强团队协作和沟通&#xff0c;降低项目风险&#xff0c;提高开发效率。反之&#xff0c;项目可能面临需求理解不准确、团队沟通不…

react 基础学习笔记

1.react 语法 ①数据渲染 函数组件将HTML结构直接写在函数的返回值中 JSX只能有一个根元素 JSX插值写法 插值可以使用的位置 1.标签内容&#xff1b; 2.标签属性 JSX 条件渲染&#xff1a;三目运算符&#xff1b; JSX根据数据进行列表渲染&#xff1a;map()方法&#x…

Elastic Stack - FileBeat 入门浅体验

Filebeat 是 Elastic Stack 中的一个轻量级日志转发器&#xff0c;主要用于收集和转发日志数据。Filebeat 作为代理安装在您的服务器上&#xff0c;可以监控您指定的日志文件或位置&#xff0c;收集日志事件&#xff0c;并将其转发到 Elasticsearch 或 Logstash 进行索引。 一…

XCode16中c++头文件找不到解决办法

XCode16中新建Framework&#xff0c;写完自己的c代码后&#xff0c;提示“<string> file not found”等诸如此类找不到c头文件的错误。 工程结构如下&#xff1a; App是测试应用&#xff0c;BoostMath是Framework。基本结构可以参考官方demo&#xff1a;Mix Swift and …

“循环购体系:创新消费回馈模式引领电商新风尚“

各位听众&#xff0c;你们好&#xff0c;我是吴军&#xff0c;今天我想与你们分享一种创新且引人注目的商业模式——循环购体系。这是一种融合了消费回馈与积分制度的新型购物模式&#xff0c;它在顾客与商家之间搭建了一个全新的、互动性强的桥梁。 在循环购体系的运作中&…

云联网对等连接--实现内网互通

云联网 今天给大家介绍一款产品&#xff0c;腾讯云的云联网。 云联网&#xff1a;为您提供云上私有网络间&#xff08;VPC&#xff09;、VPC 与本地数据中心间&#xff08;IDC&#xff09;内网互联的服务&#xff0c;具备全网多点互联、路由自学习、链路选优及故障快速收敛等…

详细解读 CVPR2024:VideoBooth: Diffusion-based Video Generation with Image Prompts

Diffusion Models专栏文章汇总:入门与实战 前言:今天是程序员节,先祝大家节日快乐!文本驱动的视频生成正在迅速取得进展。然而,仅仅使用文本提示并不足以准确反映用户意图,特别是对于定制内容的创建。个性化图片领域已经非常成功了,但是在视频个性化领域才刚刚起步,这篇…

构建自然灾害预警决策一体化平台,筑牢工程安全数字防线

近年来&#xff0c;国家和部委也强调了要切实加强地质灾害监测预警。作为国内智慧应急领域的先行者&#xff0c;Mapmost持续探索利用数字孪生技术&#xff0c;推进自然灾害风险预警精细化&#xff0c;强化对监测数据的综合分析和异常信息研判处置。建立健全区域风险预警与隐患点…

.NET Core WebApi第7讲:项目的发布与部署

一、理解 二、项目的发布与部署 1、点击Publish进行发布 2、等待生成publish文件&#xff0c;如下图 3、把上图中发布的文件在服务器里面装上&#xff0c;即在windows的IIS里把它挂上去。如此便可以直接去访问当前的前/后端了。 &#xff08;1&#xff09; 注意&#xff1a;…