Skip to content

feat: replace blocknative gas price with rpc node#7646

Open
shoom3301 wants to merge 12 commits into
developfrom
remove/blocknative
Open

feat: replace blocknative gas price with rpc node#7646
shoom3301 wants to merge 12 commits into
developfrom
remove/blocknative

Conversation

@shoom3301

@shoom3301 shoom3301 commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fixes #7579

Since Blocknative API is going to be shat down, we have to remove it from the app.
As an alternative I added eth_gasPrice RPC method: https://wagmi.sh/core/api/actions/getGasPrice

It's being used as a fallback in case if blockscout API failed.

To Test

For every network:

  1. Create a limit order with unreal price (much higher than market)
  2. Try cancelling the order using on-chain tx
  • It should display Tx. cost in the modal
  • the cost should be feasible
image

Summary by CodeRabbit

  • New Features
    • Gas price estimation now uses Blockscout oracle data when available, with an RPC fallback.
  • Bug Fixes
    • Improved fetch-error reporting filtering to align Blockscout-related failures.
  • Chores / Refactor
    • Removed an inactive transaction monitoring component.
    • Updated CI/IPFS secrets configuration to stop exposing a Blocknative API key.
    • Refreshed cancellation modal and notification banner presentation; added temporary debug logging.
    • Extended shared wallet configuration for reuse.

@shoom3301 shoom3301 self-assigned this Jun 16, 2026
@vercel

vercel Bot commented Jun 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cowfi Ready Ready Preview Jun 17, 2026 3:00pm
storybook Ready Ready Preview Jun 17, 2026 3:00pm
widget-configurator Ready Ready Preview Jun 17, 2026 3:00pm
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
cosmos Ignored Ignored Jun 17, 2026 3:00pm
sdk-tools Ignored Ignored Preview Jun 17, 2026 3:00pm

Request Review

@shoom3301 shoom3301 requested a review from a team June 16, 2026 08:59
@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Removes the Blocknative gas price API integration (endpoints, API keys, parsing logic, and CI secrets) and replaces it with Blockscout oracle endpoints plus an eth_gasPrice RPC fallback via @wagmi/core. The Sentry fetch-error URL filter is updated to blockscout.com. Also refactors the CancellationModal Tx cost display from a legacy NotificationBanner wrapper to a plain styled div.

Changes

Blocknative → Blockscout + RPC Gas Migration

Layer / File(s) Summary
Constants, endpoints, and dependency wiring
libs/common-const/src/common.ts, libs/wallet/src/index.ts, apps/cowswap-frontend/package.json
GAS_FEE_ENDPOINTS values replaced with Blockscout oracle URLs (empty string for unsupported chains); GAS_API_KEYS export removed. reownWagmiConfig re-exported from the wallet lib. @wagmi/core@3.4.8 added as a runtime dependency.
GasFeeApi: Blockscout parsing and RPC fallback
apps/cowswap-frontend/src/api/gasPrices/index.ts
GAS_API_KEYS import dropped; getGasPrice from @wagmi/core added. GasPrices type and PRICE_KEYS introduced for oracle confidence-key parsing. Blocknative-specific methods (getHeaders, getBlocknativePrice) and branched parseData removed. fetchData now accepts a URL string directly. New getGasPriceFromRpc method returns uniform RPC-derived price for all confidence levels. getGasPrices wraps oracle fetch in try/catch and falls back to RPC on failure or missing URL. supportedChain now uses isEvmChain.
Cleanup: Sentry filter and CI secrets
apps/cowswap-frontend/src/cow-react/sentry/beforeSend.ts, .github/workflows/ci.yml, .github/workflows/ipfs.yml
Sentry URLS_TO_IGNORE_FETCH_ERRORS regex updated from api.blocknative.com to blockscout.com. REACT_APP_BLOCKNATIVE_API_KEY removed from both CI and IPFS workflow env blocks.

CancellationModal UI Refinement

Layer / File(s) Summary
Tx cost display refactor
apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx
The "Tx cost" display for on-chain cancellations replaced from StyledNotificationBanner wrapper to a plain styled.div with explicit spacing, background, text color, and border radius. Import of legacy NotificationBanner removed and cost amount or Unknown fallback rendered directly without extra wrapper elements.

Sequence Diagram(s)

sequenceDiagram
    participant App
    participant GasFeeApi
    participant BlockscoutOracle
    participant WagmiRPC as Wagmi RPC (eth_gasPrice)

    App->>GasFeeApi: getGasPrices(chainId)
    alt Blockscout URL configured
        GasFeeApi->>BlockscoutOracle: fetchData(url)
        alt fetch succeeds
            BlockscoutOracle-->>GasFeeApi: {fast, average, slow} in gwei
            GasFeeApi->>GasFeeApi: parseData → GasFeeEndpointResponse
        else fetch fails or error
            GasFeeApi->>WagmiRPC: getGasPrice(reownWagmiConfig, {chainId})
            WagmiRPC-->>GasFeeApi: bigint gasPrice
            GasFeeApi->>GasFeeApi: uniform price for all confidence levels
        end
    else No URL (chain unsupported by Blockscout)
        GasFeeApi->>WagmiRPC: getGasPrice(reownWagmiConfig, {chainId})
        WagmiRPC-->>GasFeeApi: bigint gasPrice
        GasFeeApi->>GasFeeApi: uniform price for all confidence levels
    end
    GasFeeApi-->>App: GasFeeEndpointResponse
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • elena-zh
  • Danziger
  • limitofzero
  • kernelwhisperer

Poem

🐇 Blocknative's gone, the deadline flew by,
No more API keys reaching the sky!
Blockscout oracles answer our call,
With RPC fallback—a safety net for all.
Hop hop, the bunny swapped out the old chain,
Clean code, no secrets—nothing to maintain! 🌿

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Out of Scope Changes check ❓ Inconclusive Changes include removal of debug console.log in NotificationBanner and deletion of unused useNotificationState hook, which are not directly related to the Blocknative removal objective. Clarify whether the NotificationBanner debug log and useNotificationState hook removal are intentional cleanup or accidental inclusion in this PR scope.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: replacing Blocknative gas price API with RPC node fallback.
Description check ✅ Passed The PR description includes all required template sections with specific context about Blocknative shutdown, implementation details using eth_gasPrice RPC method, testing steps across networks, and relevant screenshots.
Linked Issues check ✅ Passed The PR addresses issue #7579 by removing Blocknative API integration and implementing eth_gasPrice RPC fallback, though using a different solution than the LogicNodes alternative mentioned in the issue.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch remove/blocknative

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 16, 2026

Copy link
Copy Markdown

Deploying swap-dev with  Cloudflare Pages  Cloudflare Pages

Latest commit: 0c4daef
Status: ✅  Deploy successful!
Preview URL: https://37d7720a.swap-dev-5u6.pages.dev
Branch Preview URL: https://remove-blocknative.swap-dev-5u6.pages.dev

View logs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/cowswap-frontend/src/api/gasPrices/index.ts`:
- Around line 51-69: The fetchData method does not validate HTTP response status
codes, and the parseData method does not validate that required price keys
contain valid finite numbers, allowing malformed responses to silently return
null values instead of triggering error handling. Add a response.ok check in the
fetchData method to throw an error for non-2xx status codes. In the parseData
method, add validation logic before the loop that iterates over PRICE_KEYS to
ensure each key exists in the input json object and contains a valid finite
number; throw an error with a descriptive message if validation fails, so that
the try-catch in getGasPrices can properly trigger the RPC fallback.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a3b81567-aa14-4801-81f6-ae529ee0ea6a

📥 Commits

Reviewing files that changed from the base of the PR and between b76b2f9 and 28858bc.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (8)
  • .github/workflows/ci.yml
  • .github/workflows/ipfs.yml
  • apps/cowswap-frontend/package.json
  • apps/cowswap-frontend/src/api/gasPrices/index.ts
  • apps/cowswap-frontend/src/common/updaters/CancelReplaceTxUpdater.tsx
  • apps/cowswap-frontend/src/cow-react/sentry/beforeSend.ts
  • libs/common-const/src/common.ts
  • libs/wallet/src/index.ts
💤 Files with no reviewable changes (3)
  • .github/workflows/ci.yml
  • apps/cowswap-frontend/src/common/updaters/CancelReplaceTxUpdater.tsx
  • .github/workflows/ipfs.yml

Comment thread apps/cowswap-frontend/src/api/gasPrices/index.ts

@alfetopito alfetopito left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On chains that blockscout is present, I see the request succeeding. However, the on-chain cancellation does not show the tx cost:

image image

On chain where it's not supported, I see the requests failing:

image

Is it something we should configure on our side (CoW Swap/Cf-pages) or theirs?

@elena-zh

Copy link
Copy Markdown
Contributor

Same issue as for @alfetopito : I don't see the gas estimation (however, I did not see it before either)

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 16, 2026

Copy link
Copy Markdown

Deploying explorer-dev with  Cloudflare Pages  Cloudflare Pages

Latest commit: 0c4daef
Status: ✅  Deploy successful!
Preview URL: https://28fe9929.explorer-dev-dxz.pages.dev
Branch Preview URL: https://remove-blocknative.explorer-dev-dxz.pages.dev

View logs

@elena-zh elena-zh left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I cannot load balances on BNB, Polygon, Avlanche, Linea, Ink and Gnosis in this PR

Image

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx`:
- Around line 102-107: Remove the console.log statement that is currently
logging the 'CCCCC' debug message with the isOnChainType, showMore,
txCostAmount, and nativeCurrency variables in the ModalTopContent component.
This debug logging fires on every render and should be removed before the code
is merged to production.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: f947e217-1763-47f5-a838-ca9033c17f3b

📥 Commits

Reviewing files that changed from the base of the PR and between 28858bc and 43b11a4.

📒 Files selected for processing (1)
  • apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx

Comment thread apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx Outdated
@elena-zh elena-zh self-requested a review June 16, 2026 11:22
@elena-zh

Copy link
Copy Markdown
Contributor

I cannot load balances on BNB, Polygon, Avlanche, Linea, Ink and Gnosis in this PR

It appears to be not related to the current PR

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx`:
- Line 50: Remove the console.log(StyledNotificationBanner) statement from the
module scope in ModalTopContent.tsx. This debug logging statement executes when
the module is imported and produces unnecessary noise in production logs without
providing user-facing value. Simply delete this line entirely.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 2488d102-6668-43e8-b416-e3a4d9102613

📥 Commits

Reviewing files that changed from the base of the PR and between 43b11a4 and 2b50755.

📒 Files selected for processing (1)
  • apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx

Comment thread apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx Outdated
… remove/blocknative

# Conflicts:
#	pnpm-lock.yaml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx (1)

43-52: ⚡ Quick win

Extract styled elements to a .styled.ts module for this component.

Lines 43-52 keep style declarations inline in the .tsx file; this diverges from the frontend convention and makes style reuse/import direction checks harder to enforce consistently.

As per coding guidelines, apps/cowswap-frontend/**/*.{ts,tsx} should “Import styles as import * as styledEl from './X.styled'.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx`
around lines 43 - 52, The StyledNotificationBanner styled component is currently
defined inline in the ModalTopContent.tsx file, which violates the frontend
convention of keeping styles in separate .styled.ts modules. Extract the
StyledNotificationBanner definition from the .tsx file and move it to a new
ModalTopContent.styled.ts file, then import it back into the component using the
pattern import * as styledEl from './ModalTopContent.styled' to follow the
coding guidelines and maintain consistency with the project's style
organization.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx`:
- Around line 140-143: The StyledNotificationBanner div (containing the tx cost
information) is currently nested inside a paragraph element opened at line 134,
which violates HTML semantics and can cause React DOM warnings. Move the
StyledNotificationBanner block outside and after the closing paragraph tag to
ensure proper HTML structure. The paragraph element should only contain inline
text content, while the StyledNotificationBanner should be a sibling element at
the same nesting level as the paragraph.

---

Nitpick comments:
In `@apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx`:
- Around line 43-52: The StyledNotificationBanner styled component is currently
defined inline in the ModalTopContent.tsx file, which violates the frontend
convention of keeping styles in separate .styled.ts modules. Extract the
StyledNotificationBanner definition from the .tsx file and move it to a new
ModalTopContent.styled.ts file, then import it back into the component using the
pattern import * as styledEl from './ModalTopContent.styled' to follow the
coding guidelines and maintain consistency with the project's style
organization.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 10110408-cc87-4091-815d-4c2145b9bbf6

📥 Commits

Reviewing files that changed from the base of the PR and between f7aa9a8 and df71e10.

📒 Files selected for processing (4)
  • apps/cowswap-frontend/src/common/hooks/useNotificationState.ts
  • apps/cowswap-frontend/src/common/pure/CancellationModal/ModalTopContent.tsx
  • apps/cowswap-frontend/src/common/pure/CancellationModal/styled.tsx
  • apps/cowswap-frontend/src/legacy/components/NotificationBanner/index.tsx
💤 Files with no reviewable changes (3)
  • apps/cowswap-frontend/src/legacy/components/NotificationBanner/index.tsx
  • apps/cowswap-frontend/src/common/pure/CancellationModal/styled.tsx
  • apps/cowswap-frontend/src/common/hooks/useNotificationState.ts

@shoom3301

Copy link
Copy Markdown
Collaborator Author

@alfetopito @elena-zh fixed the displaying issue. This was a weird one, because it was not reproducible locally.
The problem was in the legacy and buggy NotificationBanner component. It was working good locally because locally React renders components twice :)


useEffect(() => {
if (isClosed !== null) {
setIsActive((state) => !state)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was a key issue.
Locally, it was triggering twice and ending up with isActive=true.
But not locally it was setting it to false.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But then, is the notification banner being removed completely? Wasn't it in use at all?

@elena-zh elena-zh left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

@fairlighteth fairlighteth left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ AI Review (Codex GPT-5, worked 3m): remove remaining Blocknative build env

Finding: Prod Vercel builds still receive the obsolete Blocknative key

  • Location: .github/workflows/vercel.yml:61
  • This PR removes the Blocknative gas-price consumer and already drops REACT_APP_BLOCKNATIVE_API_KEY from ci.yml and ipfs.yml, but vercel.yml still injects it into production builds.
  • The tracked frontend .env also still documents REACT_APP_BLOCKNATIVE_API_KEY, so future local/prod setup still looks like it needs a Blocknative credential even though the app now uses Blockscout/RPC.

Suggested fix

  • Remove REACT_APP_BLOCKNATIVE_API_KEY from .github/workflows/vercel.yml.
  • Remove the stale Blocknative section from apps/cowswap-frontend/.env.
Review scope and related context

I did not repeat existing review threads, which already cover:

  • Blockscout malformed JSON validation in apps/cowswap-frontend/src/api/gasPrices/index.ts.
  • Debug logs and invalid HTML nesting in ModalTopContent.tsx / NotificationBanner.
  • The notification active-state discussion from the author follow-up.

Automated validation was not run locally because this worktree has no node_modules; the finding is based on current PR-head diff and config inspection.

🤖 Prompt for AI agents
Verify this finding against current PR head. If still valid, remove the remaining Blocknative env wiring only:
- .github/workflows/vercel.yml: remove REACT_APP_BLOCKNATIVE_API_KEY from the build env.
- apps/cowswap-frontend/.env: remove the stale Blocknative key comments.
Keep the change scoped and re-run targeted workflow/config checks if available.

Generated using the pr-review skill from the CoW Protocol skills repo.

@alfetopito alfetopito left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comment that does not create a thread

@fairlighteth

fairlighteth commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

@shoom3301 Build failed? #7646 (comment)

I ran $pr-qa skill but it complains:
chromium-import-failure

QA failed before the app rendered. The current PR head has libs/wallet/src/index.ts:40 exporting reownWagmiConfig from ./reown/init, but libs/wallet/src/reown/init.ts no longer exists. Chromium shows the Vite import-resolution overlay, and pnpm exec nx run cowswap-frontend:build --skip-nx-cache also fails with TS2307: Cannot find module './reown/init'.

@shoom3301

Copy link
Copy Markdown
Collaborator Author

@fairlighteth fixed the build

@fairlighteth

Copy link
Copy Markdown
Contributor
🧪 Scoped browser QA passed: Cloudflare build URL renders at latest PR head
  • Source: Cloudflare swap-dev preview https://c8afc506.swap-dev-5u6.pages.dev at 2d153e5
  • Environment: macOS; Chromium 140.0.7339.16 and Firefox 141.0
  • Wallet: disconnected; no wallet connection or signing exercised
  • Checked scenarios:
    • ✅ Cloudflare preview loaded the Limit Orders route instead of the previous build/runtime failure.
    • ✅ Local production build passed with pnpm exec nx run cowswap-frontend:build --skip-nx-cache.
    • ✅ Mainnet Blockscout gas oracle request returned 200 during the Chromium and Firefox route load.
  • Artifacts:
  • Not checked / follow-up:
    • ⚠️ The full on-chain cancellation Tx cost flow was not exercised in this scoped build-URL rerun.
    • ⚠️ No wallet connection, real order creation, signing, or transaction submission was exercised.
    • ⚠️ GitHub still shows the Cypress check failing; I did not investigate that check in this pass.
  • AI assistance: Codex orchestrated Playwright browser QA and drafted this note from observed artifacts.

How to retest

  • Open: https://c8afc506.swap-dev-5u6.pages.dev/#/1/limit/WETH/COW
  • Expected: Limit Orders route renders with the disconnected wallet shell and no build/runtime overlay.
  • Optional local check: pnpm exec nx run cowswap-frontend:build --skip-nx-cache
Commands + setup
  • git -C /Users/michel/GIT/skills pull --ff-only origin main
  • git fetch origin remove/blocknative:refs/remotes/origin/remove/blocknative --force
  • git pull --ff-only
  • pnpm exec nx run cowswap-frontend:build --skip-nx-cache
  • Playwright Chromium and Firefox against the Cloudflare preview route.
  • Environment normalization: browser locale en-US.

Generated using the pr-qa skill from the CoW Protocol skills repo.

@fairlighteth fairlighteth self-requested a review June 17, 2026 15:13

@fairlighteth fairlighteth left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Manually tested the limit order steps and works correctly.

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.

Blocknative API shutting down June 19, 2026 — drop-in replacement available

4 participants