From 21107b7a4d3649fd48dc6a67bb778b2cca208cab Mon Sep 17 00:00:00 2001 From: Carter Feldman Date: Sun, 9 Jun 2024 04:12:38 +0800 Subject: [PATCH 01/16] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7908967..d9d9775 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

City Rollup

+

City Rollup

City Rollup

From 74f92bcf9e9d2f73f2f49176f817fcd1f746840b Mon Sep 17 00:00:00 2001 From: GopherJ Date: Wed, 12 Jun 2024 11:02:51 +0800 Subject: [PATCH 02/16] update requirements Signed-off-by: GopherJ --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d9d9775..0555751 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ - docker - docker-compose - go +- librocksdb-dev +- jq - rust toolchain From fe3640f1ddcdee16df197aecf15faf3c57bb425e Mon Sep 17 00:00:00 2001 From: GopherJ Date: Wed, 12 Jun 2024 15:09:33 +0800 Subject: [PATCH 03/16] fix queue order Signed-off-by: GopherJ --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fb1d7d0..15d147f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4642,7 +4642,7 @@ checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[package]] name = "rsmq" version = "9.0.0" -source = "git+https://github.com/GopherJ/rsmq-async-rs?rev=72358a7c4b946ff01515e111ccbe8b0f8a04ede2#72358a7c4b946ff01515e111ccbe8b0f8a04ede2" +source = "git+https://github.com/GopherJ/rsmq-async-rs?rev=2af5a5c06a0341cb60f73ba0f0af066f65fb5e77#2af5a5c06a0341cb60f73ba0f0af066f65fb5e77" dependencies = [ "lazy_static", "r2d2", diff --git a/Cargo.toml b/Cargo.toml index 3038a53..a70c79d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -110,7 +110,7 @@ env_logger = { version = "0.9.0", default-features = false } hashbrown = { version = "0.14.3", default-features = false, features = ["ahash", "serde"] } # NOTE: When upgrading, see `ahash` dependency. url = "2.5.0" redis = { version = "^0.25", default-features = false, features = ["acl", "keep-alive", "script"] } -rsmq = { git = "https://github.com/GopherJ/rsmq-async-rs", rev = "72358a7c4b946ff01515e111ccbe8b0f8a04ede2", default-features = false } +rsmq = { git = "https://github.com/GopherJ/rsmq-async-rs", rev = "2af5a5c06a0341cb60f73ba0f0af066f65fb5e77", default-features = false } r2d2 = { git = "https://github.com/GopherJ/r2d2", rev = "976ca74a74871d78764da2a040edcadad1af9be9" } r2d2_redis = { git = "https://github.com/GopherJ/r2d2-redis", rev = "63be37454cf441b832251aa915b1a9cb8bc27bff" } From 71e3d0931deda1e06b5f63959bbcb9df5ff9d475 Mon Sep 17 00:00:00 2001 From: GopherJ Date: Thu, 13 Jun 2024 16:21:57 +0800 Subject: [PATCH 04/16] use pure rust kv Signed-off-by: GopherJ --- .gitignore | 2 +- Cargo.lock | 81 +------- Cargo.toml | 4 +- Makefile | 2 +- README.md | 1 - city_rollup_core_api/Cargo.toml | 3 +- city_rollup_core_api/src/lib.rs | 240 ++++++++++++++++------- city_rollup_core_orchestrator/Cargo.toml | 3 +- city_rollup_core_orchestrator/src/lib.rs | 172 ++++++++-------- 9 files changed, 277 insertions(+), 231 deletions(-) diff --git a/.gitignore b/.gitignore index d70d273..c84b507 100644 --- a/.gitignore +++ b/.gitignore @@ -41,7 +41,7 @@ coverage.json logs/ chaindata/ ordhook-data/ -db/ +db redis-data/ blocks/ hints.json diff --git a/Cargo.lock b/Cargo.lock index 15d147f..9d35daa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -299,27 +299,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bindgen" -version = "0.65.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" -dependencies = [ - "bitflags 1.2.1", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "peeking_take_while", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn 2.0.64", -] - [[package]] name = "bindgen" version = "0.69.4" @@ -902,12 +881,13 @@ dependencies = [ "anyhow", "city_common", "city_crypto", + "city_macros", "city_rollup_common", "city_store", "futures", "hex", "jsonrpsee", - "kvq_store_rocksdb", + "kvq_store_redb", "redb", "tokio", ] @@ -972,10 +952,11 @@ dependencies = [ "hex-literal", "k256", "kvq", - "kvq_store_rocksdb", + "kvq_store_redb", "plonky2", "rand", "rand_chacha", + "redb", "redis", "reqwest", "serde", @@ -2487,7 +2468,7 @@ version = "0.1.0" source = "git+https://github.com/cf/gnark-plonky2-verifier?rev=75681e2a0e20270734f082145d13cdfe3349d009#75681e2a0e20270734f082145d13cdfe3349d009" dependencies = [ "anyhow", - "bindgen 0.69.4", + "bindgen", "gobuild", "libc", ] @@ -3294,15 +3275,6 @@ dependencies = [ "redb", ] -[[package]] -name = "kvq_store_rocksdb" -version = "0.1.0" -dependencies = [ - "anyhow", - "kvq", - "rocksdb", -] - [[package]] name = "lalrpop" version = "0.20.2" @@ -3389,22 +3361,6 @@ dependencies = [ "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 = "libz-sys" version = "1.1.16" @@ -3439,16 +3395,6 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" -[[package]] -name = "lz4-sys" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "matchers" version = "0.1.0" @@ -3922,12 +3868,6 @@ dependencies = [ "hmac", ] -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - [[package]] name = "pem" version = "1.1.1" @@ -4622,17 +4562,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "rocksdb" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" -dependencies = [ - "libc", - "librocksdb-sys", - "serde", -] - [[package]] name = "route-recognizer" version = "0.3.1" diff --git a/Cargo.toml b/Cargo.toml index a70c79d..ad48a7d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = [ "city_macros", "kvq", "kvq_store_redb", - "kvq_store_rocksdb", + # "kvq_store_rocksdb", "city_rollup_cli", "city_rollup_user_cli", "city_rollup_dev_cli", @@ -19,7 +19,7 @@ members = [ "city_rollup_worker_dispatch", "city_rollup_core_orchestrator", "city_rollup_core_api", - "city_rollup_rpc_provider" ] + "city_rollup_rpc_provider"] resolver = "2" [workspace.dependencies] diff --git a/Makefile b/Makefile index 37cc11b..e6246fc 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ TRACE_ENABLED := 1 PROFILE := release LOG_LEVEL := info,city_common_circuit=off,city_rollup_circuit=off,plonky2=off,city_crypto=off,city_store=off,city_rollup_common=off -DOCKER_PROFILE := lite +DOCKER_PROFILE := full .PHONY: check check: diff --git a/README.md b/README.md index 0555751..e69e7dc 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,6 @@ - docker - docker-compose - go -- librocksdb-dev - jq - rust toolchain diff --git a/city_rollup_core_api/Cargo.toml b/city_rollup_core_api/Cargo.toml index a95ecbb..dc41743 100644 --- a/city_rollup_core_api/Cargo.toml +++ b/city_rollup_core_api/Cargo.toml @@ -8,10 +8,11 @@ jsonrpsee = { workspace = true } tokio = { workspace = true } anyhow = { workspace = true } redb = { workspace = true } -kvq_store_rocksdb = { path = "../kvq_store_rocksdb" } +kvq_store_redb = { path = "../kvq_store_redb" } city_store = { path = "../city_store" } city_common = { path = "../city_common" } city_rollup_common = { path = "../city_rollup_common" } +city_macros = { path = "../city_macros" } city_crypto = { path = "../city_crypto" } hex = { workspace = true } futures = { workspace = true } diff --git a/city_rollup_core_api/src/lib.rs b/city_rollup_core_api/src/lib.rs index 858bbf7..488f26b 100644 --- a/city_rollup_core_api/src/lib.rs +++ b/city_rollup_core_api/src/lib.rs @@ -1,6 +1,8 @@ +use std::sync::Arc; use city_crypto::hash::base_types::hash160::Hash160; use city_crypto::hash::base_types::hash256::Hash256; +use city_macros::define_table; use city_rollup_common::api::data::store::{ CityL1Deposit, CityL1Withdrawal, CityL2BlockState, CityUserState, }; @@ -10,7 +12,10 @@ use jsonrpsee::core::async_trait; use jsonrpsee::proc_macros::rpc; use jsonrpsee::server::Server; use jsonrpsee::types::{ErrorCode, ErrorObject, ErrorObjectOwned}; -use kvq_store_rocksdb::KVQRocksDBStore; +use kvq_store_redb::KVQReDBStore; +use redb::{Database, ReadOnlyTable, TableDefinition}; + +define_table! { KV, &[u8], &[u8] } #[rpc(server, client, namespace = "cr")] pub trait Rpc { @@ -159,13 +164,26 @@ pub trait Rpc { #[derive(Clone)] pub struct RpcServerImpl { - db: KVQRocksDBStore, + db: Arc, +} + +impl RpcServerImpl { + pub fn query_store( + &self, + f: impl FnOnce(KVQReDBStore>) -> anyhow::Result, + ) -> anyhow::Result { + let rxn = self.db.begin_read()?; + let table = rxn.open_table(KV)?; + + f(KVQReDBStore::new(table)) + } } #[async_trait] impl RpcServer for RpcServerImpl { async fn get_user_tree_root(&self, checkpoint_id: u64) -> Result { - Ok(CityStore::get_user_tree_root(&self.db, checkpoint_id) + Ok(self + .query_store(|store| Ok(CityStore::get_user_tree_root(&store, checkpoint_id)?)) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } @@ -174,7 +192,8 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, user_id: u64, ) -> Result { - Ok(CityStore::get_user_by_id(&self.db, checkpoint_id, user_id) + Ok(self + .query_store(|store| Ok(CityStore::get_user_by_id(&store, checkpoint_id, user_id)?)) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } @@ -182,7 +201,8 @@ impl RpcServer for RpcServerImpl { &self, public_key: CityHash, ) -> Result, ErrorObjectOwned> { - Ok(CityStore::get_user_ids_for_public_key(&self.db, public_key) + Ok(self + .query_store(|store| Ok(CityStore::get_user_ids_for_public_key(&store, public_key)?)) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } @@ -191,10 +211,15 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, user_id: u64, ) -> Result { - Ok( - CityStore::get_user_merkle_proof_by_id(&self.db, checkpoint_id, user_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_user_merkle_proof_by_id( + &store, + checkpoint_id, + user_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_user_tree_leaf( @@ -202,10 +227,15 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, leaf_id: u64, ) -> Result { - Ok( - CityStore::get_user_tree_leaf(&self.db, checkpoint_id, leaf_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_user_tree_leaf( + &store, + checkpoint_id, + leaf_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_user_tree_leaf_merkle_proof( @@ -213,17 +243,23 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, leaf_id: u64, ) -> Result { - Ok( - CityStore::get_user_tree_leaf_merkle_proof(&self.db, checkpoint_id, leaf_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_user_tree_leaf_merkle_proof( + &store, + checkpoint_id, + leaf_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_deposit_tree_root( &self, checkpoint_id: u64, ) -> Result { - Ok(CityStore::get_deposit_tree_root(&self.db, checkpoint_id) + Ok(self + .query_store(|store| Ok(CityStore::get_deposit_tree_root(&store, checkpoint_id)?)) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } @@ -232,10 +268,15 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, deposit_id: u64, ) -> Result { - Ok( - CityStore::get_deposit_by_id(&self.db, checkpoint_id, deposit_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_deposit_by_id( + &store, + checkpoint_id, + deposit_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_deposits_by_id( @@ -243,17 +284,28 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, deposit_ids: Vec, ) -> Result, ErrorObjectOwned> { - Ok( - CityStore::get_deposits_by_id(&self.db, checkpoint_id, &deposit_ids) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_deposits_by_id( + &store, + checkpoint_id, + &deposit_ids, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_deposit_by_txid( &self, transaction_id: Hash256, ) -> Result { - Ok(CityStore::get_deposit_by_txid(&self.db, transaction_id.reversed()) + Ok(self + .query_store(|store| { + Ok(CityStore::get_deposit_by_txid( + &store, + transaction_id.reversed(), + )?) + }) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } @@ -261,7 +313,16 @@ impl RpcServer for RpcServerImpl { &self, transaction_ids: Vec, ) -> Result, ErrorObjectOwned> { - Ok(CityStore::get_deposits_by_txid(&self.db, &transaction_ids.into_iter().map(|x|x.reversed()).collect::>()) + Ok(self + .query_store(|store| { + Ok(CityStore::get_deposits_by_txid( + &store, + &transaction_ids + .into_iter() + .map(|x| x.reversed()) + .collect::>(), + )?) + }) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } @@ -270,10 +331,15 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, deposit_id: u64, ) -> Result { - Ok( - CityStore::get_deposit_hash(&self.db, checkpoint_id, deposit_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_deposit_hash( + &store, + checkpoint_id, + deposit_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_deposit_leaf_merkle_proof( @@ -281,33 +347,42 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, deposit_id: u64, ) -> Result { - Ok( - CityStore::get_deposit_leaf_merkle_proof(&self.db, checkpoint_id, deposit_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_deposit_leaf_merkle_proof( + &store, + checkpoint_id, + deposit_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_block_state( &self, checkpoint_id: u64, ) -> Result { - Ok(CityStore::get_block_state(&self.db, checkpoint_id) + Ok(self + .query_store(|store| Ok(CityStore::get_block_state(&store, checkpoint_id)?)) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_latest_block_state(&self) -> Result { - Ok(CityStore::get_latest_block_state(&self.db) + Ok(self + .query_store(|store| Ok(CityStore::get_latest_block_state(&store)?)) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_city_root(&self, checkpoint_id: u64) -> Result { - Ok(CityStore::get_city_root(&self.db, checkpoint_id) + Ok(self + .query_store(|store| Ok(CityStore::get_city_root(&store, checkpoint_id)?)) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_city_block_script(&self, checkpoint_id: u64) -> Result { Ok(hex::encode( - &CityStore::get_city_block_script(&self.db, checkpoint_id) + &self + .query_store(|store| Ok(CityStore::get_city_block_script(&store, checkpoint_id)?)) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, )) } @@ -316,30 +391,37 @@ impl RpcServer for RpcServerImpl { &self, checkpoint_id: u64, ) -> Result { - Ok( - CityStore::get_city_block_deposit_address(&self.db, checkpoint_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_city_block_deposit_address( + &store, + checkpoint_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_city_block_deposit_address_string( &self, checkpoint_id: u64, ) -> Result { - Ok( - CityStore::get_city_block_deposit_address_string(&self.db, checkpoint_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_city_block_deposit_address_string( + &store, + checkpoint_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_withdrawal_tree_root( &self, checkpoint_id: u64, ) -> Result { - Ok( - CityStore::get_withdrawal_tree_root(&self.db, checkpoint_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| Ok(CityStore::get_withdrawal_tree_root(&store, checkpoint_id)?)) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_withdrawal_by_id( @@ -347,10 +429,15 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, withdrawal_id: u64, ) -> Result { - Ok( - CityStore::get_withdrawal_by_id(&self.db, checkpoint_id, withdrawal_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_withdrawal_by_id( + &store, + checkpoint_id, + withdrawal_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_withdrawals_by_id( @@ -358,10 +445,15 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, withdrawal_ids: Vec, ) -> Result, ErrorObjectOwned> { - Ok( - CityStore::get_withdrawals_by_id(&self.db, checkpoint_id, &withdrawal_ids) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_withdrawals_by_id( + &store, + checkpoint_id, + &withdrawal_ids, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_withdrawal_hash( @@ -369,10 +461,15 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, withdrawal_id: u64, ) -> Result { - Ok( - CityStore::get_withdrawal_hash(&self.db, checkpoint_id, withdrawal_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_withdrawal_hash( + &store, + checkpoint_id, + withdrawal_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } async fn get_withdrawal_leaf_merkle_proof( @@ -380,14 +477,19 @@ impl RpcServer for RpcServerImpl { checkpoint_id: u64, withdrawal_id: u64, ) -> Result { - Ok( - CityStore::get_withdrawal_leaf_merkle_proof(&self.db, checkpoint_id, withdrawal_id) - .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, - ) + Ok(self + .query_store(|store| { + Ok(CityStore::get_withdrawal_leaf_merkle_proof( + &store, + checkpoint_id, + withdrawal_id, + )?) + }) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) } } -pub async fn run_server(server_addr: String, db: KVQRocksDBStore) -> anyhow::Result<()> { +pub async fn run_server(server_addr: String, db: Arc) -> anyhow::Result<()> { let server = Server::builder().build(server_addr).await?; let rpc_server_impl = RpcServerImpl { db }; diff --git a/city_rollup_core_orchestrator/Cargo.toml b/city_rollup_core_orchestrator/Cargo.toml index 849042b..f5f0cba 100644 --- a/city_rollup_core_orchestrator/Cargo.toml +++ b/city_rollup_core_orchestrator/Cargo.toml @@ -31,7 +31,8 @@ redis = { workspace = true } city_macros = { path = "../city_macros" } city_redis_store = { path = "../city_redis_store" } city_rollup_circuit = { path = "../city_rollup_circuit" } -kvq_store_rocksdb = { path = "../kvq_store_rocksdb" } +kvq_store_redb = { path = "../kvq_store_redb" } +redb = { workspace = true } hex-literal = { workspace = true } tracing = { workspace = true } diff --git a/city_rollup_core_orchestrator/src/lib.rs b/city_rollup_core_orchestrator/src/lib.rs index a3be1a2..0d7f5a6 100644 --- a/city_rollup_core_orchestrator/src/lib.rs +++ b/city_rollup_core_orchestrator/src/lib.rs @@ -1,4 +1,4 @@ -use std::time::Duration; +use std::{sync::Arc, time::Duration}; use city_common::{cli::args::OrchestratorArgs, units::UNIT_BTC}; use city_crypto::hash::{base_types::hash256::Hash256, qhashout::QHashOut}; @@ -19,11 +19,13 @@ use city_rollup_common::{ }, qworker::fingerprints::CRWorkerToolboxCoreCircuitFingerprints, }; +use city_rollup_core_api::KV; use city_rollup_core_worker::event_processor::CityEventProcessor; use city_rollup_worker_dispatch::implementations::redis::RedisQueue; use city_store::store::{city::base::CityStore, sighash::SigHashMerkleTree}; -use kvq_store_rocksdb::KVQRocksDBStore; +use kvq_store_redb::KVQReDBStore; use plonky2::{field::goldilocks_field::GoldilocksField, plonk::config::PoseidonGoldilocksConfig}; +use redb::Database; use crate::{ debug::scenario::{actors::simple::SimpleActorOrchestrator, wallet::DebugScenarioWallet}, @@ -42,13 +44,12 @@ pub fn run(args: OrchestratorArgs) -> anyhow::Result<()> { let queue = RedisQueue::new(&args.redis_uri)?; let mut event_processor = CityEventProcessor::new(queue.clone()); let fingerprints: CRWorkerToolboxCoreCircuitFingerprints = serde_json::from_str( - /* + /* r#" {"network_magic":1384803358401167209,"zk_signature_wrapper":"2efad90d446638deb0af8cdc8efec541a82ee5ab2b6d221bd7d57af5885fe480","l1_secp256k1_signature":"0e06b3318325a6e4b2611b75767a366f79d50c039967f13760fe106d8560735b","op_register_user":{"leaf_fingerprint":"3b3c690b289d78d2e2acd9678d919f34534cbb1946a4edab39687951b2d8df3b","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"1860a3680b473aaea4f1a26f855890bb325fee1f1019b5a160483fd4f30294f8","leaf_circuit_type":0,"aggregator_circuit_type":1},"op_claim_l1_deposit":{"leaf_fingerprint":"e21b3c53d7f942bfca301943124794dd8ccefd6093ea490669ffd19ca26c0226","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"7fa5739771d7275eb11230444803a58f62918509b42db403b9670f3adc9fc9cc","leaf_circuit_type":4,"aggregator_circuit_type":5},"op_l2_transfer":{"leaf_fingerprint":"4e48381c9e08a9b592a088fa03dfd9e7935af7a0636ea420901b0a28cb9c55df","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"f47cf0cc794240b402d3356facfcdc20dafc5b0769de4cd24ec7ac464c12f34a","leaf_circuit_type":6,"aggregator_circuit_type":7},"op_add_l1_withdrawal":{"leaf_fingerprint":"db3e0e786e52f327d16d1b4329694cebc908674e72a4a92a2746f64b279f05e4","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"f353c1583cf9de84e8344b3b58d496b92c34016929f36a23bcc556fe434e3f59","leaf_circuit_type":8,"aggregator_circuit_type":9},"op_add_l1_deposit":{"leaf_fingerprint":"9cbbe2dd4a47b04a15441ccbfe95264130c22d6387cc9cab15c50c2fbeb6b3a8","aggregator_fingerprint":"a97d6231eaba54ccd65185134b7e830562540d933598d9decc6ec36bf4f632d5","dummy_fingerprint":"081162f1ae48232a6d4a1e9c35adc0b4f2349fcaa740fa6034a7542e0ed1e5ca","allowed_circuit_hashes_root":"b4a4c9b5f8c9af6e9c76946bb3aff7d6f1471061d67411b07cd4bd3da392fcff","leaf_circuit_type":2,"aggregator_circuit_type":3},"op_process_l1_withdrawal":{"leaf_fingerprint":"9aca81a13566a4529ef78c4385e9e6dddd157f54aef7b23d9501f1ea98541e03","aggregator_fingerprint":"a97d6231eaba54ccd65185134b7e830562540d933598d9decc6ec36bf4f632d5","dummy_fingerprint":"081162f1ae48232a6d4a1e9c35adc0b4f2349fcaa740fa6034a7542e0ed1e5ca","allowed_circuit_hashes_root":"1ef92f20ea565bbfe49d75997e82b965c0887714bb98065a2463b72f555b060b","leaf_circuit_type":10,"aggregator_circuit_type":11},"agg_state_transition":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","agg_state_transition_with_events":"a97d6231eaba54ccd65185134b7e830562540d933598d9decc6ec36bf4f632d5","agg_state_transition_dummy":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","agg_state_transition_with_events_dummy":"081162f1ae48232a6d4a1e9c35adc0b4f2349fcaa740fa6034a7542e0ed1e5ca"} "#,*/ - r#" -{"network_magic":1384803358401167209,"zk_signature_wrapper":"2efad90d446638deb0af8cdc8efec541a82ee5ab2b6d221bd7d57af5885fe480","l1_secp256k1_signature":"0e06b3318325a6e4b2611b75767a366f79d50c039967f13760fe106d8560735b","op_register_user":{"leaf_fingerprint":"3b3c690b289d78d2e2acd9678d919f34534cbb1946a4edab39687951b2d8df3b","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"1860a3680b473aaea4f1a26f855890bb325fee1f1019b5a160483fd4f30294f8","leaf_circuit_type":0,"aggregator_circuit_type":1},"op_claim_l1_deposit":{"leaf_fingerprint":"a97c868fcd025a2763b6c03581729d0108a709eddfdadf209c3eef99a160a50f","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"b397fee16231a678ef08fb1bd7fd4cbca63a12d6ef0d2586a2b5f1dc3cc5b74b","leaf_circuit_type":4,"aggregator_circuit_type":5},"op_l2_transfer":{"leaf_fingerprint":"6e7817a58684785bb726c1c04ed544870b1d86c4b907815ed07694a65a76ad93","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"1c88193a6cde038e1120a42260a015c5247f3710e232aba8306f960cc55e33f2","leaf_circuit_type":6,"aggregator_circuit_type":7},"op_add_l1_withdrawal":{"leaf_fingerprint":"794761e0ceaf2a20be43877eced9db4c938b426c89785cf9d3f4773556086c84","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"cf222a8fa3c1f30f7266ebad8b0bd54c92029a0884ff151c26f8b08af790ff8f","leaf_circuit_type":8,"aggregator_circuit_type":9},"op_add_l1_deposit":{"leaf_fingerprint":"9cbbe2dd4a47b04a15441ccbfe95264130c22d6387cc9cab15c50c2fbeb6b3a8","aggregator_fingerprint":"6133fd6b95240863dc4458e6a6721a2bb37ea8f81080086ed775a32589a85f34","dummy_fingerprint":"081162f1ae48232a6d4a1e9c35adc0b4f2349fcaa740fa6034a7542e0ed1e5ca","allowed_circuit_hashes_root":"f4f90b1affb54b9bc0c110eab2276b943b4e352551c2c31e888d3e93be0a1858","leaf_circuit_type":2,"aggregator_circuit_type":3},"op_process_l1_withdrawal":{"leaf_fingerprint":"9aca81a13566a4529ef78c4385e9e6dddd157f54aef7b23d9501f1ea98541e03","aggregator_fingerprint":"6133fd6b95240863dc4458e6a6721a2bb37ea8f81080086ed775a32589a85f34","dummy_fingerprint":"081162f1ae48232a6d4a1e9c35adc0b4f2349fcaa740fa6034a7542e0ed1e5ca","allowed_circuit_hashes_root":"8c43a100d8e93a1dfdb0c5bb4830b31c4cb948f4e7d84fcc0419798ac331a90f","leaf_circuit_type":10,"aggregator_circuit_type":11},"agg_state_transition":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","agg_state_transition_with_events":"6133fd6b95240863dc4458e6a6721a2bb37ea8f81080086ed775a32589a85f34","agg_state_transition_dummy":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","agg_state_transition_with_events_dummy":"081162f1ae48232a6d4a1e9c35adc0b4f2349fcaa740fa6034a7542e0ed1e5ca"} "# +{"network_magic":1384803358401167209,"zk_signature_wrapper":"2efad90d446638deb0af8cdc8efec541a82ee5ab2b6d221bd7d57af5885fe480","l1_secp256k1_signature":"0e06b3318325a6e4b2611b75767a366f79d50c039967f13760fe106d8560735b","op_register_user":{"leaf_fingerprint":"3b3c690b289d78d2e2acd9678d919f34534cbb1946a4edab39687951b2d8df3b","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"1860a3680b473aaea4f1a26f855890bb325fee1f1019b5a160483fd4f30294f8","leaf_circuit_type":0,"aggregator_circuit_type":1},"op_claim_l1_deposit":{"leaf_fingerprint":"a97c868fcd025a2763b6c03581729d0108a709eddfdadf209c3eef99a160a50f","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"b397fee16231a678ef08fb1bd7fd4cbca63a12d6ef0d2586a2b5f1dc3cc5b74b","leaf_circuit_type":4,"aggregator_circuit_type":5},"op_l2_transfer":{"leaf_fingerprint":"6e7817a58684785bb726c1c04ed544870b1d86c4b907815ed07694a65a76ad93","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"1c88193a6cde038e1120a42260a015c5247f3710e232aba8306f960cc55e33f2","leaf_circuit_type":6,"aggregator_circuit_type":7},"op_add_l1_withdrawal":{"leaf_fingerprint":"794761e0ceaf2a20be43877eced9db4c938b426c89785cf9d3f4773556086c84","aggregator_fingerprint":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","dummy_fingerprint":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","allowed_circuit_hashes_root":"cf222a8fa3c1f30f7266ebad8b0bd54c92029a0884ff151c26f8b08af790ff8f","leaf_circuit_type":8,"aggregator_circuit_type":9},"op_add_l1_deposit":{"leaf_fingerprint":"9cbbe2dd4a47b04a15441ccbfe95264130c22d6387cc9cab15c50c2fbeb6b3a8","aggregator_fingerprint":"6133fd6b95240863dc4458e6a6721a2bb37ea8f81080086ed775a32589a85f34","dummy_fingerprint":"081162f1ae48232a6d4a1e9c35adc0b4f2349fcaa740fa6034a7542e0ed1e5ca","allowed_circuit_hashes_root":"f4f90b1affb54b9bc0c110eab2276b943b4e352551c2c31e888d3e93be0a1858","leaf_circuit_type":2,"aggregator_circuit_type":3},"op_process_l1_withdrawal":{"leaf_fingerprint":"9aca81a13566a4529ef78c4385e9e6dddd157f54aef7b23d9501f1ea98541e03","aggregator_fingerprint":"6133fd6b95240863dc4458e6a6721a2bb37ea8f81080086ed775a32589a85f34","dummy_fingerprint":"081162f1ae48232a6d4a1e9c35adc0b4f2349fcaa740fa6034a7542e0ed1e5ca","allowed_circuit_hashes_root":"8c43a100d8e93a1dfdb0c5bb4830b31c4cb948f4e7d84fcc0419798ac331a90f","leaf_circuit_type":10,"aggregator_circuit_type":11},"agg_state_transition":"6d1911dc4660dc9b2e61a581a5c1608b7ef97c2971e7117e8e121be2dc362dce","agg_state_transition_with_events":"6133fd6b95240863dc4458e6a6721a2bb37ea8f81080086ed775a32589a85f34","agg_state_transition_dummy":"1a408fbe18d03c1c7886cc7f1906a07989535d2a995d4b16eacaa4c739df628b","agg_state_transition_with_events_dummy":"081162f1ae48232a6d4a1e9c35adc0b4f2349fcaa740fa6034a7542e0ed1e5ca"} "#, )?; let mut api = BTCLinkAPI::new_str(&args.bitcoin_rpc, &args.electrs_api); let mut rpc_queue = @@ -74,57 +75,64 @@ pub fn run(args: OrchestratorArgs) -> anyhow::Result<()> { checkpoint_id: 1, ..Default::default() }; - let mut store = KVQRocksDBStore::open_default(&args.db_path)?; - let storec = store.clone(); - std::thread::spawn(move || { - let rt = tokio::runtime::Builder::new_multi_thread() - .enable_all() - .build() - .unwrap(); + let db = Arc::new(Database::create(&args.db_path)?); + let wxn = db.begin_write()?; + { + let table = wxn.open_table(KV)?; + let mut store = KVQReDBStore::new(table); + let dbc = db.clone(); + std::thread::spawn(move || { + let rt = tokio::runtime::Builder::new_multi_thread() + .enable_all() + .build() + .unwrap(); - let _ = rt.block_on(async move { - tracing::info!("api server listening on http://{}", args.server_addr); - city_rollup_core_api::run_server(args.server_addr, storec).await?; - Ok::<_, anyhow::Error>(()) + let _ = rt.block_on(async move { + tracing::info!("api server listening on http://{}", args.server_addr); + city_rollup_core_api::run_server(args.server_addr, dbc).await?; + Ok::<_, anyhow::Error>(()) + }); }); - }); - CityStore::set_block_state(&mut store, &block0)?; - CityStore::set_block_state(&mut store, &block1)?; - - let genesis_state_hash = CityStore::get_city_root(&store, 0)?; - let setup_fee = 100000 * 500; - let fund_genesis_txid = api.fund_address_from_random_p2pkh_address( - genesis_funder_address, - 101 * UNIT_BTC + setup_fee * 4, - )?; + CityStore::set_block_state(&mut store, &block0)?; + CityStore::set_block_state(&mut store, &block1)?; - api.mine_blocks(1)?; - let txid_fund_genesis = setup_genesis_block( - &api, - &wallet.secp256k1_wallet, - genesis_funder_address.address, - fund_genesis_txid, - setup_fee, - genesis_state_hash.to_felt248_hash256(), - )?; - tracing::info!( - "funded genesis block with txid: {}", - txid_fund_genesis.to_hex_string() - ); - let _block_2_address = - BTCAddress160::new_p2sh(CityStore::get_city_block_deposit_address(&store, 2)?); - api.mine_blocks(1)?; - let user_0_public_key = wallet.add_zk_private_key(QHashOut::from_values(100, 100, 100, 100)); - let user_1_public_key = wallet.add_zk_private_key(QHashOut::from_values(101, 101, 101, 101)); - let _ = wallet.add_zk_private_key(QHashOut::from_values(102, 102, 102, 102)); - let _ = wallet.add_zk_private_key(QHashOut::from_values(103, 103, 103, 103)); - let register_user_rpc_events = - CityRegisterUserRPCRequest::new_batch(&[user_0_public_key, user_1_public_key]); - let _ = register_user_rpc_events - .into_iter() - .map(|x| rpc_queue.notify_rpc_register_user(&x)) - .collect::>>()?; + let genesis_state_hash = CityStore::get_city_root(&store, 0)?; + let setup_fee = 100000 * 500; + let fund_genesis_txid = api.fund_address_from_random_p2pkh_address( + genesis_funder_address, + 101 * UNIT_BTC + setup_fee * 4, + )?; + api.mine_blocks(1)?; + let txid_fund_genesis = setup_genesis_block( + &api, + &wallet.secp256k1_wallet, + genesis_funder_address.address, + fund_genesis_txid, + setup_fee, + genesis_state_hash.to_felt248_hash256(), + )?; + tracing::info!( + "funded genesis block with txid: {}", + txid_fund_genesis.to_hex_string() + ); + let _block_2_address = + BTCAddress160::new_p2sh(CityStore::get_city_block_deposit_address(&store, 2)?); + api.mine_blocks(1)?; + let user_0_public_key = + wallet.add_zk_private_key(QHashOut::from_values(100, 100, 100, 100)); + let user_1_public_key = + wallet.add_zk_private_key(QHashOut::from_values(101, 101, 101, 101)); + let _ = wallet.add_zk_private_key(QHashOut::from_values(102, 102, 102, 102)); + let _ = wallet.add_zk_private_key(QHashOut::from_values(103, 103, 103, 103)); + let register_user_rpc_events = + CityRegisterUserRPCRequest::new_batch(&[user_0_public_key, user_1_public_key]); + let _ = register_user_rpc_events + .into_iter() + .map(|x| rpc_queue.notify_rpc_register_user(&x)) + .collect::>>()?; + } + wxn.commit()?; /* let user_0_public_key = wallet.add_zk_private_key(QHashOut::from_values(100, 100, 100, 100)); @@ -157,35 +165,41 @@ pub fn run(args: OrchestratorArgs) -> anyhow::Result<()> { */ sync_infinite_loop!(1000, { - let block_state = CityStore::get_latest_block_state(&store)?; - tracing::info!( - "last_block_state.checkpoint_id: {}", - block_state.checkpoint_id - ); - let mut event_receiver = CityEventReceiver::::new( - queue.clone(), - QRPCProcessor::new(block_state.checkpoint_id + 1), - proof_store.clone(), - ); - event_receiver.wait_for_produce_block()?; - let orchestrator_result_step_1 = - SimpleActorOrchestrator::step_1_produce_block_enqueue_jobs( + let wxn = db.begin_write()?; + { + let table = wxn.open_table(KV)?; + let mut store = KVQReDBStore::new(table); + let block_state = CityStore::get_latest_block_state(&store)?; + tracing::info!( + "last_block_state.checkpoint_id: {}", + block_state.checkpoint_id + ); + let mut event_receiver = CityEventReceiver::::new( + queue.clone(), + QRPCProcessor::new(block_state.checkpoint_id + 1), + proof_store.clone(), + ); + event_receiver.wait_for_produce_block()?; + let orchestrator_result_step_1 = + SimpleActorOrchestrator::step_1_produce_block_enqueue_jobs( + &mut proof_store, + &mut store, + &mut event_receiver, + &mut event_processor, + &mut api, + &fingerprints, + &sighash_whitelist_tree, + )?; + event_processor.wait_for_block_proving_jobs(block_state.checkpoint_id + 1)?; + api.mine_blocks(1)?; + let txid = SimpleActorOrchestrator::step_2_produce_block_finalize_and_transact( &mut proof_store, - &mut store, - &mut event_receiver, - &mut event_processor, &mut api, - &fingerprints, - &sighash_whitelist_tree, + &orchestrator_result_step_1, )?; - event_processor.wait_for_block_proving_jobs(block_state.checkpoint_id + 1)?; - api.mine_blocks(1)?; - let txid = SimpleActorOrchestrator::step_2_produce_block_finalize_and_transact( - &mut proof_store, - &mut api, - &orchestrator_result_step_1, - )?; - tracing::info!("funded next block: {}",txid.to_hex_string()); - api.mine_blocks(1)?; + tracing::info!("funded next block: {}", txid.to_hex_string()); + api.mine_blocks(1)?; + } + wxn.commit()?; }); } From 5d57ea778a9201a771dff331e49b14a5e40da974 Mon Sep 17 00:00:00 2001 From: cf Date: Mon, 17 Jun 2024 12:09:46 +0800 Subject: [PATCH 05/16] added qbench --- Cargo.lock | 39 +++ Cargo.toml | 1 + Makefile | 2 +- city_common/src/cli/args.rs | 39 +++ city_common/src/data/kv.rs | 8 + city_common/src/data/mod.rs | 1 + city_crypto/src/hash/merkle/treeprover/mod.rs | 1 + city_redis_store/src/lib.rs | 16 + city_rollup_circuit/src/worker/bench.rs | 79 +++++ city_rollup_circuit/src/worker/mod.rs | 1 + city_rollup_circuit/src/worker/traits.rs | 1 + city_rollup_cli/Cargo.toml | 1 + city_rollup_cli/src/main.rs | 8 + city_rollup_cli/src/subcommand.rs | 4 + city_rollup_cli/src/subcommand/dumpblock.rs | 8 + city_rollup_cli/src/subcommand/qbench.rs | 8 + .../src/actors/rpc_processor.rs | 1 + .../src/actors/simple/events.rs | 19 +- city_rollup_common/src/actors/traits.rs | 1 + city_rollup_common/src/qworker/dump.rs | 141 +++++++++ city_rollup_common/src/qworker/job_id.rs | 48 +++ .../src/qworker/job_witnesses/op.rs | 12 + .../src/qworker/memory_proof_store/mod.rs | 25 +- city_rollup_common/src/qworker/mod.rs | 1 + city_rollup_common/src/qworker/proof_store.rs | 102 ++++++- city_rollup_core_api/src/lib.rs | 48 ++- .../src/debug/scenario/actors/job_planner.rs | 154 ++++++++++ .../src/debug/scenario/actors/mod.rs | 1 + .../src/debug/scenario/actors/simple.rs | 176 +---------- .../scenario/block_planner/transition.rs | 61 +++- .../scenario/block_planner/tree_helper.rs | 51 +++- .../process_requests/block_processor.rs | 60 +--- .../src/event_receiver.rs | 1 + city_rollup_core_orchestrator/src/lib.rs | 10 +- city_rollup_core_worker/src/actors/simple.rs | 19 +- .../src/event_processor.rs | 21 +- city_rollup_core_worker/src/lib.rs | 21 +- city_rollup_core_worker_qbench/Cargo.toml | 39 +++ city_rollup_core_worker_qbench/src/dump.rs | 160 ++++++++++ city_rollup_core_worker_qbench/src/lib.rs | 2 + city_rollup_core_worker_qbench/src/qbench.rs | 67 ++++ .../examples/dump_proof_store.rs | 106 +++++++ .../dump_proof_store_block_config.json | 12 + .../examples/dump_proof_store_leaf_jobs.json | 1 + .../examples/full_block_new.rs | 286 ------------------ city_rollup_rpc_provider/Cargo.toml | 1 + city_rollup_rpc_provider/src/lib.rs | 72 ++++- city_rollup_user_cli/src/subcommand/repl.rs | 39 ++- kvq/src/traits.rs | 2 - qbench_data/example.bin | Bin 0 -> 1433052 bytes 50 files changed, 1437 insertions(+), 540 deletions(-) create mode 100644 city_common/src/data/kv.rs create mode 100644 city_rollup_circuit/src/worker/bench.rs create mode 100644 city_rollup_cli/src/subcommand/dumpblock.rs create mode 100644 city_rollup_cli/src/subcommand/qbench.rs create mode 100644 city_rollup_common/src/qworker/dump.rs create mode 100644 city_rollup_core_orchestrator/src/debug/scenario/actors/job_planner.rs create mode 100644 city_rollup_core_worker_qbench/Cargo.toml create mode 100644 city_rollup_core_worker_qbench/src/dump.rs create mode 100644 city_rollup_core_worker_qbench/src/lib.rs create mode 100644 city_rollup_core_worker_qbench/src/qbench.rs create mode 100644 city_rollup_dev_cli/examples/dump_proof_store.rs create mode 100644 city_rollup_dev_cli/examples/dump_proof_store_block_config.json create mode 100644 city_rollup_dev_cli/examples/dump_proof_store_leaf_jobs.json delete mode 100644 city_rollup_dev_cli/examples/full_block_new.rs create mode 100644 qbench_data/example.bin diff --git a/Cargo.lock b/Cargo.lock index 15d147f..1b5ee3a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -645,6 +645,7 @@ dependencies = [ "city_rollup_core_node", "city_rollup_core_orchestrator", "city_rollup_core_worker", + "city_rollup_core_worker_qbench", "city_store", "clap", "dotenv", @@ -1021,12 +1022,50 @@ dependencies = [ "url", ] +[[package]] +name = "city_rollup_core_worker_qbench" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "bitcoin", + "city_common", + "city_common_circuit", + "city_crypto", + "city_macros", + "city_redis_store", + "city_rollup_circuit", + "city_rollup_common", + "city_rollup_core_orchestrator", + "city_rollup_core_worker", + "city_rollup_worker_dispatch", + "city_store", + "criterion", + "crossterm", + "gnark-plonky2-wrapper", + "hex", + "hex-literal", + "home", + "k256", + "plonky2", + "rand", + "rand_chacha", + "reqwest", + "serde", + "serde_json", + "serde_with 3.8.1", + "tokio", + "tracing", + "url", +] + [[package]] name = "city_rollup_rpc_provider" version = "0.1.0" dependencies = [ "anyhow", "async-trait", + "city_common", "city_crypto", "city_macros", "city_rollup_common", diff --git a/Cargo.toml b/Cargo.toml index a70c79d..cbbc10a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ members = [ "city_rollup_core_node", "city_redis_store", "city_rollup_core_worker", + "city_rollup_core_worker_qbench", "city_rollup_worker_dispatch", "city_rollup_core_orchestrator", "city_rollup_core_api", diff --git a/Makefile b/Makefile index 37cc11b..cf62a76 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,7 @@ run-orchestrator: build-if-not-exists .PHONY: run-l2-worker run-l2-worker: build-if-not-exists - @RUST_LOG=${LOG_LEVEL} RUST_BACKTRACE=${TRACE_ENABLED} ./target/${PROFILE}/city-rollup-cli l2-worker + @RUST_LOG=${LOG_LEVEL} RUST_BACKTRACE=${TRACE_ENABLED} ./target/${PROFILE}/city-rollup-cli l2-worker --debug-mode 1 .PHONY: run-l2-worker-g16 run-l2-worker-g16: build-if-not-exists diff --git a/city_common/src/cli/args.rs b/city_common/src/cli/args.rs index 3e8d3dd..6eb4fd2 100644 --- a/city_common/src/cli/args.rs +++ b/city_common/src/cli/args.rs @@ -23,6 +23,10 @@ pub struct RPCServerArgs { pub struct OrchestratorArgs { #[clap(long, default_value = "0.0.0.0:7777", env)] pub server_addr: String, + + #[clap(long, default_value = "true", env)] + pub expose_proof_store_api: bool, + #[clap( env, long, @@ -63,6 +67,41 @@ pub struct L2WorkerArgs { #[clap(long, short, default_value = "0")] pub debug_mode: u32, } + + +#[derive(Clone, Args)] +pub struct L2DumpProofStoreArgs { + #[clap( + env, + long, + default_value = "redis://localhost:6379/0", + env + )] + pub redis_uri: String, + #[clap(short, long, default_value = "dogeregtest", env)] + pub network: String, + + #[clap(long, short)] + pub checkpoint_id: u64, + + #[clap(long, short)] + pub output: String, +} + + +#[derive(Clone, Args)] +pub struct QBenchArgs { + #[clap(long, short)] + pub input: String, + + #[clap(short, long, default_value = "dogeregtest", env)] + pub network: String, + + #[clap(long, short, default_value = "1")] + pub num_iterations: u32, +} + + #[derive(Clone, Args)] pub struct L2TransferArgs { #[clap(long, default_value = "0.0.0.0:3000", env)] diff --git a/city_common/src/data/kv.rs b/city_common/src/data/kv.rs new file mode 100644 index 0000000..7b80855 --- /dev/null +++ b/city_common/src/data/kv.rs @@ -0,0 +1,8 @@ +use serde::{Deserialize, Serialize}; + + +#[derive(Serialize, Deserialize, PartialEq, Clone)] +pub struct SimpleKVPair { + pub key: K, + pub value: V, +} diff --git a/city_common/src/data/mod.rs b/city_common/src/data/mod.rs index c769855..573a126 100644 --- a/city_common/src/data/mod.rs +++ b/city_common/src/data/mod.rs @@ -1,2 +1,3 @@ pub mod u8bytes; pub mod varuint; +pub mod kv; \ No newline at end of file diff --git a/city_crypto/src/hash/merkle/treeprover/mod.rs b/city_crypto/src/hash/merkle/treeprover/mod.rs index ebc7886..94df691 100644 --- a/city_crypto/src/hash/merkle/treeprover/mod.rs +++ b/city_crypto/src/hash/merkle/treeprover/mod.rs @@ -237,6 +237,7 @@ pub trait TPLeafAggregator { fn get_output_from_right_leaf(left: &IO, right: &IL) -> IO; fn get_output_from_leaves(left: &IL, right: &IL) -> IO; } + pub struct AggWTLeafAggregator; impl, F: RichField> TPLeafAggregator> diff --git a/city_redis_store/src/lib.rs b/city_redis_store/src/lib.rs index c5b91be..89e9721 100644 --- a/city_redis_store/src/lib.rs +++ b/city_redis_store/src/lib.rs @@ -93,4 +93,20 @@ impl QProofStoreWriterSync for RedisStore { conn.hset_nx(PROOFS, <[u8; 24]>::from(&id).to_vec(), data)?; Ok(()) } + + fn write_next_jobs( + &mut self, + jobs: &[QProvingJobDataID], + next_jobs: &[QProvingJobDataID], + ) -> anyhow::Result<()> { + self.write_next_jobs_core(jobs, next_jobs) + } + + fn write_multidimensional_jobs( + &mut self, + jobs_levels: &[Vec], + next_jobs: &[QProvingJobDataID], + ) -> anyhow::Result<()> { + self.write_multidimensional_jobs_core(jobs_levels, next_jobs) + } } diff --git a/city_rollup_circuit/src/worker/bench.rs b/city_rollup_circuit/src/worker/bench.rs new file mode 100644 index 0000000..f293230 --- /dev/null +++ b/city_rollup_circuit/src/worker/bench.rs @@ -0,0 +1,79 @@ +use std::{marker::PhantomData, time::Instant}; + +use city_crypto::hash::{merkle::treeprover::TPCircuitFingerprintConfig, qhashout::QHashOut}; +use city_rollup_common::{block_template::data::CityGroth16ProofData, qworker::{job_id::{ProvingJobCircuitType, QProvingJobDataID, QWorkerJobBenchmark}, proof_store::QProofStoreReaderSync, verifier::QWorkerVerifyHelper}}; +use plonky2::plonk::{circuit_data::{CommonCircuitData, VerifierOnlyCircuitData}, config::GenericConfig, proof::ProofWithPublicInputs}; + +use super::traits::{QWorkerGenericProverGroth16, QWorkerGenericProverMut}; + +pub struct QWorkerGenericProverMutBench, S: QProofStoreReaderSync, C: GenericConfig, const D: usize> { + pub prover: P, + pub benchmarks: Vec, + _store: PhantomData, + _config: PhantomData, +} + +impl, S: QProofStoreReaderSync, C: GenericConfig, const D: usize> QWorkerGenericProverMutBench { + pub fn new(prover: P) -> Self { + Self { + prover, + benchmarks: Vec::new(), + _store: PhantomData, + _config: PhantomData, + } + } + pub fn add_benchmark(&mut self, job_id: QProvingJobDataID, duration: u64) { + self.benchmarks.push(QWorkerJobBenchmark { + job_id: job_id.to_fixed_bytes(), + duration, + }); + } + pub fn get_benchmarks(&self) -> &[QWorkerJobBenchmark] { + &self.benchmarks + } + +} +impl , S: QProofStoreReaderSync, C: GenericConfig, const D: usize> QWorkerVerifyHelper for QWorkerGenericProverMutBench { + fn get_tree_prover_fingerprint_config( + &self, + circuit_type: ProvingJobCircuitType, + ) -> anyhow::Result> { + self.prover.get_tree_prover_fingerprint_config(circuit_type) + } + + fn get_verifier_triplet_for_circuit_type( + &self, + circuit_type: ProvingJobCircuitType, + ) -> ( + &CommonCircuitData, + &VerifierOnlyCircuitData, + QHashOut, + ) { + self.prover.get_verifier_triplet_for_circuit_type(circuit_type) + } +} +impl, S: QProofStoreReaderSync, C: GenericConfig, const D: usize> QWorkerGenericProverMut for QWorkerGenericProverMutBench { + fn worker_prove_mut( + &mut self, + store: &S, + job_id: QProvingJobDataID, + ) -> anyhow::Result> { + let start_time = Instant::now(); + + let result = self.prover.worker_prove_mut(store, job_id); + if result.is_ok() { + let duration = start_time.elapsed().as_millis() as u64; + self.add_benchmark(job_id, duration); + } + result + } +} +impl + QWorkerGenericProverGroth16, S: QProofStoreReaderSync, C: GenericConfig, const D: usize> QWorkerGenericProverGroth16 for QWorkerGenericProverMutBench { + fn worker_prove_groth16( + &self, + store: &S, + job_id: QProvingJobDataID, + ) -> anyhow::Result { + self.prover.worker_prove_groth16(store, job_id) + } +} \ No newline at end of file diff --git a/city_rollup_circuit/src/worker/mod.rs b/city_rollup_circuit/src/worker/mod.rs index b81fb9b..3140c7f 100644 --- a/city_rollup_circuit/src/worker/mod.rs +++ b/city_rollup_circuit/src/worker/mod.rs @@ -2,3 +2,4 @@ pub mod prove_store; pub mod prover; pub mod toolbox; pub mod traits; +pub mod bench; \ No newline at end of file diff --git a/city_rollup_circuit/src/worker/traits.rs b/city_rollup_circuit/src/worker/traits.rs index c7528cb..e749e0d 100644 --- a/city_rollup_circuit/src/worker/traits.rs +++ b/city_rollup_circuit/src/worker/traits.rs @@ -31,6 +31,7 @@ pub trait QWorkerGenericProverGroth16 anyhow::Result; } + pub trait QWorkerGenericProverMut, const D: usize>: QWorkerVerifyHelper { diff --git a/city_rollup_cli/Cargo.toml b/city_rollup_cli/Cargo.toml index feaa0ad..2f4b68d 100644 --- a/city_rollup_cli/Cargo.toml +++ b/city_rollup_cli/Cargo.toml @@ -21,6 +21,7 @@ city_common = { path = "../city_common" } city_rollup_common = { path = "../city_rollup_common" } city_rollup_core_node = { path = "../city_rollup_core_node" } city_rollup_core_worker = { path = "../city_rollup_core_worker" } +city_rollup_core_worker_qbench = { path = "../city_rollup_core_worker_qbench" } city_rollup_core_api = { path = "../city_rollup_core_api" } city_rollup_core_orchestrator = { path = "../city_rollup_core_orchestrator" } bitcoincore-rpc = { workspace = true } diff --git a/city_rollup_cli/src/main.rs b/city_rollup_cli/src/main.rs index 04f3ac5..cf5f633 100644 --- a/city_rollup_cli/src/main.rs +++ b/city_rollup_cli/src/main.rs @@ -10,6 +10,8 @@ use crate::subcommand::apiserver; use crate::subcommand::l2worker; use crate::subcommand::orchestrator; use crate::subcommand::rpcserver; +use crate::subcommand::dumpblock; +use crate::subcommand::qbench; use crate::subcommand::Cli; use crate::subcommand::Commands; @@ -31,6 +33,12 @@ fn main() -> anyhow::Result<()> { Commands::APIServer(args) => { apiserver::run(args)?; } + Commands::DumpBlock(args) => { + dumpblock::run(args)?; + } + Commands::QBench(args) => { + qbench::run(args)?; + } }; Ok::<_, anyhow::Error>(()) } diff --git a/city_rollup_cli/src/subcommand.rs b/city_rollup_cli/src/subcommand.rs index 35c0405..3fe128e 100644 --- a/city_rollup_cli/src/subcommand.rs +++ b/city_rollup_cli/src/subcommand.rs @@ -6,6 +6,8 @@ pub mod l2worker; pub mod orchestrator; pub mod rpcserver; pub mod apiserver; +pub mod dumpblock; +pub mod qbench; #[derive(Parser)] pub struct Cli { @@ -19,4 +21,6 @@ pub enum Commands { L2Worker(city_common::cli::args::L2WorkerArgs), Orchestrator(city_common::cli::args::OrchestratorArgs), APIServer(city_common::cli::args::APIServerArgs), + DumpBlock(city_common::cli::args::L2DumpProofStoreArgs), + QBench(city_common::cli::args::QBenchArgs), } diff --git a/city_rollup_cli/src/subcommand/dumpblock.rs b/city_rollup_cli/src/subcommand/dumpblock.rs new file mode 100644 index 0000000..491658c --- /dev/null +++ b/city_rollup_cli/src/subcommand/dumpblock.rs @@ -0,0 +1,8 @@ +use city_common::cli::args::L2DumpProofStoreArgs; + + +#[tokio::main] +pub async fn run(args: L2DumpProofStoreArgs) -> anyhow::Result<()> { + city_rollup_core_worker_qbench::dump::run_dump_block_proof_store(&args)?; + Ok(()) +} diff --git a/city_rollup_cli/src/subcommand/qbench.rs b/city_rollup_cli/src/subcommand/qbench.rs new file mode 100644 index 0000000..bfc81e6 --- /dev/null +++ b/city_rollup_cli/src/subcommand/qbench.rs @@ -0,0 +1,8 @@ +use city_common::cli::args::QBenchArgs; + + +#[tokio::main] +pub async fn run(args: QBenchArgs) -> anyhow::Result<()> { + city_rollup_core_worker_qbench::qbench::run_qbench(&args)?; + Ok(()) +} diff --git a/city_rollup_common/src/actors/rpc_processor.rs b/city_rollup_common/src/actors/rpc_processor.rs index 4221180..78a7ed5 100644 --- a/city_rollup_common/src/actors/rpc_processor.rs +++ b/city_rollup_common/src/actors/rpc_processor.rs @@ -90,6 +90,7 @@ impl OrchestratorEventSenderSync for CityScenarioRequestedActio } } +#[derive(Clone)] pub struct QRPCProcessor { pub checkpoint_id: u64, pub output: CityScenarioRequestedActionsFromRPC, diff --git a/city_rollup_common/src/actors/simple/events.rs b/city_rollup_common/src/actors/simple/events.rs index e463248..23f9b00 100644 --- a/city_rollup_common/src/actors/simple/events.rs +++ b/city_rollup_common/src/actors/simple/events.rs @@ -2,17 +2,24 @@ use std::collections::VecDeque; use crate::{ actors::traits::{WorkerEventReceiverSync, WorkerEventTransmitterSync}, - qworker::job_id::QProvingJobDataID, + qworker::job_id::{QProvingJobDataID, QWorkerJobBenchmark}, }; pub struct CityEventProcessorMemory { pub job_queue: VecDeque, + pub benchmarks_enabled: bool, + pub benchmarks: Vec, pub core_job_completed: bool, } impl CityEventProcessorMemory { pub fn new() -> Self { + Self::new_with_config(false) + } + pub fn new_with_config(benchmarks_enabled: bool) -> Self { Self { job_queue: VecDeque::new(), + benchmarks_enabled, + benchmarks: Vec::new(), core_job_completed: true, } } @@ -36,6 +43,16 @@ impl WorkerEventReceiverSync for CityEventProcessorMemory { self.core_job_completed = true; Ok(()) } + + fn record_job_bench(&mut self, job: QProvingJobDataID, duration: u64) -> anyhow::Result<()> { + if self.benchmarks_enabled { + self.benchmarks.push(QWorkerJobBenchmark { + job_id: job.to_fixed_bytes(), + duration, + }); + } + Ok(()) + } } impl WorkerEventTransmitterSync for CityEventProcessorMemory { diff --git a/city_rollup_common/src/actors/traits.rs b/city_rollup_common/src/actors/traits.rs index 0f19beb..9713506 100644 --- a/city_rollup_common/src/actors/traits.rs +++ b/city_rollup_common/src/actors/traits.rs @@ -108,6 +108,7 @@ pub trait WorkerEventReceiverSync { fn wait_for_next_job(&mut self) -> anyhow::Result; fn enqueue_jobs(&mut self, jobs: &[QProvingJobDataID]) -> anyhow::Result<()>; fn notify_core_goal_completed(&mut self, job: QProvingJobDataID) -> anyhow::Result<()>; + fn record_job_bench(&mut self, job: QProvingJobDataID, duration: u64) -> anyhow::Result<()>; } pub trait WorkerEventTransmitterSync { diff --git a/city_rollup_common/src/qworker/dump.rs b/city_rollup_common/src/qworker/dump.rs new file mode 100644 index 0000000..b2caa83 --- /dev/null +++ b/city_rollup_common/src/qworker/dump.rs @@ -0,0 +1,141 @@ +use std::collections::HashMap; + +use itertools::Itertools; +use serde::{Deserialize, Serialize}; +use serde_with::serde_as; + +use super::{job_id::{QProvingJobDataID, QProvingJobDataIDSerialized}, proof_store::QProofStoreReaderSync}; + +#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, Eq, Hash, PartialOrd, Ord)] +pub struct QJobWithDependencies { + pub id: QProvingJobDataID, + pub dependencies: Vec, +} +impl QJobWithDependencies { + pub fn to_serialized(&self) -> QJobWithDependenciesSerialized { + self.into() + } + pub fn to_job_id_list(&self) -> Vec { + let mut result = vec![self.id]; + for dep in self.dependencies.iter() { + result.extend(dep.to_job_id_list()); + } + result + } + pub fn get_all_dependencies(&self) -> Vec { + let mut result = vec![]; + for dep in self.dependencies.iter() { + result.extend(dep.to_job_id_list()); + } + result + } +} +#[serde_as] +#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, Eq, Hash, PartialOrd, Ord)] +pub struct QJobWithDependenciesSerialized { + #[serde_as(as = "serde_with::hex::Hex")] + pub id: QProvingJobDataIDSerialized, + pub dependencies: Vec, +} +impl From<&QJobWithDependencies> for QJobWithDependenciesSerialized { + fn from(value: &QJobWithDependencies) -> Self { + Self { + id: value.id.to_fixed_bytes(), + dependencies: value.dependencies.iter().map(|x|x.into()).collect(), + } + } +} +#[derive(Debug, Clone)] +pub struct QDependencyMap { + pub dependencies: HashMap>, +} +impl QDependencyMap { + pub fn new() -> Self { + Self { + dependencies: HashMap::new(), + } + } + pub fn print_all(&self) { + for (key, value) in self.dependencies.iter() { + println!("{} ({:?}) -> {:?}", key.to_hex_string(), key, value); + } + } + pub fn add_dependency(&mut self, parent: QProvingJobDataID, dependency: QProvingJobDataID) { + let base = self.dependencies.get_mut(&parent); + if base.is_some() { + let base = base.unwrap(); + if !base.contains(&dependency) { + base.push(dependency) + } + }else{ + self.dependencies.insert(parent, vec![dependency]); + } + } + pub fn add_dependencies(&mut self, parent: QProvingJobDataID, dependencies: &[QProvingJobDataID]) { + let base = self.dependencies.get_mut(&parent); + if base.is_some() { + let base = base.unwrap(); + dependencies.into_iter().for_each(|dependency| { + if !base.contains(&dependency) { + base.push(*dependency) + } + }) + }else{ + self.dependencies.insert(parent, dependencies.to_vec()); + } + } + pub fn add_dependencies_multidimensional(&mut self, parents: &[QProvingJobDataID], dependencies: &[QProvingJobDataID]) { + parents.into_iter().for_each(|parent| { + self.add_dependencies(*parent, dependencies) + }) + } + pub fn get_dependencies(&self, id: QProvingJobDataID) -> Vec { + let result = self.dependencies.get(&id); + if result.is_some() { + result.unwrap().to_vec() + }else{ + vec![] + } + } + pub fn get_dependency_tree_for_block(&self, checkpoint_id: u64) -> QJobWithDependencies { + self.get_dependency_tree(QProvingJobDataID::notify_block_complete(checkpoint_id)) + } + pub fn get_dependency_tree(&self, root: QProvingJobDataID) -> QJobWithDependencies { + let dependencies = self.get_dependencies(root).into_iter().map(|id| { + self.get_dependency_tree(id) + }).collect::>(); + + QJobWithDependencies { + id: root, + dependencies + } + } + pub fn injest_leaf_jobs_from_store(&mut self, store: &PS, leaf_jobs: &[QProvingJobDataID]) -> anyhow::Result<()> { + if leaf_jobs.len() == 1 && leaf_jobs[0].is_notify_orchestrator_complete() { + Ok(()) + }else{ + let groups = leaf_jobs.iter().group_by(|x|x.get_sub_group_counter_goal_next_jobs_id()).into_iter().map(|(goal, group)|{ + let g = group.into_iter().map(|x| *x).collect::>(); + + (goal, g) + }).collect::>(); + + for (goal, dependencies) in groups.iter() { + let goal_next_counter = store.get_goal_by_job_id(dependencies[0])?; + if goal_next_counter != 0 { + let goal_next_jobs = store.get_next_jobs_by_job_id(*goal)?; + self.add_dependencies_multidimensional(&goal_next_jobs, dependencies); + self.injest_leaf_jobs_from_store(store, &goal_next_jobs)?; + } + } + + Ok(()) + } + } +} + +pub fn dump_job_dependencies_from_store(store: &PS, leaf_jobs: &[QProvingJobDataID]) -> anyhow::Result { + let mut dependency_map = QDependencyMap::new(); + dependency_map.injest_leaf_jobs_from_store(store, leaf_jobs)?; + Ok(dependency_map) +} \ No newline at end of file diff --git a/city_rollup_common/src/qworker/job_id.rs b/city_rollup_common/src/qworker/job_id.rs index e415418..4243c4b 100644 --- a/city_rollup_common/src/qworker/job_id.rs +++ b/city_rollup_common/src/qworker/job_id.rs @@ -1,6 +1,8 @@ use city_common::cli::modes::QWorkerMode; +use hex::FromHexError; use serde::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; +use serde_with::serde_as; #[derive( Serialize_repr, Deserialize_repr, PartialEq, Debug, Clone, Copy, Eq, Hash, PartialOrd, Ord, @@ -175,6 +177,31 @@ impl From for u8 { pub type QProvingJobDataIDSerialized = [u8; 24]; +#[serde_as] +#[derive(Serialize, Deserialize, PartialEq, Copy, Eq, Hash, Clone, Debug)] +pub struct QProvingJobDataIDSerializedWrapped(#[serde_as(as = "serde_with::hex::Hex")] pub QProvingJobDataIDSerialized); + +impl QProvingJobDataIDSerializedWrapped { + pub fn from_hex_string(s: &str) -> Result { + let bytes = hex::decode(s)?; + assert_eq!(bytes.len(), 24); + let mut array = [0u8; 24]; + array.copy_from_slice(&bytes); + Ok(Self(array)) + } +} + +#[serde_as] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +pub struct QWorkerJobBenchmark { + #[serde_as(as = "serde_with::hex::Hex")] + pub job_id: QProvingJobDataIDSerialized, + + + pub duration: u64, +} + + #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, Copy, Eq, Hash, PartialOrd, Ord)] pub struct QProvingJobDataID { pub topic: QJobTopic, @@ -246,6 +273,18 @@ impl QProvingJobDataID { data_index, } } + pub fn core_op_witness(circuit_type: ProvingJobCircuitType, checkpoint_id: u64, task_index: u32) -> Self { + Self::new( + QJobTopic::GenerateStandardProof, + checkpoint_id, + circuit_type.to_circuit_group_id(), + 0, + task_index, + circuit_type, + ProvingJobDataType::InputWitness, + 0, + ) + } pub fn transfer_signature_proof(rpc_node_id: u32, block_id: u64, transfer_id: u32) -> Self { Self { topic: QJobTopic::BlockUserSignatureProof, @@ -429,6 +468,9 @@ impl QProvingJobDataID { ..*self } } + pub fn is_notify_orchestrator_complete(&self) -> bool { + self.topic == QJobTopic::NotifyOrchestratorComplete + } pub fn get_tree_parent_proof_input_id(&self) -> Self { let parent_type = match self.circuit_type { ProvingJobCircuitType::RegisterUser => ProvingJobCircuitType::RegisterUserAggregate, @@ -524,6 +566,12 @@ impl QProvingJobDataID { pub fn to_fixed_bytes(&self) -> QProvingJobDataIDSerialized { self.into() } + pub fn with_task_index(&self, task_index: u32) -> Self { + Self { + task_index, + ..*self + } + } pub fn to_hex_string(&self) -> String { hex::encode(&self.to_fixed_bytes()) } diff --git a/city_rollup_common/src/qworker/job_witnesses/op.rs b/city_rollup_common/src/qworker/job_witnesses/op.rs index e7934c4..4101903 100644 --- a/city_rollup_common/src/qworker/job_witnesses/op.rs +++ b/city_rollup_common/src/qworker/job_witnesses/op.rs @@ -32,6 +32,18 @@ pub struct CircuitInputWithJobId AggStateTrackableInput for DummyCircuitInputWithJobId { + fn get_state_transition(&self) -> AggStateTransition { + AggStateTransition{ + state_transition_start: QHashOut::ZERO, + state_transition_end: QHashOut::ZERO, + } + } +} #[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] #[serde(bound = "")] diff --git a/city_rollup_common/src/qworker/memory_proof_store/mod.rs b/city_rollup_common/src/qworker/memory_proof_store/mod.rs index a924ce4..22f760a 100644 --- a/city_rollup_common/src/qworker/memory_proof_store/mod.rs +++ b/city_rollup_common/src/qworker/memory_proof_store/mod.rs @@ -1,12 +1,13 @@ use std::collections::HashMap; use plonky2::plonk::{config::GenericConfig, proof::ProofWithPublicInputs}; +use serde::{Deserialize, Serialize}; use super::{ job_id::QProvingJobDataID, proof_store::{QProofStoreReaderSync, QProofStoreWriterSync}, }; - +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct SimpleProofStoreMemory { pub proofs: HashMap>, pub counters: HashMap, @@ -18,6 +19,12 @@ impl SimpleProofStoreMemory { counters: HashMap::new(), } } + pub fn to_serialized_bytes(&self) -> anyhow::Result> { + bincode::serialize(self).map_err(|err| anyhow::anyhow!("{}", err)) + } + pub fn from_serialized_bytes(data: &[u8]) -> anyhow::Result { + bincode::deserialize(data).map_err(|err| anyhow::anyhow!("{}", err)) + } } impl QProofStoreReaderSync for SimpleProofStoreMemory { @@ -76,4 +83,20 @@ impl QProofStoreWriterSync for SimpleProofStoreMemory { self.proofs.insert(id, data.to_vec()); Ok(()) } + + fn write_next_jobs( + &mut self, + jobs: &[QProvingJobDataID], + next_jobs: &[QProvingJobDataID], + ) -> anyhow::Result<()> { + self.write_next_jobs_core(jobs, next_jobs) + } + + fn write_multidimensional_jobs( + &mut self, + jobs_levels: &[Vec], + next_jobs: &[QProvingJobDataID], + ) -> anyhow::Result<()> { + self.write_multidimensional_jobs_core(jobs_levels, next_jobs) + } } diff --git a/city_rollup_common/src/qworker/mod.rs b/city_rollup_common/src/qworker/mod.rs index 5e7dc7f..86e875a 100644 --- a/city_rollup_common/src/qworker/mod.rs +++ b/city_rollup_common/src/qworker/mod.rs @@ -4,3 +4,4 @@ pub mod job_witnesses; pub mod memory_proof_store; pub mod proof_store; pub mod verifier; +pub mod dump; \ No newline at end of file diff --git a/city_rollup_common/src/qworker/proof_store.rs b/city_rollup_common/src/qworker/proof_store.rs index 97f7e7f..947a7fb 100644 --- a/city_rollup_common/src/qworker/proof_store.rs +++ b/city_rollup_common/src/qworker/proof_store.rs @@ -3,12 +3,30 @@ use plonky2::plonk::{config::GenericConfig, proof::ProofWithPublicInputs}; use super::job_id::QProvingJobDataID; + + pub trait QProofStoreReaderSync { fn get_proof_by_id, const D: usize>( &self, id: QProvingJobDataID, ) -> anyhow::Result>; fn get_bytes_by_id(&self, id: QProvingJobDataID) -> anyhow::Result>; + fn get_goal_by_job_id(&self, id: QProvingJobDataID) -> anyhow::Result { + let counter_id = id.get_sub_group_counter_id(); + let goal_id = counter_id.get_sub_group_counter_goal_id(); + //tracing::info!("goal_id: {:?}", goal_id); + let goal = self.get_bytes_by_id(goal_id)?; + Ok(u32::from_le_bytes(goal.try_into().unwrap())) + } + fn get_next_jobs_by_job_id( + &self, + id: QProvingJobDataID, + ) -> anyhow::Result> { + let counter_id = id.get_sub_group_counter_id(); + let next_jobs_id = counter_id.get_sub_group_counter_goal_next_jobs_id(); + let next_jobs = self.get_bytes_by_id(next_jobs_id)?; + Ok(bincode::deserialize(&next_jobs)?) + } } pub trait QProofStoreWriterSync { @@ -24,6 +42,11 @@ pub trait QProofStoreWriterSync { &mut self, jobs: &[QProvingJobDataID], next_jobs: &[QProvingJobDataID], + ) -> anyhow::Result<()>; + fn write_next_jobs_core( + &mut self, + jobs: &[QProvingJobDataID], + next_jobs: &[QProvingJobDataID], ) -> anyhow::Result<()> { let counter_id = jobs[0].get_sub_group_counter_id(); let goal_id = counter_id.get_sub_group_counter_goal_id(); @@ -33,10 +56,16 @@ pub trait QProofStoreWriterSync { self.set_bytes_by_id(next_jobs_id, &bincode::serialize(next_jobs)?)?; Ok(()) } + fn write_multidimensional_jobs( &mut self, jobs_levels: &[Vec], next_jobs: &[QProvingJobDataID], + ) -> anyhow::Result<()>; + fn write_multidimensional_jobs_core( + &mut self, + jobs_levels: &[Vec], + next_jobs: &[QProvingJobDataID], ) -> anyhow::Result<()> { let job_levels_count = jobs_levels.len(); for i in 0..job_levels_count { @@ -59,22 +88,7 @@ pub trait QProofStoreWriterSync { } pub trait QProofStore: QProofStoreReaderSync + QProofStoreWriterSync { - fn get_goal_by_job_id(&self, id: QProvingJobDataID) -> anyhow::Result { - let counter_id = id.get_sub_group_counter_id(); - let goal_id = counter_id.get_sub_group_counter_goal_id(); - //tracing::info!("goal_id: {:?}", goal_id); - let goal = self.get_bytes_by_id(goal_id)?; - Ok(u32::from_le_bytes(goal.try_into().unwrap())) - } - fn get_next_jobs_by_job_id( - &self, - id: QProvingJobDataID, - ) -> anyhow::Result> { - let counter_id = id.get_sub_group_counter_id(); - let next_jobs_id = counter_id.get_sub_group_counter_goal_next_jobs_id(); - let next_jobs = self.get_bytes_by_id(next_jobs_id)?; - Ok(bincode::deserialize(&next_jobs)?) - } + } impl QProofStore for T {} @@ -99,3 +113,59 @@ pub trait QProofStoreWriterAsync { id: QProvingJobDataID, ) -> anyhow::Result; } + + +#[derive(Clone, Copy, Debug)] +pub struct QDummyProofStore {} + +impl QDummyProofStore { + pub fn new() -> Self { + Self {} + } +} + +impl QProofStoreReaderSync for QDummyProofStore { + fn get_proof_by_id, const D: usize>( + &self, + _id: QProvingJobDataID, + ) -> anyhow::Result> { + anyhow::bail!("Not implemented") + } + + fn get_bytes_by_id(&self, _id: QProvingJobDataID) -> anyhow::Result> { + Ok(vec![]) + } +} +impl QProofStoreWriterSync for QDummyProofStore { + fn set_proof_by_id, const D: usize>( + &mut self, + _id: QProvingJobDataID, + _proof: &ProofWithPublicInputs, + ) -> anyhow::Result<()> { + anyhow::bail!("Not implemented") + } + + fn set_bytes_by_id(&mut self, _id: QProvingJobDataID, _data: &[u8]) -> anyhow::Result<()> { + anyhow::bail!("Not implemented") + } + + fn inc_counter_by_id(&mut self, _id: QProvingJobDataID) -> anyhow::Result { + anyhow::bail!("Not implemented") + } + + fn write_next_jobs( + &mut self, + _jobs: &[QProvingJobDataID], + _next_jobs: &[QProvingJobDataID], + ) -> anyhow::Result<()> { + anyhow::bail!("Not implemented") + } + + fn write_multidimensional_jobs( + &mut self, + _jobs_levels: &[Vec], + _next_jobs: &[QProvingJobDataID], + ) -> anyhow::Result<()> { + anyhow::bail!("Not implemented") + } +} \ No newline at end of file diff --git a/city_rollup_core_api/src/lib.rs b/city_rollup_core_api/src/lib.rs index 858bbf7..cda515c 100644 --- a/city_rollup_core_api/src/lib.rs +++ b/city_rollup_core_api/src/lib.rs @@ -1,9 +1,13 @@ +use city_common::data::kv::SimpleKVPair; +use city_common::data::u8bytes::U8Bytes; use city_crypto::hash::base_types::hash160::Hash160; use city_crypto::hash::base_types::hash256::Hash256; use city_rollup_common::api::data::store::{ CityL1Deposit, CityL1Withdrawal, CityL2BlockState, CityUserState, }; +use city_rollup_common::qworker::job_id::{QProvingJobDataID, QProvingJobDataIDSerializedWrapped}; +use city_rollup_common::qworker::proof_store::QProofStoreReaderSync; use city_store::config::{CityHash, CityMerkleProof}; use city_store::store::city::base::CityStore; use jsonrpsee::core::async_trait; @@ -155,15 +159,29 @@ pub trait Rpc { checkpoint_id: u64, withdrawal_id: u64, ) -> Result; + + + #[method(name = "getProofStoreValue")] + async fn get_proof_store_value( + &self, + key: QProvingJobDataIDSerializedWrapped, + ) -> Result; + + #[method(name = "getProofStoreValues")] + async fn get_proof_store_values( + &self, + keys: Vec, + ) -> Result>, ErrorObjectOwned>; } #[derive(Clone)] -pub struct RpcServerImpl { +pub struct RpcServerImpl{ db: KVQRocksDBStore, + proof_store: PS, } #[async_trait] -impl RpcServer for RpcServerImpl { +impl RpcServer for RpcServerImpl { async fn get_user_tree_root(&self, checkpoint_id: u64) -> Result { Ok(CityStore::get_user_tree_root(&self.db, checkpoint_id) .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?) @@ -385,12 +403,34 @@ impl RpcServer for RpcServerImpl { .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?, ) } + + async fn get_proof_store_value( + &self, + key: QProvingJobDataIDSerializedWrapped, + ) -> Result { + let result = self.proof_store + .get_bytes_by_id(QProvingJobDataID::try_from(key.0).map_err(|_| ErrorObject::from(ErrorCode::InvalidParams))?) + .map_err(|_| ErrorObject::from(ErrorCode::InternalError))?; + + Ok(U8Bytes(result)) + } + async fn get_proof_store_values( + &self, + keys: Vec, + ) -> Result>, ErrorObjectOwned> { + let id_keys = keys.iter().map(|x| QProvingJobDataID::try_from(x.0).map_err(|_| ErrorObject::from(ErrorCode::InvalidParams))).collect::, ErrorObjectOwned>>()?; + + id_keys.iter().map(|key|{ + let result = self.proof_store.get_bytes_by_id(*key).map_err(|_| ErrorObject::from(ErrorCode::InternalError))?; + Ok(SimpleKVPair{key: QProvingJobDataIDSerializedWrapped(key.to_fixed_bytes()), value: U8Bytes(result)}) + }).collect::>, ErrorObjectOwned>>() + } } -pub async fn run_server(server_addr: String, db: KVQRocksDBStore) -> anyhow::Result<()> { +pub async fn run_server(server_addr: String, db: KVQRocksDBStore, proof_store: PS) -> anyhow::Result<()> { let server = Server::builder().build(server_addr).await?; - let rpc_server_impl = RpcServerImpl { db }; + let rpc_server_impl = RpcServerImpl { db, proof_store }; let handle = server.start(rpc_server_impl.into_rpc()); tokio::spawn(handle.stopped()); Ok(futures::future::pending::<()>().await) diff --git a/city_rollup_core_orchestrator/src/debug/scenario/actors/job_planner.rs b/city_rollup_core_orchestrator/src/debug/scenario/actors/job_planner.rs new file mode 100644 index 0000000..65d500d --- /dev/null +++ b/city_rollup_core_orchestrator/src/debug/scenario/actors/job_planner.rs @@ -0,0 +1,154 @@ +use city_rollup_common::qworker::{job_id::QProvingJobDataID, proof_store::QProofStore}; + +use crate::debug::scenario::block_planner::transition::CityOpJobIds; + +pub fn plan_jobs( + proof_store: &mut PS, + block_op_job_ids: &CityOpJobIds, + num_input_witnesses: usize, + checkpoint_id: u64, +) -> anyhow::Result> { + let root_state_transition = + QProvingJobDataID::block_state_transition_input_witness(checkpoint_id); + + let agg_jobs_for_inputs: Vec = (0..num_input_witnesses) + .map(|i| QProvingJobDataID::get_block_aggregate_jobs_group(checkpoint_id, 1, i as u32)) + .collect::>(); + + proof_store.write_next_jobs( + &agg_jobs_for_inputs, + &[QProvingJobDataID::notify_block_complete(checkpoint_id)], + )?; + + let per_input_jobs = (0..num_input_witnesses) + .map(|i| { + ( + QProvingJobDataID::wrap_sighash_final_bls3812_input_witness(checkpoint_id, i), + QProvingJobDataID::sighash_final_input_witness(checkpoint_id, i), + QProvingJobDataID::sighash_introspection_input_witness(checkpoint_id, i), + ) + }) + .collect::>(); + + for (i, pij) in per_input_jobs.iter().enumerate() { + proof_store.write_next_jobs(&[pij.0], &[agg_jobs_for_inputs[i]])?; + proof_store.write_next_jobs(&[pij.1], &[pij.0])?; + } + let agg_state_and_introspections_group_id = 5; + let agg_state_root_id = QProvingJobDataID::get_block_aggregate_jobs_group( + checkpoint_id, + agg_state_and_introspections_group_id, + 0, + ); + let agg_all_introspections_ids = QProvingJobDataID::get_block_aggregate_jobs_group( + checkpoint_id, + agg_state_and_introspections_group_id, + 1, + ); + let introspection_jobs = per_input_jobs.iter().map(|x| x.2).collect::>(); + proof_store.write_next_jobs(&introspection_jobs, &[agg_all_introspections_ids])?; + let final_input_witness_jobs = per_input_jobs.iter().map(|x| x.1).collect::>(); + proof_store.write_next_jobs( + &[agg_state_root_id, agg_all_introspections_ids], + &final_input_witness_jobs, + )?; + + proof_store.write_next_jobs(&[root_state_transition], &[agg_state_root_id])?; + + let op_agg_group_parts_common_id = 6; + + let state_part_1_common_id = QProvingJobDataID::get_block_aggregate_jobs_group( + checkpoint_id, + op_agg_group_parts_common_id, + 0, + ); + let state_part_2_common_id = QProvingJobDataID::get_block_aggregate_jobs_group( + checkpoint_id, + op_agg_group_parts_common_id, + 1, + ); + + let state_part_1_id = QProvingJobDataID::block_agg_state_part_1_input_witness(checkpoint_id); + let state_part_2_id = QProvingJobDataID::block_agg_state_part_2_input_witness(checkpoint_id); + + proof_store.write_next_jobs( + &[state_part_1_common_id, state_part_2_common_id], + &[root_state_transition], + )?; + + proof_store.write_next_jobs(&[state_part_1_id], &[state_part_1_common_id])?; + proof_store.write_next_jobs(&[state_part_2_id], &[state_part_2_common_id])?; + + let op_agg_group_part_1_id = 11; + let register_users_agg_job_id = + QProvingJobDataID::get_block_aggregate_jobs_group(checkpoint_id, op_agg_group_part_1_id, 0); + let claim_deposits_agg_job_id = + QProvingJobDataID::get_block_aggregate_jobs_group(checkpoint_id, op_agg_group_part_1_id, 1); + let transfer_tokens_agg_job_id = + QProvingJobDataID::get_block_aggregate_jobs_group(checkpoint_id, op_agg_group_part_1_id, 2); + + proof_store.write_next_jobs( + &[ + register_users_agg_job_id, + claim_deposits_agg_job_id, + transfer_tokens_agg_job_id, + ], + &[state_part_1_id], + )?; + + let op_agg_group_part_2_id = 12; + let add_withdrawals_agg_job_id = + QProvingJobDataID::get_block_aggregate_jobs_group(checkpoint_id, op_agg_group_part_2_id, 0); + let process_withdrawals_agg_job_id = + QProvingJobDataID::get_block_aggregate_jobs_group(checkpoint_id, op_agg_group_part_2_id, 1); + let add_deposits_agg_job_id = + QProvingJobDataID::get_block_aggregate_jobs_group(checkpoint_id, op_agg_group_part_2_id, 2); + + proof_store.write_next_jobs( + &[ + add_withdrawals_agg_job_id, + process_withdrawals_agg_job_id, + add_deposits_agg_job_id, + ], + &[state_part_2_id], + )?; + + proof_store.write_multidimensional_jobs( + &block_op_job_ids.register_user_job_ids, + &[register_users_agg_job_id], + )?; + proof_store.write_multidimensional_jobs( + &block_op_job_ids.claim_deposit_job_ids, + &[claim_deposits_agg_job_id], + )?; + proof_store.write_multidimensional_jobs( + &block_op_job_ids.token_transfer_job_ids, + &[transfer_tokens_agg_job_id], + )?; + + proof_store.write_multidimensional_jobs( + &block_op_job_ids.add_withdrawal_job_ids, + &[add_withdrawals_agg_job_id], + )?; + proof_store.write_multidimensional_jobs( + &block_op_job_ids.process_withdrawal_job_ids, + &[process_withdrawals_agg_job_id], + )?; + proof_store.write_multidimensional_jobs( + &block_op_job_ids.add_deposit_job_ids, + &[add_deposits_agg_job_id], + )?; + + let leaf_jobs = [ + introspection_jobs, + block_op_job_ids.register_user_job_ids[0].to_vec(), + block_op_job_ids.claim_deposit_job_ids[0].to_vec(), + block_op_job_ids.token_transfer_job_ids[0].to_vec(), + block_op_job_ids.add_withdrawal_job_ids[0].to_vec(), + block_op_job_ids.process_withdrawal_job_ids[0].to_vec(), + block_op_job_ids.add_deposit_job_ids[0].to_vec(), + ] + .concat(); + + Ok(leaf_jobs) +} diff --git a/city_rollup_core_orchestrator/src/debug/scenario/actors/mod.rs b/city_rollup_core_orchestrator/src/debug/scenario/actors/mod.rs index b252f36..8d4ecc3 100644 --- a/city_rollup_core_orchestrator/src/debug/scenario/actors/mod.rs +++ b/city_rollup_core_orchestrator/src/debug/scenario/actors/mod.rs @@ -1 +1,2 @@ pub mod simple; +pub mod job_planner; \ No newline at end of file diff --git a/city_rollup_core_orchestrator/src/debug/scenario/actors/simple.rs b/city_rollup_core_orchestrator/src/debug/scenario/actors/simple.rs index db13388..7c6ce5a 100644 --- a/city_rollup_core_orchestrator/src/debug/scenario/actors/simple.rs +++ b/city_rollup_core_orchestrator/src/debug/scenario/actors/simple.rs @@ -2,7 +2,7 @@ use city_common::{ config::rollup_constants::{BLOCK_SCRIPT_SPEND_BASE_FEE_AMOUNT, WITHDRAWAL_FEE_AMOUNT}, logging::debug_timer::DebugTimer, }; -use city_crypto::hash::base_types::{hash160::Hash160, hash256::Hash256}; +use city_crypto::hash::base_types::{felt252::felt252_hashout_to_hash256_le, hash160::Hash160, hash256::Hash256}; use city_rollup_common::{ actors::{ requested_actions::CityScenarioRequestedActions, @@ -19,8 +19,7 @@ use city_rollup_common::{ }, link::{data::BTCAddress160, traits::QBitcoinAPISync}, qworker::{ - fingerprints::CRWorkerToolboxCoreCircuitFingerprints, job_id::QProvingJobDataID, - proof_store::QProofStore, + fingerprints::CRWorkerToolboxCoreCircuitFingerprints, job_id::{QProvingJobDataID, QProvingJobDataIDSerializedWrapped}, proof_store::QProofStore }, }; use city_store::{ @@ -31,7 +30,7 @@ use kvq::traits::KVQBinaryStore; use serde::{Deserialize, Serialize}; use crate::debug::scenario::{ - block_planner::planner::CityOrchestratorBlockPlanner, sighash::finalizer::SigHashFinalizer, + actors::job_planner::plan_jobs, block_planner::planner::CityOrchestratorBlockPlanner, sighash::finalizer::SigHashFinalizer }; #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub struct SimpleActorOrchestratorProduceBlockStep1Result { @@ -113,6 +112,12 @@ pub fn create_hints_for_block( funding_transactions: all_inputs.to_vec(), next_block_redeem_script: next_script.to_vec(), }; + + //tracing::info!("hint[{}]: {}",i, serde_json::to_string(&hint).unwrap()); + tracing::info!("sighash[{}]: {}", i, hint.sighash_preimage.get_hash().to_hex_string()); + //tracing::info!("sighash_252[{}]: {:?}", hint.sighash_preimage.get_hash_felt252::()); + tracing::info!("sighash_252_hex[{}]: {}", i, felt252_hashout_to_hash256_le(hint.sighash_preimage.get_hash_felt252::()).to_hex_string()); + spend_hints.push(hint); } @@ -313,132 +318,9 @@ impl SimpleActorOrchestrator { &all_inputs, &withdrawals, )?; - let tpl_transaction = hints[0].sighash_preimage.transaction.clone(); - let num_input_witnesses = all_inputs.len(); // 1 dummy, but also need the last block - let agg_jobs_for_inputs: Vec = (0..num_input_witnesses) - .map(|i| QProvingJobDataID::get_block_aggregate_jobs_group(checkpoint_id, 1, i as u32)) - .collect::>(); - - proof_store.write_next_jobs( - &agg_jobs_for_inputs, - &[QProvingJobDataID::notify_block_complete(checkpoint_id)], - )?; - - let per_input_jobs = (0..num_input_witnesses) - .map(|i| { - ( - QProvingJobDataID::wrap_sighash_final_bls3812_input_witness(checkpoint_id, i), - QProvingJobDataID::sighash_final_input_witness(checkpoint_id, i), - QProvingJobDataID::sighash_introspection_input_witness(checkpoint_id, i), - ) - }) - .collect::>(); - - for (i, pij) in per_input_jobs.iter().enumerate() { - proof_store.write_next_jobs(&[pij.0], &[agg_jobs_for_inputs[i]])?; - proof_store.write_next_jobs(&[pij.1], &[pij.0])?; - } - let agg_state_and_introspections_group_id = 5; - let agg_state_root_id = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - agg_state_and_introspections_group_id, - 0, - ); - let agg_all_introspections_ids = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - agg_state_and_introspections_group_id, - 1, - ); - let introspection_jobs = per_input_jobs.iter().map(|x| x.2).collect::>(); - proof_store.write_next_jobs(&introspection_jobs, &[agg_all_introspections_ids])?; - let final_input_witness_jobs = per_input_jobs.iter().map(|x| x.1).collect::>(); - proof_store.write_next_jobs( - &[agg_state_root_id, agg_all_introspections_ids], - &final_input_witness_jobs, - )?; let root_state_transition = QProvingJobDataID::block_state_transition_input_witness(checkpoint_id); - proof_store.write_next_jobs(&[root_state_transition], &[agg_state_root_id])?; - - let op_agg_group_parts_common_id = 6; - - let state_part_1_common_id = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - op_agg_group_parts_common_id, - 0, - ); - let state_part_2_common_id = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - op_agg_group_parts_common_id, - 1, - ); - - let state_part_1_id = - QProvingJobDataID::block_agg_state_part_1_input_witness(checkpoint_id); - let state_part_2_id = - QProvingJobDataID::block_agg_state_part_2_input_witness(checkpoint_id); - - proof_store.write_next_jobs( - &[state_part_1_common_id, state_part_2_common_id], - &[root_state_transition], - )?; - - proof_store.write_next_jobs(&[state_part_1_id], &[state_part_1_common_id])?; - proof_store.write_next_jobs(&[state_part_2_id], &[state_part_2_common_id])?; - - let op_agg_group_part_1_id = 11; - let register_users_agg_job_id = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - op_agg_group_part_1_id, - 0, - ); - let claim_deposits_agg_job_id = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - op_agg_group_part_1_id, - 1, - ); - let transfer_tokens_agg_job_id = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - op_agg_group_part_1_id, - 2, - ); - - proof_store.write_next_jobs( - &[ - register_users_agg_job_id, - claim_deposits_agg_job_id, - transfer_tokens_agg_job_id, - ], - &[state_part_1_id], - )?; - - let op_agg_group_part_2_id = 12; - let add_withdrawals_agg_job_id = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - op_agg_group_part_2_id, - 0, - ); - let process_withdrawals_agg_job_id = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - op_agg_group_part_2_id, - 1, - ); - let add_deposits_agg_job_id = QProvingJobDataID::get_block_aggregate_jobs_group( - checkpoint_id, - op_agg_group_part_2_id, - 2, - ); - - proof_store.write_next_jobs( - &[ - add_withdrawals_agg_job_id, - process_withdrawals_agg_job_id, - add_deposits_agg_job_id, - ], - &[state_part_2_id], - )?; - let _ = SigHashFinalizer::finalize_sighashes::( proof_store, sighash_whitelist_tree, @@ -446,43 +328,15 @@ impl SimpleActorOrchestrator { root_state_transition, &hints, )?; + let tpl_transaction = hints[0].sighash_preimage.transaction.clone(); + let num_input_witnesses = all_inputs.len(); // 1 dummy, but also need the last block + let leaf_jobs = plan_jobs(proof_store, &block_op_job_ids, num_input_witnesses, checkpoint_id)?; - proof_store.write_multidimensional_jobs( - &block_op_job_ids.register_user_job_ids, - &[register_users_agg_job_id], - )?; - proof_store.write_multidimensional_jobs( - &block_op_job_ids.claim_deposit_job_ids, - &[claim_deposits_agg_job_id], - )?; - proof_store.write_multidimensional_jobs( - &block_op_job_ids.token_transfer_job_ids, - &[transfer_tokens_agg_job_id], - )?; + let leaf_jobs_debug_serialized = leaf_jobs.iter().map(|x|QProvingJobDataIDSerializedWrapped(x.to_fixed_bytes())).collect::>(); + println!("leaf_jobs: {}", serde_json::to_string(&leaf_jobs_debug_serialized)?); + - proof_store.write_multidimensional_jobs( - &block_op_job_ids.add_withdrawal_job_ids, - &[add_withdrawals_agg_job_id], - )?; - proof_store.write_multidimensional_jobs( - &block_op_job_ids.process_withdrawal_job_ids, - &[process_withdrawals_agg_job_id], - )?; - proof_store.write_multidimensional_jobs( - &block_op_job_ids.add_deposit_job_ids, - &[add_deposits_agg_job_id], - )?; - let leaf_jobs = [ - introspection_jobs, - block_op_job_ids.register_user_job_ids[0].to_vec(), - block_op_job_ids.claim_deposit_job_ids[0].to_vec(), - block_op_job_ids.token_transfer_job_ids[0].to_vec(), - block_op_job_ids.add_withdrawal_job_ids[0].to_vec(), - block_op_job_ids.process_withdrawal_job_ids[0].to_vec(), - block_op_job_ids.add_deposit_job_ids[0].to_vec(), - ] - .concat(); Ok(( leaf_jobs, diff --git a/city_rollup_core_orchestrator/src/debug/scenario/block_planner/transition.rs b/city_rollup_core_orchestrator/src/debug/scenario/block_planner/transition.rs index 52992f5..7ca64b4 100644 --- a/city_rollup_core_orchestrator/src/debug/scenario/block_planner/transition.rs +++ b/city_rollup_core_orchestrator/src/debug/scenario/block_planner/transition.rs @@ -5,7 +5,7 @@ use city_crypto::hash::{ qhashout::QHashOut, }; use city_rollup_common::qworker::{ - job_id::QProvingJobDataID, + job_id::{ProvingJobCircuitType, QProvingJobDataID}, job_witnesses::agg::{ CRAggAddProcessL1WithdrawalAddL1DepositCircuitInput, CRAggUserRegisterClaimDepositL2TransferCircuitInput, @@ -14,6 +14,8 @@ use city_rollup_common::qworker::{ use plonky2::hash::hash_types::RichField; use serde::{Deserialize, Serialize}; +use super::tree_helper::get_dummy_tree_prover_ids_op_circuit; + #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(bound = "")] pub struct CityRootStateTransitions { @@ -82,7 +84,15 @@ pub struct CityOpRootJobIds { pub process_withdrawal_job_root_id: QProvingJobDataID, pub add_deposit_job_root_id: QProvingJobDataID, } - +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +pub struct CityOpJobConfig { + pub register_user_count: usize, + pub claim_deposit_count: usize, + pub token_transfer_count: usize, + pub add_withdrawal_count: usize, + pub process_withdrawal_count: usize, + pub add_deposit_count: usize, +} #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(bound = "")] pub struct CityOpJobIds { @@ -98,6 +108,53 @@ fn vec_2d_size(arr: &[Vec]) -> usize { arr.iter().map(|x| x.len()).sum() } impl CityOpJobIds { + pub fn dummy_from_config(checkpoint_id: u64, config: &CityOpJobConfig) -> Self { + let register_user_job_ids = get_dummy_tree_prover_ids_op_circuit( + ProvingJobCircuitType::RegisterUser, + ProvingJobCircuitType::DummyRegisterUserAggregate, + checkpoint_id, + config.register_user_count, + ); + let claim_deposit_job_ids = get_dummy_tree_prover_ids_op_circuit( + ProvingJobCircuitType::ClaimL1Deposit, + ProvingJobCircuitType::DummyClaimL1DepositAggregate, + checkpoint_id, + config.claim_deposit_count, + ); + let token_transfer_job_ids = get_dummy_tree_prover_ids_op_circuit( + ProvingJobCircuitType::TransferTokensL2, + ProvingJobCircuitType::DummyTransferTokensL2Aggregate, + checkpoint_id, + config.token_transfer_count, + ); + let add_withdrawal_job_ids = get_dummy_tree_prover_ids_op_circuit( + ProvingJobCircuitType::AddL1Withdrawal, + ProvingJobCircuitType::DummyAddL1WithdrawalAggregate, + checkpoint_id, + config.add_withdrawal_count, + ); + let process_withdrawal_job_ids = get_dummy_tree_prover_ids_op_circuit( + ProvingJobCircuitType::ProcessL1Withdrawal, + ProvingJobCircuitType::DummyProcessL1WithdrawalAggregate, + checkpoint_id, + config.process_withdrawal_count, + ); + let add_deposit_job_ids = get_dummy_tree_prover_ids_op_circuit( + ProvingJobCircuitType::AddL1Deposit, + ProvingJobCircuitType::DummyAddL1DepositAggregate, + checkpoint_id, + config.add_deposit_count, + ); + Self { + register_user_job_ids, + claim_deposit_job_ids, + token_transfer_job_ids, + add_withdrawal_job_ids, + process_withdrawal_job_ids, + add_deposit_job_ids, + + } + } pub fn get_total_job_ids(&self) -> usize { vec_2d_size(&self.register_user_job_ids) + vec_2d_size(&self.claim_deposit_job_ids) diff --git a/city_rollup_core_orchestrator/src/debug/scenario/block_planner/tree_helper.rs b/city_rollup_core_orchestrator/src/debug/scenario/block_planner/tree_helper.rs index 613a48b..863eb9c 100644 --- a/city_rollup_core_orchestrator/src/debug/scenario/block_planner/tree_helper.rs +++ b/city_rollup_core_orchestrator/src/debug/scenario/block_planner/tree_helper.rs @@ -1,5 +1,6 @@ use std::fmt::Debug; +use city_common::tree_planner::BinaryTreePlanner; use city_crypto::hash::{ merkle::treeprover::{ generate_tree_inputs_with_position, AggStateTrackableInput, @@ -10,13 +11,61 @@ use city_crypto::hash::{ qhashout::QHashOut, }; use city_rollup_common::qworker::{ - job_id::QProvingJobDataID, + job_id::{ProvingJobCircuitType, QProvingJobDataID}, job_witnesses::op::{CircuitInputWithDependencies, CircuitInputWithJobId}, proof_store::QProofStore, }; use city_store::config::F; use serde::{de::DeserializeOwned, Serialize}; +pub fn get_dummy_tree_prover_ids_op_circuit( + circuit_type: ProvingJobCircuitType, + dummy_type: ProvingJobCircuitType, + checkpoint_id: u64, + leaf_count: usize, +) -> Vec> { + let dummy_id = QProvingJobDataID::new_proof_job_id(checkpoint_id, dummy_type, 0xDD, 0, 0); + let leaves = (0..leaf_count) + .map(|i| QProvingJobDataID::core_op_witness(circuit_type, checkpoint_id, i as u32)) + .collect::>(); + get_dummy_tree_prover_ids(&leaves, dummy_id) +} + +pub fn get_dummy_tree_prover_ids_leaf_template( + leaf_template: QProvingJobDataID, + dummy_id: QProvingJobDataID, + leaf_count: usize, +) -> Vec> { + let leaves = (0..leaf_count) + .map(|i| leaf_template.with_task_index(i as u32)) + .collect::>(); + get_dummy_tree_prover_ids(&leaves, dummy_id) +} +pub fn get_dummy_tree_prover_ids( + leaves: &[QProvingJobDataID], + dummy_id: QProvingJobDataID, +) -> Vec> { + if leaves.len() == 0 { + vec![vec![dummy_id]] + } else { + let leaves_len = leaves.len(); + let levels = BinaryTreePlanner::new(leaves_len).levels; + let mut job_ids = vec![leaves.to_vec()]; + + for level_nodes in levels.into_iter() { + let mut level_job_ids: Vec = Vec::with_capacity(level_nodes.len()); + for node in level_nodes.into_iter() { + let left_proof_id = job_ids[node.left_job.level as usize] + [node.left_job.index as usize] + .get_output_id(); + let self_witness_id = left_proof_id.get_tree_parent_proof_input_id(); + level_job_ids.push(self_witness_id); + } + job_ids.push(level_job_ids); + } + job_ids + } +} pub fn plan_tree_prover_from_leaves< PS: QProofStore, LA: TPLeafAggregator, IO>, diff --git a/city_rollup_core_orchestrator/src/debug/scenario/process_requests/block_processor.rs b/city_rollup_core_orchestrator/src/debug/scenario/process_requests/block_processor.rs index c063f40..d3092fc 100644 --- a/city_rollup_core_orchestrator/src/debug/scenario/process_requests/block_processor.rs +++ b/city_rollup_core_orchestrator/src/debug/scenario/process_requests/block_processor.rs @@ -10,7 +10,7 @@ use city_rollup_common::{ }, qworker::{ fingerprints::CRWorkerToolboxCoreCircuitFingerprints, - job_id::{ProvingJobCircuitType, ProvingJobDataType, QJobTopic, QProvingJobDataID}, + job_id::{ProvingJobCircuitType, QProvingJobDataID}, job_witnesses::op::{ CRAddL1DepositCircuitInput, CRAddL1WithdrawalCircuitInput, CRClaimL1DepositCircuitInput, CRL2TransferCircuitInput, @@ -67,15 +67,10 @@ impl CityOrchestratorBlockProcessor { .op_processor .process_register_user_request(store, req)?; - let job_id = QProvingJobDataID::new( - QJobTopic::GenerateStandardProof, + let job_id = QProvingJobDataID::core_op_witness( + ProvingJobCircuitType::RegisterUser, self.checkpoint_id, - ProvingJobCircuitType::RegisterUser.to_circuit_group_id(), - 0, self.block_register_user_count as u32, - ProvingJobCircuitType::RegisterUser, - ProvingJobDataType::InputWitness, - 0, ); proof_store.set_bytes_by_id(job_id, &op_result.to_bytes()?)?; @@ -90,16 +85,10 @@ impl CityOrchestratorBlockProcessor { req: &CityTokenTransferRequest, ) -> anyhow::Result>> { let op_result = self.op_processor.process_l2_transfer_request(store, req)?; - - let job_id = QProvingJobDataID::new( - QJobTopic::GenerateStandardProof, + let job_id = QProvingJobDataID::core_op_witness( + ProvingJobCircuitType::TransferTokensL2, self.checkpoint_id, - ProvingJobCircuitType::TransferTokensL2.to_circuit_group_id(), - 0, self.block_l2_transfer_count as u32, - ProvingJobCircuitType::TransferTokensL2, - ProvingJobDataType::InputWitness, - 0, ); proof_store.set_bytes_by_id(job_id, &op_result.to_bytes()?)?; @@ -117,15 +106,11 @@ impl CityOrchestratorBlockProcessor { .op_processor .process_add_withdrawal_request(store, req)?; - let job_id = QProvingJobDataID::new( - QJobTopic::GenerateStandardProof, + + let job_id = QProvingJobDataID::core_op_witness( + ProvingJobCircuitType::AddL1Withdrawal, self.checkpoint_id, - ProvingJobCircuitType::AddL1Withdrawal.to_circuit_group_id(), - 0, self.block_add_withdrawal_count as u32, - ProvingJobCircuitType::AddL1Withdrawal, - ProvingJobDataType::InputWitness, - 0, ); proof_store.set_bytes_by_id(job_id, &op_result.to_bytes()?)?; @@ -143,15 +128,11 @@ impl CityOrchestratorBlockProcessor { .op_processor .process_complete_l1_withdrawal_request(store, req)?; - let job_id = QProvingJobDataID::new( - QJobTopic::GenerateStandardProof, + + let job_id = QProvingJobDataID::core_op_witness( + ProvingJobCircuitType::ProcessL1Withdrawal, self.checkpoint_id, - ProvingJobCircuitType::ProcessL1Withdrawal.to_circuit_group_id(), - 0, self.block_process_withdrawal_count as u32, - ProvingJobCircuitType::ProcessL1Withdrawal, - ProvingJobDataType::InputWitness, - 0, ); proof_store.set_bytes_by_id(job_id, &op_result.to_bytes()?)?; @@ -167,15 +148,10 @@ impl CityOrchestratorBlockProcessor { ) -> anyhow::Result>> { let op_result = self.op_processor.process_add_deposit_request(store, req)?; - let job_id = QProvingJobDataID::new( - QJobTopic::GenerateStandardProof, + let job_id = QProvingJobDataID::core_op_witness( + ProvingJobCircuitType::AddL1Deposit, self.checkpoint_id, - ProvingJobCircuitType::AddL1Deposit.to_circuit_group_id(), - 0, self.block_add_deposit_count as u32, - ProvingJobCircuitType::AddL1Deposit, - ProvingJobDataType::InputWitness, - 0, ); proof_store.set_bytes_by_id(job_id, &op_result.to_bytes()?)?; @@ -193,16 +169,12 @@ impl CityOrchestratorBlockProcessor { .op_processor .process_claim_deposit_request(store, req)?; - let job_id = QProvingJobDataID::new( - QJobTopic::GenerateStandardProof, + let job_id = QProvingJobDataID::core_op_witness( + ProvingJobCircuitType::ClaimL1Deposit, self.checkpoint_id, - ProvingJobCircuitType::ClaimL1Deposit.to_circuit_group_id(), - 0, self.block_claim_deposit_count as u32, - ProvingJobCircuitType::ClaimL1Deposit, - ProvingJobDataType::InputWitness, - 0, ); + proof_store.set_bytes_by_id(job_id, &op_result.to_bytes()?)?; self.block_claim_deposit_count += 1; diff --git a/city_rollup_core_orchestrator/src/event_receiver.rs b/city_rollup_core_orchestrator/src/event_receiver.rs index 8478657..3214c10 100644 --- a/city_rollup_core_orchestrator/src/event_receiver.rs +++ b/city_rollup_core_orchestrator/src/event_receiver.rs @@ -22,6 +22,7 @@ use city_rollup_worker_dispatch::traits::proving_worker::ProvingWorkerListener; use plonky2::hash::hash_types::RichField; use serde::de::DeserializeOwned; +#[derive(Clone)] pub struct CityEventReceiver { tx_queue: RedisQueue, rpc_processor: QRPCProcessor, diff --git a/city_rollup_core_orchestrator/src/lib.rs b/city_rollup_core_orchestrator/src/lib.rs index a3be1a2..df1219d 100644 --- a/city_rollup_core_orchestrator/src/lib.rs +++ b/city_rollup_core_orchestrator/src/lib.rs @@ -17,7 +17,7 @@ use city_rollup_common::{ data::BTCAddress160, link_api::BTCLinkAPI, traits::QBitcoinAPIFunderSync, tx::setup_genesis_block, }, - qworker::fingerprints::CRWorkerToolboxCoreCircuitFingerprints, + qworker::{fingerprints::CRWorkerToolboxCoreCircuitFingerprints, proof_store::QDummyProofStore}, }; use city_rollup_core_worker::event_processor::CityEventProcessor; use city_rollup_worker_dispatch::implementations::redis::RedisQueue; @@ -76,6 +76,8 @@ pub fn run(args: OrchestratorArgs) -> anyhow::Result<()> { }; let mut store = KVQRocksDBStore::open_default(&args.db_path)?; let storec = store.clone(); + let expose_proof_store_api = args.expose_proof_store_api; + let api_proof_store = proof_store.clone(); std::thread::spawn(move || { let rt = tokio::runtime::Builder::new_multi_thread() .enable_all() @@ -84,7 +86,11 @@ pub fn run(args: OrchestratorArgs) -> anyhow::Result<()> { let _ = rt.block_on(async move { tracing::info!("api server listening on http://{}", args.server_addr); - city_rollup_core_api::run_server(args.server_addr, storec).await?; + if expose_proof_store_api { + city_rollup_core_api::run_server(args.server_addr, storec, api_proof_store).await?; + }else{ + city_rollup_core_api::run_server(args.server_addr, storec, QDummyProofStore::new()).await?; + } Ok::<_, anyhow::Error>(()) }); }); diff --git a/city_rollup_core_worker/src/actors/simple.rs b/city_rollup_core_worker/src/actors/simple.rs index 53f0dc6..b17cd59 100644 --- a/city_rollup_core_worker/src/actors/simple.rs +++ b/city_rollup_core_worker/src/actors/simple.rs @@ -1,7 +1,7 @@ use std::time::Duration; use city_common::{cli::modes::QWorkerMode, logging::trace_timer::TraceTimer}; -use city_rollup_circuit::worker::traits::{QWorkerGenericProver, QWorkerGenericProverGroth16}; +use city_rollup_circuit::worker::traits::{QWorkerGenericProverGroth16, QWorkerGenericProverMut}; use city_rollup_common::{ actors::traits::WorkerEventReceiverSync, qworker::{ @@ -16,14 +16,14 @@ impl SimpleActorWorker { pub fn run_worker< PS: QProofStore, ER: WorkerEventReceiverSync, - G: QWorkerGenericProver + G: QWorkerGenericProverMut + QWorkerGenericProverGroth16, C: GenericConfig, const D: usize, >( store: &mut PS, event_receiver: &mut ER, - prover: &G, + prover: &mut G, ) -> anyhow::Result<()> { loop { Self::process_next_job(store, event_receiver, prover, QWorkerMode::All)?; @@ -32,14 +32,14 @@ impl SimpleActorWorker { pub fn process_next_job< PS: QProofStore, ER: WorkerEventReceiverSync, - G: QWorkerGenericProver + G: QWorkerGenericProverMut + QWorkerGenericProverGroth16, C: GenericConfig, const D: usize, >( store: &mut PS, event_receiver: &mut ER, - prover: &G, + prover: &mut G, mode: QWorkerMode, ) -> anyhow::Result<()> { //let mut timer = TraceTimer::new("process_next_job"); @@ -57,18 +57,19 @@ impl SimpleActorWorker { fn process_job< PS: QProofStore, ER: WorkerEventReceiverSync, - G: QWorkerGenericProver + G: QWorkerGenericProverMut + QWorkerGenericProverGroth16, C: GenericConfig, const D: usize, >( store: &mut PS, event_receiver: &mut ER, - prover: &G, + prover: &mut G, job_id: QProvingJobDataID, ) -> anyhow::Result<()> { let mut timer = TraceTimer::new("process_job"); if job_id.topic == QJobTopic::GenerateStandardProof { + let start_time = std::time::Instant::now(); let _ = match job_id.circuit_type { ProvingJobCircuitType::WrapFinalSigHashProofBLS12381 => { // TODO: implement conversion from proof to bytes @@ -79,12 +80,14 @@ impl SimpleActorWorker { output_id } _ => { - let proof = prover.worker_prove(store, job_id)?; + let proof = prover.worker_prove_mut(store, job_id)?; let output_id = job_id.get_output_id(); store.set_proof_by_id(output_id, &proof)?; output_id } }; + let duration = start_time.elapsed().as_millis() as u64; + event_receiver.record_job_bench(job_id, duration)?; } if job_id.topic == QJobTopic::NotifyOrchestratorComplete { event_receiver.notify_core_goal_completed(job_id)?; diff --git a/city_rollup_core_worker/src/event_processor.rs b/city_rollup_core_worker/src/event_processor.rs index 0ca9575..14c8f20 100644 --- a/city_rollup_core_worker/src/event_processor.rs +++ b/city_rollup_core_worker/src/event_processor.rs @@ -2,20 +2,27 @@ use std::time::Duration; use city_rollup_common::{ actors::traits::{WorkerEventReceiverSync, WorkerEventTransmitterSync}, - qworker::job_id::QProvingJobDataID, + qworker::job_id::{QProvingJobDataID, QWorkerJobBenchmark}, }; use city_rollup_worker_dispatch::{ implementations::redis::{QueueNotification, RedisQueue, Q_JOB, Q_NOTIFICATIONS}, traits::{proving_dispatcher::ProvingDispatcher, proving_worker::ProvingWorkerListener}, }; - +#[derive(Clone)] pub struct CityEventProcessor { pub job_queue: RedisQueue, + pub benckmarks_enabled: bool, + pub benchmarks: Vec, } impl CityEventProcessor { pub fn new(dispatcher: RedisQueue) -> Self { + Self::new_with_config(dispatcher, false) + } + pub fn new_with_config(dispatcher: RedisQueue, benckmarks_enabled: bool) -> Self { Self { job_queue: dispatcher, + benckmarks_enabled, + benchmarks: Vec::new(), } } } @@ -43,6 +50,16 @@ impl WorkerEventReceiverSync for CityEventProcessor { self.job_queue.dispatch(Q_NOTIFICATIONS, QueueNotification::CoreJobCompleted)?; Ok(()) } + + fn record_job_bench(&mut self, job: QProvingJobDataID, duration: u64) -> anyhow::Result<()> { + if self.benckmarks_enabled { + self.benchmarks.push(QWorkerJobBenchmark { + job_id: job.to_fixed_bytes(), + duration, + }); + } + Ok(()) + } } impl WorkerEventTransmitterSync for CityEventProcessor { diff --git a/city_rollup_core_worker/src/lib.rs b/city_rollup_core_worker/src/lib.rs index 6dd5dde..21a5100 100644 --- a/city_rollup_core_worker/src/lib.rs +++ b/city_rollup_core_worker/src/lib.rs @@ -26,7 +26,7 @@ const D: usize = 2; type C = PoseidonGoldilocksConfig; pub fn run_debug_outer(args: L2WorkerArgs) -> anyhow::Result<()> { let network_magic = get_network_magic_for_str(args.network.to_string())?; - let toolbox = + let mut toolbox = CRWorkerToolboxRootCircuits::::new(network_magic, SIGHASH_WHITELIST_TREE_ROOT); /*println!( "CRWorkerToolboxCoreCircuitFingerprints: {}", @@ -41,7 +41,7 @@ pub fn run_debug_outer(args: L2WorkerArgs) -> anyhow::Result<()> { } println!("worker ready"); loop { - run_debug_inner(&args, &toolbox)?; + run_debug_inner(&args, &mut toolbox)?; println!("press enter to reset worker"); enable_raw_mode()?; loop { @@ -59,12 +59,13 @@ pub fn run_debug_outer(args: L2WorkerArgs) -> anyhow::Result<()> { } pub fn run_debug_inner( args: &L2WorkerArgs, - toolbox: &CRWorkerToolboxRootCircuits, + toolbox: &mut CRWorkerToolboxRootCircuits, ) -> anyhow::Result<()> { let job_queue = RedisQueue::new(&args.redis_uri)?; let mut proof_store = RedisStore::new(&args.redis_uri)?; - let mut event_processor = CityEventProcessor::new(job_queue.clone()); + let mut event_processor = CityEventProcessor::new_with_config(job_queue.clone(), true); + let mut should_print_benchmark = false; loop { 'inner: loop { if event_processor.job_queue.is_empty() { @@ -83,6 +84,10 @@ pub fn run_debug_inner( if event == Event::Key(KeyCode::Esc.into()) { break; } + if event == Event::Key(KeyCode::Char('p').into()) { + should_print_benchmark = true; + break; + } } disable_raw_mode()?; @@ -90,6 +95,10 @@ pub fn run_debug_inner( } disable_raw_mode()?; + + if should_print_benchmark { + println!("benchmarks: {}", serde_json::to_string(&event_processor.benchmarks)?); + } Ok(()) } pub fn run(args: L2WorkerArgs) -> anyhow::Result<()> { @@ -101,7 +110,7 @@ pub fn run(args: L2WorkerArgs) -> anyhow::Result<()> { let network_magic = get_network_magic_for_str(args.network.to_string())?; let mut event_processor = CityEventProcessor::new(job_queue.clone()); - let toolbox = + let mut toolbox = CRWorkerToolboxRootCircuits::::new(network_magic, SIGHASH_WHITELIST_TREE_ROOT); //println!("fingerprints:\n{}", serde_json::to_string(&toolbox.core.fingerprints).unwrap()); @@ -127,7 +136,7 @@ pub fn run(args: L2WorkerArgs) -> anyhow::Result<()> { SimpleActorWorker::process_next_job( &mut proof_store, &mut event_processor, - &toolbox, + &mut toolbox, args.worker_mode, )?; } diff --git a/city_rollup_core_worker_qbench/Cargo.toml b/city_rollup_core_worker_qbench/Cargo.toml new file mode 100644 index 0000000..dee4238 --- /dev/null +++ b/city_rollup_core_worker_qbench/Cargo.toml @@ -0,0 +1,39 @@ +[package] +edition = "2021" +name = "city_rollup_core_worker_qbench" +version = "0.1.0" + + +[dependencies] +plonky2 = { workspace = true } +anyhow = { workspace = true } +serde_json = { workspace = true } +serde = { workspace = true } +serde_with = { workspace = true } +hex = { workspace = true } +rand = { workspace = true } +bitcoin = { workspace = true } +reqwest = { workspace = true } +bincode = { workspace = true } +url = { workspace = true } +k256 = { workspace = true } +city_crypto = { path = "../city_crypto" } +city_common_circuit = { path = "../city_common_circuit" } +city_rollup_core_worker = { path = "../city_rollup_core_worker" } +city_rollup_core_orchestrator = { path = "../city_rollup_core_orchestrator" } +city_common = { path = "../city_common" } +city_rollup_common = { path = "../city_rollup_common" } +tokio = { workspace = true } +city_macros = { path = "../city_macros" } +city_redis_store = { path = "../city_redis_store" } +city_rollup_circuit = { path = "../city_rollup_circuit" } +city_rollup_worker_dispatch = { path = "../city_rollup_worker_dispatch" } +city_store = { path = "../city_store" } +gnark-plonky2-wrapper = { workspace = true } +home = { workspace = true } +tracing = { workspace = true } +crossterm = "0.27.0" +[dev-dependencies] +criterion = "0.5.1" +rand_chacha = "0.3.1" +hex-literal = "0.4.1" diff --git a/city_rollup_core_worker_qbench/src/dump.rs b/city_rollup_core_worker_qbench/src/dump.rs new file mode 100644 index 0000000..5823456 --- /dev/null +++ b/city_rollup_core_worker_qbench/src/dump.rs @@ -0,0 +1,160 @@ +use city_common::cli::args::L2DumpProofStoreArgs; +use city_redis_store::RedisStore; +use city_rollup_common::qworker::{ + dump::dump_job_dependencies_from_store, + job_id::{ProvingJobCircuitType, QProvingJobDataID, QProvingJobDataIDSerializedWrapped}, + memory_proof_store::SimpleProofStoreMemory, + proof_store::{QProofStore, QProofStoreReaderSync}, +}; +use city_rollup_core_orchestrator::debug::scenario::{ + actors::job_planner::plan_jobs, + block_planner::transition::{CityOpJobConfig, CityOpJobIds}, +}; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Clone)] +pub struct DumpProofStoreConfig { + pub checkpoint_id: u64, + pub rpc_node_id: u32, + pub job_config: CityOpJobConfig, +} + +#[derive(Serialize, Deserialize, Clone)] +pub struct BlockProofStoreDump { + pub config: DumpProofStoreConfig, + pub store: SimpleProofStoreMemory, +} +fn mirror_proof_store(keys: &[QProvingJobDataID], source: &PSource, destination: &mut PDestination) -> anyhow::Result<()> { + for key in keys { + let data = source.get_bytes_by_id(*key)?; + destination.set_bytes_by_id(*key, &data)?; + } + Ok(()) +} +// this only works when running a single rpc node with a the node id "rpc_node_id", which is ok because this is for debugging only +fn get_rpc_proof_dependencies( + config: &DumpProofStoreConfig, +) -> anyhow::Result> { + let token_transfer_signature_proof_ids = (0..config.job_config.token_transfer_count).map(|i| { + QProvingJobDataID::transfer_signature_proof(config.rpc_node_id, config.checkpoint_id, i as u32) + }); + + let claim_deposit_signature_proof_ids = (0..config.job_config.token_transfer_count).map(|i| { + QProvingJobDataID::claim_deposit_l1_signature_proof( + config.rpc_node_id, + config.checkpoint_id, + i as u32, + ) + }); + + let withdrawal_signature_proof_ids = (0..config.job_config.token_transfer_count).map(|i| { + QProvingJobDataID::withdrawal_signature_proof(config.rpc_node_id, config.checkpoint_id, i as u32) + }); + + Ok(token_transfer_signature_proof_ids + .chain(claim_deposit_signature_proof_ids) + .chain(withdrawal_signature_proof_ids) + .collect()) +} +fn dump_proof_store( + config: &DumpProofStoreConfig, + real_store: &PS, +) -> anyhow::Result { + let mut mirror_store = SimpleProofStoreMemory::new(); + let block_op_job_ids = + CityOpJobIds::dummy_from_config(config.checkpoint_id, &config.job_config); + let num_input_witnesses = config.job_config.add_deposit_count + 1; + let leaves = plan_jobs( + &mut mirror_store, + &block_op_job_ids, + num_input_witnesses, + config.checkpoint_id, + )?; + println!( + "leaf_jobs: {}", + serde_json::to_string( + &leaves + .iter() + .map(|x| QProvingJobDataIDSerializedWrapped(x.to_fixed_bytes())) + .collect::>() + )? + ); + + + let dependency_map = dump_job_dependencies_from_store(real_store, &leaves)?; + + let dep_tree = dependency_map.get_dependency_tree_for_block(config.checkpoint_id); + let rpc_signature_proof_dependencies = get_rpc_proof_dependencies(config)?; + println!("mirroring signature proofs"); + mirror_proof_store(&rpc_signature_proof_dependencies, real_store, &mut mirror_store)?; + + + let proof_witnesses = dep_tree.get_all_dependencies(); + println!("mirroring proof witnesses"); + mirror_proof_store(&proof_witnesses, real_store, &mut mirror_store)?; + + + Ok(BlockProofStoreDump{ + store: mirror_store, + config: config.clone(), + }) +} + +pub fn get_leaf_count_or_dummy(store: &PS, circuit_type: ProvingJobCircuitType, dummy_type: ProvingJobCircuitType, checkpoint_id: u64) -> anyhow::Result { + let counter_job_id = QProvingJobDataID::core_op_witness(circuit_type, checkpoint_id, 0).get_sub_group_counter_goal_id(); + + let dummy_job_id = QProvingJobDataID::new_proof_job_id( + checkpoint_id, + dummy_type, + 0xDD, + 0, + 0, + ); + + let counter_bytes_result = store.get_bytes_by_id(counter_job_id).unwrap_or(vec![]); + if counter_bytes_result.len() == 4 { + let counter = u32::from_le_bytes(counter_bytes_result.try_into().unwrap()); + Ok(counter as usize) + }else{ + let dummy_bytes_result = store.get_bytes_by_id(dummy_job_id); + if dummy_bytes_result.is_ok() && dummy_bytes_result.unwrap().len() != 0 { + Ok(0) + }else{ + anyhow::bail!("no counter or dummy job found for circuit type {:?} and checkpoint_id {}", circuit_type, checkpoint_id) + } + } +} +pub fn get_proof_store_config(store: &PS, checkpoint_id: u64, rpc_node_id: u32) -> anyhow::Result { + let register_user_count = get_leaf_count_or_dummy(store, ProvingJobCircuitType::RegisterUser, ProvingJobCircuitType::DummyRegisterUserAggregate, checkpoint_id)?; + let add_deposit_count = get_leaf_count_or_dummy(store, ProvingJobCircuitType::AddL1Deposit, ProvingJobCircuitType::DummyAddL1DepositAggregate, checkpoint_id)?; + let token_transfer_count = get_leaf_count_or_dummy(store, ProvingJobCircuitType::TransferTokensL2, ProvingJobCircuitType::DummyTransferTokensL2Aggregate, checkpoint_id)?; + let add_withdrawal_count = get_leaf_count_or_dummy(store, ProvingJobCircuitType::AddL1Withdrawal, ProvingJobCircuitType::DummyAddL1WithdrawalAggregate, checkpoint_id)?; + let process_withdrawal_count = get_leaf_count_or_dummy(store, ProvingJobCircuitType::ProcessL1Withdrawal, ProvingJobCircuitType::DummyProcessL1WithdrawalAggregate, checkpoint_id)?; + let claim_deposit_count = get_leaf_count_or_dummy(store, ProvingJobCircuitType::ClaimL1Deposit, ProvingJobCircuitType::DummyClaimL1DepositAggregate, checkpoint_id)?; + let job_config = CityOpJobConfig { + register_user_count, + claim_deposit_count, + token_transfer_count, + add_withdrawal_count, + process_withdrawal_count, + add_deposit_count, + }; + + + + Ok(DumpProofStoreConfig { + checkpoint_id, + rpc_node_id, + job_config, + }) +} +pub fn run_dump_block_proof_store(args: &L2DumpProofStoreArgs) -> anyhow::Result<()>{ + let root = std::env::current_dir()?; + let output_path = root.join(args.output.clone()).display().to_string(); + let real_store = RedisStore::new(&args.redis_uri)?; + let config = get_proof_store_config(&real_store, args.checkpoint_id, 0)?; + println!("got config: {}", serde_json::to_string_pretty(&config)?); + let result = dump_proof_store(&config, &real_store)?; + std::fs::write(output_path, &bincode::serialize(&result)?)?; + Ok(()) +} diff --git a/city_rollup_core_worker_qbench/src/lib.rs b/city_rollup_core_worker_qbench/src/lib.rs new file mode 100644 index 0000000..09b5462 --- /dev/null +++ b/city_rollup_core_worker_qbench/src/lib.rs @@ -0,0 +1,2 @@ +pub mod dump; +pub mod qbench; \ No newline at end of file diff --git a/city_rollup_core_worker_qbench/src/qbench.rs b/city_rollup_core_worker_qbench/src/qbench.rs new file mode 100644 index 0000000..478c539 --- /dev/null +++ b/city_rollup_core_worker_qbench/src/qbench.rs @@ -0,0 +1,67 @@ +use crate::dump::BlockProofStoreDump; +use city_common::cli::{args::QBenchArgs, modes::QWorkerMode}; +use city_rollup_circuit::worker::toolbox::root::CRWorkerToolboxRootCircuits; +use city_rollup_common::{ + actors::{simple::events::CityEventProcessorMemory, traits::WorkerEventTransmitterSync}, + config::sighash_wrapper_config::SIGHASH_WHITELIST_TREE_ROOT, + introspection::rollup::constants::get_network_magic_for_str, + qworker::job_id::QWorkerJobBenchmark, +}; +use city_rollup_core_orchestrator::debug::scenario::actors::job_planner::plan_jobs; +use city_rollup_core_orchestrator::debug::scenario::block_planner::transition::CityOpJobIds; +use city_rollup_core_worker::actors::simple::SimpleActorWorker; +use plonky2::plonk::config::PoseidonGoldilocksConfig; + +pub fn run_worker_qbench( + args: &QBenchArgs, + dump: &BlockProofStoreDump, +) -> anyhow::Result> { + type C = PoseidonGoldilocksConfig; + const D: usize = 2; + + let dump_config = dump.config.clone(); + let block_op_job_ids = + CityOpJobIds::dummy_from_config(dump_config.checkpoint_id, &dump_config.job_config); + let num_input_witnesses = dump_config.job_config.add_deposit_count + 1; + + let mut proof_store = dump.store.clone(); + let mut event_processor = CityEventProcessorMemory::new_with_config(true); + let network_magic = get_network_magic_for_str(args.network.to_string())?; + + let mut toolbox = + CRWorkerToolboxRootCircuits::::new(network_magic, SIGHASH_WHITELIST_TREE_ROOT); + + gnark_plonky2_wrapper::initialize(&format!( + "{}/.city-rollup/keystore/", + home::home_dir().unwrap().display() + ))?; + + for _ in 0..args.num_iterations { + let leaves = plan_jobs( + &mut proof_store, + &block_op_job_ids, + num_input_witnesses, + dump_config.checkpoint_id, + )?; + event_processor.enqueue_jobs(&leaves)?; + while !event_processor.job_queue.is_empty() { + SimpleActorWorker::process_next_job( + &mut proof_store, + &mut event_processor, + &mut toolbox, + QWorkerMode::All, + )? + } + } + Ok(event_processor.benchmarks) +} +pub fn run_qbench(args: &QBenchArgs) -> anyhow::Result<()> { + let root = std::env::current_dir()?; + let input_path = root.join(args.input.clone()).display().to_string(); + let input_bytes = std::fs::read(input_path)?; + let dump: BlockProofStoreDump = bincode::deserialize(&input_bytes)?; + let results = run_worker_qbench(args, &dump)?; + println!("results: {}", serde_json::to_string(&results)?); + + Ok(()) +} diff --git a/city_rollup_dev_cli/examples/dump_proof_store.rs b/city_rollup_dev_cli/examples/dump_proof_store.rs new file mode 100644 index 0000000..a8967f1 --- /dev/null +++ b/city_rollup_dev_cli/examples/dump_proof_store.rs @@ -0,0 +1,106 @@ +use std::path::PathBuf; + +use city_redis_store::RedisStore; +use city_rollup_common::qworker::{ + dump::dump_job_dependencies_from_store, + job_id::{QProvingJobDataID, QProvingJobDataIDSerializedWrapped}, + memory_proof_store::SimpleProofStoreMemory, + proof_store::{QProofStore, QProofStoreReaderSync}, +}; +use city_rollup_core_orchestrator::debug::scenario::{ + actors::job_planner::plan_jobs, + block_planner::transition::{CityOpJobConfig, CityOpJobIds}, +}; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Clone)] +struct DumpProofStoreConfig { + pub checkpoint_id: u64, + pub rpc_node_id: u32, + pub job_config: CityOpJobConfig, +} +fn mirror_proof_store(keys: &[QProvingJobDataID], source: &PSource, destination: &mut PDestination) -> anyhow::Result<()> { + for key in keys { + let data = source.get_bytes_by_id(*key)?; + destination.set_bytes_by_id(*key, &data)?; + } + Ok(()) +} +// this only works when running a single rpc node with a the node id "rpc_node_id", which is ok because this is for debugging only +fn get_rpc_proof_dependencies( + config: &DumpProofStoreConfig, +) -> anyhow::Result> { + let token_transfer_signature_proof_ids = (0..config.job_config.token_transfer_count).map(|i| { + QProvingJobDataID::transfer_signature_proof(config.rpc_node_id, config.checkpoint_id, i as u32) + }); + + let claim_deposit_signature_proof_ids = (0..config.job_config.token_transfer_count).map(|i| { + QProvingJobDataID::claim_deposit_l1_signature_proof( + config.rpc_node_id, + config.checkpoint_id, + i as u32, + ) + }); + + let withdrawal_signature_proof_ids = (0..config.job_config.token_transfer_count).map(|i| { + QProvingJobDataID::withdrawal_signature_proof(config.rpc_node_id, config.checkpoint_id, i as u32) + }); + + Ok(token_transfer_signature_proof_ids + .chain(claim_deposit_signature_proof_ids) + .chain(withdrawal_signature_proof_ids) + .collect()) +} +fn dump_proof_store( + config: &DumpProofStoreConfig, + real_store: &PS, +) -> anyhow::Result { + let mut mirror_store = SimpleProofStoreMemory::new(); + let block_op_job_ids = + CityOpJobIds::dummy_from_config(config.checkpoint_id, &config.job_config); + let num_input_witnesses = config.job_config.add_deposit_count + 1; + let leaves = plan_jobs( + &mut mirror_store, + &block_op_job_ids, + num_input_witnesses, + config.checkpoint_id, + )?; + println!( + "leaf_jobs: {}", + serde_json::to_string( + &leaves + .iter() + .map(|x| QProvingJobDataIDSerializedWrapped(x.to_fixed_bytes())) + .collect::>() + )? + ); + + + let dependency_map = dump_job_dependencies_from_store(real_store, &leaves)?; + + let dep_tree = dependency_map.get_dependency_tree_for_block(config.checkpoint_id); + let rpc_signature_proof_dependencies = get_rpc_proof_dependencies(config)?; + println!("mirroring signature proofs"); + mirror_proof_store(&rpc_signature_proof_dependencies, real_store, &mut mirror_store)?; + + + let proof_witnesses = dep_tree.get_all_dependencies(); + println!("mirroring proof witnesses"); + mirror_proof_store(&proof_witnesses, real_store, &mut mirror_store)?; + + + Ok(mirror_store) +} +fn main() { + let root = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + let path = format!("{}/examples/dump_proof_store_block_config.json", root.display()); + let output_path = format!("{}/examples/dump_proof_init.bin", root.display()); + let file_data = std::fs::read(path).unwrap(); + let config: DumpProofStoreConfig = serde_json::from_slice(&file_data).unwrap(); + let redis_uri = "redis://localhost:6379/0"; + + let real_store = RedisStore::new(redis_uri).unwrap(); + let result = dump_proof_store(&config, &real_store).unwrap(); + + std::fs::write(output_path, &result.to_serialized_bytes().unwrap()).unwrap(); +} diff --git a/city_rollup_dev_cli/examples/dump_proof_store_block_config.json b/city_rollup_dev_cli/examples/dump_proof_store_block_config.json new file mode 100644 index 0000000..0c8832d --- /dev/null +++ b/city_rollup_dev_cli/examples/dump_proof_store_block_config.json @@ -0,0 +1,12 @@ +{ + "checkpoint_id": 4, + "rpc_node_id": 0, + "job_config": { + "register_user_count": 4, + "claim_deposit_count": 2, + "token_transfer_count": 4, + "add_withdrawal_count": 4, + "process_withdrawal_count": 4, + "add_deposit_count": 2 + } +} \ No newline at end of file diff --git a/city_rollup_dev_cli/examples/dump_proof_store_leaf_jobs.json b/city_rollup_dev_cli/examples/dump_proof_store_leaf_jobs.json new file mode 100644 index 0000000..7483d3f --- /dev/null +++ b/city_rollup_dev_cli/examples/dump_proof_store_leaf_jobs.json @@ -0,0 +1 @@ +["0002000000000000002121cf000000000000000000000000","0002000000000000000000cf000000000000000000000000","0002000000000000000000cf000000000000010000000000","00020000000000000032dd00000000000000000000000000","00020000000000000033dd00000000000000000000000000","00020000000000000034dd00000000000000000000000000","00020000000000000035dd00000000000000000000000000","00020000000000000031dd00000000000000000000000000"] \ No newline at end of file diff --git a/city_rollup_dev_cli/examples/full_block_new.rs b/city_rollup_dev_cli/examples/full_block_new.rs deleted file mode 100644 index 44a1826..0000000 --- a/city_rollup_dev_cli/examples/full_block_new.rs +++ /dev/null @@ -1,286 +0,0 @@ -use std::{thread::sleep, time::Duration}; - -use city_common::{ - cli::{message::CITY_ROLLUP_BANNER, modes::QWorkerMode}, logging::debug_timer::DebugTimer, units::UNIT_BTC, -}; -use city_crypto::hash::{base_types::hash256::Hash256, qhashout::QHashOut}; -use city_rollup_circuit::worker::toolbox::root::CRWorkerToolboxRootCircuits; -use city_rollup_common::{ - actors::{simple::events::CityEventProcessorMemory, traits::OrchestratorRPCEventSenderSync}, - api::data::{block::rpc_request::CityRegisterUserRPCRequest, store::CityL2BlockState}, - introspection::rollup::constants::NETWORK_MAGIC_DOGE_REGTEST, - link::{ - data::BTCAddress160, link_api::BTCLinkAPI, traits::QBitcoinAPIFunderSync, - tx::setup_genesis_block, - }, - qworker::memory_proof_store::SimpleProofStoreMemory, -}; -use city_rollup_core_orchestrator::debug::{ - coordinator::core::DevMemoryCoordinatatorRPCQueue, - scenario::{actors::simple::SimpleActorOrchestrator, wallet::DebugScenarioWallet}, -}; -use city_rollup_core_worker::actors::simple::SimpleActorWorker; -use city_store::store::{city::base::CityStore, sighash::SigHashMerkleTree}; -use kvq::memory::simple::KVQSimpleMemoryBackingStore; -use plonky2::{field::goldilocks_field::GoldilocksField, plonk::config::PoseidonGoldilocksConfig}; -fn run_full_block() -> anyhow::Result<()> { - tracing::info!("{}", CITY_ROLLUP_BANNER); - let mut api = BTCLinkAPI::new_str( - "http://devnet:devnet@localhost:1337/bitcoin-rpc/?network=dogeRegtest", - "http://localhost:1337/api", - ); - - const D: usize = 2; - type C = PoseidonGoldilocksConfig; - type F = GoldilocksField; - type S = KVQSimpleMemoryBackingStore; - type PS = SimpleProofStoreMemory; - type CityWorker = SimpleActorWorker; - type CityOrchestrator = SimpleActorOrchestrator; - - let network_magic = NETWORK_MAGIC_DOGE_REGTEST; - - let sighash_whitelist_tree = SigHashMerkleTree::new(); - - let mut proof_store = PS::new(); - let mut store = S::new(); - let mut timer = DebugTimer::new("prove_block_demo"); - let mut worker_event_processor = CityEventProcessorMemory::new(); - let mut rpc_queue = DevMemoryCoordinatatorRPCQueue::::new(); - - /* - let start_state_root = CityStore::get_city_root(&store, 1)?; - tracing::info!( - "start_state_root: {} ({:?})", - start_state_root.to_string(), - start_state_root.0 - );*/ - - timer.lap("start creating wallets"); - - let mut wallet = DebugScenarioWallet::::new_fast_setup(); - - let genesis_funder_public_key = wallet.add_secp256k1_private_key(Hash256( - hex_literal::hex!("133700f4676a0d0e16aaced646ed693626fcf1329db55be8eee13ad8df001337"), - ))?; - let genesis_funder_address = BTCAddress160::from_p2pkh_key(genesis_funder_public_key); - - let deposit_0_public_key = wallet.add_secp256k1_private_key(Hash256(hex_literal::hex!( - "e6baf19a8b0b9b8537b9354e178a0a42d0887371341d4b2303537c5d18d7bb87" - )))?; - let deposit_0_address = BTCAddress160::from_p2pkh_key(deposit_0_public_key); - - let deposit_1_public_key = wallet.add_secp256k1_private_key(Hash256(hex_literal::hex!( - "51dfec6b389f5f033bbe815d5df995a20851227fd845a3be389ca9ad2b6924f0" - )))?; - let deposit_1_address = BTCAddress160::from_p2pkh_key(deposit_1_public_key); - - timer.lap("end creating wallets"); - - timer.lap("start setup initial state"); - let block_0_state = CityL2BlockState { - checkpoint_id: 0, - next_add_withdrawal_id: 0, - next_process_withdrawal_id: 0, - next_deposit_id: 0, - total_deposits_claimed_epoch: 0, - next_user_id: 0, - end_balance: 0, - }; - let block_1_state = CityL2BlockState { - checkpoint_id: 1, - next_add_withdrawal_id: 0, - next_process_withdrawal_id: 0, - next_deposit_id: 0, - total_deposits_claimed_epoch: 0, - next_user_id: 0, - end_balance: 0, - }; - - CityStore::set_block_state(&mut store, &block_0_state)?; - CityStore::set_block_state(&mut store, &block_1_state)?; - let genesis_state_hash = CityStore::get_city_root(&store, 0)?; - let setup_fee = 100000 * 500; - let fund_genesis_txid = api.fund_address_from_random_p2pkh_address( - genesis_funder_address, - 101 * UNIT_BTC + setup_fee * 4, - )?; - - api.mine_blocks(1)?; - let txid_fund_genesis = setup_genesis_block( - &api, - &wallet.secp256k1_wallet, - genesis_funder_address.address, - fund_genesis_txid, - setup_fee, - genesis_state_hash.to_felt252_hash256(), - )?; - tracing::info!( - "funded genesis block with txid: {}", - txid_fund_genesis.to_hex_string() - ); - //tracing::info!("txid_fund_genesis: {}", txid_fund_genesis.to_hex_string()); - let block_2_address = - BTCAddress160::new_p2sh(CityStore::get_city_block_deposit_address(&store, 2)?); - - api.mine_blocks(1)?; - tracing::info!("block_2_address: {}", block_2_address.to_string()); - - timer.lap("start creating wallets"); - let user_0_public_key = wallet.add_zk_private_key(QHashOut::from_values(100, 100, 100, 100)); - let user_1_public_key = wallet.add_zk_private_key(QHashOut::from_values(101, 101, 101, 101)); - let user_2_public_key = wallet.add_zk_private_key(QHashOut::from_values(102, 102, 102, 102)); - wallet.setup_circuits(); - timer.lap("end creating wallets"); - - timer.lap("start creating worker"); - let root_toolbox = - CRWorkerToolboxRootCircuits::::new(network_magic, sighash_whitelist_tree.root); - let fingerprints = root_toolbox.core.fingerprints.clone(); - timer.lap("end creating worker"); - - let mut checkpoint_id = 2; - timer.lap("start fund block 2"); - api.fund_address_from_known_p2pkh_address( - &wallet.secp256k1_wallet, - deposit_0_address, - block_2_address, - 10 * UNIT_BTC, - )?; - api.fund_address_from_known_p2pkh_address( - &wallet.secp256k1_wallet, - deposit_1_address, - block_2_address, - 15 * UNIT_BTC, - )?; - api.mine_blocks(10)?; - timer.lap("waiting for deposits for 10 seconds..."); - sleep(Duration::from_millis(1000 * 10)); - timer.lap("end fund block 2"); - - timer.lap("start prepare block 2 events"); - let register_user_rpc_events = - CityRegisterUserRPCRequest::new_batch(&[user_0_public_key, user_1_public_key]); - let _ = register_user_rpc_events - .into_iter() - .map(|x| rpc_queue.notify_rpc_register_user(&x)) - .collect::>>()?; - timer.lap("end prepare block 2 events"); - let mut requested_actions = - rpc_queue.get_requested_actions_from_rpc(&mut proof_store, checkpoint_id)?; - - let orchestrator_result_step_1 = CityOrchestrator::step_1_produce_block_enqueue_jobs( - &mut proof_store, - &mut store, - &mut requested_actions, - &mut worker_event_processor, - &mut api, - &fingerprints, - &sighash_whitelist_tree, - )?; - let end_state_root = CityStore::get_city_root(&store, 2)?; - tracing::info!( - "end_state_root: {} ({:?})", - end_state_root.to_string(), - end_state_root.0 - ); - loop { - if worker_event_processor.job_queue.is_empty() { - break; - } - CityWorker::process_next_job(&mut proof_store, &mut worker_event_processor, &root_toolbox, QWorkerMode::All)?; - } - api.mine_blocks(1)?; - let orchestrator_result_step_2 = CityOrchestrator::step_2_produce_block_finalize_and_transact( - &mut proof_store, - &mut api, - &orchestrator_result_step_1, - )?; - tracing::info!( - "produced block, sent to : {}", - orchestrator_result_step_2.to_hex_string() - ); - api.mine_blocks(1)?; - checkpoint_id = 3; - tracing::info!("starting block {}", checkpoint_id); - - timer.lap("start prepare block 3 events"); - let register_user_rpc_events = CityRegisterUserRPCRequest::new_batch(&[user_2_public_key]); - let _ = register_user_rpc_events - .into_iter() - .map(|x| rpc_queue.notify_rpc_register_user(&x)) - .collect::>>()?; - - rpc_queue.notify_rpc_claim_deposit(&wallet.sign_claim_deposit( - network_magic, - 0, - &CityStore::::get_deposit_by_id(&store, checkpoint_id, 0)?, - )?)?; - rpc_queue.notify_rpc_claim_deposit(&wallet.sign_claim_deposit( - network_magic, - 1, - &CityStore::::get_deposit_by_id(&store, checkpoint_id, 1)?, - )?)?; - - rpc_queue.notify_rpc_token_transfer(&wallet.sign_l2_transfer( - user_0_public_key, - network_magic, - 0, - 1, - 2 * UNIT_BTC, - 1, - )?)?; - rpc_queue.notify_rpc_token_transfer(&wallet.sign_l2_transfer( - user_1_public_key, - network_magic, - 1, - 2, - 5 * UNIT_BTC, - 1, - )?)?; - - timer.lap("end prepare block 3 events"); - - let mut requested_actions = - rpc_queue.get_requested_actions_from_rpc(&mut proof_store, checkpoint_id)?; - - let orchestrator_result_step_1 = CityOrchestrator::step_1_produce_block_enqueue_jobs( - &mut proof_store, - &mut store, - &mut requested_actions, - &mut worker_event_processor, - &mut api, - &fingerprints, - &sighash_whitelist_tree, - )?; - /*let end_state_root = CityStore::get_city_root(&store, 2)?; - tracing::info!( - "end_state_root: {} ({:?})", - end_state_root.to_string(), - end_state_root.0 - );*/ - loop { - if worker_event_processor.job_queue.is_empty() { - break; - } - CityWorker::process_next_job(&mut proof_store, &mut worker_event_processor, &root_toolbox, QWorkerMode::All)?; - } - api.mine_blocks(1)?; - let orchestrator_result_step_2 = CityOrchestrator::step_2_produce_block_finalize_and_transact( - &mut proof_store, - &mut api, - &orchestrator_result_step_1, - )?; - tracing::info!( - "produced block, sent to : {}", - orchestrator_result_step_2.to_hex_string() - ); - api.mine_blocks(1)?; - checkpoint_id = 4; - tracing::info!("starting block {}", checkpoint_id); - Ok(()) -} - -fn main() { - run_full_block().unwrap(); -} diff --git a/city_rollup_rpc_provider/Cargo.toml b/city_rollup_rpc_provider/Cargo.toml index f83e59e..e405038 100644 --- a/city_rollup_rpc_provider/Cargo.toml +++ b/city_rollup_rpc_provider/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" reqwest = { workspace = true } async-trait = { workspace = true } city_rollup_core_api = { path = "../city_rollup_core_api" } +city_common = { path = "../city_common" } city_crypto = { path = "../city_crypto" } city_rollup_common = { path = "../city_rollup_common" } city_rollup_core_node = { path = "../city_rollup_core_node" } diff --git a/city_rollup_rpc_provider/src/lib.rs b/city_rollup_rpc_provider/src/lib.rs index 0808d82..ffad8c6 100644 --- a/city_rollup_rpc_provider/src/lib.rs +++ b/city_rollup_rpc_provider/src/lib.rs @@ -1,12 +1,13 @@ use std::sync::Arc; +use city_common::data::{kv::SimpleKVPair, u8bytes::U8Bytes}; use city_crypto::hash::base_types::hash160::Hash160; use city_crypto::hash::base_types::hash256::Hash256; use city_macros::{city_external_rpc_call, city_external_rpc_call_sync, city_rpc_call, city_rpc_call_sync}; -use city_rollup_common::api::data::{ +use city_rollup_common::{api::data::{ block::rpc_request::*, store::{CityL1Deposit, CityL1Withdrawal, CityL2BlockState, CityUserState}, -}; +}, qworker::job_id::QProvingJobDataIDSerializedWrapped}; use city_rollup_core_node::rpc::{ ExternalRequestParams, Id, RequestParams, ResponseResult, RpcParams, RpcRequest, RpcResponse, Version, @@ -148,6 +149,16 @@ pub trait CityRpcProvider { withdrawal_id: u64, ) -> anyhow::Result; + async fn get_proof_store_value( + &self, + key: QProvingJobDataIDSerializedWrapped, + ) -> anyhow::Result; + + async fn get_proof_store_values( + &self, + keys: &[QProvingJobDataIDSerializedWrapped], + ) -> anyhow::Result>>; + async fn register_user( &self, req: CityRegisterUserRPCRequest, @@ -271,6 +282,16 @@ pub trait CityRpcProviderSync { withdrawal_id: u64, ) -> anyhow::Result; + fn get_proof_store_value_sync( + &self, + key: QProvingJobDataIDSerializedWrapped, + ) -> anyhow::Result; + + fn get_proof_store_values_sync( + &self, + keys: &[QProvingJobDataIDSerializedWrapped], + ) -> anyhow::Result>>; + fn register_user_sync( &self, req: CityRegisterUserRPCRequest, @@ -544,6 +565,29 @@ impl CityRpcProvider for RpcProvider { ) } + async fn get_proof_store_value( + &self, + key: QProvingJobDataIDSerializedWrapped, + ) -> anyhow::Result { + city_external_rpc_call!( + self, + "cr_getProofStoreValue", + json!([key]), + U8Bytes + ) + } + async fn get_proof_store_values( + &self, + keys: &[QProvingJobDataIDSerializedWrapped], + ) -> anyhow::Result>> { + city_external_rpc_call!( + self, + "cr_getProofStoreValues", + json!([keys]), + Vec> + ) + } + async fn register_user( &self, req: CityRegisterUserRPCRequest, @@ -826,6 +870,30 @@ impl CityRpcProviderSync for RpcProviderSync { ) } + fn get_proof_store_value_sync( + &self, + key: QProvingJobDataIDSerializedWrapped, + ) -> anyhow::Result { + city_external_rpc_call_sync!( + self, + "cr_getProofStoreValue", + json!([key]), + U8Bytes + ) + } + + fn get_proof_store_values_sync( + &self, + keys: &[QProvingJobDataIDSerializedWrapped], + ) -> anyhow::Result>> { + city_external_rpc_call_sync!( + self, + "cr_getProofStoreValues", + json!([keys]), + Vec> + ) + } + fn register_user_sync( &self, req: CityRegisterUserRPCRequest, diff --git a/city_rollup_user_cli/src/subcommand/repl.rs b/city_rollup_user_cli/src/subcommand/repl.rs index 64ac535..b3ef84c 100644 --- a/city_rollup_user_cli/src/subcommand/repl.rs +++ b/city_rollup_user_cli/src/subcommand/repl.rs @@ -11,7 +11,7 @@ use city_rollup_common::{ link_api::BTCLinkAPI, traits::{QBitcoinAPIFunderSync, QBitcoinAPISync}, tx::{send_entire_balance_simple_p2pkh, send_p2pkh_exact_value}, - }, + }, qworker::job_id::QProvingJobDataIDSerializedWrapped, }; use city_rollup_rpc_provider::{CityRpcProviderSync, RpcProviderSync}; @@ -25,6 +25,17 @@ const D: usize = 2; type C = PoseidonGoldilocksConfig; type F = GoldilocksField; */ + +fn parse_job_id_array(input_str: &str) -> anyhow::Result>{ + input_str + .replace('\"', "") + .replace(' ', "") + .replace('[', "") + .replace(']', "") + .split(",") + .map(|x| QProvingJobDataIDSerializedWrapped::from_hex_string(x).map_err(|err| anyhow::anyhow!(err))) + .collect::>>() +} const MAX_CHECKPOINT_ID: u64 = 0xffffffff; struct ReplContext { pub city_rpc: RpcProviderSync, @@ -189,6 +200,27 @@ fn get_user_ids_for_public_key( Ok(Some(serde_json::to_string(&results)?)) } +fn get_proof_store_kv( + args: HashMap, + context: &mut ReplContext, +) -> Result> { + let key_str: String = args["keys"].convert()?; + let key_str = key_str.trim(); + println!("got keys: '{}'", key_str); + + if key_str.len() == 48 { + let key = QProvingJobDataIDSerializedWrapped::from_hex_string(&key_str)?; + let result = context.city_rpc.get_proof_store_value_sync(key)?; + Ok(Some(hex::encode(&result.0))) + + + + }else{ + let keys: Vec = parse_job_id_array(key_str)?; + let results = context.city_rpc.get_proof_store_values_sync(&keys)?; + Ok(Some(serde_json::to_string_pretty(&results)?)) + } +} fn spend_all(args: HashMap, context: &mut ReplContext) -> Result> { let private_key: String = args["private_key"].convert()?; @@ -376,6 +408,11 @@ pub async fn run(args: RPCReplArgs) -> Result<()> { Command::new("random_l1_wallet", random_dogecoin_wallet) .with_help("generate a random dogecoin P2PKH wallet"), ) + .add_command( + Command::new("get_proof_store_kv", get_proof_store_kv) + .with_help("get one or more keys from the proof store") + .with_parameter(Parameter::new("keys").set_required(true)?)?, + ) .add_command(Command::new("exit", exit_repl).with_help("exits the repl")) .add_command(Command::new("quit", exit_repl).with_help("exits the repl")); repl.run().map_err(|err| err.into()) diff --git a/kvq/src/traits.rs b/kvq/src/traits.rs index 752ef41..47444bd 100644 --- a/kvq/src/traits.rs +++ b/kvq/src/traits.rs @@ -1,13 +1,11 @@ use serde::Deserialize; use serde::Serialize; -use serde_with::serde_as; pub struct KVQPair { pub key: K, pub value: V, } -#[serde_as] #[derive(Serialize, Deserialize, PartialEq, Clone)] pub struct KVQPairSerializable { pub key: K, diff --git a/qbench_data/example.bin b/qbench_data/example.bin new file mode 100644 index 0000000000000000000000000000000000000000..f44652302b2c65ffb2c3be2462288bd76c563418 GIT binary patch literal 1433052 zcmeFZWmr{hv^EMz3(}#0gc1V6>L4Tp1VmD#g_VGWba$6@Nh1hIr$`9`f|Rs?A}Jsx zib_bG>E18z{=R*#>-_n?U+3EM&t%Q@%&|t?;~w{X*18}k`LBcgpFhd|IiJ7&@8|RP z3(s#oUqDJSOhR)0E+fhL<^NcA{^G_BV9oi#NXGZipQQhs$k7Fd`HKhJwKa925rp4aVT{ za1aEJB;Y|X0tQNiV4x`ADg=gtVK5jd5=J<;gM<>HL@;0n3dKMWSQHk617i?42oZz? zfzc=|uoQ}e5() z2g1XFpdc^^8jl2{!3aDQfy97_1SA%Q2NO{c6dn#mg9vCG7=i#iCISv(U?3a{cWwuU zMd4sD3<{1yAW$F}P$4t~LjYmXXgC6m#DQ@*5EuoA6EO$^1cgQtUFS} z21UV%|KflMhd>B_(L+R`Fd!HRj6mX%Kqaw66dZMIs3hC=o=&!O=hgkthTPhsHu-SUehuhe6Q< zz-25Phr)y5SOggJFAiWp9)R2dae?qq5DtpRV*vERz&IEZPsD;jZ~*2I3<8EC0JtZD zpb)@+H~<_t9)?DMVVHA&uz)877!ilUg0M(55e`P+(0CxJ7!(wPfnmW=92x_I;D9J_ zFdUc&_=7|ffcz1F#(~2L&~rNw?B5cDAutRCjRFF|L%~=)3=T%aiD(QO$PXR~!4Zj2 zJdkhXe>4Juh(`kLha=)406@;|5OG8>9s`9V(O@DG27?1Pfp7>Y@PTMN8psbC4kO?| z5F8ZfB@|FTC=Tcn7z7MQ;?P9!fAt9tf&}7*0SUqY-2?+8K}Z}D48(_rLQ#02&%p%1 z92QJ~VW0#I9E!sckyr!(L@XE#0P(-#0;8}vBpeIH;!r?2q1rW2!aU10d)b23&R1P1Mnt5 zh*$v6Fa(i6K!Q;Kx(Ij(90lYBMLpL0hM*Bdpx?lF6ch;ngm`X;2#4e0crXMELSmsvFac-_1RO-f z0+fP6fly#D5r85R0RaPj2nHwya0!Kh0_+Gh7#sk^xg7v5C^QIxf?&}wJWwQnV&DiE z5I9hAzytuCzuk>Nf)OAhfI~b1AYC{V0m8wsPy!DBZ-1fxCKmD+?@%NNAT~G>iz1={ zibNst2t2SF4hQl9v>*foKnAE9z-+|7tqUU}ad^VN_yGZ^g<}bzzfc8I4gx`lC;|k6 zL!w~_BoYaS0GR_|1BStYu7SWofK?<=Ef5xg#{)>ip2r0=GSE{1ssVHY*@mMDL;!Md z3;~M<0V4$hMFD*e0w@iMM1esVpg#eI!J`4!!3coS|Fr|qGzy?C6bOwYK;Te-!+<;i ztxJRe?%@eUGzdn-KmcAuqk#@0{>3RCm|Oq|Q2-@l{;m68c*DU+G=M`4P*E%r3h8qp?V!b%2HeY6LJnFpz-I z{xUNXgM*@pC?pI^0Nw>Mj3lD4cwia8u1F#nNYcM{a3I*f_2>W*y zf&fqw!Du`IM*st%0s|j`h63yfFfAShoKQg9oX14~;Q&aW5J1uha14M8B9Jfuxfmi6 zi~;BZOayKKnC0&bL&9-rfEjQgBIIvB0}~kcuN@TNB|teqZvxc^ngnQlfE5TZ06akH zfI&?JApnR0@WJCi0L=ndad2RiVIf2`FsJ_IXAn?q0JJEe-vKZqVK6WljDP@o1%o64 z;h|szU|<0JgMtDe$6^3hBLHy3VSpq8WP|*-zW|v7P%svafB;+oKnWmm7#dJLAV50+ zWx@eD0Vp1TF<=S-B##J#;6VWBftdoxBlN%Xod6;NYls-2mO$kAzkEOd+<^n#0q`~w z1HpjN2q+$y`B0#dVITw+h9Mx~0JeaMfkgbvhbRz`QhM4)jP z0NxlP29E&L0-!Dcy?{g_fbN3*oxm6(9{X>-z$gR=0|lf87KQ{S9{~d(1`t@lbO&e$ zgv9~_6yRo{`oNIJ0u~S;7z#=Ra0LaFCIHs|MdbdYOaD{<{&!vae@h4c-_mQq$O9+> z5GBaJ*+D?jfLO%9(GWNRjs{>&0HFZchyk<@3g{#}Jb_nGCcKpkRQ33XFb$umHFNx()~WE1DnxjRB$%kAVQ=4Tb=C1h9_; z9&3Q2!2jh32!RMVg2&=90Bb-1y28UyL;?hm$pi=jc<4a@R0T8x9(ay`qXFUq^c_I< zf0+RX_=@|te*dFO|3{bpk1qWmUHU(|^gjpB|LD^H(WU>t(xn0d|DXG<|LWK4*Z-Gw zKrfu{xBkcdr2nY0|9wxF?0k*<`JV3uU>zw5>f}GyGyZdz!0+{>B*y-OP@hxUhp#sD zHinp0x|odeBGtCWsITsf8kA3{3GyN1p*gTc(bpNuG;+z0w+g-KYsbqD?PbH|w98F4 zQ$?vzLFmAhc?(5*@JElkk}dHLl*i^gT+>S;6VZi-Y9=Nb?BBi1r{}prNbvcGh_qtl6 zkXmoG1WxZfCiQ#D-F`lVVWw}aBI@?D+kL~G5jsuecYVfEc%yBiTC!X>M{nf146lzvwLNQ4lQ70e&i>KJzhNmx+F*ZgQI-|W62a9HFVwHs1{ zC9(O?N_#=XvXh~MdolhiMb2#=yv472-tp?uD1EP&#Did zX2fTLGG(%~S@@D5>CkQKqlKf#MsCFXi30bj5(V&&nOy-edu=Nod^z)iCAqStP_1># z-km;Y6CDw|SMUoZL&VXGL=m}kOS$mCA8M`{iYE;8_4XX#RGGU73qJL-P1DcO4M&PW zd+MWBjwZKU?d-ZN7`l#qp7Z4qLxdEJ{=7CvwDX_ipus&zK5X#d7Ui;>>Rc~0>h8~8 zif{4O-)HH@RF3rbCVNjs`d|Or-^xsSYy2spnzzkFX7Xu6{?NN`YWFI^s?Zi$|Kvg% z{<|(EzPoIl!JIEQJg>WRYThYYm}S@b(z6=YP;T+bVFq6j y-VDx4Od)}C0>Yje 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

P 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%0DPk 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


GG5) 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