From 10f5673a94c2b5c2144a0644aa09bee573edeb6a Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Sun, 16 Jun 2024 15:20:31 +0100 Subject: [PATCH 01/10] 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 7b95560a382b0e8733b9ff204c391c959739bdea Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Sun, 16 Jun 2024 16:29:38 +0100 Subject: [PATCH 02/10] 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 04d96e88a460bf03ac867b9805c01e2539ad23d3 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Mon, 17 Jun 2024 13:02:19 +0100 Subject: [PATCH 03/10] 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 5edac0938334b07cb057b1d8cad5d9f8afce24e8 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Mon, 17 Jun 2024 15:36:10 +0100 Subject: [PATCH 04/10] 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 c2d690822506690bde6f3ae12607fa4b272f31f3 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Tue, 18 Jun 2024 12:29:51 +0100 Subject: [PATCH 05/10] chore: Update Cargo.lock --- aptos/Cargo.lock | 13086 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 13086 insertions(+) create mode 100644 aptos/Cargo.lock diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock new file mode 100644 index 00000000..942ca058 --- /dev/null +++ b/aptos/Cargo.lock @@ -0,0 +1,13086 @@ +# 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" +<<<<<<< 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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +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 = [ +<<<<<<< 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", + "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 = [ +<<<<<<< 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", + "serde", +] + +[[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" +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", +<<<<<<< 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", + "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", +<<<<<<< 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", + "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]] +<<<<<<< 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" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.0", +] + +[[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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.8", + "tinyvec", +] + +[[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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +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 = "contracts-generator" +version = "0.1.0" +dependencies = [ + "anyhow", + "log", + "sphinx-sdk", +] + +[[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]] +<<<<<<< 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" +checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" +dependencies = [ + "base64 0.21.7", + "bytes", + "hex", + "k256", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3 0.10.8", + "zeroize", +] + +[[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" +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]] +<<<<<<< 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" +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 = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" +dependencies = [ + "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]] +<<<<<<< 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" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[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" +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 = "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" +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]] +<<<<<<< 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" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + +[[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" +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]] +<<<<<<< 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" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers", + "send_wrapper 0.4.0", +] + +[[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" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[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" +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]] +<<<<<<< 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" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[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" +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]] +<<<<<<< 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" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + +[[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" +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]] +<<<<<<< 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" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[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" +checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" +dependencies = [ + "serde", +] + +[[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" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +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", +<<<<<<< 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", +] + +[[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", +<<<<<<< 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]] +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", +<<<<<<< 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)", + "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 = [ +<<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) + "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", +<<<<<<< HEAD +======= + "num_enum_derive", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) +] + +[[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]] +<<<<<<< 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-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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +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" +<<<<<<< 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", +] + +[[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", + "p3-mds", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[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", +] + +[[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", + "p3-field", + "p3-poseidon2", + "p3-symmetric", + "rand 0.8.5", + "serde", +] + +[[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", + "p3-symmetric", + "p3-util", + "tracing", +] + +[[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", + "p3-field", + "p3-matrix", + "p3-util", + "serde", +] + +[[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", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[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", + "num-traits", + "p3-util", + "rand 0.8.5", + "serde", +] + +[[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", + "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" +<<<<<<< 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", + "p3-util", +] + +[[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", +] + +[[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", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "tracing", +] + +[[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", + "p3-maybe-rayon", + "p3-util", + "rand 0.8.5", + "serde", + "tracing", +] + +[[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", +] + +[[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", + "p3-field", + "p3-matrix", + "p3-symmetric", + "p3-util", + "rand 0.8.5", +] + +[[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", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "serde", + "tracing", +] + +[[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", + "p3-mds", + "p3-symmetric", + "rand 0.8.5", +] + +[[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", + "serde", +] + +[[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", + "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" +<<<<<<< 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", +] + +[[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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.0", +] + +[[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" +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", +<<<<<<< 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", +] + +[[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", +<<<<<<< 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", +] + +[[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", +<<<<<<< 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" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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" +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", +<<<<<<< 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", +] + +[[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]] +<<<<<<< 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" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + +[[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" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac 0.12.1", + "pbkdf2 0.11.0", + "salsa20", + "sha2 0.10.8", +] + +[[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" +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]] +<<<<<<< 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" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +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" +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" +<<<<<<< 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", + "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" +<<<<<<< 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", + "syn 1.0.109", +] + +[[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", +] + +[[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", + "p3-baby-bear", + "p3-field", + "p3-poseidon2", + "p3-symmetric", +] + +[[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", + "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", +<<<<<<< HEAD +<<<<<<< HEAD + "subtle-encoding", +======= +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "subtle-encoding", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) + "tempfile", + "thiserror", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", +] + +[[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", + "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" +<<<<<<< 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", + "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" +<<<<<<< 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", + "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" +<<<<<<< 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", + "syn 1.0.109", +] + +[[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", + "p3-field", + "rand 0.8.5", + "serde", + "serde_json", + "sphinx-recursion-compiler", + "tempfile", +] + +[[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", + "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" +<<<<<<< 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", + "p3-commit", + "p3-field", + "p3-matrix", + "prost", + "reqwest 0.12.4", + "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", + "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" +<<<<<<< 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" +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]] +<<<<<<< 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" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[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" +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", +<<<<<<< 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", + "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", +<<<<<<< HEAD +<<<<<<< HEAD +======= + "tokio-util", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) +] + +[[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]] +<<<<<<< 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" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + +[[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" +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", +<<<<<<< HEAD +<<<<<<< HEAD + "winnow", +======= + "winnow 0.5.40", +>>>>>>> f0c3286 (chore: check in Cargo.lock (#24)) +======= + "winnow", +>>>>>>> 0e002e1 (docs: proof server rust doc (#20)) +] + +[[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", +<<<<<<< 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]] +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]] +<<<<<<< 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" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[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" +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" +<<<<<<< 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", + "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]] +<<<<<<< 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" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.15", + "serde", +] + +[[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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +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]] +<<<<<<< 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" +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", +] From 72cfd1b4950ac2455c11e5c069af80f6b06d2ded Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Tue, 18 Jun 2024 12:33:24 +0100 Subject: [PATCH 06/10] 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 6482a0a9387a492bff093cbe04ee7f676b4e9110 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Tue, 18 Jun 2024 13:26:19 +0100 Subject: [PATCH 07/10] 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 4b4a00f7941a3e95a249c5642a69de6b09c79dea Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Tue, 18 Jun 2024 18:21:09 +0100 Subject: [PATCH 08/10] 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 +} From 0941c5a2535172056a792468fafb8fe2163ddaf4 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Wed, 19 Jun 2024 22:23:13 +0100 Subject: [PATCH 09/10] feat: Update Foundry project to use sphinx-contracts dependency --- .gitmodules | 3 + aptos/Cargo.lock | 12 - aptos/Cargo.toml | 1 - aptos/solidity/contracts-generator/Cargo.toml | 16 - .../contracts-generator/rust-toolchain | 3 - .../contracts-generator/src/bin/main.rs | 107 -- aptos/solidity/contracts/lib/forge-std | 2 +- aptos/solidity/contracts/lib/sphinx-contracts | 1 + aptos/solidity/contracts/remappings.txt | 2 + aptos/solidity/contracts/src/EpochChange.sol | 2 +- aptos/solidity/contracts/src/Inclusion.sol | 3 +- .../contracts/src/plonk/ISP1Verifier.sol | 16 - .../contracts/src/plonk/PlonkVerifier.sol | 1252 ----------------- .../contracts/src/plonk/SP1MockVerifier.sol | 19 - .../contracts/src/plonk/SP1Verifier.sol | 32 - 15 files changed, 10 insertions(+), 1461 deletions(-) delete mode 100644 aptos/solidity/contracts-generator/Cargo.toml delete mode 100644 aptos/solidity/contracts-generator/rust-toolchain delete mode 100644 aptos/solidity/contracts-generator/src/bin/main.rs create mode 160000 aptos/solidity/contracts/lib/sphinx-contracts create mode 100644 aptos/solidity/contracts/remappings.txt delete mode 100644 aptos/solidity/contracts/src/plonk/ISP1Verifier.sol delete mode 100644 aptos/solidity/contracts/src/plonk/PlonkVerifier.sol delete mode 100644 aptos/solidity/contracts/src/plonk/SP1MockVerifier.sol delete mode 100644 aptos/solidity/contracts/src/plonk/SP1Verifier.sol diff --git a/.gitmodules b/.gitmodules index 996a3e2a..f0832068 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,3 +3,6 @@ url = https://github.com/foundry-rs/forge-std # https://stackoverflow.com/questions/5126765/how-to-get-rid-of-git-submodules-untracked-status ignore = dirty +[submodule "aptos/solidity/contracts/lib/sphinx-contracts"] + path = aptos/solidity/contracts/lib/sphinx-contracts + url = https://github.com/lurk-lab/sphinx-contracts diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index 09111c50..d762a29e 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -3120,18 +3120,6 @@ 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", - "home", - "log", - "sphinx-prover", - "sphinx-sdk", - "tempfile", -] - [[package]] name = "convert_case" version = "0.4.0" diff --git a/aptos/Cargo.toml b/aptos/Cargo.toml index 407032ca..d96b7315 100644 --- a/aptos/Cargo.toml +++ b/aptos/Cargo.toml @@ -7,7 +7,6 @@ members = [ "aptos-programs", "proof-server", "solidity/fixture-generator", - "solidity/contracts-generator", ] [workspace.dependencies] diff --git a/aptos/solidity/contracts-generator/Cargo.toml b/aptos/solidity/contracts-generator/Cargo.toml deleted file mode 100644 index 55a05a64..00000000 --- a/aptos/solidity/contracts-generator/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[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" -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/rust-toolchain b/aptos/solidity/contracts-generator/rust-toolchain deleted file mode 100644 index 989860f4..00000000 --- a/aptos/solidity/contracts-generator/rust-toolchain +++ /dev/null @@ -1,3 +0,0 @@ -[toolchain] -channel = "nightly-2024-04-17" -components = ["llvm-tools", "rustc-dev"] diff --git a/aptos/solidity/contracts-generator/src/bin/main.rs b/aptos/solidity/contracts-generator/src/bin/main.rs deleted file mode 100644 index 8ecec9c3..00000000 --- a/aptos/solidity/contracts-generator/src/bin/main.rs +++ /dev/null @@ -1,107 +0,0 @@ -use anyhow::Result; -use home::home_dir; -use log::info; -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(); - - // 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)? - .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-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 -} diff --git a/aptos/solidity/contracts/lib/forge-std b/aptos/solidity/contracts/lib/forge-std index 978ac6fa..19891e6a 160000 --- a/aptos/solidity/contracts/lib/forge-std +++ b/aptos/solidity/contracts/lib/forge-std @@ -1 +1 @@ -Subproject commit 978ac6fadb62f5f0b723c996f64be52eddba6801 +Subproject commit 19891e6a0b5474b9ea6827ddb90bb9388f7acfc0 diff --git a/aptos/solidity/contracts/lib/sphinx-contracts b/aptos/solidity/contracts/lib/sphinx-contracts new file mode 160000 index 00000000..96b9dc53 --- /dev/null +++ b/aptos/solidity/contracts/lib/sphinx-contracts @@ -0,0 +1 @@ +Subproject commit 96b9dc530755efdbe231a26d1e4de2852b34be48 diff --git a/aptos/solidity/contracts/remappings.txt b/aptos/solidity/contracts/remappings.txt new file mode 100644 index 00000000..c40de20e --- /dev/null +++ b/aptos/solidity/contracts/remappings.txt @@ -0,0 +1,2 @@ +forge-std/=lib/forge-std/src/ +sphinx-contracts/=lib/sphinx-contracts/contracts/src/ diff --git a/aptos/solidity/contracts/src/EpochChange.sol b/aptos/solidity/contracts/src/EpochChange.sol index 2a39ee9e..fa4b36e9 100644 --- a/aptos/solidity/contracts/src/EpochChange.sol +++ b/aptos/solidity/contracts/src/EpochChange.sol @@ -1,6 +1,6 @@ pragma solidity ^0.8.25; -import {SP1Verifier as SP1PlonkVerifier} from "../src/plonk/SP1Verifier.sol"; +import {SP1Verifier as SP1PlonkVerifier} from "sphinx-contracts/SP1Verifier.sol"; contract EpochChange is SP1PlonkVerifier { bytes32 public epochChangeProgramVkey; diff --git a/aptos/solidity/contracts/src/Inclusion.sol b/aptos/solidity/contracts/src/Inclusion.sol index f90e9ae4..fbe193a1 100644 --- a/aptos/solidity/contracts/src/Inclusion.sol +++ b/aptos/solidity/contracts/src/Inclusion.sol @@ -1,6 +1,7 @@ pragma solidity ^0.8.25; -import {SP1Verifier as SP1PlonkVerifier} from "../src/plonk/SP1Verifier.sol"; +import {SP1Verifier as SP1PlonkVerifier} from "sphinx-contracts/SP1Verifier.sol"; + contract Inclusion is SP1PlonkVerifier { bytes32 public inclusionProgramVkey; diff --git a/aptos/solidity/contracts/src/plonk/ISP1Verifier.sol b/aptos/solidity/contracts/src/plonk/ISP1Verifier.sol deleted file mode 100644 index 5795e089..00000000 --- a/aptos/solidity/contracts/src/plonk/ISP1Verifier.sol +++ /dev/null @@ -1,16 +0,0 @@ -// 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 deleted file mode 100644 index 6325b152..00000000 --- a/aptos/solidity/contracts/src/plonk/PlonkVerifier.sol +++ /dev/null @@ -1,1252 +0,0 @@ -// 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 = 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; - - 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 deleted file mode 100644 index 9f0d7050..00000000 --- a/aptos/solidity/contracts/src/plonk/SP1MockVerifier.sol +++ /dev/null @@ -1,19 +0,0 @@ -// 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 deleted file mode 100644 index 04bb39ab..00000000 --- a/aptos/solidity/contracts/src/plonk/SP1Verifier.sol +++ /dev/null @@ -1,32 +0,0 @@ -// 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); - } -} From c07dcc390afdd71954f6b3f152738737ad5f7da9 Mon Sep 17 00:00:00 2001 From: Artem Storozhuk Date: Thu, 20 Jun 2024 17:51:52 +0100 Subject: [PATCH 10/10] chore: Rename SP1 -> Sphinx --- aptos/Cargo.lock | 35 ++++++++++--------- aptos/solidity/contracts/lib/sphinx-contracts | 2 +- aptos/solidity/contracts/src/EpochChange.sol | 4 +-- aptos/solidity/contracts/src/Inclusion.sol | 5 ++- .../contracts/test/test_lc_proofs.sol | 34 +++++++++--------- 5 files changed, 41 insertions(+), 39 deletions(-) diff --git a/aptos/Cargo.lock b/aptos/Cargo.lock index d762a29e..a0496782 100644 --- a/aptos/Cargo.lock +++ b/aptos/Cargo.lock @@ -2663,9 +2663,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" [[package]] name = "byteorder" @@ -9610,7 +9610,7 @@ dependencies = [ [[package]] name = "sphinx-core" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "anyhow", "arrayref", @@ -9648,6 +9648,7 @@ dependencies = [ "p3-symmetric", "p3-uni-stark", "p3-util", + "rand 0.8.5", "rayon-scan", "rrs-lib", "serde", @@ -9669,7 +9670,7 @@ dependencies = [ [[package]] name = "sphinx-derive" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "proc-macro2", "quote", @@ -9679,7 +9680,7 @@ dependencies = [ [[package]] name = "sphinx-helper" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "cargo_metadata 0.18.1", "chrono", @@ -9688,7 +9689,7 @@ dependencies = [ [[package]] name = "sphinx-primitives" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "itertools 0.12.1", "lazy_static", @@ -9701,7 +9702,7 @@ dependencies = [ [[package]] name = "sphinx-prover" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "anyhow", "backtrace", @@ -9743,7 +9744,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-circuit" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "bincode", "itertools 0.12.1", @@ -9766,7 +9767,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-compiler" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "backtrace", "itertools 0.12.1", @@ -9790,7 +9791,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-core" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "arrayref", "backtrace", @@ -9823,7 +9824,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-derive" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "proc-macro2", "quote", @@ -9833,7 +9834,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-gnark-ffi" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "bindgen 0.69.4", "cfg-if", @@ -9841,9 +9842,11 @@ dependencies = [ "num-bigint 0.4.5", "p3-baby-bear", "p3-field", + "p3-symmetric", "rand 0.8.5", "serde", "serde_json", + "sphinx-core", "sphinx-recursion-compiler", "tempfile", ] @@ -9851,7 +9854,7 @@ dependencies = [ [[package]] name = "sphinx-recursion-program" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "itertools 0.12.1", "p3-air", @@ -9878,7 +9881,7 @@ dependencies = [ [[package]] name = "sphinx-sdk" version = "0.1.0" -source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#f1cbdc22d04923b74adcaf398a444fdeeb5a5b97" +source = "git+ssh://git@github.com/lurk-lab/sphinx?branch=plonk#317414f5edd90eb6931ed57b60093ef1886016c5" dependencies = [ "alloy-sol-types", "anyhow", @@ -10070,9 +10073,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" [[package]] name = "subtle-encoding" diff --git a/aptos/solidity/contracts/lib/sphinx-contracts b/aptos/solidity/contracts/lib/sphinx-contracts index 96b9dc53..c3bc9561 160000 --- a/aptos/solidity/contracts/lib/sphinx-contracts +++ b/aptos/solidity/contracts/lib/sphinx-contracts @@ -1 +1 @@ -Subproject commit 96b9dc530755efdbe231a26d1e4de2852b34be48 +Subproject commit c3bc9561bfc08ad409f47820d9790260d77e3997 diff --git a/aptos/solidity/contracts/src/EpochChange.sol b/aptos/solidity/contracts/src/EpochChange.sol index fa4b36e9..9096e8e5 100644 --- a/aptos/solidity/contracts/src/EpochChange.sol +++ b/aptos/solidity/contracts/src/EpochChange.sol @@ -1,8 +1,8 @@ pragma solidity ^0.8.25; -import {SP1Verifier as SP1PlonkVerifier} from "sphinx-contracts/SP1Verifier.sol"; +import {SphinxVerifier as SphinxPlonkVerifier} from "sphinx-contracts/SphinxVerifier.sol"; -contract EpochChange is SP1PlonkVerifier { +contract EpochChange is SphinxPlonkVerifier { bytes32 public epochChangeProgramVkey; constructor(bytes32 _epochChangeProgramVkey) { diff --git a/aptos/solidity/contracts/src/Inclusion.sol b/aptos/solidity/contracts/src/Inclusion.sol index fbe193a1..8a34321d 100644 --- a/aptos/solidity/contracts/src/Inclusion.sol +++ b/aptos/solidity/contracts/src/Inclusion.sol @@ -1,9 +1,8 @@ pragma solidity ^0.8.25; -import {SP1Verifier as SP1PlonkVerifier} from "sphinx-contracts/SP1Verifier.sol"; +import {SphinxVerifier as SphinxPlonkVerifier} from "sphinx-contracts/SphinxVerifier.sol"; - -contract Inclusion is SP1PlonkVerifier { +contract Inclusion is SphinxPlonkVerifier { bytes32 public inclusionProgramVkey; constructor(bytes32 _inclusionProgramVkey) { diff --git a/aptos/solidity/contracts/test/test_lc_proofs.sol b/aptos/solidity/contracts/test/test_lc_proofs.sol index c69fd418..67c88854 100644 --- a/aptos/solidity/contracts/test/test_lc_proofs.sol +++ b/aptos/solidity/contracts/test/test_lc_proofs.sol @@ -6,7 +6,7 @@ import {stdJson} from "forge-std/StdJson.sol"; import {Inclusion} from "../src/Inclusion.sol"; import {EpochChange} from "../src/EpochChange.sol"; -struct SP1ProofFixtureJson { +struct SphinxProofFixtureJson { bytes proof; bytes publicValues; bytes32 vkey; @@ -18,39 +18,39 @@ contract SolidityVerificationTest is Test { Inclusion public inclusion; EpochChange public epochChange; - function loadPlonkInclusionFixture() public view returns (SP1ProofFixtureJson memory) { + function loadPlonkInclusionFixture() public view returns (SphinxProofFixtureJson 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)); + return abi.decode(jsonBytes, (SphinxProofFixtureJson)); } - function loadPlonkEpochChangeFixture() public view returns (SP1ProofFixtureJson memory) { + function loadPlonkEpochChangeFixture() public view returns (SphinxProofFixtureJson 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)); + return abi.decode(jsonBytes, (SphinxProofFixtureJson)); } function setUp() public { - SP1ProofFixtureJson memory plonkInclusionFixture = loadPlonkInclusionFixture(); + SphinxProofFixtureJson memory plonkInclusionFixture = loadPlonkInclusionFixture(); inclusion = new Inclusion(plonkInclusionFixture.vkey); - SP1ProofFixtureJson memory plonkEpochChangeFixture = loadPlonkEpochChangeFixture(); + SphinxProofFixtureJson memory plonkEpochChangeFixture = loadPlonkEpochChangeFixture(); epochChange = new EpochChange(plonkEpochChangeFixture.vkey); } function testValidInclusionProofPlonk() public view { - SP1ProofFixtureJson memory fixture = loadPlonkInclusionFixture(); + SphinxProofFixtureJson 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(); + SphinxProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); uint256 gasCost = gasleft(); epochChange.verifyProof(fixture.proof, fixture.publicValues); console.log("gas cost: ", gasCost - gasleft()); @@ -58,13 +58,13 @@ contract SolidityVerificationTest is Test { // Negative tests with a fake proof function testFail_FakeProofInclusion() public view { - SP1ProofFixtureJson memory fixture = loadPlonkInclusionFixture(); + SphinxProofFixtureJson memory fixture = loadPlonkInclusionFixture(); bytes memory fakeProof = new bytes(fixture.proof.length); inclusion.verifyProof(fakeProof, fixture.publicValues); } function testFail_FakeProofEpochChange() public view { - SP1ProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); + SphinxProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); bytes memory fakeProof = new bytes(fixture.proof.length); epochChange.verifyProof(fakeProof, fixture.publicValues); } @@ -72,7 +72,7 @@ contract SolidityVerificationTest is Test { // Negative tests with a fake public values function testFail_FakePublicValuesInclusion() public view { console.log("running testFail_FakePublicValuesInclusion"); - SP1ProofFixtureJson memory fixture = loadPlonkInclusionFixture(); + SphinxProofFixtureJson memory fixture = loadPlonkInclusionFixture(); bytes memory fakePublicValues = new bytes(fixture.proof.length + 100); @@ -80,25 +80,25 @@ contract SolidityVerificationTest is Test { } function testFail_FakePublicValuesEpochChange() public view { - SP1ProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); + SphinxProofFixtureJson 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(); + SphinxProofFixtureJson memory plonkEpochChangeFixture = loadPlonkEpochChangeFixture(); inclusion = new Inclusion(plonkEpochChangeFixture.vkey); // take key of epoch_change program - SP1ProofFixtureJson memory fixture = loadPlonkInclusionFixture(); + SphinxProofFixtureJson memory fixture = loadPlonkInclusionFixture(); inclusion.verifyProof(fixture.proof, fixture.publicValues); } function testFail_WrongVkValuesEpochChange() public { - SP1ProofFixtureJson memory plonkInclusionFixture = loadPlonkInclusionFixture(); + SphinxProofFixtureJson memory plonkInclusionFixture = loadPlonkInclusionFixture(); epochChange = new EpochChange(plonkInclusionFixture.vkey); // take key of inclusion program - SP1ProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); + SphinxProofFixtureJson memory fixture = loadPlonkEpochChangeFixture(); epochChange.verifyProof(fixture.proof, fixture.publicValues); } }