subscribe("logs") allows developers to subscribe to real-time updates about new event logs on the Polygon blockchain; the application will receive notifications whenever new logs matching the filter are emitted.
Get your own node endpoint today
Start for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.Parameters
-
string— a keyword identifying the type of event to subscribe to,logsin this case. -
object— (optional) the subscription options:fromBlock— an integer that specifies the starting block number from which the logs should be fetched.nullby default.address— the contract address from which the logs should be fetched. It can be a single address or an array of addresses.topics— an array ofDATAtopics. The event topics for which the logs should be fetched. It can be a single topic or an array of topics.
-
function— (optional) a callback function that will be called every time a new event of the specified type is received. This function takes two parameters:errorandresult. The error parameter contains any error that occurred while subscribing to the event, and the result parameter contains the data for the event that was received.
Response
-
array— an array of log objects that match the specified filter:address— the contract address from which the event originated.topics— an array of 32-byte data fields containing indexed event parameters.data— the non-indexed data that was emitted along with the event.blocknumber— the block number in which the event was included.nullif it is pending.transactionhash— the hash of the transaction that triggered the event.nullif pending.transactionindex— the integer index of the transaction within the block’s list of transactions.nullif it is pending.blockhash— the hash of the block in which the event was included.nullif it is pending.logindex— the integer identifying the index of the event within the block’s list of events.nullif pending.removed— the boolean value indicating if the event was removed from the blockchain due to a chain reorganization.Trueif the log was removed.Falseif it is a valid log.
subscribe("logs") code example
Note that subscriptions require a WebSocket connection.
WebSocketProvider and attach a listener to a log filter object:
- The listener callback activates for each new log that matches the filter.
- Wrap the subscription in a
try...catchblock to detect any error during setup. provider.removeAllListeners(filter)removes the listener and stops the subscription.
Use case
A practical use case forsubscribe("logs") is a DApp that continuously listens for new specific event logs and isolates certain fields for analytics purposes. This is useful, for example, to only track events about a specific ERC-721 token.
The following is an implementation of this concept using ethers.js subscriptions, this program will only track the PunkTransfer event from the PolygonPunks collection smart contract.
The PunkTransfer event looks like this in the smart contract:
PunkTransfer events and extract the block number. This can be useful to analyze when tokens are moved.
provider.on method with a WebSocketProvider. This method attaches a listener that is called for each new log matching the filter.
The code defines the handleLogs listener function that is attached to the provider. The handleLogs function is called when a new log matching the filter is emitted, then extracts the block number field and logs it to the console. The subscription setup is wrapped in a try...catch block to detect any error during setup.
The code includes the unsubscribe function that can be implemented in the logic to remove the listener with provider.removeAllListeners and exit the program when a condition is met.
Finally, the code calls the subscribeToLogs function, which creates the subscription and attaches the event listeners. When a new event log is received, the handleLogs function is called to extract the data and log it to the console.