1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

よくわからないけどjoltを動かす

Posted at

はじめに

zkVMってなにそれおいしいの?ってレベル感ですが、こういうものがあるよと聞いたので、動かしてみます。

環境

Windows 11です。wsl2でubuntu22.04上で実行します。

動かす

> wsl

rustはインストールされています。では一つ目のコマンドを入力。

$ cargo +nightly install --git https://github.com/a16z/jolt --force --bins jolt
error: toolchain 'nightly-x86_64-unknown-linux-gnu' is not installed

nightly版?のrustが必要みたいです。

$ rustup install nightly
...
  nightly-x86_64-unknown-linux-gnu installed - rustc 1.83.0-nightly (6b9676b45 2024-10-12)
$ rustup default nightly
...
  nightly-x86_64-unknown-linux-gnu unchanged - rustc 1.83.0-nightly (6b9676b45 2024-10-12)
$ rustup toolchain list
stable-x86_64-unknown-linux-gnu
nightly-x86_64-unknown-linux-gnu (default)

これでインストールされたハズなので、一つ目のコマンド再度入力。

$ cargo +nightly install --git https://github.com/a16z/jolt --force --bins jolt
    Updating git repository `https://github.com/a16z/jolt`
error: failed to clone into:

Caused by:
  failed to authenticate when downloading repository: git@github.com:a16z/jolt

  * attempted ssh-agent authentication, but no usernames succeeded: `git`

  if the git CLI succeeds then `net.git-fetch-with-cli` may help here
  https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli

Caused by:
  no authentication methods succeeded

失敗しました。net.git-fetch-with-cliのコンフィグを見ろ、ということでしたので、これを設定します。

$ vi ~/.cargo/config.toml
config.toml
[net]
git-fetch-with-cli = true

さてもう一度一つ目のコマンドを入力します(三回目)。

$ cargo +nightly install --git https://github.com/a16z/jolt --force --bins jolt
...
  run pkg_config fail: Could not run `PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 pkg-config --libs --cflags openssl`
  The pkg-config command could not be found.
...
error: failed to compile

パッケージをインストールします。

$ sudo apt update
sudo apt install pkg-config libssl-dev

(四回目)一つ目のコマンドを入力します。

$ cargo +nightly install --git https://github.com/a16z/jolt --force --bins jolt
...
Installed package `jolt v0.1.0 (https://github.com/a16z/jolt#8f28f258)` (executable `jolt`)

成功!

$ jolt new hello-jolt
$ cd hello-jolt

guest/src/lib.rsには、フィボナッチ数列のコードが書いてあるみたいです。

$ cargo run --release
...
Trace length: 1393
output: 12586269025
valid: true

50番目のフィボナッチ数列を計算するコードが走ると、結果と証明が出力されるみたいです。
コンソールにはその結果と、検証結果が表示されました。

動かしてから調べる

zkVMというのは、ざっくりですが、何かしらの計算を定義すると、SNARKsを使って計算結果とその証明を出力する実行環境なんだと理解しました。

SNARKsというのはzkSNARKsとは違うのか?

for RISC-Vという記述があるけど、TEE関連の技術ですよね、どうしてここでそれが出てくるのだろうか。

via Lookupsという記述もあるが、これは複雑な回路を実装するのを回避するために、事前にインプットとアウトプットの組を計算しておく技術だと理解しています。

WASMビルドして、ブラウザで検証ができるらしい(動かなかった)

wasmオプションを付けてプロジェクトを作成する。

$ jolt new hello-jolt-wasm --wasm
$ cd hello-jolt-wasm

guestの方の編集個所はこんな感じだと思う。

#![cfg_attr(feature = "guest", no_std)]
#![no_main]

- #[jolt::provable]
+ #[jolt::provable(wasm)]
fn fib(n: u32) -> u128 {
    let mut a: u128 = 0;
    let mut b: u128 = 1;
    let mut sum: u128;
    for _ in 1..n {
        sum = a + b;
        a = b;
        b = sum;
    }

    b
}

それで、ビルドコマンドを入れる。

$ jolt build-wasm
Building the project with wasm-pack...
thread 'main' panicked at src/build_wasm.rs:285:10:
Failed to execute wasm-pack command: Os { code: 2, kind: NotFound, message: "No such file or directory" }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

動かなかった。とりあえず、プロジェクトルートにはindex.htmlはできました。ただ、その中でインポートしている./pkg/hello_jolt_wasm.jsは作られなかったので、このhtmlは動かせない。

image.png

ただ、cargo run -rは動いた。ドキュメントにあるようにmain.rsを編集して、

main.rs
use jolt::Serializable;
pub fn main() {
    let (prove_fib, _verify_fib) = guest::build_fib();

    let (_output, proof) = prove_fib(50);

    proof
        .save_to_file("proof.bin")
        .expect("Failed to save proof to file");
}

実行する。

$ cargo run -r
    Finished `release` profile [optimized + debuginfo] target(s) in 1.58s
     Running `target/release/hello-jolt-wasm`
Trace length: 1393

warningもいっぱい出た。とりあえずwarningなので気にしない。

image.png

proof.binも出力されていた。303KBか。

$ ls -l proof.bin
-rw-r--r-- 1 ubuntu ubuntu 309808 Oct 13 15:56 proof.bin

このissueがそれなのだろうか。

おわりに

マジで何もわからない

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?