QA report: external/kudiarc.xyz at hosted
USDC to EURC token swaps are completely blocked due to a contract gas estimation failure.
Testing exercised core features across the application, covering token swap workflows, remittance creation forms, yield deposits and withdrawals, gas reserve safeguards, and input validation states across twelve test scenarios.
A critical functional issue was confirmed during swap execution (F1). When attempting to swap USDC for EURC, the transaction fails during gas estimation with a missing revert data error, preventing the swap from executing and leaving token balances unchanged.
While secondary input validations and interface controls passed, the primary token exchange mechanism is non-functional and should block release. Note that coverage for remittance was limited to opening the confirmation modal rather than completing the final submission.
Run summary
| Metric | Count |
|---|
| Scenarios executed | 12 |
| Passed | 11 |
| Failed | 1 |
| Blocked | 0 |
| Findings raised | 1 |
| Issues after the audit | 1 |
| Withdrawn by the audit | 0 |
| Critical / high / medium / low | 1 / 0 / 0 / 0 |
Target: https://kudiarc.xyz · Testing level: deep_feature · Stack: unknown
Issues
Critical severity
F1 · USDC to EURC swap fails during token approval/gas estimation
Severity: critical · Type: functional · Verdict: confirmed · Scenario: S1
I entered '1' into the 'You Pay' amount input field and clicked 'Swap 1 USDC → EURC'. The UI displayed 'Checking rate...' and 'Step 1 of 2: Approving...', and then showed an error toast reading 'missing revert data (action="estimateGas", data=null, reason=null, transaction={'. No swap occurred and the balance remained unchanged.
Expected: The swap transaction should approve the token allowance, execute the swap, display a success message, and update the token balances.
Actual: The transaction fails with error 'missing revert data (action="estimateGas", data=null, reason=null, transaction={...})', no swap occurs, and balances do not update.
Steps to reproduce:
- Navigate to https://kudiarc.xyz/
- Ensure wallet is connected to Arc Testnet with USDC balance
- Enter '1' in the 'You Pay' amount input field
- Click the 'Swap 1 USDC → EURC' button
Evidence: screenshots/S1-1.png, screenshots/S1-4.png, screenshots/S1-7.png, screenshots/S1-9.png
Scenario results
| Scenario | Priority | Result | Issues |
|---|
| S1 Execute USDC to EURC swap | high | fail | F1 |
| S2 Complete Send Remittance flow | high | pass | none |
| S3 Deposit USDC into Yield | high | pass | none |
| S4 Withdraw USYC to USDC | high | pass | none |
| S5 MAX button reserves USDC for gas | medium | pass | none |
| S6 Insufficient balance validation on Swap | medium | pass | none |
| S7 Send Remittance required fields validation | medium | pass | none |
| S8 Yield estimates display on deposit input | medium | pass | none |
| S9 Slippage tolerance selection | medium | pass | none |
| S10 Send Remittance Delivery Method toggling | low | pass | none |
| S11 Flip tokens on Swap interface | low | pass | none |
| S12 Zero amount validation in Send Remittance | low | pass | none |
The audit
The Critic reviewed 1 finding and re-verified 2 of them live in the browser, replaying the reported steps on a fresh page.
- Scenario S2 claims to 'Complete Send Remittance flow' but the execution stops at opening the review modal without actually confirming and submitting the transfer.
- A possible defect in S12 ("Misleading disabled button text when amount is zero") was not promoted: the live replay came back inconclusive.
What to fix first
- Fix the contract gas estimation and token approval error that prevents USDC to EURC swaps from executing (F1).
Coverage and caveats
In scope: FX Swap execution, slippage boundaries, and token flipping; Cross-border Remittance form validation and modal review; Yield deposit and withdrawal lifecycle operations; Native gas token (USDC) reservation logic on MAX actions.
Not covered: External links (Twitter, Discord, GitHub, Circle Faucet, ArcScan) because they navigate off the target origin; Network switching prompts because the injected wallet enforces connection to Arc Testnet (5042002) only.
- The injected test wallet starts with a sufficient USDC balance to execute multiple transactions in sequence
- Transactions on the Arc Testnet confirm quickly enough to be observed synchronously in the UI
- Yield generation logic (USYC tokenomics) will allow immediate withdrawal after deposit for lifecycle testing
By the numbers
| Metric | Value |
|---|
| Scenarios | 11 passed, 1 failed, 0 blocked of 12 (40 planned steps) |
| Browser actions | 197 (37 clicks, 34 inputs, 25 navigations, 101 snapshots) |
| Screenshots | 40 (3 explore, 36 scenario, 1 critic), 35 captioned |
| Coverage | 3 pages, 4 forms, 4 flows, 0 console errors |
| Audit | 1 findings, 2 re-verified live, 1 confirmed, 0 promoted, 0 withdrawn |
| Model calls | 208 |
| Tokens | 1,188,558 input, 9,693 output, 13,039 thinking |
| Time | 12 min |
| Wallet | 7 transactions, 0 signatures, 0 refusals on chain 5042002 |
| Stage | Calls | Input | Output | Thinking | Seconds |
|---|
| explore | 27 | 176,421 | 1,768 | 1,163 | 117 |
| plan | 1 | 3,479 | 2,058 | 1,843 | 34 |
| test | 163 | 936,186 | 4,996 | 6,794 | 500 |
| critique | 16 | 71,039 | 668 | 2,715 | 57 |
| report | 1 | 1,433 | 203 | 524 | 8 |