From 0e7c5b6f7a61c6f8f3fb09b3825c2dac31161d5b Mon Sep 17 00:00:00 2001 From: ctrlc03 <93448202+ctrlc03@users.noreply.github.com> Date: Fri, 16 Jan 2026 15:51:57 +0000 Subject: [PATCH 1/6] chore: retry activate on crisp server --- crates/evm/src/lib.rs | 1 + examples/CRISP/Cargo.lock | 769 +++++++++++++++++++- examples/CRISP/Cargo.toml | 1 + examples/CRISP/server/Cargo.toml | 1 + examples/CRISP/server/src/server/indexer.rs | 14 +- 5 files changed, 771 insertions(+), 15 deletions(-) diff --git a/crates/evm/src/lib.rs b/crates/evm/src/lib.rs index 6922193698..18640261c8 100644 --- a/crates/evm/src/lib.rs +++ b/crates/evm/src/lib.rs @@ -23,4 +23,5 @@ pub use enclave_sol_reader::EnclaveSolReader; pub use enclave_sol_writer::EnclaveSolWriter; pub use event_reader::{EnclaveEvmEvent, EvmEventReader, EvmEventReaderState, ExtractorFn}; pub use historical_event_coordinator::{CoordinatorStart, HistoricalEventCoordinator}; +pub use helpers::send_tx_with_retry; pub use repo::*; diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index 67db7860ed..980b7bd6a2 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -2,6 +2,31 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "actix" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de7fa236829ba0841304542f7614c42b80fca007455315c45c785ccfa873a85b" +dependencies = [ + "actix-macros", + "actix-rt", + "actix_derive", + "bitflags 2.10.0", + "bytes", + "crossbeam-channel", + "futures-core", + "futures-sink", + "futures-task", + "futures-util", + "log", + "once_cell", + "parking_lot 0.12.5", + "pin-project-lite", + "smallvec", + "tokio", + "tokio-util", +] + [[package]] name = "actix-codec" version = "0.5.2" @@ -200,6 +225,17 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "actix_derive" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6ac1e58cded18cb28ddc17143c4dea5345b3ad575e14f32f66e4054a56eb271" +dependencies = [ + "proc-macro2 1.0.103", + "quote 1.0.42", + "syn 2.0.111", +] + [[package]] name = "addr2line" version = "0.25.1" @@ -215,6 +251,41 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if 1.0.4", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.8.12" @@ -1091,7 +1162,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -1102,7 +1173,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -1111,6 +1182,18 @@ version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2", + "cpufeatures", + "password-hash", +] + [[package]] name = "ark-bn254" version = "0.4.0" @@ -1471,6 +1554,15 @@ dependencies = [ "rustc_version 0.4.1", ] +[[package]] +name = "atomic" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" +dependencies = [ + "bytemuck", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -1578,9 +1670,15 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec", + "bit-vec 0.8.0", ] +[[package]] +name = "bit-vec" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f" + [[package]] name = "bit-vec" version = "0.8.0" @@ -1630,6 +1728,15 @@ dependencies = [ "wyz", ] +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "blake3" version = "1.8.2" @@ -1652,6 +1759,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bloom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d00ac8e5056d6d65376a3c1aa5c7c34850d6949ace17f0266953a254eb3d6fe8" +dependencies = [ + "bit-vec 0.4.4", +] + [[package]] name = "blst" version = "0.3.16" @@ -1685,6 +1801,15 @@ dependencies = [ "alloc-stdlib", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bumpalo" version = "3.19.1" @@ -1697,6 +1822,12 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" + [[package]] name = "byteorder" version = "1.5.0" @@ -1781,6 +1912,16 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clap" version = "4.5.41" @@ -1827,6 +1968,20 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "commitlog" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf2bc2a9c8e9369d54360cc20cd9f0d5f03e427bc3fe8c9d7bc6ba1512addff" +dependencies = [ + "byteorder", + "bytes", + "crc32c", + "log", + "memmap2", + "page_size", +] + [[package]] name = "config" version = "0.14.0" @@ -2003,6 +2158,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +[[package]] +name = "crc32c" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a47af21622d091a8f0fb295b88bc886ac74efcc613efc19f5d0b21de5c89e47" +dependencies = [ + "rustc_version 0.4.1", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -2036,6 +2200,7 @@ dependencies = [ "dialoguer", "dotenvy", "e3-compute-provider", + "e3-evm", "e3-sdk", "env_logger", "evm-helpers", @@ -2088,6 +2253,15 @@ dependencies = [ "zk-inputs", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -2138,9 +2312,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", + "rand_core 0.6.4", "typenum", ] +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + [[package]] name = "darling" version = "0.21.3" @@ -2286,6 +2470,48 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.4.6", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.2", + "windows-sys 0.61.2", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -2376,6 +2602,115 @@ dependencies = [ "zk-kit-imt", ] +[[package]] +name = "e3-config" +version = "0.1.7" +dependencies = [ + "alloy-primitives", + "anyhow", + "dirs 5.0.1", + "e3-events", + "figment", + "path-clean", + "petname", + "rand 0.8.5", + "serde", + "serde_yaml", + "shellexpand", + "tracing", + "url", +] + +[[package]] +name = "e3-crypto" +version = "0.1.7" +dependencies = [ + "aes-gcm", + "anyhow", + "argon2", + "async-trait", + "bincode", + "e3-utils", + "rand 0.8.5", + "serde", + "tokio", + "tracing", + "tracing-test", + "zeroize", +] + +[[package]] +name = "e3-data" +version = "0.1.7" +dependencies = [ + "actix", + "anyhow", + "async-trait", + "bincode", + "commitlog", + "e3-events", + "e3-utils", + "once_cell", + "serde", + "sled", + "tempfile", + "tracing", +] + +[[package]] +name = "e3-events" +version = "0.1.7" +dependencies = [ + "actix", + "alloy", + "alloy-primitives", + "alloy-sol-types", + "anyhow", + "bincode", + "bloom", + "bs58", + "chrono", + "derivative", + "e3-crypto", + "e3-trbfv", + "e3-utils", + "futures-util", + "hex", + "once_cell", + "rand 0.8.5", + "serde", + "sha2", + "strum", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "e3-evm" +version = "0.1.7" +dependencies = [ + "actix", + "alloy", + "alloy-primitives", + "anyhow", + "async-trait", + "base64 0.22.1", + "e3-config", + "e3-crypto", + "e3-data", + "e3-events", + "e3-sortition", + "e3-utils", + "futures-util", + "num-bigint", + "serde", + "tokio", + "tracing", + "url", + "zeroize", +] + [[package]] name = "e3-evm-helpers" version = "0.1.7" @@ -2420,6 +2755,22 @@ dependencies = [ "tokio", ] +[[package]] +name = "e3-request" +version = "0.1.7" +dependencies = [ + "actix", + "anyhow", + "async-trait", + "bincode", + "e3-config", + "e3-data", + "e3-events", + "e3-utils", + "serde", + "tracing", +] + [[package]] name = "e3-sdk" version = "0.1.7" @@ -2429,6 +2780,27 @@ dependencies = [ "e3-indexer", ] +[[package]] +name = "e3-sortition" +version = "0.1.7" +dependencies = [ + "actix", + "alloy", + "anyhow", + "async-trait", + "e3-config", + "e3-data", + "e3-events", + "e3-request", + "e3-utils", + "num", + "num-bigint", + "rand 0.8.5", + "serde", + "tokio", + "tracing", +] + [[package]] name = "e3-support-scripts-dev" version = "0.1.0" @@ -2440,6 +2812,29 @@ dependencies = [ "tokio", ] +[[package]] +name = "e3-trbfv" +version = "0.1.7" +dependencies = [ + "anyhow", + "bincode", + "derivative", + "e3-bfv-helpers", + "e3-crypto", + "e3-utils", + "fhe", + "fhe-math", + "fhe-traits", + "ndarray", + "num-bigint", + "petname", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "tracing", + "zeroize", +] + [[package]] name = "e3-user-program" version = "0.1.0" @@ -2450,6 +2845,21 @@ dependencies = [ "fhe-traits", ] +[[package]] +name = "e3-utils" +version = "0.1.7" +dependencies = [ + "actix", + "alloy", + "anyhow", + "derivative", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "tokio", + "tracing", +] + [[package]] name = "ecdsa" version = "0.16.9" @@ -2577,7 +2987,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2714,6 +3124,21 @@ dependencies = [ "rayon", ] +[[package]] +name = "figment" +version = "0.10.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" +dependencies = [ + "atomic", + "parking_lot 0.12.5", + "serde", + "serde_yaml", + "tempfile", + "uncased", + "version_check", +] + [[package]] name = "find-msvc-tools" version = "0.1.5" @@ -2957,6 +3382,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + [[package]] name = "gimli" version = "0.32.3" @@ -3417,6 +3852,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + [[package]] name = "instant" version = "0.1.13" @@ -3640,6 +4084,16 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +[[package]] +name = "libredox" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +dependencies = [ + "bitflags 2.10.0", + "libc", +] + [[package]] name = "light-poseidon" version = "0.1.0" @@ -3739,6 +4193,15 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + [[package]] name = "matrixmultiply" version = "0.3.10" @@ -3755,6 +4218,15 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + [[package]] name = "mime" version = "0.3.17" @@ -3823,6 +4295,7 @@ dependencies = [ "num-integer", "num-traits", "rawpointer", + "serde", ] [[package]] @@ -3835,6 +4308,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "num" version = "0.4.3" @@ -3999,6 +4481,12 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + [[package]] name = "openssl" version = "0.10.75" @@ -4043,6 +4531,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "ordered-multimap" version = "0.6.0" @@ -4053,6 +4547,16 @@ dependencies = [ "hashbrown 0.13.2", ] +[[package]] +name = "page_size" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebde548fbbf1ea81a99b128872779c437752fb99f217c45245e1a61dcd9edcd" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "parity-scale-codec" version = "3.7.5" @@ -4129,12 +4633,29 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "path-clean" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" + [[package]] name = "pathdiff" version = "0.2.3" @@ -4200,6 +4721,20 @@ dependencies = [ "indexmap 2.12.1", ] +[[package]] +name = "petname" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd31dcfdbbd7431a807ef4df6edd6473228e94d5c805e8cf671227a21bad068" +dependencies = [ + "anyhow", + "clap", + "itertools 0.14.0", + "proc-macro2 1.0.103", + "quote 1.0.42", + "rand 0.8.5", +] + [[package]] name = "pharos" version = "0.5.3" @@ -4258,6 +4793,18 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if 1.0.4", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.12.0" @@ -4385,7 +4932,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ "bit-set", - "bit-vec", + "bit-vec 0.8.0", "bitflags 2.10.0", "num-traits", "rand 0.9.2", @@ -4672,6 +5219,28 @@ dependencies = [ "bitflags 2.10.0", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.17", +] + [[package]] name = "ref-cast" version = "1.0.25" @@ -4907,7 +5476,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -5210,6 +5779,19 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.12.1", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "serdect" version = "0.2.0" @@ -5262,12 +5844,30 @@ dependencies = [ "cfg-if 1.0.4", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shell-words" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" +[[package]] +name = "shellexpand" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" +dependencies = [ + "dirs 6.0.0", +] + [[package]] name = "shlex" version = "1.3.0" @@ -5507,15 +6107,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.24.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5879,6 +6479,57 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-test" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" +dependencies = [ + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" +dependencies = [ + "quote 1.0.42", + "syn 2.0.111", ] [[package]] @@ -5936,6 +6587,15 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +[[package]] +name = "uncased" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-ident" version = "1.0.22" @@ -5966,6 +6626,22 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + [[package]] name = "untrusted" version = "0.9.0" @@ -5974,14 +6650,13 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.7" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", "percent-encoding", - "serde", ] [[package]] @@ -6305,6 +6980,15 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -6341,6 +7025,21 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -6374,6 +7073,12 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -6386,6 +7091,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -6398,6 +7109,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -6422,6 +7139,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -6434,6 +7157,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -6446,6 +7175,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -6458,6 +7193,12 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -6594,9 +7335,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.2" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] diff --git a/examples/CRISP/Cargo.toml b/examples/CRISP/Cargo.toml index b75fa344e6..094f73b8da 100644 --- a/examples/CRISP/Cargo.toml +++ b/examples/CRISP/Cargo.toml @@ -39,6 +39,7 @@ e3-compute-provider = { path = "../../crates/compute-provider" } e3-program-server = { path = "../../crates/program-server" } e3-bfv-helpers = { path = "../../crates/bfv-helpers" } e3-sdk = { path = "../../crates/sdk", default-features = false } +e3-evm = { path = "../../crates/evm" } eyre = "=0.6.12" env_logger = "=0.11.8" hex = { version = "=0.4.3" } diff --git a/examples/CRISP/server/Cargo.toml b/examples/CRISP/server/Cargo.toml index 7a06c4dfb3..10569f0eb2 100644 --- a/examples/CRISP/server/Cargo.toml +++ b/examples/CRISP/server/Cargo.toml @@ -45,6 +45,7 @@ lean-imt = "=0.1.2" e3-compute-provider.workspace = true e3-sdk = { workspace = true, default-features = false, features=["full"] } evm-helpers = { path = "../crates/evm_helpers" } +e3-evm.workspace = true crisp-constants.workspace = true crisp-utils.workspace = true diff --git a/examples/CRISP/server/src/server/indexer.rs b/examples/CRISP/server/src/server/indexer.rs index 40dfbf13ae..66b4d711a6 100644 --- a/examples/CRISP/server/src/server/indexer.rs +++ b/examples/CRISP/server/src/server/indexer.rs @@ -28,6 +28,7 @@ use e3_sdk::{ }, indexer::{DataStore, EnclaveIndexer, SharedStore}, }; +use e3_evm::send_tx_with_retry; use evm_helpers::{CRISPContractFactory, InputPublished}; use eyre::Context; use log::info; @@ -375,7 +376,18 @@ async fn handle_committee_time_expired( ctx: Arc>, ) -> eyre::Result<()> { // If not activated activate - let tx = ctx.contract().activate(event.e3Id).await?; + let tx = send_tx_with_retry("activate", &["0x45ccf3c6"], || { + let value = ctx.clone(); + async move { + info!("[e3_id={}] Calling Enclave.Activate", event.e3Id); + let receipt = value.contract().activate(event.e3Id).await + .map_err(|e| anyhow::anyhow!("{:?}", e))?; + anyhow::Ok(receipt) + } + }) + .await + .map_err(|e| eyre::eyre!("{:?}", e))?; + info!( "[e3_id={}] E3 activated with tx: {:?}", event.e3Id, tx.transaction_hash From e274e99376990d11401228bafd93ea2294bbc5ce Mon Sep 17 00:00:00 2001 From: ctrlc03 <93448202+ctrlc03@users.noreply.github.com> Date: Fri, 16 Jan 2026 15:55:31 +0000 Subject: [PATCH 2/6] chore: format --- crates/evm/src/lib.rs | 2 +- examples/CRISP/server/src/server/indexer.rs | 13 ++++++++----- examples/CRISP/server/src/server/repo.rs | 15 +++++++++------ .../CRISP/server/src/server/routes/rounds.rs | 8 ++++++-- examples/CRISP/server/src/server/routes/state.rs | 16 +++++++++++----- .../server/src/server/token_holders/etherscan.rs | 16 ++++++++-------- 6 files changed, 43 insertions(+), 27 deletions(-) diff --git a/crates/evm/src/lib.rs b/crates/evm/src/lib.rs index 18640261c8..f864b89f8c 100644 --- a/crates/evm/src/lib.rs +++ b/crates/evm/src/lib.rs @@ -22,6 +22,6 @@ pub use enclave_sol::EnclaveSol; pub use enclave_sol_reader::EnclaveSolReader; pub use enclave_sol_writer::EnclaveSolWriter; pub use event_reader::{EnclaveEvmEvent, EvmEventReader, EvmEventReaderState, ExtractorFn}; -pub use historical_event_coordinator::{CoordinatorStart, HistoricalEventCoordinator}; pub use helpers::send_tx_with_retry; +pub use historical_event_coordinator::{CoordinatorStart, HistoricalEventCoordinator}; pub use repo::*; diff --git a/examples/CRISP/server/src/server/indexer.rs b/examples/CRISP/server/src/server/indexer.rs index 66b4d711a6..d5b5a08ed8 100644 --- a/examples/CRISP/server/src/server/indexer.rs +++ b/examples/CRISP/server/src/server/indexer.rs @@ -16,6 +16,7 @@ use alloy::providers::{Provider, ProviderBuilder}; use alloy::sol_types::{sol_data, SolType}; use alloy_primitives::{Address, U256}; use crisp_utils::decode_tally; +use e3_evm::send_tx_with_retry; use e3_sdk::indexer::IndexerContext; use e3_sdk::{ evm_helpers::{ @@ -28,7 +29,6 @@ use e3_sdk::{ }, indexer::{DataStore, EnclaveIndexer, SharedStore}, }; -use e3_evm::send_tx_with_retry; use evm_helpers::{CRISPContractFactory, InputPublished}; use eyre::Context; use log::info; @@ -376,18 +376,21 @@ async fn handle_committee_time_expired( ctx: Arc>, ) -> eyre::Result<()> { // If not activated activate - let tx = send_tx_with_retry("activate", &["0x45ccf3c6"], || { + let tx = send_tx_with_retry("activate", &["0x45ccf3c6"], || { let value = ctx.clone(); async move { info!("[e3_id={}] Calling Enclave.Activate", event.e3Id); - let receipt = value.contract().activate(event.e3Id).await + let receipt = value + .contract() + .activate(event.e3Id) + .await .map_err(|e| anyhow::anyhow!("{:?}", e))?; - anyhow::Ok(receipt) + anyhow::Ok(receipt) } }) .await .map_err(|e| eyre::eyre!("{:?}", e))?; - + info!( "[e3_id={}] E3 activated with tx: {:?}", event.e3Id, tx.transaction_hash diff --git a/examples/CRISP/server/src/server/repo.rs b/examples/CRISP/server/src/server/repo.rs index de9b79d205..addc2d509a 100644 --- a/examples/CRISP/server/src/server/repo.rs +++ b/examples/CRISP/server/src/server/repo.rs @@ -45,20 +45,23 @@ impl CurrentRoundRepository { } /// Get the current (most recent) round for a specific requester - /// + /// /// # Arguments /// * `requester` - The requester address to find the current round for - /// + /// /// # Returns /// * The CurrentRound object for the most recent round by this requester, or None if not found - pub async fn get_current_round_for_requester(&self, requester: String) -> Result> { + pub async fn get_current_round_for_requester( + &self, + requester: String, + ) -> Result> { // Get the current round count to iterate through all rounds let round_count = self.get_current_round_id().await?; - + // Iterate backwards from the most recent round to find the latest one for this requester for round_id in (0..=round_count).rev() { let crisp_repo = CrispE3Repository::new(self.store.clone(), round_id); - + match crisp_repo.get_e3_state_lite().await { Ok(state) => { if state.requester == requester { @@ -180,7 +183,7 @@ impl CrispE3Repository { token_address, balance_threshold, ciphertext_inputs: vec![], - requester + requester, }) .await } diff --git a/examples/CRISP/server/src/server/routes/rounds.rs b/examples/CRISP/server/src/server/routes/rounds.rs index 976d27d079..1431efba5a 100644 --- a/examples/CRISP/server/src/server/routes/rounds.rs +++ b/examples/CRISP/server/src/server/routes/rounds.rs @@ -7,7 +7,8 @@ use crate::config::CONFIG; use crate::server::app_data::AppData; use crate::server::models::{ - CTRequest, ComputeProviderParams, JsonResponse, PKRequest, RoundRequest, RoundRequestWithRequester + CTRequest, ComputeProviderParams, JsonResponse, PKRequest, RoundRequest, + RoundRequestWithRequester, }; use actix_web::{web, HttpResponse, Responder}; @@ -84,7 +85,10 @@ async fn get_current_round( // .get(0) returns Option<&String>, so we need to handle that let result = if let Some(requester) = incoming.requesters.get(0) { // We have a requester, filter by it - store.current_round().get_current_round_for_requester(requester.clone()).await + store + .current_round() + .get_current_round_for_requester(requester.clone()) + .await } else { // No requester provided (empty array) store.current_round().get_current_round().await diff --git a/examples/CRISP/server/src/server/routes/state.rs b/examples/CRISP/server/src/server/routes/state.rs index 384bfd9209..3c91b6aebb 100644 --- a/examples/CRISP/server/src/server/routes/state.rs +++ b/examples/CRISP/server/src/server/routes/state.rs @@ -7,12 +7,15 @@ use std::str::FromStr; use crate::server::{ - CONFIG, app_data::AppData, models::{ - GetRoundRequest, IsSlotEmptyRequest, IsSlotEmptyResponse, PreviousCiphertextRequest, PreviousCiphertextResponse, RoundRequestWithRequester, WebhookPayload - } + app_data::AppData, + models::{ + GetRoundRequest, IsSlotEmptyRequest, IsSlotEmptyResponse, PreviousCiphertextRequest, + PreviousCiphertextResponse, RoundRequestWithRequester, WebhookPayload, + }, + CONFIG, }; use actix_web::{web, HttpResponse, Responder}; -use alloy::{primitives::{Address, Bytes, U256}}; +use alloy::primitives::{Address, Bytes, U256}; use e3_sdk::evm_helpers::contracts::{ EnclaveContract, EnclaveContractFactory, EnclaveWrite, ReadWrite, }; @@ -219,7 +222,10 @@ async fn get_round_result( /// # Returns /// /// * A JSON response containing the results for all rounds -async fn get_all_round_results(data: web::Json::, store: web::Data) -> impl Responder { +async fn get_all_round_results( + data: web::Json, + store: web::Data, +) -> impl Responder { let incoming = data.into_inner(); let round_count = match store.current_round().get_current_round_id().await { diff --git a/examples/CRISP/server/src/server/token_holders/etherscan.rs b/examples/CRISP/server/src/server/token_holders/etherscan.rs index de5e740305..6bdb074bb1 100644 --- a/examples/CRISP/server/src/server/token_holders/etherscan.rs +++ b/examples/CRISP/server/src/server/token_holders/etherscan.rs @@ -4,18 +4,15 @@ // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. +use crate::server::{models::TokenHolder, CONFIG}; use alloy::primitives::{Address, U256}; use alloy::providers::ProviderBuilder; use alloy::sol; use eyre::{eyre, Context, Result}; // Add this import use reqwest; -use serde::{Deserialize}; +use serde::Deserialize; use std::collections::{HashMap, HashSet}; use tokio::time::{sleep, Duration}; -use crate::server::{ - CONFIG, - models::TokenHolder -}; // Define the Votes contract interface for getPastVotes sol! { @@ -449,8 +446,11 @@ impl EtherscanClient { let provider = ProviderBuilder::new().connect_http(url); let token = ERC20Votes::new(token_address, provider); - - match token.getPastVotes(voter_address, U256::from(block_number - 1)).call().await { + match token + .getPastVotes(voter_address, U256::from(block_number - 1)) + .call() + .await + { Ok(votes) => Ok(votes), Err(_) => { // Fallback to balanceOf if getPastVotes fails @@ -460,7 +460,7 @@ impl EtherscanClient { .await .context("Failed to call balanceOf")?; Ok(balance) - }, + } } } From aafa5181bcbe70a1acc74dded6dfd79d605a4456 Mon Sep 17 00:00:00 2001 From: ctrlc03 <93448202+ctrlc03@users.noreply.github.com> Date: Fri, 16 Jan 2026 16:45:31 +0000 Subject: [PATCH 3/6] chore: update result and move to helpers --- Cargo.lock | 2 + crates/evm-helpers/Cargo.toml | 2 + crates/evm-helpers/src/retry.rs | 57 ++++++++++++++++++--- examples/CRISP/Cargo.toml | 1 - examples/CRISP/server/Cargo.toml | 1 - examples/CRISP/server/src/server/indexer.rs | 2 +- 6 files changed, 54 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9ac07831d7..20f23b1ab3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3019,7 +3019,9 @@ name = "e3-evm-helpers" version = "0.1.7" dependencies = [ "alloy", + "anyhow", "async-trait", + "e3-utils", "eyre", "futures", "futures-util", diff --git a/crates/evm-helpers/Cargo.toml b/crates/evm-helpers/Cargo.toml index 8470dcf60c..4af5491548 100644 --- a/crates/evm-helpers/Cargo.toml +++ b/crates/evm-helpers/Cargo.toml @@ -8,6 +8,7 @@ repository = "https://github.com/gnosisguild/enclave/crates/evm-helpers" [dependencies] alloy.workspace = true +anyhow.workspace = true async-trait.workspace = true eyre.workspace = true futures.workspace = true @@ -15,3 +16,4 @@ futures-util.workspace = true once_cell.workspace = true tokio.workspace = true tracing.workspace = true +e3-utils.workspace = true diff --git a/crates/evm-helpers/src/retry.rs b/crates/evm-helpers/src/retry.rs index c5a1d9157a..90bdc79b0a 100644 --- a/crates/evm-helpers/src/retry.rs +++ b/crates/evm-helpers/src/retry.rs @@ -4,13 +4,14 @@ // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. -use eyre::Result; +use alloy::rpc::types::TransactionReceipt; use std::future::Future; use tokio::time::{sleep, Duration}; use tracing::info; +use e3_utils::{retry_with_backoff, RetryError}; -const READ_RETRY_MAX_ATTEMPTS: u32 = 3; -const READ_RETRY_INITIAL_DELAY_MS: u64 = 2000; +const RETRY_MAX_ATTEMPTS: u32 = 3; +const RETRY_INITIAL_DELAY_MS: u64 = 2000; fn should_retry_error(error: &str, retry_on_errors: &[&str]) -> bool { if retry_on_errors.is_empty() { @@ -23,15 +24,15 @@ pub async fn call_with_retry( operation_name: &str, retry_on_errors: &[&str], read_fn: F, -) -> Result +) -> eyre::Result where F: Fn() -> Fut, - Fut: Future>, + Fut: Future>, { let op_name = operation_name.to_string(); let retry_codes: Vec = retry_on_errors.iter().map(|s| s.to_string()).collect(); let mut attempts = 0; - let mut delay = READ_RETRY_INITIAL_DELAY_MS; + let mut delay = RETRY_INITIAL_DELAY_MS; loop { attempts += 1; @@ -43,11 +44,11 @@ where let error_str = format!("{}", e); let retry_refs: Vec<&str> = retry_codes.iter().map(|s| s.as_str()).collect(); - if should_retry_error(&error_str, &retry_refs) && attempts < READ_RETRY_MAX_ATTEMPTS + if should_retry_error(&error_str, &retry_refs) && attempts < RETRY_MAX_ATTEMPTS { info!( "{}: error (attempt {}/{}), will retry after {}ms: {}", - op_name, attempts, READ_RETRY_MAX_ATTEMPTS, delay, e + op_name, attempts, RETRY_MAX_ATTEMPTS, delay, e ); sleep(Duration::from_millis(delay)).await; delay *= 2; @@ -58,3 +59,43 @@ where } } } + +pub async fn send_tx_with_retry( + operation_name: &str, + retry_on_errors: &[&str], + tx_fn: F, +) -> anyhow::Result +where + F: Fn() -> Fut, + Fut: Future>, +{ + let op_name = operation_name.to_string(); + let retry_codes: Vec = retry_on_errors.iter().map(|s| s.to_string()).collect(); + + retry_with_backoff( + || { + let op_name = op_name.clone(); + let retry_codes = retry_codes.clone(); + let fut = tx_fn(); + async move { + match fut.await { + Ok(receipt) => Ok(receipt), + Err(e) => { + let error_str = format!("{}", e); + let retry_refs: Vec<&str> = + retry_codes.iter().map(|s| s.as_str()).collect(); + if should_retry_error(&error_str, &retry_refs) { + info!("{}: error, will retry: {}", op_name, e); + Err(RetryError::Retry(e)) + } else { + Err(RetryError::Failure(e)) + } + } + } + } + }, + RETRY_MAX_ATTEMPTS, + RETRY_INITIAL_DELAY_MS, + ) + .await +} \ No newline at end of file diff --git a/examples/CRISP/Cargo.toml b/examples/CRISP/Cargo.toml index 094f73b8da..b75fa344e6 100644 --- a/examples/CRISP/Cargo.toml +++ b/examples/CRISP/Cargo.toml @@ -39,7 +39,6 @@ e3-compute-provider = { path = "../../crates/compute-provider" } e3-program-server = { path = "../../crates/program-server" } e3-bfv-helpers = { path = "../../crates/bfv-helpers" } e3-sdk = { path = "../../crates/sdk", default-features = false } -e3-evm = { path = "../../crates/evm" } eyre = "=0.6.12" env_logger = "=0.11.8" hex = { version = "=0.4.3" } diff --git a/examples/CRISP/server/Cargo.toml b/examples/CRISP/server/Cargo.toml index 10569f0eb2..7a06c4dfb3 100644 --- a/examples/CRISP/server/Cargo.toml +++ b/examples/CRISP/server/Cargo.toml @@ -45,7 +45,6 @@ lean-imt = "=0.1.2" e3-compute-provider.workspace = true e3-sdk = { workspace = true, default-features = false, features=["full"] } evm-helpers = { path = "../crates/evm_helpers" } -e3-evm.workspace = true crisp-constants.workspace = true crisp-utils.workspace = true diff --git a/examples/CRISP/server/src/server/indexer.rs b/examples/CRISP/server/src/server/indexer.rs index d5b5a08ed8..2e1954f7a1 100644 --- a/examples/CRISP/server/src/server/indexer.rs +++ b/examples/CRISP/server/src/server/indexer.rs @@ -25,7 +25,7 @@ use e3_sdk::{ CiphertextOutputPublished, CommitteePublished, E3Activated, E3Requested, PlaintextOutputPublished, }, - retry::call_with_retry, + retry::{call_with_retry, send_tx_with_retry}, }, indexer::{DataStore, EnclaveIndexer, SharedStore}, }; From 1e7dd66c9d363da617311dc6bbc14068f6d7ce2c Mon Sep 17 00:00:00 2001 From: ctrlc03 <93448202+ctrlc03@users.noreply.github.com> Date: Fri, 16 Jan 2026 16:46:23 +0000 Subject: [PATCH 4/6] chore: cargo fmt --- crates/evm-helpers/src/retry.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/crates/evm-helpers/src/retry.rs b/crates/evm-helpers/src/retry.rs index 90bdc79b0a..e0190f8983 100644 --- a/crates/evm-helpers/src/retry.rs +++ b/crates/evm-helpers/src/retry.rs @@ -5,10 +5,10 @@ // or FITNESS FOR A PARTICULAR PURPOSE. use alloy::rpc::types::TransactionReceipt; +use e3_utils::{retry_with_backoff, RetryError}; use std::future::Future; use tokio::time::{sleep, Duration}; use tracing::info; -use e3_utils::{retry_with_backoff, RetryError}; const RETRY_MAX_ATTEMPTS: u32 = 3; const RETRY_INITIAL_DELAY_MS: u64 = 2000; @@ -44,8 +44,7 @@ where let error_str = format!("{}", e); let retry_refs: Vec<&str> = retry_codes.iter().map(|s| s.as_str()).collect(); - if should_retry_error(&error_str, &retry_refs) && attempts < RETRY_MAX_ATTEMPTS - { + if should_retry_error(&error_str, &retry_refs) && attempts < RETRY_MAX_ATTEMPTS { info!( "{}: error (attempt {}/{}), will retry after {}ms: {}", op_name, attempts, RETRY_MAX_ATTEMPTS, delay, e @@ -98,4 +97,4 @@ where RETRY_INITIAL_DELAY_MS, ) .await -} \ No newline at end of file +} From 3917759429bbb98e89608898844a59ad0c8f684b Mon Sep 17 00:00:00 2001 From: ctrlc03 <93448202+ctrlc03@users.noreply.github.com> Date: Fri, 16 Jan 2026 16:53:38 +0000 Subject: [PATCH 5/6] chore: update lock --- examples/CRISP/Cargo.lock | 686 +------------------- examples/CRISP/server/src/server/indexer.rs | 1 - 2 files changed, 3 insertions(+), 684 deletions(-) diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index 980b7bd6a2..4eaf560a61 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -251,41 +251,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" -[[package]] -name = "aead" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "crypto-common", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if 1.0.4", - "cipher", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - [[package]] name = "ahash" version = "0.8.12" @@ -1182,18 +1147,6 @@ version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" -[[package]] -name = "argon2" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" -dependencies = [ - "base64ct", - "blake2", - "cpufeatures", - "password-hash", -] - [[package]] name = "ark-bn254" version = "0.4.0" @@ -1554,15 +1507,6 @@ dependencies = [ "rustc_version 0.4.1", ] -[[package]] -name = "atomic" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" -dependencies = [ - "bytemuck", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -1670,15 +1614,9 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec 0.8.0", + "bit-vec", ] -[[package]] -name = "bit-vec" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f" - [[package]] name = "bit-vec" version = "0.8.0" @@ -1728,15 +1666,6 @@ dependencies = [ "wyz", ] -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "blake3" version = "1.8.2" @@ -1759,15 +1688,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "bloom" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00ac8e5056d6d65376a3c1aa5c7c34850d6949ace17f0266953a254eb3d6fe8" -dependencies = [ - "bit-vec 0.4.4", -] - [[package]] name = "blst" version = "0.3.16" @@ -1801,15 +1721,6 @@ dependencies = [ "alloc-stdlib", ] -[[package]] -name = "bs58" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" -dependencies = [ - "tinyvec", -] - [[package]] name = "bumpalo" version = "3.19.1" @@ -1822,12 +1733,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" -[[package]] -name = "bytemuck" -version = "1.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" - [[package]] name = "byteorder" version = "1.5.0" @@ -1912,16 +1817,6 @@ dependencies = [ "windows-link 0.1.3", ] -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "clap" version = "4.5.41" @@ -1968,20 +1863,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" -[[package]] -name = "commitlog" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf2bc2a9c8e9369d54360cc20cd9f0d5f03e427bc3fe8c9d7bc6ba1512addff" -dependencies = [ - "byteorder", - "bytes", - "crc32c", - "log", - "memmap2", - "page_size", -] - [[package]] name = "config" version = "0.14.0" @@ -2158,15 +2039,6 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" -[[package]] -name = "crc32c" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a47af21622d091a8f0fb295b88bc886ac74efcc613efc19f5d0b21de5c89e47" -dependencies = [ - "rustc_version 0.4.1", -] - [[package]] name = "crc32fast" version = "1.5.0" @@ -2200,7 +2072,6 @@ dependencies = [ "dialoguer", "dotenvy", "e3-compute-provider", - "e3-evm", "e3-sdk", "env_logger", "evm-helpers", @@ -2312,19 +2183,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core 0.6.4", "typenum", ] -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - [[package]] name = "darling" version = "0.21.3" @@ -2470,48 +2331,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys 0.4.1", -] - -[[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys 0.5.0", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users 0.4.6", - "windows-sys 0.48.0", -] - -[[package]] -name = "dirs-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" -dependencies = [ - "libc", - "option-ext", - "redox_users 0.5.2", - "windows-sys 0.61.2", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -2603,120 +2422,13 @@ dependencies = [ ] [[package]] -name = "e3-config" -version = "0.1.7" -dependencies = [ - "alloy-primitives", - "anyhow", - "dirs 5.0.1", - "e3-events", - "figment", - "path-clean", - "petname", - "rand 0.8.5", - "serde", - "serde_yaml", - "shellexpand", - "tracing", - "url", -] - -[[package]] -name = "e3-crypto" -version = "0.1.7" -dependencies = [ - "aes-gcm", - "anyhow", - "argon2", - "async-trait", - "bincode", - "e3-utils", - "rand 0.8.5", - "serde", - "tokio", - "tracing", - "tracing-test", - "zeroize", -] - -[[package]] -name = "e3-data" -version = "0.1.7" -dependencies = [ - "actix", - "anyhow", - "async-trait", - "bincode", - "commitlog", - "e3-events", - "e3-utils", - "once_cell", - "serde", - "sled", - "tempfile", - "tracing", -] - -[[package]] -name = "e3-events" -version = "0.1.7" -dependencies = [ - "actix", - "alloy", - "alloy-primitives", - "alloy-sol-types", - "anyhow", - "bincode", - "bloom", - "bs58", - "chrono", - "derivative", - "e3-crypto", - "e3-trbfv", - "e3-utils", - "futures-util", - "hex", - "once_cell", - "rand 0.8.5", - "serde", - "sha2", - "strum", - "thiserror 1.0.69", - "tokio", - "tracing", -] - -[[package]] -name = "e3-evm" +name = "e3-evm-helpers" version = "0.1.7" dependencies = [ - "actix", "alloy", - "alloy-primitives", "anyhow", "async-trait", - "base64 0.22.1", - "e3-config", - "e3-crypto", - "e3-data", - "e3-events", - "e3-sortition", "e3-utils", - "futures-util", - "num-bigint", - "serde", - "tokio", - "tracing", - "url", - "zeroize", -] - -[[package]] -name = "e3-evm-helpers" -version = "0.1.7" -dependencies = [ - "alloy", - "async-trait", "eyre", "futures 0.3.31", "futures-util", @@ -2755,22 +2467,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "e3-request" -version = "0.1.7" -dependencies = [ - "actix", - "anyhow", - "async-trait", - "bincode", - "e3-config", - "e3-data", - "e3-events", - "e3-utils", - "serde", - "tracing", -] - [[package]] name = "e3-sdk" version = "0.1.7" @@ -2780,27 +2476,6 @@ dependencies = [ "e3-indexer", ] -[[package]] -name = "e3-sortition" -version = "0.1.7" -dependencies = [ - "actix", - "alloy", - "anyhow", - "async-trait", - "e3-config", - "e3-data", - "e3-events", - "e3-request", - "e3-utils", - "num", - "num-bigint", - "rand 0.8.5", - "serde", - "tokio", - "tracing", -] - [[package]] name = "e3-support-scripts-dev" version = "0.1.0" @@ -2812,29 +2487,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "e3-trbfv" -version = "0.1.7" -dependencies = [ - "anyhow", - "bincode", - "derivative", - "e3-bfv-helpers", - "e3-crypto", - "e3-utils", - "fhe", - "fhe-math", - "fhe-traits", - "ndarray", - "num-bigint", - "petname", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "tracing", - "zeroize", -] - [[package]] name = "e3-user-program" version = "0.1.0" @@ -3124,21 +2776,6 @@ dependencies = [ "rayon", ] -[[package]] -name = "figment" -version = "0.10.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" -dependencies = [ - "atomic", - "parking_lot 0.12.5", - "serde", - "serde_yaml", - "tempfile", - "uncased", - "version_check", -] - [[package]] name = "find-msvc-tools" version = "0.1.5" @@ -3382,16 +3019,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug", - "polyval", -] - [[package]] name = "gimli" version = "0.32.3" @@ -3852,15 +3479,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "generic-array", -] - [[package]] name = "instant" version = "0.1.13" @@ -4084,16 +3702,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" -[[package]] -name = "libredox" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" -dependencies = [ - "bitflags 2.10.0", - "libc", -] - [[package]] name = "light-poseidon" version = "0.1.0" @@ -4193,15 +3801,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - [[package]] name = "matrixmultiply" version = "0.3.10" @@ -4218,15 +3817,6 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" -[[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - [[package]] name = "mime" version = "0.3.17" @@ -4295,7 +3885,6 @@ dependencies = [ "num-integer", "num-traits", "rawpointer", - "serde", ] [[package]] @@ -4308,15 +3897,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "num" version = "0.4.3" @@ -4481,12 +4061,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - [[package]] name = "openssl" version = "0.10.75" @@ -4531,12 +4105,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - [[package]] name = "ordered-multimap" version = "0.6.0" @@ -4547,16 +4115,6 @@ dependencies = [ "hashbrown 0.13.2", ] -[[package]] -name = "page_size" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebde548fbbf1ea81a99b128872779c437752fb99f217c45245e1a61dcd9edcd" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "parity-scale-codec" version = "3.7.5" @@ -4633,29 +4191,12 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "password-hash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "path-clean" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" - [[package]] name = "pathdiff" version = "0.2.3" @@ -4721,20 +4262,6 @@ dependencies = [ "indexmap 2.12.1", ] -[[package]] -name = "petname" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd31dcfdbbd7431a807ef4df6edd6473228e94d5c805e8cf671227a21bad068" -dependencies = [ - "anyhow", - "clap", - "itertools 0.14.0", - "proc-macro2 1.0.103", - "quote 1.0.42", - "rand 0.8.5", -] - [[package]] name = "pharos" version = "0.5.3" @@ -4793,18 +4320,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" -[[package]] -name = "polyval" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" -dependencies = [ - "cfg-if 1.0.4", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - [[package]] name = "portable-atomic" version = "1.12.0" @@ -4932,7 +4447,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ "bit-set", - "bit-vec 0.8.0", + "bit-vec", "bitflags 2.10.0", "num-traits", "rand 0.9.2", @@ -5219,28 +4734,6 @@ dependencies = [ "bitflags 2.10.0", ] -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 1.0.69", -] - -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.16", - "libredox", - "thiserror 2.0.17", -] - [[package]] name = "ref-cast" version = "1.0.25" @@ -5779,19 +5272,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap 2.12.1", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "serdect" version = "0.2.0" @@ -5844,30 +5324,12 @@ dependencies = [ "cfg-if 1.0.4", ] -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - [[package]] name = "shell-words" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" -[[package]] -name = "shellexpand" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" -dependencies = [ - "dirs 6.0.0", -] - [[package]] name = "shlex" version = "1.3.0" @@ -6479,57 +5941,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "tracing-test" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" -dependencies = [ - "tracing-core", - "tracing-subscriber", - "tracing-test-macro", -] - -[[package]] -name = "tracing-test-macro" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" -dependencies = [ - "quote 1.0.42", - "syn 2.0.111", ] [[package]] @@ -6587,15 +5998,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" -[[package]] -name = "uncased" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-ident" version = "1.0.22" @@ -6626,22 +6028,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle", -] - -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "untrusted" version = "0.9.0" @@ -6980,15 +6366,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -7025,21 +6402,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -7073,12 +6435,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -7091,12 +6447,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -7109,12 +6459,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -7139,12 +6483,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -7157,12 +6495,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -7175,12 +6507,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -7193,12 +6519,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" diff --git a/examples/CRISP/server/src/server/indexer.rs b/examples/CRISP/server/src/server/indexer.rs index 2e1954f7a1..ef80ca50a9 100644 --- a/examples/CRISP/server/src/server/indexer.rs +++ b/examples/CRISP/server/src/server/indexer.rs @@ -16,7 +16,6 @@ use alloy::providers::{Provider, ProviderBuilder}; use alloy::sol_types::{sol_data, SolType}; use alloy_primitives::{Address, U256}; use crisp_utils::decode_tally; -use e3_evm::send_tx_with_retry; use e3_sdk::indexer::IndexerContext; use e3_sdk::{ evm_helpers::{ From b882822fd5967e4c9327f3493881ed91e98a5c95 Mon Sep 17 00:00:00 2001 From: Hamza Khalid Date: Sat, 17 Jan 2026 17:56:39 +0500 Subject: [PATCH 6/6] chore: make retry fn generic over T --- crates/evm-helpers/src/retry.rs | 51 ++------------------- examples/CRISP/server/src/server/indexer.rs | 24 +++++++--- 2 files changed, 23 insertions(+), 52 deletions(-) diff --git a/crates/evm-helpers/src/retry.rs b/crates/evm-helpers/src/retry.rs index e0190f8983..f0e5c3e993 100644 --- a/crates/evm-helpers/src/retry.rs +++ b/crates/evm-helpers/src/retry.rs @@ -4,10 +4,8 @@ // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. -use alloy::rpc::types::TransactionReceipt; use e3_utils::{retry_with_backoff, RetryError}; use std::future::Future; -use tokio::time::{sleep, Duration}; use tracing::info; const RETRY_MAX_ATTEMPTS: u32 = 3; @@ -23,50 +21,11 @@ fn should_retry_error(error: &str, retry_on_errors: &[&str]) -> bool { pub async fn call_with_retry( operation_name: &str, retry_on_errors: &[&str], - read_fn: F, -) -> eyre::Result + operation_fn: F, +) -> anyhow::Result where F: Fn() -> Fut, - Fut: Future>, -{ - let op_name = operation_name.to_string(); - let retry_codes: Vec = retry_on_errors.iter().map(|s| s.to_string()).collect(); - let mut attempts = 0; - let mut delay = RETRY_INITIAL_DELAY_MS; - - loop { - attempts += 1; - let result = read_fn().await; - - match result { - Ok(value) => return Ok(value), - Err(e) => { - let error_str = format!("{}", e); - let retry_refs: Vec<&str> = retry_codes.iter().map(|s| s.as_str()).collect(); - - if should_retry_error(&error_str, &retry_refs) && attempts < RETRY_MAX_ATTEMPTS { - info!( - "{}: error (attempt {}/{}), will retry after {}ms: {}", - op_name, attempts, RETRY_MAX_ATTEMPTS, delay, e - ); - sleep(Duration::from_millis(delay)).await; - delay *= 2; - } else { - return Err(e); - } - } - } - } -} - -pub async fn send_tx_with_retry( - operation_name: &str, - retry_on_errors: &[&str], - tx_fn: F, -) -> anyhow::Result -where - F: Fn() -> Fut, - Fut: Future>, + Fut: Future>, { let op_name = operation_name.to_string(); let retry_codes: Vec = retry_on_errors.iter().map(|s| s.to_string()).collect(); @@ -75,10 +34,10 @@ where || { let op_name = op_name.clone(); let retry_codes = retry_codes.clone(); - let fut = tx_fn(); + let fut = operation_fn(); async move { match fut.await { - Ok(receipt) => Ok(receipt), + Ok(value) => Ok(value), Err(e) => { let error_str = format!("{}", e); let retry_refs: Vec<&str> = diff --git a/examples/CRISP/server/src/server/indexer.rs b/examples/CRISP/server/src/server/indexer.rs index ef80ca50a9..5bf84e706a 100644 --- a/examples/CRISP/server/src/server/indexer.rs +++ b/examples/CRISP/server/src/server/indexer.rs @@ -24,7 +24,7 @@ use e3_sdk::{ CiphertextOutputPublished, CommitteePublished, E3Activated, E3Requested, PlaintextOutputPublished, }, - retry::{call_with_retry, send_tx_with_retry}, + retry::call_with_retry, }, indexer::{DataStore, EnclaveIndexer, SharedStore}, }; @@ -56,9 +56,15 @@ pub async fn register_e3_requested( let e3 = call_with_retry("get_e3", &["0xcd6f4a4f"], || { let contract = contract.clone(); let event_e3_id = event.e3Id; - async move { contract.get_e3(event_e3_id).await } + async move { + contract + .get_e3(event_e3_id) + .await + .map_err(|e| anyhow::anyhow!("{}", e)) + } }) - .await?; + .await + .map_err(|e| eyre::eyre!("{}", e))?; // Convert custom params bytes back to token address and balance threshold. @@ -341,9 +347,15 @@ pub async fn register_committee_published( let e3 = call_with_retry("get_e3", &["0xcd6f4a4f"], || { let contract = contract.clone(); let event_e3_id = event.e3Id; - async move { contract.get_e3(event_e3_id).await } + async move { + contract + .get_e3(event_e3_id) + .await + .map_err(|e| anyhow::anyhow!("{}", e)) + } }) - .await?; + .await + .map_err(|e| eyre::eyre!("{}", e))?; if u64::try_from(e3.expiration)? > 0 { info!("[e3_id={}] E3 already activated", event.e3Id); return Ok(()); @@ -375,7 +387,7 @@ async fn handle_committee_time_expired( ctx: Arc>, ) -> eyre::Result<()> { // If not activated activate - let tx = send_tx_with_retry("activate", &["0x45ccf3c6"], || { + let tx = call_with_retry("activate", &["0x45ccf3c6"], || { let value = ctx.clone(); async move { info!("[e3_id={}] Calling Enclave.Activate", event.e3Id);