diff --git a/Cargo.lock b/Cargo.lock index 29b2498..53b2b8a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -40,9 +40,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "blake3" -version = "1.5.5" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" dependencies = [ "arrayref", "arrayvec", @@ -51,17 +51,11 @@ dependencies = [ "constant_time_eq", ] -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "cc" -version = "1.2.2" +version = "1.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" +checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" dependencies = [ "shlex", ] @@ -80,27 +74,21 @@ checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - -[[package]] -name = "gcd" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", @@ -109,18 +97,18 @@ dependencies = [ [[package]] name = "itertools" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "lazy_static" @@ -130,15 +118,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.167" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "log" -version = "0.4.22" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "matchers" @@ -173,7 +161,6 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", - "rand", ] [[package]] @@ -194,23 +181,11 @@ dependencies = [ "autocfg", ] -[[package]] -name = "nums" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3c74f925fb8cfc49a8022f2afce48a0683b70f9e439885594e84c5edbf5b01" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", - "rand", -] - [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "overload" @@ -221,7 +196,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "p3-field", "p3-matrix", @@ -230,21 +205,20 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "p3-field", "p3-mds", "p3-monty-31", "p3-poseidon2", "p3-symmetric", - "rand", - "serde", + "rand 0.9.1", ] [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "blake3", "p3-symmetric", @@ -254,7 +228,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -266,7 +240,7 @@ dependencies = [ [[package]] name = "p3-circle" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "p3-challenger", @@ -284,7 +258,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "p3-challenger", @@ -298,7 +272,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "p3-field", @@ -311,16 +285,14 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "num-bigint", - "num-integer", - "num-traits", - "nums", "p3-maybe-rayon", "p3-util", - "rand", + "paste", + "rand 0.9.1", "serde", "tracing", ] @@ -328,7 +300,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "p3-challenger", @@ -339,7 +311,7 @@ dependencies = [ "p3-matrix", "p3-maybe-rayon", "p3-util", - "rand", + "rand 0.9.1", "serde", "tracing", ] @@ -347,7 +319,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "num-bigint", "p3-dft", @@ -356,14 +328,15 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "paste", + "rand 0.9.1", "serde", ] [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "p3-field", "p3-matrix", @@ -374,9 +347,8 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ - "itertools", "p3-field", "p3-symmetric", "p3-util", @@ -386,13 +358,13 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "p3-field", "p3-maybe-rayon", "p3-util", - "rand", + "rand 0.9.1", "serde", "tracing", "transpose", @@ -401,26 +373,24 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ - "itertools", "p3-dft", "p3-field", - "p3-matrix", "p3-symmetric", "p3-util", - "rand", + "rand 0.9.1", ] [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "p3-commit", @@ -429,7 +399,7 @@ dependencies = [ "p3-maybe-rayon", "p3-symmetric", "p3-util", - "rand", + "rand 0.9.1", "serde", "tracing", ] @@ -437,26 +407,26 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "num-bigint", "p3-dft", "p3-field", "p3-matrix", - "p3-maybe-rayon", "p3-mds", "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "paste", + "rand 0.9.1", "serde", ] [[package]] name = "p3-monty-31" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "num-bigint", @@ -468,7 +438,8 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "paste", + "rand 0.9.1", "serde", "tracing", "transpose", @@ -477,30 +448,30 @@ dependencies = [ [[package]] name = "p3-poseidon" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "p3-field", "p3-mds", "p3-symmetric", - "rand", + "rand 0.9.1", ] [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ - "gcd", "p3-field", "p3-mds", "p3-symmetric", - "rand", + "p3-util", + "rand 0.9.1", ] [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "p3-field", @@ -510,7 +481,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "itertools", "p3-air", @@ -528,40 +499,46 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/Plonky3/Plonky3.git#e61ed4aed488f8cef5618914042d8eb515b74ebb" +source = "git+https://github.com/Plonky3/Plonky3.git#e938782a659228559ae7919d1d59c2f33facdf38" dependencies = [ "serde", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pin-project-lite" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -574,7 +551,16 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_core 0.9.3", ] [[package]] @@ -584,7 +570,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -596,6 +582,12 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" + [[package]] name = "regex" version = "1.11.1" @@ -642,24 +634,24 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "serde" -version = "1.0.215" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -668,9 +660,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.133" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -695,9 +687,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "strength_reduce" @@ -707,9 +699,9 @@ checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" [[package]] name = "syn" -version = "2.0.90" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -841,9 +833,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "useless-vm" @@ -869,7 +861,7 @@ dependencies = [ "p3-symmetric", "p3-uni-stark", "p3-util", - "rand", + "rand 0.8.5", "serde", "serde_json", "tracing-forest", @@ -878,9 +870,9 @@ dependencies = [ [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "wasi" @@ -912,19 +904,18 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index c2ed7e5..3e21cdd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "useless-vm" version = "0.1.0" -edition = "2021" +edition = "2024" [dependencies] serde = { version = "1.0", features = ["derive"] } @@ -26,6 +26,6 @@ p3-poseidon = { git = "https://github.com/Plonky3/Plonky3.git" } p3-poseidon2 = { git = "https://github.com/Plonky3/Plonky3.git" } p3-symmetric = { git = "https://github.com/Plonky3/Plonky3.git" } p3-uni-stark = { git = "https://github.com/Plonky3/Plonky3.git" } -rand = "0.8.5" -tracing-subscriber = { version = "0.3.17", features = ["std", "env-filter"] } -tracing-forest = { version = "0.1.6", features = ["ansi", "smallvec"] } \ No newline at end of file +rand = "0.8" +tracing-subscriber = { version = "0.3", features = ["std", "env-filter"] } +tracing-forest = { version = "0.1", features = ["ansi", "smallvec"] } diff --git a/README.md b/README.md index 26dfffb..5b1a1b6 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ This repository contains a minimalistic and educational Zero-Knowledge Virtual M --- ## Table of Contents + 1. [Introduction](#introduction) 2. [Architecture Overview](#architecture-overview) 3. [Components](#components) @@ -19,7 +20,9 @@ This repository contains a minimalistic and educational Zero-Knowledge Virtual M --- ## Introduction + The Useless ZKVM is a toy implementation designed to: + - Execute a stack-based virtual machine program. - Capture the execution trace for each instruction. - Generate a STARK proof for the correctness of the execution. @@ -31,7 +34,9 @@ It utilizes Plonky3 libraries to handle the algebraic and cryptographic operatio ## Architecture Overview ### 1. **Virtual Machine (VM)** + The VM is a stack-based execution environment. It executes a program consisting of basic arithmetic instructions like: + - `Push`: Push a value onto the stack. - `Add`: Add the top two stack values. - `Sub`: Subtract the second stack value from the top. @@ -39,15 +44,19 @@ The VM is a stack-based execution environment. It executes a program consisting - `Div`: Divide the second stack value by the top. The VM maintains: + - A **stack** (fixed size of 4 elements). - A **program counter (IP)** to track the current instruction. - A **trace log** of states for every instruction executed. ### 2. **AIR (Algebraic Intermediate Representation)** + The AIR defines constraints for the VM's execution trace. It ensures that the transitions between states in the trace adhere to the VM's instruction semantics. Each operation (e.g., addition, subtraction) is modeled using polynomial constraints. ### 3. **Trace Generation** + The VM outputs an execution trace, which is a sequence of states. Each state captures: + - The stack values. - The current instruction being executed. - Auxiliary data like remainder values for division. @@ -55,7 +64,9 @@ The VM outputs an execution trace, which is a sequence of states. Each state cap This trace is later extended and padded for compatibility with the STARK proving system. ### 4. **Prover** + The prover: + 1. Accepts the execution trace from the VM. 2. Constructs a STARK proof using the Plonky3 library. 3. Verifies the proof by checking that the trace satisfies the AIR constraints. @@ -65,7 +76,9 @@ The prover: ## Components ### Virtual Machine (VM) + - **Core Operations:** + - Executes stack operations using predefined instructions. - Maintains a state log for each executed instruction. @@ -75,16 +88,19 @@ The prover: - `get_trace`: Outputs the full execution trace. ### AIR (Algebraic Intermediate Representation) + - Constraints ensure correct state transitions for each instruction type. - Example constraints: - **Addition:** The sum of the top two stack values equals the next stack value. - **Push:** Ensures the correct value is pushed onto the stack. ### Trace Generation + - Captures stack values and auxiliary data at each step. - Pads the trace to ensure compatibility with STARK requirements. ### Prover + - Uses Plonky3’s STARK libraries to generate and verify proofs. - Components include: - **FRI Configuration**: Specifies parameters for the proof. @@ -94,15 +110,19 @@ The prover: --- ## How It Works + 1. **Program Execution**: + - A sequence of instructions is executed in the VM. - The state of the VM is logged after each instruction. 2. **Trace Construction**: + - The VM generates a trace capturing each state transition. - The trace is extended and padded to fit STARK requirements. 3. **Proof Generation**: + - The AIR defines constraints that the trace must satisfy. - The prover constructs a STARK proof, ensuring the trace adheres to the AIR constraints. @@ -114,6 +134,7 @@ The prover: ## Step-by-Step Guide 1. **Create a Program**: + - Define a sequence of instructions, e.g.: ```rust let program = vec![ @@ -126,18 +147,21 @@ The prover: ``` 2. **Initialize the VM**: + - Pass the program to the `VM`: ```rust let mut vm = VM::new(program); ``` 3. **Run the VM**: + - Execute the program and capture the trace: ```rust vm.run(); ``` 4. **Generate the Proof**: + - Use the AIR to construct a proof: ```rust let vmair = VMAir {}; @@ -153,10 +177,11 @@ The prover: --- ## Conclusion + The Useless ZKVM demonstrates the core principles of zero-knowledge virtual machines: + - Trace construction from program execution. - Constraint satisfaction using AIR. - Proof generation and verification using STARKs. This project is an educational tool, not intended for production use, and serves as a stepping stone for understanding the fundamentals of ZKVMs. - diff --git a/src/lib.rs b/src/lib.rs index 2e543a7..a809bf3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,27 +1,27 @@ mod p3; mod vm; +#[cfg(test)] mod test { - use p3_field::{extension::BinomialExtensionField, Field, FieldAlgebra, PrimeField32}; + use p3_field::PrimeCharacteristicRing; use p3_mersenne_31::Mersenne31; use crate::{ p3::VMAir, vm::{Instructions, VM}, }; - #[test] fn test_end_to_end() { //Generating the trace for the required program let program = vec![ - Instructions::Push(Mersenne31::from_canonical_u32(10)), // Push 10 - Instructions::Push(Mersenne31::from_canonical_u32(20)), // Push 20 + Instructions::Push(Mersenne31::from_u32(10)), // Push 10 + Instructions::Push(Mersenne31::from_u32(20)), // Push 20 Instructions::Add, - Instructions::Push(Mersenne31::from_canonical_u32(40)), // Push 40 + Instructions::Push(Mersenne31::from_u32(40)), // Push 40 Instructions::Sub, - Instructions::Push(Mersenne31::from_canonical_u32(2)), // Push 2 + Instructions::Push(Mersenne31::from_u32(2)), // Push 2 Instructions::Mul, - Instructions::Push(Mersenne31::from_canonical_u32(23)), // Push 23 + Instructions::Push(Mersenne31::from_u32(23)), // Push 23 Instructions::Div, ]; let mut vm = VM::new(program); @@ -32,6 +32,6 @@ mod test { //Generating proofs for the program let vmair = VMAir {}; - vmair.generate_proof(vm); + vmair.generate_proof(vm).expect("end-to-end proof generation") } } diff --git a/src/p3.rs b/src/p3.rs index 6e188bc..d08c4ab 100644 --- a/src/p3.rs +++ b/src/p3.rs @@ -1,4 +1,4 @@ -use std::{fs::File, io::Read, marker::PhantomData}; +use std::marker::PhantomData; use p3_air::{Air, AirBuilder, BaseAir}; use p3_challenger::{HashChallenger, SerializingChallenger32}; @@ -10,8 +10,8 @@ use p3_keccak::Keccak256Hash; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_merkle_tree::MerkleTreeMmcs; use p3_mersenne_31::Mersenne31; -use p3_symmetric::{CompressionFunctionFromHasher, SerializingHasher32}; -use p3_uni_stark::{prove, verify, Proof, StarkConfig}; +use p3_symmetric::{CompressionFunctionFromHasher, SerializingHasher}; +use p3_uni_stark::{prove, verify, PcsError, StarkConfig, VerificationError}; use crate::vm::VM; @@ -22,13 +22,23 @@ impl BaseAir for VMAir { 11 } } +type Val = Mersenne31; +type Challenge = BinomialExtensionField; +type ByteHash = Keccak256Hash; +type FieldHash = SerializingHasher; +type MyCompress = CompressionFunctionFromHasher; +type ValMmcs = MerkleTreeMmcs; +type ChallengeMmcs = ExtensionMmcs; +type Challenger = SerializingChallenger32>; +type Pcs = CirclePcs; +#[allow(dead_code)] +type MyConfig = StarkConfig; impl Air for VMAir { fn eval(&self, builder: &mut AB) { let main = builder.main(); - let local = main.row_slice(0); - let next = main.row_slice(1); - + let local = main.row_slice(0).unwrap(); + let next = main.row_slice(1).unwrap(); builder.when_first_row().assert_zero( local[0] + local[1] @@ -81,24 +91,16 @@ impl Air for VMAir { } impl VMAir { - pub fn generate_proof(&self, vm: VM) { - type Val = Mersenne31; - type Challenge = BinomialExtensionField; - type ByteHash = Keccak256Hash; - type FieldHash = SerializingHasher32; + pub fn generate_proof(&self, vm: VM) -> Result<(), VerificationError>> { let byte_hash = ByteHash {}; let field_hash = FieldHash::new(byte_hash); - type MyCompress = CompressionFunctionFromHasher; let compress = MyCompress::new(byte_hash); - type ValMmcs = MerkleTreeMmcs; let val_mmcs = ValMmcs::new(field_hash, compress); - type ChallengeMmcs = ExtensionMmcs; let challenge_mmcs = ChallengeMmcs::new(val_mmcs.clone()); - type Challenger = SerializingChallenger32>; let mut challenger = Challenger::from_hasher(vec![], byte_hash); let fri_config = FriConfig { @@ -106,21 +108,20 @@ impl VMAir { num_queries: 40, proof_of_work_bits: 8, mmcs: challenge_mmcs, + log_final_poly_len: todo!(), }; - type Pcs = CirclePcs; let pcs = Pcs { mmcs: val_mmcs, fri_config, _phantom: PhantomData, }; - type MyConfig = StarkConfig; - let config = MyConfig::new(pcs); + let config = MyConfig::new(pcs, challenger); let trace = get_trace(vm); - let proof = prove(&config, self, &mut challenger, trace, &vec![]); - verify(&config, self, &mut challenger, &proof, &vec![]); + let proof = prove(&config, self, trace, &vec![]); + verify(&config, self, &proof, &vec![]) } } @@ -131,7 +132,7 @@ pub fn get_trace(vm: VM) -> RowMajorMatrix { let mut final_trace = Vec::with_capacity(trace.len() * 11); for i in trace.iter() { for j in i.iter() { - final_trace.push(F::from_canonical_u32(j.as_canonical_u32())); + final_trace.push(F::from_u32(j.as_canonical_u32())); } } diff --git a/src/vm.rs b/src/vm.rs index 1a4ede0..7b496b8 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -1,6 +1,4 @@ -use std::{collections::HashMap, fs::File, io::Write}; - -use p3_field::FieldAlgebra; +use p3_field::PrimeCharacteristicRing; use p3_mersenne_31::Mersenne31; #[derive(Debug, Clone, PartialEq)] @@ -29,11 +27,11 @@ pub struct VM { } impl VM { - pub fn new(insruction: Vec) -> Self { + pub fn new(instruction: Vec) -> Self { Self { stack: [Mersenne31::ZERO; 4], sp: 0, - instructions: insruction, + instructions: instruction, ip: 0, trace: vec![], } @@ -82,7 +80,7 @@ impl VM { &mut self, operation: F, sub_operation: Option, - ) -> Result<(Mersenne31), String> + ) -> Result where F: Fn(Mersenne31, Mersenne31) -> Mersenne31, G: Fn(Mersenne31, Mersenne31) -> Mersenne31, @@ -102,7 +100,7 @@ impl VM { } self.stack[0] = result; self.stack[3] = Mersenne31::ZERO; - Ok((extra_data)) + Ok(extra_data) } pub fn get_trace(&self) -> Vec<[Mersenne31; 11]> { @@ -190,10 +188,9 @@ impl VM { } } +#[cfg(test)] mod tests { - use core::error; - - use p3_field::FieldAlgebra; + use p3_field::PrimeCharacteristicRing; use p3_mersenne_31::Mersenne31; use crate::vm::{Instructions, VM}; @@ -201,8 +198,8 @@ mod tests { #[test] fn check_add_operation() { let program = vec![ - Instructions::Push(Mersenne31::from_canonical_u32(10)), // Push 10 - Instructions::Push(Mersenne31::from_canonical_u32(20)), // Push 20 + Instructions::Push(Mersenne31::from_u32(10)), // Push 10 + Instructions::Push(Mersenne31::from_u32(20)), // Push 20 Instructions::Add, // Add top two values (10 + 20) ]; @@ -215,7 +212,7 @@ mod tests { assert_eq!( vm.stack, [ - Mersenne31::from_canonical_u32(30), + Mersenne31::from_u32(30), Mersenne31::ZERO, Mersenne31::ZERO, Mersenne31::ZERO @@ -226,8 +223,8 @@ mod tests { #[test] fn check_sub_operation() { let program = vec![ - Instructions::Push(Mersenne31::from_canonical_u32(10)), // Push 10 - Instructions::Push(Mersenne31::from_canonical_u32(20)), // Push 20 + Instructions::Push(Mersenne31::from_u32(10)), // Push 10 + Instructions::Push(Mersenne31::from_u32(20)), // Push 20 Instructions::Sub, // Sub top two values (20-10) ]; @@ -240,7 +237,7 @@ mod tests { assert_eq!( vm.stack, [ - Mersenne31::from_canonical_u32(10), + Mersenne31::from_u32(10), Mersenne31::ZERO, Mersenne31::ZERO, Mersenne31::ZERO @@ -251,8 +248,8 @@ mod tests { #[test] fn check_mul_operation() { let program = vec![ - Instructions::Push(Mersenne31::from_canonical_u32(10)), // Push 10 - Instructions::Push(Mersenne31::from_canonical_u32(20)), // Push 20 + Instructions::Push(Mersenne31::from_u32(10)), // Push 10 + Instructions::Push(Mersenne31::from_u32(20)), // Push 20 Instructions::Mul, // Mul top two values (10 * 20) ]; @@ -265,7 +262,7 @@ mod tests { assert_eq!( vm.stack, [ - Mersenne31::from_canonical_u32(200), + Mersenne31::from_u32(200), Mersenne31::ZERO, Mersenne31::ZERO, Mersenne31::ZERO @@ -276,8 +273,8 @@ mod tests { #[test] fn check_div_operation() { let program = vec![ - Instructions::Push(Mersenne31::from_canonical_u32(10)), // Push 10 - Instructions::Push(Mersenne31::from_canonical_u32(20)), // Push 20 + Instructions::Push(Mersenne31::from_u32(10)), // Push 10 + Instructions::Push(Mersenne31::from_u32(20)), // Push 20 Instructions::Div, // Div top two values (20/10) ]; @@ -290,7 +287,7 @@ mod tests { assert_eq!( vm.stack, [ - Mersenne31::from_canonical_u32(2), + Mersenne31::from_u32(2), Mersenne31::ZERO, Mersenne31::ZERO, Mersenne31::ZERO