Conversation
|
All contributors have signed the CLA ✍️ ✅ |
aff7b2c to
dad9d3d
Compare
|
This pull request has been marked as stale because it has been inactive a while. Please update this pull request or it will be automatically closed. |
crates/e2e/src/setup/colocation.rs
Outdated
| [pod] | ||
| endpoint = {:?} | ||
| auction-contract-address = {:?} |
There was a problem hiding this comment.
This should be moved to the start_driver_with_config_override callsite where you setup your e2e
|
This pull request has been marked as stale because it has been inactive a while. Please update this pull request or it will be automatically closed. |
99c8b62 to
78a3e71
Compare
| [[package]] | ||
| name = "jsonwebtoken" | ||
| version = "9.3.1" | ||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" | ||
| dependencies = [ | ||
| "base64 0.22.1", | ||
| "js-sys", | ||
| "pem", | ||
| "ring", | ||
| "serde", | ||
| "serde_json", | ||
| "simple_asn1", | ||
| ] |
Check warning
Code scanning / Trivy
jsonwebtoken: jsonwebtoken has Type Confusion that leads to potential authorization bypass Medium
e32884c to
7f0f75c
Compare
Pod Integration: Design Decisions (more context apart from PR description)Shadow Mode ArchitecturePod integration runs in shadow mode, so bid submission failures are logged as warnings but never block the protocol flow. Haircut-Based Score Differentiation (fo rthe e2e Tests)Since i'm using 2 instances of baseline solvers to simulate competition for the e2e tests; they produce the same flowTwo solvers competing for the same order find identical routes → identical scores. SolutionUse
This reliably produces different scores for testing pod winner selection without complex liquidity setup. Nonce/Pending TX HandlingCurrent IssuePod network rejects new TXs when previous ones from same sender are pending: Approach
Deterministic Test AddressesE2E tests use deterministic addresses derived from Anvil's default mnemonic. Pre-funding these on pod network:
Both funded with ~10 ETH on pod network. Config Structure[pod]
endpoint = "http://cow.pod.network:8545"
auction-contract = "0xeDD0670497E00ded712a398563Ea938A29dD28c7"Wallet uses existing |
eec3eab to
62e7fc4
Compare
|
I have read the CLA Document and I hereby sign the CLA |
961661e to
5dd1823
Compare
- Remove spurious pub mod bad_tokens (competition/mod.rs), pub mod fee (e2e setup/mod.rs), and participation_guard re-export (autopilot) - Replace derivative crate with manual Debug impl for Solver - Remove unused primitive-types dependency - Delete HANDOFF_PROMPT.md and PLAYGROUND_DEEP_DIVE.md (not part of pod feature)
…twork testing - Add autopilot.toml with driver configurations (required by new --config CLI arg) - Fix driver2.toml: add missing tx-gas-limit, correct solver name/endpoint to baseline2 - Fix NATIVE_PRICE_ESTIMATORS format in compose files (add Driver| prefix for baseline2) - Mount autopilot.toml in docker-compose.non-interactive.yml The autopilot binary now requires a --config TOML file specifying drivers and fee policies, replacing the previous DRIVERS environment variable approach.
…ebase to latest main branch, get test and services compiling again
…rbosity - Add test-pod-verbose justfile target for detailed test output - Replace [pod] log prefixes with structured tracing spans (pod_flow, pod_submit_bid, pod_fetch_bids, pod_local_arbitration) - Move auction_id and solver context to span fields instead of repeating in each log - Reduce log noise: change balance fetch failure from error to warn, make signer type selection debug-level - Add debug-level payload hex logging,
… new pod network version
cad881f to
b61e69d
Compare
There was a problem hiding this comment.
Code Review
This pull request implements integration with the pod network to support decentralized solver competitions. Key changes include upgrading the Alloy dependency suite to version 1.8.3, introducing deterministic solution hashing within the winner-selection crate, and adding a pod_flow to the driver for bid submission and local arbitration. The PR also includes new E2E tests, local configurations, and account recovery logic for the pod network. Feedback was provided regarding the fragility of the bid-fetching process, where a single malformed bid currently causes the entire batch to fail; it is recommended to collect individual errors instead of aborting the process.
| let bidder_solve_response: dto::SolveResponse = | ||
| match serde_json::from_slice(bid.data.as_slice()) { | ||
| Ok(resp) => resp, | ||
| Err(e) => { | ||
| tracing::error!(error = %e, "failed to deserialize SolveResponse"); | ||
| return Err(anyhow::Error::new(e)); | ||
| } | ||
| }; |
There was a problem hiding this comment.
Aborting the entire bid fetching process due to a single malformed bid is fragile. However, simply skipping the error is insufficient. According to our rules, when fetching a batch of items where individual fetches can fail, the API response should explicitly indicate which items failed and provide error details for each failure, rather than silently ignoring them.
let mut errors = Vec::new();
for bid in bids {
match serde_json::from_slice::<dto::SolveResponse>(bid.data.as_slice()) {
Ok(resp) => {
for solution in resp.solutions {
participants.push(Bid::new(solution));
}
}
Err(e) => {
tracing::error!(error = %e, "failed to deserialize SolveResponse");
errors.push((bid.id, e.to_string()));
}
}
}References
- When fetching a batch of items where individual fetches can fail, do not silently ignore errors. The API response should explicitly indicate which items failed and provide error details for each failure.
New Crates & Modules
winner-selection: Deterministic solution hashing and combinatorial auction arbitration logicDriver Pod Flow
Configuration
[pod]TOML section:endpoint,auction_contract, wallet configE2E Tests
pod_test_basic: Single solver bid submission + winner verificationpod_test_multi_order: Multiple orders in single auctionpod_test_multi_solver: Competing solvers with haircut-based score differentiationBug Fixes
NonescoresHow to Test
Local Services
1. Start anvil in fork mode for mainnet.
1a. state override to bypass solver whitelisting requirement
❯ cast rpc -r http://127.0.0.1:8545 anvil_setCode \ 0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE \ 0x600160005260206000F32. Start services DB and perform migrations (if not running)
3. Start services (update configs with actual working values for DB URL, etc. for your local machine; you don't have to make any changes to existing configs to support the pod-network addition
cargo run -p driver -- --config configs/local/driver.toml
cargo run -p autopilot -- --config configs/local/autopilot.toml
cargo run -p orderbook -- --config configs/local/orderbook.toml
5. Submit order via API and check logs for:
E2E Tests
# Run all pod tests cargo nextest run -p e2e pod_test --run-ignored ignored-only --test-threads 1Known Issues (waiting on response)
Pending TX on Pod Network
Bid submission fails with:
Details:
http://cow.pod.network:85450xeDD0670497E00ded712a398563Ea938A29dD28c70xf985d2cf3f3c5cfc798d8e9e4ebdd6777653c3cbForwarded to pod team - tests will fail until resolved. Shadow mode ensures main flow continues.
Related