Skip to content

Commit d0a6015

Browse files
committed
Merge branch 'feat/aggregation-mode-explorer' into feat/aggregation-mode-explorer-views
2 parents 68c2fd0 + 48be71c commit d0a6015

4 files changed

Lines changed: 33 additions & 25 deletions

File tree

explorer/lib/explorer/models/aggregated_proofs.ex

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,18 @@ defmodule AggregatedProofs do
44
import Ecto.Query
55
import Ecto.Changeset
66

7-
@primary_key {:merkle_root, :string, autogenerate: false}
7+
@primary_key {:id, :binary_id, autogenerate: true}
88
schema "aggregated_proofs" do
9+
field(:merkle_root, :string)
910
field(:blob_versioned_hash, :string)
1011
field(:block_number, :integer)
1112
field(:block_timestamp, :utc_datetime)
1213
field(:tx_hash, :string)
1314
field(:number_of_proofs, :integer)
1415

1516
has_many(:proofs_agg_mode, AggregationModeProof,
16-
foreign_key: :merkle_root,
17-
references: :merkle_root
17+
foreign_key: :agg_proof_id,
18+
references: :id
1819
)
1920

2021
timestamps()
@@ -26,6 +27,7 @@ defmodule AggregatedProofs do
2627
def changeset(aggregated_proof, attrs) do
2728
aggregated_proof
2829
|> cast(attrs, [
30+
:id,
2931
:merkle_root,
3032
:blob_versioned_hash,
3133
:block_number,
@@ -41,13 +43,13 @@ defmodule AggregatedProofs do
4143
:tx_hash,
4244
:number_of_proofs
4345
])
44-
|> unique_constraint(:merkle_root)
46+
|> unique_constraint(:id)
4547
end
4648

4749
def insert_or_update(agg_proof) do
4850
changeset = AggregatedProofs.changeset(%AggregatedProofs{}, agg_proof)
4951

50-
case Explorer.Repo.get_by(AggregatedProofs, merkle_root: agg_proof.merkle_root) do
52+
case Explorer.Repo.get_by(AggregatedProofs, block_number: agg_proof.block_number) do
5153
nil ->
5254
Explorer.Repo.insert(changeset)
5355

explorer/lib/explorer/models/aggregation_mode_proof.ex

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,24 @@ defmodule AggregationModeProof do
77
# Different from proofs.ex (we could use the same but the hashes are constructed different)
88
@primary_key {:id, :id, autogenerate: true}
99
schema "proofs_agg_mode" do
10-
field(:merkle_root, :string)
10+
field(:agg_proof_id, :binary_id)
1111
field(:proof_hash, :string)
1212
field(:index, :integer)
1313

1414
belongs_to(:aggregated_proof, AggregatedProof,
1515
define_field: false,
16-
foreign_key: :merkle_root,
17-
references: :merkle_root,
18-
type: :string
16+
foreign_key: :agg_proof_id,
17+
references: :id,
18+
type: :binary_id
1919
)
2020

2121
timestamps()
2222
end
2323

2424
def changeset(proof, attrs) do
2525
proof
26-
|> cast(attrs, [:merkle_root, :proof_hash, :index])
27-
|> validate_required([:merkle_root, :proof_hash, :index])
26+
|> cast(attrs, [:agg_proof_id, :proof_hash, :index])
27+
|> validate_required([:agg_proof_id, :proof_hash, :index])
2828
end
2929

3030
def insert_or_update(proof) do

explorer/lib/explorer/periodically.ex

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ defmodule Explorer.Periodically do
2222
:timer.send_interval(one_second * 12, :batches)
2323
# every 1 hour
2424
:timer.send_interval(one_second * seconds_in_an_hour, :restakings)
25-
:timer.send_interval(one_second * seconds_in_an_hour, :aggregated_proofs)
25+
:timer.send_interval(one_second * 12, :aggregated_proofs)
2626
end
2727

2828
# Reads and process last blocks for operators and restaking changes
@@ -74,7 +74,7 @@ defmodule Explorer.Periodically do
7474
end
7575

7676
def handle_info(:aggregated_proofs, state) do
77-
read_block_qty = 310
77+
read_block_qty = 50000
7878
latest_block_number = AlignedLayerServiceManager.get_latest_block_number()
7979
read_from_block = max(0, latest_block_number - read_block_qty)
8080

@@ -105,13 +105,18 @@ defmodule Explorer.Periodically do
105105
end)
106106

107107
# Store aggregated proofs to db
108-
proofs
109-
|> Enum.zip(proof_hashes)
110-
|> Enum.each(fn {agg_proof, hashes} ->
111-
agg_proof
112-
|> Map.merge(%{number_of_proofs: length(hashes)})
113-
|> AggregatedProofs.insert_or_update()
114-
end)
108+
proofs =
109+
proofs
110+
|> Enum.zip(proof_hashes)
111+
|> Enum.map(fn {agg_proof, hashes} ->
112+
agg_proof =
113+
agg_proof
114+
|> Map.merge(%{number_of_proofs: length(hashes)})
115+
116+
{:ok, %{id: id}} = AggregatedProofs.insert_or_update(agg_proof)
117+
118+
Map.merge(agg_proof, %{id: id})
119+
end)
115120

116121
# Store each individual proof
117122
proofs
@@ -121,7 +126,7 @@ defmodule Explorer.Periodically do
121126
|> Enum.with_index()
122127
|> Enum.each(fn {hash, index} ->
123128
AggregationModeProof.insert_or_update(%{
124-
merkle_root: agg_proof.merkle_root,
129+
agg_proof_id: agg_proof.id,
125130
proof_hash: "0x" <> List.to_string(hash),
126131
index: index
127132
})

explorer/priv/repo/migrations/20250407002009_create_aggregated_proofs.exs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ defmodule Explorer.Repo.Migrations.CreateAggregatedProofs do
33

44
def change do
55
create table(:aggregated_proofs, primary_key: false) do
6-
add(:merkle_root, :string, primary_key: true)
6+
add(:id, :binary_id, primary_key: true)
7+
add(:merkle_root, :string)
78
add(:tx_hash, :string)
89
add(:blob_versioned_hash, :string)
910
add(:number_of_proofs, :integer)
@@ -15,10 +16,10 @@ defmodule Explorer.Repo.Migrations.CreateAggregatedProofs do
1516

1617
create table(:proofs_agg_mode) do
1718
add(
18-
:merkle_root,
19+
:agg_proof_id,
1920
references(:aggregated_proofs,
20-
column: :merkle_root,
21-
type: :string,
21+
column: :id,
22+
type: :binary_id,
2223
on_delete: :delete_all
2324
)
2425
)

0 commit comments

Comments
 (0)