Protokit:快速入门

  • King
  • 更新于 2024-12-14 10:47
  • 阅读 235

可证明的代码为了让zk-rollup验证其操作的正确性,它必须能够证明,例如交易已正确执行。这是可能的,因为所有底层Protokitrollup代码都是使用o1js编写为zk电路。因此创建可证明的代码,从而产生zk证明。o1js是什么?o1js是由Mina背后的

可证明的代码 

为了让 zk-rollup 验证其操作的正确性,它必须能够证明,例如交易已正确执行。这是可能的,因为所有底层 Protokit rollup 代码都是使用 o1js 编写为 zk 电路。因此创建可证明的代码,从而产生 zk 证明。

o1js是什么? 

o1js 是由 Mina 背后的团队创建的库,为所有 Protokit 提供支持。它是我们所做的一切的支柱,并为所有与 zk 相关的事物提供了简单的抽象。

您可以在以下位置了解有关 o1js 的更多信息official docs 官方文档. 。 

由于 protokit 和 mina 都是 zk 原生的,因此我们必须能够“证明”我们为应用程序编写的所有代码。证明意味着将计算转变为 zk 证明。这需要多个步骤才能完成。

  1. 我们使用 Protokit 编写业务和协议逻辑。在此过程中,我们将使用 o1js 向开发人员公开的原语。这意味着整数、公钥、哈希函数、条件等的类型。
  2. 我们执行您的代码并将其在幕后翻译为“电路”。电路是应用程序代码的算术表示。对于代码的每次可能执行,此表示都必须相同。这就是为什么我们不能在代码中使用动态有界循环和打字稿 if 语句(尽管有一些技巧可以缓解这种情况)。
  3. 然后该电路用于证明我们的执行并创建 zk-proof(又名 zk-SNARK)。然后,任何其他方都可以使用一个小的“验证密钥”来验证该证明,该密钥也是使用电路生成的。

总而言之,Protokit 使用 o1js 为我们解除了所有与 snark 相关的东西,因此我们可以专注于编写优秀的应用程序。

电路中的编程模式

编写可证明的代码相对简单,但有一些事情需要记住。证明系统/o1js 的性质决定了我们执行的所有代码都必须是静态的,并且对于每个可能的输入都具有完全相同的执行步骤。这产生了一些我们在开发过程中必须注意的警告,例如避免动态大小的计算,如动态循环或“本机”if 语句。

循环

动态大小的循环是不可能的。 然而,我们仍然可以使用一些例外和模式。具体来说,固定有界循环。这意味着只要循环始终运行完全相同数量的迭代,我们就可以创建循环。

第一种模式可以非常安全地使用:

for(const i = 0 ; i < 5 ; i++){
    // Provable code
}

不过,对于第二种模式,我们必须更加小心:

// Precondition: inputs.length is constant
function foo(inputs: Field[]){
    for(const input of inputs){
        // Provable code
    }
}

开发人员必须确保每次调用的输入长度保持相同。如果不这样做,将会导致我们所说的“编译器/证明者差异”,即我们试图证明的电路与最初编译的电路不同。这会在堆栈中抛出一些模糊的错误,因此最好完全避免这些问题。

从逻辑上讲,正确使用此模式还可以使用 forEach 、 map 、 reduce 等方法。

快速入门 

使用 Protokit 开始构建的最快方法是使用starter kit 入门套件。 入门套件提供了monorepo 单一仓库 旨在使用 Protokit 框架启动应用程序链开发。

安装依赖项

在开始使用 Protokit 构建之前,您需要安装以下依赖项:

⚠️ ⚠️  您使用的是 Windows 吗?请使用 WSL 运行下面的命令。

克隆入门套件

# Clone the starter kit
git clone https://github.com/proto-kit/starter-kit my-chain
cd my-chain

# Ensure you're on the right nodejs version and install dependnecies
nvm use
pnpm install

Run the tests 运行测试 

# run and watch tests for the `chain` package
pnpm run test --filter=chain

有一个可选的 --watchAll 标志,当文件更改时它将重新运行测试套件。

根据您的 shell,您可能需要在任何额外标志前添加额外的 -- 前缀,如下所示: pnpm run test --filter=chain -- --watchAll 。这适用于本指南中的所有命令。

运行定序器和 UI

# starts sequencer only
pnpm env:inmemory dev --filter chain

# starts UI only
pnpm env:inmemory dev --filter web

在浏览器中打开演示 UI

打开 http://localhost:3000 使用浏览器查看结果。假设您的设置顺利,您将看到一个示例 UI,可让您与应用程序链进行交互。

或者你可以尝试 http://localhost:8080/graphql 直接与 GraphQL API 浏览器交互。

与演示 UI 交互

设置 Auro wallet 如果你还没有。然后在用户界面中连接你的钱包,并从水龙头索取一些代币。

🎉恭喜,您刚刚运行了使用 Protokit 构建的第一个应用程序链! 🎉

环境、持久性和排序器部署

要了解有关 Protokit 环境以及如何托管应用程序链的更多信息,请查看starter-kit readme

文件夹结构

完成快速入门设置后,您将得到一个基本的 Protokit 项目。该项目本身是一个 monorepo,包含位于 apps/web 的基于 Next.js/React 的 Web 应用程序,该应用程序连接到 packages/chain 的示例应用程序链。

文件夹结构看起来像这样:

  • apps/web
    • containers 
    • async-layout.tsx 异步布局
    • async-page.tsx 异步页面 
    • lib/stores 商店 
    • balances.tsx 余额
    • chain.tsx 链
    • client.tsx 客户端
    • wallet.tsx 钱包
  • packages/chain
    • src
    • balances.ts - 余额
    • runtime.ts - 运行时
    • chain.config.ts - 链配置
    • client.config.ts - 客户端配置
    • test
    • balances.test.ts 余额测试用例

广告分界线

Mina Protocol 与 OpenBuild 携手推出免费的 Web3 开发课程,旨在助力开发者从零开始学习如何在 Mina Protocol 上构建 Web3 应用。即便你之前没有接触过 Web3 技术,只要拥有一定的前端基础,就能顺利掌握开发 Web3 应用的核心技能。该课程不仅能有效提升你的开发能力,还有丰厚的奖学金等你来拿。通过这门课程,你将深入了解 Web3 生态,开启全新的职业发展之路。更多课程信息请点击这里报名学习。

image.png

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
King
King
0x56af...a0dd
擅长Rust/Solidity/FunC/Move开发