// Create a new filter
const createFilter = async (filterOptions) => {
const response = await fetch('https://hyperliquid-mainnet.core.chainstack.com/YOUR_ENDPOINT/evm', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'eth_newFilter',
params: [filterOptions],
id: 1
})
});
const data = await response.json();
return data.result;
};
// Monitor specific contract events
const monitorContractEvents = async (contractAddress, eventSignature) => {
const filter = await createFilter({
fromBlock: 'latest',
toBlock: 'latest',
address: contractAddress,
topics: [eventSignature] // topic0 is the event signature hash
});
console.log(`Created filter ${filter} for contract ${contractAddress}`);
return filter;
};
// Create filter for ERC-20 Transfer events
const monitorTokenTransfers = async (tokenAddress, fromAddress = null, toAddress = null) => {
// Transfer event signature: Transfer(address,address,uint256)
const transferSignature = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
const topics = [transferSignature];
// Add indexed parameters (from and to addresses)
if (fromAddress) {
topics.push('0x000000000000000000000000' + fromAddress.slice(2).toLowerCase());
} else {
topics.push(null); // Wildcard for any from address
}
if (toAddress) {
topics.push('0x000000000000000000000000' + toAddress.slice(2).toLowerCase());
}
const filter = await createFilter({
fromBlock: 'latest',
toBlock: 'latest',
address: tokenAddress,
topics: topics
});
return filter;
};
// Monitor multiple contracts
const monitorMultipleContracts = async (addresses, topics = []) => {
const filter = await createFilter({
fromBlock: 'latest',
toBlock: 'latest',
address: addresses,
topics: topics
});
console.log(`Created multi-contract filter: ${filter}`);
return filter;
};
// Historical event filter
const createHistoricalFilter = async (fromBlock, toBlock, contractAddress) => {
const filter = await createFilter({
fromBlock: `0x${fromBlock.toString(16)}`,
toBlock: `0x${toBlock.toString(16)}`,
address: contractAddress,
topics: []
});
console.log(`Created historical filter from block ${fromBlock} to ${toBlock}`);
return filter;
};
// Usage examples
const contractAddress = '0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5';
// Monitor all events from a contract
monitorContractEvents(contractAddress, null).then(filterId => {
console.log('Monitor filter created:', filterId);
});
// Monitor token transfers
monitorTokenTransfers(contractAddress).then(filterId => {
console.log('Transfer filter created:', filterId);
});
// Monitor multiple contracts
const addresses = [
'0xB7C609cFfa0e47DB2467ea03fF3e598bf59361A5',
'0xAnother...Address'
];
monitorMultipleContracts(addresses).then(filterId => {
console.log('Multi-contract filter created:', filterId);
});