defmodule Ethex.Blockchain.HistoryMethod do
@moduledoc """
Fetches historical records of every block back to genesis.
This is like one large append-only file, and includes all block headers,
block bodies, uncle blocks, and transaction receipts.
"""
alias Ethex.Utils
@doc """
Returns an array of all logs matching a given filter object.
"""
def eth_get_logs(rpc, filter) do
Utils.http_post(rpc, %{method: "eth_getLogs", params: [filter]})
end
@doc """
Creates a filter object, based on filter options,
to notify when the state changes (logs).
To check if the state has changed, call eth_getFilterChanges.
%{
address: ["0x4aF359FC3dd065F185739EC2f8F444A746A912f2"],
fromBlock: "0x16DF136",
toBlock: "latest"
}
"""
def eth_new_filter(rpc, filter) do
Utils.http_post(rpc, %{method: "eth_newFilter", params: [filter]})
end
@doc """
使用 filter_id 获取自 from 以来的 logs
"""
def eth_get_filter_logs(rpc, filter_id) do
Utils.http_post(rpc, %{method: "eth_getFilterLogs", params: [filter_id]})
end
@doc """
Polling method for a filter, which returns an array of logs which occurred since last poll.
REFERENCE: https://ethereum.stackexchange.com/questions/41129/web3-eth-getfilterchangesweb3-filter-filter-id-throws-filter-not-found
"""
def eth_get_filter_changes(rpc, filter_id) do
Utils.http_post(rpc, %{method: "eth_getFilterChanges", params: [filter_id]})
end
end