@bcoders.gr/provider
Version:
High-Performance IPC Ethereum Provider with Advanced Optimizations
164 lines (126 loc) • 4.04 kB
Markdown
High-Performance IPC Ethereum Provider with Advanced Optimizations
- 🚀 **High Performance**: Optimized buffer handling and JSON parsing
- 🔄 **Auto Reconnection**: Exponential backoff reconnection strategy
- ⏰ **Auto Disconnect**: Automatically disconnects after inactivity to save resources
- 💾 **Smart Caching**: LRU cache with TTL for read-only methods
- 📦 **Batch Processing**: Request batching for better throughput
- 🔍 **Comprehensive Monitoring**: Detailed metrics and health checks
- 🛡️ **Robust Error Handling**: Graceful error handling and recovery
- 🏊 **Memory Efficient**: Object pooling and buffer management
```bash
npm install @bcoders/provider
```
```javascript
import { IPCProvider } from '@bcoders/provider';
// Create provider instance
const provider = new IPCProvider('/path/to/geth.ipc', {
cacheEnabled: true,
batchRequests: true,
autoReconnect: true
});
// Connect to IPC
await provider.connect();
// Use Ethereum methods
const balance = await provider.getBalance('0x...');
const blockNumber = await provider.getBlockNumber();
const gasPrice = await provider.getGasPrice();
// NEW: Use specialized methods for log filtering
// Get mint events from a Uniswap V2 pair
const mintLogs = await provider.getMint(
'0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852', // pair address
18900000, // from block
'latest' // to block
);
// Get custom past logs (e.g., Transfer events)
const transferLogs = await provider.getPastLogs(
'0xa0b86a33e6441b8bb96c0e6a3d8c5b6c7d7e8e9d', // token address
19000000, // from block
'latest', // to block
['0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'] // Transfer topic
);
// Convert values to hex format
const hexBlock = provider.toHex(19000000); // '0x1216c20'
// Health check
const health = await provider.healthCheck();
console.log(health);
// Get performance metrics
provider.printMetricsSummary();
// Disconnect when done
await provider.disconnect();
```
```javascript
const options = {
// Performance settings
requestTimeout: 30000,
bufferSize: 2 * 1024 * 1024, // 2MB
poolSize: 100,
// Caching
cacheEnabled: true,
cacheTTL: 5000,
cacheSize: 1000,
// Batching
batchRequests: false,
batchSize: 10,
batchTimeout: 10,
// Connection management
autoReconnect: true,
maxRetries: 3,
retryDelay: 1000,
maxRetryDelay: 10000,
backoffMultiplier: 2,
// Auto-disconnect
autoDisconnectEnabled: true,
autoDisconnectTimeout: 5 * 60 * 1000, // 5 minutes
// Logging
logger: console,
logResponseTime: true
};
```
- `eth_blockNumber`
- `eth_getBalance`
- `eth_getCode`
- `eth_getTransaction*`
- `eth_getBlock*`
- `eth_sendTransaction`
- `eth_sendRawTransaction`
- `eth_call`
- `eth_estimateGas`
- `eth_gasPrice`
- And many more...
- `evm_mine`
- `evm_snapshot`
- `evm_revert`
- `anvil_reset`
- `debug_traceTransaction`
- `getMint(address, fromBlock, toBlock)` - Get mint events for a specific contract
- `getPastLogs(address, fromBlock, toBlock, topics)` - Get past logs with custom topics
- `toHex(value)` - Convert numbers to hex format
- **Buffer Optimization**: Uses native Buffer operations for efficient data handling
- **JSON Parsing**: Optimized JSON boundary detection and parsing
- **Connection Pooling**: Maintains persistent connections with optimized socket settings
- **Request Pooling**: Object pooling for memory efficiency
- **Smart Caching**: Caches read-only method results with LRU eviction
- **Batch Processing**: Groups multiple requests for better throughput
```javascript
// Get detailed metrics
const metrics = provider.getMetrics();
// Print summary
provider.printMetricsSummary();
// Health check
const health = await provider.healthCheck();
```
MIT
pagovitsa