From 08f743ddcae8f60160d5d1b5c0305ce27ae203cf Mon Sep 17 00:00:00 2001 From: Alex Metelli Date: Sat, 30 Nov 2024 06:38:07 +0800 Subject: [PATCH] Switch to sha2 mmr (#8) * minor fixes * implemented-sha2-for hashing * refacto env and logger initalizer * test for mmr inclusion proofs + verify * refacto guest to return all new hashes * implemented direct state write after proof generation * fmt + lint * fixed merge issues * errors refacto * refacto methods crate * fmt * + tests for guest mmr * cleanup deps * added test for guest mmr * added headers and validity inclusion proofs logic * renamed host to publisher * temp ignored mmr test --- .gitignore | 2 + .tool-versions | 3 +- Cargo.lock | 460 ++++++++++-------- Cargo.toml | 5 +- README.md | 20 +- config/anvil.messaging.json | 4 +- contracts/starknet/Scarb.lock | 25 +- contracts/starknet/Scarb.toml | 9 +- .../starknet/l1_message_proxy/Scarb.toml | 2 +- .../starknet/l1_message_proxy/src/lib.cairo | 6 +- contracts/starknet/store/Scarb.toml | 6 +- contracts/starknet/store/src/lib.cairo | 72 +-- contracts/starknet/verifier/Scarb.toml | 7 +- .../verifier/src/fossil_verifier.cairo | 80 +++ contracts/starknet/verifier/src/lib.cairo | 1 + crates/client/Cargo.toml | 2 +- crates/client/db-store/0.db | Bin 1253376 -> 0 bytes crates/client/src/client.rs | 62 +-- crates/common/Cargo.toml | 4 +- crates/common/src/lib.rs | 58 ++- crates/ethereum/src/lib.rs | 4 +- crates/guest-mmr/Cargo.toml | 20 + crates/guest-mmr/src/core.rs | 407 ++++++++++++++++ crates/guest-mmr/src/formatting.rs | 30 ++ crates/guest-mmr/src/helper.rs | 176 +++++++ crates/guest-mmr/src/lib.rs | 3 + crates/guest-mmr/tests/mmr_test.rs | 31 ++ crates/guest-types/src/lib.rs | 109 ++++- crates/host/bin/update_mmr.rs | 47 -- crates/methods/Cargo.toml | 2 +- .../{guest => blocks-validity}/Cargo.toml | 8 +- crates/methods/blocks-validity/src/main.rs | 31 ++ crates/methods/guest/src/guest_mmr.rs | 261 ---------- crates/methods/guest/src/lib.rs | 1 - crates/methods/mmr-append/Cargo.toml | 16 + .../methods/{guest => mmr-append}/src/main.rs | 35 +- crates/mmr-utils/Cargo.toml | 9 +- crates/mmr-utils/src/lib.rs | 182 ++++++- crates/{host => publisher}/Cargo.toml | 7 +- crates/{host => publisher}/bin/build_mmr.rs | 51 +- crates/publisher/bin/update_mmr.rs | 47 ++ .../bin/verify_block_inclusion.rs | 0 crates/{host => publisher}/src/accumulator.rs | 84 ++-- crates/{host => publisher}/src/db_access.rs | 4 +- crates/{host => publisher}/src/lib.rs | 51 +- .../src/proof_generator.rs | 140 +++--- crates/{host => publisher}/src/types.rs | 0 crates/publisher/src/validator.rs | 89 ++++ crates/publisher/tests/0.db | Bin 0 -> 28672 bytes crates/publisher/tests/mmr_proofs_test.rs | 35 ++ crates/relayer/src/relayer.rs | 24 +- crates/starknet-handler/Cargo.toml | 6 +- crates/starknet-handler/src/account.rs | 16 +- crates/starknet-handler/src/lib.rs | 75 ++- crates/starknet-handler/src/provider.rs | 76 ++- db-store/0.db | 0 scripts/deploy.sh | 46 +- scripts/lint.sh | 1 + scripts/run_relayer.sh | 4 +- 59 files changed, 1976 insertions(+), 980 deletions(-) create mode 100644 contracts/starknet/verifier/src/fossil_verifier.cairo delete mode 100644 crates/client/db-store/0.db create mode 100644 crates/guest-mmr/Cargo.toml create mode 100644 crates/guest-mmr/src/core.rs create mode 100644 crates/guest-mmr/src/formatting.rs create mode 100644 crates/guest-mmr/src/helper.rs create mode 100644 crates/guest-mmr/src/lib.rs create mode 100644 crates/guest-mmr/tests/mmr_test.rs delete mode 100644 crates/host/bin/update_mmr.rs rename crates/methods/{guest => blocks-validity}/Cargo.toml (72%) create mode 100644 crates/methods/blocks-validity/src/main.rs delete mode 100644 crates/methods/guest/src/guest_mmr.rs delete mode 100644 crates/methods/guest/src/lib.rs create mode 100644 crates/methods/mmr-append/Cargo.toml rename crates/methods/{guest => mmr-append}/src/main.rs (67%) rename crates/{host => publisher}/Cargo.toml (89%) rename crates/{host => publisher}/bin/build_mmr.rs (53%) create mode 100644 crates/publisher/bin/update_mmr.rs rename crates/{host => publisher}/bin/verify_block_inclusion.rs (100%) rename crates/{host => publisher}/src/accumulator.rs (78%) rename crates/{host => publisher}/src/db_access.rs (98%) rename crates/{host => publisher}/src/lib.rs (56%) rename crates/{host => publisher}/src/proof_generator.rs (55%) rename crates/{host => publisher}/src/types.rs (100%) create mode 100644 crates/publisher/src/validator.rs create mode 100644 crates/publisher/tests/0.db create mode 100644 crates/publisher/tests/mmr_proofs_test.rs delete mode 100644 db-store/0.db diff --git a/.gitignore b/.gitignore index 445c6f7..83dbf24 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ scripts/katana/deploy.log scripts/katana/katana.log .cargo/ + +*.pb diff --git a/.tool-versions b/.tool-versions index e285a3d..782f2ed 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1,2 @@ -scarb 2.8.4 \ No newline at end of file +scarb 2.8.5 +starknet-foundry 0.33.0 diff --git a/Cargo.lock b/Cargo.lock index 67f8c05..7a356ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -188,9 +188,9 @@ dependencies = [ [[package]] name = "alloy-core" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8316d83e590f4163b221b8180008f302bda5cf5451202855cdd323e588849c" +checksum = "c3d14d531c99995de71558e8e2206c27d709559ee8e5a0452b965ea82405a013" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -201,9 +201,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2364c782a245cf8725ea6dbfca5f530162702b5d685992ea03ce64529136cc" +checksum = "80759b3f57b3b20fa7cd8fef6479930fc95461b58ff8adea6e87e618449c8a1d" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -240,9 +240,9 @@ dependencies = [ [[package]] name = "alloy-eip7702" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6cee6a35793f3db8a5ffe60e86c695f321d081a567211245f503e8c498fce8" +checksum = "4c986539255fb839d1533c128e190e557e52ff652c9ef62939e233a81dd93f7e" dependencies = [ "alloy-primitives", "alloy-rlp", @@ -266,7 +266,7 @@ dependencies = [ "derive_more", "once_cell", "serde", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -276,7 +276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b6aa3961694b30ba53d41006131a2fca3bdab22e4c344e46db2c639e7c2dfdd" dependencies = [ "alloy-eip2930", - "alloy-eip7702 0.4.1", + "alloy-eip7702 0.4.2", "alloy-primitives", "alloy-rlp", "alloy-serde 0.6.4", @@ -284,7 +284,7 @@ dependencies = [ "derive_more", "once_cell", "serde", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -311,9 +311,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84c506bf264110fa7e90d9924f742f40ef53c6572ea56a0b0bd714a567ed389" +checksum = "ac4b22b3e51cac09fd2adfcc73b55f447b4df669f983c13f7894ec82b607c63f" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -438,9 +438,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fce5dbd6a4f118eecc4719eaa9c7ffc31c315e6c5ccde3642db927802312425" +checksum = "9db948902dfbae96a73c2fbf1f7abec62af034ab883e4c777c3fd29702bd6e2c" dependencies = [ "alloy-rlp", "bytes", @@ -448,7 +448,7 @@ dependencies = [ "const-hex", "derive_more", "foldhash", - "hashbrown 0.15.1", + "hashbrown 0.15.2", "hex-literal", "indexmap 2.6.0", "itoa", @@ -580,7 +580,7 @@ checksum = "2b09cae092c27b6f1bde952653a22708691802e57bfef4a2973b80bea21efd3f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -778,23 +778,23 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9343289b4a7461ed8bab8618504c995c049c082b70c7332efd7b32125633dc05" +checksum = "3bfd7853b65a2b4f49629ec975fee274faf6dff15ab8894c620943398ef283c0" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4222d70bec485ceccc5d8fd4f2909edd65b5d5e43d4aca0b5dcee65d519ae98f" +checksum = "82ec42f342d9a9261699f8078e57a7a4fda8aaa73c1a212ed3987080e6a9cd13" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -804,16 +804,16 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e17f2677369571b976e51ea1430eb41c3690d344fef567b840bfc0b01b6f83a" +checksum = "ed2c50e6a62ee2b4f7ab3c6d0366e5770a21cad426e109c2f40335a1b3aff3df" dependencies = [ "alloy-json-abi", "const-hex", @@ -822,15 +822,15 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.87", + "syn 2.0.89", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa64d80ae58ffaafdff9d5d84f58d03775f66c84433916dc9a64ed16af5755da" +checksum = "ac17c6e89a50fb4a758012e4b409d9a0ba575228e69b539fe37d7a1bd507ca4a" dependencies = [ "serde", "winnow", @@ -838,9 +838,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6520d427d4a8eb7aa803d852d7a52ceb0c519e784c292f64bb339e636918cf27" +checksum = "c9dc0fffe397aa17628160e16b89f704098bf3c9d74d5d369ebc239575936de5" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -947,7 +947,7 @@ dependencies = [ "alloy-transport 0.6.4", "futures", "http 1.1.0", - "rustls 0.23.17", + "rustls 0.23.19", "serde_json", "tokio", "tokio-tungstenite", @@ -1063,7 +1063,7 @@ dependencies = [ "blake2", "derivative", "digest 0.10.7", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1296,7 +1296,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1307,7 +1307,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1338,7 +1338,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1512,7 +1512,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1544,7 +1544,7 @@ checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1555,9 +1555,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" dependencies = [ "serde", ] @@ -1588,9 +1588,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -1684,7 +1684,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1700,8 +1700,8 @@ dependencies = [ "clap", "common", "eyre", - "host", "mmr-utils", + "publisher", "starknet", "starknet-handler", "thiserror 2.0.3", @@ -1721,10 +1721,10 @@ version = "0.1.0" dependencies = [ "alloy-contract 0.6.4", "dotenv", - "eyre", "ruint", "starknet-crypto 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror 2.0.3", + "tracing", "tracing-subscriber 0.3.18", ] @@ -1739,9 +1739,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" dependencies = [ "cfg-if", "cpufeatures", @@ -1785,9 +1785,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -1908,7 +1908,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1919,7 +1919,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1991,7 +1991,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "unicode-xid", ] @@ -2045,7 +2045,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2159,12 +2159,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2194,7 +2194,7 @@ dependencies = [ "scrypt", "serde", "serde_json", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "sha3", "thiserror 1.0.69", "uuid 0.8.2", @@ -2397,7 +2397,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2494,7 +2494,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2536,7 +2536,7 @@ checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" [[package]] name = "garaga_rs" version = "0.1.0" -source = "git+https://github.com/ametel01/garaga.git#dbc064bd93b9bdd8f3f49f40557fdc57aa039834" +source = "git+https://github.com/ametel01/garaga.git#b768d2f71ceeb6c778eb67d87254ab4582a05468" dependencies = [ "ark-bls12-381", "ark-bn254", @@ -2548,7 +2548,7 @@ dependencies = [ "num-bigint", "num-traits", "pyo3", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-crypto 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen", ] @@ -2600,6 +2600,22 @@ dependencies = [ "subtle", ] +[[package]] +name = "guest-mmr" +version = "0.1.0" +dependencies = [ + "common", + "guest-types", + "hex", + "mmr-utils", + "num-bigint", + "num-traits", + "serde", + "sha2 0.10.8 (git+https://github.com/risc0/RustCrypto-hashes.git?tag=sha2-v0.10.8-risczero.0)", + "thiserror 2.0.3", + "tokio", +] + [[package]] name = "guest-types" version = "0.1.0" @@ -2655,9 +2671,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", @@ -2668,11 +2684,12 @@ dependencies = [ [[package]] name = "hasher" version = "0.1.0" -source = "git+https://github.com/ametel01/rust-accumulators.git?branch=workspace#177002a6b04b22ecdf360a4335217d5c3922d638" +source = "git+https://github.com/ametel01/rust-accumulators.git?branch=feat/sha2-hasher#2e1c70db54fd319edd8ab87494cab574c3647b0f" dependencies = [ "hex", "num-bigint", "num-traits", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-core", "starknet-crypto 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "strum", @@ -2750,34 +2767,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "host" -version = "0.1.0" -dependencies = [ - "clap", - "common", - "dotenv", - "eth-rlp-types", - "ethereum", - "eyre", - "garaga_rs", - "guest-types", - "methods", - "mmr", - "mmr-utils", - "risc0-ethereum-contracts", - "risc0-groth16", - "risc0-zkvm", - "serde", - "sqlx", - "starknet-crypto 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "starknet-handler", - "store", - "thiserror 2.0.3", - "tokio", - "tracing", -] - [[package]] name = "http" version = "0.2.12" @@ -2913,12 +2902,12 @@ dependencies = [ "http 1.1.0", "hyper 1.5.1", "hyper-util", - "rustls 0.23.17", + "rustls 0.23.19", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", "tower-service", - "webpki-roots 0.26.6", + "webpki-roots 0.26.7", ] [[package]] @@ -3094,7 +3083,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3180,13 +3169,13 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.89", ] [[package]] @@ -3213,7 +3202,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.1", + "hashbrown 0.15.2", "serde", ] @@ -3234,9 +3223,9 @@ dependencies = [ [[package]] name = "interprocess" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f4e4a06d42fab3e85ab1b419ad32b09eab58b901d40c57935ff92db3287a13" +checksum = "894148491d817cb36b6f778017b8ac46b17408d522dd90f539d677ea938362eb" dependencies = [ "doctest-file", "futures-core", @@ -3279,9 +3268,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" @@ -3302,7 +3291,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "once_cell", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3332,7 +3321,7 @@ checksum = "bbc2a4da0d9e52ccfe6306801a112e81a8fc0c76aa3e4449fefeda7fef72bb34" dependencies = [ "lambdaworks-math 0.10.0", "serde", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "sha3", ] @@ -3343,7 +3332,7 @@ source = "git+https://github.com/lambdaclass/lambdaworks.git#d016a730e106fa2ff61 dependencies = [ "lambdaworks-math 0.11.0", "serde", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "sha3", ] @@ -3387,7 +3376,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3401,9 +3390,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.164" +version = "0.2.166" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" [[package]] name = "libm" @@ -3440,9 +3429,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "litemap" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -3466,7 +3455,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.1", + "hashbrown 0.15.2", ] [[package]] @@ -3478,6 +3467,15 @@ dependencies = [ "libc", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "maybe-async" version = "0.2.10" @@ -3486,7 +3484,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3572,7 +3570,7 @@ dependencies = [ [[package]] name = "mmr" version = "0.1.0" -source = "git+https://github.com/ametel01/rust-accumulators.git?branch=workspace#177002a6b04b22ecdf360a4335217d5c3922d638" +source = "git+https://github.com/ametel01/rust-accumulators.git?branch=feat/sha2-hasher#2e1c70db54fd319edd8ab87494cab574c3647b0f" dependencies = [ "hasher", "store", @@ -3589,6 +3587,7 @@ dependencies = [ "sqlx", "store", "thiserror 2.0.3", + "tokio", "uuid 1.11.0", ] @@ -3719,7 +3718,7 @@ checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3769,7 +3768,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3826,7 +3825,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3926,7 +3925,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -3970,9 +3969,9 @@ checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -4067,14 +4066,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -4093,7 +4092,7 @@ dependencies = [ "rand", "rand_chacha", "rand_xorshift", - "regex-syntax", + "regex-syntax 0.8.5", "rusty-fork", "tempfile", "unarray", @@ -4119,7 +4118,35 @@ dependencies = [ "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", +] + +[[package]] +name = "publisher" +version = "0.1.0" +dependencies = [ + "clap", + "common", + "dotenv", + "eth-rlp-types", + "ethereum", + "eyre", + "garaga_rs", + "guest-types", + "methods", + "mmr", + "mmr-utils", + "risc0-ethereum-contracts", + "risc0-groth16", + "risc0-zkvm", + "serde", + "sqlx", + "starknet-crypto 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", + "starknet-handler", + "store", + "thiserror 2.0.3", + "tokio", + "tracing", ] [[package]] @@ -4170,7 +4197,7 @@ dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -4183,7 +4210,7 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -4203,7 +4230,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.17", + "rustls 0.23.19", "socket2", "thiserror 2.0.3", "tokio", @@ -4221,7 +4248,7 @@ dependencies = [ "rand", "ring", "rustc-hash", - "rustls 0.23.17", + "rustls 0.23.19", "rustls-pki-types", "slab", "thiserror 2.0.3", @@ -4353,8 +4380,17 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -4365,9 +4401,15 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.5", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.5" @@ -4456,13 +4498,13 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.17", + "rustls 0.23.19", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tokio", "tokio-native-tls", "tokio-rustls 0.26.0", @@ -4473,7 +4515,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.6", + "webpki-roots 0.26.7", "windows-registry", ] @@ -4514,7 +4556,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "serde", - "syn 2.0.87", + "syn 2.0.89", "tracing", ] @@ -4628,7 +4670,7 @@ dependencies = [ "risc0-core", "risc0-zkvm-platform", "serde", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "tracing", ] @@ -4659,7 +4701,7 @@ dependencies = [ "rrs-lib", "semver 1.0.23", "serde", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "stability", "tempfile", "tracing", @@ -4709,9 +4751,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" dependencies = [ "const-oid", "digest 0.10.7", @@ -4820,9 +4862,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.17" +version = "0.23.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f1a745511c54ba6d4465e8d5dfbd81b45791756de28d4981af70d6dca128f1e" +checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" dependencies = [ "once_cell", "ring", @@ -4948,7 +4990,7 @@ dependencies = [ "hmac", "pbkdf2", "salsa20", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -5048,7 +5090,7 @@ checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5113,7 +5155,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5138,6 +5180,16 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha2" +version = "0.10.8" +source = "git+https://github.com/risc0/RustCrypto-hashes.git?tag=sha2-v0.10.8-risczero.0#244dc3b08788f7a4ccce14c66896ae3b4f24c166" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha3" version = "0.10.8" @@ -5212,9 +5264,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -5292,7 +5344,7 @@ dependencies = [ "percent-encoding", "serde", "serde_json", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec", "sqlformat", "thiserror 1.0.69", @@ -5312,7 +5364,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5330,12 +5382,12 @@ dependencies = [ "quote", "serde", "serde_json", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "sqlx-core", "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.87", + "syn 2.0.89", "tempfile", "tokio", "url", @@ -5374,7 +5426,7 @@ dependencies = [ "rsa", "serde", "sha1", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec", "sqlx-core", "stringprep", @@ -5412,7 +5464,7 @@ dependencies = [ "rand", "serde", "serde_json", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec", "sqlx-core", "stringprep", @@ -5451,7 +5503,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" dependencies = [ "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5530,7 +5582,7 @@ source = "git+https://github.com/xJonathanLEI/starknet-rs.git?branch=master#5c67 dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5546,7 +5598,7 @@ dependencies = [ "num-integer", "num-traits", "rfc6979", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-curve 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-types-core", "zeroize", @@ -5564,7 +5616,7 @@ dependencies = [ "num-integer", "num-traits", "rfc6979", - "sha2", + "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-curve 0.5.1 (git+https://github.com/xJonathanLEI/starknet-rs.git?branch=master)", "starknet-types-core", "zeroize", @@ -5592,10 +5644,11 @@ name = "starknet-handler" version = "0.1.0" dependencies = [ "common", + "crypto-bigint", "starknet", "starknet-crypto 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror 2.0.3", - "tracing", + "url", ] [[package]] @@ -5604,7 +5657,7 @@ version = "0.2.1" source = "git+https://github.com/xJonathanLEI/starknet-rs.git?branch=master#5c676a64031901b5a203168fd8ef8d6b40a5862f" dependencies = [ "starknet-core", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5666,7 +5719,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "store" version = "0.1.0" -source = "git+https://github.com/ametel01/rust-accumulators.git?branch=workspace#177002a6b04b22ecdf360a4335217d5c3922d638" +source = "git+https://github.com/ametel01/rust-accumulators.git?branch=feat/sha2-hasher#2e1c70db54fd319edd8ab87494cab574c3647b0f" dependencies = [ "async-trait", "futures", @@ -5711,7 +5764,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5733,9 +5786,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ "proc-macro2", "quote", @@ -5744,14 +5797,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f76fe0a3e1476bdaa0775b9aec5b869ed9520c2b2fedfe9c6df3618f8ea6290b" +checksum = "da0523f59468a2696391f2a772edc089342aacd53c3caa2ac3264e598edf119b" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5762,9 +5815,9 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -5777,7 +5830,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5852,7 +5905,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5863,7 +5916,7 @@ checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -5960,6 +6013,7 @@ dependencies = [ "bytes", "libc", "mio", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", @@ -5975,7 +6029,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -6004,7 +6058,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.17", + "rustls 0.23.19", "rustls-pki-types", "tokio", ] @@ -6029,12 +6083,12 @@ checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", - "rustls 0.23.17", + "rustls 0.23.19", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", "tungstenite", - "webpki-roots 0.26.6", + "webpki-roots 0.26.7", ] [[package]] @@ -6095,9 +6149,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -6107,20 +6161,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -6152,10 +6206,14 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ + "matchers", "nu-ansi-term", + "once_cell", + "regex", "sharded-slab", "smallvec", "thread_local", + "tracing", "tracing-core", "tracing-log", ] @@ -6179,7 +6237,7 @@ dependencies = [ "httparse", "log", "rand", - "rustls 0.23.17", + "rustls 0.23.19", "rustls-pki-types", "sha1", "thiserror 1.0.69", @@ -6236,9 +6294,9 @@ checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" @@ -6281,9 +6339,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -6403,7 +6461,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "wasm-bindgen-shared", ] @@ -6437,7 +6495,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6503,9 +6561,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.6" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] @@ -6796,9 +6854,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ "serde", "stable_deref_trait", @@ -6808,13 +6866,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "synstructure", ] @@ -6836,27 +6894,27 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "zerofrom" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "synstructure", ] @@ -6877,7 +6935,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -6899,5 +6957,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] diff --git a/Cargo.toml b/Cargo.toml index 633ee0b..8b3c4d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,10 +6,11 @@ members = [ "crates/relayer", "crates/common", "crates/methods", - "crates/host", + "crates/publisher", "crates/guest-types", "crates/ethereum", - "crates/mmr-utils", + "crates/mmr-utils", + "crates/guest-mmr", ] # Always optimize; building and running the guest takes much longer without optimization. diff --git a/README.md b/README.md index f1cbae7..9d7cd13 100644 --- a/README.md +++ b/README.md @@ -90,14 +90,9 @@ Deploy the messaging infrastructure contracts: source .env ``` -2. Access deployment scripts: +2. Execute deployment pipeline: ```bash - cd scripts - ``` - -3. Execute deployment pipeline: - ```bash - ./deploy.sh + ./scripts/deploy.sh ``` > **Technical Note:** Verify `deploy.sh` configuration for correct contract deployment parameters on Katana network. @@ -113,19 +108,14 @@ Initialize the Light Client service: 2. Execute client binary: ```bash - cargo run + cargo run --release ``` ## Terminal 5: Block Hash Relayer Process Initialize the L1->L2 block hash relay service: -1. Access relayer scripts: +1. Execute relayer process: ```bash - cd scripts + ./scripts/run_relayer.sh ``` - -2. Execute relayer process: - ```bash - ./run_relayer.sh - ``` \ No newline at end of file diff --git a/config/anvil.messaging.json b/config/anvil.messaging.json index 7770708..cdb4c0e 100644 --- a/config/anvil.messaging.json +++ b/config/anvil.messaging.json @@ -1,9 +1,9 @@ { "chain": "ethereum", "rpc_url": "http://127.0.0.1:8545", - "contract_address": "0xD185B4846E5fd5419fD4D077dc636084BEfC51C0", + "contract_address": "0xF62eEc897fa5ef36a957702AA4a45B58fE8Fe312", "sender_address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "private_key": "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", "interval": 2, - "from_block": 21246828 + "from_block": 21281491 } \ No newline at end of file diff --git a/contracts/starknet/Scarb.lock b/contracts/starknet/Scarb.lock index 60aeb78..65e1b6c 100644 --- a/contracts/starknet/Scarb.lock +++ b/contracts/starknet/Scarb.lock @@ -1,6 +1,13 @@ # Code generated by scarb DO NOT EDIT. version = 1 +[[package]] +name = "fossil_store" +version = "0.1.0" +dependencies = [ + "snforge_std", +] + [[package]] name = "garaga" version = "0.1.0" @@ -10,36 +17,30 @@ source = "git+https://github.com/keep-starknet-strange/garaga.git?rev=65a2fad#65 name = "l1_message_proxy" version = "0.1.0" dependencies = [ + "fossil_store", "snforge_std", - "store", ] [[package]] name = "snforge_scarb_plugin" -version = "0.32.0" +version = "0.33.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:e5a0e80294b1f5f00955c614ee3fc94c843ff0d27935693c3598d0ac8d79250a" +checksum = "sha256:b4dd6088372decd367652827091e0589bbf6bc550dfc3957baa3e9c61d6eb449" [[package]] name = "snforge_std" -version = "0.32.0" +version = "0.33.0" source = "registry+https://scarbs.xyz/" -checksum = "sha256:0e3cb45c6276334fd142a77212f0592d55744f1c022b7a63f20bcd79d0ce3927" +checksum = "sha256:f7dc3349f8a6ef4915c93df447a00bd5a53a31129fd0990a00afa0ad31d91b06" dependencies = [ "snforge_scarb_plugin", ] -[[package]] -name = "store" -version = "0.1.0" -dependencies = [ - "snforge_std", -] - [[package]] name = "verifier" version = "0.1.0" dependencies = [ + "fossil_store", "garaga", "snforge_std", ] diff --git a/contracts/starknet/Scarb.toml b/contracts/starknet/Scarb.toml index 66cc5a6..24ee6b0 100644 --- a/contracts/starknet/Scarb.toml +++ b/contracts/starknet/Scarb.toml @@ -2,9 +2,12 @@ members = ["l1_message_proxy", "store", "verifier"] [workspace.dependencies] -starknet = "2.8.4" -assert_macros = "2.8.4" -snforge_std = "0.32.0" +starknet = "2.8.5" +assert_macros = "2.8.5" +snforge_std = "0.33.0" + +[dev-dependencies] +snforge_std.workspace = true [[target.starknet-contract]] casm = true diff --git a/contracts/starknet/l1_message_proxy/Scarb.toml b/contracts/starknet/l1_message_proxy/Scarb.toml index 9d68f0f..6b124c6 100644 --- a/contracts/starknet/l1_message_proxy/Scarb.toml +++ b/contracts/starknet/l1_message_proxy/Scarb.toml @@ -7,7 +7,7 @@ edition = "2023_11" [dependencies] starknet = { workspace = true } -store = { path = "../store" } +fossil_store = { path = "../store" } [dev-dependencies] assert_macros.workspace = true diff --git a/contracts/starknet/l1_message_proxy/src/lib.cairo b/contracts/starknet/l1_message_proxy/src/lib.cairo index 4327bf6..790d59f 100644 --- a/contracts/starknet/l1_message_proxy/src/lib.cairo +++ b/contracts/starknet/l1_message_proxy/src/lib.cairo @@ -1,12 +1,12 @@ #[starknet::contract] pub mod L1MessageProxy { + use fossil_store::{IFossilStoreDispatcher, IFossilStoreDispatcherTrait}; use starknet::{ContractAddress, EthAddress}; - use store::{IStoreDispatcher, IStoreDispatcherTrait}; #[storage] struct Storage { l1_messages_sender: EthAddress, - store_dispatcher: IStoreDispatcher, + store_dispatcher: IFossilStoreDispatcher, } #[constructor] @@ -14,7 +14,7 @@ pub mod L1MessageProxy { ref self: ContractState, l1_messages_sender: EthAddress, store_address: ContractAddress ) { self.l1_messages_sender.write(l1_messages_sender); - self.store_dispatcher.write(IStoreDispatcher { contract_address: store_address }); + self.store_dispatcher.write(IFossilStoreDispatcher { contract_address: store_address }); } #[l1_handler] diff --git a/contracts/starknet/store/Scarb.toml b/contracts/starknet/store/Scarb.toml index b53f3dc..cedd305 100644 --- a/contracts/starknet/store/Scarb.toml +++ b/contracts/starknet/store/Scarb.toml @@ -1,16 +1,16 @@ [package] -name = "store" +name = "fossil_store" version = "0.1.0" edition = "2023_11" # See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html [dependencies] -starknet = { workspace = true } +starknet.workspace = true [dev-dependencies] assert_macros.workspace = true -snforge_std.workspace = true# +snforge_std.workspace = true [tool] fmt.workspace = true diff --git a/contracts/starknet/store/src/lib.cairo b/contracts/starknet/store/src/lib.cairo index 4157d26..e0a00dd 100644 --- a/contracts/starknet/store/src/lib.cairo +++ b/contracts/starknet/store/src/lib.cairo @@ -1,27 +1,33 @@ #[starknet::interface] -pub trait IStore { +pub trait IFossilStore { fn store_latest_blockhash_from_l1(ref self: TContractState, block_number: u64, blockhash: u256); fn update_mmr_state( ref self: TContractState, latest_mmr_block: u64, - mmr_root: felt252, + mmr_root: u256, elements_count: u64, leaves_count: u64, - peaks: Array ); fn get_latest_blockhash_from_l1(self: @TContractState) -> (u64, u256); - fn get_mmr_state(self: @TContractState) -> (u64, felt252, u64, u64, Array); + fn get_mmr_state(self: @TContractState) -> Store::MMRSnapshot; } #[starknet::contract] mod Store { - use core::starknet::storage::{ - StoragePointerReadAccess, StoragePointerWriteAccess, Vec, VecTrait, MutableVecTrait - }; + use core::starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess,}; #[starknet::storage_node] pub(crate) struct MMRState { - root_hash: felt252, + latest_block_number: u64, + root_hash: u256, + elements_count: u64, + leaves_count: u64, + } + + #[derive(Copy, Drop, Serde, Debug)] + pub struct MMRSnapshot { + latest_block_number: u64, + root_hash: u256, elements_count: u64, leaves_count: u64, } @@ -29,9 +35,7 @@ mod Store { #[storage] struct Storage { latest_blockhash_from_l1: (u64, u256), - latest_mmr_block: u64, mmr_state: MMRState, - peaks_store: Vec, } #[event] @@ -50,14 +54,13 @@ mod Store { #[derive(Drop, starknet::Event)] struct MmrStateUpdated { latest_mmr_block: u64, - root_hash: felt252, + root_hash: u256, elements_count: u64, leaves_count: u64, - peaks: Array, } #[abi(embed_v0)] - impl StoreImpl of super::IStore { + impl FossilStoreImpl of super::IFossilStore { fn store_latest_blockhash_from_l1( ref self: ContractState, block_number: u64, blockhash: u256 ) { @@ -72,55 +75,32 @@ mod Store { fn update_mmr_state( ref self: ContractState, latest_mmr_block: u64, - mmr_root: felt252, + mmr_root: u256, elements_count: u64, leaves_count: u64, - peaks: Array ) { - self.latest_mmr_block.write(latest_mmr_block); - let mut curr_state = self.mmr_state; + curr_state.latest_block_number.write(latest_mmr_block); curr_state.root_hash.write(mmr_root); curr_state.elements_count.write(elements_count); curr_state.leaves_count.write(leaves_count); - let curr_peaks_len = self.peaks_store.len(); - let mut i = 0; - for peak in peaks - .clone() { - if i >= curr_peaks_len { - self.peaks_store.append().write(peak); - } else { - let mut peak_ptr = self.peaks_store.at(i); - peak_ptr.write(peak); - } - i += 1; - }; - self .emit( MmrStateUpdated { - latest_mmr_block, root_hash: mmr_root, elements_count, leaves_count, peaks + latest_mmr_block, root_hash: mmr_root, elements_count, leaves_count } ); } - fn get_mmr_state(self: @ContractState) -> (u64, felt252, u64, u64, Array) { - let latest_mmr_block = self.latest_mmr_block.read(); - + fn get_mmr_state(self: @ContractState) -> MMRSnapshot { let curr_state = self.mmr_state; - let (mmr_root, elements_count, leaves_count) = ( - curr_state.root_hash.read(), - curr_state.elements_count.read(), - curr_state.leaves_count.read(), - ); - - let mut peaks = array![]; - for i in 0..self.peaks_store.len() { - peaks.append(self.peaks_store.at(i).read()); - }; - - (latest_mmr_block, mmr_root, elements_count, leaves_count, peaks) + MMRSnapshot { + latest_block_number: curr_state.latest_block_number.read(), + root_hash: curr_state.root_hash.read(), + elements_count: curr_state.elements_count.read(), + leaves_count: curr_state.leaves_count.read(), + } } } } diff --git a/contracts/starknet/verifier/Scarb.toml b/contracts/starknet/verifier/Scarb.toml index d3a239a..d14e697 100644 --- a/contracts/starknet/verifier/Scarb.toml +++ b/contracts/starknet/verifier/Scarb.toml @@ -7,11 +7,12 @@ edition = "2023_11" [dependencies] garaga = { git = "https://github.com/keep-starknet-strange/garaga.git", rev = "65a2fad" } -starknet = { workspace = true } +starknet.workspace = true +fossil_store = { path = "../store" } [dev-dependencies] -snforge_std = { workspace = true } -assert_macros = {workspace = true } +snforge_std.workspace = true +assert_macros.workspace = true [tool] fmt.workspace = true diff --git a/contracts/starknet/verifier/src/fossil_verifier.cairo b/contracts/starknet/verifier/src/fossil_verifier.cairo new file mode 100644 index 0000000..0902e35 --- /dev/null +++ b/contracts/starknet/verifier/src/fossil_verifier.cairo @@ -0,0 +1,80 @@ +#[starknet::interface] +pub trait IFossilVerifier { + fn verify_mmr_proof( + ref self: TContractState, + latest_mmr_block: u64, + new_mmr_root: u256, + new_elements_count: u64, + new_leaves_count: u64, + proof: Span, + ) -> bool; + fn get_verifier_address(self: @TContractState) -> starknet::ContractAddress; + fn get_fossil_store_address(self: @TContractState) -> starknet::ContractAddress; +} + +#[starknet::contract] +mod FossilVerifier { + use fossil_store::{IFossilStoreDispatcher, IFossilStoreDispatcherTrait}; + use verifier::groth16_verifier::{ + IRisc0Groth16VerifierBN254Dispatcher, IRisc0Groth16VerifierBN254DispatcherTrait + }; + + #[storage] + struct Storage { + bn254_verifier: IRisc0Groth16VerifierBN254Dispatcher, + fossil_store: IFossilStoreDispatcher, + } + + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + MmrProofVerified: MmrProofVerified, + } + + #[derive(Drop, starknet::Event)] + struct MmrProofVerified { + latest_mmr_block: u64, + new_mmr_root: u256, + new_elements_count: u64, + new_leaves_count: u64, + } + + #[constructor] + fn constructor( + ref self: ContractState, + verifier_address: starknet::ContractAddress, + fossil_store_address: starknet::ContractAddress + ) { + self + .bn254_verifier + .write(IRisc0Groth16VerifierBN254Dispatcher { contract_address: verifier_address }); + self.fossil_store.write(IFossilStoreDispatcher { contract_address: fossil_store_address }); + } + + #[external(v0)] + fn verify_mmr_proof( + ref self: ContractState, + latest_mmr_block: u64, + new_mmr_root: u256, + new_elements_count: u64, + new_leaves_count: u64, + proof: Span, + ) -> bool { + let verified = self.bn254_verifier.read().verify_groth16_proof_bn254(proof); + + if verified { + self.fossil_store.read().update_mmr_state( + latest_mmr_block, new_mmr_root, new_elements_count, new_leaves_count + ); + } + + self.emit(MmrProofVerified { + latest_mmr_block, + new_mmr_root, + new_elements_count, + new_leaves_count, + }); + + verified + } +} diff --git a/contracts/starknet/verifier/src/lib.cairo b/contracts/starknet/verifier/src/lib.cairo index 3ed0da5..a449e94 100644 --- a/contracts/starknet/verifier/src/lib.cairo +++ b/contracts/starknet/verifier/src/lib.cairo @@ -1,3 +1,4 @@ pub mod groth16_verifier; mod groth16_verifier_constants; pub mod universal_ecip; +pub mod fossil_verifier; diff --git a/crates/client/Cargo.toml b/crates/client/Cargo.toml index c90a821..de767ff 100644 --- a/crates/client/Cargo.toml +++ b/crates/client/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -host = { path = "../host" } +publisher = { path = "../publisher" } starknet-handler = { path = "../starknet-handler" } common = { path = "../common" } mmr-utils = { path = "../mmr-utils" } diff --git a/crates/client/db-store/0.db b/crates/client/db-store/0.db deleted file mode 100644 index d2d0f1a7c4125a3e2151001da74ab449edf4ea65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1253376 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≠Kvey#*w(jA^%}>S&MGwapl^2GBs`Xej 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 z zgoSJHimO8=1IPIY=yTRqq!bWC0~4R`Rjs+9*ef?uv*S99#j4`8_AUT z>TqE4#iJ`cZU7JJF=igOxYBj6R!Xf09wkPVJ!y*md%A&Kr`Lg8(Qy z4+eF~Ng&|xN1<5Vg`|0S`Rj%PU|~)x;3MxY118AB3KG&$-{wKXsdP_ZOh295hR8nr zCLD3)t;0YQWnwR1Jgoe6{}qrl`Qo8vuluipq&dHMi0hVGC42u0NSb_cRQhqb#|k!r zbk_+(2y8X18s!9tZY&3gWk&*|NmMIo8CKNNOa?#5x1rCpmstHkp#ABR!G_d81kbo^ zF=3=0q@2PwS!US*$m#H_LDGyauC14cqd{&DhHkkcAWe=iU(CwB=g3fdrG1*vKf9Lv-a}B)Z+85S-m1p36)~?_DtLE#QPi&rR zUe`Me(R5tsnDv^x^ZbS zkN%|b`tp|=Pg`GCq1C8$qYABttt%?D>bGuKp;fPSgYvI%-1vp^ml{o4*RRlO+`3+c zR>RhHE3_K4F0at4+qzDLR-M+h%eNX%T3=hC)wuOF6)%yqHE3O}LaScuvI?!bt+VA{{Gjo=@|Wt5TW2b?8nt#Sv>LQ_ zDzxgi(h99Qt#=#DzqB6HY>Cmwl*rX8no6c zwCc9jDzxgfn&n${Cap$=R^#N$6Ih{tHZhAo|naX&wf4zx~<9#rDs(_t&q{zI^SS z+kd#d*uL}DKWx2W>&mSgxBjGgz1H(ucW-SZztVh7avombgA@VpyScOR8yipD7_5JM z{T1u?Uwf)c{`IVFpvbmCd8vKI*|g0W9UF}LkofF!3u|98r-Km zDcCbFBtQ;U}{oyT!i7}I-WFyn0y(W4=5XIM#R`a zalwP&YXg71^VU^AaHH4?1p$S)7X~K19!QU{N`?&Zq5T>FlM6N|F%>6JQfNY|KA@|^ z^aS8egae$dWvUFW&Cm9!LD##^B65YMlPnXi`jpwg-oePo4I|`qLXR4AEIwnL~8}`kN79CO(1)C1&J}@Tq1x3}pvs ztEgfOg0Ih-k6iUbP>U@vR{9>L7C^9&2qfSJT}+<`N))>r_ry1+xEWIyGOo}G1R|S` z)_;4|4=6FXIFbZVDRd`>5s@EXIK(WG5KxL{`?Pp?%R{iot&+k6Xfz~1^|rp{v>$Vs z#0l7Ic-+Qfz*swYC#s3&ExFI0MQ8*c@0lQ`N&T=vHR>P+yBn+N4g?GI;HSZBq0Wd8 zVqzF-#z?Sj&_2)`j9v;jfr>IlyQl?Gz_fhKS|<*{SQUXL>l+#H`asrxVb+3U$2;Bg zhek25Dvxju>G1mOcsl@pAej?tgza~&o{P5_=pPs}q+oX{|B8?{? zL6=0TH>uI+p(4o)_O|v`{RFFC3m=UvP!xd)O96Ix57_)+JFT7wlxxQT{s;OTLssI5 zc#+nmwJTTs6l)x4l~pvpjyVcSJSN4adJ1W4t^hxVLAMEK+WEgB+7mdJ1-#ezgOh$> z#rZ4yII*|D3(_CM-T+Ys_EQ|jXt9i1ihwLF4OmLi{>?9 z@a%>|)eO`avw%RB(ma^#LFu(Vd_$Pio(SzuP1fWwyGX>kZz@)^{^|8DTE%;WDTa)3&psK%0A79G=kn8ugMtzXSGzaWm|^`wQ|MQ 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

y~dSCDNn8#P=4c30lZtS(C8?!gdoL>xQPAt`QFx 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%0DG%n?|Rho+JQT!^BW-#%pdP5sHjritdL z)QLrC96iG(&9b7bucv8Y@`J^k8i+F}PwAHf(7Vmhlpc}=#qPEz0mEc4oALCio0Poa3T{C)k&!lsFUZii%nDN0#J z>dNZH=8x^Cbc;N-uCP1%AS5ZACL~c~tI>&$=OJZQ{+|BiA&Y0qm%uN-u0L7WH04am zmtWnVJZSz*Ig{+=SM?_kT(p!gZC*a=Pp)3HlrIrpp7kdWSoCz~C-+%AQ@#{&`4#6T_nz;Y`I5fnZ|hIKX8uSy z)41iA^(XgQw3II~TmIJmcx*oQcBnbNZ9J zpS)eJ)L;1<`;)sZTFRHqD__^2+;!ek&h%XQus^xWyrrB8xAL{;CU>4smV7C+@;B@) zKXK{O!s=ZAe^R{V-s|_OyFcdC|K4N#|6uFSww}8AKQ~{nU;(^l{dOlTfWoH>&vN0* zZt!>RqkVhU&4P{Vb-hJaWL#H1J`_FE(Voh$Sl+9JH7a1cW2J zyvahTLGfvBlZqqME5SkK4Qw(!!qllvDlrghB-)*TfrgpVGwEshNgQQJH^%W;7(cA{ zXzI?!R1STCbRS& zn!rYeRla0tGP`y9AV)tFn9h}2O=jsmG$VNg+>t90o6ORCXi9OqZ@#qc;Ve8fQx2REDfqem-%FNOyQ|A9A6WU0mB+5!Zu!&8Ke_yph5p}di=QgKtN2aDtBW_= z`{TX0>^)=e9(%>z>vvzX`^4S$?$XZtc3!#jn4Q~he`@<(+uyW(_4X}f4Boc&?5+OR zC7U1G{GQFHZ1y%+HhyvAJ2wU!w_pF8^`BaQ>H34#Z_X>=ht{6Cc5dxPtG~1Qy45Ey z|L5h0F5jx~mxZ?%URbz);igM}{Ldy6Qi~iojh9+WODiu;B?i=K6dsjYY^PHzJTm=7 z)xslEYZY}aOMRbqtMKsj7c~nHOMg+l@O9}gO8sGB0*jwWf7Sn`;*icA|5wU90uYqG zJoQ%wur6Je;i_8c%Q9S5E!{fxcyBce4@!TlMz8dh8Ln!VzBI#CtTWs@5&tIKx$)(idj9s#W@e3|BQv zmt?rAR=QD!tE#0^`m3tlQZd6-ozh;0s~V-<3|G}lI~lI3mbTL`QPsi&Q%5GP^b06J zRcR~rJ2iXl(q@LMTBVH)S2arO8Lq0A)>8L+vsbt}{jIv4(rSjQ+NG5YS2at^8Ln!S z3K_1dmX^|AMGx_RWw@$S{HF|8wTqw4a8{;o_6O z|JfsZx<5Reg`7yb^eJ0BwvPz1sA){lsW}CXI{1`e&OxZ;0L4TVl$5C-lP;{P8lWX8 zIEf@>^6@|^KE0YqcoK2BWRnBFj{pwf3q})Wfuqn{;#CxOSHTfr5X;sm^pFM&><*gb znf8JAp~eqqp(c{{b)~t6Jz4{BmTh$NK;yTt-rR!S5mYg;D~R6e05TK$Jy7o)u>yBn zLsUn#!URk&Cc-XTHnD-X%N4ibjd=@^xxy5N0Y~jcRKrcH!@|Onvet%0h1do248%hd zgN`?LG7B-0l-ado@szO4;syp|OG9Bm?17aUE`_(Q@~;c;EV2W~*5xez_TkmT)NSY& z5JTI;WR_k{q~Qh5gLDjN5rIyCvLfcQp+mGB267(-Z^(!q$h>Yu;je?Ahil@Pe;;fw zb%cTYrdJd3MzW`96F33~jI6y5)H|Jn@SsA;56fc?dvGQ|_RIjoWz8!d`y!8_`Qc7{ z-}GuCVT(tsEruvsh#3U+>zx7M*Mt7 zbX|IFD@0%yX2kCx+$OUJq#sqm!pHK!whZkK7;~iIaKS_`3{EfqDn?b1E#Mt6;?U4~ zIvm7%;n~(h;r*@yt{kDW8XbviML{p-!=^T2tFO2 z8{j9*OY8MycHi{(4IVEDIS0L-S<|YS#^^olLQxeMgR(29S%U9sBqI+Q;IvdMWhg3o zo}LJldosIE`ulz!a6`%L-l^|e)jRatjQP|~jSwwW|+Mh9xaOuXD z8hU|NtE*D?GXqSu4}%LSnU-MJj19OK0C|Wk2HXuprizLOuoZA=@&lw}_8W*F%~lJtkQdI^p_NwO@!Sm>2{2H#Ob^H&mtkwm9`YyY6(ix_VL4Leu@>1>jE!62_ z3)BIvp>rAD)-1BSQX68f2h8JDF|5p7Uc3nD+y~k3agxOfZwqsn7Go2!?+Yrm?U9ur zm4$m|xUWzH10Nj-vaorqzoLif8c`2H^Rn0R^y5BRWlGwn#1qP21UCR9EtAw+FeQ`O zJu=+a9*8GGNpjRVc3u?Nw272-8b%D~VOYll@)^M|>{?auZXf|krpSYbx+W$IROeTx zzpn)zUJ12|dc%M`i%|l47;*|I=i|9JPE#aDDF!>nNM<0s&({%35SDtpkTH!kSMl<5u2UIjwrt6fJv{^7J|PMp8~m4NO$)PuWMLA zqJ|-Nm7oy?E#vh7g(&p9$Q$_roo=197Fr_`n2;S=5susN<`Nn%sW$z)Ww@^pw%xG| z(Odz|HIdLgNjM;wLXHjz@_@NoCh)7gsaRg+o|=YDA1{(14>hD@cGvXxrMYsR#tPsl zZ6lykUd9+)VT0)pxs>ZkyhQpXfV*Nj%VdMb2D%p^7hbb|uAlFc;l38hM$JUAqt_!y z>sdeOH{lr8y-awB_6%xUZLpr{SLtF@EmX+?dK+ie7*=<7-;~3Od-i#U5%Oz8XgI4O z@v2tMR1Vb;!&3S|T=LJxyhRl8=e zLO}?g*>}qT zFfc}srBf4!8_Zh_*UCNm(}i1ei$1iYw4E*#0)!9vvILqCmklGMDl}R-W;4geziv}} zA&8Ia=nyo-(XUpn=ua1J&6Kl31dw~ZCyDV^tiL35{qL#<;}<37m}h21^#$_)!K- zsmfjY(_1cxFr;6?@|?akd4tg3p$52*zs|SW3fCPm@pftnGC;T5qCH@lM^q0YKDD}9 zrPH6Dm^BYWq=AB+Z-a&^^bfoe=4dCBnRA^&3z$`priz@7dW(*t#hLFgWZ?nDSUSU4@M`;AJYKV7&rb0PM* zMqyMQ$1O487*ju_jC%OPs3H#5ZTTtDMkpZcBPzqR8g-6e0;x*1KV7&rBMcdbgelPL z2{B>-OYek>z0DGxI~>yGDSBMRV*xd)_YW*@b~@Q7?BL3s&P{JR9|U4GCoj2?Azp*~ z?mLI#h8U90y<#XjPo%OarX37XgS(^~J&n_D&(N=rDtGKp7iP_l!*&+#@0cg>|h_2g;6N|1MiH$-9p;q~_{`AI+ev(TI#r6)ITM zLyw+34#SaCs!gM3RJql;DZA!Sa3F<8u#!i(z~1@Z+G)5QSjof&`1^dy2L=FL6Vo@k z(n=`bNY28#FdS8G*`F@ln(1&6612)4i@cHkXcK9mPq8mD48DvvGu~WfJPP=hy#)gW^rVh=G1=a;cOAbF75;DCgdNlpEP#zSZ;jtF#&sg~h!VGY#> zm2!W&aBCI_$vBEqfb7~tLkNzx90w$3ApApXO*rLSkfM|V7CVMO!2ylNDp5*@+{zdC zrwg~{21Sh!+0!K!aywHfG+OQ*>j5t`T^Xx#+lG;hJM9tv*TIfO_W5#B_+iW5I|L2H)DL$kt~-XX`<9fu-WrFd@2t2r7HG1I0Y(&nzdj|3K} zx?Y#8jg+N*Nc35yqpM-M%`r^vFr+N(qtqE{mA(G-#HzU~Y7CKAN;Gn-4oT*$k=g3V zwGXW#&e>Jj2F~_WK+rHkQM4;wr^wMYn6}PMHx}<^dq0Sq+R^NhI@8``mU$5AY`d}k zsZ%GS@Mblos_Fn%wXDQJZ`7%5o|~@E8_HMdsI2#=Yx60WvvyHgJ2zcjJW{S|L}j@@ zT{&4SbJZ6rh5mGT-clo9#i0DZ`qRSVnex>D%Ky}#F3nrYnbj|UrayV^yrrCZ`tslO zC(oI;lrx7`{?t7u&t850jyabrD^~twfAXwFf9K0{mH)awdFH&OoSCcg|L9MiF>fhn zE~@;O{mIkkE#=HEmH(nYIlp+OeEFjCpPZX~<9zz&%K()>)}LHAf25o_o$?>`C&|2} zoLQRkAND7Qiw&W#IO~D49ysfPvmQ9>fq$h3sCyk}SC3Q9tO#J`0=~wcMKl!3 zp_DMCSQ{i`l(yv-<#tHOIJC=2%Ti0j?~jLTKX$R5(EAMAM!6R$a~gz_XR^JrDRPE# z&$0!?5hW$0eB|+^Y^4?O2;53;K?JfZcv zvhI{;kF{Lc3@FPg`8KzH?zEj;boJfA#dhRM0VE>V%t+{fbfny@oD~rqc#1AbT0OSU zw4$MosccFuUgnA}F@54e;ng>2M=pU;4MExPl>qs1Bvz}g(XAn(LzLG`aR#E0Blji+ zrj{)O#1V7Q9j-p&VmrsCKO8aS_G@)Y%EWl(r@XEtT|n~SEP9e7qtQSCPbQmhN>o^= z5!bp~q3SmO?y}8+5R}mZa{}Lx6qKi>o7v=ULOh2OF*$gMAC(!^dooTkbt7>$1xP>wP8C&oa_7|4f;rfg1a3F9@-^f~o_6A;hRrNK?ZcQ0J&{>xC;3z2pPkFxO}IJ?NA0d;DqCsn#@p4%<5bb{hFd;kn+RHoUa zsQO4_M?R8jGTC9Xb@kGV?EuszklG8+?a3pkrI)I)&m*H(}$c_%H1}>8$9ai6Y_r-Q-c}wwm zg{X6>Sg77bs#Wri4leaoBNQstSg~4=uZn~-i;#dEHrv~;x!4Y`3PUCIXnlpSfi>}& z^c>g6A#F_*Mjk3rAsg0iD&BYGP{Yzo9(e1gF18azCS3{(V1}dV` zSm#jHqB7hCk*S+N0i*%729yqg>KM%Gu^dEH8wjoQt14V~+K$ph;4A6o+gGh2K4GCl{z>_i(#VS-S1gOIP>az4p=dcWm5? z`rn^!zkc^s%kSI$y4@S?ym#~OcAmG>UHX-k*R1~Z+I0P?r61caZ+)=1x$@_QPb|H( z@P_5y%EMRdt509MdZV!Umc8?v*KFN=^OhUeZ@pw(|7U`MxPbo1~@<)RzH_5>2SWN4-c9+te_j zx%+rd)no+;!^VEBYQ}>IG7!Kv&^!CT@w84EJVxf8$qA+9Bv{I;mW{Qt44WEH;FOYN#zaEXu?(Himst+7{y> zjc;{%&#gFU%5D7YX*-OJlq#W}0y^JQDp%_r5t6d?S^GlsS)C`0s#QA>D?E>tvId)G z$_&?DXMRSZMO1gt=wqetcv+C7pPvtQ!*VAKZI8rxUhOM2)6zKlp73Jru~x_ zqdpDAr=n>cwa^eu^yb39Hhc)BZeUblcs?5b5(PM#-JXbqQei!h4# z=YdMtW(-IpR$ti-Em#LI5<^?`*kVgGy<>+8Tu~RjhV+|Ah|d#dbES}51)Q`izvL7vZd#5zzC`U>d-dFC-wOn?<5EZdy8mE@Pv25 zmmC5hyg0^0?`NyvvBS+}y@}NJMwF0~$ zFs*^E2@&7e@l5x?88ydiFWGp-$vhpwoq!2=Wt1!H!U)WuS`Ejw2zCT1xIq44UYb3^ z4G_byt0V;4-Y;B#@;t_p>Sj1N64wmOf#C*kYTyE&?(1HIhdrIqWv0Q9!>B-UsRlcP zj7Q5)KWRtIU|57JSaldn40Z;Pfh9D^GXdEUWa~q=S_;c(EdwEtQ;)sD_PxLIl#_M> zsUSGv(-IIV@vJkSGOS~v+t#c4z~>I&F(9EJ0{)z>1JIJM~5*$mA_BVUU{e2_R7rMry=? z$6+dnPyrVZxEY`#GaT&0z7hv$KBVp8&Z|xyC*nOF7%KjJ6%1^6TjZ8FGDnNJL|q}f zLkir25JiRBQU;c!HD7S^-ly#tq)O791ncNt;#2?uSU7d=<2BSAQv0@7hv}Wuov5A@ zse>9|3p~QcjZfOKP}#hoSfG0aUUAHEyo4aJ9JK{HKnz%8jy?f80wbx4c|ofT5Fe+# z_0)^)G;LW%E*6Oh6n_TUjj#U$WtUV=JL>^WT zP5KgRkKO+GV%cB?!bRtJYFTu}+oraoFg%#8LzEYYLVpJ?S&T*j&?e&iiZsX?bmR9< z-YcJ>=k8U-2P~dPd|_XZTQSnWvOJ3e4E&03;w)m{3&0Em7%O0SCV>iBc%AEy?OC=@ zj+0Iu9DyZ71TFhQL^&d-J-rkFBqtmgDpJpMp{+MnGuqLLy=ojZ5LZUx=9BjliGrP4 z3_?3p=u!27O#u4_)JVWTE!#$w!>o)M8{A`)QcO-Taj2ofyH471VD*f)bFdrv9dlWl zjn|BL3+M*uj6gJQ7fT&IDdQtiX84=%@;deQ^8HWS5i^NunHwU^usmVM1L?**TmHkE z6>$rgIa!M z?u@Ni3w;I>cdS@lc-v_^;5Gpck{cQDc4G0UK_gM(i{}U{;yAVs?f#&A{=dO*dvn~B z{W0N||KVagrnwke<|s_HWYO%?oiGI_bH_ZaCq}GW1WdDsg@FU|%>Ie%tn-YGeDaPudYoI6J^Un$1D?VLQu) z%K|ESY4CNyRU`c-oVN$sGSHzRvLbwggs!f?_M{z%N9R_1j3d289&y^@?5NPO3O53k z7z{Xu|(0P_U95CXPI!41j5B z!8{P|uf59|^!nrHk%f~*5x56K$`b9cZjljZdu|X#0h6?fZBoJ~LbHg)1U3;R3iVgN z_Xf{{kZTnW;2ByBPB+&o-445JP9Hn?3N~b6VxRL(9NPI}3GRHs(emp(&-}Q9R};A- z%Li5F2*_o)WefQBn4r#W?5VMvc-0DP#A3ETbX0CnSUI)o(uYo-M^DO+7^8OQ1|Y9a z(N&fusnf{)3J=7J@X}m?n()!i85UX-UT`vO?7lhh|F>Ft`BLenrAvz6RlN1yoA#Q! zKe2m{oe%6hc>BZKqpiQ%N;W?W>%X`0?He~=|K9blT>H_ryRQD+>iwtyJZAY%mY-7i z+d`-Sy!@Xz?Wg~vWESR{=?LPwtP1dlv1POYhDzEGA~}ihE?So%?FQ?{dTa-cUN`Ek z7X~@5jY$cWyN@iE-d)qF3jIQx!i9iYa+mT?Tf2x<)=*->!8=$+5^cdfv}+p+76DHh zmI1a3WU=(_nog$ZCiyrI$t=CQro&E^6>u(wL^2C^&6M9)7;ru(pCXy1x7U=Elm^Jh zzBrsE-Zve4Dy-noTk($%BH6ea$?PzFH-{p=Bz+!cM>4xM!+qoP=Hr1Rv!`XaZ*W`l zu||^FQ#0H*K5ssbNizF}^!E)-{G5!GWcHK{_w86FB_nh2R}N=ScHflKC`@_tv0akc zlQO)n;hd8jlgyr&;l4qc&c~!lW=}|eUu1;5yqje9_zd?otW<0Auym5y<1*Zr06IuEW`*GTb&sb1v>zGJ9nDj~hb#&{%nxVu!Owq<>w9 z&-3BYo}E{=y{X=?^ixZ7wg0u}-~fDb>pvBLqWI$7ot@v<`R<*^?KHMOTfBPfzS}>) z{fg~JY+ttZ#an;9^^W4Dn;+f#6FLFU-n(k=Cc7Wm{r=tScCXOTrwg|&yrS^PKKT$}!)M&W7cFRB-wn*O3{;TzIU_D=09Qs1ZA zD?BCbMI^Qg4^I7X&D*BE4?IWVIq5HI7oMH|qGsV)=`U&&o|*chdbjY5^cQssPfveQ zt8hO3Ma{xDroX6GxGw!g)k2bb5Y=y!`aZR8;m{WT{4@f4GW3PlrM(jXK;gCj!W*TQ zMOIiVeNFnSI-SzJGF(+HU6uZ-R;$!ce^sYfx-!F6-O?2qu424XWs+aDX z;i_8cF6pmocS?88a8b0zpB|QRWn@G zE!`%=Rh`mT%=Q1?7W#irEPZM5`r^xr_uRXv|Mx97(Es}t{(hnV_lB*}>qi#%rD4OY1+o{>=3nPrupPgVwfIe`+;Zz5U8ZSH5%QzAG!s?^u4y@@0h&$qMwB zKD+d`&wZ%>9KX?@K739o1G>N#2&gy&4?JP>0D>I@2O*g)Ns5I(OBj7{GC;&e|&H?0Z zt@6G7=|fLiLQSBKtO5rd1Y_R?r7VQi9R(2%yPuS4a!+FECo*i9m30tm9VYwf*UX z=Pkh!0#QTRgs$NbND)*~pOKGJ!U6z=AEobv3=@KBnh6$8fT*Buq1vmJSM{e4T0E04 z1NIw;Hb5FME08sWJ=_KQO87#6Jzfk5-TRMqIJyO-AK>JHui2?pzPmqt;Jl>(j6zic zlC~9ENLitBpix13hOk+P7j{`60O3O79vl#IF^(wwHQ{xT_u7?Ne|q)2B|u>V2powX zG(c!*=7;=L5I8AX1z@-V;s$*UJB8_@cZ_2E#Q{K{x2#;~PaiOENk=dhhy3rMKN&t$ zwFY2DI=>TyMIe))_0bbVxAeAHt~FX$Aipq2aF&(t>`(7MZwc$m@M!zQCI&Q81Flln zLskJ484#4HjG|-3DL``MIWk^Vx`r4DSh>B*cl4+CTePH;K=p$|VXOoF1!)w20DQ{p zAwod9szie2pvVOsle`wV4f<9xH`d3g5Gdd#0voz1FuS?(wrgsXE+0n*@;Jh zTHXwoQHO>maYv^&JC&FBr(ZK~3C1}%6i|!Ag;ASn-(s^ES!NI_8qgWYIh{l@WJENf ztI-<(jG>GX3rJFaYkzvLc}oF5g|?cKuj@>}GvYtV_T zEt=_o&>Co!Z|P63nzsZ+4~~ao*CZHDY){8@&}1Oy8UYYS48$=6rgIZq8~nf!CADxG zZSFm+yre%}K+m9ZtTjM>Rwz)Xkc%@OK+{o?QA9h4BXu}_|Aey-)D;9Q^-lPEy>!s5 zd{ciK96#VZC@pgnt~1ss7)E^BFkT2?U+``K{SF}Nps$0y2aRWKXqteQKoIl#LFGmL z={*=$UHwo=wLt+9!RAM|@QPEpn4zfHB>6Ubs>96r7OW*KBfuaw(19t3Xl?i-JnauF&+kvadfpPG zJbIQv7(je@Q!<)<)qYez=Fb9oqj(zCMhF73_cHrz8Fl+e@HQ*Y>rbydc_tXsShrgU zFlLgw;$qZ-<^Z*9qQU5!8vy9^?UB6>_)2u)Xc1$2V2_pO^ru(MTSEB?LTlZJk5_~s z23!m%_$U}#z^0f2@Rs^(paXjrEF`>MRp$k$uv2+90z5_uVLB% zH)EB+RN6!6c7jO;N)xTjhKR~zd9YFqdX?+?)4R=Eg2fIxDq`~xo*EjqYD2=p@R?)& zTMmpPL(yIr1Pc)0@MOWXLpCxtD@lKP*TvffdBt1X7|^ZbR}p5QnJFXMaf9y;{0n33 z34qtD4RtCwS)Gjm+90)eZGU=~c}oDPcHU43g(x&P(AMBWgCj~L7^BsEM1w&09GNeM zokcu6QUF`=_PpKG`qMivo=GVi$kgvq>;#h!_K%(4x*;VkXfKg8j-;1bV13&VjP9OHxw+suC8Rl&YUL#BjC+ZtMY{Yv^#Gp z7TK6AMyzihv|+nmta!L%7#6fhL-wEr*=#@YfD~^nez6>2JC8?|uRk~KoM>zzFPJd! zvt}yVmQC0ORmCBu{p|x`*5I-PQOc5vQEI~JFN=_=->w|=r|m^IMYt69LQ&sCaiLjm z|1>24dV3nOo`sYoHihSC`H0w5e$9e~mO}z^)StFaUJfFi5e4LR_#`lFu(wkr$GHsp z4K^uOB)AzPG739tg=jHv%d@4q+F3@xEh@ab_rR)UnnX^W?Qb?a>nK3DwGj z&Q0$ypDKcPF9bi26@XSM`f*^1wYrUs4>Zp5!J=$ca;C9Aqkln}n_ZTD=a0$*`qSGl zIvm-=a10`%a43ks=m??$A%yr0iHUZD5r|Dhp#>d3VtwPEj)zI#Y*+4oZhE`` z!iM5xVTVS>Yzc&qNdsQfsHZ?+G6%1CY+wh4TBvNgFgXxn-nT!!?fj9%`eq0MGo_Md zOn2ua`0QiKlmIMb(9yO;ulDtbhU}Z6G;GDQ6Yn2X?$e*%X5NyPS+3b4_}J)MtO!FU zF#kTaVb;_qAxPrY9k#F$>2EkjpQBGo6b5_DIfg2a?icO z-!5Gm`2UxbZbbX-1cB^J{PNZ>s2wpE!Qf_{oRYK4$ootuJ@cJ@lA}_F z`vQ9AJS!zf#q{?LOkU2DRdTeK;l44R^PR(zqumVm1-Z<5YCAmIao=>n);NBj$I8!f z#!HU2GrVr#hx45XlcTNF_r)BKZq9XnOpZ1)+*gpp!6naWGdbGGa9_)0&a-K9w4UL< zfgsLzlD+n5&3)7PN{Tb8=X0HVlcUx2Z!7tW1DETRoE)uWxUW%_^Gux_EoZo|O)xYq za&V@Tqe6!J#;D47UOzlqa^G}|B+6g)e7@6tGJ9_N*9{v@YG`?K0f)2aq<>w)sps=$ z4wBikGraEc8ksB4kj$Qy;l9?4oLPzOrFSpgZt3Z(TMu3Nz{-nPA6|ND>2}3GEM6!+ zq*&bh`Mu|DmG-)YjlwIJZ@v6?%RjXG>a9Q8{lxAYcZa)|ZrlPt;AK1gou%z}Y(K4V zKgxi&-+b@V(>I^L@uro#t=(z!@{La|EyTk9zXlWk@=wy4kM4eB;X}uANtAY!p&ZCU zYclFAQe7bjtQ;c66KYA^_ef24Nc2f6lUtBcR&G>cSNY$0*U59zZIJ#QOM!(+u#_xy zixJmIB7)M#gaWFeRz*jQhzheUL5P}wb05Xp+Gz8}%245i!WUP0RHjqiPRdo%vP#Ft zc}|JngVCo@4C5~zb!oa=G<+o9=!eOh9*kE@rw=3j&z+8>i@dcXDD^s(W=Yc;Igc<& zmB*%X6k>f!hpbB37OL*kJCH2j`o!|%=Ur2kA5mhE1ci;zAp1PIbS`_LBqh%-|2vRa zSHcSCCYsACU6NeRD4lw1^Ls*xGnD?+8q|_JW5~U+Yje_-)DHu56?dgavU2M5(#Vmm z1($#=&^@6tL5F3u`R>&(Tzn~6Nrq$uPxN6R252;q7lav5zgNiyd7uO;9#50|vW&E(rSoL5BgNhD z;;Ku<_*h}DDU&QaOOYbV)9R@d;FO-A6_(y|@-)7v}T zL8&omX&G1*5pM7yJ=WnutU%dbtuC68`v(;ug#-LTK_lF)L-~%lwSlV6LS^GXDMufN z7BqUj6cGW!K(d&6o0qR$w-|jSbZGFvkSM(R_Oy`|>!|gHBAW>v+OJ9q63lQLQH>1W z+K`P5UD?eqT}*HjwnoiKp&QI4U>E>A+$X8%0S`p!F(k+7iYW`>8XAxx!A!4<5KC*c zb+frHB+!RI^eU+98C^^pKYBU@kM>l6ogO6cta;Be|sd4H^)Jj|y~+Ms?+6 z)ruTDkc !gsiFdl}`)kmB+qB|cwGg;y6-|2bZPq`0F7&{C?eubwD64njXts#-l& z;WVyPgQFV**h7ofpM?XXki6bhCTbE3qa36P1OpUxxaGGj1~DIYkcemrc1Tq#G_UA= z>2KDoX1wLono0L3N>XaOs&-}*nI(WL7@0*6%j&~7b!FAbC#i(WD9UL8+gbaT#i$|rtw;n}C0`ff)ZE!=?GQ3I4C&;-VUX^n-op%1 zwYWAM5ctwEF)A~-w{|k4@`V(;Z?xTow4~&uJf8L5JU_+`gw`U2QYa~cPbl7ji`Xe* z1tY(tVt%j>cjVKBDCf$Ria?4XlCD8#)5Bc3|m|=fu&oihL&M~G}Ogu{DsgPr6kY^3c$cgzyYDG?fb9%&Y~GO zh_0Q*-nnp7Z*TBStBqX+ff%j9v7$BiNr?2mzOvGF~$ zYU)^P17BgS+xK{&1hgVOv@K56J*0N&@`XR*≪(s*P-=Atz4Zs2G(%WF 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 diff --git a/crates/client/src/client.rs b/crates/client/src/client.rs index c7f6e4b..d95e1a6 100644 --- a/crates/client/src/client.rs +++ b/crates/client/src/client.rs @@ -1,17 +1,15 @@ use common::{felt, get_env_var}; -use host::update_mmr_and_verify_onchain; use mmr_utils::{create_database_file, ensure_directory_exists}; use starknet::{ - core::types::{BlockId, BlockTag, EventFilter, Felt}, + core::types::{BlockId, BlockTag, EventFilter, Felt, U256}, macros::selector, providers::Provider as EventProvider, }; use starknet_handler::{account::StarknetAccount, provider::StarknetProvider, MmrState}; -use thiserror::Error; use tokio::time::{self, Duration}; use tracing::{error, info, instrument}; -#[derive(Error, Debug)] +#[derive(thiserror::Error, Debug)] pub enum LightClientError { #[error("Starknet handler error: {0}")] StarknetHandler(#[from] starknet_handler::StarknetHandlerError), @@ -19,14 +17,12 @@ pub enum LightClientError { UtilsError(#[from] common::UtilsError), #[error("MMR utils error: {0}")] MmrUtilsError(#[from] mmr_utils::MMRUtilsError), - #[error("Host error: {0}")] - HostError(#[from] host::HostError), + #[error("Publisher error: {0}")] + PublisherError(#[from] publisher::PublisherError), #[error("Starknet provider error: {0}")] StarknetProvider(#[from] starknet::providers::ProviderError), #[error("latest_processed_block regression from {0} to {1}")] StateError(u64, u64), - #[error("Proof verification failed from {0} to {1}")] - ProofVerificationFailed(u64, u64), #[error("New MMR root hash cannot be zero")] StateRootError, #[error("Database file does not exist at path: {0}")] @@ -56,7 +52,7 @@ impl LightClient { // Load environment variables let starknet_rpc_url = get_env_var("STARKNET_RPC_URL")?; let l2_store_addr = felt(&get_env_var("FOSSIL_STORE")?)?; - let verifier_addr = get_env_var("STARKNET_VERIFIER")?; + let verifier_addr = get_env_var("FOSSIL_VERIFIER")?; let starknet_private_key = get_env_var("STARKNET_PRIVATE_KEY")?; let starknet_account_address = get_env_var("STARKNET_ACCOUNT_ADDRESS")?; @@ -64,7 +60,7 @@ impl LightClient { let starknet_provider = StarknetProvider::new(&starknet_rpc_url)?; // Set up the database file path - let current_dir = ensure_directory_exists("db-store")?; + let current_dir = ensure_directory_exists("../../db-instances")?; let db_file = create_database_file(¤t_dir, 0)?; if !std::path::Path::new(&db_file).exists() { @@ -172,18 +168,19 @@ impl LightClient { .await?; // Fetch latest MMR state from L2 - let (latest_mmr_block, _latest_mmr_state) = self + let latest_mmr_state = self .starknet_provider .get_latest_mmr_state(&self.l2_store_addr) .await?; info!( latest_relayed_block, - latest_mmr_block, "State fetched from Starknet" + latest_mmr_block = latest_mmr_state.latest_block_number(), + "State fetched from Starknet" ); // Update MMR and verify proofs - self.update_mmr(latest_mmr_block, latest_relayed_block) + self.update_mmr(latest_mmr_state.latest_block_number(), latest_relayed_block) .await?; Ok(()) @@ -196,32 +193,24 @@ impl LightClient { latest_mmr_block: u64, latest_relayed_block: u64, ) -> Result<(), LightClientError> { - info!("Starting proof verification..."); - - let (proof_verified, new_mmr_state) = update_mmr_and_verify_onchain( - &self.db_file, - latest_mmr_block + 1, - latest_relayed_block, - &self.starknet_provider.rpc_url(), - &self.verifier_addr, - ) - .await?; - - if proof_verified { - self.update_mmr_state_on_starknet(latest_relayed_block, new_mmr_state) - .await?; - } else { + if latest_mmr_block >= latest_relayed_block { error!( - from_block = latest_mmr_block + 1, - to_block = latest_relayed_block, - "Proof verification failed" + latest_mmr_block, + latest_relayed_block, "Latest MMR block is greater than the latest relayed block" ); - // Return an error instead of proceeding - return Err(LightClientError::ProofVerificationFailed( - latest_mmr_block + 1, + return Err(LightClientError::StateError( + latest_mmr_block, latest_relayed_block, )); } + info!("Starting proof verification..."); + + let (new_mmr_state, proof) = + publisher::prove_mmr_update(&self.db_file, latest_mmr_block + 1, latest_relayed_block) + .await?; + + self.update_mmr_state_on_starknet(latest_relayed_block, new_mmr_state, proof) + .await?; Ok(()) } @@ -231,8 +220,9 @@ impl LightClient { &self, latest_relayed_block: u64, new_mmr_state: MmrState, + proof: Vec, ) -> Result<(), LightClientError> { - if new_mmr_state.root_hash() == Felt::ZERO { + if new_mmr_state.root_hash() == U256::from(0_u8) { error!("New MMR root hash cannot be zero"); return Err(LightClientError::StateRootError); } @@ -244,7 +234,7 @@ impl LightClient { )?; starknet_account - .update_mmr_state(self.l2_store_addr, latest_relayed_block, &new_mmr_state) + .verify_mmr_proof(&self.verifier_addr, &new_mmr_state, proof) .await?; info!( diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 03066a5..9ad078b 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -4,11 +4,11 @@ version = "0.1.0" edition = "2021" [dependencies] -eyre = { workspace = true } thiserror = { workspace = true } dotenv = { workspace = true } starknet-crypto = { workspace = true } +tracing = { workspace = true } -tracing-subscriber = "0.3.18" +tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } alloy-contract = { version = "0.6.4" } ruint = "1.12.3" \ No newline at end of file diff --git a/crates/common/src/lib.rs b/crates/common/src/lib.rs index 718324d..e89c329 100644 --- a/crates/common/src/lib.rs +++ b/crates/common/src/lib.rs @@ -1,11 +1,9 @@ #![deny(unused_crate_dependencies)] -use eyre::Result; use starknet_crypto::Felt; -use std::str::FromStr; -use thiserror::Error; +use std::{path::PathBuf, str::FromStr}; -#[derive(Debug, Error)] +#[derive(thiserror::Error, Debug)] pub enum UtilsError { #[error("Environment variable {0} not set")] EnvVarNotSet(String), @@ -17,38 +15,72 @@ pub enum UtilsError { AlloyContractError(#[from] alloy_contract::Error), #[error("Failed to convert Uint to u64")] UintError(#[from] ruint::FromUintError), + #[error("Environment variable error: {0}")] + EnvVarError(#[from] dotenv::Error), + #[error("Parse error: {0}")] + ParseStringError(String), + #[error("Felt conversion error: {0}")] + FeltError(String), } /// Retrieves an environment variable or returns an error if not set. pub fn get_env_var(key: &str) -> Result { - dotenv::var(key).map_err(|_| UtilsError::EnvVarNotSet(key.to_string())) + Ok(dotenv::var(key)?) } /// Parses an environment variable into the desired type or returns an error. pub fn get_var(name: &str) -> Result where - T::Err: std::error::Error + Send + Sync + 'static, + T::Err: std::fmt::Display, { let var_value = get_env_var(name)?; var_value - .parse::() + .parse() .map_err(|e| UtilsError::ParseError(format!("{}: {}", name, e))) } /// Function to initialize logging and environment variables pub fn initialize_logger_and_env() -> Result<(), UtilsError> { dotenv::dotenv().ok(); - tracing_subscriber::fmt().init(); + + let filter = tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| { + let directive = match "sqlx=off".parse() { + Ok(d) => d, + Err(e) => { + tracing::warn!("Failed to parse sqlx filter directive: {}", e); + Default::default() + } + }; + tracing_subscriber::EnvFilter::new("info").add_directive(directive) + }); + + tracing_subscriber::fmt() + .with_env_filter(filter) + .with_file(true) + .init(); Ok(()) } pub fn string_array_to_felt_array(string_array: Vec) -> Result, UtilsError> { - string_array - .iter() - .map(|s| felt(s).map_err(|_| UtilsError::ParseError(s.clone()))) - .collect() + string_array.iter().map(|s| felt(s)).collect() } pub fn felt(str: &str) -> Result { - Felt::from_hex(str).map_err(|_| UtilsError::ParseError(str.to_string())) + Felt::from_hex(str).map_err(|_| UtilsError::FeltError(format!("Invalid hex string: {}", str))) +} + +pub fn get_db_path() -> Result { + // Get path to the db-instances directory relative to the test file + let test_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .ok_or_else(|| UtilsError::ParseError("Missing parent directory".to_string()))? + .parent() + .ok_or_else(|| UtilsError::ParseError("Missing root directory".to_string()))? + .join("db-instances"); + + let binding = test_dir.join("0.db"); + let store_path = binding + .to_str() + .ok_or_else(|| UtilsError::ParseError("Invalid path".to_string()))?; + Ok(store_path.to_string()) } diff --git a/crates/ethereum/src/lib.rs b/crates/ethereum/src/lib.rs index 78de752..7d6172b 100644 --- a/crates/ethereum/src/lib.rs +++ b/crates/ethereum/src/lib.rs @@ -1,7 +1,7 @@ #![deny(unused_crate_dependencies)] use alloy::{providers::ProviderBuilder, sol}; -use common::{get_env_var, initialize_logger_and_env, UtilsError}; +use common::{get_env_var, UtilsError}; // Codegen from embedded Solidity code and precompiled bytecode. sol! { @@ -20,8 +20,6 @@ sol! { #[allow(dead_code)] pub async fn get_finalized_block_hash() -> Result<(u64, String), UtilsError> { - initialize_logger_and_env()?; - let rpc_url = get_env_var("ETH_RPC_URL")?; let provider = ProviderBuilder::new() .with_recommended_fillers() diff --git a/crates/guest-mmr/Cargo.toml b/crates/guest-mmr/Cargo.toml new file mode 100644 index 0000000..56cfa3a --- /dev/null +++ b/crates/guest-mmr/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "guest-mmr" +version = "0.1.0" +edition = "2021" + +[dependencies] +guest-types = { path = "../guest-types" } + +serde = { version = "1.0.215", features = ["derive"] } +hex = "0.4" +sha2 = { git = 'https://github.com/risc0/RustCrypto-hashes.git', tag = 'sha2-v0.10.8-risczero.0', features = ['compress'] } +num-bigint = "0.4.4" +num-traits = "0.2.19" +thiserror = "2.0.3" + +[dev-dependencies] +mmr-utils = { path = "../mmr-utils" } +common = { path = "../common" } + +tokio = { version = "1.39.0", features = ["full"] } \ No newline at end of file diff --git a/crates/guest-mmr/src/core.rs b/crates/guest-mmr/src/core.rs new file mode 100644 index 0000000..8e965ea --- /dev/null +++ b/crates/guest-mmr/src/core.rs @@ -0,0 +1,407 @@ +use guest_types::AppendResult; +use serde::{Deserialize, Serialize}; +use std::collections::{HashMap, VecDeque}; +use thiserror::Error; + +use crate::formatting::{FormattingError, ProofOptions}; +use crate::helper::{ + element_index_to_leaf_index, find_peaks, find_siblings, get_peak_info, hasher, + leaf_count_to_append_no_merges, leaf_count_to_peaks_count, mmr_size_to_leaf_count, +}; + +#[derive(Error, Debug)] +pub enum MMRError { + #[error("No hash found for index {0}")] + NoHashFoundForIndex(usize), + #[error("Insufficient peaks for merge")] + InsufficientPeaksForMerge, + #[error("From hex error: {0}")] + FromHexError(#[from] hex::FromHexError), + #[error("Parse big int error: {0}")] + ParseBigIntError(#[from] num_bigint::ParseBigIntError), + #[error("Hash error")] + HashError, + #[error("Invalid element index")] + InvalidElementIndex, + #[error("Invalid element count")] + InvalidElementCount, + #[error("Formatting error: {0}")] + FormattingError(#[from] FormattingError), + #[error("Invalid peaks count")] + InvalidPeaksCount, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Proof { + element_index: usize, + element_hash: String, + siblings_hashes: Vec, + peaks_hashes: Vec, + elements_count: usize, +} + +#[derive(Debug)] +pub struct GuestMMR { + hashes: HashMap, + elements_count: usize, + leaves_count: usize, + root_hash: String, +} + +impl GuestMMR { + pub fn new(initial_peaks: Vec, elements_count: usize, leaves_count: usize) -> Self { + let mut hashes = HashMap::new(); + + // Initialize hashes with the peaks at their correct positions + let peak_positions = find_peaks(elements_count); + for (peak, pos) in initial_peaks.into_iter().zip(peak_positions) { + hashes.insert(pos, peak); + } + + Self { + elements_count, + leaves_count, + hashes, + root_hash: "".to_string(), + } + } + + pub fn get_elements_count(&self) -> usize { + self.elements_count + } + + pub fn get_leaves_count(&self) -> usize { + self.leaves_count + } + + pub fn append(&mut self, value: String) -> Result { + let elements_count = self.elements_count; + + let mut peaks = self.retrieve_peaks_hashes(find_peaks(elements_count))?; + + let mut last_element_idx = self.elements_count + 1; + let leaf_element_index = last_element_idx; + + // Store the new leaf in the hash map + self.hashes.insert(last_element_idx, value.clone()); + + peaks.push(value.clone()); + + let no_merges = leaf_count_to_append_no_merges(self.leaves_count); + + for _ in 0..no_merges { + if peaks.len() < 2 { + return Err(MMRError::InsufficientPeaksForMerge); + } + + last_element_idx += 1; + + // Pop the last two peaks to merge + let right_hash = peaks.pop().ok_or(MMRError::InsufficientPeaksForMerge)?; + let left_hash = peaks.pop().ok_or(MMRError::InsufficientPeaksForMerge)?; + + let parent_hash = hasher(vec![left_hash, right_hash])?; + self.hashes.insert(last_element_idx, parent_hash.clone()); + + peaks.push(parent_hash); + } + + self.elements_count = last_element_idx; + self.leaves_count += 1; + + let root_hash = self.calculate_root_hash(last_element_idx)?; + self.root_hash = root_hash; + + Ok(AppendResult::new( + self.leaves_count, + last_element_idx, + leaf_element_index, + value, + )) + } + + pub fn get_proof(&self, element_index: usize) -> Result { + if element_index == 0 { + return Err(MMRError::InvalidElementIndex); + } + + let tree_size = self.elements_count; + + if element_index > tree_size { + return Err(MMRError::InvalidElementIndex); + } + + let peaks = find_peaks(tree_size); + + let siblings = find_siblings(element_index, tree_size)?; + + let peaks_hashes = self.retrieve_peaks_hashes(peaks)?; + + let siblings_hashes = self.get_many_hashes(&siblings)?; + + let element_hash = self + .hashes + .get(&element_index) + .ok_or(MMRError::NoHashFoundForIndex(element_index))?; + + Ok(Proof { + element_index, + element_hash: element_hash.clone(), + siblings_hashes, + peaks_hashes, + elements_count: tree_size, + }) + } + + pub fn verify_proof( + &self, + mut proof: Proof, + element_value: String, + options: Option, + ) -> Result { + let options = options.unwrap_or_default(); + let tree_size = match options.elements_count { + Some(count) => count, + None => self.elements_count, + }; + + let leaf_count = mmr_size_to_leaf_count(tree_size); + let peaks_count = leaf_count_to_peaks_count(leaf_count); + + if peaks_count as usize != proof.peaks_hashes.len() { + return Err(MMRError::InvalidPeaksCount); + } + + if let Some(formatting_opts) = options.formatting_opts { + let proof_format_null_value = &formatting_opts.proof.null_value; + let peaks_format_null_value = &formatting_opts.peaks.null_value; + + let proof_null_values_count = proof + .siblings_hashes + .iter() + .filter(|&s| s == proof_format_null_value) + .count(); + proof + .siblings_hashes + .truncate(proof.siblings_hashes.len() - proof_null_values_count); + + let peaks_null_values_count = proof + .peaks_hashes + .iter() + .filter(|&s| s == peaks_format_null_value) + .count(); + proof + .peaks_hashes + .truncate(proof.peaks_hashes.len() - peaks_null_values_count); + } + let element_index = proof.element_index; + + if element_index == 0 { + return Err(MMRError::InvalidElementIndex); + } + + if element_index > tree_size { + return Err(MMRError::InvalidElementIndex); + } + + let (peak_index, peak_height) = get_peak_info(tree_size, element_index); + if proof.siblings_hashes.len() != peak_height { + return Ok(false); + } + + let mut hash = element_value.clone(); + let mut leaf_index = element_index_to_leaf_index(element_index)?; + + for proof_hash in proof.siblings_hashes.iter() { + let is_right = leaf_index % 2 == 1; + leaf_index /= 2; + + hash = if is_right { + hasher(vec![proof_hash.clone(), hash.clone()])? + } else { + hasher(vec![hash.clone(), proof_hash.clone()])? + }; + } + + let peak_hashes = self.retrieve_peaks_hashes(find_peaks(tree_size))?; + + Ok(peak_hashes[peak_index] == hash) + } + + fn retrieve_peaks_hashes(&self, peak_idxs: Vec) -> Result, MMRError> { + let mut peaks = Vec::new(); + + for &idx in &peak_idxs { + // Use `idx` directly since `self.hashes` expects a `usize` key + if let Some(hash) = self.hashes.get(&idx) { + peaks.push(hash.clone()); + } else { + return Err(MMRError::NoHashFoundForIndex(idx)); + } + } + + Ok(peaks) + } + + pub fn bag_the_peaks(&self) -> Result { + let peaks_idxs = find_peaks(self.elements_count); + + let peaks_hashes = self.retrieve_peaks_hashes(peaks_idxs)?; + + match peaks_hashes.len() { + 0 => Ok("0x0".to_string()), + 1 => Ok(peaks_hashes[0].clone()), + _ => { + let mut peaks_hashes: VecDeque = peaks_hashes.into(); + let last = peaks_hashes + .pop_back() + .ok_or(MMRError::InsufficientPeaksForMerge)?; + let second_last = peaks_hashes + .pop_back() + .ok_or(MMRError::InsufficientPeaksForMerge)?; + let root0 = hasher(vec![second_last, last])?; + + peaks_hashes + .into_iter() + .rev() + .try_fold(root0, |prev, cur| hasher(vec![cur, prev])) + } + } + } + + pub fn calculate_root_hash(&self, elements_count: usize) -> Result { + let bag = self.bag_the_peaks()?; + + match hasher(vec![elements_count.to_string(), bag.to_string()]) { + Ok(root_hash) => Ok(root_hash), + Err(_) => Err(MMRError::HashError), + } + } + + pub fn get_all_hashes(&self) -> Vec<(usize, String)> { + let mut hashes: Vec<_> = self + .hashes + .iter() + .map(|(&index, hash)| (index, hash.clone())) + .collect(); + hashes.sort_by_key(|(index, _)| *index); // Sort by index + hashes + } + + pub fn get_many_hashes(&self, idxs: &[usize]) -> Result, MMRError> { + let mut hashes = Vec::new(); + for &idx in idxs { + hashes.push( + self.hashes + .get(&idx) + .cloned() + .ok_or(MMRError::NoHashFoundForIndex(idx))?, + ); + } + Ok(hashes) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + const INITIAL_PEAK_VALUE: &str = + "0x0000000000000000000000000000000000000000000000000000000000000001"; + const APPEND_VALUE: &str = "0x0000000000000000000000000000000000000000000000000000000000000002"; + + fn create_test_mmr() -> GuestMMR { + // Use a properly formatted hex string for the initial peak + let initial_peaks = vec![INITIAL_PEAK_VALUE.to_string()]; + GuestMMR::new(initial_peaks, 1, 1) + } + + #[test] + fn test_new_mmr() { + let mmr = create_test_mmr(); + assert_eq!(mmr.get_elements_count(), 1); + assert_eq!(mmr.get_leaves_count(), 1); + } + + #[test] + fn test_append() { + let mut mmr = create_test_mmr(); + + let result = mmr.append(APPEND_VALUE.to_string()).unwrap(); + + assert_eq!(result.leaves_count(), 2); + assert_eq!(result.value(), APPEND_VALUE); + assert_eq!(mmr.get_leaves_count(), 2); + } + + #[test] + fn test_get_proof() { + let mut mmr = create_test_mmr(); + mmr.append(APPEND_VALUE.to_string()).unwrap(); + + let proof = mmr.get_proof(1).unwrap(); + + assert_eq!(proof.element_index, 1); + assert_eq!(proof.elements_count, mmr.get_elements_count()); + } + + #[test] + fn test_verify_proof() { + let mut mmr = create_test_mmr(); + mmr.append(APPEND_VALUE.to_string()).unwrap(); + + let proof = mmr.get_proof(1).unwrap(); + println!("proof: {:?}", proof); + let is_valid = mmr + .verify_proof(proof, INITIAL_PEAK_VALUE.to_string(), None) + .unwrap(); + + assert!(is_valid); + } + + #[test] + fn test_invalid_element_index() { + let mmr = create_test_mmr(); + + let result = mmr.get_proof(0); + assert!(matches!(result, Err(MMRError::InvalidElementIndex))); + + let result = mmr.get_proof(999); + assert!(matches!(result, Err(MMRError::InvalidElementIndex))); + } + + #[test] + fn test_bag_the_peaks() { + let mut mmr = create_test_mmr(); + mmr.append(APPEND_VALUE.to_string()).unwrap(); + + let result = mmr.bag_the_peaks(); + assert!(result.is_ok()); + } + + #[test] + fn test_get_many_hashes() { + let mmr = create_test_mmr(); + + // Test with valid index + let result = mmr.get_many_hashes(&[1]); + assert!(result.is_ok()); + + // Test with invalid index + let result = mmr.get_many_hashes(&[999]); + assert!(matches!(result, Err(MMRError::NoHashFoundForIndex(_)))); + } + + #[test] + fn test_get_all_hashes() { + let mut mmr = create_test_mmr(); + + mmr.append(APPEND_VALUE.to_string()).unwrap(); + + let hashes = mmr.get_all_hashes(); + + assert!(!hashes.is_empty()); + assert_eq!(hashes[0].1, INITIAL_PEAK_VALUE); + assert_eq!(hashes[1].1, APPEND_VALUE); + } +} diff --git a/crates/guest-mmr/src/formatting.rs b/crates/guest-mmr/src/formatting.rs new file mode 100644 index 0000000..db56591 --- /dev/null +++ b/crates/guest-mmr/src/formatting.rs @@ -0,0 +1,30 @@ +use thiserror::Error; + +#[derive(Clone)] +pub struct FormattingOptions { + pub output_size: usize, + pub null_value: String, +} + +pub type ProofFormattingOptions = FormattingOptions; +pub type PeaksFormattingOptions = FormattingOptions; + +#[derive(Clone)] +pub struct FormattingOptionsBundle { + pub proof: ProofFormattingOptions, + pub peaks: PeaksFormattingOptions, +} + +#[derive(Clone, Default)] +pub struct ProofOptions { + pub elements_count: Option, + pub formatting_opts: Option, +} + +#[derive(Error, Debug)] +pub enum FormattingError { + #[error("Formatting: Expected peaks output size is smaller than the actual size")] + PeaksOutputSizeError, + #[error("Formatting: Expected proof output size is smaller than the actual size")] + ProofOutputSizeError, +} diff --git a/crates/guest-mmr/src/helper.rs b/crates/guest-mmr/src/helper.rs new file mode 100644 index 0000000..f1948e1 --- /dev/null +++ b/crates/guest-mmr/src/helper.rs @@ -0,0 +1,176 @@ +use num_bigint::BigInt; +use num_traits::Num; +use sha2::{Digest, Sha256}; +use std::str::FromStr; + +use crate::core::MMRError; + +pub fn find_peaks(mut elements_count: usize) -> Vec { + let mut mountain_elements_count = (1 << bit_length(elements_count)) - 1; + let mut mountain_index_shift = 0; + let mut peaks = Vec::new(); + + while mountain_elements_count > 0 { + if mountain_elements_count <= elements_count { + mountain_index_shift += mountain_elements_count; + peaks.push(mountain_index_shift); + elements_count -= mountain_elements_count; + } + mountain_elements_count >>= 1; + } + + if elements_count > 0 { + return Vec::new(); + } + + peaks +} + +pub fn leaf_count_to_peaks_count(leaf_count: usize) -> u32 { + count_ones(leaf_count) as u32 +} + +pub(crate) fn count_ones(mut value: usize) -> usize { + let mut ones_count = 0; + while value > 0 { + value &= value - 1; + ones_count += 1; + } + ones_count +} + +fn bit_length(num: usize) -> usize { + (std::mem::size_of::() * 8) - num.leading_zeros() as usize +} + +pub fn leaf_count_to_append_no_merges(leaf_count: usize) -> usize { + if leaf_count == 0 { + return 0; + } + (!leaf_count).trailing_zeros() as usize +} + +pub fn hasher(data: Vec) -> Result { + let mut sha2 = Sha256::new(); + + //? We deliberately don't validate the size of the elements here, because we want to allow hashing of the RLP encoded block to get a block hash + if data.is_empty() { + sha2.update([]); + } else if data.len() == 1 { + let no_prefix = data[0].strip_prefix("0x").unwrap_or(&data[0]); + sha2.update(&hex::decode(no_prefix)?); + } else { + let mut result: Vec = Vec::new(); + + for e in data.iter() { + let bigint = if e.starts_with("0x") || e.starts_with("0X") { + // Parse hexadecimal + BigInt::from_str_radix(&e[2..], 16)? + } else { + // Parse decimal + BigInt::from_str(e)? + }; + + let hex = format!("{:0>64}", bigint.to_str_radix(16)); + let bytes = hex::decode(hex)?; + result.extend(bytes); + } + + sha2.update(&result); + } + + let hash = sha2.finalize(); + Ok(format!("0x{:0>64}", hex::encode(hash))) +} + +pub fn find_siblings(element_index: usize, elements_count: usize) -> Result, MMRError> { + let mut leaf_index = element_index_to_leaf_index(element_index)?; + println!("leaf index: {}", leaf_index); + let mut height = 0; + let mut siblings = Vec::new(); + let mut current_element_index = element_index; + + while current_element_index <= elements_count { + let siblings_offset = (2 << height) - 1; + println!("siblings offset: {}", siblings_offset); + if leaf_index % 2 == 1 { + // right child + siblings.push(current_element_index - siblings_offset); + current_element_index += 1; + } else { + // left child + siblings.push(current_element_index + siblings_offset); + current_element_index += siblings_offset + 1; + } + leaf_index /= 2; + height += 1; + } + + siblings.pop(); + Ok(siblings) +} + +pub fn element_index_to_leaf_index(element_index: usize) -> Result { + if element_index == 0 { + return Err(MMRError::InvalidElementIndex); + } + elements_count_to_leaf_count(element_index - 1) +} + +pub fn elements_count_to_leaf_count(elements_count: usize) -> Result { + let mut leaf_count = 0; + let mut mountain_leaf_count = 1 << bit_length(elements_count); + let mut current_elements_count = elements_count; + + while mountain_leaf_count > 0 { + let mountain_elements_count = 2 * mountain_leaf_count - 1; + if mountain_elements_count <= current_elements_count { + leaf_count += mountain_leaf_count; + current_elements_count -= mountain_elements_count; + } + mountain_leaf_count >>= 1; + } + + if current_elements_count > 0 { + Err(MMRError::InvalidElementCount) + } else { + Ok(leaf_count) + } +} + +pub fn mmr_size_to_leaf_count(mmr_size: usize) -> usize { + let mut remaining_size = mmr_size; + let bits = bit_length(remaining_size + 1); + let mut mountain_tips = 1 << (bits - 1); // Using bitwise shift to calculate 2^(bits-1) + let mut leaf_count = 0; + + while mountain_tips != 0 { + let mountain_size = 2 * mountain_tips - 1; + if mountain_size <= remaining_size { + remaining_size -= mountain_size; + leaf_count += mountain_tips; + } + mountain_tips >>= 1; // Using bitwise shift for division by 2 + } + + leaf_count +} + +pub fn get_peak_info(mut elements_count: usize, mut element_index: usize) -> (usize, usize) { + let mut mountain_height = bit_length(elements_count); + let mut mountain_elements_count = (1 << mountain_height) - 1; + let mut mountain_index = 0; + + loop { + if mountain_elements_count <= elements_count { + if element_index <= mountain_elements_count { + return (mountain_index, mountain_height - 1); + } + elements_count -= mountain_elements_count; + element_index -= mountain_elements_count; + mountain_index += 1; + } + mountain_elements_count >>= 1; + mountain_height -= 1; + } +} diff --git a/crates/guest-mmr/src/lib.rs b/crates/guest-mmr/src/lib.rs new file mode 100644 index 0000000..266ac97 --- /dev/null +++ b/crates/guest-mmr/src/lib.rs @@ -0,0 +1,3 @@ +pub mod core; +pub(crate) mod formatting; +pub(crate) mod helper; diff --git a/crates/guest-mmr/tests/mmr_test.rs b/crates/guest-mmr/tests/mmr_test.rs new file mode 100644 index 0000000..8c18e4a --- /dev/null +++ b/crates/guest-mmr/tests/mmr_test.rs @@ -0,0 +1,31 @@ +// use mmr::MMR; +use common::get_db_path; +use mmr_utils::initialize_mmr; + +#[tokio::test] +#[ignore = "TODO: add .db file to test"] +async fn test_mmr_proofs() { + // Get path to the db-instances directory relative to the test file + let store_path = get_db_path().unwrap(); + + let (store_manager, mmr, pool) = initialize_mmr(&store_path).await.unwrap(); + + let indices = vec![1, 2, 4, 5, 8, 9, 11, 12]; + + let mut hashes = vec![]; + for index in indices.iter() { + let hash = store_manager + .get_value_for_element_index(&pool, *index) + .await + .unwrap(); + hashes.push(hash.unwrap()); + } + + for (i, index) in indices.iter().enumerate() { + let proof = mmr.get_proof(*index, None).await.unwrap(); + assert!(mmr + .verify_proof(proof, hashes[i].clone(), None) + .await + .unwrap()); + } +} diff --git a/crates/guest-types/src/lib.rs b/crates/guest-types/src/lib.rs index aa95fc8..e760f9a 100644 --- a/crates/guest-types/src/lib.rs +++ b/crates/guest-types/src/lib.rs @@ -25,7 +25,7 @@ pub struct AppendResult { leaves_count: usize, elements_count: usize, element_index: usize, - root_hash: String, + value: String, } impl AppendResult { @@ -33,18 +33,18 @@ impl AppendResult { leaves_count: usize, elements_count: usize, element_index: usize, - root_hash: String, + value: String, ) -> Self { Self { leaves_count, elements_count, element_index, - root_hash, + value, } } - pub fn root_hash(&self) -> &str { - &self.root_hash + pub fn value(&self) -> &str { + &self.value } pub fn element_index(&self) -> usize { @@ -63,21 +63,24 @@ impl AppendResult { // GuestOutput #[derive(Debug, Serialize, Deserialize)] pub struct GuestOutput { - final_peaks: Vec, + root_hash: String, elements_count: usize, leaves_count: usize, + all_hashes: Vec<(usize, String)>, append_results: Vec, } impl GuestOutput { pub fn new( - final_peaks: Vec, + root_hash: String, elements_count: usize, leaves_count: usize, + all_hashes: Vec<(usize, String)>, append_results: Vec, ) -> Self { Self { - final_peaks, + root_hash, + all_hashes, elements_count, leaves_count, append_results, @@ -92,8 +95,8 @@ impl GuestOutput { &self.append_results } - pub fn final_peaks(&self) -> Vec { - self.final_peaks.clone() + pub fn all_hashes(&self) -> Vec<(usize, String)> { + self.all_hashes.clone() } pub fn leaves_count(&self) -> usize { @@ -105,40 +108,52 @@ impl GuestOutput { #[derive(Debug, Serialize, Deserialize, Clone)] pub struct CombinedInput { headers: Vec, - mmr_input: GuestInput, + mmr_input: MMRInput, + skip_proof_verification: bool, } impl CombinedInput { - pub fn new(headers: Vec, mmr_input: GuestInput) -> Self { - Self { headers, mmr_input } + pub fn new( + headers: Vec, + mmr_input: MMRInput, + skip_proof_verification: bool, + ) -> Self { + Self { + headers, + mmr_input, + skip_proof_verification, + } } pub fn headers(&self) -> &Vec { &self.headers } - pub fn mmr_input(&self) -> &GuestInput { + pub fn mmr_input(&self) -> &MMRInput { &self.mmr_input } + + pub fn skip_proof_verification(&self) -> bool { + self.skip_proof_verification + } } -// GuestInput #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct GuestInput { +pub struct MMRInput { initial_peaks: Vec, elements_count: usize, leaves_count: usize, - new_elements: Vec, - previous_proofs: Vec, + new_elements: Option>, + previous_proofs: Option>, } -impl GuestInput { +impl MMRInput { pub fn new( initial_peaks: Vec, elements_count: usize, leaves_count: usize, - new_elements: Vec, - previous_proofs: Vec, + new_elements: Option>, + previous_proofs: Option>, ) -> Self { Self { initial_peaks, @@ -149,8 +164,8 @@ impl GuestInput { } } - pub fn previous_proofs(&self) -> &Vec { - &self.previous_proofs + pub fn previous_proofs(&self) -> Option<&Vec> { + self.previous_proofs.as_ref() } pub fn initial_peaks(&self) -> Vec { @@ -190,3 +205,51 @@ impl BatchProof { self.method_id } } + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct FinalHash { + hash: String, + index: usize, +} + +impl FinalHash { + pub fn new(hash: String, index: usize) -> Self { + Self { hash, index } + } + + pub fn hash(&self) -> &str { + &self.hash + } + + pub fn index(&self) -> usize { + self.index + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct BlocksValidityInput { + headers: Vec, + mmr_input: MMRInput, + hash_indexes: Vec, +} +impl BlocksValidityInput { + pub fn new(headers: Vec, mmr_input: MMRInput, hash_indexes: Vec) -> Self { + Self { + headers, + mmr_input, + hash_indexes, + } + } + + pub fn headers(&self) -> &Vec { + &self.headers + } + + pub fn hash_indexes(&self) -> &Vec { + &self.hash_indexes + } + + pub fn mmr_input(&self) -> &MMRInput { + &self.mmr_input + } +} diff --git a/crates/host/bin/update_mmr.rs b/crates/host/bin/update_mmr.rs deleted file mode 100644 index 13607a3..0000000 --- a/crates/host/bin/update_mmr.rs +++ /dev/null @@ -1,47 +0,0 @@ -use clap::Parser; -use common::get_env_var; -use eyre::{eyre, Result}; -use host::{db_access::get_store_path, update_mmr_and_verify_onchain}; - -#[derive(Parser, Debug)] -#[command(version, about, long_about = None)] -struct Args { - /// Path to the SQLite database file. - #[arg(short, long)] - db_file: Option, - - /// Start block - #[arg(short, long)] - start: u64, - - /// End block - #[arg(short, long)] - end: u64, - - /// RPC URL - #[arg(short, long)] - rpc_url: String, - - /// Verifier address - #[arg(short, long)] - verifier: String, -} - -#[tokio::main] -async fn main() -> Result<()> { - let args = Args::parse(); - - let rpc_url = get_env_var("STARKNET_RPC_URL")?; - let verifier = get_env_var("STARKNET_VERIFIER")?; - - let store_path = get_store_path(args.db_file).map_err(|e| eyre!(e))?; - - let (proof_verified, new_mmr_root) = - update_mmr_and_verify_onchain(&store_path, args.start, args.end, &rpc_url, &verifier) - .await?; - - println!("Proof verified: {:?}", proof_verified); - println!("New MMR root: {:?}", new_mmr_root); - - Ok(()) -} diff --git a/crates/methods/Cargo.toml b/crates/methods/Cargo.toml index f22f763..1654ce4 100644 --- a/crates/methods/Cargo.toml +++ b/crates/methods/Cargo.toml @@ -7,4 +7,4 @@ edition = "2021" risc0-build = { version = "1.1.3" } [package.metadata.risc0] -methods = ["guest"] +methods = ["mmr-append", "blocks-validity"] diff --git a/crates/methods/guest/Cargo.toml b/crates/methods/blocks-validity/Cargo.toml similarity index 72% rename from crates/methods/guest/Cargo.toml rename to crates/methods/blocks-validity/Cargo.toml index b23662b..7dab9f3 100644 --- a/crates/methods/guest/Cargo.toml +++ b/crates/methods/blocks-validity/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "mmr-guest" +name = "blocks-validity" version = "0.1.0" edition = "2021" @@ -7,14 +7,10 @@ edition = "2021" [dependencies] guest-types = { path = "../../guest-types" } +guest-mmr = { path = "../../guest-mmr" } common = { path = "../../common" } eth-rlp-types = { git = "https://github.com/ametel01/eth-rlp-verify.git" } eth-rlp-verify = { git = "https://github.com/ametel01/eth-rlp-verify.git" } -thiserror = "2.0.3" risc0-zkvm = { version = "1.1.3", default-features = false, features = ['std'] } -sha3 = "0.10" -serde = { version = "1.0.215", features = ["derive"] } -hex = "0.4" -starknet-crypto = "0.7.3" diff --git a/crates/methods/blocks-validity/src/main.rs b/crates/methods/blocks-validity/src/main.rs new file mode 100644 index 0000000..7999a5a --- /dev/null +++ b/crates/methods/blocks-validity/src/main.rs @@ -0,0 +1,31 @@ +// main.rs +use eth_rlp_verify::are_blocks_and_chain_valid; +use risc0_zkvm::guest::env; +use guest_mmr::core::GuestMMR; +use guest_types::BlocksValidityInput; + +fn main() { + // Read combined input + let input: BlocksValidityInput = env::read(); + + // Verify block headers + if !are_blocks_and_chain_valid(&input.headers()) { + env::commit(&false); + } + // Initialize MMR with previous state + let mmr = GuestMMR::new( + input.mmr_input().initial_peaks(), + input.mmr_input().elements_count(), + input.mmr_input().leaves_count(), + ); + // Append block hashes to MMR + for (i, header) in input.headers().iter().enumerate() { + let block_hash = header.block_hash.clone(); + let proof = mmr.get_proof(input.hash_indexes()[i]).unwrap(); + if !mmr.verify_proof(proof, block_hash, None).unwrap() { + env::commit(&false); + } + } + + env::commit(&true); +} diff --git a/crates/methods/guest/src/guest_mmr.rs b/crates/methods/guest/src/guest_mmr.rs deleted file mode 100644 index 3362d6b..0000000 --- a/crates/methods/guest/src/guest_mmr.rs +++ /dev/null @@ -1,261 +0,0 @@ -use guest_types::{AppendResult, PeaksFormattingOptions, PeaksOptions}; -use serde::{Deserialize, Serialize}; -use starknet_crypto::{poseidon_hash, poseidon_hash_many, poseidon_hash_single, Felt}; -use std::collections::{HashMap, VecDeque}; -use thiserror::Error; -use common::felt; - -#[derive(Error, Debug)] -pub enum FormattingError { - #[error("Formatting: Expected peaks output size is smaller than the actual size")] - PeaksOutputSizeError, -} - -#[derive(Error, Debug)] -pub enum MMRError { - NoHashFoundForIndex(usize), - Formatting(FormattingError), - InsufficientPeaksForMerge, - HashError, -} - -pub struct GuestMMR { - hashes: HashMap, - elements_count: usize, - leaves_count: usize, -} - -impl GuestMMR { - pub fn new(initial_peaks: Vec, elements_count: usize, leaves_count: usize) -> Self { - let mut hashes = HashMap::new(); - - // Initialize hashes with the peaks at their correct positions - let peak_positions = find_peaks(elements_count); - for (peak, pos) in initial_peaks.into_iter().zip(peak_positions) { - hashes.insert(pos, peak); - } - - Self { - elements_count, - leaves_count, - hashes, - } - } - - pub fn get_elements_count(&self) -> usize { - self.elements_count - } - - pub fn get_leaves_count(&self) -> usize { - self.leaves_count - } - - pub fn append(&mut self, value: String) -> Result { - let elements_count = self.elements_count; - - let mut peaks = self.retrieve_peaks_hashes(find_peaks(elements_count))?; - - let mut last_element_idx = self.elements_count + 1; - let leaf_element_index = last_element_idx; - - // Store the new leaf in the hash map - self.hashes.insert(last_element_idx, value.clone()); - - peaks.push(value); - - let no_merges = leaf_count_to_append_no_merges(self.leaves_count); - - for _ in 0..no_merges { - if peaks.len() < 2 { - return Err(MMRError::InsufficientPeaksForMerge); - } - - last_element_idx += 1; - - // Pop the last two peaks to merge - let right_hash = peaks.pop().unwrap(); - let left_hash = peaks.pop().unwrap(); - - let parent_hash = hash(vec![left_hash, right_hash])?; - self.hashes.insert(last_element_idx, parent_hash.clone()); - - peaks.push(parent_hash); - } - - self.elements_count = last_element_idx; - self.leaves_count += 1; - - let bag = self.bag_the_peaks()?; - let root_hash = self.calculate_root_hash(&bag, last_element_idx)?; - - Ok(AppendResult::new( - self.leaves_count, - last_element_idx, - leaf_element_index, - root_hash, - )) - } - - fn retrieve_peaks_hashes(&self, peak_idxs: Vec) -> Result, MMRError> { - let mut peaks = Vec::new(); - - for &idx in &peak_idxs { - // Use `idx` directly since `self.hashes` expects a `usize` key - if let Some(hash) = self.hashes.get(&idx) { - peaks.push(hash.clone()); - } else { - return Err(MMRError::NoHashFoundForIndex(idx)); - } - } - - Ok(peaks) - } - - fn bag_the_peaks(&self) -> Result { - let peaks_idxs = find_peaks(self.elements_count); - - let peaks_hashes = self.retrieve_peaks_hashes(peaks_idxs)?; - - match peaks_hashes.len() { - 0 => Ok("0x0".to_string()), - 1 => Ok(peaks_hashes[0].clone()), - _ => { - let mut peaks_hashes: VecDeque = peaks_hashes.into(); - let last = peaks_hashes.pop_back().unwrap(); - let second_last = peaks_hashes.pop_back().unwrap(); - let root0 = hash(vec![second_last, last])?; - - let final_root = peaks_hashes - .into_iter() - .rev() - .fold(root0, |prev: String, cur: String| { - hash(vec![cur, prev]).unwrap() - }); - - Ok(final_root) - } - } - } - - pub fn calculate_root_hash( - &self, - bag: &str, - elements_count: usize, - ) -> Result { - match hash(vec![elements_count.to_string(), bag.to_string()]) { - Ok(root_hash) => Ok(root_hash), - Err(_) => Err(MMRError::HashError), - } - } - - pub fn get_peaks(&self, option: PeaksOptions) -> Result, MMRError> { - let tree_size = match option.elements_count { - Some(count) => count, - None => self.elements_count, - }; - - let peaks_indices = find_peaks(tree_size); - let peaks = self.retrieve_peaks_hashes(peaks_indices)?; - - if let Some(formatting_opts) = option.formatting_opts { - match format_peaks(peaks, &formatting_opts) { - Ok(formatted_peaks) => Ok(formatted_peaks), - Err(e) => Err(MMRError::Formatting(e)), - } - } else { - Ok(peaks) - } - } -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct Proof { - element_index: usize, - element_hash: String, - siblings_hashes: Vec, - peaks_hashes: Vec, - elements_count: usize, -} - -impl std::fmt::Display for MMRError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - MMRError::NoHashFoundForIndex(idx) => write!(f, "No hash found for index {}", idx), - MMRError::Formatting(e) => write!(f, "Formatting error: {}", e), - MMRError::InsufficientPeaksForMerge => write!(f, "Insufficient peaks for merge"), - MMRError::HashError => write!(f, "Hash error"), - } - } -} - -pub fn format_peaks( - mut peaks: Vec, - formatting_opts: &PeaksFormattingOptions, -) -> Result, FormattingError> { - if peaks.len() > formatting_opts.output_size { - return Err(FormattingError::PeaksOutputSizeError); - } - - let expected_peaks_size_remainder = formatting_opts.output_size - peaks.len(); - let peaks_null_values: Vec = - vec![formatting_opts.null_value.clone(); expected_peaks_size_remainder]; - - peaks.extend(peaks_null_values); - - Ok(peaks) -} - -// Add this function at the bottom with other helper functions -pub fn find_peaks(mut elements_count: usize) -> Vec { - let mut mountain_elements_count = (1 << bit_length(elements_count)) - 1; - let mut mountain_index_shift = 0; - let mut peaks = Vec::new(); - - while mountain_elements_count > 0 { - if mountain_elements_count <= elements_count { - mountain_index_shift += mountain_elements_count; - peaks.push(mountain_index_shift); - elements_count -= mountain_elements_count; - } - mountain_elements_count >>= 1; - } - - if elements_count > 0 { - return Vec::new(); - } - - peaks -} - -fn bit_length(num: usize) -> usize { - (std::mem::size_of::() * 8) - num.leading_zeros() as usize -} - -fn leaf_count_to_append_no_merges(leaf_count: usize) -> usize { - if leaf_count == 0 { - return 0; - } - (!leaf_count).trailing_zeros() as usize -} - -fn hash(data: Vec) -> Result { - // for element in &data { - // self.is_element_size_valid(element)?; - // } - - let field_elements: Vec = data.iter().map(|e| felt(e).unwrap_or_default()).collect(); - - let hash_core = match field_elements.len() { - 0 => return Err(MMRError::HashError), - 1 => poseidon_hash_single(field_elements[0]), - 2 => poseidon_hash(field_elements[0], field_elements[1]), - _ => poseidon_hash_many(&field_elements), - }; - - let hash = format!("{:x}", hash_core); - // if self.should_pad { - // hash = format!("{:0>63}", hash); - // } - let hash = format!("0x{}", hash); - Ok(hash) -} diff --git a/crates/methods/guest/src/lib.rs b/crates/methods/guest/src/lib.rs deleted file mode 100644 index 506ade4..0000000 --- a/crates/methods/guest/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod guest_mmr; diff --git a/crates/methods/mmr-append/Cargo.toml b/crates/methods/mmr-append/Cargo.toml new file mode 100644 index 0000000..7e46248 --- /dev/null +++ b/crates/methods/mmr-append/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "mmr-append" +version = "0.1.0" +edition = "2021" + +[workspace] + +[dependencies] +guest-types = { path = "../../guest-types" } +guest-mmr = { path = "../../guest-mmr" } +common = { path = "../../common" } + +eth-rlp-types = { git = "https://github.com/ametel01/eth-rlp-verify.git" } +eth-rlp-verify = { git = "https://github.com/ametel01/eth-rlp-verify.git" } + +risc0-zkvm = { version = "1.1.3", default-features = false, features = ['std'] } diff --git a/crates/methods/guest/src/main.rs b/crates/methods/mmr-append/src/main.rs similarity index 67% rename from crates/methods/guest/src/main.rs rename to crates/methods/mmr-append/src/main.rs index bca660d..836c156 100644 --- a/crates/methods/guest/src/main.rs +++ b/crates/methods/mmr-append/src/main.rs @@ -1,21 +1,23 @@ // main.rs use eth_rlp_verify::are_blocks_and_chain_valid; use risc0_zkvm::guest::env; -mod guest_mmr; -use guest_mmr::GuestMMR; +use guest_mmr::core::GuestMMR; use guest_types::{CombinedInput, GuestOutput}; fn main() { // Read combined input let input: CombinedInput = env::read(); - // Verify previous batch proofs - for proof in input.mmr_input().previous_proofs() { - // Verify each previous proof - proof - .receipt() - .verify(proof.method_id()) - .expect("Invalid previous proof"); + // Only verify proofs if skip_proof_verification is false + if !input.skip_proof_verification() { + if let Some(proofs) = input.mmr_input().previous_proofs() { + for proof in proofs { + proof + .receipt() + .verify(proof.method_id()) + .expect("Invalid previous proof"); + } + } } // Verify block headers @@ -23,14 +25,12 @@ fn main() { are_blocks_and_chain_valid(&input.headers()), "Invalid block headers" ); - // Initialize MMR with previous state let mut mmr = GuestMMR::new( input.mmr_input().initial_peaks(), input.mmr_input().elements_count(), input.mmr_input().leaves_count(), ); - let mut append_results = Vec::new(); // Append block hashes to MMR for (_, header) in input.headers().iter().enumerate() { @@ -45,23 +45,16 @@ fn main() { } } - // Get final peaks - let final_peaks = match mmr.get_peaks(Default::default()) { - Ok(peaks) => peaks, - Err(e) => { - assert!(false, "Failed to get final peaks: {:?}", e); - vec![] // This line will never be reached due to assert - } - }; + let root_hash = mmr.calculate_root_hash(mmr.get_elements_count()).unwrap(); // Create output let output = GuestOutput::new( - final_peaks, + root_hash, mmr.get_elements_count(), mmr.get_leaves_count(), + mmr.get_all_hashes(), append_results, ); - // Commit the output env::commit(&output); } diff --git a/crates/mmr-utils/Cargo.toml b/crates/mmr-utils/Cargo.toml index f63a51f..3df262a 100644 --- a/crates/mmr-utils/Cargo.toml +++ b/crates/mmr-utils/Cargo.toml @@ -9,6 +9,9 @@ thiserror = { workspace = true } uuid = "1.1.2" -store = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "workspace" } -hasher = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "workspace" } -mmr = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "workspace" } +store = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "feat/sha2-hasher" } +hasher = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "feat/sha2-hasher", features = ["sha256"] } +mmr = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "feat/sha2-hasher" } + +[dev-dependencies] +tokio = { workspace = true, features = ["full"] } diff --git a/crates/mmr-utils/src/lib.rs b/crates/mmr-utils/src/lib.rs index 3b6d24d..f2dd45b 100644 --- a/crates/mmr-utils/src/lib.rs +++ b/crates/mmr-utils/src/lib.rs @@ -1,19 +1,18 @@ #![deny(unused_crate_dependencies)] -use hasher::stark_poseidon::StarkPoseidonHasher; +use hasher::sha2::Sha2Hasher; use mmr::MMR; use sqlx::{Row, SqlitePool}; -use std::fs::File; -use std::path::Path; -use std::sync::Arc; -use std::sync::Mutex; -use std::{collections::HashMap, path::PathBuf}; -use std::{env, fs}; +use std::{ + collections::HashMap, + env, + fs::{self, File}, + path::{Path, PathBuf}, + sync::{Arc, Mutex}, +}; use store::{sqlite::SQLiteStore, StoreError}; -use thiserror::Error; -use uuid::Uuid; -#[derive(Error, Debug)] +#[derive(thiserror::Error, Debug)] pub enum MMRUtilsError { #[error("Store error: {0}")] Store(#[from] StoreError), @@ -31,9 +30,7 @@ pub struct StoreFactory; #[allow(dead_code)] impl StoreFactory { pub async fn create_store(path: &str, id: Option<&str>) -> Result { - SQLiteStore::new(path, Some(true), id) - .await - .map_err(StoreError::SQLite) + Ok(SQLiteStore::new(path, Some(true), id).await?) } } @@ -101,6 +98,13 @@ impl StoreManager { Ok(()) } + pub async fn get_all_elements(&self, pool: &SqlitePool) -> Result, sqlx::Error> { + let rows = sqlx::query("SELECT value FROM value_index_map") + .fetch_all(pool) + .await?; + Ok(rows.iter().map(|r| r.get("value")).collect()) + } + /// Retrieves the element index based on the given hash value #[allow(dead_code)] pub async fn get_element_index_for_value( @@ -165,12 +169,12 @@ pub async fn initialize_mmr( let mmr_id = if let Some(id) = get_mmr_id(&pool).await? { id } else { - let new_id = Uuid::new_v4().to_string(); + let new_id = uuid::Uuid::new_v4().to_string(); save_mmr_id(&pool, &new_id).await?; new_id }; - let hasher = Arc::new(StarkPoseidonHasher::new(Some(false))); + let hasher = Arc::new(Sha2Hasher::new()); let mmr = MMR::new(store, hasher, Some(mmr_id.clone())); Ok((store_manager, mmr, pool)) @@ -222,3 +226,151 @@ pub fn create_database_file( Ok(store_path_str.to_string()) } + +#[cfg(test)] +mod tests { + use super::*; + + async fn setup_test_db() -> (StoreManager, SqlitePool) { + // Use in-memory SQLite database for testing + let db_url = "sqlite::memory:"; + let pool = SqlitePool::connect(db_url).await.unwrap(); + + // Create mmr_metadata table first + sqlx::query( + r#" + CREATE TABLE IF NOT EXISTS mmr_metadata ( + mmr_id TEXT PRIMARY KEY + ) + "#, + ) + .execute(&pool) + .await + .unwrap(); + + // Now create the manager which will create value_index_map table + let manager = StoreManager::new(&format!("sqlite:{}", db_url)) + .await + .unwrap(); + + // Initialize the value-to-index table explicitly with the same pool + manager.initialize_value_index_table(&pool).await.unwrap(); + + (manager, pool) + } + + #[tokio::test] + async fn test_store_manager_initialization() { + let (_, pool) = setup_test_db().await; + + // Verify the tables were created + let result = sqlx::query( + "SELECT name FROM sqlite_master WHERE type='table' AND name='value_index_map'", + ) + .fetch_optional(&pool) + .await + .unwrap(); + + assert!(result.is_some(), "value_index_map table should exist"); + } + + #[tokio::test] + async fn test_insert_and_get_value_index_mapping() { + let (manager, pool) = setup_test_db().await; + + // Test inserting a mapping + let test_value = "test_hash"; + let test_index = 42; + + manager + .insert_value_index_mapping(&pool, test_value, test_index) + .await + .unwrap(); + + // Test retrieving the mapping + let result = manager + .get_element_index_for_value(&pool, test_value) + .await + .unwrap(); + + assert_eq!(result, Some(test_index)); + } + + #[tokio::test] + async fn test_get_all_elements() { + let (manager, pool) = setup_test_db().await; + manager + .insert_value_index_mapping(&pool, "test_hash", 42) + .await + .unwrap(); + manager + .insert_value_index_mapping(&pool, "test_hash2", 43) + .await + .unwrap(); + manager + .insert_value_index_mapping(&pool, "test_hash3", 44) + .await + .unwrap(); + let elements = manager.get_all_elements(&pool).await.unwrap(); + assert_eq!(elements.len(), 3); + } + + #[tokio::test] + async fn test_get_nonexistent_value_index() { + let (manager, pool) = setup_test_db().await; + + let result = manager + .get_element_index_for_value(&pool, "nonexistent") + .await + .unwrap(); + + assert_eq!(result, None); + } + + #[tokio::test] + async fn test_get_value_for_element_index() { + let (manager, pool) = setup_test_db().await; + + // First, create the store table that would normally exist + sqlx::query("CREATE TABLE IF NOT EXISTS store (key TEXT PRIMARY KEY, value TEXT NOT NULL)") + .execute(&pool) + .await + .unwrap(); + + // Insert a test value + let test_index = 123; + let test_value = "test_stored_value"; + sqlx::query("INSERT INTO store (key, value) VALUES (?, ?)") + .bind(format!("test:hashes:{}", test_index)) + .bind(test_value) + .execute(&pool) + .await + .unwrap(); + + // Test retrieving the value + let result = manager + .get_value_for_element_index(&pool, test_index) + .await + .unwrap(); + + assert_eq!(result, Some(test_value.to_string())); + } + + #[tokio::test] + async fn test_get_nonexistent_value_for_element_index() { + let (manager, pool) = setup_test_db().await; + + // Create store table + sqlx::query("CREATE TABLE IF NOT EXISTS store (key TEXT PRIMARY KEY, value TEXT NOT NULL)") + .execute(&pool) + .await + .unwrap(); + + let result = manager + .get_value_for_element_index(&pool, 999) + .await + .unwrap(); + + assert_eq!(result, None); + } +} diff --git a/crates/host/Cargo.toml b/crates/publisher/Cargo.toml similarity index 89% rename from crates/host/Cargo.toml rename to crates/publisher/Cargo.toml index d6ac8a9..ef7ba13 100644 --- a/crates/host/Cargo.toml +++ b/crates/publisher/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "host" +name = "publisher" version = "0.1.0" edition = "2021" @@ -22,8 +22,8 @@ starknet-handler = { path = "../starknet-handler" } eth-rlp-types = { workspace = true } garaga_rs = { git = "https://github.com/ametel01/garaga.git" } -mmr = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "workspace" } -store = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "workspace" } +mmr = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "feat/sha2-hasher" } +store = { git = "https://github.com/ametel01/rust-accumulators.git", branch = "feat/sha2-hasher" } eyre = { workspace = true } thiserror = { workspace = true } @@ -35,6 +35,7 @@ starknet-crypto = { workspace = true } clap = { workspace = true, features = ["derive"] } risc0-zkvm = { version = "1.1.3" } +# risc0-zkvm-platform = { version = "1.1.3" } serde = "1.0" risc0-ethereum-contracts = { git = "https://github.com/risc0/risc0-ethereum", tag = "v1.1.4" } risc0-groth16 = "1.1.2" diff --git a/crates/host/bin/build_mmr.rs b/crates/publisher/bin/build_mmr.rs similarity index 53% rename from crates/host/bin/build_mmr.rs rename to crates/publisher/bin/build_mmr.rs index 8f51732..a9a0577 100644 --- a/crates/host/bin/build_mmr.rs +++ b/crates/publisher/bin/build_mmr.rs @@ -1,9 +1,9 @@ use clap::Parser; use common::{get_env_var, initialize_logger_and_env}; -use eyre::{eyre, Result}; -use host::{db_access::get_store_path, AccumulatorBuilder, ProofGenerator, ProofType}; -use methods::{MMR_GUEST_ELF, MMR_GUEST_ID}; -use starknet_handler::provider::StarknetProvider; +use eyre::Result; +use methods::{MMR_APPEND_ELF, MMR_APPEND_ID}; +use publisher::{db_access::get_store_path, AccumulatorBuilder, ProofGenerator, ProofType}; +use starknet_handler::{account::StarknetAccount, provider::StarknetProvider}; use tracing::info; #[derive(Parser, Debug)] @@ -20,6 +20,10 @@ struct Args { /// Number of batches to process. If not specified, processes until block #0. #[arg(short, long)] num_batches: Option, + + /// Skip proof verification + #[arg(short, long, default_value_t = false)] + skip_proof: bool, } #[tokio::main] @@ -27,23 +31,29 @@ async fn main() -> Result<()> { initialize_logger_and_env()?; let rpc_url = get_env_var("STARKNET_RPC_URL")?; - let verifier_address = get_env_var("STARKNET_VERIFIER")?; + let verifier_address = get_env_var("FOSSIL_VERIFIER")?; + let private_key = get_env_var("STARKNET_PRIVATE_KEY")?; + let account_address = get_env_var("STARKNET_ACCOUNT_ADDRESS")?; info!("Starting Publisher..."); // Parse CLI arguments let args = Args::parse(); - let store_path = get_store_path(args.db_file).map_err(|e| eyre!(e))?; + let store_path = get_store_path(args.db_file)?; info!("Initializing proof generator..."); // Initialize proof generator - let proof_generator = ProofGenerator::new(MMR_GUEST_ELF, MMR_GUEST_ID); - + let proof_generator = ProofGenerator::new(MMR_APPEND_ELF, MMR_APPEND_ID, args.skip_proof); info!("Initializing accumulator builder..."); // Initialize accumulator builder with the batch size - let mut builder = - AccumulatorBuilder::new(&store_path, proof_generator, args.batch_size).await?; + let mut builder = AccumulatorBuilder::new( + &store_path, + proof_generator, + args.batch_size, + args.skip_proof, + ) + .await?; info!("Building MMR..."); // Build MMR from finalized block to block #0 or up to the specified number of batches @@ -61,16 +71,23 @@ async fn main() -> Result<()> { result.start_block(), result.end_block() ); + + let new_mmr_state = result.new_mmr_state(); + match result.proof() { Some(ProofType::Stark { .. }) => info!("Generated STARK proof"), Some(ProofType::Groth16 { calldata, .. }) => { - info!("Generated Groth16 proof"); - let provider = StarknetProvider::new(&rpc_url)?; - let result = provider.verify_groth16_proof_onchain(&verifier_address, &calldata); - info!( - "Proof verification result: {:?}", - result.await.map_err(|e| eyre!(e))? - ); + if !args.skip_proof { + info!("Verifying Groth16 proof on Starknet..."); + let provider = StarknetProvider::new(&rpc_url)?; + let account = + StarknetAccount::new(provider.provider(), &private_key, &account_address)?; + let (tx_hash, new_mmr_state) = account + .verify_mmr_proof(&verifier_address, &new_mmr_state, calldata) + .await?; + info!("Final proof verified on Starknet, tx hash: {:?}", tx_hash); + info!("New MMR state: {:?}", new_mmr_state); + } } None => info!("No proof generated"), } diff --git a/crates/publisher/bin/update_mmr.rs b/crates/publisher/bin/update_mmr.rs new file mode 100644 index 0000000..5df5bcb --- /dev/null +++ b/crates/publisher/bin/update_mmr.rs @@ -0,0 +1,47 @@ +use clap::Parser; +use common::{get_env_var, initialize_logger_and_env}; +use eyre::Result; +use publisher::{db_access::get_store_path, prove_mmr_update}; +use starknet_handler::{account::StarknetAccount, provider::StarknetProvider}; + +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +struct Args { + /// Path to the SQLite database file. + #[arg(short, long)] + db_file: Option, + + /// Start block + #[arg(short, long)] + start: u64, + + /// End block + #[arg(short, long)] + end: u64, +} + +#[tokio::main] +async fn main() -> Result<()> { + initialize_logger_and_env()?; + + let args = Args::parse(); + + let rpc_url = get_env_var("STARKNET_RPC_URL")?; + let private_key = get_env_var("STARKNET_PRIVATE_KEY")?; + let account_address = get_env_var("STARKNET_ACCOUNT_ADDRESS")?; + let verifier = get_env_var("FOSSIL_VERIFIER")?; + + let store_path = get_store_path(args.db_file)?; + + let (new_mmr_state, proof) = prove_mmr_update(&store_path, args.start, args.end).await?; + + let provider = StarknetProvider::new(&rpc_url)?; + + let account = StarknetAccount::new(provider.provider(), &private_key, &account_address)?; + + account + .verify_mmr_proof(&verifier, &new_mmr_state, proof) + .await?; + + Ok(()) +} diff --git a/crates/host/bin/verify_block_inclusion.rs b/crates/publisher/bin/verify_block_inclusion.rs similarity index 100% rename from crates/host/bin/verify_block_inclusion.rs rename to crates/publisher/bin/verify_block_inclusion.rs diff --git a/crates/host/src/accumulator.rs b/crates/publisher/src/accumulator.rs similarity index 78% rename from crates/host/src/accumulator.rs rename to crates/publisher/src/accumulator.rs index ef13340..b642127 100644 --- a/crates/host/src/accumulator.rs +++ b/crates/publisher/src/accumulator.rs @@ -2,13 +2,13 @@ use crate::db_access::{get_block_headers_by_block_range, DbConnection}; use crate::proof_generator::{ProofGenerator, ProofGeneratorError}; use crate::types::{BatchResult, ProofType}; -use common::{felt, string_array_to_felt_array, UtilsError}; +use common::UtilsError; use ethereum::get_finalized_block_hash; -use guest_types::{BatchProof, CombinedInput, GuestInput, GuestOutput}; -use mmr::{find_peaks, InStoreTableError, MMRError, PeaksOptions, MMR}; +use guest_types::{BatchProof, CombinedInput, GuestOutput, MMRInput}; +use mmr::{InStoreTableError, MMRError, PeaksOptions, MMR}; use mmr_utils::{initialize_mmr, MMRUtilsError, StoreManager}; use starknet_crypto::Felt; -use starknet_handler::MmrState; +use starknet_handler::{u256_from_hex, MmrState}; use store::{SqlitePool, StoreError, SubKey}; use thiserror::Error; use tracing::{debug, info, warn}; @@ -22,7 +22,7 @@ pub enum AccumulatorError { #[error("Expected Groth16 proof but got {got:?}")] ExpectedGroth16Proof { got: ProofType }, #[error("MMR root is not a valid Starknet field element: {0}")] - InvalidFeltHex(String), + InvalidU256Hex(String), #[error("SQLx error: {0}")] Sqlx(#[from] sqlx::Error), #[error("Utils error: {0}")] @@ -37,6 +37,8 @@ pub enum AccumulatorError { MMRUtils(#[from] MMRUtilsError), #[error("InStoreTable error: {0}")] InStoreTable(#[from] InStoreTableError), + #[error("StarknetHandler error: {0}")] + StarknetHandler(#[from] starknet_handler::StarknetHandlerError), } pub struct AccumulatorBuilder { @@ -44,17 +46,19 @@ pub struct AccumulatorBuilder { store_manager: StoreManager, mmr: MMR, pool: SqlitePool, - proof_generator: ProofGenerator, + proof_generator: ProofGenerator, total_batches: u64, current_batch: u64, previous_proofs: Vec, + skip_proof_verification: bool, } impl AccumulatorBuilder { pub async fn new( store_path: &str, - proof_generator: ProofGenerator, + proof_generator: ProofGenerator, batch_size: u64, + skip_proof_verification: bool, ) -> Result { let (store_manager, mmr, pool) = initialize_mmr(store_path).await?; debug!("MMR initialized at {}", store_path); @@ -68,6 +72,7 @@ impl AccumulatorBuilder { total_batches: 0, current_batch: 0, previous_proofs: Vec::new(), + skip_proof_verification, }) } @@ -98,26 +103,27 @@ impl AccumulatorBuilder { let current_leaves_count = self.mmr.leaves_count.get().await?; // Prepare guest input - let mmr_input = GuestInput::new( + let mmr_input = MMRInput::new( current_peaks.clone(), current_elements_count, current_leaves_count, - headers.iter().map(|h| h.block_hash.clone()).collect(), - self.previous_proofs.clone(), // Use the stored proofs + Some(headers.iter().map(|h| h.block_hash.clone()).collect()), + Some(self.previous_proofs.clone()), // Use the stored proofs ); - let combined_input = CombinedInput::new(headers.clone(), mmr_input); + let combined_input = + CombinedInput::new(headers.clone(), mmr_input, self.skip_proof_verification); // Generate appropriate proof let proof = if self.current_batch == self.total_batches - 1 { debug!("Generating final Groth16 proof for batch"); self.proof_generator - .generate_groth16_proof(&combined_input) + .generate_groth16_proof(combined_input) .await? } else { debug!("Generating intermediate STARK proof for batch"); self.proof_generator - .generate_stark_proof(&combined_input) + .generate_stark_proof(combined_input) .await? }; @@ -125,7 +131,7 @@ impl AccumulatorBuilder { let guest_output: GuestOutput = self.proof_generator.decode_journal(&proof)?; // TODO: Remove this and update MMR state after the proof is verified onchain - let new_mmr_state = self.update_mmr_state(&guest_output).await?; + let new_mmr_state = self.update_mmr_state(end_block, &guest_output).await?; // If this is a STARK proof, add it to previous_proofs for the next batch if let ProofType::Stark { @@ -141,12 +147,6 @@ impl AccumulatorBuilder { )); } - // Verify state after update - let final_peaks = self.mmr.get_peaks(PeaksOptions::default()).await?; - if final_peaks != guest_output.final_peaks().to_vec() { - return Err(AccumulatorError::PeaksVerificationError.into()); - } - self.current_batch += 1; debug!("Batch processing completed successfully"); @@ -160,6 +160,7 @@ impl AccumulatorBuilder { async fn update_mmr_state( &mut self, + latest_block_number: u64, guest_output: &GuestOutput, ) -> Result { debug!( @@ -190,34 +191,17 @@ impl AccumulatorBuilder { .await?; // Update all hashes in the store - for result in guest_output.append_results() { + for (index, hash) in guest_output.all_hashes() { // Store the hash in MMR - self.mmr - .hashes - .set(result.root_hash(), SubKey::Usize(result.element_index())) - .await?; + self.mmr.hashes.set(&hash, SubKey::Usize(index)).await?; // Update the mapping self.store_manager - .insert_value_index_mapping(&self.pool, result.root_hash(), result.element_index()) - .await?; - } - - // Update peaks - let peaks_indices = find_peaks(guest_output.elements_count()); - for (peak_hash, &peak_idx) in guest_output.final_peaks().iter().zip(peaks_indices.iter()) { - self.mmr - .hashes - .set(peak_hash, SubKey::Usize(peak_idx)) + .insert_value_index_mapping(&self.pool, &hash, index) .await?; } // Verify the state was properly updated - let stored_peaks = self.mmr.get_peaks(PeaksOptions::default()).await?; - - if stored_peaks != guest_output.final_peaks() { - return Err(AccumulatorError::PeaksVerificationError.into()); - } let bag = self.mmr.bag_the_peaks(None).await?; @@ -225,13 +209,13 @@ impl AccumulatorBuilder { .mmr .calculate_root_hash(&bag, self.mmr.elements_count.get().await?)?; - validate_felt_hex(&new_mmr_root_hash)?; + validate_u256_hex(&new_mmr_root_hash)?; let new_mmr_state = MmrState::new( - felt(&new_mmr_root_hash)?, + latest_block_number, + u256_from_hex(new_mmr_root_hash.trim_start_matches("0x"))?, guest_output.elements_count() as u64, guest_output.leaves_count() as u64, - string_array_to_felt_array(guest_output.final_peaks().to_vec())?, ); debug!("MMR state updated successfully"); @@ -321,23 +305,23 @@ impl AccumulatorBuilder { } } -/// Validates that a hex string represents a valid Starknet field element (252 bits) -fn validate_felt_hex(hex_str: &str) -> Result<(), AccumulatorError> { +/// Validates that a hex string represents a valid U256 (256-bit unsigned integer) +fn validate_u256_hex(hex_str: &str) -> Result<(), AccumulatorError> { // Check if it's a valid hex string with '0x' prefix if !hex_str.starts_with("0x") { - return Err(AccumulatorError::InvalidFeltHex(hex_str.to_string()).into()); + return Err(AccumulatorError::InvalidU256Hex(hex_str.to_string()).into()); } // Remove '0x' prefix and check if remaining string is valid hex let hex_value = &hex_str[2..]; if !hex_value.chars().all(|c| c.is_ascii_hexdigit()) { - return Err(AccumulatorError::InvalidFeltHex(hex_str.to_string()).into()); + return Err(AccumulatorError::InvalidU256Hex(hex_str.to_string()).into()); } - // Check length - maximum 63 hex chars (252 bits = 63 hex digits) + // Check length - maximum 64 hex chars (256 bits = 64 hex digits) // Note: we allow shorter values as they're valid smaller numbers - if hex_value.len() > 63 { - return Err(AccumulatorError::InvalidFeltHex(hex_str.to_string()).into()); + if hex_value.len() > 64 { + return Err(AccumulatorError::InvalidU256Hex(hex_str.to_string()).into()); } Ok(()) diff --git a/crates/host/src/db_access.rs b/crates/publisher/src/db_access.rs similarity index 98% rename from crates/host/src/db_access.rs rename to crates/publisher/src/db_access.rs index 5d0c1b6..379a7cf 100644 --- a/crates/host/src/db_access.rs +++ b/crates/publisher/src/db_access.rs @@ -6,7 +6,7 @@ use eth_rlp_types::BlockHeader; use mmr_utils::{create_database_file, ensure_directory_exists}; use sqlx::{postgres::PgPoolOptions, PgPool, Pool, Postgres}; -use crate::{accumulator::AccumulatorError, HostError}; +use crate::{accumulator::AccumulatorError, PublisherError}; #[derive(Debug)] pub struct DbConnection { @@ -137,7 +137,7 @@ pub async fn get_block_headers_by_block_range( Ok(headers) } -pub fn get_store_path(db_file: Option) -> Result { +pub fn get_store_path(db_file: Option) -> Result { // Load the database file path from the environment or use the provided argument let store_path = if let Some(db_file) = db_file { db_file diff --git a/crates/host/src/lib.rs b/crates/publisher/src/lib.rs similarity index 56% rename from crates/host/src/lib.rs rename to crates/publisher/src/lib.rs index 01d8860..bafa529 100644 --- a/crates/host/src/lib.rs +++ b/crates/publisher/src/lib.rs @@ -9,17 +9,19 @@ pub mod accumulator; pub mod db_access; pub mod proof_generator; pub mod types; +pub mod validator; pub use accumulator::AccumulatorBuilder; -use methods::{MMR_GUEST_ELF, MMR_GUEST_ID}; +use methods::{MMR_APPEND_ELF, MMR_APPEND_ID}; use mmr_utils::MMRUtilsError; pub use proof_generator::{ProofGenerator, ProofType}; use starknet_crypto::Felt; -use starknet_handler::{provider::StarknetProvider, MmrState, StarknetHandlerError}; +use starknet_handler::{MmrState, StarknetHandlerError}; use thiserror::Error; +pub use validator::{ValidatorBuilder, ValidatorError}; #[derive(Error, Debug)] -pub enum HostError { +pub enum PublisherError { #[error("Verification result is empty")] VerificationError, #[error("Accumulator error: {0}")] @@ -28,17 +30,17 @@ pub enum HostError { StarknetHandler(#[from] StarknetHandlerError), #[error("MMRUtils error: {0}")] MMRUtils(#[from] MMRUtilsError), + #[error("Headers Validator error: {0}")] + Validator(#[from] ValidatorError), } -pub async fn update_mmr_and_verify_onchain( +pub async fn prove_mmr_update( db_file: &str, start_block: u64, end_block: u64, - rpc_url: &str, - verifier_address: &str, -) -> Result<(bool, MmrState), HostError> { - let proof_generator = ProofGenerator::new(MMR_GUEST_ELF, MMR_GUEST_ID); - let mut builder = AccumulatorBuilder::new(db_file, proof_generator, 1024).await?; +) -> Result<(MmrState, Vec), PublisherError> { + let proof_generator = ProofGenerator::new(MMR_APPEND_ELF, MMR_APPEND_ID, false); + let mut builder = AccumulatorBuilder::new(db_file, proof_generator, 1024, false).await?; tracing::debug!( db_file, @@ -56,23 +58,22 @@ pub async fn update_mmr_and_verify_onchain( "Successfully generated proof for block range" ); - let provider = StarknetProvider::new(rpc_url)?; - tracing::debug!(verifier_address, "Submitting proof for verification"); - - let verification_result = provider - .verify_groth16_proof_onchain(verifier_address, &proof_calldata) - .await?; + Ok((new_mmr_state, proof_calldata)) +} - let verified = *verification_result - .first() - .ok_or_else(|| HostError::VerificationError)? - == Felt::from(1); +pub async fn prove_headers_validity_and_inclusion( + headers: &Vec, + skip_proof_verification: Option, +) -> Result { + let skip_proof = match skip_proof_verification { + Some(skip) => skip, + None => false, + }; + let validator = ValidatorBuilder::new(skip_proof).await?; - if verified { - tracing::info!("Proof verification successful on-chain"); - } else { - tracing::warn!("Proof verification failed on-chain"); - } + let result = validator + .verify_blocks_validity_and_inclusion(headers) + .await?; - Ok((verified, new_mmr_state)) + Ok(result) } diff --git a/crates/host/src/proof_generator.rs b/crates/publisher/src/proof_generator.rs similarity index 55% rename from crates/host/src/proof_generator.rs rename to crates/publisher/src/proof_generator.rs index bc4fdb4..e09ee48 100644 --- a/crates/host/src/proof_generator.rs +++ b/crates/publisher/src/proof_generator.rs @@ -5,10 +5,10 @@ use garaga_rs::{ }, definitions::CurveID, }; -use guest_types::CombinedInput; use risc0_ethereum_contracts::encode_seal; use risc0_zkvm::{compute_image_id, default_prover, ExecutorEnv, ProverOpts, VerifierContext}; use serde::Deserialize; +use starknet_crypto::Felt; use thiserror::Error; use tokio::task; use tracing::{debug, info, warn}; @@ -27,70 +27,80 @@ pub enum ProofGeneratorError { CalldataError(String), #[error("Failed to spawn blocking task: {0}")] SpawnBlocking(String), - #[error("Task join error: {0}")] + #[error("Tokio task join error: {0}")] Join(#[from] tokio::task::JoinError), #[error("Risc0 serde error: {0}")] Risc0Serde(#[from] risc0_zkvm::serde::Error), } -pub struct ProofGenerator { +pub struct ProofGenerator { method_elf: &'static [u8], method_id: [u32; 8], + skip_proof_verification: bool, + _phantom: std::marker::PhantomData, } -impl ProofGenerator { - pub fn new(method_elf: &'static [u8], method_id: [u32; 8]) -> Self { +impl ProofGenerator +where + T: serde::Serialize + Clone + Send + 'static, +{ + pub fn new( + method_elf: &'static [u8], + method_id: [u32; 8], + skip_proof_verification: bool, + ) -> Self { Self { method_elf, method_id, + skip_proof_verification, + _phantom: std::marker::PhantomData, } } /// Generate a standard Stark proof for intermediate batches - pub async fn generate_stark_proof( - &self, - input: &CombinedInput, - ) -> Result { + pub async fn generate_stark_proof(&self, input: T) -> Result { info!("Generating STARK proof for intermediate batch"); - debug!("Input size: {} bytes", std::mem::size_of_val(input)); - - let method_elf = self.method_elf; - let method_id = self.method_id; - let input = input.clone(); - - let proof = task::spawn_blocking(move || -> eyre::Result { - debug!("Building executor environment"); - let env = ExecutorEnv::builder() - .write(&input) - .map_err(|e| { - warn!("Failed to write input to executor env: {}", e); - ProofGeneratorError::ExecutorEnvError(e.to_string()) - })? - .build() - .map_err(|e| { - warn!("Failed to build executor env: {}", e); - ProofGeneratorError::ExecutorEnvError(e.to_string()) - })?; - - debug!("Generating STARK proof with default prover"); - let receipt = default_prover() - .prove(env, method_elf) - .map_err(|e| { - warn!("Failed to generate STARK proof: {}", e); - ProofGeneratorError::ReceiptError(e.to_string()) - })? - .receipt; - - debug!("Computing image ID"); - let image_id = compute_image_id(method_elf) - .map_err(|e| ProofGeneratorError::ImageIdError(e.to_string()))?; - - info!("Successfully generated STARK proof"); - Ok(ProofType::Stark { - receipt, - image_id: image_id.as_bytes().to_vec(), - method_id, - }) + debug!("Input size: {} bytes", std::mem::size_of_val(&input)); + + let proof = task::spawn_blocking({ + let method_elf = self.method_elf; + let method_id = self.method_id; + let input = input.clone(); + + move || -> eyre::Result { + debug!("Building executor environment"); + let env = ExecutorEnv::builder() + .write(&input) + .map_err(|e| { + warn!("Failed to write input to executor env: {}", e); + ProofGeneratorError::ExecutorEnvError(e.to_string()) + })? + .build() + .map_err(|e| { + warn!("Failed to build executor env: {}", e); + ProofGeneratorError::ExecutorEnvError(e.to_string()) + })?; + + debug!("Generating STARK proof with default prover"); + let receipt = default_prover() + .prove(env, method_elf) + .map_err(|e| { + warn!("Failed to generate STARK proof: {}", e); + ProofGeneratorError::ReceiptError(e.to_string()) + })? + .receipt; + + debug!("Computing image ID"); + let image_id = compute_image_id(method_elf) + .map_err(|e| ProofGeneratorError::ImageIdError(e.to_string()))?; + + info!("Successfully generated STARK proof"); + Ok(ProofType::Stark { + receipt, + image_id: image_id.as_bytes().to_vec(), + method_id, + }) + } }) .await? .map_err(|e| ProofGeneratorError::SpawnBlocking(e.to_string()))?; @@ -99,15 +109,13 @@ impl ProofGenerator { } /// Generate a Groth16 proof for the final batch - pub async fn generate_groth16_proof( - &self, - input: &CombinedInput, - ) -> Result { + pub async fn generate_groth16_proof(&self, input: T) -> Result { info!("Generating Groth16 proof for final batch"); - debug!("Input size: {} bytes", std::mem::size_of_val(input)); + debug!("Input size: {} bytes", std::mem::size_of_val(&input)); let method_elf = self.method_elf; let input = input.clone(); + let skip_proof_verification = self.skip_proof_verification; let proof = task::spawn_blocking(move || -> eyre::Result { debug!("Building executor environment"); @@ -151,15 +159,23 @@ impl ProofGenerator { debug!("Journal size: {} bytes", journal.len()); debug!("Converting to Groth16 proof"); - let groth16_proof = - Groth16Proof::from_risc0(encoded_seal, image_id.as_bytes().to_vec(), journal); + let groth16_proof = if !skip_proof_verification { + Groth16Proof::from_risc0(encoded_seal, image_id.as_bytes().to_vec(), journal) + } else { + Default::default() + }; debug!("Generating calldata"); - let calldata = get_groth16_calldata(&groth16_proof, &get_risc0_vk(), CurveID::BN254) - .map_err(|e| { - warn!("Failed to generate calldata: {}", e); - ProofGeneratorError::CalldataError(e.to_string()) - })?; + let calldata = if !skip_proof_verification { + get_groth16_calldata(&groth16_proof, &get_risc0_vk(), CurveID::BN254).map_err( + |e| { + warn!("Failed to generate calldata: {}", e); + ProofGeneratorError::CalldataError(e.to_string()) + }, + )? + } else { + vec![Felt::ZERO] + }; info!("Successfully generated Groth16 proof"); Ok(ProofType::Groth16 { receipt, calldata }) @@ -170,10 +186,10 @@ impl ProofGenerator { Ok(proof) } - pub fn decode_journal Deserialize<'a>>( + pub fn decode_journal Deserialize<'a>>( &self, proof: &ProofType, - ) -> Result { + ) -> Result { let receipt = match proof { ProofType::Groth16 { receipt, .. } | ProofType::Stark { receipt, .. } => receipt, }; diff --git a/crates/host/src/types.rs b/crates/publisher/src/types.rs similarity index 100% rename from crates/host/src/types.rs rename to crates/publisher/src/types.rs diff --git a/crates/publisher/src/validator.rs b/crates/publisher/src/validator.rs new file mode 100644 index 0000000..dac91d2 --- /dev/null +++ b/crates/publisher/src/validator.rs @@ -0,0 +1,89 @@ +use crate::proof_generator::{ProofGenerator, ProofGeneratorError}; +use common::get_db_path; +use guest_types::{BlocksValidityInput, MMRInput}; +use methods::{BLOCKS_VALIDITY_ELF, BLOCKS_VALIDITY_ID}; +use mmr::{MMRError, PeaksOptions, MMR}; +use mmr_utils::{initialize_mmr, StoreManager}; +use store::SqlitePool; + +#[derive(thiserror::Error, Debug)] +pub enum ValidatorError { + #[error("Utils error: {0}")] + Utils(#[from] common::UtilsError), + #[error("MMR error: {0}")] + MMRUtils(#[from] mmr_utils::MMRUtilsError), + #[error("Store error: {0}")] + Sqlx(#[from] sqlx::Error), + #[error("Store error: {0}")] + Store(#[from] store::StoreError), + #[error("MMR error: {0}")] + MMRError(#[from] MMRError), + #[error("ProofGenerator error: {0}")] + ProofGenerator(#[from] ProofGeneratorError), +} + +pub struct ValidatorBuilder { + store: StoreManager, + mmr: MMR, + pool: SqlitePool, + proof_generator: ProofGenerator, +} + +impl ValidatorBuilder { + pub async fn new(skip_proof: bool) -> Result { + let proof_generator = + ProofGenerator::new(BLOCKS_VALIDITY_ELF, BLOCKS_VALIDITY_ID, skip_proof); + + let store_path = get_db_path()?; + let (store, mmr, pool) = initialize_mmr(&store_path).await?; + + Ok(Self { + store, + mmr, + pool, + proof_generator, + }) + } + + pub async fn verify_blocks_validity_and_inclusion( + &self, + headers: &Vec, + ) -> Result { + let mut block_indexes = Vec::new(); + + for header in headers.iter() { + let index = self + .store + .get_element_index_for_value(&self.pool, &header.block_hash) + .await? + .ok_or(ValidatorError::Store(store::StoreError::GetError))?; + block_indexes.push(index); + } + + // Get and verify current MMR state + let current_peaks = self.mmr.get_peaks(PeaksOptions::default()).await?; + let current_elements_count = self.mmr.elements_count.get().await?; + let current_leaves_count = self.mmr.leaves_count.get().await?; + + // Prepare guest input + let mmr_input = MMRInput::new( + current_peaks.clone(), + current_elements_count, + current_leaves_count, + None, + None, + ); + + let blocks_validity_input = + BlocksValidityInput::new(headers.clone(), mmr_input, block_indexes); + + let proof = self + .proof_generator + .generate_groth16_proof(blocks_validity_input) + .await?; + + let guest_output: bool = self.proof_generator.decode_journal(&proof)?; + + Ok(guest_output) + } +} diff --git a/crates/publisher/tests/0.db b/crates/publisher/tests/0.db new file mode 100644 index 0000000000000000000000000000000000000000..64346c9e7f6eccfb8a5df801810078d4b3522c67 GIT binary patch literal 28672 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 ARsaA1 literal 0 HcmV?d00001 diff --git a/crates/publisher/tests/mmr_proofs_test.rs b/crates/publisher/tests/mmr_proofs_test.rs new file mode 100644 index 0000000..862f7e2 --- /dev/null +++ b/crates/publisher/tests/mmr_proofs_test.rs @@ -0,0 +1,35 @@ +// use mmr::MMR; +use mmr_utils::initialize_mmr; +use std::fs; +use std::path::PathBuf; + +#[tokio::test] +async fn test_mmr_proofs() { + // Get path to the test file's directory + let test_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests"); + fs::create_dir_all(&test_dir).expect("Failed to create test directory"); + + let binding = test_dir.join("0.db"); + let store_path = binding.to_str().unwrap(); + let (store_manager, mmr, pool) = initialize_mmr(store_path).await.unwrap(); + + let indexs = vec![1, 2, 4, 5, 8, 9, 11, 12, 16, 17, 19, 20, 23, 24, 26, 27]; + + let mut hashes = vec![]; + for index in indexs.iter() { + let hash = store_manager + .get_value_for_element_index(&pool, *index) + .await + .unwrap(); + hashes.push(hash.unwrap()); + } + + for (i, index) in indexs.iter().enumerate() { + let proof = mmr.get_proof(*index, None).await.unwrap(); + let result = mmr + .verify_proof(proof, hashes[i].clone(), None) + .await + .unwrap(); + assert!(result); + } +} diff --git a/crates/relayer/src/relayer.rs b/crates/relayer/src/relayer.rs index fc4f693..f65cf84 100644 --- a/crates/relayer/src/relayer.rs +++ b/crates/relayer/src/relayer.rs @@ -1,6 +1,10 @@ use alloy::{ - network::EthereumWallet, primitives::U256, providers::ProviderBuilder, - signers::local::PrivateKeySigner, sol_types::sol, + network::EthereumWallet, + primitives::U256, + providers::ProviderBuilder, + signers::local::PrivateKeySigner, + sol_types::sol, + transports::{RpcError, TransportErrorKind}, }; use common::{get_env_var, get_var, UtilsError}; // use eyre::Result; @@ -9,12 +13,12 @@ use tracing::info; #[derive(Debug, Error)] pub enum RelayerError { - #[error("Ethereum provider initialization failed: {0}")] - ProviderError(String), - #[error("Transaction failed: {0}")] - TransactionError(String), #[error("Utils error: {0}")] Utils(#[from] UtilsError), + #[error("RPC error: {0}")] + RpcError(#[from] RpcError), + #[error("Alloy contract error: {0}")] + AlloyContract(#[from] alloy_contract::Error), } sol!( @@ -53,8 +57,7 @@ impl Relayer { .with_recommended_fillers() .wallet(self.wallet.clone()) .on_builtin(&provider_url) - .await - .map_err(|e| RelayerError::ProviderError(e.to_string()))?; + .await?; info!("Connected to Ethereum provider at {}", provider_url); // Load the contract address and initialize the contract @@ -76,10 +79,7 @@ impl Relayer { self.l2_recipient_addr ); - let pending_tx = call_builder - .send() - .await - .map_err(|e| RelayerError::TransactionError(e.to_string()))?; + let pending_tx = call_builder.send().await?; info!( "Transaction sent successfully. Tx hash: {:?}", pending_tx.tx_hash() diff --git a/crates/starknet-handler/Cargo.toml b/crates/starknet-handler/Cargo.toml index c830659..9c78a9c 100644 --- a/crates/starknet-handler/Cargo.toml +++ b/crates/starknet-handler/Cargo.toml @@ -7,6 +7,8 @@ edition = "2021" common = { path = "../common" } thiserror = { workspace = true } -tracing = { workspace = true } starknet = { workspace = true } -starknet-crypto = { workspace = true } \ No newline at end of file +starknet-crypto = { workspace = true } + +crypto-bigint = "0.5.5" +url = "2.5.4" diff --git a/crates/starknet-handler/src/account.rs b/crates/starknet-handler/src/account.rs index fe51f8e..ddb8d60 100644 --- a/crates/starknet-handler/src/account.rs +++ b/crates/starknet-handler/src/account.rs @@ -43,28 +43,28 @@ impl StarknetAccount { self.account.clone() } - pub async fn update_mmr_state( + pub async fn verify_mmr_proof( &self, - store_address: Felt, - latest_mmr_block: u64, + verifier_address: &str, new_mmr_state: &MmrState, - ) -> Result { - let selector = selector!("update_mmr_state"); + proof: Vec, + ) -> Result<(Felt, MmrState), StarknetHandlerError> { + let selector = selector!("verify_mmr_proof"); let mut calldata = vec![]; - calldata.push(Felt::from(latest_mmr_block)); new_mmr_state.encode(&mut calldata)?; + calldata.extend(proof.iter().cloned()); let tx = self .account .execute_v1(vec![starknet::core::types::Call { selector, calldata, - to: store_address, + to: felt(verifier_address)?, }]) .send() .await?; - Ok(tx.transaction_hash) + Ok((tx.transaction_hash, new_mmr_state.clone())) } } diff --git a/crates/starknet-handler/src/lib.rs b/crates/starknet-handler/src/lib.rs index ebb7dd0..91e7d6b 100644 --- a/crates/starknet-handler/src/lib.rs +++ b/crates/starknet-handler/src/lib.rs @@ -1,20 +1,19 @@ #![deny(unused_crate_dependencies)] +use crypto_bigint::U256 as CryptoBigIntU256; pub mod account; pub mod provider; use starknet::accounts::single_owner::SignError; use starknet::accounts::AccountError; -use starknet::core::{ - codec::{Decode, Encode}, - types::Felt, -}; +use starknet::core::codec::{Decode, Encode}; +use starknet::core::types::U256; use starknet::signers::local_wallet::SignError as LocalWalletSignError; use thiserror::Error; #[derive(Error, Debug)] pub enum StarknetHandlerError { #[error("Failed to parse: {0}")] - ParseError(String), + ParseError(#[from] url::ParseError), #[error("Failed to create selector: {0}")] SelectorError(String), #[error("Failed to execute transaction: {0}")] @@ -27,31 +26,87 @@ pub enum StarknetHandlerError { Utils(#[from] common::UtilsError), #[error("Encode error: {0}")] Encode(#[from] starknet::core::codec::Error), + #[error("Error parsing int: {0}")] + ParseIntError(#[from] std::num::ParseIntError), + #[error("Provider error: {0}")] + Provider(#[from] starknet::providers::ProviderError), } #[derive(Clone, Debug, Encode, Decode)] pub struct MmrState { - root_hash: Felt, + latest_block_number: u64, + root_hash: U256, elements_count: u64, leaves_count: u64, - peaks: Vec, } impl MmrState { - pub fn new(root_hash: Felt, elements_count: u64, leaves_count: u64, peaks: Vec) -> Self { + pub fn new( + latest_block_number: u64, + root_hash: U256, + elements_count: u64, + leaves_count: u64, + ) -> Self { Self { + latest_block_number, root_hash, elements_count, leaves_count, - peaks, } } - pub fn root_hash(&self) -> Felt { + pub fn latest_block_number(&self) -> u64 { + self.latest_block_number + } + + pub fn root_hash(&self) -> U256 { self.root_hash } + pub fn elements_count(&self) -> u64 { + self.elements_count + } + pub fn leaves_count(&self) -> u64 { self.leaves_count } } + +pub fn u256_from_hex(hex: &str) -> Result { + let crypto_bigint = CryptoBigIntU256::from_be_hex(hex); + + Ok(U256::from(crypto_bigint)) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_u256_from_hex() { + // Test valid hex string + let result = + u256_from_hex("ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80") + .unwrap(); + assert_eq!( + result.to_string(), + "77814517325470205911140941194401928579557062014761831930645393041380819009408" + ); + + // Test max value + let result = + u256_from_hex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + .unwrap(); + assert_eq!( + result.to_string(), + "115792089237316195423570985008687907853269984665640564039457584007913129639935" + ); + } + + #[test] + #[should_panic] + fn test_u256_from_hex_invalid_input() { + // Test invalid hex string (contains non-hex characters) + u256_from_hex("0xghijkl").unwrap(); + } +} diff --git a/crates/starknet-handler/src/provider.rs b/crates/starknet-handler/src/provider.rs index aec80f5..81a6f97 100644 --- a/crates/starknet-handler/src/provider.rs +++ b/crates/starknet-handler/src/provider.rs @@ -1,7 +1,5 @@ -use std::sync::Arc; - -use common::felt; use starknet::providers::Provider; +use std::sync::Arc; use crate::{MmrState, StarknetHandlerError}; use starknet::macros::selector; @@ -21,8 +19,7 @@ pub struct StarknetProvider { impl StarknetProvider { pub fn new(rpc_url: &str) -> Result { - let parsed_url = Url::parse(rpc_url) - .map_err(|_| StarknetHandlerError::ParseError(rpc_url.to_string()))?; + let parsed_url = Url::parse(rpc_url)?; Ok(Self { provider: Arc::new(JsonRpcClient::new(HttpTransport::new(parsed_url))), rpc_url: rpc_url.to_string(), @@ -37,36 +34,36 @@ impl StarknetProvider { self.provider.clone() } - pub async fn verify_groth16_proof_onchain( - &self, - verifier_address: &str, - calldata: &[Felt], - ) -> Result, StarknetHandlerError> { - tracing::info!("Verifying Groth16 proof onchain..."); - let contract_address = felt(verifier_address)?; - - let entry_point_selector = selector!("verify_groth16_proof_bn254"); - - let result = self - .provider - .call( - FunctionCall { - contract_address, - entry_point_selector, - calldata: calldata.to_vec(), - }, - BlockId::Tag(BlockTag::Latest), - ) - .await - .map_err(|e| StarknetHandlerError::TransactionError(e.to_string()))?; - - Ok(result) - } + // pub async fn verify_groth16_proof_onchain( + // &self, + // verifier_address: &str, + // calldata: &[Felt], + // ) -> Result, StarknetHandlerError> { + // tracing::info!("Verifying Groth16 proof onchain..."); + // let contract_address = felt(verifier_address)?; + + // let entry_point_selector = selector!("verify_groth16_proof_bn254"); + + // let result = self + // .provider + // .call( + // FunctionCall { + // contract_address, + // entry_point_selector, + // calldata: calldata.to_vec(), + // }, + // BlockId::Tag(BlockTag::Latest), + // ) + // .await + // .map_err(|e| StarknetHandlerError::TransactionError(e.to_string()))?; + + // Ok(result) + // } pub async fn get_latest_mmr_state( &self, l2_store_address: &Felt, - ) -> Result<(u64, MmrState), StarknetHandlerError> { + ) -> Result { let entry_point_selector = selector!("get_mmr_state"); let data = self @@ -79,16 +76,11 @@ impl StarknetProvider { }, BlockId::Tag(BlockTag::Latest), ) - .await - .map_err(|e| StarknetHandlerError::TransactionError(e.to_string()))?; - - let latest_mmr_block = - u64::from_str_radix(data[0].to_hex_string().trim_start_matches("0x"), 16) - .map_err(|_| StarknetHandlerError::ParseError(data[0].to_hex_string()))?; + .await?; - let mmr_state = MmrState::decode(&data[1..])?; + let mmr_state = MmrState::decode(&data)?; - Ok((latest_mmr_block, mmr_state)) + Ok(mmr_state) } pub async fn get_latest_relayed_block( @@ -107,12 +99,10 @@ impl StarknetProvider { }, BlockId::Tag(BlockTag::Latest), ) - .await - .map_err(|e| StarknetHandlerError::TransactionError(e.to_string()))?; + .await?; let block_number = - u64::from_str_radix(data[0].to_hex_string().trim_start_matches("0x"), 16) - .map_err(|_| StarknetHandlerError::ParseError(data[0].to_hex_string()))?; + u64::from_str_radix(data[0].to_hex_string().trim_start_matches("0x"), 16)?; Ok(block_number) } diff --git a/db-store/0.db b/db-store/0.db deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/deploy.sh b/scripts/deploy.sh index a24810f..ccad1c9 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -3,13 +3,13 @@ # Ensure the script stops on the first error set -e -source ../.env +source .env -ETHEREUM_DIR="../contracts/ethereum" +ETHEREUM_DIR="contracts/ethereum" cd $ETHEREUM_DIR && forge script script/LocalTesting.s.sol:LocalSetup --broadcast --rpc-url $ANVIL_URL -L1_MESSAGE_SENDER=0xF94AB55a20B32AC37c3A105f12dB535986697945 +L1_MESSAGE_SENDER=0x364C7188028348566E38D762f6095741c49f492B # Function to wait for Katana to be ready # wait_for_katana() { @@ -37,7 +37,7 @@ scarb build # Declare and deploy Fossil Store contract echo "Declaring Fossil Store contract..." -FOSSILSTORE_HASH=$(starkli declare ./target/dev/store_Store.contract_class.json --compiler-version 2.8.2 -w | grep -o '0x[a-fA-F0-9]\{64\}' | head -1) +FOSSILSTORE_HASH=$(starkli declare ./target/dev/fossil_store_Store.contract_class.json --compiler-version 2.8.2 -w | grep -o '0x[a-fA-F0-9]\{64\}' | head -1) echo "Class hash declared: $FOSSILSTORE_HASH" echo "Deploying Fossil Store contract..." @@ -67,24 +67,32 @@ echo "Deploying Groth16 Verifier contract..." VERIFIER_ADDRESS=$(starkli deploy $VERIFIER_HASH $ECIP_HASH --salt 1 | grep -o '0x[a-fA-F0-9]\{64\}' | head -1) echo "Contract deployed at: $VERIFIER_ADDRESS" +echo "Declaring Fossil Verifier contract..." +FOSSIL_VERIFIER_HASH=$(starkli declare ./target/dev/verifier_FossilVerifier.contract_class.json --compiler-version 2.8.2 -w | grep -o '0x[a-fA-F0-9]\{64\}' | head -1) +echo "Class hash declared: $FOSSIL_VERIFIER_HASH" + +echo "Deploying Fossil Verifier contract..." +FOSSIL_VERIFIER_ADDRESS=$(starkli deploy $FOSSIL_VERIFIER_HASH $VERIFIER_ADDRESS $FOSSILSTORE_ADDRESS --salt 1 -w | grep -o '0x[a-fA-F0-9]\{64\}' | head -1) +echo "Contract deployed at: $FOSSIL_VERIFIER_ADDRESS" + echo "All contracts deployed!" -# Fetch the current Ethereum block number using `cast` -ETH_BLOCK=$(cast block-number) -echo "Current Ethereum block number: $ETH_BLOCK" +# # Fetch the current Ethereum block number using `cast` +# ETH_BLOCK=$(cast block-number) +# echo "Current Ethereum block number: $ETH_BLOCK" -# Ensure `ETH_BLOCK` is a valid number before performing arithmetic -if [[ $ETH_BLOCK =~ ^[0-9]+$ ]]; then - # Subtract 256 from the current block number - ETH_BLOCK=$((ETH_BLOCK - 256)) - echo "Updated Ethereum block number: $ETH_BLOCK" +# # Ensure `ETH_BLOCK` is a valid number before performing arithmetic +# if [[ $ETH_BLOCK =~ ^[0-9]+$ ]]; then +# # Subtract 256 from the current block number +# ETH_BLOCK=$((ETH_BLOCK - 256)) +# echo "Updated Ethereum block number: $ETH_BLOCK" - # Run the Starkli command with the updated block number - starkli invoke $FOSSILSTORE_ADDRESS update_mmr_state $ETH_BLOCK 0x0 0x0 0x0 0x0 - echo "Updated MMR state on Starknet for testing with block number: $ETH_BLOCK" -else - echo "Failed to retrieve a valid block number from 'cast'." -fi +# # Run the Starkli command with the updated block number +# starkli invoke $FOSSILSTORE_ADDRESS update_mmr_state $ETH_BLOCK 0x0 0x0 0x0 0x0 +# echo "Updated MMR state on Starknet for testing with block number: $ETH_BLOCK" +# else +# echo "Failed to retrieve a valid block number from 'cast'." +# fi # Path to the .env file ENV_FILE="../../.env" @@ -106,7 +114,7 @@ update_env_var() { update_env_var "L2_MSG_PROXY" "$L1MESSAGEPROXY_ADDRESS" update_env_var "FOSSIL_STORE" "$FOSSILSTORE_ADDRESS" update_env_var "STARKNET_VERIFIER" "$VERIFIER_ADDRESS" - +update_env_var "FOSSIL_VERIFIER" "$FOSSIL_VERIFIER_ADDRESS" pwd source ../../.env diff --git a/scripts/lint.sh b/scripts/lint.sh index 3776477..755bd8a 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -7,6 +7,7 @@ cargo clippy \ -p mmr-utils \ -p relayer \ -p starknet-handler \ + -p guest-mmr \ -- \ -W clippy::single_match \ -W clippy::single_match_else \ diff --git a/scripts/run_relayer.sh b/scripts/run_relayer.sh index 8d795f4..4a0a02d 100755 --- a/scripts/run_relayer.sh +++ b/scripts/run_relayer.sh @@ -2,10 +2,10 @@ set -e -cd ../crates/relayer +cd crates/relayer while true; do - cargo run + cargo run --release echo "Waiting 180 seconds before next run..." sleep 180 done