From 8fd56be3b07d313275e372b1580fbf374c7add69 Mon Sep 17 00:00:00 2001 From: trantorian <114066155+Trantorian1@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:36:21 +0200 Subject: [PATCH 1/4] fix(mempool): validator errors were ignored in `mempool/rsc/lib.rs` --- crates/client/mempool/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/client/mempool/src/lib.rs b/crates/client/mempool/src/lib.rs index d3f264d84..2a1779bb7 100644 --- a/crates/client/mempool/src/lib.rs +++ b/crates/client/mempool/src/lib.rs @@ -128,7 +128,7 @@ impl Mempool { // Perform validations let exec_context = ExecutionContext::new_in_block(Arc::clone(&self.backend), &pending_block_info)?; let mut validator = exec_context.tx_validator(); - let _ = validator.perform_validations(clone_account_tx(&tx), deploy_account_tx_hash.is_some()); + validator.perform_validations(clone_account_tx(&tx), deploy_account_tx_hash.is_some())?; if !is_only_query(&tx) { // Finally, add it to the nonce chain for the account nonce From aab7af7347ded9b9ccf5390b744dd68e9f74a383 Mon Sep 17 00:00:00 2001 From: trantorian <114066155+Trantorian1@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:39:59 +0200 Subject: [PATCH 2/4] fix(README) --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ad215d40..f46416073 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Next release +- fix(mempool): validator errors were ignored in `mempool/rsc/lib.rs` - fix(fgw): sync from other nodes and block signature - fix: added more launcher capabilities - fix(cleanup): Updated EditorConfig to 4-space indents From 71fa565716d1c6ce2265d8c733ec8e399c55642b Mon Sep 17 00:00:00 2001 From: trantorian <114066155+Trantorian1@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:32:54 +0200 Subject: [PATCH 3/4] fix(js-test) --- .github/workflows/starknet-js-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/starknet-js-test.yml b/.github/workflows/starknet-js-test.yml index 1dd6ba4fc..e23ebe987 100644 --- a/.github/workflows/starknet-js-test.yml +++ b/.github/workflows/starknet-js-test.yml @@ -23,7 +23,7 @@ jobs: fail-on-cache-miss: true - name: Setup dev chain and run tests run: | - ./target/release/madara --name madara --base-path ../madara_db --telemetry-disabled --rpc-port 9944 --rpc-cors all --devnet --preset devnet & + ./target/release/madara --name madara --base-path ../madara_db --rpc-port 9944 --rpc-cors all --devnet --preset devnet & MADARA_PID=$! while ! echo exit | nc localhost 9944; do sleep 1; done cd tests/js_tests From 8a9d1f42881da9f67a3216411abbb73274734c61 Mon Sep 17 00:00:00 2001 From: trantorian <114066155+Trantorian1@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:38:57 +0200 Subject: [PATCH 4/4] test(mempool): added a few simple sanity tests to the mempool This ensure that transaction validation is always checked --- crates/client/mempool/src/lib.rs | 80 ++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/crates/client/mempool/src/lib.rs b/crates/client/mempool/src/lib.rs index 2a1779bb7..d04186b14 100644 --- a/crates/client/mempool/src/lib.rs +++ b/crates/client/mempool/src/lib.rs @@ -292,3 +292,83 @@ pub(crate) fn clone_account_tx(tx: &AccountTransaction) -> AccountTransaction { }), } } + +#[cfg(test)] +mod test { + use std::sync::Arc; + + use starknet_core::types::Felt; + + use crate::MockL1DataProvider; + + #[rstest::fixture] + fn backend() -> Arc { + mc_db::MadaraBackend::open_for_testing(Arc::new(mp_chain_config::ChainConfig::madara_test())) + } + + #[rstest::fixture] + fn l1_data_provider() -> Arc { + let mut mock = MockL1DataProvider::new(); + mock.expect_get_gas_prices().return_const(mp_block::header::GasPrices { + eth_l1_gas_price: 0, + strk_l1_gas_price: 0, + eth_l1_data_gas_price: 0, + strk_l1_data_gas_price: 0, + }); + mock.expect_get_gas_prices_last_update().return_const(std::time::SystemTime::now()); + mock.expect_get_da_mode().return_const(mp_block::header::L1DataAvailabilityMode::Calldata); + Arc::new(mock) + } + + #[rstest::fixture] + fn tx_account_v0_valid() -> blockifier::transaction::transaction_execution::Transaction { + blockifier::transaction::transaction_execution::Transaction::AccountTransaction( + blockifier::transaction::account_transaction::AccountTransaction::Invoke( + blockifier::transaction::transactions::InvokeTransaction { + tx: starknet_api::transaction::InvokeTransaction::V0( + starknet_api::transaction::InvokeTransactionV0::default(), + ), + tx_hash: starknet_api::transaction::TransactionHash(Felt::default()), + only_query: true, + }, + ), + ) + } + + #[rstest::fixture] + fn tx_account_v1_invalid() -> blockifier::transaction::transaction_execution::Transaction { + blockifier::transaction::transaction_execution::Transaction::AccountTransaction( + blockifier::transaction::account_transaction::AccountTransaction::Invoke( + blockifier::transaction::transactions::InvokeTransaction { + tx: starknet_api::transaction::InvokeTransaction::V1( + starknet_api::transaction::InvokeTransactionV1::default(), + ), + tx_hash: starknet_api::transaction::TransactionHash(Felt::default()), + only_query: true, + }, + ), + ) + } + + #[rstest::rstest] + fn mempool_accept_tx_pass( + backend: Arc, + l1_data_provider: Arc, + tx_account_v0_valid: blockifier::transaction::transaction_execution::Transaction, + ) { + let mempool = crate::Mempool::new(backend, l1_data_provider); + let result = mempool.accept_tx(tx_account_v0_valid, None); + assert_matches::assert_matches!(result, Ok(())); + } + + #[rstest::rstest] + fn mempool_accept_tx_fail_validate( + backend: Arc, + l1_data_provider: Arc, + tx_account_v1_invalid: blockifier::transaction::transaction_execution::Transaction, + ) { + let mempool = crate::Mempool::new(backend, l1_data_provider); + let result = mempool.accept_tx(tx_account_v1_invalid, None); + assert_matches::assert_matches!(result, Err(crate::Error::Validation(_))); + } +}