eth_getLogs
curl --request POST \
--url https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/ \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "eth_getLogs",
"params": [
{
"fromBlock": "latest",
"toBlock": "latest",
"address": "0x20c0000000000000000000000000000000000000",
"topics": []
}
],
"id": 1
}
'import requests
url = "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload = {
"jsonrpc": "2.0",
"method": "eth_getLogs",
"params": [
{
"fromBlock": "latest",
"toBlock": "latest",
"address": "0x20c0000000000000000000000000000000000000",
"topics": []
}
],
"id": 1
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'eth_getLogs',
params: [
{
fromBlock: 'latest',
toBlock: 'latest',
address: '0x20c0000000000000000000000000000000000000',
topics: []
}
],
id: 1
})
};
fetch('https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'method' => 'eth_getLogs',
'params' => [
[
'fromBlock' => 'latest',
'toBlock' => 'latest',
'address' => '0x20c0000000000000000000000000000000000000',
'topics' => [
]
]
],
'id' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_getLogs\",\n \"params\": [\n {\n \"fromBlock\": \"latest\",\n \"toBlock\": \"latest\",\n \"address\": \"0x20c0000000000000000000000000000000000000\",\n \"topics\": []\n }\n ],\n \"id\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_getLogs\",\n \"params\": [\n {\n \"fromBlock\": \"latest\",\n \"toBlock\": \"latest\",\n \"address\": \"0x20c0000000000000000000000000000000000000\",\n \"topics\": []\n }\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_getLogs\",\n \"params\": [\n {\n \"fromBlock\": \"latest\",\n \"toBlock\": \"latest\",\n \"address\": \"0x20c0000000000000000000000000000000000000\",\n \"topics\": []\n }\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": [
{}
]
}Tempo node API
eth_getLogs | Tempo
Tempo API method that returns an array of logs matching a filter object. This is commonly used to track events emitted by smart contracts.
POST
/
eth_getLogs
curl --request POST \
--url https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/ \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "eth_getLogs",
"params": [
{
"fromBlock": "latest",
"toBlock": "latest",
"address": "0x20c0000000000000000000000000000000000000",
"topics": []
}
],
"id": 1
}
'import requests
url = "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload = {
"jsonrpc": "2.0",
"method": "eth_getLogs",
"params": [
{
"fromBlock": "latest",
"toBlock": "latest",
"address": "0x20c0000000000000000000000000000000000000",
"topics": []
}
],
"id": 1
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'eth_getLogs',
params: [
{
fromBlock: 'latest',
toBlock: 'latest',
address: '0x20c0000000000000000000000000000000000000',
topics: []
}
],
id: 1
})
};
fetch('https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'method' => 'eth_getLogs',
'params' => [
[
'fromBlock' => 'latest',
'toBlock' => 'latest',
'address' => '0x20c0000000000000000000000000000000000000',
'topics' => [
]
]
],
'id' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_getLogs\",\n \"params\": [\n {\n \"fromBlock\": \"latest\",\n \"toBlock\": \"latest\",\n \"address\": \"0x20c0000000000000000000000000000000000000\",\n \"topics\": []\n }\n ],\n \"id\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_getLogs\",\n \"params\": [\n {\n \"fromBlock\": \"latest\",\n \"toBlock\": \"latest\",\n \"address\": \"0x20c0000000000000000000000000000000000000\",\n \"topics\": []\n }\n ],\n \"id\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tempo-mainnet.core.chainstack.com/c3ce2925b51f1ed18719fe8a23bbdccf/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"method\": \"eth_getLogs\",\n \"params\": [\n {\n \"fromBlock\": \"latest\",\n \"toBlock\": \"latest\",\n \"address\": \"0x20c0000000000000000000000000000000000000\",\n \"topics\": []\n }\n ],\n \"id\": 1\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "<string>",
"id": 123,
"result": [
{}
]
}Tempo API method that returns an array of logs matching a filter object. This is commonly used to track events emitted by smart contracts, such as TIP-20 token transfers.
The following example retrieves Transfer events from the pathUSD token:
Get your own node endpoint todayStart 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
filterObject— the filter object:fromBlock— (optional) block number (hex) or tag to start fromtoBlock— (optional) block number (hex) or tag to end ataddress— (optional) contract address or array of addressestopics— (optional) array of topic filters
Response
result— array of log objects:address— contract address that emitted the logtopics— array of indexed log parametersdata— non-indexed log parametersblockNumber— block number containing the logtransactionHash— hash of the transaction that emitted the loglogIndex— position of the log in the block
eth_getLogs code examples
The following example retrieves Transfer events from the pathUSD token:
const ethers = require('ethers');
const NODE_URL = "CHAINSTACK_NODE_URL";
const provider = new ethers.JsonRpcProvider(NODE_URL);
// pathUSD token address
const PATHUSD = "0x20c0000000000000000000000000000000000000";
// Transfer event topic
const TRANSFER_TOPIC = ethers.id("Transfer(address,address,uint256)");
const getLogs = async () => {
const logs = await provider.getLogs({
address: PATHUSD,
topics: [TRANSFER_TOPIC],
fromBlock: "latest"
});
for (const log of logs) {
console.log(`Transfer in tx: ${log.transactionHash}`);
}
};
getLogs();
from web3 import Web3
node_url = "CHAINSTACK_NODE_URL"
web3 = Web3(Web3.HTTPProvider(node_url))
# pathUSD token address
PATHUSD = "0x20c0000000000000000000000000000000000000"
# Transfer event topic
TRANSFER_TOPIC = web3.keccak(text="Transfer(address,address,uint256)").hex()
logs = web3.eth.get_logs({
'address': PATHUSD,
'topics': [TRANSFER_TOPIC],
'fromBlock': 'latest'
})
for log in logs:
print(f"Transfer in tx: {log['transactionHash'].hex()}")
curl -X POST "CHAINSTACK_NODE_URL" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_getLogs",
"params": [{
"fromBlock": "latest",
"toBlock": "latest",
"address": "0x20c0000000000000000000000000000000000000",
"topics": []
}],
"id": 1
}'
Last modified on July 7, 2026
Was this page helpful?
⌘I