可证明的代码为了让zk-rollup验证其操作的正确性,它必须能够证明,例如交易已正确执行。这是可能的,因为所有底层Protokitrollup代码都是使用o1js编写为zk电路。因此创建可证明的代码,从而产生zk证明。o1js是什么?o1js是由Mina背后的
为了让 zk-rollup 验证其操作的正确性,它必须能够证明,例如交易已正确执行。这是可能的,因为所有底层 Protokit rollup 代码都是使用 o1js 编写为 zk 电路。因此创建可证明的代码,从而产生 zk 证明。
o1js 是由 Mina 背后的团队创建的库,为所有 Protokit 提供支持。它是我们所做的一切的支柱,并为所有与 zk 相关的事物提供了简单的抽象。
您可以在以下位置了解有关 o1js 的更多信息official docs 官方文档. 。
由于 protokit 和 mina 都是 zk 原生的,因此我们必须能够“证明”我们为应用程序编写的所有代码。证明意味着将计算转变为 zk 证明。这需要多个步骤才能完成。
总而言之,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 and watch tests for the `chain` package
pnpm run test --filter=chain
有一个可选的
--watchAll
标志,当文件更改时它将重新运行测试套件。根据您的 shell,您可能需要在任何额外标志前添加额外的
--
前缀,如下所示:pnpm run test --filter=chain -- --watchAll
。这适用于本指南中的所有命令。
# starts sequencer only
pnpm env:inmemory dev --filter chain
# starts UI only
pnpm env:inmemory dev --filter web
打开 http://localhost:3000 使用浏览器查看结果。假设您的设置顺利,您将看到一个示例 UI,可让您与应用程序链进行交互。
或者你可以尝试 http://localhost:8080/graphql 直接与 GraphQL API 浏览器交互。
设置 Auro wallet 如果你还没有。然后在用户界面中连接你的钱包,并从水龙头索取一些代币。
🎉恭喜,您刚刚运行了使用 Protokit 构建的第一个应用程序链! 🎉
要了解有关 Protokit 环境以及如何托管应用程序链的更多信息,请查看starter-kit readme。
完成快速入门设置后,您将得到一个基本的 Protokit 项目。该项目本身是一个 monorepo,包含位于 apps/web
的基于 Next.js/React 的 Web 应用程序,该应用程序连接到 packages/chain
的示例应用程序链。
文件夹结构看起来像这样:
Mina Protocol 与 OpenBuild 携手推出免费的 Web3 开发课程,旨在助力开发者从零开始学习如何在 Mina Protocol 上构建 Web3 应用。即便你之前没有接触过 Web3 技术,只要拥有一定的前端基础,就能顺利掌握开发 Web3 应用的核心技能。该课程不仅能有效提升你的开发能力,还有丰厚的奖学金等你来拿。通过这门课程,你将深入了解 Web3 生态,开启全新的职业发展之路。更多课程信息请点击这里报名学习。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!