You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Stellar work is testable locally: the StellarNetwork::Standalone variant
(crates/wallet-core/src/signer.rs) exists specifically so
contributors can run against a local node "without depending on public testnet availability or
friendbot rate limits", and just test-live gates network tests behind OCTO_LIVE_TESTS=1.
EVM work needs the same. Without a local devnet, every downstream issue is either untested or
dependent on a flaky public testnet — and #222 (reorg handling) is untestable at all, because you
cannot induce a reorg on a public network on demand. Anvil (from Foundry) can, via anvil_snapshot/anvil_revert.
Requirements and context
Tests must skip cleanly, not fail, when Anvil is absent, mirroring how the Horizon live tests
gate on OCTO_LIVE_TESTS. A contributor without Foundry must still get a green just test.
Each test needs an isolated chain instance — a random free port and its own process, so tests can
run in parallel without shared-state flakiness.
Deterministic accounts: use Anvil's standard mnemonic so funded test accounts are reproducible.
A test that the suite skips (not fails) when Anvil is unavailable.
A test that Drop kills the process even when the test panics.
Add CI: install Foundry and run just test-evm.
Example commit message
chore(testing): add Anvil-based EVM integration harness
Gives EVM work the local-devnet story Stellar already has via
StellarNetwork::Standalone, with per-test isolated instances on random
ports and deterministic funded accounts.
Exposes anvil_snapshot/anvil_revert so reorg handling (#222) is testable
at all — a reorg cannot be induced on a public testnet on demand.
Skips cleanly when Foundry is absent so `just test` stays green.
Refs #219
Guidelines
Good first issue — self-contained, no fund-loss risk, and it unblocks five other issues. Prioritise
reliability: a flaky harness poisons every downstream PR.
Depends on: #218. Blocks: #221, #222, #224, #225, #226 (all need it to be testable).
Description
Stellar work is testable locally: the
StellarNetwork::Standalonevariant(
crates/wallet-core/src/signer.rs) exists specifically socontributors can run against a local node "without depending on public testnet availability or
friendbot rate limits", and
just test-livegates network tests behindOCTO_LIVE_TESTS=1.EVM work needs the same. Without a local devnet, every downstream issue is either untested or
dependent on a flaky public testnet — and #222 (reorg handling) is untestable at all, because you
cannot induce a reorg on a public network on demand. Anvil (from Foundry) can, via
anvil_snapshot/anvil_revert.Requirements and context
gate on
OCTO_LIVE_TESTS. A contributor without Foundry must still get a greenjust test.run in parallel without shared-state flakiness.
exercised, since decimal handling is where feat(store): Arbitrary-precision amounts — replace i64 stroops with NUMERIC(78,0) #215 and feat(store): ERC-20 token registry #223 will break.
anvil_snapshot,anvil_revert,evm_mine,anvil_setNextBlockBaseFeePerGas)as harness methods — this is the deliverable feat(ingest): Confirmation depth and reorg handling for EVM deposits #222 depends on most.
Suggested execution
Branch:
chore/anvil-integration-harnessImplement changes
crates/evm-rpc/tests/common/anvil.rs(or a smalltest-supportcrate if feat(ingest): EVM ingest worker — ERC-20 Transfer log scanning #221/feat(wallet): EVM deposit sweep engine #224 also needit): an
AnvilInstanceguard that spawns on a free port, waits for readiness by pollingeth_chainId, and kills the process inDrop.MockErc20deploy helper with parameteriseddecimals, plusmint/transferhelpers sotests can produce real
Transferlogs.snapshot(),revert_to(id),mine(n),set_base_fee(x).just test-evmto thejustfilealongsidetest-live, and gate on anOCTO_EVM_TESTSenv var plus an Anvil-on-PATH probe.CONTRIBUTING.md.Test and commit
eth_blockNumberadvances.Transfer,snapshot, mine more, revert, and assert the transaction receipt is gone. If this test does not
pass, feat(ingest): Confirmation depth and reorg handling for EVM deposits #222 cannot be verified.
Dropkills the process even when the test panics.just test-evm.Example commit message
Guidelines
Good first issue — self-contained, no fund-loss risk, and it unblocks five other issues. Prioritise
reliability: a flaky harness poisons every downstream PR.
Phase 3 — Inbound / deposits