Skip to content

Fix lifecycle acceptance for the two-argument deposit ABI - #27

Open
AkshatGada wants to merge 1 commit into
ethereum:mainfrom
AkshatGada:codex/fix-lifecycle-deposit-abi
Open

AkshatGada wants to merge 1 commit into
ethereum:mainfrom
AkshatGada:codex/fix-lifecycle-deposit-abi

Conversation

@AkshatGada

Copy link
Copy Markdown

The lifecycle acceptance runner currently stops at its first deposit: it passes three arguments to the vault's new two-argument deposit(bytes32,uint128) method. This prevents the later usage, settlement, withdrawal and recovery scenarios from running.

The CI run for the current main revision reproduces the failure:

FAIL  honest flow: deposit, two requests, settle, mutual close
too many arguments: types/values length mismatch (count=3, expectedCount=2)

Changes

  • Route all three wallet-driver/companion deposits through a shared helper using the current ABI. Preserve the native ETH value and keep Merkle siblings locally for exit proofs.
  • Add a regression that encodes the helper's calls against the compiled vault ABI, checks the decoded fields/value and runs after contract compilation, before lifecycle acceptance.
  • After a successful SDK deposit, wait for the indexer root to agree with the vault before starting the next operation. Without this readiness check, the next SDK chat can fail because its new note is not yet in the indexed snapshot. The wallet-driver request path already waits for that agreement.
  • Correct the deposit selector/signature and append-only behavior in the docs, and document the readiness check's coverage boundary.

Validation

Local validation used the exact seven-file patch in this PR. The full suites ran on October 16; the 20 focused tests were rerun before publication on October 17.

Check Result
Compiled-ABI regression Failed with the original three-argument behavior; passed after the fix
Focused acceptance/regression tests 20 passed, 0 failed, 0 skipped
npm run test:e2e:v2 33 scenarios passed, exit 0, about 14m 43s
SDK 591 passed
Rust application / protocol / adversary suites 627 / 163 / 377 passed
Solidity / demo Solidity 266 / 12 passed, including fuzz/invariant and snapshot checks
Go daemon Full go test -race ./... and go vet ./... passed
Browser proof compatibility Shipped request/escape proofs verified natively; WASM rebuilt byte for byte

Rust formatting and Clippy with warnings denied, golden calldata and all four withdrawal encoders on Anvil, real nginx/signer integration, docs type/lint/build, Docker build/release-flag checks, asset/version/build guards and packaging fixture checks also passed. The suites intentionally ignored one fixture-writer test and two tests requiring external ceremony files.

Tools: Node 24.22.0, Rust 1.99.0, Foundry 1.5.1, solc 0.8.28, crate-built wasm-bindgen 0.2.117 and Go 1.26.5 on macOS arm64.

The main reproduction command is:

npm run test:e2e:v2

After its dependency and contract-build prerequisites, the focused checks can also run directly:

node --test scripts/v2-acceptance.test.mjs scripts/acceptance/deposit.test.mjs

Scope

This changes the acceptance harness, its regression and documentation. Protocol, contract, server and production SDK implementations are unchanged. The full lifecycle uses real proofs/contracts/daemons on disposable Anvil with mock provider/OA/price-feed services and a mini bundler. It does not establish live-network settlement, real bundler acceptance, or immediate SDK inference while an indexer is still catching up to a deposit.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant