eth_getBlockReceipts - Moonbase RPC Method
Return every transaction receipt in a block on Moonbase Alpha. Useful for indexers, analytics pipelines, and event backfills across EVM dApp testing, XCM integration validation, and pre-mainnet deployment verification.
Returns all transaction receipts for a block on Moonbase Alpha. This is more efficient than calling eth_getTransactionReceipt once per transaction when you already know the target block.
Why Moonbase? Build on the Moonbeam testnet for risk-free EVM dApp development and deployment testing with free testnet tokens, full EVM compatibility, XCM testing capabilities, and identical feature set to Moonbeam mainnet.
When to Use This Method
eth_getBlockReceipts is useful for Moonbeam developers, dApp testers, and teams validating cross-chain integrations:
- Indexer Backfills: Pull every receipt in a block with one request instead of looping over transaction hashes
- Event Collection: Scan all logs emitted by a block when building analytics or data pipelines
- Settlement Auditing: Verify every transaction outcome in a target block for EVM dApp testing, XCM integration validation, and pre-mainnet deployment verification
- Operational Debugging: Compare receipt-level gas usage, status, and logs across multiple transactions at once
Common Use Cases
1. Backfill Transaction Receipts for an Indexer
When bootstrapping an indexer for Moonbase Alpha, use eth_getBlockReceipts to backfill historical receipt data efficiently. One RPC call per block replaces dozens of individual eth_getTransactionReceipt calls.
import { JsonRpcProvider } from 'ethers';
const provider = new JsonRpcProvider('https://api-moonbase-alpha.n.dwellir.com/YOUR_API_KEY');
async function backfillReceipts(startBlock, endBlock) {
const receipts = {};
for (let i = startBlock; i <= endBlock; i++) {
const hexBlock = '0x' + i.toString(16);
const results = await provider.send('eth_getBlockReceipts', [hexBlock]);
if (results) {
for (const receipt of results) {
receipts[receipt.transactionHash] = {
block: i,
status: receipt.status === '0x1' ? 'success' : 'failed',
gasUsed: parseInt(receipt.gasUsed, 16),
logCount: receipt.logs.length,
};
}
}
console.log(`Backfilled block ${i}: ${results ? results.length : 0} receipts`);
}
return receipts;
}
backfillReceipts(10000000, 10000050);2. Audit Gas Usage Across All Transactions in a Range
Compute total gas consumption and identify high-gas transactions within a target block range on Moonbase Alpha. This is useful for gas cost analysis and identifying optimization targets in smart contract usage.
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://api-moonbase-alpha.n.dwellir.com/YOUR_API_KEY'))
def audit_gas_usage(block_identifier):
response = w3.provider.make_request(
'eth_getBlockReceipts', [block_identifier]
)
receipts = response.get('result')
if not receipts:
print(f'No receipts found for block {block_identifier}')
return
total_gas = 0
for receipt in receipts:
gas = int(receipt['gasUsed'], 16)
total_gas += gas
if gas > 500_000:
print(f'High gas tx: {receipt["transactionHash"]} used {gas:,} gas')
print(f'Block {block_identifier}: {len(receipts)} txs, '
f'total gas {total_gas:,}')
audit_gas_usage('0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd')3. Extract Contract Creation Events from Deployment Blocks
When monitoring contract deployments on the Moonbeam testnet for risk-free EVM dApp development and deployment testing, use eth_getBlockReceipts to scan for receipts where contractAddress is non-null. This identifies all new contract deployments within a block in a single call.
package main
import (
"context"
"fmt"
"log"
"github.com/ethereum/go-ethereum/rpc"
)
func main() {
client, _ := rpc.Dial("https://api-moonbase-alpha.n.dwellir.com/YOUR_API_KEY")
var receipts []map[string]interface{}
err := client.CallContext(
context.Background(),
&receipts,
"eth_getBlockReceipts",
"0x4e3a3754410177e6937ef1f84bba68ea139e8d1a2258c5f85db9f1cd715a1bdd",
)
if err != nil {
log.Fatal(err)
}
for _, r := range receipts {
contractAddr, ok := r["contractAddress"]
if ok && contractAddr != nil {
fmt.Printf("Contract deployed: %s\n", contractAddr)
fmt.Printf(" Creator: %s\n", r["from"])
fmt.Printf(" Tx hash: %s\n", r["transactionHash"])
}
}
}Best Practices
- Use block hash instead of block number for deterministic results: Hash-based lookups guarantee you are querying the exact block intended, even if chain reorganizations shift block numbers
- Paginate large receipt arrays client-side: Blocks with thousands of transactions return large payloads; paginate processing to avoid memory pressure in your application
- Cache individual receipt data per transaction hash: Receipts are immutable once a block is finalized, so cache them indefinitely for repeated lookups
- For historical blocks, archive nodes may return more complete receipt data: Full nodes may prune older state; archive nodes retain complete historical receipt information
Code Examples
Error Handling
| Error Code | Message | Description |
|---|---|---|
| -32602 | Invalid params | The block identifier is malformed |
| -32000 | Header not found | The referenced block does not exist on the node |
Related Methods
eth_getTransactionReceipt- Retrieve a single transaction receipteth_getBlockByHash- Retrieve the block object itselfeth_getBlockByNumber- Retrieve a block by number or tag
eth_getBlockByHash
Retrieve complete block data by block hash on Moonbase Alpha. Essential for Moonbeam developers, dApp testers, and teams validating cross-chain integrations building on the Moonbeam testnet for risk-free EVM dApp development and deployment testing.
eth_getBalance
Query account balance on Moonbase Alpha. Essential for wallet applications and EVM dApp testing, XCM integration validation, and pre-mainnet deployment verification on the Moonbeam testnet for risk-free EVM dApp development and deployment testing.