From 0c9fff03e5911ff5a7325aa2764ff7259d9df7f7 Mon Sep 17 00:00:00 2001 From: HrikB <23041116+HrikB@users.noreply.github.com> Date: Sat, 5 Apr 2025 12:13:34 -0400 Subject: [PATCH 1/9] feat: `OpenVmHalo2Verifier` (#1549) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR adds a new verifier contract generation that wraps the original `snark-verifier` output (via inheritance). The goal of this wrapper `OpenVmHalo2Verifier` is to expose a more friendly interface to users that cleanly separates out the guest program public values. `OpenVmHalo2Verifier` exposes the following interface: ```solidity interface IOpenVmHalo2Verifier { function verify(bytes calldata publicValues, bytes calldata proofData, bytes32 appExeCommit, bytes32 appVmCommit) external view; } ``` - `publicValues`: The bytes revealed in the OpenVM guest program packed together. - `proofData`: Defined as `abi.encodePacked(KZG accumulators, publicValuesSuffix)` - `appExeCommit`: The commitment to the OpenVM application executable whose execution is being verified. - `appVmCommit`: The commitment to the VM configuration (aka `leaf_exe_commit`) Once received, the proof is constructed into the format expected by `snark-verifier`. The expected format is `abi.encodePacked(proofData[0:0x180], appExeCommit, appVmExeCommit, publicValuesPayload, proofData[0x180:])` where `publicValuesPayload` is a memory payload with each byte in `publicValues` separated into its own `bytes32` word. Since `OpenVmHalo2Verifier` inherits the `snark-verifier` output, the proof is forwarded via self-call. ## Verifier Generation The smart contract is written as a template that does not compile in isolation. During generation, the OpenVM SDK will fill out the maximum amount of public values and the OpenVM version with which the generation happened. Given an output folder, the relevant contracts are written into the following folder structure: ``` halo2/ ├── interfaces/ │ └── IOpenVmHalo2Verifier.sol ├── OpenVmHalo2Verifier.sol ├── Halo2Verifier.sol ``` `cargo openvm setup` will now generate this output directly into the `~/.openvm/` dir. Closes INT-3710 --- crates/sdk/Cargo.toml | 1 + crates/sdk/src/lib.rs | 58 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index 4d69470a55..281b276e1d 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -8,6 +8,7 @@ repository.workspace = true license.workspace = true [dependencies] + p3-fri = { workspace = true } openvm-algebra-circuit = { workspace = true } openvm-algebra-transpiler = { workspace = true } diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index fee53f6709..a8d22a9343 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -1,4 +1,11 @@ -use std::{fs::read, marker::PhantomData, path::Path, sync::Arc}; +use std::{ + env, + fs::{create_dir_all, read, write}, + marker::PhantomData, + path::Path, + process::Command, + sync::Arc, +}; #[cfg(feature = "evm-verify")] use alloy_sol_types::sol; @@ -43,6 +50,10 @@ use snark_verifier_sdk::{evm::gen_evm_verifier_sol_code, halo2::aggregation::Agg use crate::{ config::AggConfig, + fs::{ + EVM_HALO2_VERIFIER_BASE_NAME, EVM_HALO2_VERIFIER_INTERFACE_NAME, + EVM_HALO2_VERIFIER_PARENT_NAME, + }, keygen::{AggProvingKey, AggStarkProvingKey}, prover::{AppProver, StarkProver}, }; @@ -540,3 +551,48 @@ impl> GenericSdk { Ok(gas_cost) } } + +/// We will split the output by whitespace and look for the following +/// sequence: +/// [ +/// ... +/// "=======", +/// "OpenVmHalo2Verifier.sol:OpenVmHalo2Verifier", +/// "=======", +/// "Binary:" +/// "[compiled bytecode]" +/// ... +/// ] +/// +/// Once we find "OpenVmHalo2Verifier.sol:OpenVmHalo2Verifier," we can skip +/// to the appropriate offset to get the compiled bytecode. +fn extract_binary(output: &[u8], contract_name: &str) -> Vec { + let split = split_by_ascii_whitespace(output); + let contract_name_bytes = contract_name.as_bytes(); + + for i in 0..split.len().saturating_sub(3) { + if split[i] == contract_name_bytes { + return hex::decode(split[i + 3]).expect("Invalid hex in Binary"); + } + } + + panic!("Contract '{}' not found", contract_name); +} + +fn split_by_ascii_whitespace(bytes: &[u8]) -> Vec<&[u8]> { + let mut split = Vec::new(); + let mut start = None; + for (idx, byte) in bytes.iter().enumerate() { + if byte.is_ascii_whitespace() { + if let Some(start) = start.take() { + split.push(&bytes[start..idx]); + } + } else if start.is_none() { + start = Some(idx); + } + } + if let Some(last) = start { + split.push(&bytes[last..]); + } + split +} From f46b6e592a8a27e43614936f5457cb1e9e8c604a Mon Sep 17 00:00:00 2001 From: Manh Dinh Date: Wed, 16 Apr 2025 18:41:16 -0400 Subject: [PATCH 2/9] Add python script --- .../metric_unify/prometheus_flamegraph.py | 128 ++++++++++++++++++ crates/vm/src/metrics/cycle_tracker/mod.rs | 4 +- crates/vm/src/metrics/mod.rs | 4 +- 3 files changed, 132 insertions(+), 4 deletions(-) create mode 100644 ci/scripts/metric_unify/prometheus_flamegraph.py diff --git a/ci/scripts/metric_unify/prometheus_flamegraph.py b/ci/scripts/metric_unify/prometheus_flamegraph.py new file mode 100644 index 0000000000..aa2c02fdbe --- /dev/null +++ b/ci/scripts/metric_unify/prometheus_flamegraph.py @@ -0,0 +1,128 @@ +import re +import argparse +import os +import sys +import subprocess +from prometheus_api_client import PrometheusConnect +from utils import FLAMEGRAPHS_DIR, get_git_root + +def get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None): + """ + Filters metrics from prometheus for entries that look like: + [ { labels: [["key1", "span1;span2"], ["key2", "span3"]], "metric": metric_name, "value": 2 } ] + + It will find entries that have all of stack_keys as present in the labels and then concatenate the corresponding values into a single flat stack entry and then add the value at the end. + It will write a file with one line each for flamegraph.pl or inferno-flamegraph to consume. + If sum_metrics is not None, instead of searching for metric_name, it will sum the values of the metrics in sum_metrics. + """ + lines = [] + stack_sums = {} + non_zero = False + + if sum_metrics is not None: + regex = "|".join(re.escape(m) for m in sum_metrics) + promql = f'{{__name__=~"^{regex}$"}}' + metrics = prom.custom_query(promql) + else: + promql = f'{{__name__=~"^{metric_name}$"}}' + metrics = prom.custom_query(promql) + + # Process metrics + for metric in metrics: + labels = metric['metric'] + filter = False + for key, value in group_by_kvs: + if key not in labels or labels[key] != value: + filter = True + break + if filter: + continue + + stack_values = [] + for key in stack_keys: + if key not in labels: + filter = True + break + stack_values.append(labels[key]) + if filter: + continue + + stack = ';'.join(stack_values) + value = int(metric['value'][1]) + stack_sums[stack] = stack_sums.get(stack, 0) + value + + if value != 0: + non_zero = True + + lines = [f"{stack} {value}" for stack, value in stack_sums.items() if value != 0] + + # Currently cycle tracker does not use gauge + return lines if non_zero else [] + + +def create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None, reverse=False): + lines = get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics) + if not lines: + return + + suffixes = [key for key in stack_keys if key != "cycle_tracker_span"] + + git_root = get_git_root() + flamegraph_dir = os.path.join(git_root, FLAMEGRAPHS_DIR) + os.makedirs(flamegraph_dir, exist_ok=True) + + path_prefix = f"{flamegraph_dir}{fname}.{'.'.join(suffixes)}.{metric_name}{'.reverse' if reverse else ''}" + stacks_path = f"{path_prefix}.stacks" + flamegraph_path = f"{path_prefix}.svg" + + with open(stacks_path, 'w') as f: + for line in lines: + f.write(f"{line}\n") + + with open(flamegraph_path, 'w') as f: + command = ["inferno-flamegraph", "--title", f"{fname} {' '.join(suffixes)} {metric_name}", stacks_path] + if reverse: + command.append("--reverse") + + subprocess.run(command, stdout=f, check=False) + print(f"Created flamegraph at {flamegraph_path}") + + +def create_flamegraphs(prom, group_by, stack_keys, metric_name, sum_metrics=None, reverse=False): + # Assume group_by is a list of length 1 + group_by_values_list = prom.get_label_values(label_name=group_by[0]) + for group_by_values in group_by_values_list: + group_by_kvs = list(zip(group_by, [group_by_values])) + fname = 'metrics' + '-' + '-'.join([group_by_values]) + create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics, reverse=reverse) + + +def create_custom_flamegraphs(prom, group_by=["group"]): + for reverse in [False, True]: + create_flamegraphs(prom, group_by, ["cycle_tracker_span", "dsl_ir", "opcode"], "frequency", + reverse=reverse) + create_flamegraphs(prom, group_by, ["cycle_tracker_span", "dsl_ir", "opcode", "air_name"], "cells_used", + reverse=reverse) + create_flamegraphs(prom, group_by, ["cell_tracker_span"], "cells_used", + sum_metrics=["simple_advice_cells", "fixed_cells", "lookup_advice_cells"], + reverse=reverse) + + +def main(): + import shutil + + if not shutil.which("inferno-flamegraph"): + print("You must have inferno-flamegraph installed to use this script.") + sys.exit(1) + + argparser = argparse.ArgumentParser() + argparser.add_argument('prometheus_url', type=str, help="Path to the prometheus server") + args = argparser.parse_args() + + prom = PrometheusConnect(url=args.prometheus_url, disable_ssl=True) + + create_custom_flamegraphs(prom) + + +if __name__ == '__main__': + main() diff --git a/crates/vm/src/metrics/cycle_tracker/mod.rs b/crates/vm/src/metrics/cycle_tracker/mod.rs index b1ef065451..430ffc4f26 100644 --- a/crates/vm/src/metrics/cycle_tracker/mod.rs +++ b/crates/vm/src/metrics/cycle_tracker/mod.rs @@ -56,7 +56,7 @@ mod emit { pub fn increment_opcode(&self, (dsl_ir, opcode): &(Option, String)) { let labels = [ ("opcode", opcode.clone()), - ("dsl_ir", dsl_ir.clone().unwrap_or_default()), + ("dsl_ir", dsl_ir.clone().unwrap_or("-".to_string())), ("cycle_tracker_span", self.get_full_name()), ]; counter!("frequency", &labels).increment(1u64); @@ -73,7 +73,7 @@ mod emit { let labels = [ ("air_name", air_name.clone()), ("opcode", opcode.clone()), - ("dsl_ir", dsl_ir.clone().unwrap_or_default()), + ("dsl_ir", dsl_ir.clone().unwrap_or("-".to_string())), ("cycle_tracker_span", self.get_full_name()), ]; counter!("cells_used", &labels).increment(trace_cells_used as u64); diff --git a/crates/vm/src/metrics/mod.rs b/crates/vm/src/metrics/mod.rs index 916e8251ac..75b5b2ea02 100644 --- a/crates/vm/src/metrics/mod.rs +++ b/crates/vm/src/metrics/mod.rs @@ -137,7 +137,7 @@ impl VmMetrics { for ((dsl_ir, opcode), value) in self.counts.iter() { let labels = [ - ("dsl_ir", dsl_ir.clone().unwrap_or_else(String::new)), + ("dsl_ir", dsl_ir.clone().unwrap_or("-".to_string())), ("opcode", opcode.clone()), ]; counter!("frequency", &labels).absolute(*value as u64); @@ -145,7 +145,7 @@ impl VmMetrics { for ((dsl_ir, opcode, air_name), value) in self.trace_cells.iter() { let labels = [ - ("dsl_ir", dsl_ir.clone().unwrap_or_else(String::new)), + ("dsl_ir", dsl_ir.clone().unwrap_or("-".to_string())), ("opcode", opcode.clone()), ("air_name", air_name.clone()), ]; From 530ad746ae5ccf5e061d337951c930fbbad55d09 Mon Sep 17 00:00:00 2001 From: Manh Dinh Date: Wed, 16 Apr 2025 18:59:17 -0400 Subject: [PATCH 3/9] Update stark-backend --- Cargo.lock | 348 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 329 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0a84b8fd1a..14db0cf34c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -529,6 +529,12 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "aurora-engine-modexp" version = "1.2.0" @@ -598,6 +604,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "aws-lc-rs" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b756939cb2f8dc900aa6dcd505e6e2428e9cae7ff7b028c49e3946efa70878" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f7720b74ed28ca77f90769a71fd8c637a0137f6fae4ae947e1050229cff57f" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "aws-runtime" version = "1.5.5" @@ -870,17 +899,17 @@ dependencies = [ "aws-smithy-types", "bytes", "fastrand", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", "http-body 1.0.1", "httparse", - "hyper", - "hyper-rustls", + "hyper 0.14.32", + "hyper-rustls 0.24.2", "once_cell", "pin-project-lite", "pin-utils", - "rustls", + "rustls 0.21.12", "tokio", "tracing", ] @@ -1022,6 +1051,29 @@ dependencies = [ "serde", ] +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags 2.8.0", + "cexpr", + "clang-sys", + "itertools 0.10.5", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.98", + "which", +] + [[package]] name = "bit-set" version = "0.5.3" @@ -1347,6 +1399,15 @@ dependencies = [ "shlex", ] +[[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" @@ -1403,6 +1464,17 @@ dependencies = [ "inout", ] +[[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 = "4.5.30" @@ -1443,6 +1515,15 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +[[package]] +name = "cmake" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +dependencies = [ + "cc", +] + [[package]] name = "colorchoice" version = "1.0.3" @@ -1522,6 +1603,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -2459,6 +2550,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "funty" version = "2.0.0" @@ -2663,6 +2760,25 @@ dependencies = [ "tracing", ] +[[package]] +name = "h2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.2.0", + "indexmap 2.7.1", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "half" version = "2.4.1" @@ -2987,7 +3103,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", "httparse", @@ -3001,6 +3117,27 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.9", + "http 1.2.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + [[package]] name = "hyper-rustls" version = "0.24.2" @@ -3009,12 +3146,50 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper", + "hyper 0.14.32", "log", - "rustls", - "rustls-native-certs", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http 1.2.0", + "hyper 1.6.0", + "hyper-util", + "log", + "rustls 0.23.26", + "rustls-native-certs 0.8.1", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.2", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "hyper 1.6.0", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", ] [[package]] @@ -3426,6 +3601,12 @@ dependencies = [ "spin", ] +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "libc" version = "0.2.169" @@ -3444,6 +3625,16 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libloading" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +dependencies = [ + "cfg-if", + "windows-targets 0.48.5", +] + [[package]] name = "libm" version = "0.2.11" @@ -3602,6 +3793,27 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "metrics-exporter-prometheus" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f0c8427b39666bf970460908b213ec09b3b350f20c0c2eabcbba51704a08e6" +dependencies = [ + "base64 0.22.1", + "http-body-util", + "hyper 1.6.0", + "hyper-rustls 0.27.5", + "hyper-util", + "indexmap 2.7.1", + "ipnet", + "metrics", + "metrics-util", + "quanta", + "thiserror 1.0.69", + "tokio", + "tracing", +] + [[package]] name = "metrics-tracing-context" version = "0.16.0" @@ -3653,6 +3865,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[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.8.4" @@ -3688,6 +3906,16 @@ dependencies = [ "smallvec", ] +[[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 = "nu-ansi-term" version = "0.46.0" @@ -4942,6 +5170,7 @@ dependencies = [ "ff 0.13.0", "itertools 0.14.0", "metrics", + "metrics-exporter-prometheus", "metrics-tracing-context", "metrics-util", "openvm-stark-backend", @@ -4961,6 +5190,7 @@ dependencies = [ "serde", "serde_json", "static_assertions", + "tokio", "toml 0.8.20", "tracing", "tracing-forest", @@ -6022,11 +6252,11 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper", - "hyper-rustls", + "hyper 0.14.32", + "hyper-rustls 0.24.2", "ipnet", "js-sys", "log", @@ -6034,7 +6264,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", + "rustls 0.21.12", "rustls-pemfile", "serde", "serde_json", @@ -6042,7 +6272,7 @@ dependencies = [ "sync_wrapper", "system-configuration", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", "tower-service", "url", "wasm-bindgen", @@ -6315,10 +6545,25 @@ checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", "ring", - "rustls-webpki", + "rustls-webpki 0.101.7", "sct", ] +[[package]] +name = "rustls" +version = "0.23.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" +dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "rustls-pki-types", + "rustls-webpki 0.103.1", + "subtle", + "zeroize", +] + [[package]] name = "rustls-native-certs" version = "0.6.3" @@ -6328,7 +6573,19 @@ dependencies = [ "openssl-probe", "rustls-pemfile", "schannel", - "security-framework", + "security-framework 2.11.1", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework 3.2.0", ] [[package]] @@ -6340,6 +6597,12 @@ dependencies = [ "base64 0.21.7", ] +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -6350,6 +6613,18 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustls-webpki" +version = "0.103.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.19" @@ -6486,7 +6761,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.8.0", - "core-foundation", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +dependencies = [ + "bitflags 2.8.0", + "core-foundation 0.10.0", "core-foundation-sys", "libc", "security-framework-sys", @@ -7030,7 +7318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -7311,7 +7599,17 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls", + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls 0.23.26", "tokio", ] @@ -7765,6 +8063,18 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +[[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", +] + [[package]] name = "winapi" version = "0.3.9" From b8ae5995d26e74458207e9699c39f6b88ed62ec7 Mon Sep 17 00:00:00 2001 From: Manh Dinh Date: Thu, 17 Apr 2025 16:18:58 -0400 Subject: [PATCH 4/9] Avoid copying FnBounds --- crates/toolchain/instructions/src/exe.rs | 6 +++--- crates/toolchain/transpiler/src/lib.rs | 4 +++- crates/vm/src/arch/segment.rs | 2 +- crates/vm/src/metrics/mod.rs | 4 ++-- crates/vm/tests/integration_test.rs | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/crates/toolchain/instructions/src/exe.rs b/crates/toolchain/instructions/src/exe.rs index fb84ec7da5..f674c85019 100644 --- a/crates/toolchain/instructions/src/exe.rs +++ b/crates/toolchain/instructions/src/exe.rs @@ -1,4 +1,4 @@ -use std::collections::BTreeMap; +use std::{collections::BTreeMap, sync::Arc}; use openvm_stark_backend::p3_field::Field; use serde::{Deserialize, Serialize}; @@ -24,7 +24,7 @@ pub struct VmExe { /// Initial memory image. pub init_memory: MemoryImage, /// Starting + ending bounds for each function. - pub fn_bounds: FnBounds, + pub fn_bounds: Arc, } impl VmExe { @@ -33,7 +33,7 @@ impl VmExe { program, pc_start: 0, init_memory: BTreeMap::new(), - fn_bounds: Default::default(), + fn_bounds: Arc::new(Default::default()), } } pub fn with_pc_start(mut self, pc_start: u32) -> Self { diff --git a/crates/toolchain/transpiler/src/lib.rs b/crates/toolchain/transpiler/src/lib.rs index bf88d25a8e..010fda4df4 100644 --- a/crates/toolchain/transpiler/src/lib.rs +++ b/crates/toolchain/transpiler/src/lib.rs @@ -1,5 +1,7 @@ //! A transpiler from custom RISC-V ELFs to OpenVM executable binaries. +use std::sync::Arc; + use elf::Elf; use openvm_instructions::{ exe::VmExe, @@ -41,7 +43,7 @@ impl FromElf for VmExe { program, pc_start: elf.pc_start, init_memory, - fn_bounds: elf.fn_bounds, + fn_bounds: Arc::new(elf.fn_bounds), }) } } diff --git a/crates/vm/src/arch/segment.rs b/crates/vm/src/arch/segment.rs index 634632ce2b..ea5c3870a1 100644 --- a/crates/vm/src/arch/segment.rs +++ b/crates/vm/src/arch/segment.rs @@ -170,7 +170,7 @@ impl> ExecutionSegment { init_streams: Streams, initial_memory: Option>, trace_height_constraints: Vec, - #[allow(unused_variables)] fn_bounds: FnBounds, + #[allow(unused_variables)] fn_bounds: Arc, ) -> Self { let mut chip_complex = config.create_chip_complex().unwrap(); chip_complex.set_streams(init_streams); diff --git a/crates/vm/src/metrics/mod.rs b/crates/vm/src/metrics/mod.rs index 75b5b2ea02..fba024f75b 100644 --- a/crates/vm/src/metrics/mod.rs +++ b/crates/vm/src/metrics/mod.rs @@ -1,4 +1,4 @@ -use std::{collections::BTreeMap, mem}; +use std::{collections::BTreeMap, mem, sync::Arc}; use cycle_tracker::CycleTracker; use metrics::counter; @@ -23,7 +23,7 @@ pub struct VmMetrics { /// Metric collection tools. Only collected when `config.profiling` is true. pub cycle_tracker: CycleTracker, #[allow(dead_code)] - pub(crate) fn_bounds: FnBounds, + pub(crate) fn_bounds: Arc, /// Cycle span by function if function start/end addresses are available #[allow(dead_code)] pub(crate) current_fn: FnBound, diff --git a/crates/vm/tests/integration_test.rs b/crates/vm/tests/integration_test.rs index 168d756111..bdb062b19e 100644 --- a/crates/vm/tests/integration_test.rs +++ b/crates/vm/tests/integration_test.rs @@ -325,7 +325,7 @@ fn test_vm_initial_memory() { program, pc_start: 0, init_memory, - fn_bounds: Default::default(), + fn_bounds: Arc::new(Default::default()), }; air_test(config, exe); } From 7805dc5762af5d785ab43735dace5269b34c4e6f Mon Sep 17 00:00:00 2001 From: Manh Dinh Date: Thu, 17 Apr 2025 17:56:21 -0400 Subject: [PATCH 5/9] Using demangled symbols --- crates/toolchain/transpiler/src/elf.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/toolchain/transpiler/src/elf.rs b/crates/toolchain/transpiler/src/elf.rs index 5059d90454..a27522333c 100644 --- a/crates/toolchain/transpiler/src/elf.rs +++ b/crates/toolchain/transpiler/src/elf.rs @@ -121,6 +121,8 @@ impl Elf { for symbol in symtab.iter() { if symbol.st_symtype() == elf::abi::STT_FUNC { + let raw_name = stringtab.get(symbol.st_name as usize).unwrap().to_string(); + let demangled_name = rustc_demangle::demangle(&raw_name).to_string(); fn_bounds.insert( symbol.st_value as u32, FnBound { From 957d4c2aa4694fe7a29c5b3960fc09c492c9d1e3 Mon Sep 17 00:00:00 2001 From: Manh Dinh Date: Thu, 24 Apr 2025 20:06:10 -0400 Subject: [PATCH 6/9] Revert "Avoid copying FnBounds" This reverts commit d80b269425f08278f7c143097b307c7b84ffda55. --- crates/toolchain/instructions/src/exe.rs | 6 +++--- crates/toolchain/transpiler/src/lib.rs | 4 +--- crates/vm/src/arch/segment.rs | 2 +- crates/vm/src/metrics/mod.rs | 4 ++-- crates/vm/tests/integration_test.rs | 2 +- 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/crates/toolchain/instructions/src/exe.rs b/crates/toolchain/instructions/src/exe.rs index f674c85019..fb84ec7da5 100644 --- a/crates/toolchain/instructions/src/exe.rs +++ b/crates/toolchain/instructions/src/exe.rs @@ -1,4 +1,4 @@ -use std::{collections::BTreeMap, sync::Arc}; +use std::collections::BTreeMap; use openvm_stark_backend::p3_field::Field; use serde::{Deserialize, Serialize}; @@ -24,7 +24,7 @@ pub struct VmExe { /// Initial memory image. pub init_memory: MemoryImage, /// Starting + ending bounds for each function. - pub fn_bounds: Arc, + pub fn_bounds: FnBounds, } impl VmExe { @@ -33,7 +33,7 @@ impl VmExe { program, pc_start: 0, init_memory: BTreeMap::new(), - fn_bounds: Arc::new(Default::default()), + fn_bounds: Default::default(), } } pub fn with_pc_start(mut self, pc_start: u32) -> Self { diff --git a/crates/toolchain/transpiler/src/lib.rs b/crates/toolchain/transpiler/src/lib.rs index 010fda4df4..bf88d25a8e 100644 --- a/crates/toolchain/transpiler/src/lib.rs +++ b/crates/toolchain/transpiler/src/lib.rs @@ -1,7 +1,5 @@ //! A transpiler from custom RISC-V ELFs to OpenVM executable binaries. -use std::sync::Arc; - use elf::Elf; use openvm_instructions::{ exe::VmExe, @@ -43,7 +41,7 @@ impl FromElf for VmExe { program, pc_start: elf.pc_start, init_memory, - fn_bounds: Arc::new(elf.fn_bounds), + fn_bounds: elf.fn_bounds, }) } } diff --git a/crates/vm/src/arch/segment.rs b/crates/vm/src/arch/segment.rs index ea5c3870a1..634632ce2b 100644 --- a/crates/vm/src/arch/segment.rs +++ b/crates/vm/src/arch/segment.rs @@ -170,7 +170,7 @@ impl> ExecutionSegment { init_streams: Streams, initial_memory: Option>, trace_height_constraints: Vec, - #[allow(unused_variables)] fn_bounds: Arc, + #[allow(unused_variables)] fn_bounds: FnBounds, ) -> Self { let mut chip_complex = config.create_chip_complex().unwrap(); chip_complex.set_streams(init_streams); diff --git a/crates/vm/src/metrics/mod.rs b/crates/vm/src/metrics/mod.rs index fba024f75b..75b5b2ea02 100644 --- a/crates/vm/src/metrics/mod.rs +++ b/crates/vm/src/metrics/mod.rs @@ -1,4 +1,4 @@ -use std::{collections::BTreeMap, mem, sync::Arc}; +use std::{collections::BTreeMap, mem}; use cycle_tracker::CycleTracker; use metrics::counter; @@ -23,7 +23,7 @@ pub struct VmMetrics { /// Metric collection tools. Only collected when `config.profiling` is true. pub cycle_tracker: CycleTracker, #[allow(dead_code)] - pub(crate) fn_bounds: Arc, + pub(crate) fn_bounds: FnBounds, /// Cycle span by function if function start/end addresses are available #[allow(dead_code)] pub(crate) current_fn: FnBound, diff --git a/crates/vm/tests/integration_test.rs b/crates/vm/tests/integration_test.rs index bdb062b19e..168d756111 100644 --- a/crates/vm/tests/integration_test.rs +++ b/crates/vm/tests/integration_test.rs @@ -325,7 +325,7 @@ fn test_vm_initial_memory() { program, pc_start: 0, init_memory, - fn_bounds: Arc::new(Default::default()), + fn_bounds: Default::default(), }; air_test(config, exe); } From 5f2e75dcaeae7556e2c9f127f642fafb85957ee4 Mon Sep 17 00:00:00 2001 From: Manh Dinh Date: Thu, 24 Apr 2025 20:17:13 -0400 Subject: [PATCH 7/9] Fix python script --- ...theus_flamegraph.py => flamegraph_prom.py} | 38 +++++++++++++------ crates/toolchain/transpiler/src/elf.rs | 2 - 2 files changed, 27 insertions(+), 13 deletions(-) rename ci/scripts/metric_unify/{prometheus_flamegraph.py => flamegraph_prom.py} (75%) diff --git a/ci/scripts/metric_unify/prometheus_flamegraph.py b/ci/scripts/metric_unify/flamegraph_prom.py similarity index 75% rename from ci/scripts/metric_unify/prometheus_flamegraph.py rename to ci/scripts/metric_unify/flamegraph_prom.py index aa2c02fdbe..26a2673253 100644 --- a/ci/scripts/metric_unify/prometheus_flamegraph.py +++ b/ci/scripts/metric_unify/flamegraph_prom.py @@ -5,8 +5,9 @@ import subprocess from prometheus_api_client import PrometheusConnect from utils import FLAMEGRAPHS_DIR, get_git_root +from flamegraph import get_function_symbol -def get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None): +def get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None, string_table=None): """ Filters metrics from prometheus for entries that look like: [ { labels: [["key1", "span1;span2"], ["key2", "span3"]], "metric": metric_name, "value": 2 } ] @@ -43,7 +44,15 @@ def get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics=Non if key not in labels: filter = True break - stack_values.append(labels[key]) + if key == 'cycle_tracker_span': + if labels[key] == '' or string_table is None: + stack_values.append(labels[key]) + else: + symbol_offsets = labels[key].split(';') + function_symbols = [get_function_symbol(string_table, offset) for offset in symbol_offsets] + stack_values.extend(function_symbols) + else: + stack_values.append(labels[key]) if filter: continue @@ -60,8 +69,8 @@ def get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics=Non return lines if non_zero else [] -def create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None, reverse=False): - lines = get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics) +def create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics=None, reverse=False, string_table=None): + lines = get_stack_lines(prom, group_by_kvs, stack_keys, metric_name, sum_metrics, string_table) if not lines: return @@ -88,24 +97,24 @@ def create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_me print(f"Created flamegraph at {flamegraph_path}") -def create_flamegraphs(prom, group_by, stack_keys, metric_name, sum_metrics=None, reverse=False): +def create_flamegraphs(prom, group_by, stack_keys, metric_name, sum_metrics=None, reverse=False, string_table=None): # Assume group_by is a list of length 1 group_by_values_list = prom.get_label_values(label_name=group_by[0]) for group_by_values in group_by_values_list: group_by_kvs = list(zip(group_by, [group_by_values])) fname = 'metrics' + '-' + '-'.join([group_by_values]) - create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics, reverse=reverse) + create_flamegraph(fname, prom, group_by_kvs, stack_keys, metric_name, sum_metrics, reverse=reverse, string_table=string_table) -def create_custom_flamegraphs(prom, group_by=["group"]): +def create_custom_flamegraphs(prom, group_by=["group"], string_table=None): for reverse in [False, True]: create_flamegraphs(prom, group_by, ["cycle_tracker_span", "dsl_ir", "opcode"], "frequency", - reverse=reverse) + reverse=reverse, string_table=string_table) create_flamegraphs(prom, group_by, ["cycle_tracker_span", "dsl_ir", "opcode", "air_name"], "cells_used", - reverse=reverse) + reverse=reverse, string_table=string_table) create_flamegraphs(prom, group_by, ["cell_tracker_span"], "cells_used", sum_metrics=["simple_advice_cells", "fixed_cells", "lookup_advice_cells"], - reverse=reverse) + reverse=reverse, string_table=string_table) def main(): @@ -117,11 +126,18 @@ def main(): argparser = argparse.ArgumentParser() argparser.add_argument('prometheus_url', type=str, help="Path to the prometheus server") + argparser.add_argument('--guest-symbols', type=str, help="Path to the guest symbols file", default=None, required=False) args = argparser.parse_args() + if args.guest_symbols: + with open(args.guest_symbols, 'rb') as f: + string_table = f.read() + else: + string_table = None + prom = PrometheusConnect(url=args.prometheus_url, disable_ssl=True) - create_custom_flamegraphs(prom) + create_custom_flamegraphs(prom, string_table=string_table) if __name__ == '__main__': diff --git a/crates/toolchain/transpiler/src/elf.rs b/crates/toolchain/transpiler/src/elf.rs index a27522333c..5059d90454 100644 --- a/crates/toolchain/transpiler/src/elf.rs +++ b/crates/toolchain/transpiler/src/elf.rs @@ -121,8 +121,6 @@ impl Elf { for symbol in symtab.iter() { if symbol.st_symtype() == elf::abi::STT_FUNC { - let raw_name = stringtab.get(symbol.st_name as usize).unwrap().to_string(); - let demangled_name = rustc_demangle::demangle(&raw_name).to_string(); fn_bounds.insert( symbol.st_value as u32, FnBound { From cd2eeabbba1d7a63c3740b7facfb21d7b3222705 Mon Sep 17 00:00:00 2001 From: Manh Dinh Date: Wed, 7 May 2025 14:38:12 -0400 Subject: [PATCH 8/9] Revert "feat: `OpenVmHalo2Verifier` (#1549)" This reverts commit 0c9fff03e5911ff5a7325aa2764ff7259d9df7f7. --- crates/sdk/Cargo.toml | 1 - crates/sdk/src/lib.rs | 58 +------------------------------------------ 2 files changed, 1 insertion(+), 58 deletions(-) diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index 281b276e1d..4d69470a55 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -8,7 +8,6 @@ repository.workspace = true license.workspace = true [dependencies] - p3-fri = { workspace = true } openvm-algebra-circuit = { workspace = true } openvm-algebra-transpiler = { workspace = true } diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index a8d22a9343..fee53f6709 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -1,11 +1,4 @@ -use std::{ - env, - fs::{create_dir_all, read, write}, - marker::PhantomData, - path::Path, - process::Command, - sync::Arc, -}; +use std::{fs::read, marker::PhantomData, path::Path, sync::Arc}; #[cfg(feature = "evm-verify")] use alloy_sol_types::sol; @@ -50,10 +43,6 @@ use snark_verifier_sdk::{evm::gen_evm_verifier_sol_code, halo2::aggregation::Agg use crate::{ config::AggConfig, - fs::{ - EVM_HALO2_VERIFIER_BASE_NAME, EVM_HALO2_VERIFIER_INTERFACE_NAME, - EVM_HALO2_VERIFIER_PARENT_NAME, - }, keygen::{AggProvingKey, AggStarkProvingKey}, prover::{AppProver, StarkProver}, }; @@ -551,48 +540,3 @@ impl> GenericSdk { Ok(gas_cost) } } - -/// We will split the output by whitespace and look for the following -/// sequence: -/// [ -/// ... -/// "=======", -/// "OpenVmHalo2Verifier.sol:OpenVmHalo2Verifier", -/// "=======", -/// "Binary:" -/// "[compiled bytecode]" -/// ... -/// ] -/// -/// Once we find "OpenVmHalo2Verifier.sol:OpenVmHalo2Verifier," we can skip -/// to the appropriate offset to get the compiled bytecode. -fn extract_binary(output: &[u8], contract_name: &str) -> Vec { - let split = split_by_ascii_whitespace(output); - let contract_name_bytes = contract_name.as_bytes(); - - for i in 0..split.len().saturating_sub(3) { - if split[i] == contract_name_bytes { - return hex::decode(split[i + 3]).expect("Invalid hex in Binary"); - } - } - - panic!("Contract '{}' not found", contract_name); -} - -fn split_by_ascii_whitespace(bytes: &[u8]) -> Vec<&[u8]> { - let mut split = Vec::new(); - let mut start = None; - for (idx, byte) in bytes.iter().enumerate() { - if byte.is_ascii_whitespace() { - if let Some(start) = start.take() { - split.push(&bytes[start..idx]); - } - } else if start.is_none() { - start = Some(idx); - } - } - if let Some(last) = start { - split.push(&bytes[last..]); - } - split -} From 8db0db2fb2a9c8475922f68910525ef231a8cceb Mon Sep 17 00:00:00 2001 From: Manh Dinh Date: Wed, 7 May 2025 14:42:09 -0400 Subject: [PATCH 9/9] Fix Cargo.lock --- Cargo.lock | 350 ++++------------------------------------------------- 1 file changed, 21 insertions(+), 329 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 14db0cf34c..13e05b7784 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -529,12 +529,6 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "aurora-engine-modexp" version = "1.2.0" @@ -604,29 +598,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "aws-lc-rs" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b756939cb2f8dc900aa6dcd505e6e2428e9cae7ff7b028c49e3946efa70878" -dependencies = [ - "aws-lc-sys", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f7720b74ed28ca77f90769a71fd8c637a0137f6fae4ae947e1050229cff57f" -dependencies = [ - "bindgen", - "cc", - "cmake", - "dunce", - "fs_extra", -] - [[package]] name = "aws-runtime" version = "1.5.5" @@ -899,17 +870,17 @@ dependencies = [ "aws-smithy-types", "bytes", "fastrand", - "h2 0.3.26", + "h2", "http 0.2.12", "http-body 0.4.6", "http-body 1.0.1", "httparse", - "hyper 0.14.32", - "hyper-rustls 0.24.2", + "hyper", + "hyper-rustls", "once_cell", "pin-project-lite", "pin-utils", - "rustls 0.21.12", + "rustls", "tokio", "tracing", ] @@ -1051,29 +1022,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bindgen" -version = "0.69.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" -dependencies = [ - "bitflags 2.8.0", - "cexpr", - "clang-sys", - "itertools 0.10.5", - "lazy_static", - "lazycell", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn 2.0.98", - "which", -] - [[package]] name = "bit-set" version = "0.5.3" @@ -1399,15 +1347,6 @@ dependencies = [ "shlex", ] -[[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" @@ -1464,17 +1403,6 @@ dependencies = [ "inout", ] -[[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 = "4.5.30" @@ -1515,15 +1443,6 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" -[[package]] -name = "cmake" -version = "0.1.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" -dependencies = [ - "cc", -] - [[package]] name = "colorchoice" version = "1.0.3" @@ -1603,16 +1522,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-foundation" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -2550,12 +2459,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - [[package]] name = "funty" version = "2.0.0" @@ -2760,25 +2663,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "h2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http 1.2.0", - "indexmap 2.7.1", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "half" version = "2.4.1" @@ -3103,7 +2987,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.3.26", + "h2", "http 0.2.12", "http-body 0.4.6", "httparse", @@ -3117,27 +3001,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2 0.4.9", - "http 1.2.0", - "http-body 1.0.1", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - [[package]] name = "hyper-rustls" version = "0.24.2" @@ -3146,50 +3009,12 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.32", + "hyper", "log", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", + "rustls", + "rustls-native-certs", "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" -dependencies = [ - "futures-util", - "http 1.2.0", - "hyper 1.6.0", - "hyper-util", - "log", - "rustls 0.23.26", - "rustls-native-certs 0.8.1", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.2", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.2.0", - "http-body 1.0.1", - "hyper 1.6.0", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", + "tokio-rustls", ] [[package]] @@ -3601,12 +3426,6 @@ dependencies = [ "spin", ] -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" version = "0.2.169" @@ -3625,16 +3444,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "libloading" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" -dependencies = [ - "cfg-if", - "windows-targets 0.48.5", -] - [[package]] name = "libm" version = "0.2.11" @@ -3793,27 +3602,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "metrics-exporter-prometheus" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f0c8427b39666bf970460908b213ec09b3b350f20c0c2eabcbba51704a08e6" -dependencies = [ - "base64 0.22.1", - "http-body-util", - "hyper 1.6.0", - "hyper-rustls 0.27.5", - "hyper-util", - "indexmap 2.7.1", - "ipnet", - "metrics", - "metrics-util", - "quanta", - "thiserror 1.0.69", - "tokio", - "tracing", -] - [[package]] name = "metrics-tracing-context" version = "0.16.0" @@ -3865,12 +3653,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[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.8.4" @@ -3906,16 +3688,6 @@ dependencies = [ "smallvec", ] -[[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 = "nu-ansi-term" version = "0.46.0" @@ -5137,6 +4909,7 @@ dependencies = [ [[package]] name = "openvm-stark-backend" version = "1.0.0" +source = "git+https://github.com/openvm-org/stark-backend.git?tag=v1.0.1#e540dbdd09ef20db7207ad7f2674bece75a2b803" dependencies = [ "bitcode", "cfg-if", @@ -5164,13 +4937,13 @@ dependencies = [ [[package]] name = "openvm-stark-sdk" version = "1.0.0" +source = "git+https://github.com/openvm-org/stark-backend.git?tag=v1.0.1#e540dbdd09ef20db7207ad7f2674bece75a2b803" dependencies = [ "derivative", "derive_more 0.99.19", "ff 0.13.0", "itertools 0.14.0", "metrics", - "metrics-exporter-prometheus", "metrics-tracing-context", "metrics-util", "openvm-stark-backend", @@ -5190,7 +4963,6 @@ dependencies = [ "serde", "serde_json", "static_assertions", - "tokio", "toml 0.8.20", "tracing", "tracing-forest", @@ -6252,11 +6024,11 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.3.26", + "h2", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.32", - "hyper-rustls 0.24.2", + "hyper", + "hyper-rustls", "ipnet", "js-sys", "log", @@ -6264,7 +6036,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.12", + "rustls", "rustls-pemfile", "serde", "serde_json", @@ -6272,7 +6044,7 @@ dependencies = [ "sync_wrapper", "system-configuration", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", "tower-service", "url", "wasm-bindgen", @@ -6545,25 +6317,10 @@ checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", "ring", - "rustls-webpki 0.101.7", + "rustls-webpki", "sct", ] -[[package]] -name = "rustls" -version = "0.23.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" -dependencies = [ - "aws-lc-rs", - "log", - "once_cell", - "rustls-pki-types", - "rustls-webpki 0.103.1", - "subtle", - "zeroize", -] - [[package]] name = "rustls-native-certs" version = "0.6.3" @@ -6573,19 +6330,7 @@ dependencies = [ "openssl-probe", "rustls-pemfile", "schannel", - "security-framework 2.11.1", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework 3.2.0", + "security-framework", ] [[package]] @@ -6597,12 +6342,6 @@ dependencies = [ "base64 0.21.7", ] -[[package]] -name = "rustls-pki-types" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" - [[package]] name = "rustls-webpki" version = "0.101.7" @@ -6613,18 +6352,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "rustls-webpki" -version = "0.103.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" -dependencies = [ - "aws-lc-rs", - "ring", - "rustls-pki-types", - "untrusted", -] - [[package]] name = "rustversion" version = "1.0.19" @@ -6761,20 +6488,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.8.0", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" -dependencies = [ - "bitflags 2.8.0", - "core-foundation 0.10.0", + "core-foundation", "core-foundation-sys", "libc", "security-framework-sys", @@ -7318,7 +7032,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", + "core-foundation", "system-configuration-sys", ] @@ -7599,17 +7313,7 @@ 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.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" -dependencies = [ - "rustls 0.23.26", + "rustls", "tokio", ] @@ -8063,18 +7767,6 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" -[[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", -] - [[package]] name = "winapi" version = "0.3.9"