Docs
Docs
Home
Getting Started
Agent Tooling
CLI
Supported Chains
Acala
Aptos
Arbitrum
Arc
Asset Hub
Astar
Avalanche
Base
Berachain
Bifrost
Binance Smart Chain
Bittensor
Blast
Boba Network
Bridge Hub
Celo
Centrifuge
Chiliz
Cronos
Enjin
Ethereum
Etherlink
Flow EVM Gateway
Gnosis
Hydration
Hyperliquid
Immutable
Ink
IoTeX
Kusama
Linea
LISK
Manta Atlantic
Manta Pacific
Mantle
MegaETH
Monad
Movement
Neuroweb
opBNB
Optimism
Plasma
Polkadot
Polygon
Pulsechain
Robinhood
Ronin
Scroll
Sonic
Starknet
Taiko
Tempo
Sui
TRON
Unichain
Viction
World Chain
XDC Network
XX Network
Zetachain
zkSync Era
Zora
Supported ChainsPlasmaJSON-RPC APISmart Contract Methods

eth_uninstallFilter - Plasma RPC Method

Remove a filter on Plasma created by eth_newFilter, eth_newBlockFilter, or eth_newPendingTransactionFilter. Essential for resource cleanup after event monitoring.

Plasma RPC endpoint: endpoint URLs, plans and pricing.

Removes a filter on Plasma that was previously created with eth_newFilter, eth_newBlockFilter, or eth_newPendingTransactionFilter. Should always be called when a filter is no longer needed to free server-side resources.

Why Plasma? Build on an EVM Layer 1 for stablecoin payments with PlasmaBFT consensus and Reth execution with 1 second blocks, XPL gas, full EVM JSON-RPC, and debug plus txpool on Dwellir.

When to Use This Method

eth_uninstallFilter is important for payment app developers, wallet teams, and teams shipping Solidity contracts for dollar transfers:

  • Resource Cleanup - Remove filters you no longer need to free memory and processing on the node
  • Post-Monitoring Teardown - Clean up after event monitoring sessions end or when switching to different filter criteria
  • Preventing Stale Filters - Proactively remove filters before they auto-expire to maintain clean state
  • Connection Management - Uninstall filters before disconnecting to avoid orphaned server-side resources

Best Practices

  • Always uninstall filters in a finally block to guarantee cleanup even when errors occur
  • Filters expire automatically after a period of inactivity, but explicit uninstallation is more reliable
  • Uninstall all active filters when your application shuts down to avoid leaving orphaned resources
JSON-RPC request
{
  "jsonrpc": "2.0",
  "method": "eth_uninstallFilter",
  "params": ["0x1"],
  "id": 1
}

Code Examples

Bash
curl -X POST https://api-plasma-mainnet.n.dwellir.com/YOUR_API_KEY \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_uninstallFilter",
    "params": ["0x1"],
    "id": 1
  }'

Common Use Cases

1. Filter Lifecycle Manager

Create a managed filter that automatically cleans up:

JavaScript
class ManagedFilter {
  constructor(provider) {
    this.provider = provider;
    this.filterId = null;
    this.polling = false;
  }

  async createLogFilter(filterOptions) {
    this.filterId = await this.provider.send('eth_newFilter', [filterOptions]);
    console.log('Filter created:', this.filterId);
    return this.filterId;
  }

  async createBlockFilter() {
    this.filterId = await this.provider.send('eth_newBlockFilter', []);
    return this.filterId;
  }

  async poll() {
    if (!this.filterId) throw new Error('No active filter');
    return await this.provider.send('eth_getFilterChanges', [this.filterId]);
  }

  async destroy() {
    if (this.filterId) {
      const removed = await this.provider.send('eth_uninstallFilter', [this.filterId]);
      console.log(`Filter ${this.filterId} removed: ${removed}`);
      this.filterId = null;
      return removed;
    }
    return false;
  }
}

// Usage
const filter = new ManagedFilter(provider);
await filter.createBlockFilter();

try {
  const changes = await filter.poll();
  console.log('New blocks:', changes);
} finally {
  await filter.destroy();
}

2. Event Monitor with Cleanup

Monitor events for a limited duration, then clean up all filters:

JavaScript
async function monitorEvents(provider, contractAddress, topics, duration = 60000) {
  const filterId = await provider.send('eth_newFilter', [{
    address: contractAddress,
    topics
  }]);

  const allEvents = [];
  const interval = setInterval(async () => {
    const changes = await provider.send('eth_getFilterChanges', [filterId]);
    if (changes.length > 0) {
      allEvents.push(...changes);
      console.log(`Received ${changes.length} new events`);
    }
  }, 2000);

  // Stop monitoring after the specified duration
  await new Promise(r => setTimeout(r, duration));
  clearInterval(interval);

  // Always clean up the filter
  const removed = await provider.send('eth_uninstallFilter', [filterId]);
  console.log(`Monitoring complete. Filter removed: ${removed}. Total events: ${allEvents.length}`);

  return allEvents;
}

3. Bulk Filter Cleanup

Remove all tracked filters during application shutdown:

Python
import requests

class FilterRegistry:
    def __init__(self, rpc_url):
        self.rpc_url = rpc_url
        self.active_filters = []

    def create_filter(self, filter_type='block'):
        method = {
            'block': 'eth_newBlockFilter',
            'pending': 'eth_newPendingTransactionFilter',
        }.get(filter_type, 'eth_newBlockFilter')

        response = requests.post(
            self.rpc_url,
            json={'jsonrpc': '2.0', 'method': method, 'params': [], 'id': 1}
        )
        filter_id = response.json()['result']
        self.active_filters.append(filter_id)
        return filter_id

    def cleanup_all(self):
        removed = 0
        for filter_id in self.active_filters:
            response = requests.post(
                self.rpc_url,
                json={'jsonrpc': '2.0', 'method': 'eth_uninstallFilter', 'params': [filter_id], 'id': 1}
            )
            if response.json().get('result'):
                removed += 1
        print(f'Cleaned up {removed}/{len(self.active_filters)} filters')
        self.active_filters.clear()

Error Handling

Error CodeDescriptionSolution
-32602Invalid paramsEnsure the filter ID is a valid hex string
-32603Internal errorNode may be starting up - retry after delay
-32005Rate limit exceededImplement backoff between cleanup calls
false resultFilter not foundFilter already expired or was already removed - safe to ignore

Related Methods

  • eth_newFilter - Create a log event filter
  • eth_newBlockFilter - Create a new block filter
  • eth_newPendingTransactionFilter - Create a pending transaction filter
  • eth_getFilterChanges - Poll a filter for new results
  • eth_getFilterLogs - Get all logs matching a filter

eth_getFilterLogs

Returns all logs matching a previously created filter on Plasma. Essential for initial log retrieval, backfilling event data, and one-time historical queries for stablecoin transfers, payment apps, and wallets that need 1 second confirmation.

eth_newBlockFilter

Create a filter for new block notifications on Plasma. Essential for block monitoring, chain progression tracking, and reorg detection for stablecoin transfers, payment apps, and wallets that need 1 second confirmation.

On this page

When to Use This MethodBest PracticesCode ExamplesCommon Use Cases1. Filter Lifecycle Manager2. Event Monitor with Cleanup3. Bulk Filter CleanupError HandlingRelated Methods