Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion web/lib/zk_arcade/nft_poller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ defmodule ZkArcade.NftPoller do
true ->
with {:ok, latest_hex} <- Ethereumex.HttpClient.eth_block_number(url: rpc_url),
latest_block <- hex_to_integer(latest_hex) do
from_block = max(from_block - 10, 0)
process_range(contract_address, from_block, latest_block, state)
else
error ->
Expand Down Expand Up @@ -82,7 +83,7 @@ defmodule ZkArcade.NftPoller do
end
end

defp fetch_logs(contract_address, from_block, to_block) do
def fetch_logs(contract_address, from_block, to_block) do
filter = %{
address: contract_address,
fromBlock: integer_to_hex(from_block),
Expand Down
2 changes: 2 additions & 0 deletions web/lib/zk_arcade/proofs.ex
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,8 @@ defmodule ZkArcade.Proofs do
{:ok, updated_proof} ->
Logger.info("Updated proof #{proof_id} status to claimed")

ZkArcade.PrometheusMetrics.increment_claims()

broadcast_proof_claimed_notification(updated_proof, address)

{:ok, updated_proof}
Expand Down
19 changes: 9 additions & 10 deletions web/lib/zk_arcade/submission_poller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ defmodule ZkArcade.SubmissionPoller do

with {:ok, latest_block} <- Ethereumex.HttpClient.eth_block_number(url: rpc_url),
to_block <- String.to_integer(String.trim_leading(latest_block, "0x"), 16) do

from_block = max(from_block - 10, 0) # Add a buffer of 10 block to avoid possible missing events
Logger.info("Polling Claim Events from block #{from_block} to #{to_block}")

with {:ok, logs} <- fetch_logs(from_block, to_block, contract_address) do
Expand Down Expand Up @@ -66,7 +66,7 @@ defmodule ZkArcade.SubmissionPoller do
# This function fetches logs from the blockchain based on the specified block range and contract address.
# Constructs a filter for the logs and uses the Ethereumex HTTP client to retrieve them. If successful,
# returns the logs; otherwise, it returns an error.
defp fetch_logs(from_block, to_block, contract_address) do
def fetch_logs(from_block, to_block, contract_address) do
filter = %{
address: contract_address,
fromBlock: "0x" <> Integer.to_string(from_block, 16),
Expand Down Expand Up @@ -108,14 +108,6 @@ defmodule ZkArcade.SubmissionPoller do
event_proof = ZkArcade.Proofs.get_proofs_by_address(user)
|> Enum.find(fn proof -> proof.level_reached == level and proof.game_config == game_config_hex end)

ZkArcade.PrometheusMetrics.increment_claims()
if event_proof.status != "claimed" do
ZkArcade.Proofs.update_proof_status_claimed(user, event_proof.id, transaction_hash)
Logger.info("Proof for user #{user}, level #{level}, game config #{game_config_hex} marked as claimed.")
else
Logger.info("Proof for user #{user}, level #{level}, game config #{game_config_hex} already set as claimed.")
end

case ZkArcade.Leaderboard.insert_or_update_entry(%{
"user_address" => user,
"score" => score
Expand All @@ -126,6 +118,13 @@ defmodule ZkArcade.SubmissionPoller do
{:error, changeset} ->
Logger.error("Failed to create/update leaderboard entry: #{inspect(changeset)}")
end

if event_proof.status != "claimed" do
ZkArcade.Proofs.update_proof_status_claimed(user, event_proof.id, transaction_hash)
Logger.info("Proof for user #{user}, level #{level}, game config #{game_config_hex} marked as claimed.")
else
Logger.info("Proof for user #{user}, level #{level}, game config #{game_config_hex} already set as claimed.")
end
end

# This function extracts the user address, level, and score from the log data, and determines the event type.
Expand Down