Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
14a56b2
ok
ameya-deshmukh Feb 26, 2026
1e53534
sanvil by default runs mercury; add comment on skipped ci tests pre-l…
ameya-deshmukh Feb 26, 2026
dc86234
ci: un-skip 5 passing sanvil integration tests
ameya-deshmukh Feb 27, 2026
cd581f0
docs: update test-audit.md to reflect 5 fixed tests
ameya-deshmukh Feb 27, 2026
302e535
fix(test): update account proof test for Seismic trie structure
ameya-deshmukh Feb 27, 2026
4e36676
fix(test): update otterscan trace test for Seismic trace shielding
ameya-deshmukh Feb 27, 2026
064a539
fix(test): regenerate state-dump-legacy-stress.json from current sanvil
ameya-deshmukh Feb 27, 2026
fe12183
fix(deps): bump seismic-revm-inspectors to fix state dump deserializa…
ameya-deshmukh Feb 27, 2026
3eaa116
docs: add note on CallTrace.tx_type serde default behavior
ameya-deshmukh Feb 27, 2026
2a181f6
docs: update test-audit.md to final state (10 fixed, 10 excluded)
ameya-deshmukh Mar 4, 2026
b8c41d3
test: add Seismic fork tests against testnet
ameya-deshmukh Mar 4, 2026
2837955
ci: remove redundant comments from seismic.yml
ameya-deshmukh Mar 4, 2026
436ed23
chore: delete test-audit.md, extract magic values to named constants
ameya-deshmukh Mar 4, 2026
4b68c5b
Merge branch 'seismic' into ameya/complete-ci-coverage
ameya-deshmukh Mar 4, 2026
e9a5e88
chore: fmt
ameya-deshmukh Mar 4, 2026
3620af1
Merge branch 'ameya/complete-ci-coverage' of github.com:SeismicSystem…
ameya-deshmukh Mar 4, 2026
f492766
ci: move test exclusions from CI filter to #[ignore] annotations
ameya-deshmukh Mar 4, 2026
3e650bd
fix: add #[ignore] to can_get_code_by_hash (requires mainnet fork RPC)
ameya-deshmukh Mar 4, 2026
2213df1
fix: ignore test_increase_time_by_zero (Mercury ms timestamp drift)
ameya-deshmukh Mar 4, 2026
688cb60
fix: revert timestamp /1000 workaround, now fixed upstream in #171
ameya-deshmukh Mar 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .github/workflows/seismic.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,12 @@ jobs:
run: cargo nextest run test_seismic_
- name: private storage tests
run: cargo nextest run private_storage_
# TODO: make these work & run
# - name: sforge tests
# run: cargo test --bin sforge
# - name: sanvil tests
# run: cargo test --bin sanvil
- name: anvil-core unit tests
run: cargo nextest run -p anvil-core
- name: foundry-config unit tests
run: cargo nextest run -p foundry-config
- name: sanvil integration tests
run: cargo nextest run -p anvil --test it

viem:
runs-on: large-github-runner
Expand Down
26 changes: 13 additions & 13 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ revm-primitives = { git = "https://github.com/SeismicSystems/seismic-revm.git",
op-revm = { git = "https://github.com/SeismicSystems/seismic-revm.git", rev = "ed81a1d6a89a8ffbf816d52715a3260b040c98bb" }
seismic-revm = { git = "https://github.com/SeismicSystems/seismic-revm.git", rev = "ed81a1d6a89a8ffbf816d52715a3260b040c98bb" }

revm-inspectors = { git = "https://github.com/SeismicSystems/seismic-revm-inspectors.git", rev = "9e26c0a55f522ad7d8cf4716d9df9d79b8116d52" }
revm-inspectors = { git = "https://github.com/SeismicSystems/seismic-revm-inspectors.git", rev = "e2a96b7d86ce7ee0d6a0f63c571e7b8f6d900e0e" }

# seismic-alloy
seismic-alloy-consensus = { git = "https://github.com/SeismicSystems/seismic-alloy.git", rev = "ebc3628c9e384b1db5a41044dd32756b3e79aacb" }
Expand Down
1 change: 1 addition & 0 deletions crates/anvil/core/src/eth/transaction/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1263,6 +1263,7 @@ pub struct TransactionInfo {
pub out: Option<Bytes>,
pub nonce: u64,
pub gas_used: u64,
#[serde(default)]
pub tx_type: Option<isize>,
}

Expand Down
5 changes: 5 additions & 0 deletions crates/anvil/src/eth/backend/mem/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,11 @@ impl MinedTransaction {
);

// TODO: for shielding the trace
// NOTE: CallTrace.tx_type defaults to 0 via #[serde(default)]
// for state dumps created before the field existed (pre Oct 2025).
// This is safe because the shielding check below only acts on
// TxSeismic::TX_TYPE (74), so old traces with tx_type=0 are
// correctly left unshielded.
/*
frame.tx_type = self.info.tx_type.unwrap_or_default();
if frame.tx_type ==
Expand Down
2 changes: 1 addition & 1 deletion crates/anvil/test-data/state-dump-legacy-stress.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions crates/anvil/tests/it/anvil.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ async fn test_can_handle_large_timestamp() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "Mercury is post-Cancun; blob fields always present"]
async fn test_shanghai_fields() {
let (api, _handle) =
spawn(NodeConfig::test().with_hardfork(Some(EthereumHardfork::Shanghai.into()))).await;
Expand Down Expand Up @@ -141,6 +142,7 @@ async fn test_can_use_default_genesis_block_number() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "CheatEcrecover not wired into SeismicPrecompiles; needs SharedBuffer handling in inspector"]
async fn test_anvil_recover_signature() {
let (api, handle) = spawn(NodeConfig::test()).await;
let provider = handle.http_provider();
Expand Down
10 changes: 9 additions & 1 deletion crates/anvil/tests/it/anvil_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ use std::{
use seismic_prelude::foundry::{EthereumWallet, tx_builder};

#[tokio::test(flavor = "multi_thread")]
#[ignore = "Mercury has EIP-1559; legacy gas price setting rejected"]
async fn can_set_gas_price() {
let (api, handle) =
spawn(NodeConfig::test().with_hardfork(Some(EthereumHardfork::Berlin.into()))).await;
Expand Down Expand Up @@ -203,6 +204,7 @@ async fn can_impersonate_contract() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "requires mainnet fork RPC"]
async fn can_impersonate_gnosis_safe() {
let (api, handle) = spawn(fork_config()).await;
let provider = handle.http_provider();
Expand Down Expand Up @@ -417,6 +419,7 @@ async fn test_timestamp_interval() {

// <https://github.com/foundry-rs/foundry/issues/2341>
#[tokio::test(flavor = "multi_thread")]
#[ignore = "requires mainnet fork RPC"]
async fn test_can_set_storage_bsc_fork() {
let (api, handle) =
spawn(NodeConfig::test().with_eth_rpc_url(Some("https://bsc-dataseed.binance.org/"))).await;
Expand Down Expand Up @@ -451,7 +454,7 @@ async fn can_get_node_info() {

let block_number = provider.get_block_number().await.unwrap();
let block = provider.get_block(BlockId::from(block_number)).await.unwrap().unwrap();
let hard_fork: &str = SpecId::PRAGUE.into();
let hard_fork: &str = SpecId::MERCURY.into();

let expected_node_info = NodeInfo {
current_block_number: 0_u64,
Expand Down Expand Up @@ -501,6 +504,7 @@ async fn can_get_metadata() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "requires mainnet fork RPC"]
async fn can_get_metadata_on_fork() {
let (api, handle) =
spawn(NodeConfig::test().with_eth_rpc_url(Some("https://bsc-dataseed.binance.org/"))).await;
Expand Down Expand Up @@ -591,6 +595,7 @@ async fn test_set_chain_id() {

// <https://github.com/foundry-rs/foundry/issues/6096>
#[tokio::test(flavor = "multi_thread")]
#[ignore = "requires mainnet fork RPC"]
async fn test_fork_revert_next_block_timestamp() {
let (api, _handle) = spawn(fork_config()).await;

Expand All @@ -612,6 +617,7 @@ async fn test_fork_revert_next_block_timestamp() {
// test that after a snapshot revert, the env block is reset
// to its correct value (block number, etc.)
#[tokio::test(flavor = "multi_thread")]
#[ignore = "requires mainnet fork RPC"]
async fn test_fork_revert_call_latest_block_timestamp() {
let (api, handle) = spawn(fork_config()).await;
let provider = handle.http_provider();
Expand Down Expand Up @@ -1060,6 +1066,7 @@ async fn test_mine_first_block_with_interval() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "requires mainnet fork RPC"]
async fn test_anvil_reset_non_fork() {
let (api, handle) = spawn(NodeConfig::test()).await;
let provider = handle.http_provider();
Expand Down Expand Up @@ -1121,6 +1128,7 @@ async fn test_anvil_reset_non_fork() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "requires mainnet fork RPC"]
async fn test_anvil_reset_fork_to_non_fork() {
let (api, handle) = spawn(fork_config()).await;
let provider = handle.http_provider();
Expand Down
5 changes: 3 additions & 2 deletions crates/anvil/tests/it/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -299,14 +299,14 @@ async fn can_call_with_undersized_max_fee_per_gas() {
assert!(undersized_max_fee_per_gas < latest_block_base_fee_per_gas);

let last_sender_tx = simple_storage_contract.lastSender().into_transaction_request();
let last_sender = last_sender_tx.from().unwrap();
let raw_input = last_sender_tx.input().unwrap();
let builder = tx_builder()
.with_from(wallet.address())
.with_to(*simple_storage_contract.address())
.with_input(raw_input.clone())
.into();
seismic_provider.seismic_call(SendableTx::Builder(builder.into())).await.unwrap();
let result = seismic_provider.seismic_call(SendableTx::Builder(builder.into())).await.unwrap();
let last_sender = <Address as alloy_sol_types::SolValue>::abi_decode(&result).unwrap();
assert_eq!(last_sender, Address::ZERO);
}

Expand Down Expand Up @@ -461,6 +461,7 @@ async fn can_send_tx_sync() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "requires mainnet fork RPC"]
async fn can_get_code_by_hash() {
let (api, _) =
spawn(NodeConfig::test().with_eth_rpc_url(Some(rpc::next_http_archive_rpc_url()))).await;
Expand Down
4 changes: 4 additions & 0 deletions crates/anvil/tests/it/eip4844.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ async fn can_send_multiple_blobs_in_one_tx() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "EIP-4844 blob support not wired through Seismic type forks"]
async fn cannot_exceed_six_blobs() {
let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::Cancun.into()));
let (_api, handle) = spawn(node_config).await;
Expand Down Expand Up @@ -126,6 +127,7 @@ async fn cannot_exceed_six_blobs() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "EIP-4844 blob support not wired through Seismic type forks"]
async fn can_mine_blobs_when_exceeds_max_blobs() {
let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::Cancun.into()));
let (api, handle) = spawn(node_config).await;
Expand Down Expand Up @@ -256,6 +258,7 @@ async fn can_correctly_estimate_blob_gas_with_recommended_fillers() {

#[expect(clippy::disallowed_macros)]
#[tokio::test(flavor = "multi_thread")]
#[ignore = "EIP-4844 blob support not wired through Seismic type forks"]
async fn can_correctly_estimate_blob_gas_with_recommended_fillers_with_signer() {
let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::Cancun.into()));
let (_api, handle) = spawn(node_config).await;
Expand Down Expand Up @@ -389,6 +392,7 @@ async fn can_get_blobs_by_versioned_hash() {
}

#[tokio::test(flavor = "multi_thread")]
#[ignore = "EIP-4844 blob support not wired through Seismic type forks"]
async fn can_get_blobs_by_tx_hash() {
let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::Prague.into()));
let (api, handle) = spawn(node_config).await;
Expand Down
Loading
Loading