Arc Mainnet DEX Trades API & Streams
Query and stream DEX trades on Arc mainnet with Bitquery GraphQL. Arc is Circle's EVM Layer 1 for stablecoin finance, exposed as EVM(network: arc). The DEXTrades and DEXTradeByTokens cubes return decoded Uniswap v4, v3 and v2 swaps with buy and sell sides, USD values, the DEX contract, the trader and the transaction.
Every query on this page was executed against the production endpoint before publishing. Change query to subscription on any of them to stream the same rows over WebSocket.
AmountInUSDandPriceInUSDreturned populated values.Trading.Tradesincluded Arc underPair.Market.Network: "Arc", with token IDs beginningbid:arc:.- Only the realtime EVM path answered. Leave the
datasetargument out untilcombinedandarchiveare enabled.
To query or stream data outside the Bitquery IDE, you need an API access token.
Follow the steps here: How to generate Bitquery API token ➤
- Arc Mainnet API overview — network facts, every cube and stream in one place
- Arc Mainnet Transfers API
- Arc Mainnet Events API — Uniswap v4
Initialize, v3PoolCreated, v2PairCreated - Arc Mainnet Balances API
- DEXTrades vs DEXTradeByTokens vs Trading.Trades
- EVM DEXTrades schema
On this page: Identifiers · Stream · Latest · By token · By DEX · By pool · By trader · OHLCV · Latest price · Top tokens · DEX breakdown · Top traders · FAQ
Network and example addresses
| Item | Value |
|---|---|
| Network argument | EVM(network: arc) |
| Chain ID | 5042 |
| Native gas token | USDC. Appears as SmartContract: "0x0000000000000000000000000000000000000000" with symbol USDC and name USD Coin in DEXTrades and DEXTradeByTokens; as "0x" with Currency.Native: true in Transfers and Balances |
| USDC (ERC-20 interface, 6 decimals) | 0x3600000000000000000000000000000000000000 |
| EURC (6 decimals) | 0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1 |
| MOCHI (live launch-day example) | 0x9f367725848793152175ff077e885a32430dfaa7 |
| Uniswap v4 PoolManager | 0x8366a39cc670b4001a1121b8f6a443a643e40951, the Dex.SmartContract on every v4 trade |
| Uniswap v3 BUILDOG/USDC pool | 0x01be77f0a364bddafd34521892ea4745ebf9b5a2 |
| Uniswap v2 ARCAT/USDC pair | 0xcf924acee7eb1f169a922bf19b0a732810971985 |
These are live launch-day examples. Token and pool activity changes, so swap in the asset, pool or trader you care about.
On v4 every pool lives inside the singleton PoolManager, so Trade.Dex.SmartContract is the PoolManager and Trade.Dex.Pair.SmartContract is the zero address. Identify a v4 pool by its two currencies, or by the id argument of the Initialize event on the Events API.
Stream real-time trades
▶️ Run in IDE
One WebSocket delivers every swap on the network as blocks are indexed, with both sides, the protocol and the trader.
subscription {
EVM(network: arc) {
DEXTrades {
Block {
Number
Time
}
Transaction {
Hash
From
}
Trade {
Dex {
ProtocolFamily
ProtocolName
SmartContract
}
Buy {
Amount
Buyer
Seller
Price
Currency {
Name
Symbol
SmartContract
}
}
Sell {
Amount
Buyer
Seller
Price
Currency {
Name
Symbol
SmartContract
}
}
}
}
}
}
Latest trades
▶️ Run in IDE
The most recent swaps on the network. Trade.Buy is the currency the trader received and Trade.Sell is what they paid.
{
EVM(network: arc) {
DEXTrades(
limit: {count: 20}
orderBy: {descending: Block_Time}
) {
Block {
Number
Time
}
Transaction {
Hash
From
}
Trade {
Dex {
ProtocolName
SmartContract
}
Buy {
Amount
Currency {
Symbol
SmartContract
}
Price
}
Sell {
Amount
Currency {
Symbol
SmartContract
}
}
}
}
}
}
Trades of a token
▶️ Run in IDE
DEXTradeByTokens returns one row per token side of every trade, so a token filter catches it whether it was bought or sold. Side.Type says which direction the trade was from the token's point of view.
{
EVM(network: arc) {
DEXTradeByTokens(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {
Trade: {
Currency: {SmartContract: {is: "0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1"}}
}
}
) {
Block {
Time
}
Transaction {
Hash
}
Trade {
Amount
Price
Currency {
Symbol
}
Side {
Type
Amount
Currency {
Symbol
SmartContract
}
}
Dex {
ProtocolName
}
}
}
}
}
Trades on one DEX
▶️ Run in IDE
Filter by Dex.ProtocolName. Values seen on Arc mainnet are uniswap_v4, uniswap_v3, uniswap_v2, curve_v1 and aerodrome_v1.
{
EVM(network: arc) {
DEXTrades(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {Trade: {Dex: {ProtocolName: {is: "uniswap_v4"}}}}
) {
Block {
Time
}
Transaction {
Hash
}
Trade {
Dex {
ProtocolName
SmartContract
}
Buy {
Amount
Currency {
Symbol
SmartContract
}
}
Sell {
Amount
Currency {
Symbol
SmartContract
}
}
}
}
}
}
Trades in one pool
▶️ Run in IDE
For Uniswap v2 and v3 the pool has its own address in Trade.Dex.SmartContract. This example reads a live v3 BUILDOG/USDC pool.
{
EVM(network: arc) {
DEXTrades(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {
Trade: {
Dex: {SmartContract: {is: "0x01be77f0a364bddafd34521892ea4745ebf9b5a2"}}
}
}
) {
Block {
Time
}
Transaction {
Hash
From
}
Trade {
Buy {
Amount
Currency {
Symbol
}
Price
}
Sell {
Amount
Currency {
Symbol
}
}
}
}
}
}
Trades of a wallet
▶️ Run in IDE
Transaction.From is the externally owned account that signed the swap. Trade.Buy.Buyer and Trade.Sell.Seller are the addresses that received and paid the tokens, which can be a router rather than the signer.
{
EVM(network: arc) {
DEXTrades(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {
Transaction: {From: {is: "0xada5bb90d0de0bd1b6f3938708f49295a8d1f7cb"}}
}
) {
Block {
Time
}
Transaction {
Hash
}
Trade {
Dex {
ProtocolName
}
Buy {
Amount
Currency {
Symbol
}
Buyer
}
Sell {
Amount
Currency {
Symbol
}
Seller
}
}
}
}
}
OHLCV candles for a token
▶️ Run in IDE
Hourly candles for EURC priced in ERC-20 USDC. Block.Time(interval: ...) buckets the trades; open and close take the price at the lowest and highest block in the bucket. Change count and in for other intervals.
{
EVM(network: arc) {
DEXTradeByTokens(
limit: {count: 24}
orderBy: {descendingByField: "Block_Time"}
where: {
Trade: {
Currency: {SmartContract: {is: "0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1"}}
Side: {
Currency: {SmartContract: {is: "0x3600000000000000000000000000000000000000"}}
}
}
}
) {
Block {
Time(interval: {in: hours, count: 1})
}
volume: sum(of: Trade_Amount)
Trade {
high: Price(maximum: Trade_Price)
low: Price(minimum: Trade_Price)
open: Price(minimum: Block_Number)
close: Price(maximum: Block_Number)
}
count
}
}
}
Latest price of a token
▶️ Run in IDE
The price of the most recent EURC trade against ERC-20 USDC. Trade.PriceInUSD is populated on Arc mainnet.
{
EVM(network: arc) {
DEXTradeByTokens(
limit: {count: 1}
orderBy: {descending: Block_Time}
where: {
Trade: {
Currency: {SmartContract: {is: "0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1"}}
Side: {
Currency: {SmartContract: {is: "0x3600000000000000000000000000000000000000"}}
}
}
}
) {
Block {
Time
}
Trade {
Price
PriceInUSD
Currency {
Symbol
}
Side {
Currency {
Symbol
}
}
Dex {
ProtocolName
}
}
}
}
}
Most traded tokens
▶️ Run in IDE
Tokens ranked by trade count over the last 24 hours. Native USDC is the quote on most pools, so it tops the list; the rows under it are the tokens people actually trade.
{
EVM(network: arc) {
DEXTradeByTokens(
limit: {count: 20}
orderBy: {descendingByField: "count"}
where: {Block: {Time: {since_relative: {hours_ago: 24}}}}
) {
Trade {
Currency {
Symbol
Name
SmartContract
}
}
count
volume: sum(of: Trade_Amount)
traders: uniq(of: Transaction_From)
}
}
}
Trade count by DEX protocol
▶️ Run in IDE
Which DEXes carry mainnet volume. Uniswap v4 led the launch-day check.
{
EVM(network: arc) {
DEXTrades(
limit: {count: 10}
orderBy: {descendingByField: "count"}
where: {Block: {Time: {since_relative: {hours_ago: 24}}}}
) {
Trade {
Dex {
ProtocolFamily
ProtocolName
}
}
count
pools: uniq(of: Trade_Dex_SmartContract)
traders: uniq(of: Transaction_From)
}
}
}
Most active traders
▶️ Run in IDE
Signers ranked by swap count. The top rows often include bots and routers, so inspect the address before treating it as a person.
{
EVM(network: arc) {
DEXTrades(
limit: {count: 20}
orderBy: {descendingByField: "count"}
where: {Block: {Time: {since_relative: {hours_ago: 24}}}}
) {
Transaction {
From
}
count
tokens: uniq(of: Trade_Buy_Currency_SmartContract)
}
}
}
FAQ
Are AmountInUSD and PriceInUSD available?
Yes. Both returned populated values in the production check on 16 September 2026. Trade.Price remains the direct ratio between the two sides.
Can I use Trading.Trades with bid:arc?
Yes. Filter Pair.Market.Network by Arc. Use the chain-level cubes when you also need EVM calls, logs or transfers.
How far back does the data go?
Only the realtime path answered on 16 September 2026. Measure it with Block { Time(minimum: Block_Time) } rather than assuming a depth. Retry archive and combined before using them.
Why does native USDC show two different contract addresses?
The native gas token is USDC. The trade cubes report it as the zero address with name USD Coin; Transfers and Balances report it as "0x" with Currency.Native: true. The ERC-20 interface at 0x3600000000000000000000000000000000000000 is a separate currency with 6 decimals and name USDC.
Do Solidity selectors and topic hashes work the same as on Ethereum? Yes. Arc is EVM-compatible, so ABIs, 4-byte selectors and topic0 hashes carry over unchanged.
Ready to run this in production?
Get an API key and run these queries in minutes, or talk to us about plans and enterprise delivery.