From fadacee5c4345aa5aa344ace1bc4f0abc143527b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Garillot?= <4142+huitseeker@users.noreply.github.com> Date: Mon, 17 Jun 2024 10:48:09 -0400 Subject: [PATCH 01/13] chore: check in Cargo.lock (#24) --- .gitignore | 3 +- aptos/Cargo.lock | 11635 ++++++++++++++++ .../signature-verification/Cargo.lock | 692 + aptos/programs/epoch-change/Cargo.lock | 681 + aptos/programs/inclusion/Cargo.lock | 681 + 5 files changed, 13690 insertions(+), 2 deletions(-) create mode 100644 aptos/Cargo.lock create mode 100644 aptos/programs/benchmarks/signature-verification/Cargo.lock create mode 100644 aptos/programs/epoch-change/Cargo.lock create mode 100644 aptos/programs/inclusion/Cargo.lock diff --git a/.gitignore b/.gitignore index 18186847..37283417 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ **/target -Cargo.lock -.idea \ No newline at end of file +.idea diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock new file mode 100644 index 00000000..23aed649 --- /dev/null +++ b/aptos/Cargo.lock @@ -0,0 +1,11635 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" + +[[package]] +name = "abstract-domain-derive" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits", +] + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom 0.2.15", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "alloy" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-contract", + "alloy-core", + "alloy-eips", + "alloy-genesis", + "alloy-provider", + "alloy-rpc-client", + "alloy-serde", + "alloy-signer", + "alloy-signer-wallet", + "alloy-transport-http", + "reqwest 0.12.4", +] + +[[package]] +name = "alloy-consensus" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "serde", + "sha2 0.10.8", +] + +[[package]] +name = "alloy-contract" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-network", + "alloy-primitives", + "alloy-provider", + "alloy-rpc-types", + "alloy-sol-types", + "alloy-transport", + "futures", + "futures-util", + "thiserror", +] + +[[package]] +name = "alloy-core" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5af3faff14c12c8b11037e0a093dd157c3702becb8435577a2408534d0758315" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-types", +] + +[[package]] +name = "alloy-dyn-abi" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6e6436a9530f25010d13653e206fab4c9feddacf21a54de8d7311b275bc56b" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "const-hex", + "itoa", + "serde", + "serde_json", + "winnow 0.6.13", +] + +[[package]] +name = "alloy-eips" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "c-kzg", + "once_cell", + "serde", +] + +[[package]] +name = "alloy-genesis" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-json-abi" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaeaccd50238126e3a0ff9387c7c568837726ad4f4e399b528ca88104d6c25ef" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-json-rpc" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-network" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-json-rpc", + "alloy-primitives", + "alloy-rpc-types", + "alloy-signer", + "async-trait", + "futures-utils-wasm", + "serde", + "thiserror", +] + +[[package]] +name = "alloy-primitives" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f783611babedbbe90db3478c120fb5f5daacceffc210b39adc0af4fe0da70bad" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more", + "hex-literal", + "itoa", + "k256", + "keccak-asm", + "proptest", + "rand 0.8.5", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-provider" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-network", + "alloy-primitives", + "alloy-rpc-client", + "alloy-rpc-types", + "alloy-rpc-types-trace", + "alloy-transport", + "alloy-transport-http", + "async-stream", + "async-trait", + "auto_impl", + "dashmap", + "futures", + "lru 0.12.3", + "reqwest 0.12.4", + "serde_json", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" +dependencies = [ + "alloy-rlp-derive", + "arrayvec 0.7.4", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8037e03c7f462a063f28daec9fda285a9a89da003c552f8637a80b9c8fd96241" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "alloy-rpc-client" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "alloy-transport-http", + "futures", + "pin-project", + "reqwest 0.12.4", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower", + "tracing", + "url", +] + +[[package]] +name = "alloy-rpc-types" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-sol-types", + "itertools 0.12.1", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-rpc-types-trace" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types", + "alloy-serde", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-serde" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-signer" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "async-trait", + "auto_impl", + "elliptic-curve", + "k256", + "thiserror", +] + +[[package]] +name = "alloy-signer-wallet" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "async-trait", + "k256", + "rand 0.8.5", + "thiserror", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bad41a7c19498e3f6079f7744656328699f8ea3e783bdd10d85788cd439f572" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" +dependencies = [ + "alloy-json-abi", + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap 2.2.6", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.66", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" +dependencies = [ + "alloy-json-abi", + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.66", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baa2fbd22d353d8685bd9fee11ba2d8b5c3b1d11e56adb3265fcf1f32bfdf404" +dependencies = [ + "winnow 0.6.13", +] + +[[package]] +name = "alloy-sol-types" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", +] + +[[package]] +name = "alloy-transport" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "base64 0.22.1", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "url", + "wasm-bindgen-futures", +] + +[[package]] +name = "alloy-transport-http" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "reqwest 0.12.4", + "serde_json", + "tower", + "url", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi-escapes" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3c0daaaae24df5995734b689627f8fa02101bc5bbc768be3055b66a010d7af" + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" + +[[package]] +name = "anstyle-parse" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "aptos-abstract-gas-usage" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-gas-schedule", + "aptos-vm-types", + "move-binary-format", +] + +[[package]] +name = "aptos-accumulator" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-types", +] + +[[package]] +name = "aptos-aggregator" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-logger", + "aptos-types", + "bcs 0.1.4", + "claims", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", +] + +[[package]] +name = "aptos-api-types" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-config", + "aptos-crypto", + "aptos-db-indexer", + "aptos-framework", + "aptos-logger", + "aptos-openapi", + "aptos-resource-viewer", + "aptos-storage-interface", + "aptos-types", + "aptos-vm", + "async-trait", + "bcs 0.1.4", + "bytes", + "hex", + "indoc", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "once_cell", + "poem", + "poem-openapi", + "poem-openapi-derive", + "serde", + "serde_json", +] + +[[package]] +name = "aptos-bitvec" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "serde", + "serde_bytes", +] + +[[package]] +name = "aptos-block-executor" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-drop-helper", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "aptos-mvhashmap", + "aptos-types", + "aptos-vm-logging", + "aptos-vm-types", + "arc-swap", + "bcs 0.1.4", + "bytes", + "claims", + "concurrent-queue", + "crossbeam", + "dashmap", + "derivative", + "fail", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", + "num_cpus", + "once_cell", + "parking_lot", + "rand 0.7.3", + "rayon", + "scopeguard", +] + +[[package]] +name = "aptos-block-partitioner" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-logger", + "aptos-metrics-core", + "aptos-types", + "bcs 0.1.4", + "clap 4.5.7", + "dashmap", + "itertools 0.12.1", + "jemallocator", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "once_cell", + "rand 0.7.3", + "rayon", + "serde", +] + +[[package]] +name = "aptos-build-info" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "shadow-rs", +] + +[[package]] +name = "aptos-cached-packages" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-framework", + "aptos-package-builder", + "aptos-types", + "bcs 0.1.4", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "once_cell", +] + +[[package]] +name = "aptos-config" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-global-constants", + "aptos-logger", + "aptos-secure-storage", + "aptos-short-hex-str", + "aptos-temppath", + "aptos-types", + "arr_macro", + "bcs 0.1.4", + "byteorder", + "cfg-if", + "get_if_addrs", + "maplit", + "num_cpus", + "number_range", + "poem-openapi", + "rand 0.7.3", + "serde", + "serde_json", + "serde_merge", + "serde_yaml 0.8.26", + "thiserror", + "url", +] + +[[package]] +name = "aptos-consensus-types" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-bitvec", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-executor-types", + "aptos-infallible", + "aptos-logger", + "aptos-short-hex-str", + "aptos-types", + "bcs 0.1.4", + "fail", + "futures", + "itertools 0.12.1", + "mini-moka", + "mirai-annotations", + "once_cell", + "rand 0.7.3", + "rayon", + "serde", + "tokio", +] + +[[package]] +name = "aptos-crypto" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aes-gcm", + "anyhow", + "aptos-crypto-derive", + "ark-bn254", + "ark-ec", + "ark-ff 0.4.2", + "ark-groth16", + "ark-std 0.4.0", + "base64 0.13.1", + "bcs 0.1.4", + "blst", + "bulletproofs", + "bytes", + "curve25519-dalek 3.2.0", + "curve25519-dalek-ng", + "digest 0.9.0", + "ed25519-dalek", + "ff 0.13.0", + "hex", + "hkdf 0.10.0", + "libsecp256k1", + "merlin", + "more-asserts", + "neptune", + "num-bigint 0.3.3", + "num-integer", + "once_cell", + "p256", + "poseidon-ark", + "proptest", + "proptest-derive", + "rand 0.7.3", + "rand_core 0.5.1", + "ring 0.16.20", + "serde", + "serde-name", + "serde_bytes", + "sha2 0.10.8", + "sha2 0.9.9", + "sha3 0.9.1", + "signature 2.2.0", + "static_assertions", + "thiserror", + "tiny-keccak", + "typenum", + "x25519-dalek", +] + +[[package]] +name = "aptos-crypto-derive" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "aptos-db" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-accumulator", + "aptos-config", + "aptos-crypto", + "aptos-db-indexer", + "aptos-executor", + "aptos-executor-types", + "aptos-experimental-runtimes", + "aptos-infallible", + "aptos-jellyfish-merkle", + "aptos-logger", + "aptos-metrics-core", + "aptos-proptest-helpers", + "aptos-resource-viewer", + "aptos-rocksdb-options", + "aptos-schemadb", + "aptos-scratchpad", + "aptos-storage-interface", + "aptos-temppath", + "aptos-types", + "arc-swap", + "arr_macro", + "bcs 0.1.4", + "byteorder", + "claims", + "dashmap", + "either", + "hex", + "itertools 0.12.1", + "lru 0.7.8", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "num-derive", + "once_cell", + "proptest", + "proptest-derive", + "rayon", + "serde", + "static_assertions", + "status-line", +] + +[[package]] +name = "aptos-db-indexer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-config", + "aptos-logger", + "aptos-resource-viewer", + "aptos-rocksdb-options", + "aptos-schemadb", + "aptos-storage-interface", + "aptos-types", + "bcs 0.1.4", + "bytes", + "dashmap", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "serde", +] + +[[package]] +name = "aptos-dkg" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-runtimes", + "bcs 0.1.4", + "blst", + "blstrs", + "criterion", + "ff 0.13.0", + "group 0.13.0", + "hex", + "merlin", + "more-asserts", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "once_cell", + "pairing 0.23.0", + "rand 0.7.3", + "rand_core 0.5.1", + "rayon", + "serde", + "serde_bytes", + "sha3 0.9.1", + "static_assertions", +] + +[[package]] +name = "aptos-drop-helper" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-infallible", + "aptos-metrics-core", + "once_cell", + "threadpool", +] + +[[package]] +name = "aptos-executor" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-consensus-types", + "aptos-crypto", + "aptos-drop-helper", + "aptos-executor-service", + "aptos-executor-types", + "aptos-experimental-runtimes", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "aptos-scratchpad", + "aptos-storage-interface", + "aptos-types", + "aptos-vm", + "arr_macro", + "bcs 0.1.4", + "bytes", + "dashmap", + "fail", + "itertools 0.12.1", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "once_cell", + "rayon", + "serde", +] + +[[package]] +name = "aptos-executor-service" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-block-partitioner", + "aptos-config", + "aptos-infallible", + "aptos-language-e2e-tests", + "aptos-logger", + "aptos-metrics-core", + "aptos-node-resource-metrics", + "aptos-push-metrics", + "aptos-secure-net", + "aptos-storage-interface", + "aptos-types", + "aptos-vm", + "bcs 0.1.4", + "clap 4.5.7", + "crossbeam-channel", + "ctrlc", + "dashmap", + "itertools 0.12.1", + "num_cpus", + "once_cell", + "rayon", + "serde", + "thiserror", +] + +[[package]] +name = "aptos-executor-test-helpers" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-cached-packages", + "aptos-config", + "aptos-consensus-types", + "aptos-crypto", + "aptos-db", + "aptos-executor", + "aptos-executor-types", + "aptos-sdk", + "aptos-storage-interface", + "aptos-temppath", + "aptos-types", + "aptos-vm", + "aptos-vm-genesis", + "rand 0.7.3", +] + +[[package]] +name = "aptos-executor-types" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-drop-helper", + "aptos-scratchpad", + "aptos-secure-net", + "aptos-storage-interface", + "aptos-types", + "bcs 0.1.4", + "criterion", + "itertools 0.12.1", + "once_cell", + "serde", + "thiserror", +] + +[[package]] +name = "aptos-experimental-runtimes" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-runtimes", + "core_affinity", + "libc", + "num_cpus", + "once_cell", + "rayon", +] + +[[package]] +name = "aptos-framework" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-crypto", + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-move-stdlib", + "aptos-native-interface", + "aptos-sdk-builder", + "aptos-types", + "aptos-vm-types", + "ark-bls12-381", + "ark-bn254", + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "bcs 0.1.4", + "better_any", + "blake2-rfc", + "bulletproofs", + "byteorder", + "clap 4.5.7", + "codespan-reporting", + "curve25519-dalek-ng", + "either", + "flate2", + "hex", + "itertools 0.12.1", + "libsecp256k1", + "log", + "lru 0.7.8", + "merlin", + "move-binary-format", + "move-cli", + "move-command-line-common", + "move-compiler", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-docgen", + "move-model", + "move-package", + "move-prover", + "move-prover-boogie-backend", + "move-prover-bytecode-pipeline", + "move-stackless-bytecode", + "move-vm-runtime", + "move-vm-types", + "num-traits", + "once_cell", + "rand 0.7.3", + "rand_core 0.5.1", + "ripemd", + "serde", + "serde_bytes", + "sha2 0.10.8", + "sha2 0.9.9", + "sha3 0.9.1", + "siphasher", + "smallvec", + "tempfile", + "thiserror", + "tiny-keccak", +] + +[[package]] +name = "aptos-gas-algebra" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "either", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", +] + +[[package]] +name = "aptos-gas-meter" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-logger", + "aptos-types", + "aptos-vm-types", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", +] + +[[package]] +name = "aptos-gas-profiling" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-types", + "aptos-vm-types", + "handlebars", + "inferno", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", + "regex", + "serde_json", + "smallvec", +] + +[[package]] +name = "aptos-gas-schedule" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-algebra", + "aptos-global-constants", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", + "paste", + "rand 0.7.3", +] + +[[package]] +name = "aptos-global-constants" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" + +[[package]] +name = "aptos-infallible" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" + +[[package]] +name = "aptos-jellyfish-merkle" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-experimental-runtimes", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "aptos-storage-interface", + "aptos-types", + "arr_macro", + "bcs 0.1.4", + "byteorder", + "itertools 0.12.1", + "num-derive", + "num-traits", + "once_cell", + "proptest", + "proptest-derive", + "rayon", + "serde", + "thiserror", +] + +[[package]] +name = "aptos-keygen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-types", + "rand 0.7.3", +] + +[[package]] +name = "aptos-language-e2e-tests" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-abstract-gas-usage", + "aptos-bitvec", + "aptos-block-executor", + "aptos-cached-packages", + "aptos-crypto", + "aptos-framework", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-gas-profiling", + "aptos-gas-schedule", + "aptos-keygen", + "aptos-proptest-helpers", + "aptos-temppath", + "aptos-types", + "aptos-vm", + "aptos-vm-genesis", + "aptos-vm-logging", + "aptos-vm-types", + "bcs 0.1.4", + "bytes", + "goldenfile", + "move-binary-format", + "move-command-line-common", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-ir-compiler", + "move-model", + "move-vm-runtime", + "move-vm-types", + "num_cpus", + "once_cell", + "petgraph", + "proptest", + "proptest-derive", + "rand 0.7.3", + "rayon", + "serde", +] + +[[package]] +name = "aptos-lc" +version = "0.1.0" +dependencies = [ + "anyhow", + "aptos-lc-core", + "aptos-programs", + "bcs 0.1.4", + "cfg-if", + "getset", + "serde", + "serde_json", + "sphinx-sdk", + "thiserror", +] + +[[package]] +name = "aptos-lc-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-executor", + "aptos-executor-test-helpers", + "aptos-executor-types", + "aptos-sdk", + "aptos-storage-interface", + "aptos-temppath", + "aptos-types", + "aptos-vm", + "aptos-vm-genesis", + "bcs 0.1.4", + "bls12_381 0.8.0", + "bytes", + "cfg-if", + "getset", + "hex", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.12.0)", + "proptest", + "rand 0.7.3", + "rand_core 0.5.1", + "reqwest 0.12.4", + "serde", + "serde_bytes", + "sha2 0.9.9", + "thiserror", + "tiny-keccak", +] + +[[package]] +name = "aptos-ledger" +version = "0.2.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-types", + "hex", + "ledger-apdu", + "ledger-transport-hid", + "thiserror", +] + +[[package]] +name = "aptos-log-derive" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "aptos-logger" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-infallible", + "aptos-log-derive", + "aptos-node-identity", + "backtrace", + "chrono", + "erased-serde", + "futures", + "hostname", + "once_cell", + "prometheus", + "serde", + "serde_json", + "strum 0.24.1", + "strum_macros 0.24.3", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "aptos-memory-usage-tracker" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-types", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", +] + +[[package]] +name = "aptos-metrics-core" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "prometheus", +] + +[[package]] +name = "aptos-move-stdlib" +version = "0.1.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-schedule", + "aptos-native-interface", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-runtime", + "move-vm-types", + "sha2 0.9.9", + "sha3 0.9.1", + "smallvec", +] + +[[package]] +name = "aptos-mvhashmap" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-crypto", + "aptos-types", + "aptos-vm-types", + "bytes", + "claims", + "crossbeam", + "dashmap", + "derivative", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", + "serde", +] + +[[package]] +name = "aptos-native-interface" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-types", + "bcs 0.1.4", + "bytes", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-runtime", + "move-vm-types", + "smallvec", +] + +[[package]] +name = "aptos-node-identity" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-types", + "claims", + "once_cell", +] + +[[package]] +name = "aptos-node-resource-metrics" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-build-info", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "cfg-if", + "once_cell", + "procfs", + "prometheus", + "sysinfo", +] + +[[package]] +name = "aptos-openapi" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "async-trait", + "percent-encoding", + "poem", + "poem-openapi", + "serde", + "serde_json", +] + +[[package]] +name = "aptos-package-builder" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-framework", + "itertools 0.12.1", + "move-command-line-common", + "move-package", + "tempfile", +] + +[[package]] +name = "aptos-programs" +version = "0.1.0" +dependencies = [ + "glob", + "sphinx-helper", +] + +[[package]] +name = "aptos-proptest-helpers" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "crossbeam", + "proptest", + "proptest-derive", +] + +[[package]] +name = "aptos-protos" +version = "1.3.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "futures-core", + "pbjson", + "prost", + "serde", + "tonic", +] + +[[package]] +name = "aptos-push-metrics" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-logger", + "aptos-metrics-core", + "ureq", + "url", +] + +[[package]] +name = "aptos-resource-viewer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-types", + "aptos-vm", + "move-binary-format", + "move-bytecode-utils", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-resource-viewer", +] + +[[package]] +name = "aptos-rest-client" +version = "0.0.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-api-types", + "aptos-crypto", + "aptos-infallible", + "aptos-logger", + "aptos-types", + "bcs 0.1.4", + "bytes", + "hex", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "url", +] + +[[package]] +name = "aptos-rocksdb-options" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-config", + "rocksdb", +] + +[[package]] +name = "aptos-runtimes" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "rayon", + "tokio", +] + +[[package]] +name = "aptos-schemadb" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "aptos-storage-interface", + "dunce", + "once_cell", + "proptest", + "rand 0.7.3", + "rocksdb", +] + +[[package]] +name = "aptos-scratchpad" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-drop-helper", + "aptos-experimental-runtimes", + "aptos-infallible", + "aptos-metrics-core", + "aptos-types", + "bitvec 1.0.1", + "itertools 0.12.1", + "once_cell", + "proptest", + "rayon", + "thiserror", +] + +[[package]] +name = "aptos-sdk" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-cached-packages", + "aptos-crypto", + "aptos-global-constants", + "aptos-ledger", + "aptos-rest-client", + "aptos-types", + "base64 0.13.1", + "bcs 0.1.4", + "ed25519-dalek-bip32", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "rand_core 0.5.1", + "serde_json", + "tiny-bip39", +] + +[[package]] +name = "aptos-sdk-builder" +version = "0.2.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-types", + "bcs 0.1.4", + "clap 4.5.7", + "heck 0.4.1", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "once_cell", + "serde-generate", + "serde-reflection", + "serde_yaml 0.8.26", + "textwrap 0.15.2", +] + +[[package]] +name = "aptos-secure-net" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-logger", + "aptos-metrics-core", + "aptos-protos", + "bcs 0.1.4", + "crossbeam-channel", + "once_cell", + "serde", + "thiserror", + "tokio", + "tonic", + "tonic-reflection", +] + +[[package]] +name = "aptos-secure-storage" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-infallible", + "aptos-logger", + "aptos-temppath", + "aptos-time-service", + "aptos-vault-client", + "base64 0.13.1", + "bcs 0.1.4", + "chrono", + "enum_dispatch", + "rand 0.7.3", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "aptos-short-hex-str" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "mirai-annotations", + "serde", + "static_assertions", + "thiserror", +] + +[[package]] +name = "aptos-speculative-state-helper" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-infallible", + "crossbeam", + "rayon", +] + +[[package]] +name = "aptos-storage-interface" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-crypto", + "aptos-experimental-runtimes", + "aptos-logger", + "aptos-metrics-core", + "aptos-scratchpad", + "aptos-secure-net", + "aptos-types", + "aptos-vm", + "bcs 0.1.4", + "crossbeam-channel", + "dashmap", + "once_cell", + "parking_lot", + "proptest", + "proptest-derive", + "rayon", + "serde", + "thiserror", + "threadpool", +] + +[[package]] +name = "aptos-table-natives" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-gas-schedule", + "aptos-native-interface", + "better_any", + "bytes", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-table-extension", + "move-vm-runtime", + "move-vm-types", + "sha3 0.9.1", + "smallvec", +] + +[[package]] +name = "aptos-temppath" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "hex", + "rand 0.7.3", +] + +[[package]] +name = "aptos-time-service" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-infallible", + "enum_dispatch", + "futures", + "pin-project", + "thiserror", + "tokio", +] + +[[package]] +name = "aptos-types" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-bitvec", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-dkg", + "aptos-experimental-runtimes", + "aptos-infallible", + "ark-bn254", + "ark-ff 0.4.2", + "ark-groth16", + "ark-serialize 0.4.2", + "arr_macro", + "base64 0.13.1", + "bcs 0.1.4", + "bytes", + "fixed", + "fxhash", + "hashbrown 0.14.5", + "hex", + "itertools 0.12.1", + "jsonwebtoken", + "move-binary-format", + "move-bytecode-verifier", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-table-extension", + "move-vm-runtime", + "move-vm-types", + "num-bigint 0.3.3", + "num-derive", + "num-traits", + "once_cell", + "passkey-types", + "proptest", + "proptest-derive", + "quick_cache", + "rand 0.7.3", + "rayon", + "ring 0.16.20", + "rsa", + "serde", + "serde-big-array", + "serde_bytes", + "serde_json", + "serde_with", + "serde_yaml 0.8.26", + "strum 0.24.1", + "strum_macros 0.24.3", + "thiserror", +] + +[[package]] +name = "aptos-utils" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" + +[[package]] +name = "aptos-vault-client" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "base64 0.13.1", + "chrono", + "native-tls", + "once_cell", + "serde", + "serde_json", + "thiserror", + "ureq", +] + +[[package]] +name = "aptos-vm" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-block-executor", + "aptos-block-partitioner", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-experimental-runtimes", + "aptos-framework", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-gas-schedule", + "aptos-infallible", + "aptos-logger", + "aptos-memory-usage-tracker", + "aptos-metrics-core", + "aptos-move-stdlib", + "aptos-mvhashmap", + "aptos-native-interface", + "aptos-table-natives", + "aptos-types", + "aptos-utils", + "aptos-vm-logging", + "aptos-vm-types", + "ark-bn254", + "ark-groth16", + "bcs 0.1.4", + "bytes", + "claims", + "crossbeam-channel", + "derive_more", + "fail", + "futures", + "hex", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-runtime", + "move-vm-types", + "num_cpus", + "once_cell", + "ouroboros", + "rand 0.7.3", + "rayon", + "serde", +] + +[[package]] +name = "aptos-vm-genesis" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-cached-packages", + "aptos-crypto", + "aptos-framework", + "aptos-gas-schedule", + "aptos-types", + "aptos-vm", + "aptos-vm-types", + "bcs 0.1.4", + "bytes", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-runtime", + "move-vm-types", + "once_cell", + "rand 0.7.3", + "serde", +] + +[[package]] +name = "aptos-vm-logging" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "aptos-crypto", + "aptos-logger", + "aptos-metrics-core", + "aptos-speculative-state-helper", + "aptos-types", + "arc-swap", + "once_cell", + "serde", +] + +[[package]] +name = "aptos-vm-types" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-types", + "bcs 0.1.4", + "bytes", + "claims", + "either", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", + "rand 0.7.3", + "serde", +] + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-relations", + "ark-serialize 0.4.2", + "ark-snark", + "ark-std 0.4.0", + "blake2", + "derivative", + "digest 0.10.7", + "rayon", + "sha2 0.10.8", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.5", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.5", + "num-traits", + "paste", + "rayon", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.5", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.5", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff 0.4.2", + "ark-poly", + "ark-relations", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "rayon", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "rayon", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff 0.4.2", + "ark-std 0.4.0", + "tracing", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.5", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff 0.4.2", + "ark-relations", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "arr_macro" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c49336e062fa2ae8aca17a2f99c34d9c1a5d30827e8aff1cb4c294f253afe992" +dependencies = [ + "arr_macro_impl", + "proc-macro-hack", + "proc-macro-nested", +] + +[[package]] +name = "arr_macro_impl" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c6368f9ae5c6ec403ca910327ae0c9437b0a85255b6950c90d497e6177f6e5e" +dependencies = [ + "proc-macro-hack", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "auto_impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core 0.3.4", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper 0.1.2", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" +dependencies = [ + "async-trait", + "axum-core 0.4.3", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.3.1", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "az" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "serde", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bcs" +version = "0.1.4" +source = "git+https://github.com/aptos-labs/bcs.git?rev=d31fab9d81748e2594be5cd5cdf845786a30562d#d31fab9d81748e2594be5cd5cdf845786a30562d" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "bcs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b6598a2f5d564fb7855dc6b06fd1c38cff5a72bd8b863a4d021938497b440a" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "bellpepper" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae286c2cb403324ab644c7cc68dceb25fe52ca9429908a726d7ed272c1edf7b" +dependencies = [ + "bellpepper-core", + "byteorder", + "ff 0.13.0", +] + +[[package]] +name = "bellpepper-core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8abb418570756396d722841b19edfec21d4e89e1cf8990610663040ecb1aea" +dependencies = [ + "blake2s_simd", + "byteorder", + "ff 0.13.0", + "serde", + "thiserror", +] + +[[package]] +name = "better_any" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b359aebd937c17c725e19efcb661200883f04c49c53e7132224dac26da39d4a0" +dependencies = [ + "better_typeid_derive", +] + +[[package]] +name = "better_typeid_derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3deeecb812ca5300b7d3f66f730cc2ebd3511c3d36c691dd79c165d5b19a26e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.66", +] + +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.5.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.66", + "which", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "bitvec" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" +dependencies = [ + "funty 1.1.0", + "radium 0.6.2", + "tap", + "wyz 0.2.0", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty 2.0.0", + "radium 0.7.0", + "tap", + "wyz 0.5.1", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", +] + +[[package]] +name = "blake3" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "cc", + "cfg-if", + "constant_time_eq 0.3.0", + "rayon", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "bls12_381" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c196a77437e7cc2fb515ce413a6401291578b5afc8ecb29a3c7ab957f05941" +dependencies = [ + "ff 0.12.1", + "group 0.12.1", + "pairing 0.22.0", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/lurk-lab/bls12_381.git?branch=zkvm#0d57d6ac0af6a464c4764809b5bf994d15920762" +dependencies = [ + "cfg-if", + "digest 0.9.0", + "ff 0.13.0", + "group 0.13.0", + "pairing 0.23.0", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "blst" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62dc83a094a71d43eeadd254b1ec2d24cb6a0bb6cadce00df51f0db594711a32" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "blstrs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a8a8ed6fefbeef4a8c7b460e4110e12c5e22a5b7cf32621aae6ad650c4dcf29" +dependencies = [ + "blst", + "byte-slice-cast", + "ff 0.13.0", + "group 0.13.0", + "pairing 0.23.0", + "rand_core 0.6.4", + "serde", + "subtle", +] + +[[package]] +name = "bstr" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata 0.1.10", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bulletproofs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40e698f1df446cc6246afd823afbe2d121134d089c9102c1dd26d1264991ba32" +dependencies = [ + "byteorder", + "clear_on_drop", + "curve25519-dalek-ng", + "digest 0.9.0", + "merlin", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "serde_derive", + "sha3 0.9.1", + "subtle-ng", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "bytecount" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" + +[[package]] +name = "bytemuck" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +dependencies = [ + "serde", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "c-kzg" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", +] + +[[package]] +name = "c_linked_list" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" + +[[package]] +name = "camino" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.0.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.5", +] + +[[package]] +name = "chrono-tz" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", +] + +[[package]] +name = "chunked_transfer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half 2.4.1", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "claims" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6995bbe186456c36307f8ea36be3eefe42f49d106896414e18efc4fb2f846b5" +dependencies = [ + "autocfg", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap" +version = "4.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "4.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "clap_lex" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" + +[[package]] +name = "clear_on_drop" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38508a63f4979f0048febc9966fadbd48e5dab31fd0ec6a3f151bbf4a74f7423" +dependencies = [ + "cc", +] + +[[package]] +name = "codespan" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3362992a0d9f1dd7c3d0e89e0ab2bb540b7a95fea8cd798090e758fda2899b5e" +dependencies = [ + "codespan-reporting", + "serde", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-hex" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_fn" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373e9fafaa20882876db20562275ff58d50e0caa2590077fe7ce7bef90211d0d" + +[[package]] +name = "const_format" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" +dependencies = [ + "aes-gcm", + "base64 0.21.7", + "hkdf 0.12.4", + "hmac 0.12.1", + "percent-encoding", + "rand 0.8.5", + "sha2 0.10.8", + "subtle", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" +dependencies = [ + "cookie", + "idna 0.3.0", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core_affinity" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622892f5635ce1fc38c8f16dfc938553ed64af482edb5e150bf4caedbfcb2304" +dependencies = [ + "libc", + "num_cpus", + "winapi 0.3.9", +] + +[[package]] +name = "coset" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff8aad850c1f86daa47e812913051eb5a26c4d9fb4242a89178bf99b946e4e3c" +dependencies = [ + "ciborium", + "ciborium-io", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f" +dependencies = [ + "atty", + "cast", + "clap 2.34.0", + "criterion-plot", + "csv", + "itertools 0.10.5", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_cbor", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi 0.3.9", +] + +[[package]] +name = "crossterm" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi 0.3.9", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "ctrlc" +version = "3.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "672465ae37dc1bc6380a6547a8883d5dd397b0f1faaad4f265726cc7042a5345" +dependencies = [ + "nix 0.28.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "fiat-crypto", + "platforms", + "rustc_version 0.4.0", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "serde", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core 0.14.4", + "darling_macro 0.14.4", +] + +[[package]] +name = "darling" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +dependencies = [ + "darling_core 0.20.9", + "darling_macro 0.20.9", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.66", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +dependencies = [ + "darling_core 0.20.9", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn 2.0.66", +] + +[[package]] +name = "deunicode" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" + +[[package]] +name = "difference" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature 2.2.0", + "spki", +] + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "serde", + "signature 1.6.4", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek 3.2.0", + "ed25519", + "rand 0.7.3", + "serde", + "serde_bytes", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek-bip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" +dependencies = [ + "derivation-path", + "ed25519-dalek", + "hmac 0.12.1", + "sha2 0.10.8", +] + +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff 0.13.0", + "generic-array", + "group 0.13.0", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum_dispatch" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "env_filter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "log", +] + +[[package]] +name = "env_logger" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", +] + +[[package]] +name = "ethnum" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" + +[[package]] +name = "fail" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe5e43d0f78a42ad591453aedb1d7ae631ce7ee445c7643691055a9ed8d3b01c" +dependencies = [ + "log", + "once_cell", + "rand 0.8.5", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec 0.7.4", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "bitvec 1.0.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec 1.0.1", + "byteorder", + "ff_derive", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff_derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" +dependencies = [ + "addchain", + "cfg-if", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "fixed" +version = "1.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fc715d38bea7b5bf487fcd79bcf8c209f0b58014f3018a7a19c2b855f472048" +dependencies = [ + "az", + "bytemuck", + "half 2.4.1", + "typenum", +] + +[[package]] +name = "fixed-hash" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flexi_logger" +version = "0.27.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469e584c031833564840fb0cdbce99bdfe946fd45480a188545e73a76f45461c" +dependencies = [ + "chrono", + "glob", + "is-terminal", + "lazy_static", + "log", + "nu-ansi-term 0.49.0", + "regex", + "thiserror", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funty" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "futures-utils-wasm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "gcd" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "get_if_addrs" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abddb55a898d32925f3148bd281174a68eeb68bbfd9a5938a57b18f506ee4ef7" +dependencies = [ + "c_linked_list", + "get_if_addrs-sys", + "libc", + "winapi 0.2.8", +] + +[[package]] +name = "get_if_addrs-sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d04f9fb746cf36b191c00f3ede8bde9c8e64f9f4b05ae2694a9ccf5e3f5ab48" +dependencies = [ + "gcc", + "libc", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getset" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "git2" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "git2" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr 1.9.1", + "log", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "globwalk" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" +dependencies = [ + "bitflags 2.5.0", + "ignore", + "walkdir", +] + +[[package]] +name = "goldenfile" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d5c44265baec620ea19c97b4ce9f068e28f8c3d7faccc483f02968b5e3c587" +dependencies = [ + "scopeguard", + "similar-asserts", + "tempfile", + "yansi", +] + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "memuse", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand 0.8.5", + "rand_core 0.6.4", + "rand_xorshift", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "halo2" +version = "0.1.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a23c779b38253fe1538102da44ad5bd5378495a61d2c4ee18d64eaa61ae5995" +dependencies = [ + "halo2_proofs", +] + +[[package]] +name = "halo2_proofs" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e925780549adee8364c7f2b685c753f6f3df23bde520c67416e93bf615933760" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "pasta_curves 0.4.1", + "rand_core 0.6.4", + "rayon", +] + +[[package]] +name = "handlebars" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" +dependencies = [ + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] + +[[package]] +name = "headers" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64 0.21.7", + "bytes", + "headers-core", + "http 0.2.12", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http 0.2.12", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hidapi" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "winapi 0.3.9", +] + +[[package]] +name = "hkdf" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" +dependencies = [ + "digest 0.9.0", + "hmac 0.10.1", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" +dependencies = [ + "crypto-mac 0.10.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi 0.3.9", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0e7a4dd27b9476dc40cb050d3632d3bba3a70ddbff012285f7f8559a1e7e545" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hybrid-array" +version = "0.2.0-rc.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53668f5da5a41d9eaf4bf7064be46d1ebe6a4e1ceed817f387587b18f2b51047" +dependencies = [ + "typenum", +] + +[[package]] +name = "hyper" +version = "0.14.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.5", + "http 1.1.0", + "http-body 1.0.0", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.29", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.29", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.3.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "hyper 1.3.1", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8ac670d7422d7f76b32e17a5db556510825b29ec9154f235977c9caba61036" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed" +dependencies = [ + "icu_normalizer", + "icu_properties", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata 0.4.7", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "impl-codec" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" +dependencies = [ + "parity-scale-codec 2.3.1", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec 3.6.11", +] + +[[package]] +name = "impl-serde" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "include_dir" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b56e147e6187d61e9d0f039f10e070d0c0a887e24fe0bb9ca3f29bfde62cab" +dependencies = [ + "glob", + "include_dir_impl", + "proc-macro-hack", +] + +[[package]] +name = "include_dir_impl" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a0c890c85da4bab7bce4204c707396bbd3c6c8a681716a51c8814cfc2b682df" +dependencies = [ + "anyhow", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "indoc" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" + +[[package]] +name = "inferno" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "321f0f839cd44a4686e9504b0a62b4d69a50b62072144c71c68f5873c167b8d9" +dependencies = [ + "ahash 0.8.11", + "clap 4.5.7", + "crossbeam-channel", + "crossbeam-utils", + "dashmap", + "env_logger 0.10.2", + "indexmap 2.2.6", + "is-terminal", + "itoa", + "log", + "num-format", + "once_cell", + "quick-xml 0.26.0", + "rgb", + "str_stack", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "internment" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab388864246d58a276e60e7569a833d9cc4cd75c66e5ca77c177dad38e59996" +dependencies = [ + "ahash 0.7.8", + "dashmap", + "hashbrown 0.12.3", + "once_cell", + "parking_lot", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_debug" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06d198e9919d9822d5f7083ba8530e04de87841eaf21ead9af8f2304efd57c89" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac6c1946e1cea1788cbfde01c993b52a10e2da07f4bac608228d1bed20bfebf2" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "jemallocator" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0de374a9f8e63150e6f5e8a60cc14c668226d7a347d8aee1a45766e3c4dd3bc" +dependencies = [ + "jemalloc-sys", + "libc", +] + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "jubjub" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a575df5f985fe1cd5b2b05664ff6accfc46559032b954529fd225a2168d27b0f" +dependencies = [ + "bitvec 1.0.1", + "bls12_381 0.7.1", + "ff 0.12.1", + "group 0.12.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature 2.2.0", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-asm" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "ledger-apdu" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" +dependencies = [ + "arrayref", + "no-std-compat", + "snafu", +] + +[[package]] +name = "ledger-transport" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" +dependencies = [ + "async-trait", + "ledger-apdu", +] + +[[package]] +name = "ledger-transport-hid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" +dependencies = [ + "byteorder", + "cfg-if", + "hex", + "hidapi", + "ledger-transport", + "libc", + "log", + "thiserror", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libgit2-sys" +version = "0.14.2+1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +dependencies = [ + "cfg-if", + "windows-targets 0.52.5", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "librocksdb-sys" +version = "0.11.0+8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +dependencies = [ + "bindgen 0.65.1", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "lz4-sys", + "zstd-sys", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libz-sys" +version = "1.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +dependencies = [ + "serde", +] + +[[package]] +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "lz4-sys" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9764018d143cc854c9f17f0b907de70f14393b1f502da6375dce70f00514eb3" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memuse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2145869435ace5ea6ea3d35f59be559317ec9a0d04e1812d5f185a87b6d36f1a" + +[[package]] +name = "merlin" +version = "3.0.0" +source = "git+https://github.com/aptos-labs/merlin#3454ccc85e37355c729ba40e6dac6e867ddf59f5" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mini-moka" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" +dependencies = [ + "crossbeam-channel", + "crossbeam-utils", + "dashmap", + "skeptic", + "smallvec", + "tagptr", + "triomphe", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "mirai-annotations" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + +[[package]] +name = "more-asserts" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fafa6961cabd9c63bcd77a45d7e3b7f3b552b70417831fb0f56db717e72407e" + +[[package]] +name = "move-abigen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "heck 0.4.1", + "log", + "move-binary-format", + "move-bytecode-verifier", + "move-command-line-common", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-model", + "serde", +] + +[[package]] +name = "move-binary-format" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "backtrace", + "indexmap 1.9.3", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "ref-cast", + "serde", + "variant_count", +] + +[[package]] +name = "move-borrow-graph" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" + +[[package]] +name = "move-bytecode-source-map" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "move-binary-format", + "move-command-line-common", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-ir-types", + "move-symbol-pool", + "serde", +] + +[[package]] +name = "move-bytecode-utils" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "petgraph", + "serde-reflection", +] + +[[package]] +name = "move-bytecode-verifier" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "fail", + "move-binary-format", + "move-borrow-graph", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "petgraph", + "serde", + "typed-arena", +] + +[[package]] +name = "move-bytecode-viewer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "clap 4.5.7", + "crossterm 0.26.1", + "move-binary-format", + "move-bytecode-source-map", + "move-disassembler", + "regex", + "tui", +] + +[[package]] +name = "move-cli" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "clap 4.5.7", + "codespan-reporting", + "colored", + "move-binary-format", + "move-bytecode-viewer", + "move-command-line-common", + "move-compiler", + "move-compiler-v2", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-coverage", + "move-disassembler", + "move-docgen", + "move-errmapgen", + "move-model", + "move-package", + "move-prover", + "move-stdlib", + "move-unit-test", + "move-vm-runtime", + "move-vm-test-utils", + "once_cell", + "tempfile", +] + +[[package]] +name = "move-command-line-common" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "difference", + "dirs-next", + "hex", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "num-bigint 0.3.3", + "once_cell", + "serde", + "sha2 0.9.9", + "walkdir", +] + +[[package]] +name = "move-compiler" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "clap 4.5.7", + "codespan-reporting", + "hex", + "move-binary-format", + "move-borrow-graph", + "move-bytecode-source-map", + "move-bytecode-verifier", + "move-command-line-common", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-ir-to-bytecode", + "move-ir-types", + "move-symbol-pool", + "once_cell", + "petgraph", + "regex", + "sha3 0.9.1", + "tempfile", +] + +[[package]] +name = "move-compiler-v2" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "abstract-domain-derive", + "anyhow", + "bcs 0.1.4", + "clap 4.5.7", + "codespan-reporting", + "ethnum", + "flexi_logger", + "im", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-compiler", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-disassembler", + "move-ir-types", + "move-model", + "move-stackless-bytecode", + "move-symbol-pool", + "num", + "once_cell", + "petgraph", +] + +[[package]] +name = "move-core-types" +version = "0.0.4" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.12.0#a9146fa7ddac52c6c6fdc4ed15eeb4e3cf0f7bd6" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "bytes", + "ethnum", + "hashbrown 0.14.5", + "hex", + "num", + "once_cell", + "primitive-types 0.10.1", + "rand 0.8.5", + "ref-cast", + "serde", + "serde_bytes", + "thiserror", + "uint", +] + +[[package]] +name = "move-core-types" +version = "0.0.4" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "arbitrary", + "bcs 0.1.4", + "bytes", + "ethnum", + "hashbrown 0.14.5", + "hex", + "num", + "once_cell", + "primitive-types 0.10.1", + "proptest", + "proptest-derive", + "rand 0.8.5", + "ref-cast", + "serde", + "serde_bytes", + "thiserror", + "uint", +] + +[[package]] +name = "move-coverage" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "clap 4.5.7", + "codespan", + "colored", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-ir-types", + "petgraph", + "serde", +] + +[[package]] +name = "move-disassembler" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "clap 4.5.7", + "colored", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-compiler", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-coverage", + "move-ir-types", +] + +[[package]] +name = "move-docgen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "codespan", + "codespan-reporting", + "itertools 0.12.1", + "log", + "move-compiler", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-model", + "once_cell", + "regex", + "serde", +] + +[[package]] +name = "move-errmapgen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "move-command-line-common", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-model", + "serde", +] + +[[package]] +name = "move-ir-compiler" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "clap 4.5.7", + "move-binary-format", + "move-bytecode-source-map", + "move-bytecode-verifier", + "move-command-line-common", + "move-ir-to-bytecode", + "serde_json", +] + +[[package]] +name = "move-ir-to-bytecode" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "codespan-reporting", + "log", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-ir-to-bytecode-syntax", + "move-ir-types", + "move-symbol-pool", + "ouroboros", +] + +[[package]] +name = "move-ir-to-bytecode-syntax" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "hex", + "move-command-line-common", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-ir-types", + "move-symbol-pool", +] + +[[package]] +name = "move-ir-types" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "hex", + "move-command-line-common", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-symbol-pool", + "once_cell", + "serde", +] + +[[package]] +name = "move-model" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "codespan", + "codespan-reporting", + "internment", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-compiler", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-disassembler", + "move-ir-types", + "move-symbol-pool", + "num", + "num-traits", + "once_cell", + "regex", + "serde", +] + +[[package]] +name = "move-package" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "clap 4.5.7", + "colored", + "itertools 0.12.1", + "move-abigen", + "move-binary-format", + "move-bytecode-source-map", + "move-bytecode-utils", + "move-command-line-common", + "move-compiler", + "move-compiler-v2", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-docgen", + "move-model", + "move-symbol-pool", + "named-lock", + "once_cell", + "petgraph", + "regex", + "serde", + "serde_yaml 0.8.26", + "sha2 0.9.9", + "tempfile", + "termcolor", + "toml", + "walkdir", + "whoami", +] + +[[package]] +name = "move-prover" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "atty", + "clap 4.5.7", + "codespan-reporting", + "itertools 0.12.1", + "log", + "move-abigen", + "move-command-line-common", + "move-compiler", + "move-compiler-v2", + "move-docgen", + "move-errmapgen", + "move-model", + "move-prover-boogie-backend", + "move-prover-bytecode-pipeline", + "move-stackless-bytecode", + "once_cell", + "serde", + "simplelog", + "toml", +] + +[[package]] +name = "move-prover-boogie-backend" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "async-trait", + "codespan", + "codespan-reporting", + "futures", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-command-line-common", + "move-compiler", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-model", + "move-prover-bytecode-pipeline", + "move-stackless-bytecode", + "num", + "once_cell", + "pretty", + "rand 0.7.3", + "regex", + "serde", + "tera", + "tokio", +] + +[[package]] +name = "move-prover-bytecode-pipeline" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "abstract-domain-derive", + "anyhow", + "codespan-reporting", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-model", + "move-stackless-bytecode", + "serde", +] + +[[package]] +name = "move-resource-viewer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "hex", + "move-binary-format", + "move-bytecode-utils", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "serde", +] + +[[package]] +name = "move-stackless-bytecode" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "abstract-domain-derive", + "codespan-reporting", + "ethnum", + "im", + "itertools 0.12.1", + "log", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-model", + "num", + "paste", + "petgraph", +] + +[[package]] +name = "move-stdlib" +version = "0.1.1" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "hex", + "log", + "move-binary-format", + "move-command-line-common", + "move-compiler", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-docgen", + "move-errmapgen", + "move-prover", + "move-vm-runtime", + "move-vm-types", + "sha2 0.9.9", + "sha3 0.9.1", + "smallvec", + "walkdir", +] + +[[package]] +name = "move-symbol-pool" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "once_cell", + "serde", +] + +[[package]] +name = "move-table-extension" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "better_any", + "bytes", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-runtime", + "move-vm-types", + "sha3 0.9.1", + "smallvec", +] + +[[package]] +name = "move-unit-test" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "better_any", + "clap 4.5.7", + "codespan-reporting", + "colored", + "itertools 0.12.1", + "move-binary-format", + "move-bytecode-utils", + "move-command-line-common", + "move-compiler", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-ir-types", + "move-resource-viewer", + "move-stdlib", + "move-symbol-pool", + "move-table-extension", + "move-vm-runtime", + "move-vm-test-utils", + "once_cell", + "rayon", + "regex", +] + +[[package]] +name = "move-vm-runtime" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "better_any", + "bytes", + "fail", + "hashbrown 0.14.5", + "lazy_static", + "lru 0.7.8", + "move-binary-format", + "move-bytecode-verifier", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", + "once_cell", + "parking_lot", + "serde", + "sha3 0.9.1", + "tracing", + "triomphe", + "typed-arena", +] + +[[package]] +name = "move-vm-test-utils" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "anyhow", + "bytes", + "move-binary-format", + "move-bytecode-utils", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "move-vm-types", + "once_cell", + "serde", +] + +[[package]] +name = "move-vm-types" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0#17cfcf956debafc24392dc47037109036ccdefb9" +dependencies = [ + "bcs 0.1.4", + "derivative", + "itertools 0.12.1", + "move-binary-format", + "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", + "serde", + "smallbitvec", + "smallvec", + "triomphe", +] + +[[package]] +name = "multer" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 0.2.12", + "httparse", + "log", + "memchr", + "mime", + "spin 0.9.8", + "tokio", + "version_check", +] + +[[package]] +name = "named-lock" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a3eb6b7c682b65d1f631ec3176829d72ab450b3aacdd3f719bf220822e59ac" +dependencies = [ + "libc", + "once_cell", + "parking_lot", + "thiserror", + "widestring", + "winapi 0.3.9", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "neptune" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06626c9ac04c894e9a23d061ba1309f28506cdc5fe64156d28a15fb57fc8e438" +dependencies = [ + "bellpepper", + "bellpepper-core", + "blake2s_simd", + "blstrs", + "byteorder", + "ff 0.13.0", + "generic-array", + "log", + "pasta_curves 0.5.1", + "serde", + "trait-set", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi 0.3.9", +] + +[[package]] +name = "nu-ansi-term" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.5", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "rand 0.7.3", +] + +[[package]] +name = "num-bigint" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.4", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint 0.4.5", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "number_range" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60080faccd4ca50ad0b801b2be686136376b13f691f6eac84817e40973b2e1bb" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "num", +] + +[[package]] +name = "object" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl" +version = "0.10.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "ouroboros" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db" +dependencies = [ + "aliasable", + "ouroboros_macro", +] + +[[package]] +name = "ouroboros_macro" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" +dependencies = [ + "Inflector", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.8", +] + +[[package]] +name = "p3-air" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "p3-field", + "p3-matrix", +] + +[[package]] +name = "p3-baby-bear" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "num-bigint 0.4.5", + "p3-field", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-blake3" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "blake3", + "p3-symmetric", +] + +[[package]] +name = "p3-bn254-fr" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "ff 0.13.0", + "num-bigint 0.4.5", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-challenger" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "p3-field", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-commit" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-field", + "p3-matrix", + "p3-util", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-field" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "itertools 0.12.1", + "num-bigint 0.4.5", + "num-traits", + "p3-util", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "p3-fri" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "itertools 0.12.1", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-interpolation", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-interpolation" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-util", +] + +[[package]] +name = "p3-keccak" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "p3-symmetric", + "tiny-keccak", +] + +[[package]] +name = "p3-keccak-air" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "p3-air", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-matrix" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand 0.8.5", + "serde", + "tracing", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "rayon", +] + +[[package]] +name = "p3-mds" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "itertools 0.12.1", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand 0.8.5", +] + +[[package]] +name = "p3-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "itertools 0.12.1", + "p3-commit", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-poseidon2" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "gcd", + "p3-field", + "p3-mds", + "p3-symmetric", + "rand 0.8.5", +] + +[[package]] +name = "p3-symmetric" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "itertools 0.12.1", + "p3-field", + "serde", +] + +[[package]] +name = "p3-uni-stark" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "itertools 0.12.1", + "p3-air", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-util" +version = "0.1.0" +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +dependencies = [ + "serde", +] + +[[package]] +name = "pairing" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135590d8bdba2b31346f9cd1fb2a912329f5135e832a4f422942eb6ead8b6b3b" +dependencies = [ + "group 0.12.1", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group 0.13.0", +] + +[[package]] +name = "parity-scale-codec" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" +dependencies = [ + "arrayvec 0.7.4", + "bitvec 0.20.4", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive 2.3.1", + "serde", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1b5927e4a9ae8d6cdb6a69e4e04a0ec73381a358e21b8a576f44769f34e7c24" +dependencies = [ + "arrayvec 0.7.4", + "bitvec 1.0.1", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive 3.6.9", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.2", + "smallvec", + "windows-targets 0.52.5", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + +[[package]] +name = "passkey-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "499cff8432e71c5f8784d9645aac0f9fca604d67f59b68a606170b5e229c6538" +dependencies = [ + "bitflags 2.5.0", + "ciborium", + "coset", + "data-encoding", + "indexmap 2.2.6", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.8", + "strum 0.25.0", + "typeshare", +] + +[[package]] +name = "pasta_curves" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc65faf8e7313b4b1fbaa9f7ca917a0eed499a9663be71477f87993604341d8" +dependencies = [ + "blake2b_simd", + "ff 0.12.1", + "group 0.12.1", + "lazy_static", + "rand 0.8.5", + "static_assertions", + "subtle", +] + +[[package]] +name = "pasta_curves" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" +dependencies = [ + "blake2b_simd", + "ff 0.13.0", + "group 0.13.0", + "hex", + "lazy_static", + "rand 0.8.5", + "serde", + "static_assertions", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbjson" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048f9ac93c1eab514f9470c4bc8d97ca2a0a236b84f45cc19d69a59fc11467f6" +dependencies = [ + "base64 0.13.1", + "serde", +] + +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac 0.8.0", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "pest_meta" +version = "2.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +dependencies = [ + "fixedbitset", + "indexmap 1.9.3", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "platforms" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" + +[[package]] +name = "plotters" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" + +[[package]] +name = "plotters-svg" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "poem" +version = "1.3.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504774c97b0744c1ee108a37e5a65a9745a4725c4c06277521dabc28eb53a904" +dependencies = [ + "anyhow", + "async-trait", + "bytes", + "chrono", + "cookie", + "futures-util", + "headers", + "http 0.2.12", + "hyper 0.14.29", + "mime", + "multer", + "nix 0.27.1", + "parking_lot", + "percent-encoding", + "pin-project-lite", + "poem-derive", + "quick-xml 0.30.0", + "regex", + "rfc7239", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "tempfile", + "thiserror", + "time", + "tokio", + "tokio-rustls 0.24.1", + "tokio-stream", + "tokio-util", + "tracing", + "wildmatch", +] + +[[package]] +name = "poem-derive" +version = "1.3.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ddcf4680d8d867e1e375116203846acb088483fa2070244f90589f458bbb31" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "poem-openapi" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e69c569eb0671cc85e65cfb6bd960d0168d24732ff58825227b4d2a10167ba91" +dependencies = [ + "base64 0.13.1", + "bytes", + "derive_more", + "futures-util", + "mime", + "num-traits", + "poem", + "poem-openapi-derive", + "quick-xml 0.23.1", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "serde_yaml 0.9.34+deprecated", + "thiserror", + "tokio", + "url", +] + +[[package]] +name = "poem-openapi-derive" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "274cf13f710999977a3c1e396c2a5000d104075a7127ce6470fbdae4706be621" +dependencies = [ + "darling 0.14.4", + "http 0.2.12", + "indexmap 1.9.3", + "mime", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "thiserror", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "poseidon-ark" +version = "0.0.1" +source = "git+https://github.com/arnaucube/poseidon-ark.git?rev=6d2487aa1308d9d3860a2b724c485d73095c1c68#6d2487aa1308d9d3860a2b724c485d73095c1c68" +dependencies = [ + "ark-bn254", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pretty" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9940b913ee56ddd94aec2d3cd179dd47068236f42a1a6415ccf9d880ce2a61" +dependencies = [ + "arrayvec 0.5.2", + "typed-arena", +] + +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn 2.0.66", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "primitive-types" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" +dependencies = [ + "fixed-hash 0.7.0", + "impl-codec 0.5.1", + "impl-serde", + "uint", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash 0.8.0", + "impl-codec 0.6.0", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro-nested" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" + +[[package]] +name = "proc-macro2" +version = "1.0.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "procfs" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1de8dacb0873f77e6aefc6d71e044761fcc68060290f5b1089fcdf84626bb69" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "chrono", + "flate2", + "hex", + "lazy_static", + "rustix 0.36.17", +] + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "thiserror", +] + +[[package]] +name = "proof-server" +version = "0.1.0" +dependencies = [ + "anyhow", + "aptos-lc", + "aptos-lc-core", + "bcs 0.1.4", + "chrono", + "clap 4.5.7", + "env_logger 0.11.3", + "log", + "reqwest 0.12.4", + "serde", + "serde_json", + "sphinx-sdk", + "thiserror", + "tokio", + "url", +] + +[[package]] +name = "proptest" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.5.0", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.4", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "proptest-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf16337405ca084e9c78985114633b6827711d22b9e6ef6c6c0d665eb3f0b6e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +dependencies = [ + "idna 0.3.0", + "psl-types", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.5.0", + "memchr", + "unicase", +] + +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-xml" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick-xml" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" +dependencies = [ + "memchr", +] + +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick_cache" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "347e1a588d1de074eeb3c00eadff93db4db65aeb62aee852b1efd0949fe65b6c" +dependencies = [ + "ahash 0.8.11", + "equivalent", + "hashbrown 0.14.5", + "parking_lot", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rayon-scan" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f87cc11a0140b4b0da0ffc889885760c61b13672d80a908920b2c0df078fa14" +dependencies = [ + "rayon", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", +] + +[[package]] +name = "ref-cast" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "regex" +version = "1.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "cookie", + "cookie_store", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.4.5", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.3.1", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile 2.1.2", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.52.0", +] + +[[package]] +name = "reqwest-middleware" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a45d100244a467870f6cb763c4484d010a6bed6bd610b3676e3825d93fb4cfbd" +dependencies = [ + "anyhow", + "async-trait", + "http 1.1.0", + "reqwest 0.12.4", + "serde", + "thiserror", + "tower-service", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "rfc7239" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b106a85eeb5b0336d16d6a20eab857f92861d4fbb1eb9a239866fb98fb6a1063" +dependencies = [ + "uncased", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" +dependencies = [ + "downcast-rs", + "num_enum", + "paste", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature 2.2.0", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "ruint" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint 0.4.5", + "num-traits", + "parity-scale-codec 3.6.11", + "primitive-types 0.12.2", + "proptest", + "rand 0.8.5", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rustix" +version = "0.36.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.4", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.2", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scc" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ad2bbb0ae5100a07b7a6f2ed7ab5fd0045551a4c507989b7a620046ea3efdc" +dependencies = [ + "sdd", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "sdd" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84345e4c9bd703274a082fb80caaa99b7612be48dfaa1dd9266577ec412309d" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +dependencies = [ + "bitflags 2.5.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-generate" +version = "0.20.6" +source = "git+https://github.com/aptos-labs/serde-reflection?rev=73b6bbf748334b71ff6d7d09d06a29e3062ca075#73b6bbf748334b71ff6d7d09d06a29e3062ca075" +dependencies = [ + "bcs 0.1.6", + "bincode", + "heck 0.3.3", + "include_dir", + "maplit", + "serde", + "serde-reflection", + "serde_bytes", + "serde_yaml 0.8.26", + "structopt", + "textwrap 0.13.4", +] + +[[package]] +name = "serde-name" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12c47087018ec281d1cdab673d36aea22d816b54d498264029c05d5fa1910da6" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "serde-reflection" +version = "0.3.5" +source = "git+https://github.com/aptos-labs/serde-reflection?rev=73b6bbf748334b71ff6d7d09d06a29e3062ca075#73b6bbf748334b71ff6d7d09d06a29e3062ca075" +dependencies = [ + "once_cell", + "serde", + "thiserror", +] + +[[package]] +name = "serde_bytes" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half 1.8.3", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "serde_json" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +dependencies = [ + "indexmap 2.2.6", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_merge" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "606e91878516232ac3b16c12e063d4468d762f16d77e7aef14a1f2326c5f409b" +dependencies = [ + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.6", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +dependencies = [ + "darling 0.20.9", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap 1.9.3", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.2.6", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serial_test" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" +dependencies = [ + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "git+https://github.com/sp1-patches/RustCrypto-hashes?branch=patch-v0.10.8#3d692aa90b91513886d757d01f8fc2d51c0ec0d7" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sha3-asm" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" +dependencies = [ + "cc", + "cfg-if", +] + +[[package]] +name = "shadow-rs" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c0ea0c68418544f725eba5401a5b965a2263254c92458d04aeae74e9d88ff4e" +dependencies = [ + "const_format", + "git2 0.15.0", + "is_debug", + "time", + "tzdb", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "similar" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" +dependencies = [ + "bstr 0.2.17", + "unicode-segmentation", +] + +[[package]] +name = "similar-asserts" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e041bb827d1bfca18f213411d51b665309f1afb37a04a5d1464530e13779fc0f" +dependencies = [ + "console", + "similar", +] + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint 0.4.5", + "num-traits", + "thiserror", + "time", +] + +[[package]] +name = "simplelog" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bc0ffd69814a9b251d43afcabf96dad1b29f5028378056257be9e3fecc9f720" +dependencies = [ + "chrono", + "log", + "termcolor", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "size" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fed904c7fb2856d868b92464fc8fa597fce366edea1a9cbfaa8cb5fe080bd6d" + +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] +name = "skeptic" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" +dependencies = [ + "bytecount", + "cargo_metadata 0.14.2", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slug" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4" +dependencies = [ + "deunicode", + "wasm-bindgen", +] + +[[package]] +name = "smallbitvec" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3fc564a4b53fd1e8589628efafe57602d91bde78be18186b5f61e8faea470" + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "sphinx-core" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "anyhow", + "arrayref", + "bincode", + "blake3", + "bls12_381 0.8.0", + "cfg-if", + "curve25519-dalek 4.1.2", + "elf", + "elliptic-curve", + "hex", + "hybrid-array", + "itertools 0.12.1", + "k256", + "lazy_static", + "log", + "nohash-hasher", + "num", + "num-bigint 0.4.5", + "num_cpus", + "p3-air", + "p3-baby-bear", + "p3-blake3", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-keccak", + "p3-keccak-air", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-uni-stark", + "p3-util", + "rayon-scan", + "rrs-lib", + "serde", + "serde_with", + "serial_test", + "size", + "sphinx-derive", + "sphinx-primitives", + "strum 0.26.2", + "strum_macros 0.26.4", + "tempfile", + "thiserror", + "tracing", + "tracing-forest", + "tracing-subscriber 0.3.18", + "web-time", +] + +[[package]] +name = "sphinx-derive" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sphinx-helper" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "cargo_metadata 0.18.1", + "chrono", +] + +[[package]] +name = "sphinx-primitives" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "itertools 0.12.1", + "lazy_static", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", +] + +[[package]] +name = "sphinx-prover" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "anyhow", + "backtrace", + "bincode", + "clap 4.5.7", + "futures", + "hex", + "home", + "indicatif", + "itertools 0.12.1", + "num-bigint 0.4.5", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-field", + "rayon", + "reqwest 0.12.4", + "serde", + "serde_json", + "serial_test", + "sha2 0.10.8", + "size", + "sphinx-core", + "sphinx-primitives", + "sphinx-recursion-circuit", + "sphinx-recursion-compiler", + "sphinx-recursion-core", + "sphinx-recursion-gnark-ffi", + "sphinx-recursion-program", + "tempfile", + "thiserror", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "sphinx-recursion-circuit" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "bincode", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-commit", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-util", + "serde", + "sphinx-core", + "sphinx-recursion-compiler", + "sphinx-recursion-core", + "sphinx-recursion-derive", + "sphinx-recursion-program", +] + +[[package]] +name = "sphinx-recursion-compiler" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "backtrace", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-commit", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "serde", + "sphinx-core", + "sphinx-recursion-core", + "sphinx-recursion-derive", + "tracing", +] + +[[package]] +name = "sphinx-recursion-core" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "arrayref", + "backtrace", + "ff 0.13.0", + "hashbrown 0.14.5", + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "serde", + "serde_with", + "sphinx-core", + "sphinx-derive", + "sphinx-primitives", + "static_assertions", + "tracing", + "zkhash", +] + +[[package]] +name = "sphinx-recursion-derive" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sphinx-recursion-gnark-ffi" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "bindgen 0.69.4", + "log", + "num-bigint 0.4.5", + "p3-baby-bear", + "p3-field", + "rand 0.8.5", + "serde", + "serde_json", + "sphinx-recursion-compiler", + "tempfile", +] + +[[package]] +name = "sphinx-recursion-program" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "itertools 0.12.1", + "p3-air", + "p3-baby-bear", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "rand 0.8.5", + "serde", + "sphinx-core", + "sphinx-recursion-compiler", + "sphinx-recursion-core", + "tracing", +] + +[[package]] +name = "sphinx-sdk" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "alloy", + "anyhow", + "async-trait", + "axum 0.7.5", + "bincode", + "futures", + "hex", + "indicatif", + "log", + "num-bigint 0.4.5", + "p3-commit", + "p3-field", + "p3-matrix", + "prost", + "reqwest 0.12.4", + "reqwest-middleware", + "serde", + "serde_json", + "sha2 0.10.8", + "sphinx-core", + "sphinx-prover", + "tempfile", + "tokio", + "tracing", + "twirp", + "vergen", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "status-line" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20cc99bbe608305546a850ec4352907279a8b8044f9c13ae58bd0a8ab46ebc1" +dependencies = [ + "ansi-escapes", + "atty", +] + +[[package]] +name = "str_stack" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "structopt" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +dependencies = [ + "clap 2.34.0", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +dependencies = [ + "heck 0.3.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", +] + +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.66", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.66", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn-solidity" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d71e19bca02c807c9faa67b5a47673ff231b6e7449b251695188522f1dc44b2" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "sysinfo" +version = "0.28.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2f3ca6693feb29a89724516f016488e9aafc7f37264f898593ee4b942f31b" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "winapi 0.3.9", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix 0.38.34", + "windows-sys 0.52.0", +] + +[[package]] +name = "tera" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" +dependencies = [ + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand 0.8.5", + "regex", + "serde", + "serde_json", + "slug", + "unic-segment", +] + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835" +dependencies = [ + "smawk", + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "git+https://github.com/sp1-patches/tiny-keccak?branch=patch-v2.0.2#aa70bacdfece9dc7ea4936f808887c43a09b3b0a" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.6", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "tonic" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" +dependencies = [ + "async-stream", + "async-trait", + "axum 0.6.20", + "base64 0.21.7", + "bytes", + "flate2", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.29", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "rustls-native-certs", + "rustls-pemfile 2.1.2", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.25.0", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", + "zstd", +] + +[[package]] +name = "tonic-reflection" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "548c227bd5c0fae5925812c4ec6c66ffcfced23ea370cb823f4d18f0fc1cb6a7" +dependencies = [ + "prost", + "prost-types", + "tokio", + "tokio-stream", + "tonic", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-forest" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" +dependencies = [ + "ansi_term", + "smallvec", + "thiserror", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term 0.46.0", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "trait-set" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "triomphe" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b2cb4fbb9995eeb36ac86fadf24031ccd58f99d6b4b2d7b911db70bddb80d90" +dependencies = [ + "serde", + "stable_deref_trait", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tui" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1" +dependencies = [ + "bitflags 1.3.2", + "cassowary", + "crossterm 0.25.0", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "twirp" +version = "0.3.0" +source = "git+https://github.com/github/twirp-rs.git#e18a3cfb30853250213d4bdc486a9fb8f5ac9bd4" +dependencies = [ + "async-trait", + "axum 0.7.5", + "bytes", + "futures", + "http 1.1.0", + "http-body-util", + "hyper 1.3.1", + "prost", + "reqwest 0.12.4", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "url", +] + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typeshare" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f17399b76c2e743d58eac0635d7686e9c00f48cd4776f00695d9882a7d3187" +dependencies = [ + "chrono", + "serde", + "serde_json", + "typeshare-annotation", +] + +[[package]] +name = "typeshare-annotation" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a615d6c2764852a2e88a4f16e9ce1ea49bb776b5872956309e170d63a042a34f" +dependencies = [ + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tz-rs" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33851b15c848fad2cf4b105c6bb66eb9512b6f6c44a4b13f57c53c73c707e2b4" +dependencies = [ + "const_fn", +] + +[[package]] +name = "tzdb" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c420cf38925a5a6a3dc56e1c8f56f17a5b7755edd5adeb7cdab8b847e1fbe2af" +dependencies = [ + "iana-time-zone", + "tz-rs", + "tzdb_data", + "utcnow", +] + +[[package]] +name = "tzdb_data" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1889fdffac09d65c1d95c42d5202e9b21ad8c758f426e9fe09088817ea998d6" +dependencies = [ + "tz-rs", +] + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "uncased" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8b063c2d59218ae09f22b53c42eaad0d53516457905f5235ca4bc9e99daa71" +dependencies = [ + "base64 0.13.1", + "chunked_transfer", + "log", + "native-tls", + "once_cell", + "qstring", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "url" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56" +dependencies = [ + "form_urlencoded", + "idna 1.0.0", + "percent-encoding", + "serde", +] + +[[package]] +name = "utcnow" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "493ace370ee8579788f83a4f0eef89183c527b7551b4ad71364fac10371872b7" +dependencies = [ + "const_fn", + "errno", + "js-sys", + "libc", + "rustix 0.38.34", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", + "winapi 0.3.9", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "variant_count" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "vergen" +version = "8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b86a8af1dedf089b1c78338678e4c7492b6045649042d94faf19690499d236" +dependencies = [ + "anyhow", + "git2 0.16.1", + "rustversion", + "time", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.66", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.34", +] + +[[package]] +name = "whoami" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +dependencies = [ + "redox_syscall 0.4.1", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + +[[package]] +name = "wildmatch" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3928939971918220fed093266b809d1ee4ec6c1a2d72692ff6876898f3b16c19" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "1.2.0" +source = "git+https://github.com/aptos-labs/x25519-dalek?branch=zeroize_v1#762a9501668d213daa4a1864fa1f9db22716b661" +dependencies = [ + "curve25519-dalek 3.2.0", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "zerovec" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "zkhash" +version = "0.2.0" +source = "git+https://github.com/HorizenLabs/poseidon2#bb476b9ca38198cf5092487283c8b8c5d4317c4e" +dependencies = [ + "ark-ff 0.4.2", + "ark-std 0.4.0", + "bitvec 1.0.1", + "blake2", + "bls12_381 0.7.1", + "byteorder", + "cfg-if", + "group 0.12.1", + "group 0.13.0", + "halo2", + "hex", + "jubjub", + "lazy_static", + "pasta_curves 0.5.1", + "rand 0.8.5", + "serde", + "sha2 0.10.8", + "sha3 0.10.8", + "subtle", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.10+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/aptos/programs/benchmarks/signature-verification/Cargo.lock b/aptos/programs/benchmarks/signature-verification/Cargo.lock new file mode 100644 index 00000000..dfe2ba05 --- /dev/null +++ b/aptos/programs/benchmarks/signature-verification/Cargo.lock @@ -0,0 +1,692 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "aptos-lc-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "bcs", + "bls12_381", + "bytes", + "cfg-if", + "getset", + "hex", + "serde", + "serde_bytes", + "sha2 0.9.9", + "thiserror", + "tiny-keccak", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bcs" +version = "0.1.4" +source = "git+https://github.com/aptos-labs/bcs.git?rev=d31fab9d81748e2594be5cd5cdf845786a30562d#d31fab9d81748e2594be5cd5cdf845786a30562d" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/lurk-lab/bls12_381.git?branch=zkvm#0d57d6ac0af6a464c4764809b5bf994d15920762" +dependencies = [ + "cfg-if", + "digest 0.9.0", + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +dependencies = [ + "serde", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "tap", + "zeroize", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getset" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hybrid-array" +version = "0.2.0-rc.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53668f5da5a41d9eaf4bf7064be46d1ebe6a4e1ceed817f387587b18f2b51047" +dependencies = [ + "typenum", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "serde" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "git+https://github.com/sp1-patches/RustCrypto-hashes?branch=patch-v0.10.8#3d692aa90b91513886d757d01f8fc2d51c0ec0d7" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core", +] + +[[package]] +name = "signature-verification-program" +version = "0.1.0" +dependencies = [ + "aptos-lc-core", + "sphinx-derive", + "sphinx-zkvm", +] + +[[package]] +name = "sphinx-derive" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sphinx-precompiles" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "anyhow", + "bincode", + "bls12_381", + "cfg-if", + "getrandom", + "hybrid-array", + "k256", + "serde", +] + +[[package]] +name = "sphinx-zkvm" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "bincode", + "cfg-if", + "getrandom", + "k256", + "once_cell", + "rand", + "sha2 0.10.8", + "sphinx-precompiles", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "git+https://github.com/sp1-patches/tiny-keccak?branch=patch-v2.0.2#aa70bacdfece9dc7ea4936f808887c43a09b3b0a" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/aptos/programs/epoch-change/Cargo.lock b/aptos/programs/epoch-change/Cargo.lock new file mode 100644 index 00000000..1731d3e3 --- /dev/null +++ b/aptos/programs/epoch-change/Cargo.lock @@ -0,0 +1,681 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "aptos-lc-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "bcs", + "bls12_381", + "bytes", + "cfg-if", + "getset", + "hex", + "serde", + "serde_bytes", + "sha2 0.9.9", + "thiserror", + "tiny-keccak", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bcs" +version = "0.1.4" +source = "git+https://github.com/aptos-labs/bcs.git?rev=d31fab9d81748e2594be5cd5cdf845786a30562d#d31fab9d81748e2594be5cd5cdf845786a30562d" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/lurk-lab/bls12_381.git?branch=zkvm#0d57d6ac0af6a464c4764809b5bf994d15920762" +dependencies = [ + "cfg-if", + "digest 0.9.0", + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +dependencies = [ + "serde", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "tap", + "zeroize", +] + +[[package]] +name = "epoch-change-program" +version = "0.1.0" +dependencies = [ + "aptos-lc-core", + "sphinx-zkvm", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getset" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hybrid-array" +version = "0.2.0-rc.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53668f5da5a41d9eaf4bf7064be46d1ebe6a4e1ceed817f387587b18f2b51047" +dependencies = [ + "typenum", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "serde" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "git+https://github.com/sp1-patches/RustCrypto-hashes?branch=patch-v0.10.8#3d692aa90b91513886d757d01f8fc2d51c0ec0d7" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core", +] + +[[package]] +name = "sphinx-precompiles" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "anyhow", + "bincode", + "bls12_381", + "cfg-if", + "getrandom", + "hybrid-array", + "k256", + "serde", +] + +[[package]] +name = "sphinx-zkvm" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "bincode", + "cfg-if", + "getrandom", + "k256", + "once_cell", + "rand", + "sha2 0.10.8", + "sphinx-precompiles", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "git+https://github.com/sp1-patches/tiny-keccak?branch=patch-v2.0.2#aa70bacdfece9dc7ea4936f808887c43a09b3b0a" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/aptos/programs/inclusion/Cargo.lock b/aptos/programs/inclusion/Cargo.lock new file mode 100644 index 00000000..f316987d --- /dev/null +++ b/aptos/programs/inclusion/Cargo.lock @@ -0,0 +1,681 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "aptos-lc-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "bcs", + "bls12_381", + "bytes", + "cfg-if", + "getset", + "hex", + "serde", + "serde_bytes", + "sha2 0.9.9", + "thiserror", + "tiny-keccak", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bcs" +version = "0.1.4" +source = "git+https://github.com/aptos-labs/bcs.git?rev=d31fab9d81748e2594be5cd5cdf845786a30562d#d31fab9d81748e2594be5cd5cdf845786a30562d" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "git+https://github.com/lurk-lab/bls12_381.git?branch=zkvm#0d57d6ac0af6a464c4764809b5bf994d15920762" +dependencies = [ + "cfg-if", + "digest 0.9.0", + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +dependencies = [ + "serde", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "tap", + "zeroize", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getset" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hybrid-array" +version = "0.2.0-rc.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53668f5da5a41d9eaf4bf7064be46d1ebe6a4e1ceed817f387587b18f2b51047" +dependencies = [ + "typenum", +] + +[[package]] +name = "inclusion-program" +version = "0.1.0" +dependencies = [ + "aptos-lc-core", + "sphinx-zkvm", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "serde" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "git+https://github.com/sp1-patches/RustCrypto-hashes?branch=patch-v0.10.8#3d692aa90b91513886d757d01f8fc2d51c0ec0d7" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core", +] + +[[package]] +name = "sphinx-precompiles" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "anyhow", + "bincode", + "bls12_381", + "cfg-if", + "getrandom", + "hybrid-array", + "k256", + "serde", +] + +[[package]] +name = "sphinx-zkvm" +version = "0.1.0" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "bincode", + "cfg-if", + "getrandom", + "k256", + "once_cell", + "rand", + "sha2 0.10.8", + "sphinx-precompiles", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "git+https://github.com/sp1-patches/tiny-keccak?branch=patch-v2.0.2#aa70bacdfece9dc7ea4936f808887c43a09b3b0a" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" From 3c96d7f1858aac394dccbe8c2d5937c4f9fc3920 Mon Sep 17 00:00:00 2001 From: tchataigner Date: Tue, 18 Jun 2024 10:35:42 +0200 Subject: [PATCH 02/13] docs: proof server rust doc (#20) * docs: proof server rust doc Signed-off-by: Thomas Chataigner * docs: mdbook Signed-off-by: Thomas Chataigner * chore: missing link in summary Co-authored-by: wwared * docs: document release Signed-off-by: Thomas Chataigner * docs: integrate suggested changes Co-authored-by: wwared * docs: integrate review Signed-off-by: Thomas Chataigner * docs: apply suggested updates Co-authored-by: wwared Co-authored-by: Artem Storozhuk * docs: another batch of suggestions Co-authored-by: wwared * docs: integrate more review Signed-off-by: Thomas Chataigner * docs: Add list of useful tests, mention e2e.rs is STARK-only, remove hackmd link * docs: Groth16 -> Plonk/SNARK --------- Signed-off-by: Thomas Chataigner Co-authored-by: wwared Co-authored-by: Artem Storozhuk --- aptos/Cargo.lock | 1107 +++++++++++------ aptos/README.md | 224 +--- aptos/core/src/types/utils.rs | 4 +- aptos/docs/.gitignore | 1 + aptos/docs/book.toml | 16 + aptos/docs/src/README.md | 26 + aptos/docs/src/SUMMARY.md | 44 + aptos/docs/src/benchmark/configuration.md | 59 + aptos/docs/src/benchmark/e2e.md | 57 + aptos/docs/src/benchmark/overview.md | 9 + aptos/docs/src/benchmark/proof.md | 160 +++ aptos/docs/src/components/aptos_pfn.md | 89 ++ aptos/docs/src/components/client.md | 18 + aptos/docs/src/components/overview.md | 18 + aptos/docs/src/components/proof_server.md | 41 + aptos/docs/src/design/edge_cases.md | 14 + aptos/docs/src/design/epoch_change_proof.md | 33 + aptos/docs/src/design/inclusion_proof.md | 39 + aptos/docs/src/design/overview.md | 10 + aptos/docs/src/images/aptos-blockchain.jpg | Bin 0 -> 92710 bytes aptos/docs/src/images/aptos-proofs.png | Bin 0 -> 30180 bytes aptos/docs/src/images/lc-arch.png | Bin 0 -> 37099 bytes aptos/docs/src/misc/release.md | 37 + aptos/docs/src/run/configuration.md | 31 + aptos/docs/src/run/overview.md | 14 + aptos/docs/src/run/setup_aptos_pfn.md | 85 ++ aptos/docs/src/run/setup_client.md | 24 + aptos/docs/src/run/setup_proof_server.md | 68 + aptos/light-client/benches/e2e.rs | 2 +- aptos/proof-server/1.3.0-pre | 0 aptos/proof-server/Cargo.toml | 12 + aptos/proof-server/README.md | 156 +-- aptos/proof-server/benches/proof_server.rs | 26 +- aptos/proof-server/src/bin/client.rs | 150 ++- aptos/proof-server/src/bin/server_primary.rs | 10 + .../proof-server/src/bin/server_secondary.rs | 9 + aptos/proof-server/src/lib.rs | 21 + aptos/proof-server/src/types/proof_server.rs | 8 + 38 files changed, 1848 insertions(+), 774 deletions(-) create mode 100644 aptos/docs/.gitignore create mode 100644 aptos/docs/book.toml create mode 100644 aptos/docs/src/README.md create mode 100644 aptos/docs/src/SUMMARY.md create mode 100644 aptos/docs/src/benchmark/configuration.md create mode 100644 aptos/docs/src/benchmark/e2e.md create mode 100644 aptos/docs/src/benchmark/overview.md create mode 100644 aptos/docs/src/benchmark/proof.md create mode 100644 aptos/docs/src/components/aptos_pfn.md create mode 100644 aptos/docs/src/components/client.md create mode 100644 aptos/docs/src/components/overview.md create mode 100644 aptos/docs/src/components/proof_server.md create mode 100644 aptos/docs/src/design/edge_cases.md create mode 100644 aptos/docs/src/design/epoch_change_proof.md create mode 100644 aptos/docs/src/design/inclusion_proof.md create mode 100644 aptos/docs/src/design/overview.md create mode 100644 aptos/docs/src/images/aptos-blockchain.jpg create mode 100644 aptos/docs/src/images/aptos-proofs.png create mode 100644 aptos/docs/src/images/lc-arch.png create mode 100644 aptos/docs/src/misc/release.md create mode 100644 aptos/docs/src/run/configuration.md create mode 100644 aptos/docs/src/run/overview.md create mode 100644 aptos/docs/src/run/setup_aptos_pfn.md create mode 100644 aptos/docs/src/run/setup_client.md create mode 100644 aptos/docs/src/run/setup_proof_server.md delete mode 100644 aptos/proof-server/1.3.0-pre diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index 23aed649..ffa1f932 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -7,6 +7,10 @@ name = "Inflector" version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] [[package]] name = "abstract-domain-derive" @@ -124,147 +128,6 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" -[[package]] -name = "alloy" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-contract", - "alloy-core", - "alloy-eips", - "alloy-genesis", - "alloy-provider", - "alloy-rpc-client", - "alloy-serde", - "alloy-signer", - "alloy-signer-wallet", - "alloy-transport-http", - "reqwest 0.12.4", -] - -[[package]] -name = "alloy-consensus" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "serde", - "sha2 0.10.8", -] - -[[package]] -name = "alloy-contract" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-network", - "alloy-primitives", - "alloy-provider", - "alloy-rpc-types", - "alloy-sol-types", - "alloy-transport", - "futures", - "futures-util", - "thiserror", -] - -[[package]] -name = "alloy-core" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5af3faff14c12c8b11037e0a093dd157c3702becb8435577a2408534d0758315" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-primitives", - "alloy-sol-types", -] - -[[package]] -name = "alloy-dyn-abi" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6e6436a9530f25010d13653e206fab4c9feddacf21a54de8d7311b275bc56b" -dependencies = [ - "alloy-json-abi", - "alloy-primitives", - "alloy-sol-type-parser", - "alloy-sol-types", - "const-hex", - "itoa", - "serde", - "serde_json", - "winnow 0.6.13", -] - -[[package]] -name = "alloy-eips" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "c-kzg", - "once_cell", - "serde", -] - -[[package]] -name = "alloy-genesis" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-json-abi" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeaccd50238126e3a0ff9387c7c568837726ad4f4e399b528ca88104d6c25ef" -dependencies = [ - "alloy-primitives", - "alloy-sol-type-parser", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-json-rpc" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "alloy-network" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-json-rpc", - "alloy-primitives", - "alloy-rpc-types", - "alloy-signer", - "async-trait", - "futures-utils-wasm", - "serde", - "thiserror", -] - [[package]] name = "alloy-primitives" version = "0.7.6" @@ -287,142 +150,16 @@ dependencies = [ "tiny-keccak", ] -[[package]] -name = "alloy-provider" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-json-rpc", - "alloy-network", - "alloy-primitives", - "alloy-rpc-client", - "alloy-rpc-types", - "alloy-rpc-types-trace", - "alloy-transport", - "alloy-transport-http", - "async-stream", - "async-trait", - "auto_impl", - "dashmap", - "futures", - "lru 0.12.3", - "reqwest 0.12.4", - "serde_json", - "tokio", - "tracing", - "url", -] - [[package]] name = "alloy-rlp" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" dependencies = [ - "alloy-rlp-derive", "arrayvec 0.7.4", "bytes", ] -[[package]] -name = "alloy-rlp-derive" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8037e03c7f462a063f28daec9fda285a9a89da003c552f8637a80b9c8fd96241" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "alloy-rpc-client" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-json-rpc", - "alloy-transport", - "alloy-transport-http", - "futures", - "pin-project", - "reqwest 0.12.4", - "serde", - "serde_json", - "tokio", - "tokio-stream", - "tower", - "tracing", - "url", -] - -[[package]] -name = "alloy-rpc-types" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-genesis", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "alloy-sol-types", - "itertools 0.12.1", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "alloy-rpc-types-trace" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "alloy-rpc-types", - "alloy-serde", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-serde" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-signer" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "async-trait", - "auto_impl", - "elliptic-curve", - "k256", - "thiserror", -] - -[[package]] -name = "alloy-signer-wallet" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-consensus", - "alloy-network", - "alloy-primitives", - "alloy-signer", - "async-trait", - "k256", - "rand 0.8.5", - "thiserror", -] - [[package]] name = "alloy-sol-macro" version = "0.7.6" @@ -443,7 +180,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" dependencies = [ - "alloy-json-abi", "alloy-sol-macro-input", "const-hex", "heck 0.5.0", @@ -462,70 +198,27 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" dependencies = [ - "alloy-json-abi", "const-hex", "dunce", "heck 0.5.0", "proc-macro2", "quote", - "serde_json", "syn 2.0.66", "syn-solidity", ] -[[package]] -name = "alloy-sol-type-parser" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa2fbd22d353d8685bd9fee11ba2d8b5c3b1d11e56adb3265fcf1f32bfdf404" -dependencies = [ - "winnow 0.6.13", -] - [[package]] name = "alloy-sol-types" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" dependencies = [ - "alloy-json-abi", "alloy-primitives", "alloy-sol-macro", "const-hex", "serde", ] -[[package]] -name = "alloy-transport" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-json-rpc", - "base64 0.22.1", - "futures-util", - "futures-utils-wasm", - "serde", - "serde_json", - "thiserror", - "tokio", - "tower", - "url", - "wasm-bindgen-futures", -] - -[[package]] -name = "alloy-transport-http" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-json-rpc", - "alloy-transport", - "reqwest 0.12.4", - "serde_json", - "tower", - "url", -] - [[package]] name = "android-tzdata" version = "0.1.1" @@ -921,7 +614,7 @@ dependencies = [ "either", "hex", "itertools 0.12.1", - "lru 0.7.8", + "lru", "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", "num-derive", "once_cell", @@ -1147,7 +840,7 @@ dependencies = [ "itertools 0.12.1", "libsecp256k1", "log", - "lru 0.7.8", + "lru", "merlin", "move-binary-format", "move-cli", @@ -2385,6 +2078,17 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.0", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -2590,6 +2294,12 @@ dependencies = [ "thiserror", ] +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + [[package]] name = "bellpepper" version = "0.4.1" @@ -2882,6 +2592,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.8", + "tinyvec", +] + [[package]] name = "bstr" version = "0.2.17" @@ -2973,20 +2693,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "c-kzg" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" -dependencies = [ - "blst", - "cc", - "glob", - "hex", - "libc", - "serde", -] - [[package]] name = "c_linked_list" version = "1.1.1" @@ -3267,6 +2973,58 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "coins-bip32" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" +dependencies = [ + "bs58", + "coins-core", + "digest 0.10.7", + "hmac 0.12.1", + "k256", + "serde", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "coins-bip39" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" +dependencies = [ + "bitvec 1.0.1", + "coins-bip32", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.12.2", + "rand 0.8.5", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "coins-core" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" +dependencies = [ + "base64 0.21.7", + "bech32", + "bs58", + "digest 0.10.7", + "generic-array", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2 0.10.8", + "sha3 0.10.8", + "thiserror", +] + [[package]] name = "colorchoice" version = "1.0.1" @@ -4066,6 +3824,24 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "enr" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" +dependencies = [ + "base64 0.21.7", + "bytes", + "hex", + "k256", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3 0.10.8", + "zeroize", +] + [[package]] name = "enum_dispatch" version = "0.3.13" @@ -4136,12 +3912,276 @@ dependencies = [ ] [[package]] -name = "error-chain" -version = "0.12.4" +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", +] + +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes", + "ctr", + "digest 0.10.7", + "hex", + "hmac 0.12.1", + "pbkdf2 0.11.0", + "rand 0.8.5", + "scrypt", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "thiserror", + "uuid", +] + +[[package]] +name = "ethabi" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +dependencies = [ + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3 0.10.8", + "thiserror", + "uint", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash 0.8.0", + "impl-codec 0.6.0", + "impl-rlp", + "impl-serde 0.4.0", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash 0.8.0", + "impl-codec 0.6.0", + "impl-rlp", + "impl-serde 0.4.0", + "primitive-types 0.12.2", + "scale-info", + "uint", +] + +[[package]] +name = "ethers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" +dependencies = [ + "ethers-addressbook", + "ethers-contract", + "ethers-core", + "ethers-middleware", + "ethers-providers", + "ethers-signers", +] + +[[package]] +name = "ethers-addressbook" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" +dependencies = [ + "ethers-core", + "once_cell", + "serde", + "serde_json", +] + +[[package]] +name = "ethers-contract" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" +dependencies = [ + "const-hex", + "ethers-contract-abigen", + "ethers-contract-derive", + "ethers-core", + "ethers-providers", + "futures-util", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "ethers-contract-abigen" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" +dependencies = [ + "Inflector", + "const-hex", + "dunce", + "ethers-core", + "eyre", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "serde", + "serde_json", + "syn 2.0.66", + "toml 0.8.2", + "walkdir", +] + +[[package]] +name = "ethers-contract-derive" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" +dependencies = [ + "Inflector", + "const-hex", + "ethers-contract-abigen", + "ethers-core", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.66", +] + +[[package]] +name = "ethers-core" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" +dependencies = [ + "arrayvec 0.7.4", + "bytes", + "cargo_metadata 0.18.1", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array", + "k256", + "num_enum 0.7.2", + "once_cell", + "open-fastrlp", + "rand 0.8.5", + "rlp", + "serde", + "serde_json", + "strum 0.26.2", + "syn 2.0.66", + "tempfile", + "thiserror", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "ethers-middleware" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" +dependencies = [ + "async-trait", + "auto_impl", + "ethers-contract", + "ethers-core", + "ethers-providers", + "ethers-signers", + "futures-channel", + "futures-locks", + "futures-util", + "instant", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "url", +] + +[[package]] +name = "ethers-providers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" +dependencies = [ + "async-trait", + "auto_impl", + "base64 0.21.7", + "bytes", + "const-hex", + "enr", + "ethers-core", + "futures-core", + "futures-timer", + "futures-util", + "hashers", + "http 0.2.12", + "instant", + "jsonwebtoken", + "once_cell", + "pin-project", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "ws_stream_wasm", +] + +[[package]] +name = "ethers-signers" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" dependencies = [ - "version_check", + "async-trait", + "coins-bip32", + "coins-bip39", + "const-hex", + "elliptic-curve", + "eth-keystore", + "ethers-core", + "rand 0.8.5", + "sha2 0.10.8", + "thiserror", + "tracing", ] [[package]] @@ -4150,6 +4190,16 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + [[package]] name = "fail" version = "0.5.1" @@ -4382,6 +4432,16 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +[[package]] +name = "futures-locks" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + [[package]] name = "futures-macro" version = "0.3.30" @@ -4405,6 +4465,16 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers", + "send_wrapper 0.4.0", +] + [[package]] name = "futures-util" version = "0.3.30" @@ -4423,12 +4493,6 @@ dependencies = [ "slab", ] -[[package]] -name = "futures-utils-wasm" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" - [[package]] name = "fxhash" version = "0.2.1" @@ -4591,6 +4655,18 @@ dependencies = [ "walkdir", ] +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "goldenfile" version = "1.7.1" @@ -4747,6 +4823,15 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashers" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + [[package]] name = "headers" version = "0.3.9" @@ -5328,6 +5413,15 @@ dependencies = [ "parity-scale-codec 3.6.11", ] +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + [[package]] name = "impl-serde" version = "0.3.2" @@ -5337,6 +5431,15 @@ dependencies = [ "serde", ] +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + [[package]] name = "impl-trait-for-tuples" version = "0.2.2" @@ -5372,6 +5475,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + [[package]] name = "indexmap" version = "1.9.3" @@ -5854,15 +5963,6 @@ dependencies = [ "hashbrown 0.12.3", ] -[[package]] -name = "lru" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" -dependencies = [ - "hashbrown 0.14.5", -] - [[package]] name = "lz4-sys" version = "1.9.5" @@ -6406,7 +6506,7 @@ dependencies = [ "sha2 0.9.9", "tempfile", "termcolor", - "toml", + "toml 0.7.8", "walkdir", "whoami", ] @@ -6435,7 +6535,7 @@ dependencies = [ "once_cell", "serde", "simplelog", - "toml", + "toml 0.7.8", ] [[package]] @@ -6601,7 +6701,7 @@ dependencies = [ "fail", "hashbrown 0.14.5", "lazy_static", - "lru 0.7.8", + "lru", "move-binary-format", "move-bytecode-verifier", "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", @@ -6940,7 +7040,16 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive 0.7.2", ] [[package]] @@ -6955,6 +7064,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "num_threads" version = "0.1.7" @@ -7008,6 +7129,31 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +[[package]] +name = "open-fastrlp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +dependencies = [ + "arrayvec 0.7.4", + "auto_impl", + "bytes", + "ethereum-types", + "open-fastrlp-derive", +] + +[[package]] +name = "open-fastrlp-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +dependencies = [ + "bytes", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "openssl" version = "0.10.64" @@ -7096,7 +7242,7 @@ dependencies = [ [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "p3-field", "p3-matrix", @@ -7105,7 +7251,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "num-bigint 0.4.5", "p3-field", @@ -7119,7 +7265,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "blake3", "p3-symmetric", @@ -7128,7 +7274,7 @@ dependencies = [ [[package]] name = "p3-bn254-fr" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "ff 0.13.0", "num-bigint 0.4.5", @@ -7142,7 +7288,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -7154,7 +7300,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -7167,7 +7313,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "p3-field", "p3-matrix", @@ -7179,7 +7325,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "itertools 0.12.1", "num-bigint 0.4.5", @@ -7192,7 +7338,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -7210,7 +7356,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "p3-field", "p3-matrix", @@ -7220,7 +7366,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -7229,7 +7375,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "p3-air", "p3-field", @@ -7242,7 +7388,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "itertools 0.12.1", "p3-field", @@ -7256,7 +7402,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "rayon", ] @@ -7264,7 +7410,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "itertools 0.12.1", "p3-dft", @@ -7278,7 +7424,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "itertools 0.12.1", "p3-commit", @@ -7294,7 +7440,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "gcd", "p3-field", @@ -7306,7 +7452,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "itertools 0.12.1", "p3-field", @@ -7316,7 +7462,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "itertools 0.12.1", "p3-air", @@ -7334,7 +7480,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" dependencies = [ "serde", ] @@ -7517,6 +7663,25 @@ dependencies = [ "crypto-mac 0.8.0", ] +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", +] + [[package]] name = "peeking_take_while" version = "0.1.2" @@ -7602,6 +7767,16 @@ dependencies = [ "indexmap 1.9.3", ] +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.0", +] + [[package]] name = "phf" version = "0.11.2" @@ -7906,7 +8081,7 @@ checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" dependencies = [ "fixed-hash 0.7.0", "impl-codec 0.5.1", - "impl-serde", + "impl-serde 0.3.2", "uint", ] @@ -7918,6 +8093,9 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash 0.8.0", "impl-codec 0.6.0", + "impl-rlp", + "impl-serde 0.4.0", + "scale-info", "uint", ] @@ -8592,9 +8770,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", + "rlp-derive", "rustc-hex", ] +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "rocksdb" version = "0.21.0" @@ -8611,7 +8801,7 @@ version = "0.1.0" source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" dependencies = [ "downcast-rs", - "num_enum", + "num_enum 0.5.11", "paste", ] @@ -8837,6 +9027,15 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + [[package]] name = "same-file" version = "1.0.6" @@ -8846,6 +9045,30 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scale-info" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec 3.6.11", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "scc" version = "2.1.1" @@ -8870,6 +9093,18 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac 0.12.1", + "pbkdf2 0.11.0", + "salsa20", + "sha2 0.10.8", +] + [[package]] name = "sct" version = "0.7.1" @@ -8950,6 +9185,18 @@ dependencies = [ "pest", ] +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" version = "1.0.203" @@ -9462,7 +9709,7 @@ dependencies = [ [[package]] name = "sphinx-core" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "anyhow", "arrayref", @@ -9521,7 +9768,7 @@ dependencies = [ [[package]] name = "sphinx-derive" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "proc-macro2", "quote", @@ -9531,7 +9778,7 @@ dependencies = [ [[package]] name = "sphinx-helper" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "cargo_metadata 0.18.1", "chrono", @@ -9540,7 +9787,7 @@ dependencies = [ [[package]] name = "sphinx-primitives" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "itertools 0.12.1", "lazy_static", @@ -9553,7 +9800,7 @@ dependencies = [ [[package]] name = "sphinx-prover" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "anyhow", "backtrace", @@ -9584,6 +9831,7 @@ dependencies = [ "sphinx-recursion-core", "sphinx-recursion-gnark-ffi", "sphinx-recursion-program", + "subtle-encoding", "tempfile", "thiserror", "tokio", @@ -9594,7 +9842,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-circuit" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "bincode", "itertools 0.12.1", @@ -9617,7 +9865,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-compiler" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "backtrace", "itertools 0.12.1", @@ -9641,7 +9889,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-core" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "arrayref", "backtrace", @@ -9674,7 +9922,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-derive" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "proc-macro2", "quote", @@ -9684,9 +9932,10 @@ dependencies = [ [[package]] name = "sphinx-recursion-gnark-ffi" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "bindgen 0.69.4", + "cfg-if", "log", "num-bigint 0.4.5", "p3-baby-bear", @@ -9701,7 +9950,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-program" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "itertools 0.12.1", "p3-air", @@ -9728,15 +9977,18 @@ dependencies = [ [[package]] name = "sphinx-sdk" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ - "alloy", + "alloy-sol-types", "anyhow", "async-trait", "axum 0.7.5", "bincode", + "cfg-if", + "ethers", "futures", "hex", + "home", "indicatif", "log", "num-bigint 0.4.5", @@ -9751,6 +10003,8 @@ dependencies = [ "sha2 0.10.8", "sphinx-core", "sphinx-prover", + "strum 0.26.2", + "strum_macros 0.26.4", "tempfile", "tokio", "tracing", @@ -9870,6 +10124,9 @@ name = "strum" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +dependencies = [ + "strum_macros 0.26.4", +] [[package]] name = "strum_macros" @@ -9916,6 +10173,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + [[package]] name = "subtle-ng" version = "2.5.0" @@ -10181,7 +10447,7 @@ dependencies = [ "anyhow", "hmac 0.8.1", "once_cell", - "pbkdf2", + "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", "sha2 0.9.9", @@ -10315,7 +10581,6 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", - "tokio-util", ] [[package]] @@ -10343,6 +10608,18 @@ dependencies = [ "toml_edit 0.19.15", ] +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + [[package]] name = "toml_datetime" version = "0.6.3" @@ -10362,7 +10639,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow 0.5.40", + "winnow", ] [[package]] @@ -10372,8 +10649,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ "indexmap 2.2.6", + "serde", + "serde_spanned", "toml_datetime", - "winnow 0.5.40", + "winnow", ] [[package]] @@ -10500,6 +10779,16 @@ dependencies = [ "tracing-subscriber 0.3.18", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -10594,7 +10883,7 @@ dependencies = [ [[package]] name = "twirp" version = "0.3.0" -source = "git+https://github.com/github/twirp-rs.git#e18a3cfb30853250213d4bdc486a9fb8f5ac9bd4" +source = "git+https://github.com/github/twirp-rs.git?rev=c85f31f9c54957374e7dcb3534fc52cff0aa2dc5#c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" dependencies = [ "async-trait", "axum 0.7.5", @@ -10905,6 +11194,16 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.15", + "serde", +] + [[package]] name = "valuable" version = "0.1.0" @@ -11391,15 +11690,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winnow" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" -dependencies = [ - "memchr", -] - [[package]] name = "winreg" version = "0.50.0" @@ -11432,6 +11722,25 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.0", + "send_wrapper 0.6.0", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "wyz" version = "0.2.0" diff --git a/aptos/README.md b/aptos/README.md index 7751ca05..523dbc6e 100644 --- a/aptos/README.md +++ b/aptos/README.md @@ -4,14 +4,23 @@ This is a light client for the Aptos blockchain. It is written in Rust and lives directory. In this README we will go over a few details that need to be known before hopping into development. -> [!NOTE] -> A dive in the Light Client design and the available programs can be found on -> HackMD: https://hackmd.io/@lurk-lab/HJvnlbKGR +For a more detailed overview of the Light Client and its components, and how to run and benchmark it, you can refer to +the +mdBook. To read it run: + +```bash +cd docs && \ + mdbook serve --open +``` + +Then navigate to [`localhost:3000`](http://localhost:3000). ## Layout The workspace is divided into the following: +- `proof-server`: The server layer on top of the proving library. It exposes a REST API to generate proofs for the + light client. - `light-client`: The main library that contains the light client implementation. It is in charge of producing proofs regarding the consensus of the chain and inclusion of some account values in a Merkle Tree. - `core`: The core library that contains the data structures and utilities used by the light client. @@ -36,210 +45,5 @@ generated in two ways: ## Benchmarks -The benchmarks for our various programs are located in the `light-client` crate folder. - -Benchmarks can be classified in two distinct categories: - -- _end-to-end_: Those benchmarks are associated with programs that are meant to reproduce - a production environment settings. They are meant to measure performance for a complete - end-to-end flow. -- _internals_: Those benchmarks are associated with programs that are solely meant for - performance measurements on specific parts of the codebase. They are - not meant to measure performance for, or reproduce a production environment settings. - - ### End-to-end - -- `e2e`: Benchmark that will run a proof generation for the programs contained - in `programs/ratchet/src/main.rs` and `programs/merkle/src/main.rs`. The goal here - is to test the complete flow for our light client and get cycle count and proving - time for it. -- `epoch_change`: Benchmark that will run a proof generation for the program contained - in `programs/epoch-change/src/main.rs`. This program will execute a hash for the received - `ValidatorVerifier` to ensure that the signature is from the previous validator set, - execute a `TrustedState::verify_and_ratchet_inner` and finally generate the - hash for the verified `ValidatorVerifier`. -- `inclusion`: Benchmark that will run a proof generation for the program contained - in `programs/inclusion/src/main.rs`. It is meant to assess the cost of verifying - a Merkle proof for a given leaf and a given root. - -### Internals - -- `sig: Benchmark that will run a proof generation for the program contained - in `programs/benchmarks/signature-verification/src/main.rs`. This program mainly executes - an aggregated signature verification for an aggregated signature and a set - of public keys. -- `bytes`: Benchmark that will run a proof generation for the program contained - in `programs/benchmarks/bytes/src/main.rs`. It is meant to assess the cost of serializing - and deserializing data structures of interest to us. - -The benchmark that is the closest to a production scenario is `e2e`. Most of -the other benchmarks are more specific and are meant to assess the cost -of specific operations. - -### Requirements - -To run the benchmarks, you will have to install `cargo criterion`. You can do -so by downloading it with `cargo install cargo-criterion`. - -You will also need to install `pkg-config` and `libudev-dev`. On Linux, you can run: - -```shell -sudo apt-get update && sudo apt-get install -y pkg-config libudev-dev -``` - -### Installing zkvm toolchain and Sphinx's `cargo-prove` - -These are slightly modified instructions from -the [SP1 install from source](https://succinctlabs.github.io/sp1/getting-started/install.html#option-2-building-from-source) -manual. - -**It's important to install `cargo-prove` from Sphinx since it includes compiler optimization flags not present in SP1. -** - -1. Ensure that the `cargo-prove` binary from SP1 is not installed, and if it is, remove it from `PATH`. -2. Install `cargo-prove` from Sphinx: - - git clone git@github.com:lurk-lab/sphinx.git - cd sphinx/cli - cargo install --locked --path . - -3. Install the toolchain. This downloads the pre-built toolchain from SP1 - - cd ~ - cargo prove install-toolchain - -4. Verify the installation by checking if `succinct` is present in the output of `rustup toolchain list` - -### Running the benchmarks - -**Using Makefile** - -To ease benchmark run we created a Makefile in the `light-client` crate folder. -Just run: - -```shell -make benchmark -``` - -You will then be asked for the name of the benchmark you want to run. Just -fill in the one that is of interest to you: - -```shell -$ make benchmark -Enter benchmark name: e2e - - ... - -``` - -**Manual** - -For a manual run, it is necessary to set some Rust environments variable as -such: - -- `RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable"`: - - `-C target-cpu=native`: This will ensure that the binary is optimized - for the CPU it is running on. This is very important - for [plonky3](https://github.com/plonky3/plonky3?tab=readme-ov-file#cpu-features) performance. - - `--cfg tokio_unstable`: This will enable the unstable features of the - Tokio runtime. This is necessary for aptos dependencies. - - This can also be configured in `~/.cargo/config.toml` instead by adding: - ```toml - [target.'cfg(all())'] - rustflags = ["--cfg", "tokio_unstable", "-C", "target-cpu=native"] - ``` - -- `RUST_LOG="debug"`: This will enable the debug logs for the benchmark run, allowing you - to access the cycle tracking numbers for the program execution. -- **Use nightly rust on an AVX-512 equipped CPU for optimal performance.** - -Then, move to the `light-client` folder and run the following command: - -```shell -cargo +nightly bench --features aptos --bench execute -- -``` - -### Interpreting the results - -Before delving into the details, please take a look at the [cycle tracking documentation -from SP1](https://succinctlabs.github.io/sp1/writing-programs/cycle-tracking.html) to get a rough sense of what the -numbers mean. - -The benchmark will output a lot of information. The most important parts are the -following: - -**Total cycles for the program execution** - -This value can be found on the following line: - -```shell -INFO summary: cycles=63736, e2e=2506, khz=25.43, proofSize=2.66 MiB -``` - -It contains the total number of cycles needed for the program, the end-to-end time in milliseconds, the frequency of the -CPU in kHz, and the size of the proof generated. - -**Specific cycle count** - -In the output, you will find a section that looks like this: - -```shell -DEBUG ┌╴read_inputs -DEBUG └╴9,553 cycles -DEBUG ┌╴verify_merkle_proof -DEBUG └╴40,398 cycles -``` - -These specific cycles count are generated by us to track the cost of specific operations in the program. - -**Proving time** -The proving time can be found through the output of the `criterion` crate. -They have the following shape: - -```shell -Sphinx-Verifying/NbrSiblings/17 - time: [765.63 ms 770.67 ms 776.32 ms] -``` - -### Alternative - -As the benchmark can take a long time to run thanks to criterion having a number of -required run at 10, you can also run the tests located in the `light-client` -crate. They will output the same logs as the benchmarks, only the time necessary -to generate a proof will change shape: - -```shell -Starting generation of Merkle inclusion proof with 18 siblings... -Proving locally -Proving took 5.358508094s -Starting verification of Merkle inclusion proof... -Verification took 805.530068ms -``` - -To run the test efficiently, first install `nextest` following [its documentation](https://nexte.st/book/installation). -Ensure that you also have the previously described environment variables set, then run the following command: - -```shell -cargo +nightly nextest run --verbose --release --profile ci --features aptos --package aptos-lc --no-capture -``` - -> Note: The `--no-capture` flag is necessary to see the logs generated by the tests. - -### SNARK proofs (Plonk BN254) - -When running any tests or benchmarks that makes Plonk proofs, it's necessary to build the correct circuit artifacts. - -Currently, if you don't manually build them, it will lead to a proof generation failure (unsatisfied constraint) due to -circuit differences in Sphinx. - -To build the Plonk artifacts, do the following: - -```shell -unset FRI_QUERIES -cd sphinx/prover -make build-plonk-bn254 -mkdir -p ~/.sp1/circuits/plonk_bn254/57ad9e7d/ -cp build/* ~/.sp1/circuits/plonk_bn254/57ad9e7d/ -``` - -The trailing commit identifier after `~/.sp1/circuits/plonk_bn254/` depends on the value of `PLONK_ARTIFACTS_COMMIT` defined [here](https://github.com/lurk-lab/sphinx/blob/df866f8872c108283dc4d0f63abb336de97a3216/prover/src/install.rs#L18), make sure to use the most up-to-date value. +For more information about how to run the benchmarks, please refer to the dedicated section of the mdBook. Otherwise, +the READMEs can be found in the [`docs/src/benchmark`](./docs/src/benchmark/overview.md) folder. diff --git a/aptos/core/src/types/utils.rs b/aptos/core/src/types/utils.rs index e596cb13..ba69e428 100644 --- a/aptos/core/src/types/utils.rs +++ b/aptos/core/src/types/utils.rs @@ -1,8 +1,6 @@ // Copyright (c) Yatima, Inc. // SPDX-License-Identifier: Apache-2.0, MIT -// SPDX-License-Identifier: Apache-2.0, MIT - use anyhow::{anyhow, Result}; /// Size in bytes for an enum variant representation. @@ -11,7 +9,7 @@ pub const ENUM_VARIANT_LEN: usize = 1; /// Size of a u64 representation in bytes. pub const U64_SIZE: usize = 8; -/// Relative offset increments for the voting power field in the [`LedgerInfo`] struct. +/// Relative offset increments for the voting power field in the [`crate::types::ledger_info::LedgerInfo`] struct. pub const VOTING_POWER_OFFSET_INCR: usize = U64_SIZE; /// Size of the LEB128 representation of a public key vector length. diff --git a/aptos/docs/.gitignore b/aptos/docs/.gitignore new file mode 100644 index 00000000..7585238e --- /dev/null +++ b/aptos/docs/.gitignore @@ -0,0 +1 @@ +book diff --git a/aptos/docs/book.toml b/aptos/docs/book.toml new file mode 100644 index 00000000..8bfdc739 --- /dev/null +++ b/aptos/docs/book.toml @@ -0,0 +1,16 @@ +[book] +authors = ["Thomas Chataigner"] +language = "en" +multilingual = false +src = "src" +title = "Aptos Light Client" +description = "A book about the Aptos ZK Light Client" + +[preprocessor.external-links] + +[output.html] +mathjax-support = true + +[output.html.fold] +enable = true +level = 1 \ No newline at end of file diff --git a/aptos/docs/src/README.md b/aptos/docs/src/README.md new file mode 100644 index 00000000..3ef634d5 --- /dev/null +++ b/aptos/docs/src/README.md @@ -0,0 +1,26 @@ + + +The Aptos Light Client (LC) provides a streamlined and efficient way to verify blockchain state transitions and proofs +without +needing to store or synchronize the entire blockchain. + +The following documentation aims to provide a high-level overview of the Aptos LC and its components, along with a guide +on how to set up and run or benchmark the Aptos LC. + +### Sections + +**[High-level design](./design/overview.md)** + +An overview of what is the Light Client and the feature set it provides. + +**[Components](./components/overview.md)** + +A detailed description of the components that make up the Light Client. + +**[Run the Light Client](./run/overview.md)** + +A guide on how to set up and run the Light Client. + +**[Benchmark the Light Client](./benchmark/overview.md)** + +A guide on how to benchmark the Light Client. \ No newline at end of file diff --git a/aptos/docs/src/SUMMARY.md b/aptos/docs/src/SUMMARY.md new file mode 100644 index 00000000..f83941bd --- /dev/null +++ b/aptos/docs/src/SUMMARY.md @@ -0,0 +1,44 @@ +# Summary + +- [Introduction](./README.md) + +# High-level design + +This section goes over the high-level concept behind the Aptos Light Client. + +- [Overview](./design/overview.md) +- [Epoch change proof](./design/epoch_change_proof.md) +- [Inclusion proof](./design/inclusion_proof.md) +- [Edge cases](./design/edge_cases.md) + +# Components + +This section delves into the different components that are part of the Aptos Light Client and their respective role. + +- [Overview](./components/overview.md) +- [Aptos Public Full Node](./components/aptos_pfn.md) +- [Proof Server](./components/proof_server.md) +- [Client](./components/client.md) + +# Run the Light Client + +A guide on how to deploy the Aptos Light Client and run it. + +- [Overview](./run/overview.md) +- [Configuration](./run/configuration.md) +- [Setup an Aptos Full Node](./run/setup_aptos_pfn.md) +- [Launch the Proof Server](./run/setup_proof_server.md) +- [Run the Client](./run/setup_client.md) + +# Benchmarks + +This section goes over how to run the benchmarks to measure the performances of the Aptos Light Client. + +- [Overview](./benchmark/overview.md) +- [Configuration](./benchmark/configuration.md) +- [Benchmarks individual proofs](./benchmark/proof.md) +- [E2E benchmarks](./benchmark/e2e.md) + +# Miscellaneous + +- [Release / Hotfix process](./misc/release.md) \ No newline at end of file diff --git a/aptos/docs/src/benchmark/configuration.md b/aptos/docs/src/benchmark/configuration.md new file mode 100644 index 00000000..bbe64a59 --- /dev/null +++ b/aptos/docs/src/benchmark/configuration.md @@ -0,0 +1,59 @@ +# Configuration for the benchmarks + +In this section we will cover the configuration that should be set to run the benchmarks. It is also +important to run the benchmarks on proper machines, such as the one described for the Proof Server in +the [Run the Light Client](../run/overview.md) section. + +## Settings + +Here are the standard config variables that are worth setting for any benchmark: + +- `RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable"` +- `SHARD_SIZE=4194304` + + The highest possible setting, giving the fewest shards. Because the compression phase dominates the timing of the + SNARK proofs, we need as few shards as possible. + +- `SHARD_BATCH_SIZE=0` + + This disables checkpointing making proving faster at the expense of higher memory usage + +- `cargo +nightly` + + This ensures you are on a nightly toolchain, overriding the local `rust-toolchain.toml` file. Nightly allows usage + of AVX512 instructions which is crucial for performance. + +- `cargo bench --release <...>` + + Or otherwise specify compiler options via `RUSTFLAGS="-Copt-level=3 lto=true <...>"` or Cargo profiles + +- `RUST_LOG=debug` _(optional)_ + + This prints out useful Sphinx metrics, such as cycle counts, iteration speed, proof size, etc. + +## Requirements + +The requirements to run the benchmarks are the same as the ones for the client. You can find those instructions +in [their dedicated section](../run/configuration.md). + +## SNARK proofs + +When running any tests or benchmarks that makes Plonk proofs over BN254, it's necessary to build the correct circuit artifacts. + +If you don't manually build them, it will lead to a proof generation failure (unsatisfied constraint) due to +circuit differences between SP1 and Sphinx. + +To enable Plonk proofs, we first need to generate the necessary circuit artifacts. + +We need to head to the Sphinx repository and run the build script: + +```bash +cd sphinx/prover && \ + make build-plonk-bn254 && \ + mkdir -p ~/.sp1/circuits/plonk_bn254/e48c01ec/ && \ + cp build/* ~/.sp1/circuits/plonk_bn254/e48c01ec/ +``` + +The trailing commit identifier after `~/.sp1/circuits/plonk_bn254/` depends on the value of `PLONK_BN254_ARTIFACTS_COMMIT` +defined [here](https://github.com/lurk-lab/sphinx/blob/dev/prover/src/install.rs), +make sure to use the most up-to-date value for the specific Sphinx release. diff --git a/aptos/docs/src/benchmark/e2e.md b/aptos/docs/src/benchmark/e2e.md new file mode 100644 index 00000000..09547777 --- /dev/null +++ b/aptos/docs/src/benchmark/e2e.md @@ -0,0 +1,57 @@ +## End-to-end benchmarks + +The end-to-end benchmark is meant to benchmark the time taken to send both of the proofs generation request to the Proof +Server, have a parallel computation happen and receive the two proofs back. This benchmark is meant to simulate the +worst case scenario where the client has to generate two proofs in parallel. + +The benchmark can be found in +the [`proof-server`](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/proof-server/benches/proof_server.rs) +crate. It can be run with the following command: + +```bash +RUST_LOG="debug" RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable" PRIMARY_ADDR="127.0.0.1:8080" SECONDARY_ADDR="127.0.0.1:8081" cargo +nightly bench --bench proof_server +``` + +This benchmark will spawn the two servers locally and make two requests in parallel to them. This generates both proofs +at the same time in the same machine. In a production setting, the two prover servers will be in different machines, and +the two proofs will be generated in parallel. +To run the proofs serially instead, pass the `RUN_SERIAL=1` environment variable to the test. This report times that are +closer to a production setting where each proof is generated in parallel by a different machine. + +It measures two main metrics for each proof: + +- `e2e_proving_time`: Time taken to send both request to the Proof Server and generate both proofs. +- `inclusion_proof`: + - `proving_time`: Time taken to generate the inclusion proof. + - `request_response_proof_size`: Size of the proof returned by the server. +- `epoch_change_proof`: + - `proving_time`: Time taken to generate the epoch change proof. + - `request_response_proof_size`: Size of the proof returned by the server. + +```json +{ + e2e_proving_time: 107678, + inclusion_proof: { + proving_time: 107678, + request_response_proof_size: 20823443 + }, + epoch_change_proof: { + proving_time: 125169, + request_response_proof_size: 23088485 + } +} +``` + +> **Note** +> +> As the proof server is run with the `RUST_LOG=debug` environment variable, it is also possible to grab the inner +> metrics from Sphinx. + +## SNARK proofs + +To benchmark the end-to-end flow with Plonk proofs over BN254, we first need to generate the circuits assets as described in [the +configuration section](./configuration.md). Then, just pass the environment variable `SNARK=1`: + +```bash +RUN_SERIAL=1 SNARK=1 RUST_LOG="debug" RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable" PRIMARY_ADDR="127.0.0.1:8080" SECONDARY_ADDR="127.0.0.1:8081" cargo +nightly bench --bench proof_server +``` diff --git a/aptos/docs/src/benchmark/overview.md b/aptos/docs/src/benchmark/overview.md new file mode 100644 index 00000000..85c16fe8 --- /dev/null +++ b/aptos/docs/src/benchmark/overview.md @@ -0,0 +1,9 @@ +# Benchmark proving time + +There are two types of benchmarks that you can run to get insight on the proving time necessary for the proof server to +generate a proof. The first one is the proving benchmark, which is meant to measure the time it takes to generate a +proof for a given circuit. The second one is the end-to-end benchmark, which is meant to measure the time it takes to +generate a proof in the context of a deployed Light Client with the worst case scenario happening. + +Before covering how to run each benchmark we will cover the different configurations that exist for the prover and how +they should be set. \ No newline at end of file diff --git a/aptos/docs/src/benchmark/proof.md b/aptos/docs/src/benchmark/proof.md new file mode 100644 index 00000000..de9885e4 --- /dev/null +++ b/aptos/docs/src/benchmark/proof.md @@ -0,0 +1,160 @@ +# Benchmark individual proofs. + +In this section we will cover how to run the benchmarks for the individual proofs. The benchmarks are located in +the `light-client` crate folder. + +Benchmarks can be classified in two distinct categories: + +- _end-to-end_: Those benchmarks are associated with programs that are meant to reproduce + a production environment settings. They are meant to measure performance for a complete + end-to-end flow. +- _internals_: Those benchmarks are associated with programs that are solely meant for + performance measurements on specific parts of the codebase. They are + not meant to measure performance for, or reproduce a production environment settings. + +## End-to-end + +- [e2e](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/light-client/benches/e2e.rs): Benchmark that will + run a proof generation for both + the [epoch change program](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/programs/epoch-change/src/main.rs) + and + the [inclusion program](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/programs/inclusion/src/main.rs). + The goal here is to test the complete flow for our light client and get cycle count and proving time for it. Note that + each proof is handled sequentially and that this benchmark only generates and verifies STARK proofs. +- [epoch_change](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/light-client/benches/epoch_change.rs): + Benchmark that will run a proof generation + for [epoch change program](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/programs/epoch-change/src/main.rs). + This program will execute a hash for the received `ValidatorVerifier` to ensure that the signature is from the + previous validator set, execute a `TrustedState::verify_and_ratchet_inner` and finally generate the hash for the + verified `ValidatorVerifier`. +- [inclusion](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/light-client/benches/inclusion.rs): + Benchmark that will run a proof generation for + the [inclusion program](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/programs/inclusion/src/main.rs). + It is meant to assess the cost of verifying a Merkle proof for a given leaf and a given root. + +## Internals + +- [sig](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/light-client/benches/sig.rs): Benchmark that will + run a proof generation for + the [signature verification program](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/programs/benchmarks/signature-verification/src/main.rs). + This program mainly executes an aggregated signature verification for an aggregated signature and a set of public + keys. + +The benchmark that is the closest to a production scenario is `e2e`. Most of +the other benchmarks are more specific and are meant to assess the cost +of specific operations. + +### Running the benchmarks + +**Using Makefile** + +To ease benchmark run we created a Makefile in the `light-client` crate folder. +Just run: + +```shell +make benchmark +``` + +You will then be asked for the name of the benchmark you want to run. Just +fill in the one that is of interest to you: + +```shell +$ make benchmark +Enter benchmark name: e2e + + ... + +``` + +**Manual** + +Run the following command: + +```shell +cargo +nightly bench --features aptos --bench execute -- +``` + +## Interpreting the results + +Before delving into the details, please take a look at the [cycle tracking documentation +from SP1](https://succinctlabs.github.io/sp1/writing-programs/cycle-tracking.html) to get a rough sense of what the +numbers mean. + +The benchmark will output a lot of information. The most important parts are the +following: + +**Total cycles for the program execution** + +This value can be found on the following line: + +```shell +INFO summary: cycles=63736, e2e=2506, khz=25.43, proofSize=2.66 MiB +``` + +It contains the total number of cycles needed for the program, the end-to-end time in milliseconds, the frequency of the +CPU in kHz, and the size of the proof generated. + +**Specific cycle count** + +In the output, you will find a section that looks like this: + +```shell +DEBUG ┌╴read_inputs +DEBUG └╴9,553 cycles +DEBUG ┌╴verify_merkle_proof +DEBUG └╴40,398 cycles +``` + +These specific cycles count are generated by us to track the cost of specific operations in the program. + +**Proving time** + +The proving time is an output at the end of a benchmark in the shape of the following data structure, with each time in +milliseconds: + +```json +{ + ratchet_proving_time: 100000, + merkle_proving_time: 100000 +} +``` + +## Alternative + +Another solution to get some information about proving time is to run the tests located in the `light-client` +crate. They will output the same logs as the benchmarks, only the time necessary +to generate a proof will change shape: + +```shell +Starting generation of Merkle inclusion proof with 18 siblings... +Proving locally +Proving took 5.358508094s +Starting verification of Merkle inclusion proof... +Verification took 805.530068ms +``` + +To run the test efficiently, first install `nextest` following [its documentation](https://nexte.st/book/installation). +Ensure that you also have the previously described environment variables set, then run the following command: + +```shell +cargo +nightly nextest run --verbose --release --profile ci --features aptos --package aptos-lc --no-capture +``` + +> **Note** +> +> The `--no-capture` flag is necessary to see the logs generated by the tests. + +Some tests are ignored by default due to heavier resource requirements. To run them, pass `--run-ignored all` to `nextest`. + +A short list of useful tests: + +- `test_execute_epoch_change`: Executes the `epoch_change` program inside the zkVM but does not generate any proofs. +- `test_prove_epoch_change`: Generates and verifies a STARK proof of the `epoch_change` program. +- `test_snark_prove_epoch_change`: Generates and verifies a SNARK proof of the `epoch_change` program. +- `test_execute_inclusion`: Executes the `epoch_change` program inside the zkVM but does not generate any proofs. +- `test_prove_inclusion`: Generates and verifies a STARK proof of the `epoch_change` program. +- `test_snark_inclusion`: Generates and verifies a SNARK proof of the `epoch_change` program. + +> **Note** +> +> Any tests that generates SNARKs requires proper artifacts to be generated according to the [instructions](./configuration.md). diff --git a/aptos/docs/src/components/aptos_pfn.md b/aptos/docs/src/components/aptos_pfn.md new file mode 100644 index 00000000..939b439e --- /dev/null +++ b/aptos/docs/src/components/aptos_pfn.md @@ -0,0 +1,89 @@ +# Aptos Full Node + +In the case of this particular Light Client, we will need to communicate with an Aptos Full Node to retrieve the +necessary data to prove the state of the chain. A deployed Aptos Public Full Node natively exposes RPC endpoints that +can be used to query the state of the chain. + +However, the current codebase for an Aptos Full Node found +at [`aptos-labs/aptos-core`](https://github.com/aptos-labs/aptos-core) does not implement the necessary endpoints that +would allow us to retrieve the data we need. It is especially lacking when it comes to fetching data related to the +consensus layer, such as block header signatures. + +To make up for that, we forked the repository into our +own [`lurk-lab/aptos-core`](https://github.com/lurk-lab/aptos-core). This forked repository should be the reference for +the Aptos Full Node until the core developers of the Aptos protocol have made the necessary update. + +## RPC endpoints + +The only updates made to the Aptos Full Node on our forks are meant to expose two new endpoints: + +- `/v1/epoch/proof?epoch_number={:epoch}`: This endpoint can be used to get all the necessary data to generate a proof + about an Epoch transition. Optionally, one can specify the epoch number to get the data for a specific epoch. +- `/v1/accounts/{:address}/proof?block_height={:height}`: The endpoint can be called to fetch data to prove the + inclusion of the given `address` in the state of the chain. Optionally, one can specify the block height to get the + data at the desired height. + +### `/v1/epoch/proof` + +#### 📨 Request Payload + +- **Epoch number** *integer* + + The epoch number for which we want to get the data. + +#### 📬 Response Payload + +- **LedgerInfoWithSignature** *object* + + The signed ledger data for the block that triggered the epoch transition. + +- **TrustedState** *object* + + A checkpoint of the state representing the validator list for the epoch preceding the one requested. + +### `/v1/accoounts/{:address}/proof` + +#### 📨 Request Payload + +- **Account address** *string[hex]* + + Address of an account. + +- **Block Height** *integer* + + Block height to check inclusion at. + +#### 📬 Response Payload + +- **SparseMerkleProof** *object* + + A data structure containing information to prove that a given account is part of a state resulting from a transaction. + +- **Account state leaf key** *string[hex]* + + Path in the state Merkle Tree for the account leaf to the state root hash. + +- **Account state leaf value** *string[hex]* + + Hashed value of the Account leaf. + +- **TransactionAccumulatorProof** *object* + + A data structure containing information to prove that a transaction is part of the received **LedgerInfoWithSignature + ** + +- **TransactionInfo** *object* + + Information about the transaction, notably the state root hash resulting from its execution. + +- **Transaction index** *number* + + Index associated to the transaction in the accumulator. + +- **LedgerInfoWithSignature** *object* + + The signed ledger data for the block at the given height. + +- **ValidatorVerifier** *object* + + Committee in charge of block header signature when the `LedgerInfoWithSignatures` was produced. \ No newline at end of file diff --git a/aptos/docs/src/components/client.md b/aptos/docs/src/components/client.md new file mode 100644 index 00000000..7f095d6a --- /dev/null +++ b/aptos/docs/src/components/client.md @@ -0,0 +1,18 @@ +# Client + +The client is the coordinator of the Light Client. It is responsible for orchestrating the communication between the +Proof Server and the Aptos Full Node. In our current implementation it also serves as a drop-in replacement for what +would be a verifier deployed on a destination chain. + +The client lifecycle can be divided in two phases: + +- **Initialization**: In this phase, the client fetches the initial data from the Aptos node and + generates the initial state for itself and the verifier. +- **Main Loop**: In this phase, the client listens for new data from the Aptos node and generates + proofs for the verifier to verify. + +The current implementation of the client is specifically designed to cover the worst case scenario of having to handle +the proofs generation in parallel. This flow happens during initialization where we prove the latest epoch change on the +Aptos network while producing an inclusion proof for a given account at the latest block. + +The client currently only requests and verifies STARK proofs. The proof servers have support for generating and verifying SNARK proofs, but the bundled simple client does not yet make use of this. \ No newline at end of file diff --git a/aptos/docs/src/components/overview.md b/aptos/docs/src/components/overview.md new file mode 100644 index 00000000..2b4df53d --- /dev/null +++ b/aptos/docs/src/components/overview.md @@ -0,0 +1,18 @@ +# Architecture components + +Light clients can be seen as lightweight nodes that enable users to interact with the blockchain without needing to +download the entire blockchain history. They **rely on full nodes to provide necessary data**, such as block headers, +and use cryptographic proofs to verify transactions and maintain security. + +There are four core components that need to exist to have a functional light client bridge running: + +- **Source Chain Node**: A full node of the source chain from which it is possible to fetch the necessary data to + generate our proofs. +- **Coordinator Middleware**: This middleware is responsible for orchestrating the other components that are part of the + architecture. +- **Light Client**: The core service developed by Lurk. It contains all the necessary logic to generate the necessary + proofs that is exposed through an RPC endpoint. It also has an underlying storage +- **Verifier**: A software that can verify the proofs generated by the Light Client. Usually it is shaped as a smart + contract living on a destination chain. + + \ No newline at end of file diff --git a/aptos/docs/src/components/proof_server.md b/aptos/docs/src/components/proof_server.md new file mode 100644 index 00000000..5187e134 --- /dev/null +++ b/aptos/docs/src/components/proof_server.md @@ -0,0 +1,41 @@ +# Proof Server + +The Proof Server is a component of the Light Client that is responsible for generating and serving proofs to the client. +The server is designed to be stateless and can be scaled horizontally to handle a large number of requests. The Proof +Server can be divided in two distinct implementations: + +- Proof programs: The proof program contains the logic that will be executed by our Proof server, generating + the succinct proof to be verified. +- Server: The server is a layer added on top of the proving service that makes it available to external users. + +## Proof programs + +This layer of the Proof Server corresponds to the code for which the execution has to be proven. Its logic is the core +of our whole implementation and ensures the validity of what we are trying to achieve. The programs are written in Rust +and leverages our zkVM [`lurk-lab/sphinx`](https://github.com/lurk-lab/sphinx) to generate the proofs and verify them. + +In the design document of both the [epoch change proof](../design/epoch_change_proof.md) and +the [inclusion proof](../design/inclusion_proof.md), we went over what each program has to prove. Most computations +(happening while generating a proof) are directed towards cryptographic operations, such as handling signatures on the block +header. + +To accelerate those operations, we leverage some out-of-VM circuits called **pre-compiles** that are optimized for those +specific operations. The following pre-compiles are used in our codebase: + +- [BLS12-381](https://github.com/lurk-lab/bls12_381/tree/zkvm): A pre-compile that handles BLS12-381 operations, + used for handling the signatures over our block headers. +- [sha2](https://github.com/sp1-patches/RustCrypto-hashes/tree/patch-v0.10.8): A pre-compile that handles the SHA-256 + hashing algorithm, used to hash the message signed by the committee. +- [tiny-keccak](https://github.com/sp1-patches/tiny-keccak/tree/patch-v2.0.2): A pre-compile that handles the + Keccak256 hashing algorithm, used for hashing the internal Aptos data structure. + +The code to be proven is written in Rust and then compiled to RISC-V binaries. We then use the Sphinx tool to generate +the proofs and verify them based on those binaries. + +## Server + +The server is a layer added on top of the proving service that makes it available to external users. It is a simple +HTTP server that is open to incoming TCP stream connection on the port that has been specified at runtime. + +The server is divided in two, with one main entrypoint. This allows us to handle the worst-case scenario of having to +generate both proofs in parallel. It is possible to handle both STARK core proofs and SNARK proofs. \ No newline at end of file diff --git a/aptos/docs/src/design/edge_cases.md b/aptos/docs/src/design/edge_cases.md new file mode 100644 index 00000000..57b48bfe --- /dev/null +++ b/aptos/docs/src/design/edge_cases.md @@ -0,0 +1,14 @@ +# Edge cases + +The worst edge case that can happen for our Light Client is when a user wants to get both proofs at the start of a new +epoch, +meaning that we want to prove both the Epoch Change Proof and the Inclusion Proof at the same time. + +A naïve approach would lead us to a total proving time being equal the sum of their respecting +time \\(D_{\text{total}} = D_{\text{epoch_change_proof}} + D_{\text{inclusion_proof}} \\). + +However, in our setting we can have an optimistic approach where we consider that the epoch transition received is +valid. Thus, starting both proof generation in parallel. As the proving time for the two proofs is equivalent we end up +with \\(D_{\text{total}} = 2 * D_{\text{epoch_change_proof}}\\) which can be reduced to \\(D_{\text{total}} = 2 * D_ +{\text{sig_verification}} \\) as most +of the proving time is dedicated to the BLS12-381 used in the block header signature verification. \ No newline at end of file diff --git a/aptos/docs/src/design/epoch_change_proof.md b/aptos/docs/src/design/epoch_change_proof.md new file mode 100644 index 00000000..53d62da1 --- /dev/null +++ b/aptos/docs/src/design/epoch_change_proof.md @@ -0,0 +1,33 @@ +# Epoch change proof + +The Aptos consensus has (at any given time) a set of validators that are charged with executing blocks and sign them to +append them to the chain state. + +A set of given validators is updated at the last block of every epoch on the chain. An **epoch on the Aptos chain has a +duration of 2 hours**. + +For a given epoch \\(N\\) with a set of validators \\(V_n\\), it is expected to have a block for the transition to +epoch \\(N+1\\) signed by \\(V_n\\) containing the new validator set \\(V_{\text{n+1}}\\)`. + +It is the job of the Light Client to produce a proof at every epoch change to verify the signature on the validators for +the new epoch. + +## Epoch Change program IO + +[Program reference](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/programs/epoch-change/src/main.rs) + +### Inputs + +The following data structures are required for proof generation (detailed data structure references can be found at the +end of this document): + +- **Latest Known `TrustedState`**: The most recent known state, representing the trusted state for the current epoch. + - **`ValidatorVerifier`:** Validator set information for epoch N, provided by the user. +- **`EpochChangeProof`**: Proof structure required to transition to the next epoch. + - **`LedgerInfoWithSignatures`:** Signed ledger info that includes the new validator set for epoch N+1, provided by + the user. + +### Outputs + +- **Previous `ValidatorVerifier` Hash:** The previous validator verifier hash, used for comparison. +- **Ratcheted `ValidatorVerifier` Hash:** The hash representing the new validator set for epoch N+1. \ No newline at end of file diff --git a/aptos/docs/src/design/inclusion_proof.md b/aptos/docs/src/design/inclusion_proof.md new file mode 100644 index 00000000..0aabd760 --- /dev/null +++ b/aptos/docs/src/design/inclusion_proof.md @@ -0,0 +1,39 @@ +# Inclusion proof + +To bridge an account from the Aptos chain to another chain at any given time the LC needs to prove that the given +account exists in the chain state for the latest block produced. + +To do so, the Light Client will first need to verify that the signature on the latest block corresponds to the validator +list known for the current epoch. Then, it will have to prove that the account is part of the updated state that this +block commits. + +## Inclusion program IO + +[Program reference](https://github.com/lurk-lab/zk-light-clients/blob/dev/aptos/programs/inclusion/src/main.rs) + +### Inputs + +The following data structures are required for proof generation (detailed data structure references can be found at the +end of this document): + +- **Block Validation** + - **Latest `LedgerInfoWithSignatures`:** Contains the signed ledger info that acts as a root of trust for the + current epoch. + - **`ValidatorVerifier`:** The verifier set for the current epoch. +- **Merkle Inclusion** + - **Transaction Inclusion in `LedgerInfo`:** Verifies that the specified transaction exists in the block with a + valid state checkpoint. + - **`TransactionInfo`:** Details of the transaction to be verified. + - **Transaction Index in Block:** Position of the transaction within the block. + - **`TransactionAccumulatorProof`:** Accumulator proof that confirms the transaction’s inclusion. + - **Latest `LedgerInfoWithSignatures`:** Acts as a root of trust. + - **Account Inclusion in State Checkpoint:** Verifies that the account exists in the blockchain’s state at the block + level. + - **`SparseMerkleProof`:** Proof that the account is included in the state. + - **Account Key in Tree:** Path of the account within the Merkle tree. + - **Value Hash for Account Leaf:** Initial hash used for inclusion verification. + +### Outputs + +- **Current `ValidatorVerifier` Hash:** The current validator verifier hash, used to validate the incoming data. +- **State Root Hash:** The root hash of the state, derived from the `TransactionInfo::state_checkpoint`. \ No newline at end of file diff --git a/aptos/docs/src/design/overview.md b/aptos/docs/src/design/overview.md new file mode 100644 index 00000000..e2093af0 --- /dev/null +++ b/aptos/docs/src/design/overview.md @@ -0,0 +1,10 @@ +# Design of the Light Client + +At the core of the LC there are two features: + +- Prove epoch transition on the Aptos chain, which is effectively proving a transition from one set of validators to + another one. +- Prove at any given point that an account is part of the Aptos state to provide the bridging capabilities between the + Aptos and another blockchain. + + diff --git a/aptos/docs/src/images/aptos-blockchain.jpg b/aptos/docs/src/images/aptos-blockchain.jpg new file mode 100644 index 0000000000000000000000000000000000000000..074de99ec0e0c32101d13ff2f78be7fc37e51af1 GIT binary patch literal 92710 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

8HV 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 z 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 M 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

}`Gu*mX|3VQHV4Wd<~#)AFlUT+;mfxZ<1~ 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 z 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 literal 0 HcmV?d00001 diff --git a/aptos/docs/src/images/lc-arch.png b/aptos/docs/src/images/lc-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..92b9902fdad819ca6d12aaaecef1655c28933cd5 GIT binary patch literal 37099 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 Y!tRG%wegB6$A>YT<)+InFL4U}FY}b<`v3p{ literal 0 HcmV?d00001 diff --git a/aptos/docs/src/misc/release.md b/aptos/docs/src/misc/release.md new file mode 100644 index 00000000..2b38f164 --- /dev/null +++ b/aptos/docs/src/misc/release.md @@ -0,0 +1,37 @@ +# Release and Hotfix process + +This section is for internal usage. It documents the current release and hotfix process to ensure that anyone is able to +run it. + +## Release process + +The release process is mostly automated through the usage of GitHub Actions. + +A release should be initiated through the manually triggered GitHub Action **Bump Version**. When triggering a release, +the reference base that should be chosen is the `dev` branch, with a `release` type and the desired release version. The +specified release version should follow [the Semver standard](https://semver.org/). + +This action opens a new PR from a branch named `release/` with `dev` as its base. A commit is +automatically applied to bump all the `Cargo.toml` version of the relevant crates. The developer in charge of the +release should use this branch to make any necessary updates to the codebase and documentation to have the release +ready. + +Once all the changes are done, the PR can be squash and merged in `dev`. This will trigger the **Tag release** action +that is charged with the publication of a release and a tag named ``. + +## Hotfix process + +The hotfix process is quite similar to the release one. + +**Bump Version** should also be triggered, but with the desired `release/` as reference. A PR will be +opened from a branch named `hotfix/` with the base `release/`. A commit is automatically +applied to bump all the `Cargo.toml` version of the relevant crates. The developer in charge of the +hotfix should use this branch to make any necessary updates to the codebase and documentation to have the hotfix +ready. + +Once all the changes are done, the PR can be squash and merged in `release/`. This will trigger the +**Tag release** action that is charged with the publication of a release and a tag named ``. + +Finally, the developer will also need to port the changes made to `dev` so that they are reflected on the latest +development stage of the Light Client. + diff --git a/aptos/docs/src/run/configuration.md b/aptos/docs/src/run/configuration.md new file mode 100644 index 00000000..0582c874 --- /dev/null +++ b/aptos/docs/src/run/configuration.md @@ -0,0 +1,31 @@ +# Configuration + +To run the Proof Server and the Client there are a few requirements that needs to be followed on the host machine. + +First, you need to install Rust and Golang. You can find the installation instructions for +Rust [here](https://www.rust-lang.org/tools/install) and for Golang [here](https://golang.org/doc/install). + +Second, you need to install the `cargo-prove` binary. + +1. Install `cargo-prove` from Sphinx: + +```bash +git clone git@github.com:lurk-lab/sphinx.git && \ + cd sphinx/cli && \ + cargo install --locked --path . +``` + +2. Install the toolchain. This downloads the pre-built toolchain from SP1 + +```bash +cd ~ && \ + cargo prove install-toolchain +``` + +3. Verify the installation by checking if `succinct` is present in the output of `rustup toolchain list` + +Finally, there a few packages needed for the build to properly work: + +```bash +sudo apt update && sudo apt-get install -y build-essential libssl-dev pkg-config libudev-dev cmake +``` \ No newline at end of file diff --git a/aptos/docs/src/run/overview.md b/aptos/docs/src/run/overview.md new file mode 100644 index 00000000..eb54fe67 --- /dev/null +++ b/aptos/docs/src/run/overview.md @@ -0,0 +1,14 @@ +# Run the Light Client + +In the previous section, we covered all the architecture components of the Light Client and explained their specific +roles. In this section we will cover how to set them up and run the Light Client to start proving epoch change and +inclusion proofs. + +As the computational requirements for the Proof Server are heavy, here are the recommended specs for the machine that +should be running each component: + +| | CPU | Memory (GB) | Disk Size (GB) | Example | +|-----------------------------------------------------------------------|----------------------------------------------------------------------------------------------|-------------|----------------|--------------------------------------------------------------------------| +| Client | 8 cores, 16 threads | 32 | 64 | [GCP C3](https://cloud.google.com/compute/docs/general-purpose-machines) | +| Proof Server | Intel x86_64 Sapphire Rapids, 64 vCPU, bare metal, supports `avx512_ifma` and `avx512_vbmi2` | 512 | 500 | [AWS R7iz](https://aws.amazon.com/ec2/instance-types/r7iz/) | +| [Aptos Full Node](https://aptos.dev/nodes/full-node/pfn-requirements) | 8 cores, 16 threads (Intel Xeon Skylake or newer) | 32 | A few 100's GB | [GCP C3](https://cloud.google.com/compute/docs/general-purpose-machines) | \ No newline at end of file diff --git a/aptos/docs/src/run/setup_aptos_pfn.md b/aptos/docs/src/run/setup_aptos_pfn.md new file mode 100644 index 00000000..c85c3652 --- /dev/null +++ b/aptos/docs/src/run/setup_aptos_pfn.md @@ -0,0 +1,85 @@ +# Setup an Aptos Full Node + +As we covered [in the previous section](../components/aptos_pfn.md), the current reference for the Aptos Full Node +codebase is [`lurk-lab/aptos-core`](https://github.com/lurk-lab/aptos-core). The current version can be found on the +branch [`lurk-lab/aptos-core:release/aptos-node-v1.14.0-patched`](https://github.com/lurk-lab/aptos-core/tree/release/aptos-node-v1.14.0-patched). + +The setup we will go over is a setup by +building the code source. + +The relevant documentation concerning a Full Node deployment can be +found [on the Aptos website](https://aptos.dev/nodes/full-node/public-fullnode/). + +First, clone the repository and move in it: + +```bash +git clone git@github.com:lurk-lab/aptos-core.git && cd aptos-core +``` + +Then, we have some configuration to set up. +Following [the Aptos documentation](https://aptos.dev/nodes/full-node/deployments/deploy-a-pfn-source-code): + +1. Download Genesis blob: + ```bash + curl -O https://raw.githubusercontent.com/aptos-labs/aptos-networks/main/mainnet/genesis.blob + ``` + +2. Download waypoint file: + ```bash + curl -O https://raw.githubusercontent.com/aptos-labs/aptos-networks/main/mainnet/waypoint.txt + ``` + +3. Setup a fullnode.yaml that serves as a configuration file for the node. Here is an example of such a configuration + file, make sure to set the proper data directory and network address for your deployment: + ```yaml + base: + # Update this value to the location you want the node to store its database + data_dir: "/home/user/aptos/db" + role: "full_node" + waypoint: + # Update this value to that which the blockchain publicly provides. Please regard the directions + # below on how to safely manage your genesis_file_location with respect to the waypoint. + from_file: "./waypoint.txt" + + execution: + # Update this to the location to where the genesis.blob is stored, prefer fullpaths + # Note, this must be paired with a waypoint. If you update your waypoint without a + # corresponding genesis, the file location should be an empty path. + genesis_file_location: "./genesis.blob" + + full_node_networks: + - discovery_method: "onchain" + # The network must have a listen address to specify protocols. This runs it locally to + # prevent remote, incoming connections. + listen_address: "/ip4/127.0.0.1/tcp/6180" + network_id: "public" + + # API related configuration, making it available at a given address. + api: + enabled: true + # Update this to fit your deployment address for the node. + address: 127.0.0.1:8080 + + # /!\ IMPORTANT/!\ + # This configuration is especially important for the proof server to work. + # This configuration allows us to access the state at each new block, + # effectively allowing us to create inclusion proof about accounts. + storage: + buffered_state_target_items: 1 + + # This configuration allows for a fast synchronisation of the node. + state_sync: + state_sync_driver: + bootstrapping_mode: DownloadLatestStates + continuous_syncing_mode: ExecuteTransactionsOrApplyOutputs + ``` + +Once the configuration is done, we just need to run the node: + +```bash +cargo run -p aptos-node --release -- -f ./fullnode.yaml +``` + +> **Note** +> +>The synchronisation mode that we use as an example should reach the latest produced block in around 1 hour. \ No newline at end of file diff --git a/aptos/docs/src/run/setup_client.md b/aptos/docs/src/run/setup_client.md new file mode 100644 index 00000000..9a2051f2 --- /dev/null +++ b/aptos/docs/src/run/setup_client.md @@ -0,0 +1,24 @@ +# Run the Client + +The final component that we need to set up is the Client. As both the Aptos Full Node and the Proof Server are +available, +one can start the coordination of the proving process between the two of them. + +The first setup steps are similar to the Proof Server as they are binaries of the same crate. + +## Requirements + +Make sure that the configuration specified in [the dedicated section](./configuration.md) are met. + +## Launch the Client + +With our deployment machine properly configured, we can run the client. + +```bash +git clone git@github.com:lurk-lab/zk-light-clients.git && \ + cd zk-light-clients/aptos/proof-server && \ + RUST_LOG="debug" cargo +nightly run -p proof-server --release --bin client -- --proof-server-address --aptos-node-url +``` + +With this, the Client should start its initialization process and be able to make requests to both the Proof Server and +the Aptos Full Node. \ No newline at end of file diff --git a/aptos/docs/src/run/setup_proof_server.md b/aptos/docs/src/run/setup_proof_server.md new file mode 100644 index 00000000..97086451 --- /dev/null +++ b/aptos/docs/src/run/setup_proof_server.md @@ -0,0 +1,68 @@ +# Deploy the Proof Server + +As previously stated, we have two components to deploy for the Proof Server to work as intended. The primary and the +secondary server. There is no particular order in which they should be deployed, but here we will deploy the secondary +and then the primary. + +## Requirements + +Make sure that the configuration specified in [the dedicated section](./configuration.md) are met. + +## SNARK proofs + +We mentioned earlier that the Proof Server has the capabilities of handling two types of proofs: either Sphinx core proofs +or SNARK proofs using Plonk. + +To enable Plonk proofs, we first need to generate the necessary circuit artifacts. + +We need to head to the Sphinx repository and run the build script: + +```bash +cd sphinx/prover && \ + make build-plonk-bn254 && \ + mkdir -p ~/.sp1/circuits/plonk_bn254/e48c01ec/ && \ + cp build/* ~/.sp1/circuits/plonk_bn254/e48c01ec/ +``` + +The trailing commit identifier after `~/.sp1/circuits/plonk_bn254/` depends on the value of `PLONK_BN254_ARTIFACTS_COMMIT` +defined [here](https://github.com/lurk-lab/sphinx/blob/dev/prover/src/install.rs), +make sure to use the most up-to-date value for the specific Sphinx release. + +## Environment variables + +- `RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable"`: + - `-C target-cpu=native`: This will ensure that the binary is optimized + for the CPU it is running on. This is very important + for [plonky3](https://github.com/plonky3/plonky3?tab=readme-ov-file#cpu-features) performance. + - `--cfg tokio_unstable`: This will enable the unstable features of the + Tokio runtime. This is necessary for aptos dependencies. + - This can also be configured in `~/.cargo/config.toml` instead by adding: + ```toml + [target.'cfg(all())'] + rustflags = ["--cfg", "tokio_unstable", "-C", "target-cpu=native"] + ``` + +> **Note** +> +> One can also set the `RUST_LOG` environment variable to `debug` to get more information +> about the execution of the server. + +## Deploy the secondary server + +Now that our deployment machine is properly configured, we can run the secondary server. + +```bash +git clone git@github.com:lurk-lab/zk-light-clients.git && \ + cd zk-light-clients/aptos/proof-server && \ + RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable" cargo +nightly run --release --bin server_secondary -- -a +``` + +## Deploy the primary server + +Finally, once the primary server is configured in the same fashion, run it: + +```bash +git clone git@github.com:lurk-lab/zk-light-clients.git && \ + cd zk-light-clients/aptos/proof-server && \ + RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable" cargo +nightly run --release --bin server_primary -- -a --snd-addr +``` diff --git a/aptos/light-client/benches/e2e.rs b/aptos/light-client/benches/e2e.rs index cbf81979..5fc281ca 100644 --- a/aptos/light-client/benches/e2e.rs +++ b/aptos/light-client/benches/e2e.rs @@ -17,7 +17,7 @@ //! and optimize the verification process. //! //! For more information on the Light Client design, its programs and the predicates used in this -//! benchmark, please refer to the [HackMD document](https://hackmd.io/@lurk-lab/HJvnlbKGR) +//! benchmark, please refer to the [documentation](../../docs/src/benchmark/overview.md). use aptos_lc::inclusion::{ SparseMerkleProofAssets, TransactionProofAssets, ValidatorVerifierAssets, }; diff --git a/aptos/proof-server/1.3.0-pre b/aptos/proof-server/1.3.0-pre deleted file mode 100644 index e69de29b..00000000 diff --git a/aptos/proof-server/Cargo.toml b/aptos/proof-server/Cargo.toml index c6ae4314..2a75c91b 100644 --- a/aptos/proof-server/Cargo.toml +++ b/aptos/proof-server/Cargo.toml @@ -5,6 +5,18 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[[bin]] +name = "client" +path = "src/bin/client.rs" + +[[bin]] +name = "server_primary" +path = "src/bin/server_primary.rs" + +[[bin]] +name = "server_secondary" +path = "src/bin/server_secondary.rs" + [dependencies] # local aptos-lc = { path = "../light-client" } diff --git a/aptos/proof-server/README.md b/aptos/proof-server/README.md index b3a7fd3b..419582a5 100644 --- a/aptos/proof-server/README.md +++ b/aptos/proof-server/README.md @@ -10,154 +10,8 @@ Internally, it's (currently) implemented as two servers that work in tandem. However, a client just needs to interact with the primary server directly. -## Usage instructions - -The following instructions assume that both primary and secondary servers are running locally, on ports 6379 and 6380 -respectively. - -## Run an Aptos node - -You need to run an Aptos node to fetch chain data. The current version -of the node the has to be ran is a fork found -here: [`lurk-lab/aptos-core:release/aptos-node-v1.14.0-patched`](https://github.com/lurk-lab/aptos-core/tree/release/aptos-node-v1.14.0-patched) -and its current head at -commit [`d94b897`](https://github.com/lurk-lab/aptos-core/tree/d94b8974451d088e42882f9e1f761dfddfada345). - -To run the node, you first need to clone the repository: - -```shell -$ git clone -b feature/new-endpoints git@github.com:tchataigner/aptos-core.git -``` - -Then, you will need to download some configuration files: - -```shell -$ cd aptos-core -$ curl -O https://raw.githubusercontent.com/aptos-labs/aptos-networks/main/mainnet/waypoint.txt -$ curl -O https://raw.githubusercontent.com/aptos-labs/aptos-networks/main/mainnet/genesis.blob -``` - -For the last piece of configuration; you will need to set a `fullnode.yaml` file in the root of the repository. -Here is an example of a setup: - -```yaml -base: - # Update this value to the location you want the node to store its database - data_dir: "/home/thomas/aptos/db" - role: "full_node" - waypoint: - # Update this value to that which the blockchain publicly provides. Please regard the directions - # below on how to safely manage your genesis_file_location with respect to the waypoint. - from_file: "./waypoint.txt" - -execution: - # Update this to the location to where the genesis.blob is stored, prefer fullpaths - # Note, this must be paired with a waypoint. If you update your waypoint without a - # corresponding genesis, the file location should be an empty path. - genesis_file_location: "./genesis.blob" - -full_node_networks: - - discovery_method: "onchain" - # The network must have a listen address to specify protocols. This runs it locally to - # prevent remote, incoming connections. - listen_address: "/ip4/127.0.0.1/tcp/6180" - network_id: "public" - -# API related configuration, making it available at a given address. -api: - enabled: true - # Update this to fit your deployment address for the node. - address: 127.0.0.1:8080 - -# /!\ IMPORTANT/!\ -# This configuration is especially important for the proof server to work. -# This configuration allows us to access the state at each new block, -# effectively allowing us to create inclusion proof about accounts. -storage: - buffered_state_target_items: 1 - -# This configuration allows for a fast synchronisation of the node. -state_sync: - state_sync_driver: - bootstrapping_mode: DownloadLatestStates - continuous_syncing_mode: ExecuteTransactionsOrApplyOutputs - -``` - -Finally, you can run the node: - -```shell -$ cargo run -p aptos-node --release -- -f ./fullnode.yaml -``` - -## Running the Proof Server - -Start the secondary server: - -```shell -$ cargo run --release --bin server_secondary -- -a 127.0.0.1:6380 -``` - -Start the primary server: - -```shell -$ cargo run --release --bin server_primary -- -a 127.0.0.1:6379 --snd-addr 127.0.0.1:6380 -``` - -The primary server needs to know the address of the secondary address. It's provided in the `snd-addr` argument. - -### A dummy client - -`client.rs` provides an implementation for a client that can make requests to the proof server. - -Once both servers and the Aptos node are running, you can make the following calls in separate terminals at the same -time: - -```shell -$ cargo run -p proof-server --release --bin client -- --proof-server-address 100.121.74.49:6379 --aptos-node-url 100.106.99.21:8080 -``` - -> Note: use the environment variable `RUST_LOG="debug"` to get more insight on the client execution. - -The server should be able to handle both calls above in parallel. - -### Further details - -For more details on how to interact with the primary server, please call the primary server using the `--help` argument. -It contains information about the protocol a client needs to follow. - -Also, one of the main purposes of the dummy client is to showcase how a client can interact with the server. -So it can be a helpful source to get started on a real client. - -## Running the benchmark - -We have implemented a benchmark for the proof server. It can be run with the following command: - -```shell -$ RUST_LOG=debug RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable" PRIMARY_ADDR="127.0.0.1:8080" SECONDARY_ADDR="127.0.0.1:8081" cargo +nightly bench --bench proof_server -``` - -This benchmark will spawn the two servers locally and make two requests in parallel to them. This generates both proofs -at the same time in the same machine. It measures to main metrics for each proof: - -- `e2e_proving_time`: Time taken to send a request to the proof server, generate the proof and receive the response. -- `request_response_proof_size`: Size of the proof returned by the server. - -The output is formatted as such: - -```json -{ - "inclusion_proof": { - "e2e_proving_time": 107678, - "request_response_proof_size": 20823443 - }, - "epoch_change_proof": { - "e2e_proving_time": 125169, - "request_response_proof_size": 23088485 - } -} -``` - -> Note: As the proof server is run with the `RUST_LOG=debug` environment variable, it is also possible to grab the inner -> metrics -> from Sphinx. \ No newline at end of file +To run the Light Client binaries or its end-to-end benchmarks, please refer to their dedicated sections in the mdBook. +You can find how to run the mdBook in the [README](../README.md). Otherwise, you can find the dedicated markdown files +in +the [`docs/src/run`](../docs/src/run/overview.md) or [`docs/src/benchmark`](../docs/src/benchmark/overview.md) +folder. \ No newline at end of file diff --git a/aptos/proof-server/benches/proof_server.rs b/aptos/proof-server/benches/proof_server.rs index 0784213c..fe16953f 100644 --- a/aptos/proof-server/benches/proof_server.rs +++ b/aptos/proof-server/benches/proof_server.rs @@ -1,3 +1,6 @@ +// Copyright (c) Yatima, Inc. +// SPDX-License-Identifier: Apache-2.0, MIT + use anyhow::anyhow; use bcs::from_bytes; use proof_server::types::aptos::{AccountInclusionProofResponse, EpochChangeProofResponse}; @@ -15,6 +18,7 @@ use tokio::time::sleep; #[derive(Debug, Clone, Serialize)] struct BenchResults { + e2e_proving_time: u128, inclusion_proof: ProofData, epoch_change_proof: ProofData, } @@ -22,7 +26,7 @@ struct BenchResults { #[derive(Debug, Clone, Serialize)] struct ProofData { - e2e_proving_time: u128, + proving_time: u128, request_response_proof_size: usize, } @@ -42,7 +46,7 @@ fn main() -> Result<(), anyhow::Error> { let mut primary_server_process = rt.block_on(start_primary_server(final_snark))?; // Join the benchmark tasks and block until they are done - let (inclusion_proof, epoch_change_proof) = if run_serially { + let (res_inclusion_proof, res_epoch_change_proof) = if run_serially { rt.block_on(async { let inclusion_proof = bench_proving_inclusion(final_snark).await; let epoch_change_proof = bench_proving_epoch_change(final_snark).await; @@ -60,9 +64,19 @@ fn main() -> Result<(), anyhow::Error> { }) }; + let inclusion_proof = res_inclusion_proof??; + let epoch_change_proof = res_epoch_change_proof??; + + let e2e_proving_time = if inclusion_proof.proving_time > epoch_change_proof.proving_time { + inclusion_proof.proving_time + } else { + epoch_change_proof.proving_time + }; + let bench_results = BenchResults { - inclusion_proof: inclusion_proof??, - epoch_change_proof: epoch_change_proof??, + e2e_proving_time, + inclusion_proof, + epoch_change_proof, }; let json_output = serde_json::to_string(&bench_results).unwrap(); @@ -204,7 +218,7 @@ async fn bench_proving_inclusion(final_snark: bool) -> Result Result>, @@ -73,6 +108,7 @@ impl Display for &ProofType { } } +/// The main function of the client. It initializes the client and starts the main loop. #[tokio::main] async fn main() -> Result<()> { let Cli { @@ -190,6 +226,18 @@ async fn main() -> Result<()> { } } +/// Method to initialize the client. It fetches the initial data from the Aptos node and generates +/// the initial state for the client and the verifier. While initializing the client, it handles the +/// generation of both proof as it would happen in the worst-case scenario. +/// +/// # Arguments +/// +/// * `proof_server_address` - The address of the proof server. +/// * `aptos_node_url` - The URL of the Aptos node. +/// +/// # Returns +/// +/// A tuple containing the client state and the verifier state. async fn init( proof_server_address: &Arc, aptos_node_url: &Arc, @@ -249,8 +297,18 @@ async fn init( Ok((ratcheted_trusted_state, verifier_state)) } -/// This method calls the endpoint to fetch epoch change proof data -/// from the Aptos node and returns the deserialized payload. +/// This method calls the endpoint to fetch epoch change proof data from the Aptos node and returns +/// the deserialized payload. +/// +/// # Arguments +/// +/// * `aptos_node_url` - The URL of the Aptos node. +/// * `specific_epoch` - The specific epoch to fetch the epoch change proof data. Latest one if none +/// specified. +/// +/// # Returns +/// +/// The deserialized payload of the epoch change proof data. async fn fetch_epoch_change_proof_data( aptos_node_url: &str, specific_epoch: Option, @@ -269,8 +327,16 @@ async fn fetch_epoch_change_proof_data( }) } -/// This method calls the endpoint to fetch epoch change proof data -/// from the Aptos node and returns the deserialized payload. +/// This method calls the endpoint to fetch epoch change proof data from the Aptos node and returns +/// the deserialized payload. +/// +/// # Arguments +/// +/// * `aptos_node_url` - The URL of the Aptos node. +/// +/// # Returns +/// +/// The deserialized payload of the epoch change proof data. async fn fetch_inclusion_proof_data( aptos_node_url: &str, ) -> Result { @@ -291,7 +357,16 @@ async fn fetch_inclusion_proof_data( /// This method sends a request to the Aptos node and returns the deserialized payload. /// It is a generic method that can be used to fetch any data from the Aptos node. /// +/// # Arguments +/// +/// * `request_url` - The URL of the Aptos node. +/// +/// # Returns +/// +/// The payload of the response as bytes. +/// /// # Errors +/// /// This method returns an error if the request fails or if the response payload /// can't be deserialized. async fn request_aptos_node(request_url: &str) -> Result, ClientError> { @@ -319,7 +394,17 @@ async fn request_aptos_node(request_url: &str) -> Result, ClientError> { /// This method sends a request to the prover and returns the proof. /// +/// # Arguments +/// +/// * `proof_server_address` - The address of the proof server. +/// * `request` - The request to send to the prover. +/// +/// # Returns +/// +/// The proof as bytes. +/// /// # Errors +/// /// This method returns an error if the request fails or if the response payload /// can't be deserialized. async fn request_prover( @@ -353,6 +438,15 @@ async fn request_prover( /// This method verifies the validator verifier predicate, ie: that the validator committee that ///signed the block header corresponds to the one we have in state. +/// +/// # Arguments +/// +/// * `proof` - The proof to verify. +/// * `expected_hash` - The expected hash of the validator verifier. +/// +/// # Returns +/// +/// An error if the predicate is not satisfied. fn assert_validator_verifier_predicate( proof: &mut SphinxProof, expected_hash: HashValue, @@ -375,7 +469,14 @@ fn assert_validator_verifier_predicate( /// This method sends a request to the prover to generate an epoch change proof. /// +/// # Arguments +/// +/// * `proof_server_address` - The address of the proof server. +/// * `aptos_node_url` - The URL of the Aptos node. +/// * `epoch` - The epoch for which to generate the epoch change proof. +/// /// # Errors +/// /// This method returns an error if the request fails or if the response payload /// can't be deserialized. async fn epoch_change_proving_task( @@ -437,6 +538,17 @@ async fn epoch_change_proving_task( Ok((ratcheted_state, validator_verifier_hash, epoch_change_proof)) } +/// This method sends a request to the prover to verify an epoch change proof. +/// +/// # Arguments +/// +/// * `proof_server_address` - The address of the proof server. +/// * `epoch_change_proof` - The epoch change proof to verify. +/// * `verifier_state` - The verifier state to verify. +/// +/// # Returns +/// +/// The verifier state after the verification. async fn epoch_change_verifying_task( proof_server_address: Arc, epoch_change_proof: &mut SphinxProof, @@ -470,6 +582,17 @@ async fn epoch_change_verifying_task( )) } +/// This method sends a request to the prover to generate an account inclusion proof. +/// +/// # Arguments +/// +/// * `proof_server_address` - The address of the proof server. +/// * `aptos_node_url` - The URL of the Aptos node. +/// * `account` - The account to generate the inclusion proof. +/// +/// # Returns +/// +/// The account inclusion proof. async fn inclusion_proving_task( proof_server_address: Arc, aptos_node_url: Arc, @@ -496,6 +619,17 @@ async fn inclusion_proving_task( Ok(account_inclusion_proof) } +/// This method sends a request to the prover to verify an account inclusion proof. +/// +/// # Arguments +/// +/// * `proof_server_address` - The address of the proof server. +/// * `account_inclusion_proof` - The account inclusion proof to verify. +/// * `verifier_state` - The verifier state to verify. +/// +/// # Returns +/// +/// The verifier state after the verification. async fn inclusion_verifying_task( proof_server_address: Arc, account_inclusion_proof: &mut SphinxProof, @@ -529,6 +663,14 @@ async fn inclusion_verifying_task( )) } +/// This method creates a listener for new tasks to verify proofs and processes them. +/// +/// # Arguments +/// +/// * `task_receiver` - The receiver channel for the tasks. +/// * `proof_server_address` - The address of the proof server. +/// * `initial_verifier_state` - The initial verifier state. +/// * `client_state` - The client state. async fn verifier_task( mut task_receiver: mpsc::Receiver, proof_server_address: Arc, diff --git a/aptos/proof-server/src/bin/server_primary.rs b/aptos/proof-server/src/bin/server_primary.rs index 4e32ff88..01702c78 100644 --- a/aptos/proof-server/src/bin/server_primary.rs +++ b/aptos/proof-server/src/bin/server_primary.rs @@ -1,6 +1,16 @@ // Copyright (c) Yatima, Inc. // SPDX-License-Identifier: Apache-2.0, MIT +//! # Primary server +//! +//! The primary server is responsible for handling requests regarding inclusion proofs. It is +//! capable of generating and verifying such proofs. Epoch change requests are offloaded to a +//! secondary server to ease the computational load necessary to handle inclusion proof requests. +//! +//! ## Usage +//! +//! For a detailed usage guide, please refer to the dedicated README in `aptos/docs/src/run/setup_proof_server.md`. + use anyhow::{Error, Result}; use aptos_lc::inclusion; use clap::Parser; diff --git a/aptos/proof-server/src/bin/server_secondary.rs b/aptos/proof-server/src/bin/server_secondary.rs index 671b69e8..3e11bf70 100644 --- a/aptos/proof-server/src/bin/server_secondary.rs +++ b/aptos/proof-server/src/bin/server_secondary.rs @@ -1,6 +1,15 @@ // Copyright (c) Yatima, Inc. // SPDX-License-Identifier: Apache-2.0, MIT +//! # Server secondary +//! +//! Server capable of handling proof generation and verification regarding epoch changes. Such +//! requests are expected to come from the primary server. +//! +//! ## Usage +//! +//! For a detailed usage guide, please refer to the dedicated README in `aptos/docs/src/run/setup_proof_server.md`. + use anyhow::{Error, Result}; use aptos_lc::epoch_change; use clap::Parser; diff --git a/aptos/proof-server/src/lib.rs b/aptos/proof-server/src/lib.rs index 30bc4d8c..5a37c096 100644 --- a/aptos/proof-server/src/lib.rs +++ b/aptos/proof-server/src/lib.rs @@ -1,8 +1,28 @@ // Copyright (c) Yatima, Inc. // SPDX-License-Identifier: Apache-2.0, MIT +//! # Proof Server +//! +//! This crate provides the proof server implementation for the Aptos node. The proof server is +//! responsible for serving proofs to clients that need to verify the state of the ledger. +//! +//! ## Design +//! +//! To provide the full functionalities of a Light Client the proof server is divided in 3 main +//! components: +//! - [`client`]: A client that can be used to coordinate data fetching from an +//! Aptos Public Full Node and the proof server. +//! - [primary server](./bin/server_primary.rs): The main entrypoint for our proof server, in charge +//! of load balancing the incoming requests and handling proofs about account inclusion. +//! - [secondary server](./bin/server_secondary.rs): A secondary server that is in charge of handling +//! requests about epoch changes. + +/// Module containing the errors that can be thrown while using the client and the proof server. pub mod error; +/// Module containing the types encountered while fetching data from an Aptos Public Full Node and +/// interacting with the proof server. pub mod types; +/// Module containing some utilities. pub mod utils; /// Endpoint of the Aptos node to fetch the current ledger info. @@ -11,6 +31,7 @@ pub const APTOS_LEDGER_INFO_ENDPOINT: &str = "v1/"; /// Endpoint of the Aptos node to fetch the epoch change proof. pub const APTOS_EPOCH_CHANGE_PROOF_ENDPOINT: &str = "v1/epoch/proof"; +/// Generates the endpoint to fetch the inclusion proof for a given address. pub fn aptos_inclusion_proof_endpoint(address: &str) -> String { format!("v1/accounts/{address}/proof") } diff --git a/aptos/proof-server/src/types/proof_server.rs b/aptos/proof-server/src/types/proof_server.rs index 77834210..6319888d 100644 --- a/aptos/proof-server/src/types/proof_server.rs +++ b/aptos/proof-server/src/types/proof_server.rs @@ -8,12 +8,15 @@ use serde::{Deserialize, Serialize}; use sphinx_sdk::{SphinxPlonkBn254Proof, SphinxProof}; use std::fmt::Display; +/// Data structure used as a payload to request an epoch change proof generation from the proof +/// server. #[derive(Serialize, Deserialize)] pub struct EpochChangeData { pub trusted_state: Vec, pub epoch_change_proof: Vec, } +/// Data structure used as a payload to request an inclusion proof generation from the proof server. #[derive(Serialize, Deserialize)] pub struct InclusionData { pub sparse_merkle_proof_assets: SparseMerkleProofAssets, @@ -21,6 +24,9 @@ pub struct InclusionData { pub validator_verifier_assets: ValidatorVerifierAssets, } +/// Main request type for the proof server. It can be used to request both inclusion and epoch +/// change proofs, as well as their verification. There are two variants for each type of proof: +/// one using the [`SphinxProof`] type and another using the [`SphinxGroth16Proof`] type. #[derive(Serialize, Deserialize)] pub enum Request { ProveInclusion(InclusionData), @@ -48,6 +54,8 @@ impl Display for &Request { } } +/// Secondary request type for the proof server. It is used to convey request from the primary +/// server to the secondary one. #[derive(Serialize, Deserialize)] pub enum SecondaryRequest { Prove(EpochChangeData), From 654e1216205c68758e9ab29e5ad4f1c0b6a4b692 Mon Sep 17 00:00:00 2001 From: tchataigner Date: Tue, 18 Jun 2024 17:33:13 +0200 Subject: [PATCH 03/13] feat: hotfix workflow (#19) * ci: release ci Signed-off-by: Thomas Chataigner * ci: add release creation Signed-off-by: Thomas Chataigner * ci: fix release files Signed-off-by: Thomas Chataigner * ci: update based on review Signed-off-by: Thomas Chataigner * ci: dry files & hotfix flow Signed-off-by: Thomas Chataigner * Apply suggestions from code review Co-authored-by: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> * ci: base for PR Signed-off-by: Thomas Chataigner * ci: Update release workflow (#26) * ci: Update release workflow * fix: Enforce `major.minor` version only for initial release * fix: Use full `major.minor.patch` for `Cargo.toml` and tag --------- Signed-off-by: Thomas Chataigner Co-authored-by: Samuel Burnham <45365069+samuelburnham@users.noreply.github.com> --- .github/workflows/bump-version-PR.yml | 112 ++++++++++++++++++++++++++ .github/workflows/release-merge.yml | 37 --------- .github/workflows/release.yml | 59 -------------- .github/workflows/tag-release.yml | 55 +++++++++++++ 4 files changed, 167 insertions(+), 96 deletions(-) create mode 100644 .github/workflows/bump-version-PR.yml delete mode 100644 .github/workflows/release-merge.yml delete mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/tag-release.yml diff --git a/.github/workflows/bump-version-PR.yml b/.github/workflows/bump-version-PR.yml new file mode 100644 index 00000000..d0ea36da --- /dev/null +++ b/.github/workflows/bump-version-PR.yml @@ -0,0 +1,112 @@ +name: Bump Version +on: + workflow_dispatch: + inputs: + type: + description: 'release or hotfix' + type: choice + options: + - release + - hotfix + required: true + default: 'release' + # NOTE: For a `release` branch, only specify the `major.minor` version. This branch will be persistent across patches, + # so any patch number specified in this case will be dropped. For a hotfix, specify the full `major.minor.patch` version + version: + description: 'Version' + required: true + +jobs: + release: + runs-on: ubuntu-latest + env: + # Crates from which the version will be bumped + CRATES: './aptos/aptos-programs,./aptos/core,./aptos/light-client,./aptos/programs/inclusion,./aptos/programs/epoch-change,./aptos/proof-server' + + steps: + - name: Git config + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + + git config --global url."https://${{ secrets.REPO_TOKEN }}@github.com/".insteadOf ssh://git@github.com + git config --global url."https://${{ secrets.REPO_TOKEN }}@github.com".insteadOf https://github.com + + - name: Checkout code + uses: actions/checkout@v4 + + # The `release/1.0` branch is always truncated, so that patch version merges still are valid Semver + # However, when we make the initial `release/1.0` version bump, we include the full `1.0.0` in `Cargo.toml` + # and the release for clarity + - name: Set branches + run: | + BASE_VERSION_SHORT=$(echo "${{ inputs.version }}" | cut -d'.' -f1-2) + BASE_VERSION="${BASE_VERSION_SHORT}.0" + if [[ "${{ inputs.type }}" == "hotfix" ]]; then + VERSION=${{ inputs.version }} + BASE_BRANCH="release/$BASE_VERSION_SHORT" + PR_BRANCH="${{ inputs.type }}/${{ inputs.version }}" + git checkout ${{ env.PR_BRANCH }} + else + VERSION=$BASE_VERSION + BASE_BRANCH="main" + PR_BRANCH="release/$BASE_VERSION_SHORT" + git checkout -b ${{ env.PR_BRANCH }} + fi + + echo "BASE_BRANCH=$BASE_BRANCH" | tee -a $GITHUB_ENV + echo "PR_BRANCH=$PR_BRANCH" | tee -a $GITHUB_ENV + echo "PR_DESCRIPTION=chore: Release $VERSION" | tee -a $GITHUB_ENV + echo "VERSION=$VERSION" | tee -a $GITHUB_ENV + + # Regex from https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string + - name: Validate version + run: | + echo "Validating version ${{ env.VERSION }}..." + D='0|[1-9][0-9]*' + PW='[0-9]*[a-zA-Z-][0-9a-zA-Z-]*' + MW='[0-9a-zA-Z-]+' + if [[ "${{ env.VERSION }}" =~ ^($D)\.($D)\.($D)(-(($D|$PW)(\.($D|$PW))*))?(\+($MW(\.$MW)*))?$ ]]; then + echo "Version ${{ env.VERSION }} is valid." + else + echo "Version is not valid SemVer. Aborting..." + exit 1 + fi + + - name: Update version in Cargo.toml + run: | + echo "Updating version in Cargo.toml..." + IFS=',' read -ra CRATE_PATHS <<< "$CRATES" + for path in "${CRATE_PATHS[@]}"; do + cd $path + OLD_VERSION=$(grep -oP 'version = "\K[^"]+' Cargo.toml) + if [[ "${{ env.VERSION }}" > "$OLD_VERSION" ]]; then + sed -i 's/version = "'$OLD_VERSION'"/version = "${{ env.VERSION }}"/' Cargo.toml + else + echo "New version is not greater than the current version for $path. Aborting..." + exit 1 + fi + cd $GITHUB_WORKSPACE + done + + - name: Commit changes + run: | + git add . + git commit -m "${{ env.PR_DESCRIPTION }}" + git push origin ${{ env.PR_BRANCH }} + + # Note: Can't use `peter-evans/create-pull-request` because for hotfixes we need to make the PR with an existing branch + # The former always creates a new one for single-commit PRs, thus overwriting the actual hotfix + - name: Create PR + run: | + cat << 'EOF' > body.md + This is an automated release PR for version `${ env.VERSION }}`. + + On merge, this will trigger the [release publish workflow](${{ github.server_url }}/${{ github.repository }}/actions/workflows/tag-release.yml), which will upload a new GitHub release with tag `${{ env.VERSION }}`. + + [Workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) + EOF + + gh pr create --title "${{ env.PR_DESCRIPTION }}" --body-file ./body.md --head ${{ env.PR_BRANCH }} --base ${{ env.BASE_BRANCH }} + env: + GH_TOKEN: ${{ github.token }} diff --git a/.github/workflows/release-merge.yml b/.github/workflows/release-merge.yml deleted file mode 100644 index 09909280..00000000 --- a/.github/workflows/release-merge.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Release PR Merged - -on: - pull_request: - types: [ closed ] - branches: - - dev - -jobs: - # Creates a new tag if a release branch is merged - tag-release: - if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/') - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Get version - id: get-version - run: | - VERSION=$(echo "${{ github.event.pull_request.head.ref }}" | cut -d'/' -f 2) - echo "version=${VERSION}" >> "$GITHUB_OUTPUT" - - - name: Build Changelog - id: github_release - uses: mikepenz/release-changelog-builder-action@v4 - with: - toTag: ${{ steps.get-version.outputs.version }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Create Release - uses: softprops/action-gh-release@v2 - with: - body: ${{steps.github_release.outputs.changelog}} - tag_name: ${{ steps.get-version.outputs.version }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 9fe45645..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Release -on: - workflow_dispatch: - inputs: - version: - description: 'Version' - required: true - -jobs: - release: - runs-on: ubuntu-latest - env: - CRATES: './crate_1,./crate_2' - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - # Regex from https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string - - name: Validate version - run: | - echo "Validating version ${{ github.event.inputs.version }}..." - D='0|[1-9][0-9]*' - PW='[0-9]*[a-zA-Z-][0-9a-zA-Z-]*' - MW='[0-9a-zA-Z-]+' - if [[ "${{ github.event.inputs.version }}" =~ ^($D)\.($D)\.($D)(-(($D|$PW)(\.($D|$PW))*))?(\+($MW(\.$MW)*))?$ ]]; then - echo "Version ${{ github.event.inputs.version }} is valid." - else - echo "Version is not valid SemVer. Aborting..." - exit 1 - fi - - - name: Update version in Cargo.toml - run: | - echo "Updating version in Cargo.toml..." - IFS=',' read -ra CRATE_PATHS <<< "$CRATES" - for path in "${CRATE_PATHS[@]}"; do - cd $path - OLD_VERSION=$(grep -oP 'version = "\K[^"]+' Cargo.toml) - if [[ "${{ inputs.version }}" > "$OLD_VERSION" ]]; then - sed -i 's/version = "'$OLD_VERSION'"/version = "${{ inputs.version }}"/' Cargo.toml - else - echo "New version is not greater than the current version for $path. Aborting..." - exit 1 - fi - cd $GITHUB_WORKSPACE - done - - name: Commit changes - run: | - git config --global user.name 'GitHub Actions' - git config --global user.email 'actions@github.com' - git add . - git commit -m "feat: bump version to ${{ inputs.version }}" - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 - with: - title: "Release ${{ inputs.version }}" - branch: "release/${{ inputs.version }}" \ No newline at end of file diff --git a/.github/workflows/tag-release.yml b/.github/workflows/tag-release.yml new file mode 100644 index 00000000..9b809cc6 --- /dev/null +++ b/.github/workflows/tag-release.yml @@ -0,0 +1,55 @@ +name: Tag release + +on: + pull_request: + types: [ closed ] + branches: + - dev + - release/* + +jobs: + # Creates a new tag if a release branch is merged + tag-bump: + if: | + github.event.pull_request.merged == true && + ((startsWith(github.event.pull_request.head.ref, 'release/') && github.event.pull_request.base.ref == 'dev') || + (startsWith(github.event.pull_request.head.ref, 'hotfix/') && startsWith(github.event.pull_request.base.ref, 'release/'))) + runs-on: ubuntu-latest + steps: + - name: Git config + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + + git config --global url."https://${{ secrets.REPO_TOKEN }}@github.com/".insteadOf ssh://git@github.com + git config --global url."https://${{ secrets.REPO_TOKEN }}@github.com".insteadOf https://github.com + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Get version + id: get-version + run: | + VERSION=$(echo "${{ github.event.pull_request.head.ref }}" | cut -d'/' -f 2) + RELEASE_BRANCH="${{ startsWith(github.event.pull_request.head.ref, 'release/') && github.event.pull_request.head.ref || github.event.pull_request.base.ref }}" + + git tag -a $VERSION -m "$VERSION" $RELEASE_BRANCH + git push origin $VERSION -f + echo "version=$VERSION" | tee -a "$GITHUB_OUTPUT" + echo "RELEASE_BRANCH=$RELEASE_BRANCH" | tee -a "$GITHUB_ENV" + + - name: Build Changelog + id: github_release + uses: mikepenz/release-changelog-builder-action@v4 + with: + toTag: ${{ steps.get-version.outputs.version }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Create Release + uses: ncipollo/release-action@v1 + with: + body: ${{ steps.github_release.outputs.changelog }} + tag: ${{ steps.get-version.outputs.version }} + commit: ${{ env.RELEASE_BRANCH }} + allowUpdates: true From b0ec5a652fdd950a1a03e3b98ad2b9509033b644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Garillot?= <4142+huitseeker@users.noreply.github.com> Date: Mon, 17 Jun 2024 10:48:09 -0400 Subject: [PATCH 04/13] chore: check in Cargo.lock (#24) --- aptos/Cargo.lock | 683 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 683 insertions(+) diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index ffa1f932..ffe7e28a 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -7,10 +7,13 @@ name = "Inflector" version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +<<<<<<< HEAD dependencies = [ "lazy_static", "regex", ] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) [[package]] name = "abstract-domain-derive" @@ -129,6 +132,150 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] +<<<<<<< HEAD +======= +name = "alloy" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-contract", + "alloy-core", + "alloy-eips", + "alloy-genesis", + "alloy-provider", + "alloy-rpc-client", + "alloy-serde", + "alloy-signer", + "alloy-signer-wallet", + "alloy-transport-http", + "reqwest 0.12.4", +] + +[[package]] +name = "alloy-consensus" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-eips", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "serde", + "sha2 0.10.8", +] + +[[package]] +name = "alloy-contract" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-network", + "alloy-primitives", + "alloy-provider", + "alloy-rpc-types", + "alloy-sol-types", + "alloy-transport", + "futures", + "futures-util", + "thiserror", +] + +[[package]] +name = "alloy-core" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5af3faff14c12c8b11037e0a093dd157c3702becb8435577a2408534d0758315" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-types", +] + +[[package]] +name = "alloy-dyn-abi" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6e6436a9530f25010d13653e206fab4c9feddacf21a54de8d7311b275bc56b" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "const-hex", + "itoa", + "serde", + "serde_json", + "winnow 0.6.13", +] + +[[package]] +name = "alloy-eips" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "c-kzg", + "once_cell", + "serde", +] + +[[package]] +name = "alloy-genesis" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-serde", + "serde", +] + +[[package]] +name = "alloy-json-abi" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaeaccd50238126e3a0ff9387c7c568837726ad4f4e399b528ca88104d6c25ef" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-json-rpc" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-network" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-json-rpc", + "alloy-primitives", + "alloy-rpc-types", + "alloy-signer", + "async-trait", + "futures-utils-wasm", + "serde", + "thiserror", +] + +[[package]] +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "alloy-primitives" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -151,16 +298,151 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD +======= +name = "alloy-provider" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-network", + "alloy-primitives", + "alloy-rpc-client", + "alloy-rpc-types", + "alloy-rpc-types-trace", + "alloy-transport", + "alloy-transport-http", + "async-stream", + "async-trait", + "auto_impl", + "dashmap", + "futures", + "lru 0.12.3", + "reqwest 0.12.4", + "serde_json", + "tokio", + "tracing", + "url", +] + +[[package]] +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "alloy-rlp" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" dependencies = [ +<<<<<<< HEAD +======= + "alloy-rlp-derive", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "arrayvec 0.7.4", "bytes", ] [[package]] +<<<<<<< HEAD +======= +name = "alloy-rlp-derive" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8037e03c7f462a063f28daec9fda285a9a89da003c552f8637a80b9c8fd96241" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "alloy-rpc-client" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "alloy-transport-http", + "futures", + "pin-project", + "reqwest 0.12.4", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower", + "tracing", + "url", +] + +[[package]] +name = "alloy-rpc-types" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-genesis", + "alloy-primitives", + "alloy-rlp", + "alloy-serde", + "alloy-sol-types", + "itertools 0.12.1", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "alloy-rpc-types-trace" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "alloy-rpc-types", + "alloy-serde", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-serde" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-signer" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-primitives", + "async-trait", + "auto_impl", + "elliptic-curve", + "k256", + "thiserror", +] + +[[package]] +name = "alloy-signer-wallet" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-consensus", + "alloy-network", + "alloy-primitives", + "alloy-signer", + "async-trait", + "k256", + "rand 0.8.5", + "thiserror", +] + +[[package]] +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "alloy-sol-macro" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -180,6 +462,10 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" dependencies = [ +<<<<<<< HEAD +======= + "alloy-json-abi", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "alloy-sol-macro-input", "const-hex", "heck 0.5.0", @@ -198,21 +484,45 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" dependencies = [ +<<<<<<< HEAD +======= + "alloy-json-abi", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "const-hex", "dunce", "heck 0.5.0", "proc-macro2", "quote", +<<<<<<< HEAD +======= + "serde_json", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "syn 2.0.66", "syn-solidity", ] [[package]] +<<<<<<< HEAD +======= +name = "alloy-sol-type-parser" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baa2fbd22d353d8685bd9fee11ba2d8b5c3b1d11e56adb3265fcf1f32bfdf404" +dependencies = [ + "winnow 0.6.13", +] + +[[package]] +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "alloy-sol-types" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" dependencies = [ +<<<<<<< HEAD +======= + "alloy-json-abi", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "alloy-primitives", "alloy-sol-macro", "const-hex", @@ -220,6 +530,40 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD +======= +name = "alloy-transport" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "base64 0.22.1", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "url", + "wasm-bindgen-futures", +] + +[[package]] +name = "alloy-transport-http" +version = "0.1.0" +source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" +dependencies = [ + "alloy-json-rpc", + "alloy-transport", + "reqwest 0.12.4", + "serde_json", + "tower", + "url", +] + +[[package]] +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "android-tzdata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -614,7 +958,11 @@ dependencies = [ "either", "hex", "itertools 0.12.1", +<<<<<<< HEAD "lru", +======= + "lru 0.7.8", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", "num-derive", "once_cell", @@ -840,7 +1188,11 @@ dependencies = [ "itertools 0.12.1", "libsecp256k1", "log", +<<<<<<< HEAD "lru", +======= + "lru 0.7.8", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "merlin", "move-binary-format", "move-cli", @@ -2079,6 +2431,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "async_io_stream" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2090,6 +2443,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2295,12 +2650,15 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "bech32" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "bellpepper" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2593,6 +2951,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "bs58" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2603,6 +2962,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "bstr" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2694,6 +3055,23 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD +======= +name = "c-kzg" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", +] + +[[package]] +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "c_linked_list" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2974,6 +3352,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "coins-bip32" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3026,6 +3405,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "colorchoice" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3825,6 +4206,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "enr" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3843,6 +4225,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "enum_dispatch" version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3921,6 +4305,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "eth-keystore" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4185,12 +4570,15 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "ethnum" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" [[package]] +<<<<<<< HEAD name = "eyre" version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4201,6 +4589,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "fail" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4433,6 +4823,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] +<<<<<<< HEAD name = "futures-locks" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4443,6 +4834,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "futures-macro" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4466,6 +4859,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] +<<<<<<< HEAD name = "futures-timer" version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4476,6 +4870,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "futures-util" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4494,6 +4890,15 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD +======= +name = "futures-utils-wasm" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" + +[[package]] +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "fxhash" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4656,6 +5061,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "gloo-timers" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4668,6 +5074,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "goldenfile" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4824,6 +5232,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "hashers" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4833,6 +5242,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "headers" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5414,6 +5825,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "impl-rlp" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5423,6 +5835,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "impl-serde" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5432,6 +5846,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "impl-serde" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5441,6 +5856,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "impl-trait-for-tuples" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5476,12 +5893,15 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "indenter" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "indexmap" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5964,6 +6384,18 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD +======= +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "lz4-sys" version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6506,7 +6938,11 @@ dependencies = [ "sha2 0.9.9", "tempfile", "termcolor", +<<<<<<< HEAD "toml 0.7.8", +======= + "toml", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "walkdir", "whoami", ] @@ -6535,7 +6971,11 @@ dependencies = [ "once_cell", "serde", "simplelog", +<<<<<<< HEAD "toml 0.7.8", +======= + "toml", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) ] [[package]] @@ -6701,7 +7141,11 @@ dependencies = [ "fail", "hashbrown 0.14.5", "lazy_static", +<<<<<<< HEAD "lru", +======= + "lru 0.7.8", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "move-binary-format", "move-bytecode-verifier", "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", @@ -7040,6 +7484,7 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ +<<<<<<< HEAD "num_enum_derive 0.5.11", ] @@ -7050,6 +7495,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" dependencies = [ "num_enum_derive 0.7.2", +======= + "num_enum_derive", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) ] [[package]] @@ -7065,6 +7513,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "num_enum_derive" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7077,6 +7526,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "num_threads" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7130,6 +7581,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] +<<<<<<< HEAD name = "open-fastrlp" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7155,6 +7607,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "openssl" version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7242,7 +7696,11 @@ dependencies = [ [[package]] name = "p3-air" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "p3-field", "p3-matrix", @@ -7251,7 +7709,11 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "num-bigint 0.4.5", "p3-field", @@ -7265,7 +7727,11 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "blake3", "p3-symmetric", @@ -7274,7 +7740,11 @@ dependencies = [ [[package]] name = "p3-bn254-fr" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "ff 0.13.0", "num-bigint 0.4.5", @@ -7288,7 +7758,11 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "p3-field", "p3-maybe-rayon", @@ -7300,7 +7774,11 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -7313,7 +7791,11 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "p3-field", "p3-matrix", @@ -7325,7 +7807,11 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "num-bigint 0.4.5", @@ -7338,7 +7824,11 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -7356,7 +7846,11 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "p3-field", "p3-matrix", @@ -7366,7 +7860,11 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "p3-symmetric", "tiny-keccak", @@ -7375,7 +7873,11 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "p3-air", "p3-field", @@ -7388,7 +7890,11 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "p3-field", @@ -7402,7 +7908,11 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "rayon", ] @@ -7410,7 +7920,11 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "p3-dft", @@ -7424,7 +7938,11 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "p3-commit", @@ -7440,7 +7958,11 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "gcd", "p3-field", @@ -7452,7 +7974,11 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "p3-field", @@ -7462,7 +7988,11 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "p3-air", @@ -7480,7 +8010,11 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +======= +source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "serde", ] @@ -7664,6 +8198,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "pbkdf2" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7683,6 +8218,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "peeking_take_while" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7768,6 +8305,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "pharos" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7778,6 +8316,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "phf" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8081,7 +8621,11 @@ checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" dependencies = [ "fixed-hash 0.7.0", "impl-codec 0.5.1", +<<<<<<< HEAD "impl-serde 0.3.2", +======= + "impl-serde", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "uint", ] @@ -8093,9 +8637,12 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash 0.8.0", "impl-codec 0.6.0", +<<<<<<< HEAD "impl-rlp", "impl-serde 0.4.0", "scale-info", +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "uint", ] @@ -8770,11 +9317,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", +<<<<<<< HEAD "rlp-derive", +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "rustc-hex", ] [[package]] +<<<<<<< HEAD name = "rlp-derive" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8786,6 +9337,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "rocksdb" version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8801,7 +9354,11 @@ version = "0.1.0" source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" dependencies = [ "downcast-rs", +<<<<<<< HEAD "num_enum 0.5.11", +======= + "num_enum", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "paste", ] @@ -9028,6 +9585,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] +<<<<<<< HEAD name = "salsa20" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9037,6 +9595,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9046,6 +9606,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "scale-info" version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9070,6 +9631,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "scc" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9094,6 +9657,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] +<<<<<<< HEAD name = "scrypt" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9106,6 +9670,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "sct" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9186,6 +9752,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "send_wrapper" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9198,6 +9765,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "serde" version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9709,7 +10278,11 @@ dependencies = [ [[package]] name = "sphinx-core" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "anyhow", "arrayref", @@ -9768,7 +10341,11 @@ dependencies = [ [[package]] name = "sphinx-derive" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "proc-macro2", "quote", @@ -9778,7 +10355,11 @@ dependencies = [ [[package]] name = "sphinx-helper" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "cargo_metadata 0.18.1", "chrono", @@ -9787,7 +10368,11 @@ dependencies = [ [[package]] name = "sphinx-primitives" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "lazy_static", @@ -9800,7 +10385,11 @@ dependencies = [ [[package]] name = "sphinx-prover" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "anyhow", "backtrace", @@ -9831,7 +10420,10 @@ dependencies = [ "sphinx-recursion-core", "sphinx-recursion-gnark-ffi", "sphinx-recursion-program", +<<<<<<< HEAD "subtle-encoding", +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "tempfile", "thiserror", "tokio", @@ -9842,7 +10434,11 @@ dependencies = [ [[package]] name = "sphinx-recursion-circuit" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "bincode", "itertools 0.12.1", @@ -9865,7 +10461,11 @@ dependencies = [ [[package]] name = "sphinx-recursion-compiler" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "backtrace", "itertools 0.12.1", @@ -9889,7 +10489,11 @@ dependencies = [ [[package]] name = "sphinx-recursion-core" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "arrayref", "backtrace", @@ -9922,7 +10526,11 @@ dependencies = [ [[package]] name = "sphinx-recursion-derive" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "proc-macro2", "quote", @@ -9932,10 +10540,16 @@ dependencies = [ [[package]] name = "sphinx-recursion-gnark-ffi" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "bindgen 0.69.4", "cfg-if", +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "bindgen 0.69.4", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "log", "num-bigint 0.4.5", "p3-baby-bear", @@ -9950,7 +10564,11 @@ dependencies = [ [[package]] name = "sphinx-recursion-program" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "itertools 0.12.1", "p3-air", @@ -9977,18 +10595,29 @@ dependencies = [ [[package]] name = "sphinx-sdk" version = "0.1.0" +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "alloy-sol-types", +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" +dependencies = [ + "alloy", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "anyhow", "async-trait", "axum 0.7.5", "bincode", +<<<<<<< HEAD "cfg-if", "ethers", "futures", "hex", "home", +======= + "futures", + "hex", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "indicatif", "log", "num-bigint 0.4.5", @@ -10003,8 +10632,11 @@ dependencies = [ "sha2 0.10.8", "sphinx-core", "sphinx-prover", +<<<<<<< HEAD "strum 0.26.2", "strum_macros 0.26.4", +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "tempfile", "tokio", "tracing", @@ -10124,9 +10756,12 @@ name = "strum" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +<<<<<<< HEAD dependencies = [ "strum_macros 0.26.4", ] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) [[package]] name = "strum_macros" @@ -10174,6 +10809,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] +<<<<<<< HEAD name = "subtle-encoding" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10183,6 +10819,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "subtle-ng" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10447,7 +11085,11 @@ dependencies = [ "anyhow", "hmac 0.8.1", "once_cell", +<<<<<<< HEAD "pbkdf2 0.4.0", +======= + "pbkdf2", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) "rand 0.7.3", "rustc-hash", "sha2 0.9.9", @@ -10581,6 +11223,10 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", +<<<<<<< HEAD +======= + "tokio-util", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) ] [[package]] @@ -10609,6 +11255,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "toml" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10621,6 +11268,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "toml_datetime" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10639,7 +11288,11 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", +<<<<<<< HEAD "winnow", +======= + "winnow 0.5.40", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) ] [[package]] @@ -10649,10 +11302,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ "indexmap 2.2.6", +<<<<<<< HEAD "serde", "serde_spanned", "toml_datetime", "winnow", +======= + "toml_datetime", + "winnow 0.5.40", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) ] [[package]] @@ -10780,6 +11438,7 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD name = "tracing-futures" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10790,6 +11449,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "tracing-log" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10883,7 +11544,11 @@ dependencies = [ [[package]] name = "twirp" version = "0.3.0" +<<<<<<< HEAD source = "git+https://github.com/github/twirp-rs.git?rev=c85f31f9c54957374e7dcb3534fc52cff0aa2dc5#c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" +======= +source = "git+https://github.com/github/twirp-rs.git#e18a3cfb30853250213d4bdc486a9fb8f5ac9bd4" +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) dependencies = [ "async-trait", "axum 0.7.5", @@ -11195,6 +11860,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] +<<<<<<< HEAD name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11205,6 +11871,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11691,6 +12359,18 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD +======= +name = "winnow" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +dependencies = [ + "memchr", +] + +[[package]] +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "winreg" version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11723,6 +12403,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] +<<<<<<< HEAD name = "ws_stream_wasm" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11742,6 +12423,8 @@ dependencies = [ ] [[package]] +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) name = "wyz" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" From 02d6d5c5053e5093b7ff9ecbf584719f5a73ba73 Mon Sep 17 00:00:00 2001 From: tchataigner Date: Tue, 18 Jun 2024 10:35:42 +0200 Subject: [PATCH 05/13] docs: proof server rust doc (#20) * docs: proof server rust doc Signed-off-by: Thomas Chataigner * docs: mdbook Signed-off-by: Thomas Chataigner * chore: missing link in summary Co-authored-by: wwared * docs: document release Signed-off-by: Thomas Chataigner * docs: integrate suggested changes Co-authored-by: wwared * docs: integrate review Signed-off-by: Thomas Chataigner * docs: apply suggested updates Co-authored-by: wwared Co-authored-by: Artem Storozhuk * docs: another batch of suggestions Co-authored-by: wwared * docs: integrate more review Signed-off-by: Thomas Chataigner * docs: Add list of useful tests, mention e2e.rs is STARK-only, remove hackmd link * docs: Groth16 -> Plonk/SNARK --------- Signed-off-by: Thomas Chataigner Co-authored-by: wwared Co-authored-by: Artem Storozhuk --- aptos/Cargo.lock | 436 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 436 insertions(+) diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index ffe7e28a..a35f4dbe 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -8,12 +8,18 @@ version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "lazy_static", "regex", ] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) [[package]] name = "abstract-domain-derive" @@ -133,6 +139,7 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] <<<<<<< HEAD +<<<<<<< HEAD ======= name = "alloy" version = "0.1.0" @@ -276,6 +283,8 @@ dependencies = [ [[package]] >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "alloy-primitives" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -299,6 +308,7 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD ======= name = "alloy-provider" version = "0.1.0" @@ -327,21 +337,27 @@ dependencies = [ [[package]] >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "alloy-rlp" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" dependencies = [ <<<<<<< HEAD +<<<<<<< HEAD ======= "alloy-rlp-derive", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "arrayvec 0.7.4", "bytes", ] [[package]] <<<<<<< HEAD +<<<<<<< HEAD ======= name = "alloy-rlp-derive" version = "0.3.5" @@ -443,6 +459,8 @@ dependencies = [ [[package]] >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "alloy-sol-macro" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -463,9 +481,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" dependencies = [ <<<<<<< HEAD +<<<<<<< HEAD ======= "alloy-json-abi", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "alloy-sol-macro-input", "const-hex", "heck 0.5.0", @@ -485,24 +506,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" dependencies = [ <<<<<<< HEAD +<<<<<<< HEAD ======= "alloy-json-abi", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "const-hex", "dunce", "heck 0.5.0", "proc-macro2", "quote", <<<<<<< HEAD +<<<<<<< HEAD ======= "serde_json", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "syn 2.0.66", "syn-solidity", ] [[package]] <<<<<<< HEAD +<<<<<<< HEAD ======= name = "alloy-sol-type-parser" version = "0.7.6" @@ -514,15 +542,20 @@ dependencies = [ [[package]] >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "alloy-sol-types" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" dependencies = [ <<<<<<< HEAD +<<<<<<< HEAD ======= "alloy-json-abi", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "alloy-primitives", "alloy-sol-macro", "const-hex", @@ -531,6 +564,7 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD ======= name = "alloy-transport" version = "0.1.0" @@ -564,6 +598,8 @@ dependencies = [ [[package]] >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "android-tzdata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -958,11 +994,15 @@ dependencies = [ "either", "hex", "itertools 0.12.1", +<<<<<<< HEAD <<<<<<< HEAD "lru", ======= "lru 0.7.8", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "lru", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", "num-derive", "once_cell", @@ -1188,11 +1228,15 @@ dependencies = [ "itertools 0.12.1", "libsecp256k1", "log", +<<<<<<< HEAD <<<<<<< HEAD "lru", ======= "lru 0.7.8", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "lru", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "merlin", "move-binary-format", "move-cli", @@ -2432,6 +2476,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "async_io_stream" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2443,8 +2490,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2651,14 +2701,20 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "bech32" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "bellpepper" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2952,6 +3008,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "bs58" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2962,8 +3021,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "bstr" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3056,6 +3118,7 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD ======= name = "c-kzg" version = "1.0.2" @@ -3072,6 +3135,8 @@ dependencies = [ [[package]] >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "c_linked_list" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3353,6 +3418,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "coins-bip32" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3405,8 +3473,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "colorchoice" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4207,6 +4278,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "enr" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4225,8 +4299,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "enum_dispatch" version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4306,6 +4383,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "eth-keystore" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4570,8 +4650,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "ethnum" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4579,6 +4662,9 @@ checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "eyre" version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4589,8 +4675,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "fail" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4824,6 +4913,9 @@ checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "futures-locks" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4834,8 +4926,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "futures-macro" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4860,6 +4955,9 @@ checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "futures-timer" version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4870,8 +4968,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "futures-util" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4891,6 +4992,7 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD ======= name = "futures-utils-wasm" version = "0.1.0" @@ -4899,6 +5001,8 @@ checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" [[package]] >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "fxhash" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5062,6 +5166,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "gloo-timers" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5074,8 +5181,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "goldenfile" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5233,6 +5343,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "hashers" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5242,8 +5355,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "headers" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5826,6 +5942,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "impl-rlp" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5835,8 +5954,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "impl-serde" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5847,6 +5969,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "impl-serde" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5856,8 +5981,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "impl-trait-for-tuples" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5894,14 +6022,20 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "indenter" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "indexmap" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6385,6 +6519,7 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD ======= name = "lru" version = "0.12.3" @@ -6396,6 +6531,8 @@ dependencies = [ [[package]] >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "lz4-sys" version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6938,11 +7075,15 @@ dependencies = [ "sha2 0.9.9", "tempfile", "termcolor", +<<<<<<< HEAD <<<<<<< HEAD "toml 0.7.8", ======= "toml", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "toml 0.7.8", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "walkdir", "whoami", ] @@ -6971,11 +7112,15 @@ dependencies = [ "once_cell", "serde", "simplelog", +<<<<<<< HEAD <<<<<<< HEAD "toml 0.7.8", ======= "toml", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "toml 0.7.8", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -7141,11 +7286,15 @@ dependencies = [ "fail", "hashbrown 0.14.5", "lazy_static", +<<<<<<< HEAD <<<<<<< HEAD "lru", ======= "lru 0.7.8", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "lru", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "move-binary-format", "move-bytecode-verifier", "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", @@ -7485,6 +7634,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "num_enum_derive 0.5.11", ] @@ -7495,9 +7647,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" dependencies = [ "num_enum_derive 0.7.2", +<<<<<<< HEAD ======= "num_enum_derive", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -7514,6 +7669,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "num_enum_derive" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7526,8 +7684,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "num_threads" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7582,6 +7743,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "open-fastrlp" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7607,8 +7771,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "openssl" version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7697,10 +7864,14 @@ dependencies = [ name = "p3-air" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-field", "p3-matrix", @@ -7710,10 +7881,14 @@ dependencies = [ name = "p3-baby-bear" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "num-bigint 0.4.5", "p3-field", @@ -7728,10 +7903,14 @@ dependencies = [ name = "p3-blake3" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "blake3", "p3-symmetric", @@ -7741,10 +7920,14 @@ dependencies = [ name = "p3-bn254-fr" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "ff 0.13.0", "num-bigint 0.4.5", @@ -7759,10 +7942,14 @@ dependencies = [ name = "p3-challenger" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-field", "p3-maybe-rayon", @@ -7775,10 +7962,14 @@ dependencies = [ name = "p3-commit" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -7792,10 +7983,14 @@ dependencies = [ name = "p3-dft" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-field", "p3-matrix", @@ -7808,10 +8003,14 @@ dependencies = [ name = "p3-field" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "num-bigint 0.4.5", @@ -7825,10 +8024,14 @@ dependencies = [ name = "p3-fri" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -7847,10 +8050,14 @@ dependencies = [ name = "p3-interpolation" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-field", "p3-matrix", @@ -7861,10 +8068,14 @@ dependencies = [ name = "p3-keccak" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-symmetric", "tiny-keccak", @@ -7874,10 +8085,14 @@ dependencies = [ name = "p3-keccak-air" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-air", "p3-field", @@ -7891,10 +8106,14 @@ dependencies = [ name = "p3-matrix" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-field", @@ -7909,10 +8128,14 @@ dependencies = [ name = "p3-maybe-rayon" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "rayon", ] @@ -7921,10 +8144,14 @@ dependencies = [ name = "p3-mds" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-dft", @@ -7939,10 +8166,14 @@ dependencies = [ name = "p3-merkle-tree" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-commit", @@ -7959,10 +8190,14 @@ dependencies = [ name = "p3-poseidon2" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "gcd", "p3-field", @@ -7975,10 +8210,14 @@ dependencies = [ name = "p3-symmetric" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-field", @@ -7989,10 +8228,14 @@ dependencies = [ name = "p3-uni-stark" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-air", @@ -8011,10 +8254,14 @@ dependencies = [ name = "p3-util" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ======= source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "serde", ] @@ -8199,6 +8446,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "pbkdf2" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8218,8 +8468,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "peeking_take_while" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8306,6 +8559,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "pharos" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8316,8 +8572,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "phf" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8621,11 +8880,15 @@ checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" dependencies = [ "fixed-hash 0.7.0", "impl-codec 0.5.1", +<<<<<<< HEAD <<<<<<< HEAD "impl-serde 0.3.2", ======= "impl-serde", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "impl-serde 0.3.2", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "uint", ] @@ -8637,12 +8900,18 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash 0.8.0", "impl-codec 0.6.0", +<<<<<<< HEAD <<<<<<< HEAD "impl-rlp", "impl-serde 0.4.0", "scale-info", ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "impl-rlp", + "impl-serde 0.4.0", + "scale-info", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "uint", ] @@ -9317,15 +9586,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", +<<<<<<< HEAD <<<<<<< HEAD "rlp-derive", ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "rlp-derive", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "rustc-hex", ] [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "rlp-derive" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9337,8 +9613,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "rocksdb" version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9354,11 +9633,15 @@ version = "0.1.0" source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" dependencies = [ "downcast-rs", +<<<<<<< HEAD <<<<<<< HEAD "num_enum 0.5.11", ======= "num_enum", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "num_enum 0.5.11", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "paste", ] @@ -9586,6 +9869,9 @@ checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "salsa20" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9595,8 +9881,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9607,6 +9896,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "scale-info" version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9631,8 +9923,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "scc" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9658,6 +9953,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "scrypt" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9670,8 +9968,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "sct" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9753,6 +10054,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "send_wrapper" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9765,8 +10069,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "serde" version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10279,10 +10586,14 @@ dependencies = [ name = "sphinx-core" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "anyhow", "arrayref", @@ -10342,10 +10653,14 @@ dependencies = [ name = "sphinx-derive" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "proc-macro2", "quote", @@ -10356,10 +10671,14 @@ dependencies = [ name = "sphinx-helper" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "cargo_metadata 0.18.1", "chrono", @@ -10369,10 +10688,14 @@ dependencies = [ name = "sphinx-primitives" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "lazy_static", @@ -10386,10 +10709,14 @@ dependencies = [ name = "sphinx-prover" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "anyhow", "backtrace", @@ -10420,10 +10747,14 @@ dependencies = [ "sphinx-recursion-core", "sphinx-recursion-gnark-ffi", "sphinx-recursion-program", +<<<<<<< HEAD <<<<<<< HEAD "subtle-encoding", ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "subtle-encoding", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "tempfile", "thiserror", "tokio", @@ -10435,10 +10766,14 @@ dependencies = [ name = "sphinx-recursion-circuit" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "bincode", "itertools 0.12.1", @@ -10462,10 +10797,14 @@ dependencies = [ name = "sphinx-recursion-compiler" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "backtrace", "itertools 0.12.1", @@ -10490,10 +10829,14 @@ dependencies = [ name = "sphinx-recursion-core" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "arrayref", "backtrace", @@ -10527,10 +10870,14 @@ dependencies = [ name = "sphinx-recursion-derive" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "proc-macro2", "quote", @@ -10541,6 +10888,7 @@ dependencies = [ name = "sphinx-recursion-gnark-ffi" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "bindgen 0.69.4", @@ -10550,6 +10898,12 @@ source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152f dependencies = [ "bindgen 0.69.4", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +dependencies = [ + "bindgen 0.69.4", + "cfg-if", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "log", "num-bigint 0.4.5", "p3-baby-bear", @@ -10565,10 +10919,14 @@ dependencies = [ name = "sphinx-recursion-program" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-air", @@ -10596,6 +10954,7 @@ dependencies = [ name = "sphinx-sdk" version = "0.1.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "alloy-sol-types", @@ -10604,20 +10963,31 @@ source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152f dependencies = [ "alloy", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +dependencies = [ + "alloy-sol-types", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "anyhow", "async-trait", "axum 0.7.5", "bincode", <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "cfg-if", "ethers", "futures", "hex", "home", +<<<<<<< HEAD ======= "futures", "hex", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "indicatif", "log", "num-bigint 0.4.5", @@ -10632,11 +11002,16 @@ dependencies = [ "sha2 0.10.8", "sphinx-core", "sphinx-prover", +<<<<<<< HEAD <<<<<<< HEAD "strum 0.26.2", "strum_macros 0.26.4", ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "strum 0.26.2", + "strum_macros 0.26.4", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "tempfile", "tokio", "tracing", @@ -10757,11 +11132,17 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" <<<<<<< HEAD +<<<<<<< HEAD dependencies = [ "strum_macros 0.26.4", ] ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +dependencies = [ + "strum_macros 0.26.4", +] +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) [[package]] name = "strum_macros" @@ -10810,6 +11191,9 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "subtle-encoding" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10819,8 +11203,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "subtle-ng" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11085,11 +11472,15 @@ dependencies = [ "anyhow", "hmac 0.8.1", "once_cell", +<<<<<<< HEAD <<<<<<< HEAD "pbkdf2 0.4.0", ======= "pbkdf2", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "pbkdf2 0.4.0", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "rand 0.7.3", "rustc-hash", "sha2 0.9.9", @@ -11224,9 +11615,12 @@ dependencies = [ "pin-project-lite", "tokio", <<<<<<< HEAD +<<<<<<< HEAD ======= "tokio-util", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -11256,6 +11650,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "toml" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11268,8 +11665,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "toml_datetime" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11288,11 +11688,15 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", +<<<<<<< HEAD <<<<<<< HEAD "winnow", ======= "winnow 0.5.40", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "winnow", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -11302,6 +11706,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ "indexmap 2.2.6", +<<<<<<< HEAD <<<<<<< HEAD "serde", "serde_spanned", @@ -11311,6 +11716,12 @@ dependencies = [ "toml_datetime", "winnow 0.5.40", >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -11439,6 +11850,9 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "tracing-futures" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11449,8 +11863,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "tracing-log" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11545,10 +11962,14 @@ dependencies = [ name = "twirp" version = "0.3.0" <<<<<<< HEAD +<<<<<<< HEAD source = "git+https://github.com/github/twirp-rs.git?rev=c85f31f9c54957374e7dcb3534fc52cff0aa2dc5#c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" ======= source = "git+https://github.com/github/twirp-rs.git#e18a3cfb30853250213d4bdc486a9fb8f5ac9bd4" >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +source = "git+https://github.com/github/twirp-rs.git?rev=c85f31f9c54957374e7dcb3534fc52cff0aa2dc5#c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "async-trait", "axum 0.7.5", @@ -11861,6 +12282,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11871,8 +12295,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12360,6 +12787,7 @@ dependencies = [ [[package]] <<<<<<< HEAD +<<<<<<< HEAD ======= name = "winnow" version = "0.6.13" @@ -12371,6 +12799,8 @@ dependencies = [ [[package]] >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "winreg" version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12404,6 +12834,9 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "ws_stream_wasm" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12423,8 +12856,11 @@ dependencies = [ ] [[package]] +<<<<<<< HEAD ======= >>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "wyz" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" From d2d9e6135caa500b5b29349ff087d8dc85d5f6dd Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Sun, 16 Jun 2024 15:20:31 +0100 Subject: [PATCH 06/13] feat: Add scaffolding for Plonk verification in Solidity --- .gitmodules | 5 ++ aptos/Cargo.toml | 2 + aptos/light-client/Cargo.toml | 2 +- aptos/light-client/src/epoch_change.rs | 95 +++++++------------- aptos/light-client/src/inclusion.rs | 118 ++++++++++++------------- aptos/solidity/contracts/.gitignore | 14 +++ aptos/solidity/contracts/README.md | 3 + aptos/solidity/contracts/foundry.toml | 6 ++ aptos/solidity/contracts/lib/forge-std | 1 + aptos/solidity/script/Cargo.toml | 18 ++++ aptos/solidity/script/rust-toolchain | 3 + aptos/solidity/script/src/bin/main.rs | 74 ++++++++++++++++ 12 files changed, 216 insertions(+), 125 deletions(-) create mode 100644 .gitmodules create mode 100644 aptos/solidity/contracts/.gitignore create mode 100644 aptos/solidity/contracts/README.md create mode 100644 aptos/solidity/contracts/foundry.toml create mode 160000 aptos/solidity/contracts/lib/forge-std create mode 100644 aptos/solidity/script/Cargo.toml create mode 100644 aptos/solidity/script/rust-toolchain create mode 100644 aptos/solidity/script/src/bin/main.rs diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..996a3e2a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,5 @@ +[submodule "aptos/solidity/contracts/lib/forge-std"] + path = aptos/solidity/contracts/lib/forge-std + url = https://github.com/foundry-rs/forge-std + # https://stackoverflow.com/questions/5126765/how-to-get-rid-of-git-submodules-untracked-status + ignore = dirty diff --git a/aptos/Cargo.toml b/aptos/Cargo.toml index 124db67d..4b4d3757 100644 --- a/aptos/Cargo.toml +++ b/aptos/Cargo.toml @@ -6,6 +6,7 @@ members = [ "light-client", "aptos-programs", "proof-server", + "solidity/script", ] [workspace.dependencies] @@ -49,6 +50,7 @@ sphinx-derive = { git = "ssh://git@github.com/lurk-lab/sphinx", branch = "plonk" sphinx-sdk = { git = "ssh://git@github.com/lurk-lab/sphinx", branch = "plonk", features = ["plonk"] } sphinx-zkvm = { git = "ssh://git@github.com/lurk-lab/sphinx", branch = "plonk" } sphinx-helper = { git = "ssh://git@github.com/lurk-lab/sphinx", branch = "plonk" } +sphinx-prover = { git = "ssh://git@github.com/lurk-lab/sphinx", branch = "plonk" } tokio = "1.37" tokio-stream = "0.1" diff --git a/aptos/light-client/Cargo.toml b/aptos/light-client/Cargo.toml index d5d245d7..d3b6dc47 100644 --- a/aptos/light-client/Cargo.toml +++ b/aptos/light-client/Cargo.toml @@ -18,10 +18,10 @@ anyhow = { workspace = true } getset = { workspace = true } serde = { workspace = true, features = ["derive", "rc"] } thiserror = { workspace = true } +bcs = { workspace = true } [dev-dependencies] aptos-programs = { path = "../aptos-programs", features = ["bench"] } -bcs = { workspace = true } cfg-if = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } diff --git a/aptos/light-client/src/epoch_change.rs b/aptos/light-client/src/epoch_change.rs index 6b69489c..1cad5287 100644 --- a/aptos/light-client/src/epoch_change.rs +++ b/aptos/light-client/src/epoch_change.rs @@ -12,6 +12,29 @@ struct EpochChangeOutput { new_validator_verifier_hash: [u8; 32], } +#[cfg(feature = "aptos")] +pub fn setup_assets() -> (Vec, Vec) { + use aptos_lc_core::aptos_test_utils::wrapper::AptosWrapper; + + const NBR_VALIDATORS: usize = 130; + const AVERAGE_SIGNERS_NBR: usize = 95; + + let mut aptos_wrapper = AptosWrapper::new(20000, NBR_VALIDATORS, AVERAGE_SIGNERS_NBR).unwrap(); + + let trusted_state = bcs::to_bytes(aptos_wrapper.trusted_state()).unwrap(); + let trusted_state_version = *aptos_wrapper.current_version(); + + aptos_wrapper.generate_traffic().unwrap(); + + let state_proof = aptos_wrapper + .new_state_proof(trusted_state_version) + .unwrap(); + + let epoch_change_proof = bcs::to_bytes(state_proof.epoch_changes()).unwrap(); + + (trusted_state, epoch_change_proof) +} + pub fn generate_stdin(current_trusted_state: &[u8], epoch_change_proof: &[u8]) -> SphinxStdin { let mut stdin = SphinxStdin::new(); stdin.write(¤t_trusted_state); @@ -57,6 +80,7 @@ fn prove_epoch_change( #[cfg(all(test, feature = "aptos"))] mod test { + use crate::epoch_change::setup_assets; use crate::error::LightClientError; use sphinx_sdk::utils::setup_logger; use sphinx_sdk::{ProverClient, SphinxStdin}; @@ -85,29 +109,13 @@ mod test { #[test] fn test_execute_epoch_change() { - use aptos_lc_core::aptos_test_utils::wrapper::AptosWrapper; use std::time::Instant; - const NBR_VALIDATORS: usize = 130; - const AVERAGE_SIGNERS_NBR: usize = 95; - - let mut aptos_wrapper = - AptosWrapper::new(20000, NBR_VALIDATORS, AVERAGE_SIGNERS_NBR).unwrap(); - - let trusted_state = bcs::to_bytes(aptos_wrapper.trusted_state()).unwrap(); - let trusted_state_version = *aptos_wrapper.current_version(); - - aptos_wrapper.generate_traffic().unwrap(); - - let state_proof = aptos_wrapper - .new_state_proof(trusted_state_version) - .unwrap(); - - let epoch_change_proof = &bcs::to_bytes(state_proof.epoch_changes()).unwrap(); + let (trusted_state, epoch_change_proof) = setup_assets(); println!("Starting execution of prove_epoch_change..."); let start = Instant::now(); - execute_epoch_change(&trusted_state, epoch_change_proof).unwrap(); + execute_epoch_change(&trusted_state, &epoch_change_proof).unwrap(); println!("Execution took {:?}", start.elapsed()); } @@ -115,39 +123,17 @@ mod test { #[ignore = "This test is too slow for CI"] fn test_prove_epoch_change() { use super::*; - use aptos_lc_core::aptos_test_utils::wrapper::AptosWrapper; - use aptos_lc_core::crypto::hash::CryptoHash; - use aptos_lc_core::types::trusted_state::TrustedState; use sphinx_sdk::ProverClient; use std::time::Instant; - const NBR_VALIDATORS: usize = 130; - const AVERAGE_SIGNERS_NBR: usize = 95; - - let mut aptos_wrapper = - AptosWrapper::new(20000, NBR_VALIDATORS, AVERAGE_SIGNERS_NBR).unwrap(); - - let trusted_state = bcs::to_bytes(aptos_wrapper.trusted_state()).unwrap(); - let validator_verifier_hash = match TrustedState::from_bytes(&trusted_state).unwrap() { - TrustedState::EpochState { epoch_state, .. } => epoch_state.verifier().hash().to_vec(), - _ => panic!("Expected epoch change for current trusted state"), - }; - let trusted_state_version = *aptos_wrapper.current_version(); - - aptos_wrapper.generate_traffic().unwrap(); - - let state_proof = aptos_wrapper - .new_state_proof(trusted_state_version) - .unwrap(); - - let epoch_change_proof = &bcs::to_bytes(state_proof.epoch_changes()).unwrap(); + let (trusted_state, epoch_change_proof) = setup_assets(); let client = ProverClient::new(); let start = Instant::now(); println!("Starting generation of prove_epoch_change proof..."); let (proof, output) = - prove_epoch_change(&client, &trusted_state, epoch_change_proof).unwrap(); + prove_epoch_change(&client, &trusted_state, &epoch_change_proof).unwrap(); println!("Proving took {:?}", start.elapsed()); assert_eq!( @@ -166,38 +152,17 @@ mod test { #[ignore = "This test is too slow for CI"] fn test_snark_prove_epoch_change() { use super::*; - use aptos_lc_core::aptos_test_utils::wrapper::AptosWrapper; - use aptos_lc_core::crypto::hash::CryptoHash; - use aptos_lc_core::types::trusted_state::TrustedState; use sphinx_sdk::ProverClient; use std::time::Instant; setup_logger(); - const NBR_VALIDATORS: usize = 130; - const AVERAGE_SIGNERS_NBR: usize = 95; - - let mut aptos_wrapper = AptosWrapper::new(5, NBR_VALIDATORS, AVERAGE_SIGNERS_NBR).unwrap(); - - let trusted_state = bcs::to_bytes(aptos_wrapper.trusted_state()).unwrap(); - let _validator_verifier_hash = match TrustedState::from_bytes(&trusted_state).unwrap() { - TrustedState::EpochState { epoch_state, .. } => epoch_state.verifier().hash().to_vec(), - _ => panic!("Expected epoch change for current trusted state"), - }; - let trusted_state_version = *aptos_wrapper.current_version(); - - aptos_wrapper.generate_traffic().unwrap(); - - let state_proof = aptos_wrapper - .new_state_proof(trusted_state_version) - .unwrap(); - - let epoch_change_proof = &bcs::to_bytes(state_proof.epoch_changes()).unwrap(); + let (trusted_state, epoch_change_proof) = setup_assets(); let client = ProverClient::new(); let (pk, vk) = client.setup(aptos_programs::EPOCH_CHANGE_PROGRAM); - let stdin = generate_stdin(trusted_state.as_slice(), epoch_change_proof); + let stdin = generate_stdin(trusted_state.as_slice(), &epoch_change_proof); let start = Instant::now(); println!("Starting generation of prove_epoch_change proof..."); diff --git a/aptos/light-client/src/inclusion.rs b/aptos/light-client/src/inclusion.rs index 48acb19c..7891f543 100644 --- a/aptos/light-client/src/inclusion.rs +++ b/aptos/light-client/src/inclusion.rs @@ -67,6 +67,64 @@ impl ValidatorVerifierAssets { } } +#[cfg(feature = "aptos")] +pub fn setup_assets() -> ( + SparseMerkleProofAssets, + TransactionProofAssets, + ValidatorVerifierAssets, +) { + use aptos_lc_core::aptos_test_utils::wrapper::AptosWrapper; + use aptos_lc_core::types::trusted_state::TrustedState; + + const NBR_VALIDATORS: usize = 130; + const AVERAGE_SIGNERS_NBR: usize = 95; + + let mut aptos_wrapper = AptosWrapper::new(500, NBR_VALIDATORS, AVERAGE_SIGNERS_NBR).unwrap(); + aptos_wrapper.generate_traffic().unwrap(); + + let proof_assets = aptos_wrapper.get_latest_proof_account(400).unwrap(); + + let sparse_merkle_proof = bcs::to_bytes(proof_assets.state_proof()).unwrap(); + let key: [u8; 32] = *proof_assets.key().as_ref(); + let element_hash: [u8; 32] = *proof_assets.state_value_hash().unwrap().as_ref(); + + let transaction = bcs::to_bytes(&proof_assets.transaction()).unwrap(); + let transaction_proof = bcs::to_bytes(&proof_assets.transaction_proof()).unwrap(); + + let latest_li = aptos_wrapper.get_latest_li_bytes().unwrap(); + + let validator_verifier = + match TrustedState::from_bytes(&bcs::to_bytes(&aptos_wrapper.trusted_state()).unwrap()) + .unwrap() + { + TrustedState::EpochState { epoch_state, .. } => epoch_state.verifier().clone(), + _ => panic!("expected epoch state"), + }; + + let sparse_merkle_proof_assets = SparseMerkleProofAssets { + sparse_merkle_proof, + leaf_key: key, + leaf_hash: element_hash, + }; + + let transaction_proof_assets = TransactionProofAssets { + transaction, + transaction_index: *proof_assets.transaction_version(), + transaction_proof, + latest_li, + }; + + let validator_verifier_assets = ValidatorVerifierAssets { + validator_verifier: validator_verifier.to_bytes(), + }; + + ( + sparse_merkle_proof_assets, + transaction_proof_assets, + validator_verifier_assets, + ) +} + pub fn generate_stdin( sparse_merkle_proof_assets: &SparseMerkleProofAssets, transaction_proof_assets: &TransactionProofAssets, @@ -141,70 +199,12 @@ fn prove_inclusion( mod test { use crate::error::LightClientError; use crate::inclusion::{ - SparseMerkleProofAssets, TransactionProofAssets, ValidatorVerifierAssets, + setup_assets, SparseMerkleProofAssets, TransactionProofAssets, ValidatorVerifierAssets, }; use aptos_lc_core::types::validator::ValidatorVerifier; use sphinx_sdk::utils::setup_logger; use sphinx_sdk::{ProverClient, SphinxStdin}; - fn setup_assets() -> ( - SparseMerkleProofAssets, - TransactionProofAssets, - ValidatorVerifierAssets, - ) { - use aptos_lc_core::aptos_test_utils::wrapper::AptosWrapper; - use aptos_lc_core::types::trusted_state::TrustedState; - - const NBR_VALIDATORS: usize = 130; - const AVERAGE_SIGNERS_NBR: usize = 95; - - let mut aptos_wrapper = - AptosWrapper::new(500, NBR_VALIDATORS, AVERAGE_SIGNERS_NBR).unwrap(); - aptos_wrapper.generate_traffic().unwrap(); - - let proof_assets = aptos_wrapper.get_latest_proof_account(400).unwrap(); - - let sparse_merkle_proof = bcs::to_bytes(proof_assets.state_proof()).unwrap(); - let key: [u8; 32] = *proof_assets.key().as_ref(); - let element_hash: [u8; 32] = *proof_assets.state_value_hash().unwrap().as_ref(); - - let transaction = bcs::to_bytes(&proof_assets.transaction()).unwrap(); - let transaction_proof = bcs::to_bytes(&proof_assets.transaction_proof()).unwrap(); - - let latest_li = aptos_wrapper.get_latest_li_bytes().unwrap(); - - let validator_verifier = - match TrustedState::from_bytes(&bcs::to_bytes(&aptos_wrapper.trusted_state()).unwrap()) - .unwrap() - { - TrustedState::EpochState { epoch_state, .. } => epoch_state.verifier().clone(), - _ => panic!("expected epoch state"), - }; - - let sparse_merkle_proof_assets = SparseMerkleProofAssets { - sparse_merkle_proof, - leaf_key: key, - leaf_hash: element_hash, - }; - - let transaction_proof_assets = TransactionProofAssets { - transaction, - transaction_index: *proof_assets.transaction_version(), - transaction_proof, - latest_li, - }; - - let validator_verifier_assets = ValidatorVerifierAssets { - validator_verifier: validator_verifier.to_bytes(), - }; - - ( - sparse_merkle_proof_assets, - transaction_proof_assets, - validator_verifier_assets, - ) - } - fn execute_inclusion( sparse_merkle_proof_assets: &SparseMerkleProofAssets, transaction_proof_assets: &TransactionProofAssets, diff --git a/aptos/solidity/contracts/.gitignore b/aptos/solidity/contracts/.gitignore new file mode 100644 index 00000000..85198aaa --- /dev/null +++ b/aptos/solidity/contracts/.gitignore @@ -0,0 +1,14 @@ +# Compiler files +cache/ +out/ + +# Ignores development broadcast logs +!/broadcast +/broadcast/*/31337/ +/broadcast/**/dry-run/ + +# Docs +docs/ + +# Dotenv file +.env diff --git a/aptos/solidity/contracts/README.md b/aptos/solidity/contracts/README.md new file mode 100644 index 00000000..4e4a7eb1 --- /dev/null +++ b/aptos/solidity/contracts/README.md @@ -0,0 +1,3 @@ +## On-chain verification + +TODO diff --git a/aptos/solidity/contracts/foundry.toml b/aptos/solidity/contracts/foundry.toml new file mode 100644 index 00000000..56790bea --- /dev/null +++ b/aptos/solidity/contracts/foundry.toml @@ -0,0 +1,6 @@ +[profile.default] +src = "src" +out = "out" +libs = ["lib"] + +fs_permissions = [{ access = "read-write", path = "./"}] diff --git a/aptos/solidity/contracts/lib/forge-std b/aptos/solidity/contracts/lib/forge-std new file mode 160000 index 00000000..978ac6fa --- /dev/null +++ b/aptos/solidity/contracts/lib/forge-std @@ -0,0 +1 @@ +Subproject commit 978ac6fadb62f5f0b723c996f64be52eddba6801 diff --git a/aptos/solidity/script/Cargo.toml b/aptos/solidity/script/Cargo.toml new file mode 100644 index 00000000..3640bb0d --- /dev/null +++ b/aptos/solidity/script/Cargo.toml @@ -0,0 +1,18 @@ +[package] +version = "0.1.0" +name = "fixture-generator" +edition = "2021" + +[[bin]] +name = "generate-fixture" +path = "src/bin/main.rs" + +[dependencies] +sphinx-sdk = { workspace = true } +sphinx-prover = {workspace = true } +aptos-lc = { path = "../../light-client" } +serde_json = { version = "1.0", default-features = false, features = ["alloc"] } +serde = { version = "1.0", default-features = false, features = ["derive"] } +clap = { version = "4.0", features = ["derive", "env"] } +tracing = "0.1.40" +alloy-sol-types = "0.7.2" diff --git a/aptos/solidity/script/rust-toolchain b/aptos/solidity/script/rust-toolchain new file mode 100644 index 00000000..989860f4 --- /dev/null +++ b/aptos/solidity/script/rust-toolchain @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2024-04-17" +components = ["llvm-tools", "rustc-dev"] diff --git a/aptos/solidity/script/src/bin/main.rs b/aptos/solidity/script/src/bin/main.rs new file mode 100644 index 00000000..20ecf506 --- /dev/null +++ b/aptos/solidity/script/src/bin/main.rs @@ -0,0 +1,74 @@ +use clap::Parser; +use serde::{Deserialize, Serialize}; +use sphinx_prover::types::HashableKey; +use sphinx_prover::SphinxStdin; +use sphinx_sdk::ProverClient; +use std::path::PathBuf; + +pub const INCLUSION_ELF: &[u8] = + include_bytes!("../../../../aptos-programs/artifacts/inclusion-program"); +pub const EPOCH_CHANGE_ELF: &[u8] = + include_bytes!("../../../../aptos-programs/artifacts/epoch-change-program"); + +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct ProveArgs { + #[clap(long, default_value_t = String::from("inclusion"))] + program: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +struct SP1ProofFixture { + vkey: String, + public_values: String, + proof: String, +} + +fn main() { + sphinx_sdk::utils::setup_logger(); + let args = ProveArgs::parse(); + + let elf: &[u8]; + let stdin: SphinxStdin; + match args.program.as_str() { + "inclusion" => { + elf = INCLUSION_ELF; + let (sparse_merkle_proof_assets, transaction_proof_assets, validator_verifier_assets) = + aptos_lc::inclusion::setup_assets(); + stdin = aptos_lc::inclusion::generate_stdin( + &sparse_merkle_proof_assets, + &transaction_proof_assets, + &validator_verifier_assets, + ); + } + "epoch_change" => { + elf = EPOCH_CHANGE_ELF; + let (trusted_state, epoch_change_proof) = aptos_lc::epoch_change::setup_assets(); + stdin = aptos_lc::epoch_change::generate_stdin(&trusted_state, &epoch_change_proof); + } + _ => panic!("Unsupported program. Use: ['inclusion', 'epoch_change']"), + } + + let prover = ProverClient::new(); + let (pk, vk) = prover.setup(elf); + let proof = prover.prove_plonk(&pk, stdin).unwrap(); + // just to check that proof is valid and verifiable + prover.verify_plonk(&proof, &vk).unwrap(); + + // save fixture + let fixture = SP1ProofFixture { + vkey: vk.bytes32().to_string(), + public_values: proof.public_values.bytes().to_string(), + proof: proof.bytes(), + }; + + let fixture_path = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../contracts/src/plonk_fixtures"); + std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); + std::fs::write( + fixture_path.join(args.program.as_str().to_owned() + "_fixture.json"), + serde_json::to_string_pretty(&fixture).unwrap(), + ) + .expect("failed to write fixture"); +} From a5a5bed8a11276fe04d18bdad1848bf5abbdfd0a Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Sun, 16 Jun 2024 16:29:38 +0100 Subject: [PATCH 07/13] feat: Add Plonk contract --- aptos/solidity/contracts/src/EpochChange.sol | 15 + aptos/solidity/contracts/src/Inclusion.sol | 15 + .../contracts/src/plonk/ISP1Verifier.sol | 16 + .../contracts/src/plonk/PlonkVerifier.sol | 1252 +++++++++++++++++ .../contracts/src/plonk/SP1MockVerifier.sol | 19 + .../contracts/src/plonk/SP1Verifier.sol | 32 + .../plonk_fixtures/epoch_change_fixture.json | 5 + .../src/plonk_fixtures/inclusion_fixture.json | 5 + .../contracts/test/test_lc_proofs.sol | 72 + aptos/solidity/script/src/bin/main.rs | 4 +- 10 files changed, 1434 insertions(+), 1 deletion(-) create mode 100644 aptos/solidity/contracts/src/EpochChange.sol create mode 100644 aptos/solidity/contracts/src/Inclusion.sol create mode 100644 aptos/solidity/contracts/src/plonk/ISP1Verifier.sol create mode 100644 aptos/solidity/contracts/src/plonk/PlonkVerifier.sol create mode 100644 aptos/solidity/contracts/src/plonk/SP1MockVerifier.sol create mode 100644 aptos/solidity/contracts/src/plonk/SP1Verifier.sol create mode 100644 aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json create mode 100644 aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json create mode 100644 aptos/solidity/contracts/test/test_lc_proofs.sol diff --git a/aptos/solidity/contracts/src/EpochChange.sol b/aptos/solidity/contracts/src/EpochChange.sol new file mode 100644 index 00000000..2a39ee9e --- /dev/null +++ b/aptos/solidity/contracts/src/EpochChange.sol @@ -0,0 +1,15 @@ +pragma solidity ^0.8.25; + +import {SP1Verifier as SP1PlonkVerifier} from "../src/plonk/SP1Verifier.sol"; + +contract EpochChange is SP1PlonkVerifier { + bytes32 public epochChangeProgramVkey; + + constructor(bytes32 _epochChangeProgramVkey) { + epochChangeProgramVkey = _epochChangeProgramVkey; + } + + function verifyProof(bytes memory proof, bytes memory publicValues) public view { + this.verifyProof(epochChangeProgramVkey, publicValues, proof); + } +} diff --git a/aptos/solidity/contracts/src/Inclusion.sol b/aptos/solidity/contracts/src/Inclusion.sol new file mode 100644 index 00000000..f90e9ae4 --- /dev/null +++ b/aptos/solidity/contracts/src/Inclusion.sol @@ -0,0 +1,15 @@ +pragma solidity ^0.8.25; + +import {SP1Verifier as SP1PlonkVerifier} from "../src/plonk/SP1Verifier.sol"; + +contract Inclusion is SP1PlonkVerifier { + bytes32 public inclusionProgramVkey; + + constructor(bytes32 _inclusionProgramVkey) { + inclusionProgramVkey = _inclusionProgramVkey; + } + + function verifyProof(bytes memory proof, bytes memory publicValues) public view { + this.verifyProof(inclusionProgramVkey, publicValues, proof); + } +} diff --git a/aptos/solidity/contracts/src/plonk/ISP1Verifier.sol b/aptos/solidity/contracts/src/plonk/ISP1Verifier.sol new file mode 100644 index 00000000..5795e089 --- /dev/null +++ b/aptos/solidity/contracts/src/plonk/ISP1Verifier.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +/// @title SP1 Verifier Interface +/// @author Succinct Labs +/// @notice This contract is the interface for the SP1 Verifier. +interface ISP1Verifier { + /// @notice Returns the version of the SP1 Verifier. + function VERSION() external pure returns (string memory); + + /// @notice Verifies a proof with given public values and vkey. + /// @param vkey The verification key for the RISC-V program. + /// @param publicValues The public values encoded as bytes. + /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. + function verifyProof(bytes32 vkey, bytes memory publicValues, bytes memory proofBytes) external view; +} diff --git a/aptos/solidity/contracts/src/plonk/PlonkVerifier.sol b/aptos/solidity/contracts/src/plonk/PlonkVerifier.sol new file mode 100644 index 00000000..46db2823 --- /dev/null +++ b/aptos/solidity/contracts/src/plonk/PlonkVerifier.sol @@ -0,0 +1,1252 @@ +// SPDX-License-Identifier: Apache-2.0 + +// Copyright 2023 Consensys Software Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by gnark DO NOT EDIT + +pragma solidity ^0.8.19; + +contract PlonkVerifier { + uint256 private constant R_MOD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 private constant R_MOD_MINUS_ONE = + 21888242871839275222246405745257275088548364400416034343698204186575808495616; + uint256 private constant P_MOD = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + + uint256 private constant G2_SRS_0_X_0 = + 11559732032986387107991004021392285783925812861821192530917403151452391805634; + uint256 private constant G2_SRS_0_X_1 = + 10857046999023057135944570762232829481370756359578518086990519993285655852781; + uint256 private constant G2_SRS_0_Y_0 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; + uint256 private constant G2_SRS_0_Y_1 = 8495653923123431417604973247489272438418190587263600148770280649306958101930; + + uint256 private constant G2_SRS_1_X_0 = + 15805639136721018565402881920352193254830339253282065586954346329754995870280; + uint256 private constant G2_SRS_1_X_1 = + 19089565590083334368588890253123139704298730990782503769911324779715431555531; + uint256 private constant G2_SRS_1_Y_0 = 9779648407879205346559610309258181044130619080926897934572699915909528404984; + uint256 private constant G2_SRS_1_Y_1 = 6779728121489434657638426458390319301070371227460768374343986326751507916979; + + uint256 private constant G1_SRS_X = 14312776538779914388377568895031746459131577658076416373430523308756343304251; + uint256 private constant G1_SRS_Y = 11763105256161367503191792604679297387056316997144156930871823008787082098465; + + // ----------------------- vk --------------------- + uint256 private constant VK_NB_PUBLIC_INPUTS = 2; + uint256 private constant VK_DOMAIN_SIZE = 67108864; + uint256 private constant VK_INV_DOMAIN_SIZE = + 21888242545679039938882419398440172875981108180010270949818755658014750055173; + uint256 private constant VK_OMEGA = 7419588552507395652481651088034484897579724952953562618697845598160172257810; + uint256 private constant VK_QL_COM_X = 11453021816558077199587453448133554449717227349905110102377551937287065432844; + uint256 private constant VK_QL_COM_Y = 9109454861639227276420512127158153200309304123653914732354951393328030738490; + uint256 private constant VK_QR_COM_X = 7821644493905086061243882786350714717685134318611500828127397521557784035499; + uint256 private constant VK_QR_COM_Y = 13041052004552404684631357942397749930688211338192136370697682907414153685909; + uint256 private constant VK_QM_COM_X = 1736617282271757071221168350710970296482875652045937117438551712909537507658; + uint256 private constant VK_QM_COM_Y = 5345542319716290612762422434959528912635502292626234402933058385633964347549; + uint256 private constant VK_QO_COM_X = 18014979952384567403919168968189231706227326297377482789091451813310066870667; + uint256 private constant VK_QO_COM_Y = 3708432301267678677786506706811217632085917639583680393547668223045541307479; + uint256 private constant VK_QK_COM_X = 957785607877057913661659123305671740810921873228019553579395036070012099380; + uint256 private constant VK_QK_COM_Y = 1821672264312643762123946960551585171783545126512758690400324408416365570300; + + uint256 private constant VK_S1_COM_X = 15838704022916757697514152719576664453825928657894015885754578605399919756856; + uint256 private constant VK_S1_COM_Y = 13387218978462600937448147418911963779105027838559913842027032523066810277894; + + uint256 private constant VK_S2_COM_X = 8305448485555792443785892674312793099639480632975263652331649209215498687903; + uint256 private constant VK_S2_COM_Y = 10616560339600329516818280331708877801874279040952666458845297443257568678018; + + uint256 private constant VK_S3_COM_X = 5758551426093048145915996102270540307839916135212724540929869593580613639236; + uint256 private constant VK_S3_COM_Y = 8329248325292414275499503861965434456596681093250791731115342865906364573529; + + uint256 private constant VK_COSET_SHIFT = 5; + + uint256 private constant VK_QCP_0_X = 17635741098095958263934242315624493230424349111255370147390685295718328991108; + uint256 private constant VK_QCP_0_Y = 2694645204534071204078571296638854522310743386863537396039207026993856963119; + + uint256 private constant VK_INDEX_COMMIT_API_0 = 28657845; + uint256 private constant VK_NB_CUSTOM_GATES = 1; + + // ------------------------------------------------ + + // offset proof + + uint256 private constant PROOF_L_COM_X = 0x0; + uint256 private constant PROOF_L_COM_Y = 0x20; + uint256 private constant PROOF_R_COM_X = 0x40; + uint256 private constant PROOF_R_COM_Y = 0x60; + uint256 private constant PROOF_O_COM_X = 0x80; + uint256 private constant PROOF_O_COM_Y = 0xa0; + + // h = h_0 + x^{n+2}h_1 + x^{2(n+2)}h_2 + uint256 private constant PROOF_H_0_X = 0xc0; + uint256 private constant PROOF_H_0_Y = 0xe0; + uint256 private constant PROOF_H_1_X = 0x100; + uint256 private constant PROOF_H_1_Y = 0x120; + uint256 private constant PROOF_H_2_X = 0x140; + uint256 private constant PROOF_H_2_Y = 0x160; + + // wire values at zeta + uint256 private constant PROOF_L_AT_ZETA = 0x180; + uint256 private constant PROOF_R_AT_ZETA = 0x1a0; + uint256 private constant PROOF_O_AT_ZETA = 0x1c0; + + // S1(zeta),S2(zeta) + uint256 private constant PROOF_S1_AT_ZETA = 0x1e0; // Sσ1(zeta) + uint256 private constant PROOF_S2_AT_ZETA = 0x200; // Sσ2(zeta) + + // [Z] + uint256 private constant PROOF_GRAND_PRODUCT_COMMITMENT_X = 0x220; + uint256 private constant PROOF_GRAND_PRODUCT_COMMITMENT_Y = 0x240; + + uint256 private constant PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA = 0x260; // z(w*zeta) + + // Folded proof for the opening of linearised poly, l, r, o, s_1, s_2, qcp + uint256 private constant PROOF_BATCH_OPENING_AT_ZETA_X = 0x280; + uint256 private constant PROOF_BATCH_OPENING_AT_ZETA_Y = 0x2a0; + + uint256 private constant PROOF_OPENING_AT_ZETA_OMEGA_X = 0x2c0; + uint256 private constant PROOF_OPENING_AT_ZETA_OMEGA_Y = 0x2e0; + + uint256 private constant PROOF_OPENING_QCP_AT_ZETA = 0x300; + uint256 private constant PROOF_BSB_COMMITMENTS = 0x320; + + // -> next part of proof is + // [ openings_selector_commits || commitments_wires_commit_api] + + // -------- offset state + + // challenges to check the claimed quotient + + uint256 private constant STATE_ALPHA = 0x0; + uint256 private constant STATE_BETA = 0x20; + uint256 private constant STATE_GAMMA = 0x40; + uint256 private constant STATE_ZETA = 0x60; + uint256 private constant STATE_ALPHA_SQUARE_LAGRANGE_0 = 0x80; + uint256 private constant STATE_FOLDED_H_X = 0xa0; + uint256 private constant STATE_FOLDED_H_Y = 0xc0; + uint256 private constant STATE_LINEARISED_POLYNOMIAL_X = 0xe0; + uint256 private constant STATE_LINEARISED_POLYNOMIAL_Y = 0x100; + uint256 private constant STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA = 0x120; + uint256 private constant STATE_FOLDED_CLAIMED_VALUES = 0x140; // Folded proof for the opening of H, linearised poly, l, r, o, s_1, s_2, qcp + uint256 private constant STATE_FOLDED_DIGESTS_X = 0x160; // folded digests of H, linearised poly, l, r, o, s_1, s_2, qcp + uint256 private constant STATE_FOLDED_DIGESTS_Y = 0x180; + uint256 private constant STATE_PI = 0x1a0; + uint256 private constant STATE_ZETA_POWER_N_MINUS_ONE = 0x1c0; + uint256 private constant STATE_GAMMA_KZG = 0x1e0; + uint256 private constant STATE_SUCCESS = 0x200; + uint256 private constant STATE_CHECK_VAR = 0x220; // /!\ this slot is used for debugging only + uint256 private constant STATE_LAST_MEM = 0x240; + + // -------- utils (for Fiat Shamir) + uint256 private constant FS_ALPHA = 0x616C706861; // "alpha" + uint256 private constant FS_BETA = 0x62657461; // "beta" + uint256 private constant FS_GAMMA = 0x67616d6d61; // "gamma" + uint256 private constant FS_ZETA = 0x7a657461; // "zeta" + uint256 private constant FS_GAMMA_KZG = 0x67616d6d61; // "gamma" + + // -------- errors + uint256 private constant ERROR_STRING_ID = 0x08c379a000000000000000000000000000000000000000000000000000000000; // selector for function Error(string) + + // -------- utils (for hash_fr) + uint256 private constant HASH_FR_BB = 340282366920938463463374607431768211456; // 2**128 + uint256 private constant HASH_FR_ZERO_UINT256 = 0; + uint8 private constant HASH_FR_LEN_IN_BYTES = 48; + uint8 private constant HASH_FR_SIZE_DOMAIN = 11; + uint8 private constant HASH_FR_ONE = 1; + uint8 private constant HASH_FR_TWO = 2; + + // -------- precompiles + uint8 private constant MOD_EXP = 0x5; + uint8 private constant EC_ADD = 0x6; + uint8 private constant EC_MUL = 0x7; + uint8 private constant EC_PAIR = 0x8; + + /// Verify a Plonk proof. + /// Reverts if the proof or the public inputs are malformed. + /// @param proof serialised plonk proof (using gnark's MarshalSolidity) + /// @param public_inputs (must be reduced) + /// @return success true if the proof passes false otherwise + function Verify(bytes calldata proof, uint256[] calldata public_inputs) public view returns (bool success) { + assembly { + let mem := mload(0x40) + let freeMem := add(mem, STATE_LAST_MEM) + + // sanity checks + check_number_of_public_inputs(public_inputs.length) + check_inputs_size(public_inputs.length, public_inputs.offset) + check_proof_size(proof.length) + check_proof_openings_size(proof.offset) + + // compute the challenges + let prev_challenge_non_reduced + prev_challenge_non_reduced := derive_gamma(proof.offset, public_inputs.length, public_inputs.offset) + prev_challenge_non_reduced := derive_beta(prev_challenge_non_reduced) + prev_challenge_non_reduced := derive_alpha(proof.offset, prev_challenge_non_reduced) + derive_zeta(proof.offset, prev_challenge_non_reduced) + + // evaluation of Z=Xⁿ-1 at ζ, we save this value + let zeta := mload(add(mem, STATE_ZETA)) + let zeta_power_n_minus_one := addmod(pow(zeta, VK_DOMAIN_SIZE, freeMem), sub(R_MOD, 1), R_MOD) + mstore(add(mem, STATE_ZETA_POWER_N_MINUS_ONE), zeta_power_n_minus_one) + + // public inputs contribution + let l_pi := sum_pi_wo_api_commit(public_inputs.offset, public_inputs.length, freeMem) + let l_pi_commit := sum_pi_commit(proof.offset, public_inputs.length, freeMem) + l_pi := addmod(l_pi_commit, l_pi, R_MOD) + mstore(add(mem, STATE_PI), l_pi) + + compute_alpha_square_lagrange_0() + verify_opening_linearised_polynomial(proof.offset) + fold_h(proof.offset) + compute_commitment_linearised_polynomial(proof.offset) + compute_gamma_kzg(proof.offset) + fold_state(proof.offset) + batch_verify_multi_points(proof.offset) + + success := mload(add(mem, STATE_SUCCESS)) + + // Beginning errors ------------------------------------------------- + + function error_nb_public_inputs() { + let ptError := mload(0x40) + mstore(ptError, ERROR_STRING_ID) // selector for function Error(string) + mstore(add(ptError, 0x4), 0x20) + mstore(add(ptError, 0x24), 0x1d) + mstore(add(ptError, 0x44), "wrong number of public inputs") + revert(ptError, 0x64) + } + + /// Called when an operation on Bn254 fails + /// @dev for instance when calling EcMul on a point not on Bn254. + function error_ec_op() { + let ptError := mload(0x40) + mstore(ptError, ERROR_STRING_ID) // selector for function Error(string) + mstore(add(ptError, 0x4), 0x20) + mstore(add(ptError, 0x24), 0x12) + mstore(add(ptError, 0x44), "error ec operation") + revert(ptError, 0x64) + } + + /// Called when one of the public inputs is not reduced. + function error_inputs_size() { + let ptError := mload(0x40) + mstore(ptError, ERROR_STRING_ID) // selector for function Error(string) + mstore(add(ptError, 0x4), 0x20) + mstore(add(ptError, 0x24), 0x18) + mstore(add(ptError, 0x44), "inputs are bigger than r") + revert(ptError, 0x64) + } + + /// Called when the size proof is not as expected + /// @dev to avoid overflow attack for instance + function error_proof_size() { + let ptError := mload(0x40) + mstore(ptError, ERROR_STRING_ID) // selector for function Error(string) + mstore(add(ptError, 0x4), 0x20) + mstore(add(ptError, 0x24), 0x10) + mstore(add(ptError, 0x44), "wrong proof size") + revert(ptError, 0x64) + } + + /// Called when one the openings is bigger than r + /// The openings are the claimed evalutions of a polynomial + /// in a Kzg proof. + function error_proof_openings_size() { + let ptError := mload(0x40) + mstore(ptError, ERROR_STRING_ID) // selector for function Error(string) + mstore(add(ptError, 0x4), 0x20) + mstore(add(ptError, 0x24), 0x16) + mstore(add(ptError, 0x44), "openings bigger than r") + revert(ptError, 0x64) + } + + function error_pairing() { + let ptError := mload(0x40) + mstore(ptError, ERROR_STRING_ID) // selector for function Error(string) + mstore(add(ptError, 0x4), 0x20) + mstore(add(ptError, 0x24), 0xd) + mstore(add(ptError, 0x44), "error pairing") + revert(ptError, 0x64) + } + + function error_verify() { + let ptError := mload(0x40) + mstore(ptError, ERROR_STRING_ID) // selector for function Error(string) + mstore(add(ptError, 0x4), 0x20) + mstore(add(ptError, 0x24), 0xc) + mstore(add(ptError, 0x44), "error verify") + revert(ptError, 0x64) + } + + function error_random_generation() { + let ptError := mload(0x40) + mstore(ptError, ERROR_STRING_ID) // selector for function Error(string) + mstore(add(ptError, 0x4), 0x20) + mstore(add(ptError, 0x24), 0x14) + mstore(add(ptError, 0x44), "error random gen kzg") + revert(ptError, 0x64) + } + // end errors ------------------------------------------------- + + // Beginning checks ------------------------------------------------- + + /// @param s actual number of public inputs + function check_number_of_public_inputs(s) { + if iszero(eq(s, VK_NB_PUBLIC_INPUTS)) { error_nb_public_inputs() } + } + + /// Checks that the public inputs are < R_MOD. + /// @param s number of public inputs + /// @param p pointer to the public inputs array + function check_inputs_size(s, p) { + for { let i } lt(i, s) { i := add(i, 1) } { + if gt(calldataload(p), R_MOD_MINUS_ONE) { error_inputs_size() } + p := add(p, 0x20) + } + } + + /// Checks if the proof is of the correct size + /// @param actual_proof_size size of the proof (not the expected size) + function check_proof_size(actual_proof_size) { + let expected_proof_size := add(0x300, mul(VK_NB_CUSTOM_GATES, 0x60)) + if iszero(eq(actual_proof_size, expected_proof_size)) { error_proof_size() } + } + + /// Checks if the multiple openings of the polynomials are < R_MOD. + /// @param aproof pointer to the beginning of the proof + /// @dev the 'a' prepending proof is to have a local name + function check_proof_openings_size(aproof) { + // PROOF_L_AT_ZETA + let p := add(aproof, PROOF_L_AT_ZETA) + if gt(calldataload(p), R_MOD_MINUS_ONE) { error_proof_openings_size() } + + // PROOF_R_AT_ZETA + p := add(aproof, PROOF_R_AT_ZETA) + if gt(calldataload(p), R_MOD_MINUS_ONE) { error_proof_openings_size() } + + // PROOF_O_AT_ZETA + p := add(aproof, PROOF_O_AT_ZETA) + if gt(calldataload(p), R_MOD_MINUS_ONE) { error_proof_openings_size() } + + // PROOF_S1_AT_ZETA + p := add(aproof, PROOF_S1_AT_ZETA) + if gt(calldataload(p), R_MOD_MINUS_ONE) { error_proof_openings_size() } + + // PROOF_S2_AT_ZETA + p := add(aproof, PROOF_S2_AT_ZETA) + if gt(calldataload(p), R_MOD_MINUS_ONE) { error_proof_openings_size() } + + // PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA + p := add(aproof, PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA) + if gt(calldataload(p), R_MOD_MINUS_ONE) { error_proof_openings_size() } + + // PROOF_OPENING_QCP_AT_ZETA + + p := add(aproof, PROOF_OPENING_QCP_AT_ZETA) + for { let i := 0 } lt(i, VK_NB_CUSTOM_GATES) { i := add(i, 1) } { + if gt(calldataload(p), R_MOD_MINUS_ONE) { error_proof_openings_size() } + p := add(p, 0x20) + } + } + // end checks ------------------------------------------------- + + // Beginning challenges ------------------------------------------------- + + /// Derive gamma as Sha256() + /// @param aproof pointer to the proof + /// @param nb_pi number of public inputs + /// @param pi pointer to the array of public inputs + /// @return the challenge gamma, not reduced + /// @notice The transcript is the concatenation (in this order) of: + /// * the word "gamma" in ascii, equal to [0x67,0x61,0x6d, 0x6d, 0x61] and encoded as a uint256. + /// * the commitments to the permutation polynomials S1, S2, S3, where we concatenate the coordinates of those points + /// * the commitments of Ql, Qr, Qm, Qo, Qk + /// * the public inputs + /// * the commitments of the wires related to the custom gates (commitments_wires_commit_api) + /// * commitments to L, R, O (proof__com_) + /// The data described above is written starting at mPtr. "gamma" lies on 5 bytes, + /// and is encoded as a uint256 number n. In basis b = 256, the number looks like this + /// [0 0 0 .. 0x67 0x61 0x6d, 0x6d, 0x61]. The first non zero entry is at position 27=0x1b + /// Gamma reduced (the actual challenge) is stored at add(state, state_gamma) + function derive_gamma(aproof, nb_pi, pi) -> gamma_not_reduced { + let state := mload(0x40) + let mPtr := add(state, STATE_LAST_MEM) + + // gamma + // gamma in ascii is [0x67,0x61,0x6d, 0x6d, 0x61] + // (same for alpha, beta, zeta) + mstore(mPtr, FS_GAMMA) // "gamma" + + mstore(add(mPtr, 0x20), VK_S1_COM_X) + mstore(add(mPtr, 0x40), VK_S1_COM_Y) + mstore(add(mPtr, 0x60), VK_S2_COM_X) + mstore(add(mPtr, 0x80), VK_S2_COM_Y) + mstore(add(mPtr, 0xa0), VK_S3_COM_X) + mstore(add(mPtr, 0xc0), VK_S3_COM_Y) + mstore(add(mPtr, 0xe0), VK_QL_COM_X) + mstore(add(mPtr, 0x100), VK_QL_COM_Y) + mstore(add(mPtr, 0x120), VK_QR_COM_X) + mstore(add(mPtr, 0x140), VK_QR_COM_Y) + mstore(add(mPtr, 0x160), VK_QM_COM_X) + mstore(add(mPtr, 0x180), VK_QM_COM_Y) + mstore(add(mPtr, 0x1a0), VK_QO_COM_X) + mstore(add(mPtr, 0x1c0), VK_QO_COM_Y) + mstore(add(mPtr, 0x1e0), VK_QK_COM_X) + mstore(add(mPtr, 0x200), VK_QK_COM_Y) + + mstore(add(mPtr, 0x220), VK_QCP_0_X) + mstore(add(mPtr, 0x240), VK_QCP_0_Y) + + // public inputs + let _mPtr := add(mPtr, 0x260) + let size_pi_in_bytes := mul(nb_pi, 0x20) + calldatacopy(_mPtr, pi, size_pi_in_bytes) + _mPtr := add(_mPtr, size_pi_in_bytes) + + // commitments to l, r, o + let size_commitments_lro_in_bytes := 0xc0 + calldatacopy(_mPtr, aproof, size_commitments_lro_in_bytes) + _mPtr := add(_mPtr, size_commitments_lro_in_bytes) + + // total size is : + // sizegamma(=0x5) + 11*64(=0x2c0) + // + nb_public_inputs*0x20 + // + nb_custom gates*0x40 + let size := add(0x2c5, size_pi_in_bytes) + + size := add(size, mul(VK_NB_CUSTOM_GATES, 0x40)) + let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1b), size, mPtr, 0x20) //0x1b -> 000.."gamma" + if iszero(l_success) { error_verify() } + gamma_not_reduced := mload(mPtr) + mstore(add(state, STATE_GAMMA), mod(gamma_not_reduced, R_MOD)) + } + + /// derive beta as Sha256 + /// @param gamma_not_reduced the previous challenge (gamma) not reduced + /// @return beta_not_reduced the next challenge, beta, not reduced + /// @notice the transcript consists of the previous challenge only. + /// The reduced version of beta is stored at add(state, state_beta) + function derive_beta(gamma_not_reduced) -> beta_not_reduced { + let state := mload(0x40) + let mPtr := add(mload(0x40), STATE_LAST_MEM) + + // beta + mstore(mPtr, FS_BETA) // "beta" + mstore(add(mPtr, 0x20), gamma_not_reduced) + let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1c), 0x24, mPtr, 0x20) //0x1b -> 000.."gamma" + if iszero(l_success) { error_verify() } + beta_not_reduced := mload(mPtr) + mstore(add(state, STATE_BETA), mod(beta_not_reduced, R_MOD)) + } + + /// derive alpha as sha256 + /// @param aproof pointer to the proof object + /// @param beta_not_reduced the previous challenge (beta) not reduced + /// @return alpha_not_reduced the next challenge, alpha, not reduced + /// @notice the transcript consists of the previous challenge (beta) + /// not reduced, the commitments to the wires associated to the QCP_i, + /// and the commitment to the grand product polynomial + function derive_alpha(aproof, beta_not_reduced) -> alpha_not_reduced { + let state := mload(0x40) + let mPtr := add(mload(0x40), STATE_LAST_MEM) + let full_size := 0x65 // size("alpha") + 0x20 (previous challenge) + + // alpha + mstore(mPtr, FS_ALPHA) // "alpha" + let _mPtr := add(mPtr, 0x20) + mstore(_mPtr, beta_not_reduced) + _mPtr := add(_mPtr, 0x20) + + // Bsb22Commitments + let proof_bsb_commitments := add(aproof, PROOF_BSB_COMMITMENTS) + let size_bsb_commitments := mul(0x40, VK_NB_CUSTOM_GATES) + calldatacopy(_mPtr, proof_bsb_commitments, size_bsb_commitments) + _mPtr := add(_mPtr, size_bsb_commitments) + full_size := add(full_size, size_bsb_commitments) + + // [Z], the commitment to the grand product polynomial + calldatacopy(_mPtr, add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_X), 0x40) + let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1b), full_size, mPtr, 0x20) + if iszero(l_success) { error_verify() } + + alpha_not_reduced := mload(mPtr) + mstore(add(state, STATE_ALPHA), mod(alpha_not_reduced, R_MOD)) + } + + /// derive zeta as sha256 + /// @param aproof pointer to the proof object + /// @param alpha_not_reduced the previous challenge (alpha) not reduced + /// The transcript consists of the previous challenge and the commitment to + /// the quotient polynomial h. + function derive_zeta(aproof, alpha_not_reduced) { + let state := mload(0x40) + let mPtr := add(mload(0x40), STATE_LAST_MEM) + + // zeta + mstore(mPtr, FS_ZETA) // "zeta" + mstore(add(mPtr, 0x20), alpha_not_reduced) + calldatacopy(add(mPtr, 0x40), add(aproof, PROOF_H_0_X), 0xc0) + let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1c), 0xe4, mPtr, 0x20) + if iszero(l_success) { error_verify() } + let zeta_not_reduced := mload(mPtr) + mstore(add(state, STATE_ZETA), mod(zeta_not_reduced, R_MOD)) + } + // END challenges ------------------------------------------------- + + // BEGINNING compute_pi ------------------------------------------------- + + /// sum_pi_wo_api_commit computes the public inputs contributions, + /// except for the public inputs coming from the custom gate + /// @param ins pointer to the public inputs + /// @param n number of public inputs + /// @param mPtr free memory + /// @return pi_wo_commit public inputs contribution (except the public inputs coming from the custom gate) + function sum_pi_wo_api_commit(ins, n, mPtr) -> pi_wo_commit { + let state := mload(0x40) + let z := mload(add(state, STATE_ZETA)) + let zpnmo := mload(add(state, STATE_ZETA_POWER_N_MINUS_ONE)) + + let li := mPtr + batch_compute_lagranges_at_z(z, zpnmo, n, li) + + let tmp := 0 + for { let i := 0 } lt(i, n) { i := add(i, 1) } { + tmp := mulmod(mload(li), calldataload(ins), R_MOD) + pi_wo_commit := addmod(pi_wo_commit, tmp, R_MOD) + li := add(li, 0x20) + ins := add(ins, 0x20) + } + } + + /// batch_compute_lagranges_at_z computes [L_0(z), .., L_{n-1}(z)] + /// @param z point at which the Lagranges are evaluated + /// @param zpnmo ζⁿ-1 + /// @param n number of public inputs (number of Lagranges to compute) + /// @param mPtr pointer to which the results are stored + function batch_compute_lagranges_at_z(z, zpnmo, n, mPtr) { + let zn := mulmod(zpnmo, VK_INV_DOMAIN_SIZE, R_MOD) // 1/n * (ζⁿ - 1) + + let _w := 1 + let _mPtr := mPtr + for { let i := 0 } lt(i, n) { i := add(i, 1) } { + mstore(_mPtr, addmod(z, sub(R_MOD, _w), R_MOD)) + _w := mulmod(_w, VK_OMEGA, R_MOD) + _mPtr := add(_mPtr, 0x20) + } + batch_invert(mPtr, n, _mPtr) + _mPtr := mPtr + _w := 1 + for { let i := 0 } lt(i, n) { i := add(i, 1) } { + mstore(_mPtr, mulmod(mulmod(mload(_mPtr), zn, R_MOD), _w, R_MOD)) + _mPtr := add(_mPtr, 0x20) + _w := mulmod(_w, VK_OMEGA, R_MOD) + } + } + + /// @notice Montgomery trick for batch inversion mod R_MOD + /// @param ins pointer to the data to batch invert + /// @param number of elements to batch invert + /// @param mPtr free memory + function batch_invert(ins, nb_ins, mPtr) { + mstore(mPtr, 1) + let offset := 0 + for { let i := 0 } lt(i, nb_ins) { i := add(i, 1) } { + let prev := mload(add(mPtr, offset)) + let cur := mload(add(ins, offset)) + cur := mulmod(prev, cur, R_MOD) + offset := add(offset, 0x20) + mstore(add(mPtr, offset), cur) + } + ins := add(ins, sub(offset, 0x20)) + mPtr := add(mPtr, offset) + let inv := pow(mload(mPtr), sub(R_MOD, 2), add(mPtr, 0x20)) + for { let i := 0 } lt(i, nb_ins) { i := add(i, 1) } { + mPtr := sub(mPtr, 0x20) + let tmp := mload(ins) + let cur := mulmod(inv, mload(mPtr), R_MOD) + mstore(ins, cur) + inv := mulmod(inv, tmp, R_MOD) + ins := sub(ins, 0x20) + } + } + + /// Public inputs (the ones coming from the custom gate) contribution + /// @param aproof pointer to the proof + /// @param nb_public_inputs number of public inputs + /// @param mPtr pointer to free memory + /// @return pi_commit custom gate public inputs contribution + function sum_pi_commit(aproof, nb_public_inputs, mPtr) -> pi_commit { + let state := mload(0x40) + let z := mload(add(state, STATE_ZETA)) + let zpnmo := mload(add(state, STATE_ZETA_POWER_N_MINUS_ONE)) + + let p := add(aproof, PROOF_BSB_COMMITMENTS) + + let h_fr, ith_lagrange + + h_fr := hash_fr(calldataload(p), calldataload(add(p, 0x20)), mPtr) + ith_lagrange := compute_ith_lagrange_at_z(z, zpnmo, add(nb_public_inputs, VK_INDEX_COMMIT_API_0), mPtr) + pi_commit := addmod(pi_commit, mulmod(h_fr, ith_lagrange, R_MOD), R_MOD) + p := add(p, 0x40) + } + + /// Computes L_i(zeta) = ωⁱ/n * (ζⁿ-1)/(ζ-ωⁱ) where: + /// @param z zeta + /// @param zpmno ζⁿ-1 + /// @param i i-th lagrange + /// @param mPtr free memory + /// @return res = ωⁱ/n * (ζⁿ-1)/(ζ-ωⁱ) + function compute_ith_lagrange_at_z(z, zpnmo, i, mPtr) -> res { + let w := pow(VK_OMEGA, i, mPtr) // w**i + i := addmod(z, sub(R_MOD, w), R_MOD) // z-w**i + w := mulmod(w, VK_INV_DOMAIN_SIZE, R_MOD) // w**i/n + i := pow(i, sub(R_MOD, 2), mPtr) // (z-w**i)**-1 + w := mulmod(w, i, R_MOD) // w**i/n*(z-w)**-1 + res := mulmod(w, zpnmo, R_MOD) + } + + /// @dev https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06#section-5.2 + /// @param x x coordinate of a point on Bn254(𝔽_p) + /// @param y y coordinate of a point on Bn254(𝔽_p) + /// @param mPtr free memory + /// @return res an element mod R_MOD + function hash_fr(x, y, mPtr) -> res { + // [0x00, .. , 0x00 || x, y, || 0, 48, 0, dst, HASH_FR_SIZE_DOMAIN] + // <- 64 bytes -> <-64b -> <- 1 bytes each -> + + // [0x00, .., 0x00] 64 bytes of zero + mstore(mPtr, HASH_FR_ZERO_UINT256) + mstore(add(mPtr, 0x20), HASH_FR_ZERO_UINT256) + + // msg = x || y , both on 32 bytes + mstore(add(mPtr, 0x40), x) + mstore(add(mPtr, 0x60), y) + + // 0 || 48 || 0 all on 1 byte + mstore8(add(mPtr, 0x80), 0) + mstore8(add(mPtr, 0x81), HASH_FR_LEN_IN_BYTES) + mstore8(add(mPtr, 0x82), 0) + + // "BSB22-Plonk" = [42, 53, 42, 32, 32, 2d, 50, 6c, 6f, 6e, 6b,] + mstore8(add(mPtr, 0x83), 0x42) + mstore8(add(mPtr, 0x84), 0x53) + mstore8(add(mPtr, 0x85), 0x42) + mstore8(add(mPtr, 0x86), 0x32) + mstore8(add(mPtr, 0x87), 0x32) + mstore8(add(mPtr, 0x88), 0x2d) + mstore8(add(mPtr, 0x89), 0x50) + mstore8(add(mPtr, 0x8a), 0x6c) + mstore8(add(mPtr, 0x8b), 0x6f) + mstore8(add(mPtr, 0x8c), 0x6e) + mstore8(add(mPtr, 0x8d), 0x6b) + + // size domain + mstore8(add(mPtr, 0x8e), HASH_FR_SIZE_DOMAIN) + + let l_success := staticcall(gas(), 0x2, mPtr, 0x8f, mPtr, 0x20) + if iszero(l_success) { error_verify() } + + let b0 := mload(mPtr) + + // [b0 || one || dst || HASH_FR_SIZE_DOMAIN] + // <-64bytes -> <- 1 byte each -> + mstore8(add(mPtr, 0x20), HASH_FR_ONE) // 1 + + mstore8(add(mPtr, 0x21), 0x42) // dst + mstore8(add(mPtr, 0x22), 0x53) + mstore8(add(mPtr, 0x23), 0x42) + mstore8(add(mPtr, 0x24), 0x32) + mstore8(add(mPtr, 0x25), 0x32) + mstore8(add(mPtr, 0x26), 0x2d) + mstore8(add(mPtr, 0x27), 0x50) + mstore8(add(mPtr, 0x28), 0x6c) + mstore8(add(mPtr, 0x29), 0x6f) + mstore8(add(mPtr, 0x2a), 0x6e) + mstore8(add(mPtr, 0x2b), 0x6b) + + mstore8(add(mPtr, 0x2c), HASH_FR_SIZE_DOMAIN) // size domain + l_success := staticcall(gas(), 0x2, mPtr, 0x2d, mPtr, 0x20) + if iszero(l_success) { error_verify() } + + // b1 is located at mPtr. We store b2 at add(mPtr, 0x20) + + // [b0^b1 || two || dst || HASH_FR_SIZE_DOMAIN] + // <-64bytes -> <- 1 byte each -> + mstore(add(mPtr, 0x20), xor(mload(mPtr), b0)) + mstore8(add(mPtr, 0x40), HASH_FR_TWO) + + mstore8(add(mPtr, 0x41), 0x42) // dst + mstore8(add(mPtr, 0x42), 0x53) + mstore8(add(mPtr, 0x43), 0x42) + mstore8(add(mPtr, 0x44), 0x32) + mstore8(add(mPtr, 0x45), 0x32) + mstore8(add(mPtr, 0x46), 0x2d) + mstore8(add(mPtr, 0x47), 0x50) + mstore8(add(mPtr, 0x48), 0x6c) + mstore8(add(mPtr, 0x49), 0x6f) + mstore8(add(mPtr, 0x4a), 0x6e) + mstore8(add(mPtr, 0x4b), 0x6b) + + mstore8(add(mPtr, 0x4c), HASH_FR_SIZE_DOMAIN) // size domain + + let offset := add(mPtr, 0x20) + l_success := staticcall(gas(), 0x2, offset, 0x2d, offset, 0x20) + if iszero(l_success) { error_verify() } + + // at this point we have mPtr = [ b1 || b2] where b1 is on 32byes and b2 in 16bytes. + // we interpret it as a big integer mod r in big endian (similar to regular decimal notation) + // the result is then 2**(8*16)*mPtr[32:] + mPtr[32:48] + res := mulmod(mload(mPtr), HASH_FR_BB, R_MOD) // <- res = 2**128 * mPtr[:32] + let b1 := shr(128, mload(add(mPtr, 0x20))) // b1 <- [0, 0, .., 0 || b2[:16] ] + res := addmod(res, b1, R_MOD) + } + + // END compute_pi ------------------------------------------------- + + /// @notice compute α² * 1/n * (ζ{n}-1)/(ζ - 1) where + /// * α = challenge derived in derive_gamma_beta_alpha_zeta + /// * n = vk_domain_size + /// * ω = vk_omega (generator of the multiplicative cyclic group of order n in (ℤ/rℤ)*) + /// * ζ = zeta (challenge derived with Fiat Shamir) + function compute_alpha_square_lagrange_0() { + let state := mload(0x40) + let mPtr := add(mload(0x40), STATE_LAST_MEM) + + let res := mload(add(state, STATE_ZETA_POWER_N_MINUS_ONE)) + let den := addmod(mload(add(state, STATE_ZETA)), sub(R_MOD, 1), R_MOD) + den := pow(den, sub(R_MOD, 2), mPtr) + den := mulmod(den, VK_INV_DOMAIN_SIZE, R_MOD) + res := mulmod(den, res, R_MOD) + + let l_alpha := mload(add(state, STATE_ALPHA)) + res := mulmod(res, l_alpha, R_MOD) + res := mulmod(res, l_alpha, R_MOD) + mstore(add(state, STATE_ALPHA_SQUARE_LAGRANGE_0), res) + } + + /// @notice follows alg. p.13 of https://eprint.iacr.org/2019/953.pdf + /// with t₁ = t₂ = 1, and the proofs are ([digest] + [quotient] +purported evaluation): + /// * [state_folded_state_digests], [proof_batch_opening_at_zeta_x], state_folded_evals + /// * [proof_grand_product_commitment], [proof_opening_at_zeta_omega_x], [proof_grand_product_at_zeta_omega] + /// @param aproof pointer to the proof + function batch_verify_multi_points(aproof) { + let state := mload(0x40) + let mPtr := add(state, STATE_LAST_MEM) + + // derive a random number. As there is no random generator, we + // do an FS like challenge derivation, depending on both digests and + // ζ to ensure that the prover cannot control the random numger. + // Note: adding the other point ζω is not needed, as ω is known beforehand. + mstore(mPtr, mload(add(state, STATE_FOLDED_DIGESTS_X))) + mstore(add(mPtr, 0x20), mload(add(state, STATE_FOLDED_DIGESTS_Y))) + mstore(add(mPtr, 0x40), calldataload(add(aproof, PROOF_BATCH_OPENING_AT_ZETA_X))) + mstore(add(mPtr, 0x60), calldataload(add(aproof, PROOF_BATCH_OPENING_AT_ZETA_Y))) + mstore(add(mPtr, 0x80), calldataload(add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_X))) + mstore(add(mPtr, 0xa0), calldataload(add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_Y))) + mstore(add(mPtr, 0xc0), calldataload(add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_X))) + mstore(add(mPtr, 0xe0), calldataload(add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_Y))) + mstore(add(mPtr, 0x100), mload(add(state, STATE_ZETA))) + mstore(add(mPtr, 0x120), mload(add(state, STATE_GAMMA_KZG))) + let random := staticcall(gas(), 0x2, mPtr, 0x140, mPtr, 0x20) + if iszero(random) { error_random_generation() } + random := mod(mload(mPtr), R_MOD) // use the same variable as we are one variable away from getting stack-too-deep error... + + let folded_quotients := mPtr + mPtr := add(folded_quotients, 0x40) + mstore(folded_quotients, calldataload(add(aproof, PROOF_BATCH_OPENING_AT_ZETA_X))) + mstore(add(folded_quotients, 0x20), calldataload(add(aproof, PROOF_BATCH_OPENING_AT_ZETA_Y))) + point_acc_mul_calldata(folded_quotients, add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_X), random, mPtr) + + let folded_digests := add(state, STATE_FOLDED_DIGESTS_X) + point_acc_mul_calldata(folded_digests, add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_X), random, mPtr) + + let folded_evals := add(state, STATE_FOLDED_CLAIMED_VALUES) + fr_acc_mul_calldata(folded_evals, add(aproof, PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA), random) + + let folded_evals_commit := mPtr + mPtr := add(folded_evals_commit, 0x40) + mstore(folded_evals_commit, G1_SRS_X) + mstore(add(folded_evals_commit, 0x20), G1_SRS_Y) + mstore(add(folded_evals_commit, 0x40), mload(folded_evals)) + let check_staticcall := staticcall(gas(), 7, folded_evals_commit, 0x60, folded_evals_commit, 0x40) + if iszero(check_staticcall) { error_verify() } + + let folded_evals_commit_y := add(folded_evals_commit, 0x20) + mstore(folded_evals_commit_y, sub(P_MOD, mload(folded_evals_commit_y))) + point_add(folded_digests, folded_digests, folded_evals_commit, mPtr) + + let folded_points_quotients := mPtr + mPtr := add(mPtr, 0x40) + point_mul_calldata( + folded_points_quotients, + add(aproof, PROOF_BATCH_OPENING_AT_ZETA_X), + mload(add(state, STATE_ZETA)), + mPtr + ) + let zeta_omega := mulmod(mload(add(state, STATE_ZETA)), VK_OMEGA, R_MOD) + random := mulmod(random, zeta_omega, R_MOD) + point_acc_mul_calldata( + folded_points_quotients, add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_X), random, mPtr + ) + + point_add(folded_digests, folded_digests, folded_points_quotients, mPtr) + + let folded_quotients_y := add(folded_quotients, 0x20) + mstore(folded_quotients_y, sub(P_MOD, mload(folded_quotients_y))) + + mstore(mPtr, mload(folded_digests)) + mstore(add(mPtr, 0x20), mload(add(folded_digests, 0x20))) + mstore(add(mPtr, 0x40), G2_SRS_0_X_0) // the 4 lines are the canonical G2 point on BN254 + mstore(add(mPtr, 0x60), G2_SRS_0_X_1) + mstore(add(mPtr, 0x80), G2_SRS_0_Y_0) + mstore(add(mPtr, 0xa0), G2_SRS_0_Y_1) + mstore(add(mPtr, 0xc0), mload(folded_quotients)) + mstore(add(mPtr, 0xe0), mload(add(folded_quotients, 0x20))) + mstore(add(mPtr, 0x100), G2_SRS_1_X_0) + mstore(add(mPtr, 0x120), G2_SRS_1_X_1) + mstore(add(mPtr, 0x140), G2_SRS_1_Y_0) + mstore(add(mPtr, 0x160), G2_SRS_1_Y_1) + check_pairing_kzg(mPtr) + } + + /// @notice check_pairing_kzg checks the result of the final pairing product of the batched + /// kzg verification. The purpose of this function is to avoid exhausting the stack + /// in the function batch_verify_multi_points. + /// @param mPtr pointer storing the tuple of pairs + function check_pairing_kzg(mPtr) { + let state := mload(0x40) + + let l_success := staticcall(gas(), 8, mPtr, 0x180, 0x00, 0x20) + if iszero(l_success) { error_pairing() } + let res_pairing := mload(0x00) + mstore(add(state, STATE_SUCCESS), res_pairing) + } + + /// @notice Fold the opening proofs at ζ: + /// * at state+state_folded_digest we store: [Linearised_polynomial]+γ[L] + γ²[R] + γ³[O] + γ⁴[S₁] +γ⁵[S₂] + ∑ᵢγ⁵⁺ⁱ[Pi_{i}] + /// * at state+state_folded_claimed_values we store: H(ζ) + γLinearised_polynomial(ζ)+γ²L(ζ) + γ³R(ζ)+ γ⁴O(ζ) + γ⁵S₁(ζ) +γ⁶S₂(ζ) + ∑ᵢγ⁶⁺ⁱPi_{i}(ζ) + /// @param aproof pointer to the proof + /// acc_gamma stores the γⁱ + function fold_state(aproof) { + let state := mload(0x40) + let mPtr := add(mload(0x40), STATE_LAST_MEM) + let mPtr20 := add(mPtr, 0x20) + let mPtr40 := add(mPtr, 0x40) + + let l_gamma_kzg := mload(add(state, STATE_GAMMA_KZG)) + let acc_gamma := l_gamma_kzg + let state_folded_digests := add(state, STATE_FOLDED_DIGESTS_X) + + mstore(add(state, STATE_FOLDED_DIGESTS_X), mload(add(state, STATE_LINEARISED_POLYNOMIAL_X))) + mstore(add(state, STATE_FOLDED_DIGESTS_Y), mload(add(state, STATE_LINEARISED_POLYNOMIAL_Y))) + mstore( + add(state, STATE_FOLDED_CLAIMED_VALUES), mload(add(state, STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA)) + ) + + point_acc_mul_calldata(add(state, STATE_FOLDED_DIGESTS_X), add(aproof, PROOF_L_COM_X), acc_gamma, mPtr) + fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_L_AT_ZETA), acc_gamma) + + acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD) + point_acc_mul_calldata(state_folded_digests, add(aproof, PROOF_R_COM_X), acc_gamma, mPtr) + fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_R_AT_ZETA), acc_gamma) + + acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD) + point_acc_mul_calldata(state_folded_digests, add(aproof, PROOF_O_COM_X), acc_gamma, mPtr) + fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_O_AT_ZETA), acc_gamma) + + acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD) + mstore(mPtr, VK_S1_COM_X) + mstore(mPtr20, VK_S1_COM_Y) + point_acc_mul(state_folded_digests, mPtr, acc_gamma, mPtr40) + fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_S1_AT_ZETA), acc_gamma) + + acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD) + mstore(mPtr, VK_S2_COM_X) + mstore(mPtr20, VK_S2_COM_Y) + point_acc_mul(state_folded_digests, mPtr, acc_gamma, mPtr40) + fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_S2_AT_ZETA), acc_gamma) + let poqaz := add(aproof, PROOF_OPENING_QCP_AT_ZETA) + + acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD) + mstore(mPtr, VK_QCP_0_X) + mstore(mPtr20, VK_QCP_0_Y) + point_acc_mul(state_folded_digests, mPtr, acc_gamma, mPtr40) + fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), poqaz, acc_gamma) + poqaz := add(poqaz, 0x20) + } + + /// @notice generate the challenge (using Fiat Shamir) to fold the opening proofs + /// at ζ. + /// The process for deriving γ is the same as in derive_gamma but this time the inputs are + /// in this order (the [] means it's a commitment): + /// * ζ + /// * [Linearised polynomial] + /// * [L], [R], [O] + /// * [S₁] [S₂] + /// * [Pi_{i}] (wires associated to custom gates) + /// Then there are the purported evaluations of the previous committed polynomials: + /// * Linearised_polynomial(ζ) + /// * L(ζ), R(ζ), O(ζ), S₁(ζ), S₂(ζ) + /// * Pi_{i}(ζ) + /// * Z(ζω) + /// @param aproof pointer to the proof + function compute_gamma_kzg(aproof) { + let state := mload(0x40) + let mPtr := add(mload(0x40), STATE_LAST_MEM) + mstore(mPtr, FS_GAMMA_KZG) // "gamma" + mstore(add(mPtr, 0x20), mload(add(state, STATE_ZETA))) + mstore(add(mPtr, 0x40), mload(add(state, STATE_LINEARISED_POLYNOMIAL_X))) + mstore(add(mPtr, 0x60), mload(add(state, STATE_LINEARISED_POLYNOMIAL_Y))) + calldatacopy(add(mPtr, 0x80), add(aproof, PROOF_L_COM_X), 0xc0) + mstore(add(mPtr, 0x140), VK_S1_COM_X) + mstore(add(mPtr, 0x160), VK_S1_COM_Y) + mstore(add(mPtr, 0x180), VK_S2_COM_X) + mstore(add(mPtr, 0x1a0), VK_S2_COM_Y) + + let offset := 0x1c0 + + mstore(add(mPtr, offset), VK_QCP_0_X) + mstore(add(mPtr, add(offset, 0x20)), VK_QCP_0_Y) + offset := add(offset, 0x40) + mstore(add(mPtr, offset), mload(add(state, STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA))) + mstore(add(mPtr, add(offset, 0x20)), calldataload(add(aproof, PROOF_L_AT_ZETA))) + mstore(add(mPtr, add(offset, 0x40)), calldataload(add(aproof, PROOF_R_AT_ZETA))) + mstore(add(mPtr, add(offset, 0x60)), calldataload(add(aproof, PROOF_O_AT_ZETA))) + mstore(add(mPtr, add(offset, 0x80)), calldataload(add(aproof, PROOF_S1_AT_ZETA))) + mstore(add(mPtr, add(offset, 0xa0)), calldataload(add(aproof, PROOF_S2_AT_ZETA))) + + let _mPtr := add(mPtr, add(offset, 0xc0)) + + let _poqaz := add(aproof, PROOF_OPENING_QCP_AT_ZETA) + calldatacopy(_mPtr, _poqaz, mul(VK_NB_CUSTOM_GATES, 0x20)) + _mPtr := add(_mPtr, mul(VK_NB_CUSTOM_GATES, 0x20)) + + mstore(_mPtr, calldataload(add(aproof, PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA))) + + let start_input := 0x1b // 00.."gamma" + let size_input := add(0x14, mul(VK_NB_CUSTOM_GATES, 3)) // number of 32bytes elmts = 0x17 (zeta+3*6 for the digests+openings) + 3*VK_NB_CUSTOM_GATES (for the commitments of the selectors) + 1 (opening of Z at ζω) + size_input := add(0x5, mul(size_input, 0x20)) // size in bytes: 15*32 bytes + 5 bytes for gamma + let check_staticcall := + staticcall(gas(), 0x2, add(mPtr, start_input), size_input, add(state, STATE_GAMMA_KZG), 0x20) + if iszero(check_staticcall) { error_verify() } + mstore(add(state, STATE_GAMMA_KZG), mod(mload(add(state, STATE_GAMMA_KZG)), R_MOD)) + } + + function compute_commitment_linearised_polynomial_ec(aproof, s1, s2) { + let state := mload(0x40) + let mPtr := add(mload(0x40), STATE_LAST_MEM) + + mstore(mPtr, VK_QL_COM_X) + mstore(add(mPtr, 0x20), VK_QL_COM_Y) + point_mul( + add(state, STATE_LINEARISED_POLYNOMIAL_X), + mPtr, + calldataload(add(aproof, PROOF_L_AT_ZETA)), + add(mPtr, 0x40) + ) + + mstore(mPtr, VK_QR_COM_X) + mstore(add(mPtr, 0x20), VK_QR_COM_Y) + point_acc_mul( + add(state, STATE_LINEARISED_POLYNOMIAL_X), + mPtr, + calldataload(add(aproof, PROOF_R_AT_ZETA)), + add(mPtr, 0x40) + ) + + let rl := + mulmod(calldataload(add(aproof, PROOF_L_AT_ZETA)), calldataload(add(aproof, PROOF_R_AT_ZETA)), R_MOD) + mstore(mPtr, VK_QM_COM_X) + mstore(add(mPtr, 0x20), VK_QM_COM_Y) + point_acc_mul(add(state, STATE_LINEARISED_POLYNOMIAL_X), mPtr, rl, add(mPtr, 0x40)) + + mstore(mPtr, VK_QO_COM_X) + mstore(add(mPtr, 0x20), VK_QO_COM_Y) + point_acc_mul( + add(state, STATE_LINEARISED_POLYNOMIAL_X), + mPtr, + calldataload(add(aproof, PROOF_O_AT_ZETA)), + add(mPtr, 0x40) + ) + + mstore(mPtr, VK_QK_COM_X) + mstore(add(mPtr, 0x20), VK_QK_COM_Y) + point_add( + add(state, STATE_LINEARISED_POLYNOMIAL_X), + add(state, STATE_LINEARISED_POLYNOMIAL_X), + mPtr, + add(mPtr, 0x40) + ) + + let qcp_opening_at_zeta := add(aproof, PROOF_OPENING_QCP_AT_ZETA) + let bsb_commitments := add(aproof, PROOF_BSB_COMMITMENTS) + for { let i := 0 } lt(i, VK_NB_CUSTOM_GATES) { i := add(i, 1) } { + mstore(mPtr, calldataload(bsb_commitments)) + mstore(add(mPtr, 0x20), calldataload(add(bsb_commitments, 0x20))) + point_acc_mul( + add(state, STATE_LINEARISED_POLYNOMIAL_X), + mPtr, + calldataload(qcp_opening_at_zeta), + add(mPtr, 0x40) + ) + qcp_opening_at_zeta := add(qcp_opening_at_zeta, 0x20) + bsb_commitments := add(bsb_commitments, 0x40) + } + + mstore(mPtr, VK_S3_COM_X) + mstore(add(mPtr, 0x20), VK_S3_COM_Y) + point_acc_mul(add(state, STATE_LINEARISED_POLYNOMIAL_X), mPtr, s1, add(mPtr, 0x40)) + + mstore(mPtr, calldataload(add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_X))) + mstore(add(mPtr, 0x20), calldataload(add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_Y))) + point_acc_mul(add(state, STATE_LINEARISED_POLYNOMIAL_X), mPtr, s2, add(mPtr, 0x40)) + + point_add( + add(state, STATE_LINEARISED_POLYNOMIAL_X), + add(state, STATE_LINEARISED_POLYNOMIAL_X), + add(state, STATE_FOLDED_H_X), + mPtr + ) + } + + /// @notice Compute the commitment to the linearized polynomial equal to + /// L(ζ)[Qₗ]+r(ζ)[Qᵣ]+R(ζ)L(ζ)[Qₘ]+O(ζ)[Qₒ]+[Qₖ]+Σᵢqc'ᵢ(ζ)[BsbCommitmentᵢ] + + /// α*( Z(μζ)(L(ζ)+β*S₁(ζ)+γ)*(R(ζ)+β*S₂(ζ)+γ)[S₃]-[Z](L(ζ)+β*id_{1}(ζ)+γ)*(R(ζ)+β*id_{2}(ζ)+γ)*(O(ζ)+β*id_{3}(ζ)+γ) ) + + /// α²*L₁(ζ)[Z] - Z_{H}(ζ)*(([H₀] + ζᵐ⁺²*[H₁] + ζ²⁽ᵐ⁺²⁾*[H₂]) + /// where + /// * id_1 = id, id_2 = vk_coset_shift*id, id_3 = vk_coset_shift^{2}*id + /// * the [] means that it's a commitment (i.e. a point on Bn254(F_p)) + /// * Z_{H}(ζ) = ζ^n-1 + /// @param aproof pointer to the proof + function compute_commitment_linearised_polynomial(aproof) { + let state := mload(0x40) + let l_beta := mload(add(state, STATE_BETA)) + let l_gamma := mload(add(state, STATE_GAMMA)) + let l_zeta := mload(add(state, STATE_ZETA)) + let l_alpha := mload(add(state, STATE_ALPHA)) + + let u := mulmod(calldataload(add(aproof, PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA)), l_beta, R_MOD) + let v := mulmod(l_beta, calldataload(add(aproof, PROOF_S1_AT_ZETA)), R_MOD) + v := addmod(v, calldataload(add(aproof, PROOF_L_AT_ZETA)), R_MOD) + v := addmod(v, l_gamma, R_MOD) + + let w := mulmod(l_beta, calldataload(add(aproof, PROOF_S2_AT_ZETA)), R_MOD) + w := addmod(w, calldataload(add(aproof, PROOF_R_AT_ZETA)), R_MOD) + w := addmod(w, l_gamma, R_MOD) + + let s1 := mulmod(u, v, R_MOD) + s1 := mulmod(s1, w, R_MOD) + s1 := mulmod(s1, l_alpha, R_MOD) + + let coset_square := mulmod(VK_COSET_SHIFT, VK_COSET_SHIFT, R_MOD) + let betazeta := mulmod(l_beta, l_zeta, R_MOD) + u := addmod(betazeta, calldataload(add(aproof, PROOF_L_AT_ZETA)), R_MOD) + u := addmod(u, l_gamma, R_MOD) + + v := mulmod(betazeta, VK_COSET_SHIFT, R_MOD) + v := addmod(v, calldataload(add(aproof, PROOF_R_AT_ZETA)), R_MOD) + v := addmod(v, l_gamma, R_MOD) + + w := mulmod(betazeta, coset_square, R_MOD) + w := addmod(w, calldataload(add(aproof, PROOF_O_AT_ZETA)), R_MOD) + w := addmod(w, l_gamma, R_MOD) + + let s2 := mulmod(u, v, R_MOD) + s2 := mulmod(s2, w, R_MOD) + s2 := sub(R_MOD, s2) + s2 := mulmod(s2, l_alpha, R_MOD) + s2 := addmod(s2, mload(add(state, STATE_ALPHA_SQUARE_LAGRANGE_0)), R_MOD) + + // at this stage: + // * s₁ = α*Z(μζ)(l(ζ)+β*s₁(ζ)+γ)*(r(ζ)+β*s₂(ζ)+γ)*β + // * s₂ = -α*(l(ζ)+β*ζ+γ)*(r(ζ)+β*u*ζ+γ)*(o(ζ)+β*u²*ζ+γ) + α²*L₁(ζ) + + compute_commitment_linearised_polynomial_ec(aproof, s1, s2) + } + + /// @notice compute -z_h(ζ)*([H₁] + ζᵐ⁺²[H₂] + ζ²⁽ᵐ⁺²⁾[H₃]) and store the result at + /// state + state_folded_h + /// @param aproof pointer to the proof + function fold_h(aproof) { + let state := mload(0x40) + let n_plus_two := add(VK_DOMAIN_SIZE, 2) + let mPtr := add(mload(0x40), STATE_LAST_MEM) + let zeta_power_n_plus_two := pow(mload(add(state, STATE_ZETA)), n_plus_two, mPtr) + point_mul_calldata(add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_2_X), zeta_power_n_plus_two, mPtr) + point_add_calldata( + add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_1_X), mPtr + ) + point_mul(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), zeta_power_n_plus_two, mPtr) + point_add_calldata( + add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_0_X), mPtr + ) + point_mul( + add(state, STATE_FOLDED_H_X), + add(state, STATE_FOLDED_H_X), + mload(add(state, STATE_ZETA_POWER_N_MINUS_ONE)), + mPtr + ) + let folded_h_y := mload(add(state, STATE_FOLDED_H_Y)) + folded_h_y := sub(P_MOD, folded_h_y) + mstore(add(state, STATE_FOLDED_H_Y), folded_h_y) + } + + /// @notice check that the opening of the linearised polynomial at zeta is equal to + /// - [ PI(ζ) - α²*L₁(ζ) + α(l(ζ)+β*s1(ζ)+γ)(r(ζ)+β*s2(ζ)+γ)(o(ζ)+γ)*z(ωζ) ] + /// @param aproof pointer to the proof + function verify_opening_linearised_polynomial(aproof) { + let state := mload(0x40) + + // (l(ζ)+β*s1(ζ)+γ) + let s1 + s1 := mulmod(calldataload(add(aproof, PROOF_S1_AT_ZETA)), mload(add(state, STATE_BETA)), R_MOD) + s1 := addmod(s1, mload(add(state, STATE_GAMMA)), R_MOD) + s1 := addmod(s1, calldataload(add(aproof, PROOF_L_AT_ZETA)), R_MOD) + + // (r(ζ)+β*s2(ζ)+γ) + let s2 + s2 := mulmod(calldataload(add(aproof, PROOF_S2_AT_ZETA)), mload(add(state, STATE_BETA)), R_MOD) + s2 := addmod(s2, mload(add(state, STATE_GAMMA)), R_MOD) + s2 := addmod(s2, calldataload(add(aproof, PROOF_R_AT_ZETA)), R_MOD) + + // (o(ζ)+γ) + let o + o := addmod(calldataload(add(aproof, PROOF_O_AT_ZETA)), mload(add(state, STATE_GAMMA)), R_MOD) + + // α*Z(μζ)*(l(ζ)+β*s1(ζ)+γ)*(r(ζ)+β*s2(ζ)+γ)*(o(ζ)+γ) + s1 := mulmod(s1, s2, R_MOD) + s1 := mulmod(s1, o, R_MOD) + s1 := mulmod(s1, mload(add(state, STATE_ALPHA)), R_MOD) + s1 := mulmod(s1, calldataload(add(aproof, PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA)), R_MOD) + + // PI(ζ) - α²*L₁(ζ) + α(l(ζ)+β*s1(ζ)+γ)(r(ζ)+β*s2(ζ)+γ)(o(ζ)+γ)*z(ωζ) + s1 := addmod(s1, mload(add(state, STATE_PI)), R_MOD) + s2 := mload(add(state, STATE_ALPHA_SQUARE_LAGRANGE_0)) + s2 := sub(R_MOD, s2) + s1 := addmod(s1, s2, R_MOD) + s1 := sub(R_MOD, s1) + + mstore(add(state, STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA), s1) + } + + // BEGINNING utils math functions ------------------------------------------------- + + /// @param dst pointer storing the result + /// @param p pointer to the first point + /// @param q pointer to the second point + /// @param mPtr pointer to free memory + function point_add(dst, p, q, mPtr) { + mstore(mPtr, mload(p)) + mstore(add(mPtr, 0x20), mload(add(p, 0x20))) + mstore(add(mPtr, 0x40), mload(q)) + mstore(add(mPtr, 0x60), mload(add(q, 0x20))) + let l_success := staticcall(gas(), EC_ADD, mPtr, 0x80, dst, 0x40) + if iszero(l_success) { error_ec_op() } + } + + /// @param dst pointer storing the result + /// @param p pointer to the first point (calldata) + /// @param q pointer to the second point (calladata) + /// @param mPtr pointer to free memory + function point_add_calldata(dst, p, q, mPtr) { + mstore(mPtr, mload(p)) + mstore(add(mPtr, 0x20), mload(add(p, 0x20))) + mstore(add(mPtr, 0x40), calldataload(q)) + mstore(add(mPtr, 0x60), calldataload(add(q, 0x20))) + let l_success := staticcall(gas(), EC_ADD, mPtr, 0x80, dst, 0x40) + if iszero(l_success) { error_ec_op() } + } + + /// @parma dst pointer storing the result + /// @param src pointer to a point on Bn254(𝔽_p) + /// @param s scalar + /// @param mPtr free memory + function point_mul(dst, src, s, mPtr) { + mstore(mPtr, mload(src)) + mstore(add(mPtr, 0x20), mload(add(src, 0x20))) + mstore(add(mPtr, 0x40), s) + let l_success := staticcall(gas(), EC_MUL, mPtr, 0x60, dst, 0x40) + if iszero(l_success) { error_ec_op() } + } + + /// @parma dst pointer storing the result + /// @param src pointer to a point on Bn254(𝔽_p) on calldata + /// @param s scalar + /// @param mPtr free memory + function point_mul_calldata(dst, src, s, mPtr) { + mstore(mPtr, calldataload(src)) + mstore(add(mPtr, 0x20), calldataload(add(src, 0x20))) + mstore(add(mPtr, 0x40), s) + let l_success := staticcall(gas(), EC_MUL, mPtr, 0x60, dst, 0x40) + if iszero(l_success) { error_ec_op() } + } + + /// @notice dst <- dst + [s]src (Elliptic curve) + /// @param dst pointer accumulator point storing the result + /// @param src pointer to the point to multiply and add + /// @param s scalar + /// @param mPtr free memory + function point_acc_mul(dst, src, s, mPtr) { + mstore(mPtr, mload(src)) + mstore(add(mPtr, 0x20), mload(add(src, 0x20))) + mstore(add(mPtr, 0x40), s) + let l_success := staticcall(gas(), 7, mPtr, 0x60, mPtr, 0x40) + mstore(add(mPtr, 0x40), mload(dst)) + mstore(add(mPtr, 0x60), mload(add(dst, 0x20))) + l_success := and(l_success, staticcall(gas(), EC_ADD, mPtr, 0x80, dst, 0x40)) + if iszero(l_success) { error_ec_op() } + } + + /// @notice dst <- dst + [s]src (Elliptic curve) + /// @param dst pointer accumulator point storing the result + /// @param src pointer to the point to multiply and add (on calldata) + /// @param s scalar + /// @mPtr free memory + function point_acc_mul_calldata(dst, src, s, mPtr) { + let state := mload(0x40) + mstore(mPtr, calldataload(src)) + mstore(add(mPtr, 0x20), calldataload(add(src, 0x20))) + mstore(add(mPtr, 0x40), s) + let l_success := staticcall(gas(), 7, mPtr, 0x60, mPtr, 0x40) + mstore(add(mPtr, 0x40), mload(dst)) + mstore(add(mPtr, 0x60), mload(add(dst, 0x20))) + l_success := and(l_success, staticcall(gas(), EC_ADD, mPtr, 0x80, dst, 0x40)) + if iszero(l_success) { error_ec_op() } + } + + /// @notice dst <- dst + src*s (Fr) dst,src are addresses, s is a value + /// @param dst pointer storing the result + /// @param src pointer to the scalar to multiply and add (on calldata) + /// @param s scalar + function fr_acc_mul_calldata(dst, src, s) { + let tmp := mulmod(calldataload(src), s, R_MOD) + mstore(dst, addmod(mload(dst), tmp, R_MOD)) + } + + /// @param x element to exponentiate + /// @param e exponent + /// @param mPtr free memory + /// @return res x ** e mod r + function pow(x, e, mPtr) -> res { + mstore(mPtr, 0x20) + mstore(add(mPtr, 0x20), 0x20) + mstore(add(mPtr, 0x40), 0x20) + mstore(add(mPtr, 0x60), x) + mstore(add(mPtr, 0x80), e) + mstore(add(mPtr, 0xa0), R_MOD) + let check_staticcall := staticcall(gas(), MOD_EXP, mPtr, 0xc0, mPtr, 0x20) + if eq(check_staticcall, 0) {} + res := mload(mPtr) + } + } + } +} diff --git a/aptos/solidity/contracts/src/plonk/SP1MockVerifier.sol b/aptos/solidity/contracts/src/plonk/SP1MockVerifier.sol new file mode 100644 index 00000000..9f0d7050 --- /dev/null +++ b/aptos/solidity/contracts/src/plonk/SP1MockVerifier.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import {ISP1Verifier} from "./ISP1Verifier.sol"; + +/// @title SP1 Mock Verifier +/// @author Succinct Labs +/// @notice This contracts implements a Mock solidity verifier for SP1. +contract SP1MockVerifier is ISP1Verifier { + function VERSION() external pure returns (string memory) { + return "TODO"; + } + + /// @notice Verifies a mock proof with given public values and vkey. + /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. + function verifyProof(bytes32, bytes memory, bytes memory proofBytes) external pure { + assert(proofBytes.length == 0); + } +} diff --git a/aptos/solidity/contracts/src/plonk/SP1Verifier.sol b/aptos/solidity/contracts/src/plonk/SP1Verifier.sol new file mode 100644 index 00000000..04bb39ab --- /dev/null +++ b/aptos/solidity/contracts/src/plonk/SP1Verifier.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import {ISP1Verifier} from "./ISP1Verifier.sol"; +import {PlonkVerifier} from "./PlonkVerifier.sol"; + +/// @title SP1 Verifier +/// @author Succinct Labs +/// @notice This contracts implements a solidity verifier for SP1. +contract SP1Verifier is PlonkVerifier { + function VERSION() external pure returns (string memory) { + return "TODO"; + } + + /// @notice Hashes the public values to a field elements inside Bn254. + /// @param publicValues The public values. + function hashPublicValues(bytes memory publicValues) public pure returns (bytes32) { + return sha256(publicValues) & bytes32(uint256((1 << 253) - 1)); + } + + /// @notice Verifies a proof with given public values and vkey. + /// @param vkey The verification key for the RISC-V program. + /// @param publicValues The public values encoded as bytes. + /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. + function verifyProof(bytes32 vkey, bytes memory publicValues, bytes memory proofBytes) public view { + bytes32 publicValuesDigest = hashPublicValues(publicValues); + uint256[] memory inputs = new uint256[](2); + inputs[0] = uint256(vkey); + inputs[1] = uint256(publicValuesDigest); + this.Verify(proofBytes, inputs); + } +} diff --git a/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json new file mode 100644 index 00000000..da01f883 --- /dev/null +++ b/aptos/solidity/contracts/src/plonk_fixtures/epoch_change_fixture.json @@ -0,0 +1,5 @@ +{ + "vkey": "0x00ecf6a7b70dc2d50a314ab3f342826ac7235cb27db6f6f439519a12f737c0f2", + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ecc071f215064bfe6f1c24295135199ce6f6dec2974115fad50989e666915453ad", + "proof": "0x0ae41ce65a672a984240b3fe10f9356b67db98ee680d2fbf918f7b5918d83d1608b604caa796ca29c07e57d4eefd9c00710a4a3432c97e6ab74cdea46c84e0a61e71d39612363c4c18d55d669304836f737413d18f31c4c1c6063fb91c1546cf1e1cba0e0e997e2cfe676becaa0f47ef15104464d12bd032df66f711a5fa09682c5d0fe5f9e1ea940d8cba96ebba2f4c2fc4d63a692b2ab30d319aaa8c518008084c882cc93a12e2adedd57d898e6cda51e475c37c0abc6fea7cbfef60ad846a1a5fcaf65b87564325c48b3927cc6819c235e2cb1890b11c97fbd2a4778612d50927be5805b98fdeded77f38dd90da713159dbebc172ec8bbcaf8e1a4bc36a032db19cd5b722b9b34002b2bf854f6d27826f331e93d985e2be10a135db9986d60805e059e92359f3ace3d353f01b28d7a6aad882757d079b75f352480a8240450ceb783462b62b1f5dfbba2fddd95aaebcf4f7e25e30567b68f3352aeb8b3f3c1dec60669becfe1754e8d986f463f3f57adf659909a51c50801205c00c1d1ec508fcc43a584b61f9fc2089cac009f4fb675df8aadaabd7fdad42a9eaf714d224086773fb2c47e8cbefe4ce7a01e75df58fa63857eb5a3b5e8b3e847516cfd192051ae4be28d525725e357f9de14ee34decebe0511f6d13114a4fea99df282c8a110feae686fc9106763c0b681cde1ed87daa812619dc565cbb9d3d99b8c88c202c2d6813db10b7234ced34a2d944d4e9c54766bc999ab9312eaa451ea2e97bd815395fc3ef1d91f35f2c42848f008fbb4a7c1c85829b6d127d7d3d4feb4df356276d7b7b7a453bc4a8b93001f36df88212531349903679b4ccdf3349be68a2152531c684adce63081af722b729772bf5faad71c71e08400caef6e8d9c97ca18d2b446dd6157b8afc866d92dcd81bc51ad37c1d5c70739b161dbde259b6c886242fd425917f69d3ee7265cf5507a6c2921e864aae65b81ee2f1f33fc52a5846ab28a57921a01b4bcd85b842fbea66215318c4a5d73feca310b0b05752f9a0394b02063d78cb47f8dcf0bbfde77fc9e427ec96aec44815a2f82c1b1245165bd25715fea1f6dbd1f5207885a8367b9b2df970b6e1e4bce3dcbbda0fda2e66badd311d772a48d7382c577f862004c871784330ad9fcbde04fbe894e2e68daeb5b844165e87cfe2e2c550915384adc41cb5181c9581ce34b5af41ee8455adadba29e3" +} diff --git a/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json new file mode 100644 index 00000000..8670e4dd --- /dev/null +++ b/aptos/solidity/contracts/src/plonk_fixtures/inclusion_fixture.json @@ -0,0 +1,5 @@ +{ + "vkey": "0x008250372636bf382b645ba064dead84a34d26f30c930a1ec81c42fad2b183a1", + "publicValues": "0x205829098a4c0273312e8bc4fdbde28fc12abdc540c88bdd9abeef0a85d706ec8c8d51f0d08a701bfaff8e03459ed0e51d9abd103406731a2e4276d4ae0938d5", + "proof": "0x2a1f5ee25d15b06fe79870e1b76151e4360ac8a1aa82ed2c7ed0092a4175fb1925df8b465a5b272949d63b506686021da3ed5d6e676dc70fcce28c277d42671e11e8c655950e6e0f1b90c483372ee0908f2fa846903525f8f4e3d74d825c5c050be8ece7c5493c80a77114d1b05109c67b93fbfdbfa9b286bc906e74f37fc3ee135bc873a37bf39475cc12f0a66ca8b410ec9032a6f367d36b905714f8ec05972d48cd3982c9711e1d8fcd3869ced8f7be1c66ff939ca0c70d910e0dc8bb6b960834c1564e23ce6bfee0ba6b8c6902297a1750184ea02645da7837dd88c2a54d24a085a0f707e51fc5a6ca9251bdae9a254cf7de303644189f55ebf204d9d53422351de89382a215c3ce13dc38df3cf79d3d34789dbfaa3ef455ddef178d624f20c81bdb81954bc14a1c82da78d1d4fa4a31a67fa27cc945197048cec461729125d8f953d06254aabe6063186f7c7d781952f024f45d377d7466af95eda268a90e993f5e417a3c5d711c1e791f2ee680a279bbc287b82345d66f29cf265f24311017409da89c3a72c517f20ad38603c63e49ddda52fb0eb7dec22b6a4c76d4202d597ebba83227bffdd905627c12ea588efa2d6d863e993854ab90921199458d107371a118dbb7d924b667c177025ca4879b766339a002210abc3fb9655afc891e4ff067e638c03e36727f547398b72607a2ab3814c3e1c9b93fcfa1a44f0d151461433794588f3666e826eb2e1143bf6b90203b93398760deaecce7c1d2521314f8fbfb6a6a296ebf16dd4120fe8c8ecea17d15caf8ccb350e8478bbfe202612f63149d718c7f8d08d114d05f7e3ab97bc7de3aa290805e300fed02d64ef49a239fc240bf79e93b4ec5e36c088038cfe36b08b59f9612ccd6415bafb6b7280b294872005e3a5ecaf31dd4fa5b6a833ba17d789618e2017fe98a5bbdba65f90f088f7a0c4e4fb98d5158a3babfee08fbeb40132c3d096aebfa89f02ce8c7c2571363af51283fa66f7626f82e06f566d53f1f079c3e9a142beeecfc15c28b6feb0b6ed5b1857e99da3786eef9a39a55020392455bec35d8ccdfc04a5c0ea37b031eddeb2a2084a3a0a2e4188d814f2572c0342b76967d62cfcc1eeb99773a9fe303dabf06494bd01060c9b2f20083150249ae83f051d397df44a802b37639169a0b4dfd149f27ec95a939400603df21a1722b9ccd1fc97f28819d4c8d0576d0ac" +} diff --git a/aptos/solidity/contracts/test/test_lc_proofs.sol b/aptos/solidity/contracts/test/test_lc_proofs.sol new file mode 100644 index 00000000..ac83cde6 --- /dev/null +++ b/aptos/solidity/contracts/test/test_lc_proofs.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +import {Test, console} from "forge-std/Test.sol"; +import {stdJson} from "forge-std/StdJson.sol"; +import {Inclusion} from "../src/Inclusion.sol"; +import {EpochChange} from "../src/EpochChange.sol"; + +struct SP1ProofFixtureJson { + bytes proof; + bytes publicValues; + bytes32 vkey; +} + +contract SolidityVerificationTest is Test { + using stdJson for string; + + Inclusion public inclusion; + EpochChange public epochChange; + + function loadPlonkInclusionFixture() public view returns (SP1ProofFixtureJson memory) { + string memory root = vm.projectRoot(); + string memory path = string.concat(root, "/src/plonk_fixtures/inclusion_fixture.json"); + string memory json = vm.readFile(path); + bytes memory jsonBytes = json.parseRaw("."); + return abi.decode(jsonBytes, (SP1ProofFixtureJson)); + } + + function loadPlonkEpochChangeFixture() public view returns (SP1ProofFixtureJson memory) { + string memory root = vm.projectRoot(); + string memory path = string.concat(root, "/src/plonk_fixtures/epoch_change_fixture.json"); + string memory json = vm.readFile(path); + bytes memory jsonBytes = json.parseRaw("."); + return abi.decode(jsonBytes, (SP1ProofFixtureJson)); + } + + function setUp() public { + SP1ProofFixtureJson memory plonkInclusionFixture = loadPlonkInclusionFixture(); + inclusion = new Inclusion(plonkInclusionFixture.vkey); + + SP1ProofFixtureJson memory plonkEpochChangeFixture = loadPlonkEpochChangeFixture(); + epochChange = new EpochChange(plonkEpochChangeFixture.vkey); + } + + function testValidInclusionProofPlonk() public view { + SP1ProofFixtureJson memory fixture = loadPlonkInclusionFixture(); + uint256 gasCost = gasleft(); + inclusion.verifyProof(fixture.proof, fixture.publicValues); + console.log("gas cost: ", gasCost - gasleft()); + } + + function testValidEpochChangeProofPlonk() public view { + SP1ProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); + uint256 gasCost = gasleft(); + epochChange.verifyProof(fixture.proof, fixture.publicValues); + console.log("gas cost: ", gasCost - gasleft()); + } + + function testFail_InclusionProofPlonk() public view { + SP1ProofFixtureJson memory fixture = loadPlonkInclusionFixture(); + // Create a fake proof. + bytes memory fakeProof = new bytes(fixture.proof.length); + inclusion.verifyProof(fakeProof, fixture.publicValues); + } + + function testFail_EpochChangeProofPlonk() public view { + SP1ProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); + // Create a fake proof. + bytes memory fakeProof = new bytes(fixture.proof.length); + inclusion.verifyProof(fakeProof, fixture.publicValues); + } +} diff --git a/aptos/solidity/script/src/bin/main.rs b/aptos/solidity/script/src/bin/main.rs index 20ecf506..95f6ad07 100644 --- a/aptos/solidity/script/src/bin/main.rs +++ b/aptos/solidity/script/src/bin/main.rs @@ -66,9 +66,11 @@ fn main() { let fixture_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../contracts/src/plonk_fixtures"); std::fs::create_dir_all(&fixture_path).expect("failed to create fixture path"); + let fixture_path = fixture_path.join(args.program.as_str().to_owned() + "_fixture.json"); std::fs::write( - fixture_path.join(args.program.as_str().to_owned() + "_fixture.json"), + fixture_path.clone(), serde_json::to_string_pretty(&fixture).unwrap(), ) .expect("failed to write fixture"); + tracing::info!("Fixture has been successfully saved to {:?}", fixture_path); } From 6c48a1039e698f4b533e0624ea9c0f77e9e0a594 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Mon, 17 Jun 2024 13:02:19 +0100 Subject: [PATCH 08/13] tests: Add more negative Solidity testing --- .../contracts/src/plonk/SP1Verifier.sol | 1 + .../contracts/test/test_lc_proofs.sol | 42 ++++++++++++++++--- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk/SP1Verifier.sol b/aptos/solidity/contracts/src/plonk/SP1Verifier.sol index 04bb39ab..febc7586 100644 --- a/aptos/solidity/contracts/src/plonk/SP1Verifier.sol +++ b/aptos/solidity/contracts/src/plonk/SP1Verifier.sol @@ -24,6 +24,7 @@ contract SP1Verifier is PlonkVerifier { /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. function verifyProof(bytes32 vkey, bytes memory publicValues, bytes memory proofBytes) public view { bytes32 publicValuesDigest = hashPublicValues(publicValues); + uint256[] memory inputs = new uint256[](2); inputs[0] = uint256(vkey); inputs[1] = uint256(publicValuesDigest); diff --git a/aptos/solidity/contracts/test/test_lc_proofs.sol b/aptos/solidity/contracts/test/test_lc_proofs.sol index ac83cde6..c69fd418 100644 --- a/aptos/solidity/contracts/test/test_lc_proofs.sol +++ b/aptos/solidity/contracts/test/test_lc_proofs.sol @@ -56,17 +56,49 @@ contract SolidityVerificationTest is Test { console.log("gas cost: ", gasCost - gasleft()); } - function testFail_InclusionProofPlonk() public view { + // Negative tests with a fake proof + function testFail_FakeProofInclusion() public view { SP1ProofFixtureJson memory fixture = loadPlonkInclusionFixture(); - // Create a fake proof. bytes memory fakeProof = new bytes(fixture.proof.length); inclusion.verifyProof(fakeProof, fixture.publicValues); } - function testFail_EpochChangeProofPlonk() public view { + function testFail_FakeProofEpochChange() public view { SP1ProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); - // Create a fake proof. bytes memory fakeProof = new bytes(fixture.proof.length); - inclusion.verifyProof(fakeProof, fixture.publicValues); + epochChange.verifyProof(fakeProof, fixture.publicValues); + } + + // Negative tests with a fake public values + function testFail_FakePublicValuesInclusion() public view { + console.log("running testFail_FakePublicValuesInclusion"); + SP1ProofFixtureJson memory fixture = loadPlonkInclusionFixture(); + + bytes memory fakePublicValues = new bytes(fixture.proof.length + 100); + + inclusion.verifyProof(fixture.proof, fakePublicValues); + } + + function testFail_FakePublicValuesEpochChange() public view { + SP1ProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); + bytes memory fakePublicValues = new bytes(fixture.proof.length); + epochChange.verifyProof(fixture.proof, fakePublicValues); + } + + // Negative tests with a wrong vk + function testFail_WrongVkValuesInclusion() public { + SP1ProofFixtureJson memory plonkEpochChangeFixture = loadPlonkEpochChangeFixture(); + inclusion = new Inclusion(plonkEpochChangeFixture.vkey); // take key of epoch_change program + + SP1ProofFixtureJson memory fixture = loadPlonkInclusionFixture(); + inclusion.verifyProof(fixture.proof, fixture.publicValues); + } + + function testFail_WrongVkValuesEpochChange() public { + SP1ProofFixtureJson memory plonkInclusionFixture = loadPlonkInclusionFixture(); + epochChange = new EpochChange(plonkInclusionFixture.vkey); // take key of inclusion program + + SP1ProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); + epochChange.verifyProof(fixture.proof, fixture.publicValues); } } From 52b2f19c50055d8a72cd8d460aba1163a3404019 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Mon, 17 Jun 2024 15:36:10 +0100 Subject: [PATCH 09/13] feat: Add Rust program for Solidity contract generating --- aptos/Cargo.toml | 3 +- aptos/solidity/contracts-generator/Cargo.toml | 13 +++++++ .../rust-toolchain | 0 .../contracts-generator/src/bin/main.rs | 36 +++++++++++++++++++ .../{script => fixture-generator}/Cargo.toml | 0 .../solidity/fixture-generator/rust-toolchain | 3 ++ .../src/bin/main.rs | 0 7 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 aptos/solidity/contracts-generator/Cargo.toml rename aptos/solidity/{script => contracts-generator}/rust-toolchain (100%) create mode 100644 aptos/solidity/contracts-generator/src/bin/main.rs rename aptos/solidity/{script => fixture-generator}/Cargo.toml (100%) create mode 100644 aptos/solidity/fixture-generator/rust-toolchain rename aptos/solidity/{script => fixture-generator}/src/bin/main.rs (100%) diff --git a/aptos/Cargo.toml b/aptos/Cargo.toml index 4b4d3757..407032ca 100644 --- a/aptos/Cargo.toml +++ b/aptos/Cargo.toml @@ -6,7 +6,8 @@ members = [ "light-client", "aptos-programs", "proof-server", - "solidity/script", + "solidity/fixture-generator", + "solidity/contracts-generator", ] [workspace.dependencies] diff --git a/aptos/solidity/contracts-generator/Cargo.toml b/aptos/solidity/contracts-generator/Cargo.toml new file mode 100644 index 00000000..fa354dfb --- /dev/null +++ b/aptos/solidity/contracts-generator/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "contracts-generator" +version = "0.1.0" +edition = "2021" + +[[bin]] +name = "generate-contracts" +path = "src/bin/main.rs" + +[dependencies] +anyhow = "1.0.86" +log = "0.4.21" +sphinx-sdk = { workspace = true } diff --git a/aptos/solidity/script/rust-toolchain b/aptos/solidity/contracts-generator/rust-toolchain similarity index 100% rename from aptos/solidity/script/rust-toolchain rename to aptos/solidity/contracts-generator/rust-toolchain diff --git a/aptos/solidity/contracts-generator/src/bin/main.rs b/aptos/solidity/contracts-generator/src/bin/main.rs new file mode 100644 index 00000000..1772a658 --- /dev/null +++ b/aptos/solidity/contracts-generator/src/bin/main.rs @@ -0,0 +1,36 @@ +use std::path::PathBuf; +use anyhow::Result; +use log::info; +use sphinx_sdk::artifacts::try_install_plonk_bn254_artifacts; +use sphinx_sdk::utils::setup_logger; + +fn main() -> Result<()> { + + setup_logger(); + + let artifacts_dir = try_install_plonk_bn254_artifacts(); + + // Read all Solidity files from the artifacts_dir. + let sol_files = std::fs::read_dir(artifacts_dir)? + .filter_map(|entry| entry.ok()) + .filter(|entry| entry.path().extension().and_then(|ext| ext.to_str()) == Some("sol")) + .collect::>(); + + + // Write each Solidity file to the contracts directory. + let contracts_src_dir = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../contracts/src/plonk"); + + for sol_file in sol_files { + let sol_file_path = sol_file.path(); + let sol_file_contents = std::fs::read(&sol_file_path)?; + std::fs::write( + contracts_src_dir.join(sol_file_path.file_name().unwrap()), + sol_file_contents, + )?; + } + + info!("Contracts have been installed to: {:?}", contracts_src_dir); + + Ok(()) +} diff --git a/aptos/solidity/script/Cargo.toml b/aptos/solidity/fixture-generator/Cargo.toml similarity index 100% rename from aptos/solidity/script/Cargo.toml rename to aptos/solidity/fixture-generator/Cargo.toml diff --git a/aptos/solidity/fixture-generator/rust-toolchain b/aptos/solidity/fixture-generator/rust-toolchain new file mode 100644 index 00000000..989860f4 --- /dev/null +++ b/aptos/solidity/fixture-generator/rust-toolchain @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2024-04-17" +components = ["llvm-tools", "rustc-dev"] diff --git a/aptos/solidity/script/src/bin/main.rs b/aptos/solidity/fixture-generator/src/bin/main.rs similarity index 100% rename from aptos/solidity/script/src/bin/main.rs rename to aptos/solidity/fixture-generator/src/bin/main.rs From 6ad71c8fde863b0f99dff27259e7d7d806b8f529 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Tue, 18 Jun 2024 12:29:51 +0100 Subject: [PATCH 10/13] chore: Update Cargo.lock --- aptos/Cargo.lock | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index a35f4dbe..942ca058 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -3572,6 +3572,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "contracts-generator" +version = "0.1.0" +dependencies = [ + "anyhow", + "log", + "sphinx-sdk", +] + [[package]] name = "convert_case" version = "0.4.0" @@ -4795,6 +4804,20 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" +[[package]] +name = "fixture-generator" +version = "0.1.0" +dependencies = [ + "alloy-sol-types", + "aptos-lc", + "clap 4.5.7", + "serde", + "serde_json", + "sphinx-prover", + "sphinx-sdk", + "tracing", +] + [[package]] name = "flate2" version = "1.0.30" From 44109be76f59ddb1064b80937dff4d056d3ea4e9 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Tue, 18 Jun 2024 12:33:24 +0100 Subject: [PATCH 11/13] chore: Update Plonk contract according to 'e48c01ec' tag of Sphinx --- aptos/solidity/contracts/src/plonk/PlonkVerifier.sol | 4 ++-- aptos/solidity/contracts/src/plonk/SP1Verifier.sol | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/aptos/solidity/contracts/src/plonk/PlonkVerifier.sol b/aptos/solidity/contracts/src/plonk/PlonkVerifier.sol index 46db2823..6325b152 100644 --- a/aptos/solidity/contracts/src/plonk/PlonkVerifier.sol +++ b/aptos/solidity/contracts/src/plonk/PlonkVerifier.sol @@ -55,8 +55,8 @@ contract PlonkVerifier { uint256 private constant VK_QM_COM_Y = 5345542319716290612762422434959528912635502292626234402933058385633964347549; uint256 private constant VK_QO_COM_X = 18014979952384567403919168968189231706227326297377482789091451813310066870667; uint256 private constant VK_QO_COM_Y = 3708432301267678677786506706811217632085917639583680393547668223045541307479; - uint256 private constant VK_QK_COM_X = 957785607877057913661659123305671740810921873228019553579395036070012099380; - uint256 private constant VK_QK_COM_Y = 1821672264312643762123946960551585171783545126512758690400324408416365570300; + uint256 private constant VK_QK_COM_X = 1397183743556989746101646706314002138517176079913954974160741396952739184235; + uint256 private constant VK_QK_COM_Y = 9324587132558795126558533083169776309056283058741120271473617469690278308628; uint256 private constant VK_S1_COM_X = 15838704022916757697514152719576664453825928657894015885754578605399919756856; uint256 private constant VK_S1_COM_Y = 13387218978462600937448147418911963779105027838559913842027032523066810277894; diff --git a/aptos/solidity/contracts/src/plonk/SP1Verifier.sol b/aptos/solidity/contracts/src/plonk/SP1Verifier.sol index febc7586..04bb39ab 100644 --- a/aptos/solidity/contracts/src/plonk/SP1Verifier.sol +++ b/aptos/solidity/contracts/src/plonk/SP1Verifier.sol @@ -24,7 +24,6 @@ contract SP1Verifier is PlonkVerifier { /// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes. function verifyProof(bytes32 vkey, bytes memory publicValues, bytes memory proofBytes) public view { bytes32 publicValuesDigest = hashPublicValues(publicValues); - uint256[] memory inputs = new uint256[](2); inputs[0] = uint256(vkey); inputs[1] = uint256(publicValuesDigest); From c37602dbc725c6102cf7f07b369ac78046ccf295 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Tue, 18 Jun 2024 13:26:19 +0100 Subject: [PATCH 12/13] chore: Formatting --- aptos/light-client/src/epoch_change.rs | 19 ++++++++++++++----- .../contracts-generator/src/bin/main.rs | 4 +--- .../fixture-generator/src/bin/main.rs | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/aptos/light-client/src/epoch_change.rs b/aptos/light-client/src/epoch_change.rs index 1cad5287..743f2eda 100644 --- a/aptos/light-client/src/epoch_change.rs +++ b/aptos/light-client/src/epoch_change.rs @@ -13,8 +13,9 @@ struct EpochChangeOutput { } #[cfg(feature = "aptos")] -pub fn setup_assets() -> (Vec, Vec) { +pub fn setup_assets() -> (Vec, Vec, Vec) { use aptos_lc_core::aptos_test_utils::wrapper::AptosWrapper; + use aptos_lc_core::crypto::hash::CryptoHash; const NBR_VALIDATORS: usize = 130; const AVERAGE_SIGNERS_NBR: usize = 95; @@ -22,6 +23,14 @@ pub fn setup_assets() -> (Vec, Vec) { let mut aptos_wrapper = AptosWrapper::new(20000, NBR_VALIDATORS, AVERAGE_SIGNERS_NBR).unwrap(); let trusted_state = bcs::to_bytes(aptos_wrapper.trusted_state()).unwrap(); + let validator_verifier_hash = + match aptos_lc_core::types::trusted_state::TrustedState::from_bytes(&trusted_state).unwrap() + { + aptos_lc_core::types::trusted_state::TrustedState::EpochState { + epoch_state, .. + } => epoch_state.verifier().hash().to_vec(), + _ => panic!("Expected epoch change for current trusted state"), + }; let trusted_state_version = *aptos_wrapper.current_version(); aptos_wrapper.generate_traffic().unwrap(); @@ -32,7 +41,7 @@ pub fn setup_assets() -> (Vec, Vec) { let epoch_change_proof = bcs::to_bytes(state_proof.epoch_changes()).unwrap(); - (trusted_state, epoch_change_proof) + (trusted_state, epoch_change_proof, validator_verifier_hash) } pub fn generate_stdin(current_trusted_state: &[u8], epoch_change_proof: &[u8]) -> SphinxStdin { @@ -111,7 +120,7 @@ mod test { fn test_execute_epoch_change() { use std::time::Instant; - let (trusted_state, epoch_change_proof) = setup_assets(); + let (trusted_state, epoch_change_proof, _) = setup_assets(); println!("Starting execution of prove_epoch_change..."); let start = Instant::now(); @@ -126,7 +135,7 @@ mod test { use sphinx_sdk::ProverClient; use std::time::Instant; - let (trusted_state, epoch_change_proof) = setup_assets(); + let (trusted_state, epoch_change_proof, validator_verifier_hash) = setup_assets(); let client = ProverClient::new(); @@ -157,7 +166,7 @@ mod test { setup_logger(); - let (trusted_state, epoch_change_proof) = setup_assets(); + let (trusted_state, epoch_change_proof, _) = setup_assets(); let client = ProverClient::new(); let (pk, vk) = client.setup(aptos_programs::EPOCH_CHANGE_PROGRAM); diff --git a/aptos/solidity/contracts-generator/src/bin/main.rs b/aptos/solidity/contracts-generator/src/bin/main.rs index 1772a658..6ac6298a 100644 --- a/aptos/solidity/contracts-generator/src/bin/main.rs +++ b/aptos/solidity/contracts-generator/src/bin/main.rs @@ -1,11 +1,10 @@ -use std::path::PathBuf; use anyhow::Result; use log::info; use sphinx_sdk::artifacts::try_install_plonk_bn254_artifacts; use sphinx_sdk::utils::setup_logger; +use std::path::PathBuf; fn main() -> Result<()> { - setup_logger(); let artifacts_dir = try_install_plonk_bn254_artifacts(); @@ -16,7 +15,6 @@ fn main() -> Result<()> { .filter(|entry| entry.path().extension().and_then(|ext| ext.to_str()) == Some("sol")) .collect::>(); - // Write each Solidity file to the contracts directory. let contracts_src_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../contracts/src/plonk"); diff --git a/aptos/solidity/fixture-generator/src/bin/main.rs b/aptos/solidity/fixture-generator/src/bin/main.rs index 95f6ad07..0bb0b38d 100644 --- a/aptos/solidity/fixture-generator/src/bin/main.rs +++ b/aptos/solidity/fixture-generator/src/bin/main.rs @@ -44,7 +44,7 @@ fn main() { } "epoch_change" => { elf = EPOCH_CHANGE_ELF; - let (trusted_state, epoch_change_proof) = aptos_lc::epoch_change::setup_assets(); + let (trusted_state, epoch_change_proof, _) = aptos_lc::epoch_change::setup_assets(); stdin = aptos_lc::epoch_change::generate_stdin(&trusted_state, &epoch_change_proof); } _ => panic!("Unsupported program. Use: ['inclusion', 'epoch_change']"), From fd6416f66204898058d01adc65bfa5dd4903803c Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Tue, 18 Jun 2024 18:21:09 +0100 Subject: [PATCH 13/13] feat: Introduce downloading from our AWS private bucket --- aptos/Cargo.lock | 1480 +---------------- .../benchmarks/signature-verification-program | Bin 348652 -> 348820 bytes .../artifacts/epoch-change-program | Bin 362092 -> 362288 bytes .../artifacts/inclusion-program | Bin 374980 -> 375160 bytes aptos/solidity/contracts-generator/Cargo.toml | 3 + .../contracts-generator/src/bin/main.rs | 79 +- 6 files changed, 154 insertions(+), 1408 deletions(-) diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index 942ca058..09111c50 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -7,19 +7,10 @@ name = "Inflector" version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "lazy_static", "regex", ] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) [[package]] name = "abstract-domain-derive" @@ -138,153 +129,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= -name = "alloy" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-contract", - "alloy-core", - "alloy-eips", - "alloy-genesis", - "alloy-provider", - "alloy-rpc-client", - "alloy-serde", - "alloy-signer", - "alloy-signer-wallet", - "alloy-transport-http", - "reqwest 0.12.4", -] - -[[package]] -name = "alloy-consensus" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "serde", - "sha2 0.10.8", -] - -[[package]] -name = "alloy-contract" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-network", - "alloy-primitives", - "alloy-provider", - "alloy-rpc-types", - "alloy-sol-types", - "alloy-transport", - "futures", - "futures-util", - "thiserror", -] - -[[package]] -name = "alloy-core" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5af3faff14c12c8b11037e0a093dd157c3702becb8435577a2408534d0758315" -dependencies = [ - "alloy-dyn-abi", - "alloy-json-abi", - "alloy-primitives", - "alloy-sol-types", -] - -[[package]] -name = "alloy-dyn-abi" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6e6436a9530f25010d13653e206fab4c9feddacf21a54de8d7311b275bc56b" -dependencies = [ - "alloy-json-abi", - "alloy-primitives", - "alloy-sol-type-parser", - "alloy-sol-types", - "const-hex", - "itoa", - "serde", - "serde_json", - "winnow 0.6.13", -] - -[[package]] -name = "alloy-eips" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "c-kzg", - "once_cell", - "serde", -] - -[[package]] -name = "alloy-genesis" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "alloy-serde", - "serde", -] - -[[package]] -name = "alloy-json-abi" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeaccd50238126e3a0ff9387c7c568837726ad4f4e399b528ca88104d6c25ef" -dependencies = [ - "alloy-primitives", - "alloy-sol-type-parser", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-json-rpc" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "alloy-network" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-json-rpc", - "alloy-primitives", - "alloy-rpc-types", - "alloy-signer", - "async-trait", - "futures-utils-wasm", - "serde", - "thiserror", -] - -[[package]] ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "alloy-primitives" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -307,160 +151,16 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= -name = "alloy-provider" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-json-rpc", - "alloy-network", - "alloy-primitives", - "alloy-rpc-client", - "alloy-rpc-types", - "alloy-rpc-types-trace", - "alloy-transport", - "alloy-transport-http", - "async-stream", - "async-trait", - "auto_impl", - "dashmap", - "futures", - "lru 0.12.3", - "reqwest 0.12.4", - "serde_json", - "tokio", - "tracing", - "url", -] - -[[package]] ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "alloy-rlp" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" dependencies = [ -<<<<<<< HEAD -<<<<<<< HEAD -======= - "alloy-rlp-derive", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "arrayvec 0.7.4", "bytes", ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= -name = "alloy-rlp-derive" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8037e03c7f462a063f28daec9fda285a9a89da003c552f8637a80b9c8fd96241" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "alloy-rpc-client" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-json-rpc", - "alloy-transport", - "alloy-transport-http", - "futures", - "pin-project", - "reqwest 0.12.4", - "serde", - "serde_json", - "tokio", - "tokio-stream", - "tower", - "tracing", - "url", -] - -[[package]] -name = "alloy-rpc-types" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-genesis", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "alloy-sol-types", - "itertools 0.12.1", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "alloy-rpc-types-trace" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "alloy-rpc-types", - "alloy-serde", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-serde" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "serde", - "serde_json", -] - -[[package]] -name = "alloy-signer" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-primitives", - "async-trait", - "auto_impl", - "elliptic-curve", - "k256", - "thiserror", -] - -[[package]] -name = "alloy-signer-wallet" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-consensus", - "alloy-network", - "alloy-primitives", - "alloy-signer", - "async-trait", - "k256", - "rand 0.8.5", - "thiserror", -] - -[[package]] ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "alloy-sol-macro" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -480,13 +180,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" dependencies = [ -<<<<<<< HEAD -<<<<<<< HEAD -======= - "alloy-json-abi", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "alloy-sol-macro-input", "const-hex", "heck 0.5.0", @@ -505,57 +198,21 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" dependencies = [ -<<<<<<< HEAD -<<<<<<< HEAD -======= - "alloy-json-abi", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "const-hex", "dunce", "heck 0.5.0", "proc-macro2", "quote", -<<<<<<< HEAD -<<<<<<< HEAD -======= - "serde_json", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "syn 2.0.66", "syn-solidity", ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= -name = "alloy-sol-type-parser" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa2fbd22d353d8685bd9fee11ba2d8b5c3b1d11e56adb3265fcf1f32bfdf404" -dependencies = [ - "winnow 0.6.13", -] - -[[package]] ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "alloy-sol-types" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" dependencies = [ -<<<<<<< HEAD -<<<<<<< HEAD -======= - "alloy-json-abi", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "alloy-primitives", "alloy-sol-macro", "const-hex", @@ -563,43 +220,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= -name = "alloy-transport" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-json-rpc", - "base64 0.22.1", - "futures-util", - "futures-utils-wasm", - "serde", - "serde_json", - "thiserror", - "tokio", - "tower", - "url", - "wasm-bindgen-futures", -] - -[[package]] -name = "alloy-transport-http" -version = "0.1.0" -source = "git+https://github.com/alloy-rs/alloy?rev=bfd0fda#bfd0fda492e560c3463d521958793c81bbeadfc1" -dependencies = [ - "alloy-json-rpc", - "alloy-transport", - "reqwest 0.12.4", - "serde_json", - "tower", - "url", -] - -[[package]] ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "android-tzdata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -994,15 +614,7 @@ dependencies = [ "either", "hex", "itertools 0.12.1", -<<<<<<< HEAD -<<<<<<< HEAD "lru", -======= - "lru 0.7.8", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= - "lru", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", "num-derive", "once_cell", @@ -1228,15 +840,7 @@ dependencies = [ "itertools 0.12.1", "libsecp256k1", "log", -<<<<<<< HEAD -<<<<<<< HEAD - "lru", -======= - "lru 0.7.8", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "lru", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "merlin", "move-binary-format", "move-cli", @@ -1459,7 +1063,7 @@ dependencies = [ "proptest", "rand 0.7.3", "rand_core 0.5.1", - "reqwest 0.12.4", + "reqwest 0.12.5", "serde", "serde_bytes", "sha2 0.9.9", @@ -2475,10 +2079,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "async_io_stream" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2490,11 +2090,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2700,21 +2295,12 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "bech32" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "bellpepper" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3007,10 +2593,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "bs58" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3021,11 +2603,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "bstr" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3117,26 +2694,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= -name = "c-kzg" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" -dependencies = [ - "blst", - "cc", - "glob", - "hex", - "libc", - "serde", -] - -[[package]] ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "c_linked_list" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3417,10 +2974,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "coins-bip32" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3473,11 +3026,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "colorchoice" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3577,8 +3125,11 @@ name = "contracts-generator" version = "0.1.0" dependencies = [ "anyhow", + "home", "log", + "sphinx-prover", "sphinx-sdk", + "tempfile", ] [[package]] @@ -3914,15 +3465,14 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.1.2" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "fiat-crypto", - "platforms", "rustc_version 0.4.0", "subtle", "zeroize", @@ -4158,17 +3708,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "displaydoc" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "doc-comment" version = "0.3.3" @@ -4286,10 +3825,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "enr" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4308,11 +3843,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "enum_dispatch" version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4391,10 +3921,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "eth-keystore" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4659,21 +4185,12 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "ethnum" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "eyre" version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4684,11 +4201,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "fail" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4935,10 +4447,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "futures-locks" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4949,11 +4457,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "futures-macro" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4977,10 +4480,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "futures-timer" version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4991,11 +4490,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "futures-util" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5014,18 +4508,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= -name = "futures-utils-wasm" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" - -[[package]] ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "fxhash" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5188,10 +4670,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "gloo-timers" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5204,11 +4682,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "goldenfile" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5365,10 +4838,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "hashers" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5378,11 +4847,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "headers" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5606,9 +5070,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.3" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0e7a4dd27b9476dc40cb050d3632d3bba3a70ddbff012285f7f8559a1e7e545" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" @@ -5685,6 +5149,23 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.3.1", + "hyper-util", + "rustls 0.23.10", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", +] + [[package]] name = "hyper-timeout" version = "0.4.1" @@ -5769,124 +5250,6 @@ dependencies = [ "cc", ] -[[package]] -name = "icu_collections" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locid" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - -[[package]] -name = "icu_normalizer" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" - -[[package]] -name = "icu_properties" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8ac670d7422d7f76b32e17a5db556510825b29ec9154f235977c9caba61036" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" - -[[package]] -name = "icu_provider" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -5905,14 +5268,12 @@ dependencies = [ [[package]] name = "idna" -version = "1.0.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ - "icu_normalizer", - "icu_properties", - "smallvec", - "utf8_iter", + "unicode-bidi", + "unicode-normalization", ] [[package]] @@ -5964,10 +5325,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "impl-rlp" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5977,11 +5334,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "impl-serde" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5991,10 +5343,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "impl-serde" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6004,11 +5352,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "impl-trait-for-tuples" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6044,21 +5387,12 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "indenter" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "indexmap" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6506,12 +5840,6 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" -[[package]] -name = "litemap" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" - [[package]] name = "lock_api" version = "0.4.12" @@ -6541,21 +5869,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= -name = "lru" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" -dependencies = [ - "hashbrown 0.14.5", -] - -[[package]] ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "lz4-sys" version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -6644,9 +5957,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] @@ -7098,15 +6411,7 @@ dependencies = [ "sha2 0.9.9", "tempfile", "termcolor", -<<<<<<< HEAD -<<<<<<< HEAD - "toml 0.7.8", -======= - "toml", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "toml 0.7.8", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "walkdir", "whoami", ] @@ -7135,15 +6440,7 @@ dependencies = [ "once_cell", "serde", "simplelog", -<<<<<<< HEAD -<<<<<<< HEAD "toml 0.7.8", -======= - "toml", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= - "toml 0.7.8", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -7309,15 +6606,7 @@ dependencies = [ "fail", "hashbrown 0.14.5", "lazy_static", -<<<<<<< HEAD -<<<<<<< HEAD - "lru", -======= - "lru 0.7.8", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "lru", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "move-binary-format", "move-bytecode-verifier", "move-core-types 0.0.4 (git+https://github.com/aptos-labs/aptos-core/?tag=aptos-node-v1.14.0)", @@ -7656,10 +6945,6 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "num_enum_derive 0.5.11", ] @@ -7670,12 +6955,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" dependencies = [ "num_enum_derive 0.7.2", -<<<<<<< HEAD -======= - "num_enum_derive", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -7691,27 +6970,18 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "num_enum_derive" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 2.0.2", "proc-macro2", "quote", "syn 2.0.66", ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "num_threads" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7765,10 +7035,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "open-fastrlp" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7794,11 +7060,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "openssl" version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7886,15 +7147,7 @@ dependencies = [ [[package]] name = "p3-air" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-field", "p3-matrix", @@ -7903,15 +7156,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "num-bigint 0.4.5", "p3-field", @@ -7925,15 +7170,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "blake3", "p3-symmetric", @@ -7942,15 +7179,7 @@ dependencies = [ [[package]] name = "p3-bn254-fr" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "ff 0.13.0", "num-bigint 0.4.5", @@ -7964,15 +7193,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-field", "p3-maybe-rayon", @@ -7984,15 +7205,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -8005,15 +7218,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-field", "p3-matrix", @@ -8025,15 +7230,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "num-bigint 0.4.5", @@ -8046,15 +7243,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -8072,15 +7261,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-field", "p3-matrix", @@ -8090,15 +7271,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-symmetric", "tiny-keccak", @@ -8107,15 +7280,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "p3-air", "p3-field", @@ -8128,15 +7293,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-field", @@ -8150,15 +7307,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "rayon", ] @@ -8166,15 +7315,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-dft", @@ -8188,15 +7329,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-commit", @@ -8212,15 +7345,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "gcd", "p3-field", @@ -8232,15 +7357,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-field", @@ -8250,15 +7367,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-air", @@ -8276,15 +7385,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" -======= -source = "git+https://github.com/lurk-lab/Plonky3.git?branch=sp1-new#da0489b75025ec17f1100952694d8b7879c2b43e" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/Plonky3/Plonky3.git?rev=3b5265f9d5af36534a46caebf0617595cfb42c5a#3b5265f9d5af36534a46caebf0617595cfb42c5a" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "serde", ] @@ -8468,10 +7569,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "pbkdf2" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8491,11 +7588,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "peeking_take_while" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8581,10 +7673,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "pharos" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8595,11 +7683,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "phf" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -8696,12 +7779,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" -[[package]] -name = "platforms" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" - [[package]] name = "plotters" version = "0.3.6" @@ -8903,15 +7980,7 @@ checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" dependencies = [ "fixed-hash 0.7.0", "impl-codec 0.5.1", -<<<<<<< HEAD -<<<<<<< HEAD - "impl-serde 0.3.2", -======= - "impl-serde", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "impl-serde 0.3.2", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "uint", ] @@ -8923,18 +7992,9 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash 0.8.0", "impl-codec 0.6.0", -<<<<<<< HEAD -<<<<<<< HEAD - "impl-rlp", - "impl-serde 0.4.0", - "scale-info", -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "impl-rlp", "impl-serde 0.4.0", "scale-info", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "uint", ] @@ -9044,7 +8104,7 @@ dependencies = [ "clap 4.5.7", "env_logger 0.11.3", "log", - "reqwest 0.12.4", + "reqwest 0.12.5", "serde", "serde_json", "sphinx-sdk", @@ -9477,9 +8537,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" dependencies = [ "base64 0.22.1", "bytes", @@ -9492,6 +8552,7 @@ dependencies = [ "http-body 1.0.0", "http-body-util", "hyper 1.3.1", + "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", "ipnet", @@ -9506,7 +8567,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 0.1.2", + "sync_wrapper 1.0.1", "system-configuration", "tokio", "tokio-native-tls", @@ -9529,7 +8590,7 @@ dependencies = [ "anyhow", "async-trait", "http 1.1.0", - "reqwest 0.12.4", + "reqwest 0.12.5", "serde", "thiserror", "tower-service", @@ -9609,22 +8670,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", -<<<<<<< HEAD -<<<<<<< HEAD "rlp-derive", -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= - "rlp-derive", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "rustc-hex", ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "rlp-derive" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9636,11 +8686,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "rocksdb" version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9656,15 +8701,7 @@ version = "0.1.0" source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" dependencies = [ "downcast-rs", -<<<<<<< HEAD -<<<<<<< HEAD - "num_enum 0.5.11", -======= - "num_enum", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "num_enum 0.5.11", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "paste", ] @@ -9807,6 +8844,19 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki 0.102.4", + "subtle", + "zeroize", +] + [[package]] name = "rustls-native-certs" version = "0.7.0" @@ -9891,10 +8941,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "salsa20" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9904,11 +8950,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9918,10 +8959,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "scale-info" version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9946,11 +8983,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "scc" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9975,10 +9007,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "scrypt" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -9991,11 +9019,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "sct" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10076,10 +9099,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "send_wrapper" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10092,11 +9111,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "serde" version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -10343,7 +9357,7 @@ dependencies = [ [[package]] name = "sha2" version = "0.10.8" -source = "git+https://github.com/sp1-patches/RustCrypto-hashes?branch=patch-v0.10.8#3d692aa90b91513886d757d01f8fc2d51c0ec0d7" +source = "git+https://github.com/sp1-patches/RustCrypto-hashes?branch=patch-v0.10.8#1f224388fdede7cef649bce0d63876d1a9e3f515" dependencies = [ "cfg-if", "cpufeatures", @@ -10608,15 +9622,7 @@ dependencies = [ [[package]] name = "sphinx-core" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "anyhow", "arrayref", @@ -10624,7 +9630,7 @@ dependencies = [ "blake3", "bls12_381 0.8.0", "cfg-if", - "curve25519-dalek 4.1.2", + "curve25519-dalek 4.1.3", "elf", "elliptic-curve", "hex", @@ -10675,15 +9681,7 @@ dependencies = [ [[package]] name = "sphinx-derive" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "proc-macro2", "quote", @@ -10693,15 +9691,7 @@ dependencies = [ [[package]] name = "sphinx-helper" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "cargo_metadata 0.18.1", "chrono", @@ -10710,15 +9700,7 @@ dependencies = [ [[package]] name = "sphinx-primitives" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "lazy_static", @@ -10731,15 +9713,7 @@ dependencies = [ [[package]] name = "sphinx-prover" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "anyhow", "backtrace", @@ -10757,7 +9731,7 @@ dependencies = [ "p3-commit", "p3-field", "rayon", - "reqwest 0.12.4", + "reqwest 0.12.5", "serde", "serde_json", "serial_test", @@ -10770,14 +9744,7 @@ dependencies = [ "sphinx-recursion-core", "sphinx-recursion-gnark-ffi", "sphinx-recursion-program", -<<<<<<< HEAD -<<<<<<< HEAD - "subtle-encoding", -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "subtle-encoding", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "tempfile", "thiserror", "tokio", @@ -10788,15 +9755,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-circuit" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "bincode", "itertools 0.12.1", @@ -10819,15 +9778,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-compiler" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "backtrace", "itertools 0.12.1", @@ -10851,15 +9802,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-core" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "arrayref", "backtrace", @@ -10892,15 +9835,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-derive" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "proc-macro2", "quote", @@ -10910,23 +9845,10 @@ dependencies = [ [[package]] name = "sphinx-recursion-gnark-ffi" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -dependencies = [ - "bindgen 0.69.4", - "cfg-if", -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" -dependencies = [ - "bindgen 0.69.4", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "bindgen 0.69.4", "cfg-if", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "log", "num-bigint 0.4.5", "p3-baby-bear", @@ -10941,15 +9863,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-program" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "itertools 0.12.1", "p3-air", @@ -10976,41 +9890,18 @@ dependencies = [ [[package]] name = "sphinx-sdk" version = "0.1.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" -dependencies = [ - "alloy-sol-types", -======= -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=dev#785d0e01c92133152fe534bb181f2f80ef180d78" -dependencies = [ - "alloy", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" dependencies = [ "alloy-sol-types", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "anyhow", "async-trait", "axum 0.7.5", "bincode", -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "cfg-if", "ethers", "futures", "hex", "home", -<<<<<<< HEAD -======= - "futures", - "hex", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "indicatif", "log", "num-bigint 0.4.5", @@ -11018,23 +9909,15 @@ dependencies = [ "p3-field", "p3-matrix", "prost", - "reqwest 0.12.4", + "reqwest 0.12.5", "reqwest-middleware", "serde", "serde_json", "sha2 0.10.8", "sphinx-core", "sphinx-prover", -<<<<<<< HEAD -<<<<<<< HEAD - "strum 0.26.2", - "strum_macros 0.26.4", -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "strum 0.26.2", "strum_macros 0.26.4", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "tempfile", "tokio", "tracing", @@ -11154,18 +10037,9 @@ name = "strum" version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" -<<<<<<< HEAD -<<<<<<< HEAD -dependencies = [ - "strum_macros 0.26.4", -] -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= dependencies = [ "strum_macros 0.26.4", ] ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) [[package]] name = "strum_macros" @@ -11213,10 +10087,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "subtle-encoding" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11226,11 +10096,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "subtle-ng" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11282,17 +10147,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "sysinfo" version = "0.28.4" @@ -11495,15 +10349,7 @@ dependencies = [ "anyhow", "hmac 0.8.1", "once_cell", -<<<<<<< HEAD -<<<<<<< HEAD - "pbkdf2 0.4.0", -======= - "pbkdf2", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "pbkdf2 0.4.0", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) "rand 0.7.3", "rustc-hash", "sha2 0.9.9", @@ -11516,22 +10362,12 @@ dependencies = [ [[package]] name = "tiny-keccak" version = "2.0.2" -source = "git+https://github.com/sp1-patches/tiny-keccak?branch=patch-v2.0.2#aa70bacdfece9dc7ea4936f808887c43a09b3b0a" +source = "git+https://github.com/sp1-patches/tiny-keccak?branch=patch-v2.0.2#bf0b28f63510a90c7b6c21ac6ff461c93ecd2331" dependencies = [ "cfg-if", "crunchy", ] -[[package]] -name = "tinystr" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", - "zerovec", -] - [[package]] name = "tinytemplate" version = "1.2.1" @@ -11628,6 +10464,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.10", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.15" @@ -11637,13 +10484,6 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", -<<<<<<< HEAD -<<<<<<< HEAD -======= - "tokio-util", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -11672,10 +10512,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "toml" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11688,11 +10524,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "toml_datetime" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11711,15 +10542,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", -<<<<<<< HEAD -<<<<<<< HEAD "winnow", -======= - "winnow 0.5.40", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= - "winnow", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -11729,22 +10552,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ "indexmap 2.2.6", -<<<<<<< HEAD -<<<<<<< HEAD - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -======= - "toml_datetime", - "winnow 0.5.40", ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= "serde", "serde_spanned", "toml_datetime", "winnow", ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) ] [[package]] @@ -11872,10 +10683,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "tracing-futures" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11886,11 +10693,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "tracing-log" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11954,9 +10756,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b2cb4fbb9995eeb36ac86fadf24031ccd58f99d6b4b2d7b911db70bddb80d90" +checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" dependencies = [ "serde", "stable_deref_trait", @@ -11984,15 +10786,7 @@ dependencies = [ [[package]] name = "twirp" version = "0.3.0" -<<<<<<< HEAD -<<<<<<< HEAD -source = "git+https://github.com/github/twirp-rs.git?rev=c85f31f9c54957374e7dcb3534fc52cff0aa2dc5#c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" -======= -source = "git+https://github.com/github/twirp-rs.git#e18a3cfb30853250213d4bdc486a9fb8f5ac9bd4" ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= source = "git+https://github.com/github/twirp-rs.git?rev=c85f31f9c54957374e7dcb3534fc52cff0aa2dc5#c85f31f9c54957374e7dcb3534fc52cff0aa2dc5" ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) dependencies = [ "async-trait", "axum 0.7.5", @@ -12002,7 +10796,7 @@ dependencies = [ "http-body-util", "hyper 1.3.1", "prost", - "reqwest 0.12.4", + "reqwest 0.12.5", "serde", "serde_json", "thiserror", @@ -12259,12 +11053,12 @@ dependencies = [ [[package]] name = "url" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", - "idna 1.0.0", + "idna 0.5.0", "percent-encoding", "serde", ] @@ -12285,18 +11079,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - [[package]] name = "utf8parse" version = "0.2.2" @@ -12304,10 +11086,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "uuid" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12318,11 +11096,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12809,21 +11582,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= -name = "winnow" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" -dependencies = [ - "memchr", -] - -[[package]] ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "winreg" version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12844,22 +11602,6 @@ dependencies = [ ] [[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - -[[package]] -name = "writeable" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" - -[[package]] -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "ws_stream_wasm" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12879,11 +11621,6 @@ dependencies = [ ] [[package]] -<<<<<<< HEAD -======= ->>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) -======= ->>>>>>> 0e002e1 (docs: proof server rust doc (#20)) name = "wyz" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12923,30 +11660,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" -[[package]] -name = "yoke" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", - "synstructure", -] - [[package]] name = "zerocopy" version = "0.7.34" @@ -12967,27 +11680,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "zerofrom" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", - "synstructure", -] - [[package]] name = "zeroize" version = "1.8.1" @@ -13008,28 +11700,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "zerovec" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "zkhash" version = "0.2.0" @@ -13077,9 +11747,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.10+zstd.1.5.6" +version = "2.0.11+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" dependencies = [ "cc", "pkg-config", diff --git a/aptos/aptos-programs/artifacts/benchmarks/signature-verification-program b/aptos/aptos-programs/artifacts/benchmarks/signature-verification-program index 805ecf3af2abfdfdb82d14e3c40522d1407b9088..b387e0127f13804ddd277dfba11843625911af79 100755 GIT binary patch delta 92140 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 ZEcfGJU0u$fy#kZ%9p#!*&UXO${{a&?`w0L5 delta 92240 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 diff --git a/aptos/aptos-programs/artifacts/epoch-change-program b/aptos/aptos-programs/artifacts/epoch-change-program index 4ca93e8703056218de7843672a4fcaa9514fb024..1c680a9389a192adc8b0b1fd12edcbaf45554a1e 100755 GIT binary patch delta 94429 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 diff --git a/aptos/aptos-programs/artifacts/inclusion-program b/aptos/aptos-programs/artifacts/inclusion-program index fd611485a3a5859c0d736cf7c63d0b31cb9e93b3..cd2cbaf536678b597c8afbc8bf1fa0b6b5369223 100755 GIT binary patch delta 99209 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 delta 98889 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 diff --git a/aptos/solidity/contracts-generator/Cargo.toml b/aptos/solidity/contracts-generator/Cargo.toml index fa354dfb..55a05a64 100644 --- a/aptos/solidity/contracts-generator/Cargo.toml +++ b/aptos/solidity/contracts-generator/Cargo.toml @@ -10,4 +10,7 @@ path = "src/bin/main.rs" [dependencies] anyhow = "1.0.86" log = "0.4.21" +home = "0.5.9" +tempfile = "3.9.0" sphinx-sdk = { workspace = true } +sphinx-prover = { workspace = true } \ No newline at end of file diff --git a/aptos/solidity/contracts-generator/src/bin/main.rs b/aptos/solidity/contracts-generator/src/bin/main.rs index 6ac6298a..8ecec9c3 100644 --- a/aptos/solidity/contracts-generator/src/bin/main.rs +++ b/aptos/solidity/contracts-generator/src/bin/main.rs @@ -1,13 +1,20 @@ use anyhow::Result; +use home::home_dir; use log::info; -use sphinx_sdk::artifacts::try_install_plonk_bn254_artifacts; use sphinx_sdk::utils::setup_logger; +use std::fs::create_dir_all; use std::path::PathBuf; +use std::process::Command; fn main() -> Result<()> { setup_logger(); - let artifacts_dir = try_install_plonk_bn254_artifacts(); + // This should be replaced with + // + // `sphinx_sdk::artifacts::try_install_plonk_bn254_artifacts` + // + // once we can make our AWS bucket public + let artifacts_dir = download_artifacts_from_private_aws(); // Read all Solidity files from the artifacts_dir. let sol_files = std::fs::read_dir(artifacts_dir)? @@ -28,7 +35,73 @@ fn main() -> Result<()> { )?; } - info!("Contracts have been installed to: {:?}", contracts_src_dir); + info!( + "[contracts-generator] Contracts have been installed to: {:?}", + contracts_src_dir + ); Ok(()) } + +fn plonk_bn254_artifacts_dir() -> PathBuf { + home_dir() + .unwrap() + .join(".sp1") + .join("circuits") + .join("plonk_bn254") + .join(sphinx_prover::install::PLONK_BN254_ARTIFACTS_COMMIT) +} + +fn download_artifacts_from_private_aws() -> PathBuf { + let build_dir = plonk_bn254_artifacts_dir(); + if build_dir.exists() { + info!( + "[contracts-generator] plonk bn254 artifacts already seem to exist at {}. if you want to re-download them, delete the directory", + build_dir.display() + ); + } else { + info!( + "[contracts-generator] plonk bn254 artifacts for commit {} do not exist at {}. downloading...", + sphinx_prover::install::PLONK_BN254_ARTIFACTS_COMMIT, + build_dir.display() + ); + + create_dir_all(build_dir.clone()).unwrap(); + + let archive_path = format!("{}.tar.gz", build_dir.to_str().unwrap()); + let mut res = Command::new("aws") + .args([ + "s3", + "cp", + format!( + "s3://sphinx-plonk-params/{}.tar.gz", + sphinx_prover::install::PLONK_BN254_ARTIFACTS_COMMIT + ) + .as_str(), + archive_path.as_str(), + ]) + .spawn() + .expect("couldn't run `aws` command. Probably it is not installed"); + res.wait().unwrap(); + + // Extract the tarball to the build directory. + let mut res = Command::new("tar") + .args([ + "-Pxzf", + archive_path.as_str(), + "-C", + build_dir.to_str().unwrap(), + ]) + .spawn() + .expect("failed to extract tarball"); + res.wait().unwrap(); + + // Remove archive + let mut res = Command::new("rm") + .args(["-rf", archive_path.as_str()]) + .spawn() + .expect("failed to remove the archive"); + res.wait().unwrap(); + } + build_dir +}