diff --git a/.github/release-please/manifest.json b/.github/release-please/manifest.json index fa33d4c8d7a1..0c7bc3f5ef03 100644 --- a/.github/release-please/manifest.json +++ b/.github/release-please/manifest.json @@ -1,5 +1,5 @@ { "core": "25.1.0", - "prover": "17.0.0", + "prover": "17.1.0", "zkstack_cli": "0.1.2" } diff --git a/.github/workflows/build-docker-from-tag.yml b/.github/workflows/build-docker-from-tag.yml index 206e15bd195f..b3f442ff4662 100644 --- a/.github/workflows/build-docker-from-tag.yml +++ b/.github/workflows/build-docker-from-tag.yml @@ -49,7 +49,7 @@ jobs: build-push-core-images: name: Build and push image needs: [ setup ] - uses: ./.github/workflows/build-core-template.yml + uses: ./.github/workflows/new-build-core-template.yml if: contains(github.ref_name, 'core') secrets: DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }} @@ -57,6 +57,7 @@ jobs: with: image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }} en_alpha_release: true + action: "push" build-push-tee-prover-images: name: Build and push images @@ -73,23 +74,25 @@ jobs: build-push-contract-verifier: name: Build and push image needs: [ setup ] - uses: ./.github/workflows/build-contract-verifier-template.yml + uses: ./.github/workflows/new-build-contract-verifier-template.yml if: contains(github.ref_name, 'contract_verifier') secrets: DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} with: image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }} + action: "push" build-push-prover-images: name: Build and push image needs: [ setup ] - uses: ./.github/workflows/build-prover-template.yml + uses: ./.github/workflows/new-build-prover-template.yml if: contains(github.ref_name, 'prover') with: image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }} ERA_BELLMAN_CUDA_RELEASE: ${{ vars.ERA_BELLMAN_CUDA_RELEASE }} CUDA_ARCH: "60;70;75;80;89" + action: "push" secrets: DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} @@ -97,13 +100,14 @@ jobs: build-push-witness-generator-image-avx512: name: Build and push image needs: [ setup ] - uses: ./.github/workflows/build-witness-generator-template.yml + uses: ./.github/workflows/new-build-witness-generator-template.yml if: contains(github.ref_name, 'prover') with: image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }}-avx512 ERA_BELLMAN_CUDA_RELEASE: ${{ vars.ERA_BELLMAN_CUDA_RELEASE }} CUDA_ARCH: "60;70;75;80;89" WITNESS_GENERATOR_RUST_FLAGS: "-Ctarget_feature=+avx512bw,+avx512cd,+avx512dq,+avx512f,+avx512vl" + action: "push" secrets: DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/ci-prover-e2e.yml b/.github/workflows/ci-prover-e2e.yml index 35dbf769b7c6..b1d301e3deed 100644 --- a/.github/workflows/ci-prover-e2e.yml +++ b/.github/workflows/ci-prover-e2e.yml @@ -51,7 +51,7 @@ jobs: --base-token-price-denominator 1 \ --set-as-default true \ --ignore-prerequisites \ - --evm-emulator=false + --evm-emulator false ci_run zkstack ecosystem init --dev --verbose ci_run zkstack prover init --dev --verbose diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a4370457fecb..849fccc2e22c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -186,7 +186,7 @@ jobs: name: Github Status Check runs-on: ubuntu-latest if: always() && !cancelled() - needs: [ ci-for-core-lint, ci-for-common, ci-for-core, ci-for-prover, ci-for-docs, build-core-images, build-contract-verifier, build-prover-images ] + needs: [ ci-for-core-lint, ci-for-common, ci-for-core, ci-for-prover, ci-for-docs, build-core-images, build-contract-verifier, build-prover-images, e2e-for-prover ] steps: - name: Status run: | diff --git a/.github/workflows/protobuf.yaml b/.github/workflows/protobuf.yaml index c9541167b464..f0565919ded1 100644 --- a/.github/workflows/protobuf.yaml +++ b/.github/workflows/protobuf.yaml @@ -41,6 +41,7 @@ jobs: ref: ${{ env.BASE }} path: before fetch-depth: 0 # fetches all branches and tags, which is needed to compute the LCA. + submodules: "recursive" - name: checkout LCA run: git checkout $(git merge-base $BASE $HEAD) --recurse-submodules diff --git a/core/bin/zksync_tee_prover/src/tee_prover.rs b/core/bin/zksync_tee_prover/src/tee_prover.rs index 5d22d1e7c630..58f3d45969ca 100644 --- a/core/bin/zksync_tee_prover/src/tee_prover.rs +++ b/core/bin/zksync_tee_prover/src/tee_prover.rs @@ -80,7 +80,13 @@ impl TeeProver { let msg_to_sign = Message::from_slice(root_hash_bytes) .map_err(|e| TeeProverError::Verification(e.into()))?; let signature = self.config.signing_key.sign_ecdsa(msg_to_sign); - observer.observe(); + let duration = observer.observe(); + tracing::info!( + proof_generation_time = duration.as_secs_f64(), + l1_batch_number = %batch_number, + l1_root_hash = ?verification_result.value_hash, + "L1 batch verified", + ); Ok((signature, batch_number, verification_result.value_hash)) } _ => Err(TeeProverError::Verification(anyhow::anyhow!( diff --git a/core/lib/basic_types/src/tee_types.rs b/core/lib/basic_types/src/tee_types.rs index d49f2f183885..44a3ba02c1d2 100644 --- a/core/lib/basic_types/src/tee_types.rs +++ b/core/lib/basic_types/src/tee_types.rs @@ -2,7 +2,7 @@ use std::fmt; use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] #[non_exhaustive] pub enum TeeType { diff --git a/core/lib/dal/.sqlx/query-746d8b62d576b4b9596458aa865e0294e53eb37c1a2dbcc3044b8311200d549a.json b/core/lib/dal/.sqlx/query-6069d168d5c4b5131b50500302cdde79388b62926ff83d954b4d93dedfe2503a.json similarity index 85% rename from core/lib/dal/.sqlx/query-746d8b62d576b4b9596458aa865e0294e53eb37c1a2dbcc3044b8311200d549a.json rename to core/lib/dal/.sqlx/query-6069d168d5c4b5131b50500302cdde79388b62926ff83d954b4d93dedfe2503a.json index 306f193861f1..98d228726d48 100644 --- a/core/lib/dal/.sqlx/query-746d8b62d576b4b9596458aa865e0294e53eb37c1a2dbcc3044b8311200d549a.json +++ b/core/lib/dal/.sqlx/query-6069d168d5c4b5131b50500302cdde79388b62926ff83d954b4d93dedfe2503a.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE l1_batches\n SET\n l1_tx_count = $2,\n l2_tx_count = $3,\n l2_to_l1_messages = $4,\n bloom = $5,\n priority_ops_onchain_data = $6,\n predicted_commit_gas_cost = $7,\n predicted_prove_gas_cost = $8,\n predicted_execute_gas_cost = $9,\n initial_bootloader_heap_content = $10,\n used_contract_hashes = $11,\n bootloader_code_hash = $12,\n default_aa_code_hash = $13,\n evm_emulator_code_hash = $14,\n protocol_version = $15,\n system_logs = $16,\n storage_refunds = $17,\n pubdata_costs = $18,\n pubdata_input = $19,\n predicted_circuits_by_type = $20,\n updated_at = NOW(),\n is_sealed = TRUE\n WHERE\n number = $1\n ", + "query": "\n UPDATE l1_batches\n SET\n l1_tx_count = $2,\n l2_tx_count = $3,\n l2_to_l1_messages = $4,\n bloom = $5,\n priority_ops_onchain_data = $6,\n predicted_commit_gas_cost = $7,\n predicted_prove_gas_cost = $8,\n predicted_execute_gas_cost = $9,\n initial_bootloader_heap_content = $10,\n used_contract_hashes = $11,\n bootloader_code_hash = $12,\n default_aa_code_hash = $13,\n evm_emulator_code_hash = $14,\n protocol_version = $15,\n system_logs = $16,\n storage_refunds = $17,\n pubdata_costs = $18,\n pubdata_input = $19,\n predicted_circuits_by_type = $20,\n updated_at = NOW(),\n sealed_at = NOW(),\n is_sealed = TRUE\n WHERE\n number = $1\n ", "describe": { "columns": [], "parameters": { @@ -29,5 +29,5 @@ }, "nullable": [] }, - "hash": "746d8b62d576b4b9596458aa865e0294e53eb37c1a2dbcc3044b8311200d549a" + "hash": "6069d168d5c4b5131b50500302cdde79388b62926ff83d954b4d93dedfe2503a" } diff --git a/core/lib/dal/.sqlx/query-6ec93ebdd58bdc0259d98ef5ae0d087ed816920e8e75a163b87a19e39db86227.json b/core/lib/dal/.sqlx/query-6ec93ebdd58bdc0259d98ef5ae0d087ed816920e8e75a163b87a19e39db86227.json new file mode 100644 index 000000000000..bdc6b007e9df --- /dev/null +++ b/core/lib/dal/.sqlx/query-6ec93ebdd58bdc0259d98ef5ae0d087ed816920e8e75a163b87a19e39db86227.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n sealed_at\n FROM\n l1_batches\n WHERE\n number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "sealed_at", + "type_info": "Timestamp" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + true + ] + }, + "hash": "6ec93ebdd58bdc0259d98ef5ae0d087ed816920e8e75a163b87a19e39db86227" +} diff --git a/core/lib/dal/migrations/20241108051505_sealed_at.down.sql b/core/lib/dal/migrations/20241108051505_sealed_at.down.sql new file mode 100644 index 000000000000..6e20a782e7a4 --- /dev/null +++ b/core/lib/dal/migrations/20241108051505_sealed_at.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE l1_batches DROP COLUMN IF EXISTS sealed_at; diff --git a/core/lib/dal/migrations/20241108051505_sealed_at.up.sql b/core/lib/dal/migrations/20241108051505_sealed_at.up.sql new file mode 100644 index 000000000000..e442fd6bf309 --- /dev/null +++ b/core/lib/dal/migrations/20241108051505_sealed_at.up.sql @@ -0,0 +1,2 @@ +-- add a sealed_at column for metrics +ALTER TABLE l1_batches ADD COLUMN sealed_at TIMESTAMP; diff --git a/core/lib/dal/src/blocks_dal.rs b/core/lib/dal/src/blocks_dal.rs index 943aa12caf75..0cb607a304e2 100644 --- a/core/lib/dal/src/blocks_dal.rs +++ b/core/lib/dal/src/blocks_dal.rs @@ -7,6 +7,7 @@ use std::{ use anyhow::Context as _; use bigdecimal::{BigDecimal, FromPrimitive, ToPrimitive}; +use sqlx::types::chrono::{DateTime, Utc}; use zksync_db_connection::{ connection::Connection, error::{DalResult, SqlxContext}, @@ -742,6 +743,7 @@ impl BlocksDal<'_, '_> { pubdata_input = $19, predicted_circuits_by_type = $20, updated_at = NOW(), + sealed_at = NOW(), is_sealed = TRUE WHERE number = $1 @@ -2394,6 +2396,28 @@ impl BlocksDal<'_, '_> { .flatten()) } + pub async fn get_batch_sealed_at( + &mut self, + l1_batch_number: L1BatchNumber, + ) -> DalResult>> { + Ok(sqlx::query!( + r#" + SELECT + sealed_at + FROM + l1_batches + WHERE + number = $1 + "#, + i64::from(l1_batch_number.0) + ) + .instrument("get_batch_sealed_at") + .with_arg("l1_batch_number", &l1_batch_number) + .fetch_optional(self.storage) + .await? + .and_then(|row| row.sealed_at.map(|d| d.and_utc()))) + } + pub async fn set_protocol_version_for_pending_l2_blocks( &mut self, id: ProtocolVersionId, diff --git a/core/lib/types/src/debug_flat_call.rs b/core/lib/types/src/debug_flat_call.rs index 5809026e521c..3488b0e5b42c 100644 --- a/core/lib/types/src/debug_flat_call.rs +++ b/core/lib/types/src/debug_flat_call.rs @@ -16,6 +16,7 @@ pub struct DebugCallFlat { pub action: Action, pub result: Option, pub subtraces: usize, + pub error: Option, pub trace_address: Vec, pub transaction_position: usize, pub transaction_hash: H256, diff --git a/core/node/api_server/src/web3/namespaces/debug.rs b/core/node/api_server/src/web3/namespaces/debug.rs index 726f35ac29a9..4fd32c1b5223 100644 --- a/core/node/api_server/src/web3/namespaces/debug.rs +++ b/core/node/api_server/src/web3/namespaces/debug.rs @@ -96,13 +96,16 @@ impl DebugNamespace { CallType::NearCall => unreachable!("We have to filter our near calls before"), }; - let result = if call.error.is_none() { - Some(CallResult { - output: web3::Bytes::from(call.output), - gas_used: U256::from(call.gas_used), - }) + let (result, error) = if let Some(error) = call.revert_reason { + (None, Some(error)) } else { - None + ( + Some(CallResult { + output: web3::Bytes::from(call.output), + gas_used: U256::from(call.gas_used), + }), + None, + ) }; calls.push(DebugCallFlat { @@ -116,6 +119,7 @@ impl DebugNamespace { }, result, subtraces, + error, trace_address: trace_address.clone(), // Clone the current trace address transaction_position: meta.index_in_block, transaction_hash: meta.tx_hash, diff --git a/core/node/proof_data_handler/Cargo.toml b/core/node/proof_data_handler/Cargo.toml index 1bcda394a674..639266a2be96 100644 --- a/core/node/proof_data_handler/Cargo.toml +++ b/core/node/proof_data_handler/Cargo.toml @@ -11,6 +11,7 @@ keywords.workspace = true categories.workspace = true [dependencies] +chrono.workspace = true vise.workspace = true zksync_config.workspace = true zksync_dal.workspace = true diff --git a/core/node/proof_data_handler/src/metrics.rs b/core/node/proof_data_handler/src/metrics.rs index edccda90dc24..233db15aa0dd 100644 --- a/core/node/proof_data_handler/src/metrics.rs +++ b/core/node/proof_data_handler/src/metrics.rs @@ -1,6 +1,9 @@ -use vise::{Histogram, Metrics}; +use std::{fmt, time::Duration}; + +use vise::{EncodeLabelSet, EncodeLabelValue, Family, Histogram, Metrics, Unit}; use zksync_object_store::bincode; use zksync_prover_interface::inputs::WitnessInputData; +use zksync_types::tee_types::TeeType; const BYTES_IN_MEGABYTE: u64 = 1024 * 1024; @@ -14,6 +17,24 @@ pub(super) struct ProofDataHandlerMetrics { pub eip_4844_blob_size_in_mb: Histogram, #[metrics(buckets = vise::Buckets::exponential(1.0..=2_048.0, 2.0))] pub total_blob_size_in_mb: Histogram, + #[metrics(buckets = vise::Buckets::LATENCIES, unit = Unit::Seconds)] + pub tee_proof_roundtrip_time: Family>, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash, EncodeLabelSet, EncodeLabelValue)] +#[metrics(label = "tee_type")] +pub(crate) struct MetricsTeeType(pub TeeType); + +impl fmt::Display for MetricsTeeType { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + self.0.fmt(formatter) + } +} + +impl From for MetricsTeeType { + fn from(value: TeeType) -> Self { + Self(value) + } } impl ProofDataHandlerMetrics { diff --git a/core/node/proof_data_handler/src/tee_request_processor.rs b/core/node/proof_data_handler/src/tee_request_processor.rs index b265b94d4d74..ee5be844b981 100644 --- a/core/node/proof_data_handler/src/tee_request_processor.rs +++ b/core/node/proof_data_handler/src/tee_request_processor.rs @@ -1,6 +1,7 @@ use std::sync::Arc; use axum::{extract::Path, Json}; +use chrono::Utc; use zksync_config::configs::ProofDataHandlerConfig; use zksync_dal::{ConnectionPool, Core, CoreDal}; use zksync_object_store::{ObjectStore, ObjectStoreError}; @@ -16,7 +17,7 @@ use zksync_prover_interface::{ use zksync_types::{tee_types::TeeType, L1BatchNumber, L2ChainId}; use zksync_vm_executor::storage::L1BatchParamsProvider; -use crate::errors::RequestProcessorError; +use crate::{errors::RequestProcessorError, metrics::METRICS}; #[derive(Clone)] pub(crate) struct TeeRequestProcessor { @@ -194,11 +195,6 @@ impl TeeRequestProcessor { let mut connection = self.pool.connection_tagged("tee_request_processor").await?; let mut dal = connection.tee_proof_generation_dal(); - tracing::info!( - "Received proof {:?} for batch number: {:?}", - proof, - l1_batch_number - ); dal.save_proof_artifacts_metadata( l1_batch_number, proof.0.tee_type, @@ -208,6 +204,27 @@ impl TeeRequestProcessor { ) .await?; + let sealed_at = connection + .blocks_dal() + .get_batch_sealed_at(l1_batch_number) + .await?; + + let duration = sealed_at.and_then(|sealed_at| (Utc::now() - sealed_at).to_std().ok()); + + let duration_secs_f64 = if let Some(duration) = duration { + METRICS.tee_proof_roundtrip_time[&proof.0.tee_type.into()].observe(duration); + duration.as_secs_f64() + } else { + f64::NAN + }; + + tracing::info!( + l1_batch_number = %l1_batch_number, + sealed_to_proven_in_secs = duration_secs_f64, + "Received proof {:?}", + proof + ); + Ok(Json(SubmitProofResponse::Success)) } diff --git a/prover/CHANGELOG.md b/prover/CHANGELOG.md index 6687b1450ba0..d30076cddcf1 100644 --- a/prover/CHANGELOG.md +++ b/prover/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## [17.1.0](https://github.com/matter-labs/zksync-era/compare/prover-v17.0.0...prover-v17.1.0) (2024-11-18) + + +### Features + +* Add min_replicas for SimpleScaler, apply_min_to_namespace config ([#3282](https://github.com/matter-labs/zksync-era/issues/3282)) ([bc00c4a](https://github.com/matter-labs/zksync-era/commit/bc00c4a44a212def3cc25567f3b271530d76b6a4)) +* allow vm2 tracers to stop execution ([#3183](https://github.com/matter-labs/zksync-era/issues/3183)) ([9dae839](https://github.com/matter-labs/zksync-era/commit/9dae839935d82a1e73be220d17567f3382131039)) +* **contract-verifier:** Support Solidity contracts with EVM bytecode in contract verifier ([#3225](https://github.com/matter-labs/zksync-era/issues/3225)) ([8a3a82c](https://github.com/matter-labs/zksync-era/commit/8a3a82ca16479183e96505bc91011fc07bfc6889)) +* **prover:** Add cluster name autodetection ([#3227](https://github.com/matter-labs/zksync-era/issues/3227)) ([bd32aec](https://github.com/matter-labs/zksync-era/commit/bd32aecdf982c51202c1a69d12fcf1d878fe6d05)) +* **prover:** Add queue metric to report autoscaler view of the queue. ([#3206](https://github.com/matter-labs/zksync-era/issues/3206)) ([2721396](https://github.com/matter-labs/zksync-era/commit/272139690e028d3bdebdb6bcb1824fec23cefd0f)) +* ProverJobProcessor & circuit prover ([#3287](https://github.com/matter-labs/zksync-era/issues/3287)) ([98823f9](https://github.com/matter-labs/zksync-era/commit/98823f95c0b95feeb37eb9086cc88d4ac5220904)) +* **prover:** Move prover_autoscaler config into crate ([#3222](https://github.com/matter-labs/zksync-era/issues/3222)) ([1b33b5e](https://github.com/matter-labs/zksync-era/commit/1b33b5e9ec04bea0010350798332a90413c482d3)) + + +### Bug Fixes + +* **prover:** Remove unneeded dependencies, add default for graceful_shutdown_timeout ([#3242](https://github.com/matter-labs/zksync-era/issues/3242)) ([1bfff0e](https://github.com/matter-labs/zksync-era/commit/1bfff0e007e2fb5a4b4b885cf5c69a5cd290888b)) + ## [17.0.0](https://github.com/matter-labs/zksync-era/compare/prover-v16.6.0...prover-v17.0.0) (2024-10-31) diff --git a/prover/docs/src/00_intro.md b/prover/docs/src/00_intro.md index fb79cf5bed0e..cae59ae1a28f 100644 --- a/prover/docs/src/00_intro.md +++ b/prover/docs/src/00_intro.md @@ -30,19 +30,19 @@ prover subsystem as well. We'll cover how the components work further in documentation. -[pg]: ../crates/bin/prover_fri_gateway/ -[wg]: ../crates/bin/witness_generator/ -[wvg]: ../crates/bin/witness_vector_generator/ -[p]: ../crates/bin/prover_fri/ -[pc]: ../crates/bin/proof_fri_compressor/ -[pdh]: ../../core/node/proof_data_handler/ -[hk]: ../../core/node/house_keeper/ -[vkg]: ../crates/bin/prover_cli/ -[pcli]: ../crates/bin/vk_setup_data_generator_server_fri/ -[mc]: ../../core/node/metadata_calculator/ -[cg]: ../../core/node/commitment_generator/ -[bwip]: ../../core/node/vm_runner/src/impls/bwip.rs -[prw]: ../../core/node/vm_runner/src/impls/protective_reads.rs +[pg]: https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/prover_fri_gateway +[wg]: https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/witness_generator +[wvg]: https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/witness_vector_generator +[p]: https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/prover_fri +[pc]: https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/proof_fri_compressor +[pdh]: https://github.com/matter-labs/zksync-era/tree/main/core/node/proof_data_handler +[hk]: https://github.com/matter-labs/zksync-era/tree/main/core/node/house_keeper +[vkg]: https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/vk_setup_data_generator_server_fri +[pcli]: https://github.com/matter-labs/zksync-era/tree/main/prover/crates/bin/prover_cli +[mc]: https://github.com/matter-labs/zksync-era/tree/main/core/node/metadata_calculator +[cg]: https://github.com/matter-labs/zksync-era/tree/main/core/node/commitment_generator +[bwip]: https://github.com/matter-labs/zksync-era/blob/main/core/node/vm_runner/src/impls/bwip.rs +[prw]: https://github.com/matter-labs/zksync-era/blob/main/core/node/vm_runner/src/impls/protective_reads.rs ## How it runs diff --git a/prover/docs/src/02_setup.md b/prover/docs/src/02_setup.md index 67c2b0b945ff..615a71be291c 100644 --- a/prover/docs/src/02_setup.md +++ b/prover/docs/src/02_setup.md @@ -6,7 +6,7 @@ machine in place, e.g. a compatible local machine or a prepared GCP VM. ## ZKsync repo setup If you haven't already, you need to initialize the ZKsync repository first. Follow -[this guide](../../docs/guides/setup-dev.md) for that. +[this guide](https://matter-labs.github.io/zksync-era/core/latest/guides/setup-dev.html) for that. Before proceeding, make sure that you can run the server and integration tests pass. diff --git a/prover/docs/src/05_proving_batch.md b/prover/docs/src/05_proving_batch.md index c35de975bf71..6bcf57a06a40 100644 --- a/prover/docs/src/05_proving_batch.md +++ b/prover/docs/src/05_proving_batch.md @@ -18,7 +18,7 @@ First of all, you need to install CUDA drivers, all other things will be dealt w For that, check the following [guide](./02_setup.md)(you can skip bellman-cuda step). Install the prerequisites, which you can find -[here](https://github.com/matter-labs/zksync-era/blob/main/docs/guides/setup-dev.md). Note, that if you are not using +[here](https://matter-labs.github.io/zksync-era/core/latest/guides/setup-dev.html). Note, that if you are not using Google VM instance, you also need to install [gcloud](https://cloud.google.com/sdk/docs/install#deb). Now, you can use `zkstack` and `prover_cli` tools for setting up the env and running prover subsystem. diff --git a/prover/docs/src/99_further_reading.md b/prover/docs/src/99_further_reading.md index 7b916167dbdd..98a2d6b4337f 100644 --- a/prover/docs/src/99_further_reading.md +++ b/prover/docs/src/99_further_reading.md @@ -9,6 +9,6 @@ However, we have some documentation that is more focused on theory of proving in You may find the following articles helpful for general understanding of ZK proofs: - [ZK intuition](https://matter-labs.github.io/zksync-era/core/latest/guides/advanced/13_zk_intuition.html). -- [ZK deeper overview](https://matter-labs.github.io/zksync-era/core/latest/docs/guides/advanced/14_zk_deeper_overview.html). -- [Prover keys](https://matter-labs.github.io/zksync-era/core/latest/docs/guides/advanced/15_prover_keys.html). +- [ZK deeper overview](https://matter-labs.github.io/zksync-era/core/latest/guides/advanced/14_zk_deeper_overview.html). +- [Prover keys](https://matter-labs.github.io/zksync-era/core/latest/guides/advanced/15_prover_keys.html). - [Overview of our ZK proving system implementation](https://matter-labs.github.io/zksync-era/core/latest/specs/prover/overview.html).