From 54bae409c04db1805448573b5c74e1d7afa3cafb Mon Sep 17 00:00:00 2001 From: Kanan <93033289+kriss39@users.noreply.github.com> Date: Sat, 12 Sep 2026 11:25:09 +0400 Subject: [PATCH 1/3] fix(evm): propagate assembler storage errors --- crates/evm/src/assembler.rs | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/crates/evm/src/assembler.rs b/crates/evm/src/assembler.rs index 702f2ac8..595ce26c 100644 --- a/crates/evm/src/assembler.rs +++ b/crates/evm/src/assembler.rs @@ -42,6 +42,13 @@ impl ArcBlockAssembler { } } +fn storage_read_result(result: Result) -> Result +where + E: core::error::Error + Send + Sync + 'static, +{ + result.map_err(BlockExecutionError::other) +} + impl BlockAssembler for ArcBlockAssembler where F: for<'a> BlockExecutorFactory< @@ -83,10 +90,11 @@ where // Read from state provider if the state is not changed. if value.is_none() { - value = input - .state_provider - .storage(SYSTEM_ACCOUNTING_ADDRESS, slot) - .unwrap_or(None) + value = storage_read_result( + input + .state_provider + .storage(SYSTEM_ACCOUNTING_ADDRESS, slot), + )?; } if let Some(value) = value { @@ -110,6 +118,19 @@ mod tests { use alloc::sync::Arc; use arc_execution_config::chainspec::LOCAL_DEV; + #[test] + fn storage_provider_error_is_propagated() { + let result: Result, std::io::Error> = + Err(std::io::Error::other("storage read failed")); + + let error = match storage_read_result(result) { + Ok(_) => panic!("storage error should be propagated"), + Err(error) => error, + }; + + assert!(error.to_string().contains("storage read failed")); + } + #[test] fn block_assembler_creation() { let chain_spec = LOCAL_DEV.clone(); From 3ee28115ac21e1f183cb55b3bde2d08b8989d861 Mon Sep 17 00:00:00 2001 From: Kanan <93033289+kriss39@users.noreply.github.com> Date: Sat, 12 Sep 2026 11:48:38 +0400 Subject: [PATCH 2/3] ci: run targeted arc-evm checks --- .github/workflows/arc-evm-targeted.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/arc-evm-targeted.yml diff --git a/.github/workflows/arc-evm-targeted.yml b/.github/workflows/arc-evm-targeted.yml new file mode 100644 index 00000000..451f4fbe --- /dev/null +++ b/.github/workflows/arc-evm-targeted.yml @@ -0,0 +1,26 @@ +name: Arc EVM Targeted Check + +on: + push: + branches: + - fix/assembler-storage-error + +jobs: + arc-evm: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 + + - name: Install system dependencies + run: sudo apt-get update && sudo apt-get install -y --no-install-recommends libclang-dev zlib1g-dev + + - name: Install Rust toolchain + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + components: clippy + + - name: Run regression test + run: cargo test --locked -p arc-evm storage_provider_error_is_propagated -- --nocapture + + - name: Run arc-evm clippy + run: cargo clippy --locked -p arc-evm --all-targets --all-features -- -D warnings From 6d5006cb3ccefa2d8cb1093c86db6fa9eb0d23c4 Mon Sep 17 00:00:00 2001 From: Kanan <93033289+kriss39@users.noreply.github.com> Date: Sat, 12 Sep 2026 12:22:49 +0400 Subject: [PATCH 3/3] chore: remove temporary targeted CI --- .github/workflows/arc-evm-targeted.yml | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 .github/workflows/arc-evm-targeted.yml diff --git a/.github/workflows/arc-evm-targeted.yml b/.github/workflows/arc-evm-targeted.yml deleted file mode 100644 index 451f4fbe..00000000 --- a/.github/workflows/arc-evm-targeted.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Arc EVM Targeted Check - -on: - push: - branches: - - fix/assembler-storage-error - -jobs: - arc-evm: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 - - - name: Install system dependencies - run: sudo apt-get update && sudo apt-get install -y --no-install-recommends libclang-dev zlib1g-dev - - - name: Install Rust toolchain - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - components: clippy - - - name: Run regression test - run: cargo test --locked -p arc-evm storage_provider_error_is_propagated -- --nocapture - - - name: Run arc-evm clippy - run: cargo clippy --locked -p arc-evm --all-targets --all-features -- -D warnings