eth_getLogs

eth_getLogs(filterObject) → logArray

필터에 일치하는 로그(이벤트) 배열을 반환합니다. 과거 시점의 컨트랙트 이벤트를 일괄 조회할 때 사용합니다. 실시간 구독이 필요하면 WebSocket으로 eth_subscribelogs 토픽을 사용합니다. 마루는 이더리움의 필터 시맨틱을 그대로 따르며, topic은 이벤트 시그니처 해시와 indexed 파라미터를 bytes32로 인코딩한 값입니다.

파라미터

이름 타입 필수 설명
filter object 필터 객체입니다. 필드: fromBlock / toBlock(16진수 블록 번호 또는 latest / earliest / pending), address(단일 주소 또는 배열 — 해당 컨트랙트의 로그만 조회), topics(최대 4개 원소; 각 원소는 단일 32바이트 topic, OR 매칭용 topic 배열, 또는 모든 값 매칭용 null), blockHash(from/to 범위 대신 단일 블록의 로그만 조회).

반환값

타입: array

로그 객체 배열입니다. 각 로그에는 address, topics(bytes32[]), data(non-indexed 이벤트 파라미터를 ABI 인코딩한 값), blockNumber, blockHash, transactionHash, transactionIndex, logIndex, removed(체인 리오그로 제거된 경우 true — 마루의 즉시 finality 합의에서는 드묾) 필드가 포함됩니다.

에러

코드 이름 설명
-32005 query returned more than N results 마루 RPC 노드는 단일 eth_getLogs 응답에 상한을 둡니다(일반적으로 10,000건). 블록 범위나 주소 필터를 좁히고 여러 번 호출하여 페이지네이션합니다.
-32602 Invalid params 필터 형식이 잘못되었습니다(예: topic 길이 오류, fromBlock/toBlock 형식 오류, blockHash와 블록 범위를 동시에 지정).

예제

ethers.js v6 — ERC-20 Transfer 이벤트 조회

id("Transfer(...)")는 이벤트 시그니처의 keccak256 해시를 계산합니다. 이 값이 topics[0]에 들어갑니다.

import { JsonRpcProvider, id } from "ethers";

const provider = new JsonRpcProvider("https://rpc-testnet.maroo.io");

const transferTopic = id("Transfer(address,address,uint256)");
const logs = await provider.getLogs({
  address: "0xTokenAddress",
  topics:  [transferTopic],
  fromBlock: 1_000_000,
  toBlock:   "latest",
});
console.log(`Found ${logs.length} Transfer events`);

cURL로 단일 블록 조회

Topic 0은 Transfer(address,address,uint256)의 정규 셀렉터로, 모든 EVM 체인에서 동일한 값입니다.

curl -X POST https://rpc-testnet.maroo.io \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_getLogs",
    "params": [{
      "blockHash": "0xBlockHash...",
      "address":   "0xTokenAddress",
      "topics":    ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]
    }],
    "id": 1
  }'
소스: maroo
ESC
검색어를 입력하세요