Hosted appStableSwapArc Testnetsucceeded

Lunex Finance: Curve-style StableSwap AMM and ERC-4626 yield vaults for USDC/EURC on Arc Network.

Tested in place byDeepQA TeamonArc Testnetatlunex.financeonSep 17, 2026

Run #1model gemini-balanced (vertex)took 21m

6 of 12 scenarios passed, 6 blocked, no issues after the audit.

Share on X
Lunex in the browser during the run

By the numbers

6 of 12
scenarios passed, 6 blocked
262
browser actions
30
screenshots
211
model calls
21
minutes
4
on-chain transactions
12
scenarios
6
passed
0
failed
6
blocked
0
issues

Walkthrough

Every scenario DeepQA drove in the browser, in plan order, with the 22 screenshots it captured along the way. A passing scenario is evidence too.

  1. S1
    Execute USDC to EURC swap

    5 steps, 1 screenshot

    blocked
    S1-2.png
    S1 · Execute USDC to EURC swap
    • Navigated to /swap page. USDC is selected as input token (balance 5.00) and EURC is selected as output token (balance 0.00).
    • Navigated to https://lunex.finance/swap.
    • The default connected browser wallet is funded with only 5.00 USDC, 0.00 EURC, and 0.00 USDT on Arc Testnet.
    • Entering 10 into the 'Amount to pay' field properly validates available funds and disables the swap button with 'Insufficient Balance' status.
    • Attempted to claim testnet USDT from the faucet to acquire additional balance for a 10 USDC swap, but the faucet claim request stayed in 'Claiming...' state without resolving before tool budget was reached.
  2. S2
    Swap MAX shortcut reserves gas

    4 steps, 2 screenshots

    pass
    S2-2.png
    S2 · Swap MAX shortcut reserves gas
    S2-5.png
    S2 · Swap MAX shortcut reserves gas
    • Navigated to /swap and observed connected wallet with 5.00 USDC balance in From section.
    • Clicked MAX button with 5.00 USDC balance; input amount populated with 4.998438 USDC, reserving a gas buffer as expected.
    • On /swap with USDC selected and a balance of 5.00 USDC, clicking the MAX shortcut populated 4.998438 USDC into the amount input.
    • The populated amount reserves ~0.001562 USDC for native gas, preventing gas exhaustion errors on transaction submission.
  3. S3
    Swap insufficient balance validation

    4 steps, 2 screenshots

    pass
    S3-2.png
    S3 · Swap insufficient balance validation
    S3-5.png
    S3 · Swap insufficient balance validation
    • Entered an amount (100 USDC) exceeding the wallet balance of 5.00 USDC, and the swap button became disabled with label 'Insufficient Balance'.
    • Navigated to /swap where the wallet balance for USDC was 5.00 USDC.
    • Entered 100 into the Amount to pay input field.
    • The swap button updated to display 'Insufficient Balance' and was disabled, preventing execution of trades exceeding the wallet balance.
  4. S4
    Add single-sided USDC liquidity

    5 steps, 2 screenshots

    blocked
    S4-2.png
    S4 · Add single-sided USDC liquidity
    S4-5.png
    S4 · Add single-sided USDC liquidity
    • Navigated to /pool showing USDC / EURC Protocol Pool overview and LP positions.
    • Reached the Provision Liquidity form on /pool/add with USDC and EURC inputs.
    • Navigated to /pool and reached the /pool/add Provision Liquidity form.
    • The connected test account balance contains 5.00 USDC, 0.00 EURC, and 1,000.00 USDT.
    • Entering the requested 10 USDC triggers the 'Insufficient USDC' balance validation on the submission button.
    • Attempting to acquire additional USDC via /swap was blocked because the USDT pool is disabled/under maintenance.
  5. S5
    Remove liquidity

    4 steps, 1 screenshot

    blocked
    S5-2.png
    S5 · Remove liquidity
    • Navigated to /pool showing USDC/EURC Protocol Pool and No active pool position.
    • Navigated to /pool and observed the USDC/EURC Protocol Pool with status 'No active pool position'.
    • Navigated to /pool/remove which requires an existing LP token [redacted]
    • Swapped USDC for EURC via /swap to prepare required balances for liquidity provision.
    • Tool turn limit was reached before liquidity could be added and subsequently removed to verify token [redacted] and balance return.
  6. S6
    Bridge rejects non-Arc source networks

    5 steps, 1 screenshot

    blocked
    S6-2.png
    S6 · Bridge rejects non-Arc source networks
    • Navigated to https://lunex.finance/bridge successfully.
    • The bridge interface rendered inside a tabpanel container containing concatenated text ('0x28C2…39AF0.00 USDC· Base Sepolia DisconnectSelect RouteUSDCEURCFromBase SepoliaToArc TestnetAvailable: 0.00 USDCRefres') without exposing individual interactive refs in the accessibility snapshot tree.
    • Could not select Ethereum or interact with the source chain / destination chain selectors and amount inputs due to the tabpanel tree representation.
  7. S7
    Swap zero amount validation

    3 steps, 3 screenshots

    pass
    S7-2.png
    S7 · Swap zero amount validation
    S7-5.png
    S7 · Swap zero amount validation
    S7-8.png
    S7 · Swap zero amount validation
    • Navigated to the swap page, entered 0 into the Amount to pay field, and observed that the button displays 'Enter an Amount' and remains disabled.
    • Navigated to https://lunex.finance/swap.
    • Entered 0 (and 0.00) into the 'Amount to pay' input field.
    • Observed that the Swap button remained disabled with the text 'Enter an Amount', correctly preventing submission of zero-value swaps.
  8. S8
    Pool add insufficient balance validation

    3 steps, 2 screenshots

    pass
    S8-2.png
    S8 · Pool add insufficient balance validation
    S8-5.png
    S8 · Pool add insufficient balance validation
    • Navigated to /pool/add where USDC balance is 2.99 and EURC balance is 1.51.
    • Entered 100 into USDC Amount with a balance of 2.99; button changed to 'Insufficient USDC' and is disabled with an inline error message.
    • The pool add form correctly validates user wallet balance. When entering an amount exceeding the available USDC balance (entered 100 with balance 2.99), the submit button changes its label to 'Insufficient USDC' and is disabled, preventing invalid submissions.
  9. S9
    Pool remove overdraft validation

    3 steps, 2 screenshots

    pass
    S9-2.png
    S9 · Pool remove overdraft validation
    S9-13.png
    S9 · Pool remove overdraft validation
    • Navigated to /pool/remove and verified that when LP token [redacted] is 0 or cannot cover withdrawal, the submit button is disabled with 'NO LP TOKENS', preventing overdraft.
    • Navigated to /pool/remove where the user has 0 LP tokens.
    • The pool remove form limits selection to percentage increments and disables the submit button displaying 'NO LP TOKENS' when no LP tokens are available to burn, preventing overdraft.
  10. S10
    Send stablecoins successfully

    5 steps, 1 screenshot

    blocked
    S10-2.png
    S10 · Send stablecoins successfully
    • Navigated to /send page with Send Now tab active.
    • Navigated to /send and selected USDC as the transfer token.
    • The connected wallet had a USDC balance of 2.99 USDC, preventing a 10 USDC transfer due to 'Exceeds balance' validation.
    • Checked USDT/USDC pool and faucet to obtain more USDC, but the USDT pool was under maintenance and the faucet only distributes USDT.
  11. S11
    Swap high slippage warning

    4 steps, 2 screenshots

    blocked
    S11-2.png
    S11 · Swap high slippage warning
    S11-12.png
    S11 · Swap high slippage warning
    • Navigated to the swap page at /swap.
    • Navigated to https://lunex.finance/swap.
    • Toggled the swap settings button which revealed the slippage tolerance controls (0.1%, 0.5%, 1.0%, and custom input field placeholder '0–5%').
    • Tool call budget was reached before typing 20 into the slippage input field.
  12. S12
    Analytics graceful failure on CORS logs

    3 steps, 3 screenshots

    pass
    S12-2.png
    S12 · Analytics graceful failure on CORS logs
    S12-7.png
    S12 · Analytics graceful failure on CORS logs
    S12-9.png
    S12 · Analytics graceful failure on CORS logs
    • Navigated to Analytics page; the UI displays protocol analytics header, wallet search input, and initial state.
    • Searched wallet address in analytics lookup; the view displayed a localized error message ('Couldn't load onchain activity. Failed to fetch') with a Retry button without crashing the page.
    • Clicked retry and observed localized error messaging ('Couldn\'t read this wallet\'s activity. Please try again.') while the full page layout and sidebar remained intact.
    • The Analytics page loads without crashing the full view.
    • Submitting a wallet address lookup when onchain / block explorer logs cannot be fetched results in a clear, localized error state ('Couldn\'t load onchain activity. Failed to fetch' / 'Couldn\'t read this wallet\'s activity. Please try again.') rather than crashing the page or getting stuck in an infinite spinner.

Issues

No finding survived the audit. Nothing to fix from this run.

Wallet activity

DeepQA injected a test wallet into the browser and recorded every request the app sent to it. Testnet funds only.

address
0x28C278…7c39AF
chain
Arc Testnet
browsers opened
3
read requests forwarded
0
signing requests
7
time (UTC)methodsummaryresult
16:58:05eth_sendTransactionto 0x59125072f5692DdF22c99514805D1232C3999646 value 0 data 4 bytestx 0x6e0cde…970af5
16:58:15personal_signmessage of 408 charssigned
17:00:47eth_sendTransactionto 0x3600000000000000000000000000000000000000 value 0 data 68 bytestx 0x87c0ec…698779
17:00:51eth_sendTransactionto 0xC24BFc8e4b10500a72A63Bec98CCC989CbDA41d8 value 0 data 132 bytestx 0x0178aa…2aafdd
17:04:33eth_sendTransactionto 0x3600000000000000000000000000000000000000 value 0 data 68 bytestx 0x28b09d…a783a2
17:11:59personal_signmessage of 408 charssigned
17:13:13personal_signmessage of 408 charssigned

Critic audit

An adversarial second pass over every finding before it reaches the report.

0
findings reviewed
4
re-verified live
0
withdrawn
    • Over half of the scenarios were blocked because the test wallet lacked sufficient funds on the testnet and the faucet was inoperable, representing a significant failure in the testing environment setup.
    • Console errors representing API blockages via CORS and HTTP 429 rate limits appeared continuously across all passed and blocked scenarios but were completely disregarded by the tester.
    • A possible defect in S2 ("CORS policy blocks eth-sepolia Blast API request") was not promoted: the live replay came back inconclusive.
    • A possible defect in S3 ("CORS policy blocks arcscan testnet API requests") was not promoted: the live replay came back inconclusive.
    • A possible defect in S7 ("Server returns 429 Too Many Requests error during interaction") was not promoted: the live replay came back inconclusive.
    • A possible defect in S8 ("Syntax error due to unexpected HTML response") was not promoted: the live replay came back inconclusive.

    Report

    QA report: external/lunex.finance at hosted

    No defects were confirmed across the application, though half of the evaluated scenarios were blocked by environment and test setup constraints.

    Testing evaluated 12 scenarios across token swaps, liquidity pool management, asset bridging, transfers, and analytics error handling. Six scenarios passed, confirming client-side input validations including insufficient balance checks, zero-amount guards, gas reservations on maximum swaps, and pool overdraft prevention. Zero defects were confirmed after audit.

    Six scenarios were blocked from completing their validation paths. Insufficient testnet wallet balances and unavailable token swaps prevented the execution of swap, liquidity addition, and token transfer actions. Further scenarios were blocked by unexposed bridge controls in the accessibility tree and tool budget limits reached while setting up LP tokens or configuring custom slippage.

    Four potential network and API issues investigated during the audit returned inconclusive results upon live re-verification and were not promoted to defects. Complete end-to-end execution of transaction workflows remains unverified due to the test environment limitations.

    Run summary
    MetricCount
    Scenarios executed12
    Passed6
    Failed0
    Blocked6
    Findings raised0
    Issues after the audit0
    Withdrawn by the audit0
    Critical / high / medium / low0 / 0 / 0 / 0

    Target: https://lunex.finance · Testing level: deep_feature · Stack: unknown

    Issues

    No issues survived the audit.

    Scenario results
    ScenarioPriorityResultIssues
    S1 Execute USDC to EURC swaphighblocked (The default testnet wallet balance is 5.00 USDC, preventing the requested 10 USDC swap from being submitted due to insufficient balance.)none
    S2 Swap MAX shortcut reserves gashighpassnone
    S3 Swap insufficient balance validationhighpassnone
    S4 Add single-sided USDC liquidityhighblocked (Cannot add 10 USDC liquidity because the test wallet balance is only 5.00 USDC and swapping USDT to USDC is disabled due to pool maintenance.)none
    S5 Remove liquidityhighblocked (Scenario required an active LP token [redacted] which was not initially present, and tool turn limit was reached while provisioning liquidity prior to the remove step.)none
    S6 Bridge rejects non-Arc source networkshighblocked (The interactive form elements within the bridge tabpanel were not individually addressable or exposed as separate interactive controls in the accessibility tree.)none
    S7 Swap zero amount validationmediumpassnone
    S8 Pool add insufficient balance validationmediumpassnone
    S9 Pool remove overdraft validationmediumpassnone
    S10 Send stablecoins successfullymediumblocked (The test wallet balance on the hosted testnet environment is only 2.99 USDC, preventing the transfer of 10 USDC due to insufficient balance validation.)none
    S11 Swap high slippage warninglowblocked (Tool-call budget reached before entering custom slippage value into the slippage input field.)none
    S12 Analytics graceful failure on CORS logslowpassnone
    The audit

    The Critic reviewed 0 findings and re-verified 4 of them live in the browser, replaying the reported steps on a fresh page.

    • Over half of the scenarios were blocked because the test wallet lacked sufficient funds on the testnet and the faucet was inoperable, representing a significant failure in the testing environment setup.
    • Console errors representing API blockages via CORS and HTTP 429 rate limits appeared continuously across all passed and blocked scenarios but were completely disregarded by the tester.
    • A possible defect in S2 ("CORS policy blocks eth-sepolia Blast API request") was not promoted: the live replay came back inconclusive.
    • A possible defect in S3 ("CORS policy blocks arcscan testnet API requests") was not promoted: the live replay came back inconclusive.
    • A possible defect in S7 ("Server returns 429 Too Many Requests error during interaction") was not promoted: the live replay came back inconclusive.
    • A possible defect in S8 ("Syntax error due to unexpected HTML response") was not promoted: the live replay came back inconclusive.
    Coverage and caveats

    In scope: StableSwap exchange (Swap) constraints and operations; Liquidity provision (Pool Add/Remove); Cross-chain bridge network switch constraints; Direct stablecoin transfers (Send).

    Not covered: Yield Vaults (excluded to focus deeply on core AMM Swap and Liquidity); AI Autopilot (excluded to maintain focus on the deep feature scope); Testnet Faucet (wallet is already funded with USDC based on intake); Documentation (static content, out of scope for transactional testing).

    • Assuming a 'MAX' shortcut button exists near the amount inputs to test the explicitly requested gas reservation constraint.
    • Assuming EURC and USDT starting balances are 0 and must be acquired via Swap if needed.
    • Assuming the wallet's refusal to switch from Arc testnet is verifiable via an observable rejection message in the UI.
    • S1 could not be executed: The default testnet wallet balance is 5.00 USDC, preventing the requested 10 USDC swap from being submitted due to insufficient balance..
    • S4 could not be executed: Cannot add 10 USDC liquidity because the test wallet balance is only 5.00 USDC and swapping USDT to USDC is disabled due to pool maintenance..
    • S5 could not be executed: Scenario required an active LP token [redacted] which was not initially present, and tool turn limit was reached while provisioning liquidity prior to the remove step..
    • S6 could not be executed: The interactive form elements within the bridge tabpanel were not individually addressable or exposed as separate interactive controls in the accessibility tree..
    • S10 could not be executed: The test wallet balance on the hosted testnet environment is only 2.99 USDC, preventing the transfer of 10 USDC due to insufficient balance validation..
    • S11 could not be executed: Tool-call budget reached before entering custom slippage value into the slippage input field..
    By the numbers
    MetricValue
    Scenarios6 passed, 0 failed, 6 blocked of 12 (48 planned steps)
    Browser actions262 (33 clicks, 30 inputs, 64 navigations, 135 snapshots)
    Screenshots30 (4 explore, 22 scenario, 4 critic), 22 captioned
    Coverage14 pages, 9 forms, 7 flows, 28 console errors
    Audit0 findings, 4 re-verified live, 0 confirmed, 0 promoted, 0 withdrawn
    Model calls211
    Tokens1,104,885 input, 11,301 output, 28,877 thinking
    Time21 min
    Wallet4 transactions, 3 signatures, 0 refusals on chain 5042002
    StageCallsInputOutputThinkingSeconds
    explore2199,3053,2641,187143
    plan19,6342,0275,48658
    test157834,0304,32612,182850
    critique31160,2611,4579,309179
    report11,6552277139

    Run log

    stagecallstokenstime
    Explore21103.8k2m 23s
    Plan117.1k58s
    Test157850.5k14m 10s
    Critique31171k2m 59s
    Report12.6k9s
    Total2111.1M20m 39s
    Intake
    Explore
    Plan
    Test
    Critique
    Report
    • 16:53:47Zexploreexplore started
    • 17:14:25ZexploreExplored / (15 controls, 0 forms)
    • 17:14:25ZexploreExplored /swap (24 controls, 0 forms)
    • 17:14:25ZexploreExplored /dashboard (16 controls, 0 forms)
    • 17:14:25ZexploreExplored /yield (22 controls, 0 forms)
    • 17:14:25ZexploreExplored /yield/usdc (22 controls, 0 forms)
    • 17:14:25ZexploreExplored /pool (19 controls, 0 forms)
    • 17:14:25ZexploreExplored /pool/add (26 controls, 0 forms)
    • 17:14:25ZexploreExplored /pool/remove (28 controls, 0 forms)
    • 17:14:25ZexploreExplored /autopilot (33 controls, 0 forms)
    • 17:14:25ZexploreExplored /bridge (18 controls, 0 forms)
    • 17:14:25ZexploreExplored /faucet (17 controls, 0 forms)
    • 17:14:25ZexploreExplored /send (26 controls, 0 forms)
    • 17:14:25ZexploreExplored /analytics (19 controls, 0 forms)
    • 17:14:25ZexploreExplored /docs (36 controls, 0 forms)
    • 17:14:25ZexploreMapped 14 pages, 9 forms, 7 flows in 21 turns.
    • 17:14:25Zexploreexplore completed in 143s.
    • 17:14:25Zplanplan started
    • 17:14:25ZplanPlanned 12 scenarios (6 high, 4 medium, 2 low).
    • 17:14:25Zplanplan completed in 58s.
    • 17:14:25Ztesttest started
    • 17:14:25ZtestS1 executed (blocked)
    • 17:14:25ZtestS2 executed (pass)
    • 17:14:25ZtestS3 executed (pass)
    • 17:14:25ZtestS4 executed (blocked)
    • 17:14:25ZtestS5 executed (blocked)
    • 17:14:25ZtestS6 executed (blocked)
    • 17:14:25ZtestS7 executed (pass)
    • 17:14:25ZtestS8 executed (pass)
    • 17:14:25ZtestS9 executed (pass)
    • 17:14:25ZtestS10 executed (blocked)
    • 17:14:25ZtestS11 executed (blocked)
    • 17:14:25ZtestS12 executed (pass)
    • 17:14:25ZtestExecuted 12 scenarios: 6 passed, 0 failed, 6 blocked, 0 findings.
    • 17:14:25Ztesttest completed in 850s.
    • 17:14:25Zcritiquecritique started
    • 17:14:25ZcritiqueReviewed 0 findings; 4 possible defects spotted in passed scenarios.
    • 17:14:25ZcritiqueRe-verified a possible defect in S2: inconclusive.
    • 17:14:25ZcritiqueRe-verified a possible defect in S3: inconclusive.
    • 17:14:25ZcritiqueRe-verified a possible defect in S7: inconclusive.
    • 17:14:25ZcritiqueRe-verified a possible defect in S8: inconclusive.
    • 17:14:25ZcritiqueAudit complete: 0 confirmed, 0 withdrawn, 0 promoted, 4 re-verified live.
    • 17:14:25Zcritiquecritique completed in 179s.
    • 17:14:25Zreportreport started
    • 17:14:25ZreportReported 0 issues (0 critical, 0 high, 0 medium, 0 low) from 0 findings.
    • 17:14:25Zreportreport completed in 9s.

    Put an agent team on your next pull request.

    Connect a repo, dispatch a Run, and read an audited, evidence-backed report the same day.