Arc Testnet Transactions, Blocks & Fees API
Query and stream transactions, receipts and blocks on Arc testnet with Bitquery GraphQL. The EVM.Transactions and EVM.Blocks cubes on network: arc_testnet cover what a block explorer shows for a hash, an address or a block, with fees in USDC because USDC is the chain's gas token.
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.
Only dataset: realtime exists for Arc testnet; leave the dataset argument out. ValueInUSD, CostInUSD, GasPriceInUSD and the other ...InUSD fields return 0. Fee fields such as Fee.SenderFee are native USDC and populated.
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 Testnet API overview — network facts, every cube and stream in one place
- Arc Testnet Calls API — the call tree inside a transaction
- Arc Testnet Transfers API
- EVM Transactions schema
- EVM Blocks schema
On this page: Stream · Latest · By hash · By address · Failed · Fees · Latest blocks · Block by number · Block stats · FAQ
Stream transactions
▶️ Run in IDE
Every transaction as blocks are indexed. Arc produces a block well under every second, so expect a steady feed.
subscription {
EVM(network: arc_testnet) {
Transactions {
Block {
Number
Time
}
Transaction {
Hash
From
To
Value
Gas
Type
Nonce
}
Receipt {
Status
GasUsed
ContractAddress
}
Fee {
SenderFee
EffectiveGasPrice
}
}
}
}
Latest transactions
▶️ Run in IDE
{
EVM(network: arc_testnet) {
Transactions(
limit: {count: 20}
orderBy: {descending: Block_Time}
) {
Block {
Number
Time
}
Transaction {
Hash
From
To
Value
Type
}
Receipt {
Status
GasUsed
}
Fee {
SenderFee
}
}
}
}
Transaction by hash
▶️ Run in IDE
The equivalent of eth_getTransactionByHash plus eth_getTransactionReceipt in one call. The example hash is a live USDC value transfer; replace it with any recent hash.
{
EVM(network: arc_testnet) {
Transactions(
where: {
Transaction: {
Hash: {is: "0x9be99a14a7db15fae9b78c68c3bfb41cfd67654a7b8cdf499f56e712d8349fe1"}
}
}
) {
Block {
Number
Time
Hash
}
Transaction {
Hash
From
To
Value
Gas
GasPrice
GasFeeCap
GasTipCap
Nonce
Type
Index
}
Receipt {
Status
GasUsed
CumulativeGasUsed
ContractAddress
}
Fee {
SenderFee
EffectiveGasPrice
PriorityFeePerGas
Burnt
}
}
}
}
Transactions of an address
▶️ Run in IDE
Sent and received transactions of one address, newest first. This is the explorer's address page.
{
EVM(network: arc_testnet) {
Transactions(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {
any: [
{Transaction: {From: {is: "0x2de8906a641d65d490bc60a4179d961d59742bcb"}}}
{Transaction: {To: {is: "0x2de8906a641d65d490bc60a4179d961d59742bcb"}}}
]
}
) {
Block {
Number
Time
}
Transaction {
Hash
From
To
Value
}
Receipt {
Status
}
Fee {
SenderFee
}
}
}
}
Failed transactions
▶️ Run in IDE
Transactions whose receipt status is 0. Join the reverted calls query on the hash to see the revert reason.
{
EVM(network: arc_testnet) {
Transactions(
limit: {count: 20}
orderBy: {descending: Block_Time}
where: {TransactionStatus: {Success: false}}
) {
Block {
Time
}
Transaction {
Hash
From
To
Gas
}
Receipt {
GasUsed
}
Fee {
SenderFee
}
}
}
}
Gas fees in USDC
▶️ Run in IDE
Because gas is paid in USDC, Fee.SenderFee is already a dollar amount. This gives the average, median and total fee per hour along with the average effective gas price.
{
EVM(network: arc_testnet) {
Transactions(
orderBy: {descendingByField: "Block_Time"}
limit: {count: 24}
) {
Block {
Time(interval: {in: hours, count: 1})
}
count
totalFees: sum(of: Fee_SenderFee)
avgFee: average(of: Fee_SenderFee)
medianFee: median(of: Fee_SenderFee)
avgGasPrice: average(of: Fee_EffectiveGasPrice)
avgGasUsed: average(of: Receipt_GasUsed)
}
}
}
Latest blocks
▶️ Run in IDE
{
EVM(network: arc_testnet) {
Blocks(
limit: {count: 20}
orderBy: {descending: Block_Number}
) {
Block {
Number
Time
Hash
TxCount
GasUsed
GasLimit
BaseFee
Coinbase
}
}
}
}
Change query to subscription and drop limit and orderBy to receive each block header as it is indexed.
Block by number
▶️ Run in IDE
{
EVM(network: arc_testnet) {
Blocks(where: {Block: {Number: {eq: "61696399"}}}) {
Block {
Number
Time
Hash
ParentHash
TxCount
GasUsed
GasLimit
BaseFee
Coinbase
Difficulty
}
}
}
}
Block and throughput statistics
▶️ Run in IDE
Blocks, transactions, average transactions per block and average gas per block for each of the last 24 hours. Divide the block count by 3600 to get blocks per second.
{
EVM(network: arc_testnet) {
Blocks(
orderBy: {descendingByField: "Block_Time"}
limit: {count: 24}
) {
Block {
Time(interval: {in: hours, count: 1})
}
blocks: count
transactions: sum(of: Block_TxCount)
avgTxPerBlock: average(of: Block_TxCount)
avgGasUsed: average(of: Block_GasUsed)
medianGasUsed: median(of: Block_GasUsed)
}
}
}
FAQ
What unit is Fee.SenderFee in?
Native USDC. Arc pays gas in USDC, so a fee of 0.0025 is a quarter of a cent. CostInUSD and GasPriceInUSD are still 0 on testnet because there is no price index, even though the native unit is a dollar.
Why is Transaction.GasPrice 0 while the fee is not?
Arc transactions are EIP-1559 type 2. Read Fee.EffectiveGasPrice, Transaction.GasFeeCap and Transaction.GasTipCap; the legacy GasPrice field is 0 for these.
How fast are blocks? Well under a second on average. Measure the current rate with the block statistics query rather than assuming a fixed interval.
Can I get a transaction's internal calls and logs from here? Use the same hash on the Calls API for the call tree and the Events API for the logs.
Is there a block explorer? Circle's testnet explorer is at testnet.arcscan.app. Bitquery is an indexed data API rather than an explorer, and every explorer lookup on this page can be run in bulk or streamed.
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.