Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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