Skip to content

dApp Testing Proxy: Test Your Front End from Real Country IPs

One fixed exit per test country, so a geo rule, a translation or an RPC error shows up in your test run before your users see it.

Why dApp testing needs a proxy

dApps answer differently by country. Polymarket, for example, documents a geoblock endpoint that returns the detected IP, country and region, lists jurisdictions where its front end and API block orders or allow closing positions only, and tells builders to check the location before placing an order. If your dApp applies rules like these, you only see each region's result from an IP in that region.

Browser automation takes a proxy per browser or per context. Playwright sets a proxy for the whole browser or for each browser context, so one test run can walk through several countries, and it sends a username and password only to HTTP(S) proxies — so generate your IPs with HTTP. Wallet extensions such as MetaMask load only in Chromium started with a persistent context.

Static exits keep results comparable. A static datacenter IP keeps its address for the whole term, so a country that fails today fails on the same IP tomorrow instead of on a random one — the Web3 note in the console calls this setup “Development and tools”.

Recommended dApp testing setup

Scroll horizontally with the arrow keys to read all content.

Recommended dApp testing setup
CriterionChooseWhy
ProductStatic datacenter proxyFixed, fast IPs priced per IP
BillingPer IP and termThe address stays the same until the term ends
How many IPsOne per country you testEach region keeps its own fixed exit
CountryEvery market you serve or restrictNothing is preselected for Web3 — buy one IP per country
ProtocolHTTP (preselected)Playwright sends a username and password only to HTTP(S) proxies
IP changesNever during the termRenew in My assets so runs stay comparable

The “Configure dApp testing proxies” button opens static datacenter proxies for the Web3 use case, billed per IP and term with HTTP selected. Choose the region, the term and Quantity (up to 100 IPs at a time) before you pay.

Which Proxy302 proxy to buy

Scroll horizontally with the arrow keys to read all content.

Which Proxy302 proxy to buy
CriterionStatic ISPRotating residentialDatacenter
What you getA home-broadband IP fixed to you for the whole termHousehold IPs: a sticky session in the country you pick, or rotation on the Budget lineFixed IPs in data centres — the console's fastest and cheapest option
PricePer IP and term, shown in PTC before you pay (1 PTC = US$1)Per GB: Budget US$1.50, Premium US$5.00, from 1 GBPer IP and term, shown in PTC before you pay
Best for dApp testingChecks that must come from a home-broadband addressSpot checks across many countries or cities, paid per GBAutomated suites in CI — one fixed IP per country

Prices in US dollars; you pay with PTC credit (1 PTC = US$1). Top up your wallet, then buy the line you need. Auto-renew isn't available yet, so renew static IPs in My assets before their term ends.

Set up dApp testing proxies in 4 steps

  1. Open the developer setup

    The “Configure dApp testing proxies” button opens Static Datacenter Proxies with the Web3 use case selected. Under Connection settings pick the Region, choose the Term and keep Protocol at HTTP, then click Review cost and generate. Each purchase covers one Region, so repeat it for every country in your test matrix; Quantity adds more IPs in the same country (up to 100 at a time).

    Expected result Your configuration lists Per IP and term, Web3, the region and the protocol.

  2. Copy the connection details

    After payment the console opens My assets. Choose View credentials on the new proxy and copy the endpoint (host:port), username and password.

  3. Put the exits into your test config

    Store each country's host, port, username and password as CI secrets, not in the repository. In Playwright pass them as the proxy option of the browser or of each context, as in the example below.

  4. Run the flow per country

    Run the same flow through every exit. Read the exit country first, then the page status, and keep a screenshot per country so differences are easy to review.

    Expected result Each run reports its exit country, the page status and a screenshot.

Run the same test through each country (Playwright)

Scroll horizontally with the arrow keys to read all content.

// Save as geo-test.mjs and run: node geo-test.mjs
// npm i -D playwright && npx playwright install chromium
import { chromium } from 'playwright'

const DAPP_URL = 'https://app.example.org/' // your dApp
const exits = {
  US: { server: 'http://US_HOST:PORT', username: 'USERNAME', password: 'PASSWORD' },
  DE: { server: 'http://DE_HOST:PORT', username: 'USERNAME', password: 'PASSWORD' },
}

const browser = await chromium.launch()
for (const [expected, proxy] of Object.entries(exits)) {
  const context = await browser.newContext({ proxy })
  const page = await context.newPage()
  await page.goto('https://ipinfo.io/country')
  const seen = (await page.locator('body').innerText()).trim()
  const response = await page.goto(DAPP_URL, { waitUntil: 'domcontentloaded' })
  console.log(`${expected}: exit ${seen}, status ${response?.status()}`)
  await page.screenshot({ path: `dapp-${expected}.png`, fullPage: true })
  await context.close()
}
await browser.close()

Playwright takes a proxy per browser context, so one run walks through several countries. Keep hosts and passwords in your CI secrets and replace DAPP_URL with your dApp.

Quick fixes

Every country shows the same result

Check Does ipinfo.io report the expected country in each context?

Fix Give every context its own proxy option and check that each IP was bought in that country. Rerun with a single exit to isolate it.

407 Proxy Authentication Required

Check Are username and password set as separate proxy fields, copied exactly from View credentials, on an IP generated with HTTP?

Fix Pass them as username and password next to server, as in the example, and copy them again from My assets.

The wallet extension doesn't load in the test

Check Is Chromium started with a persistent context, and not Google Chrome or Edge?

Fix Use the Chromium bundled with Playwright and launchPersistentContext, and pass the proxy in the same launch options.

dApp testing proxy FAQ

Datacenter or residential IPs for dApp testing?

Datacenter for automated suites: one fixed, low-cost IP per country. Use rotating residential for spot checks across many countries or cities, and static ISP when a check must come from a home-broadband address.

Can I test with MetaMask in the loop?

Yes, in Chromium: Playwright loads extensions only with a persistent context, and the browser's proxy then covers MetaMask's traffic too. Use a test wallet with test funds only.

How do I test my dApp's geoblocking?

Run the restricted flow through an IP in each restricted country and in one allowed country, and compare the results. Polymarket's documentation shows the pattern: a geoblock endpoint reports the detected country and region before an order is placed.

Does the proxy change chain data or RPC results?

No. It changes where requests come from, not what a node returns. If results differ by country, check whether your dApp calls different RPC endpoints or APIs per region.

How many IPs do I need?

One per country in your test matrix. Parallel runs in the same country can share that IP as long as you stay within your dApp's and RPC provider's limits.

Sources and verification

5
  1. Polymarket documentation: geographic restrictions

    Official documentation · Checked:

    Documents GET https://polymarket.com/api/geoblock, which returns whether the user is blocked plus the detected IP, country and region; lists jurisdictions blocked completely, close-only on front end and API, and close-only on the front end only; tells builders to verify the location before placing orders.

  2. Playwright documentation: HTTP proxy

    Official documentation · Checked:

    Shows a proxy set for the whole browser or per browser context, with server, username and password; HTTP(S) and SOCKSv5 proxies are supported, and the optional username and password are documented for HTTP(S) proxies.

  3. Playwright documentation: Chrome extensions

    Official documentation · Checked:

    Extensions only work in Chromium launched with a persistent context; Google Chrome and Microsoft Edge removed the command-line flags needed to side-load them.

  4. Proxy302 static datacenter configuration for Web3

    Product observation · Checked:

    Read in the console source on 2026-10-18: for the Web3 use case the static datacenter page bills Per IP and term, offers HTTP or SOCKS5 with HTTP preselected, leaves Region unselected, shows Auto-renew IP as Not yet available and states that static IPs never rotate. Its Web3 note reads “Development and tools: Per IP · HTTP CONNECT by default · 1 fixed exit · adjustable protocol and term”. Since 19 October 2026 the Quantity field takes 1 to 100, and the console buys and charges the IPs one by one.

  5. Proxy302 pricing

    Product observation · Checked:

    Budget rotating residential US$1.50 per GB and Premium US$5.00 per GB, both from 1 GB; account credit in PTC at 1 PTC = US$1.00; static ISP and datacenter leases depend on region, quantity and term and are shown before you pay — as published on the pricing page (checked against the production catalogue on 2026-10-09).

Ready to connect?

Create an account, top up once and pick rotating residential, static ISP or datacenter. Rotating residential exits cover 195+ countries and regions.