Skip to content

Commit 48be71c

Browse files
committed
feat: agg_proofs relation by uuid instead of merkle root
1 parent c4f2633 commit 48be71c

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
@@ -3,17 +3,18 @@ defmodule AggregatedProofs do
33
use Ecto.Schema
44
import Ecto.Changeset
55

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

1415
has_many(:proofs_agg_mode, AggregationModeProof,
15-
foreign_key: :merkle_root,
16-
references: :merkle_root
16+
foreign_key: :agg_proof_id,
17+
references: :id
1718
)
1819

1920
timestamps()
@@ -25,6 +26,7 @@ defmodule AggregatedProofs do
2526
def changeset(aggregated_proof, attrs) do
2627
aggregated_proof
2728
|> cast(attrs, [
29+
:id,
2830
:merkle_root,
2931
:blob_versioned_hash,
3032
:block_number,
@@ -40,13 +42,13 @@ defmodule AggregatedProofs do
4042
:tx_hash,
4143
:number_of_proofs
4244
])
43-
|> unique_constraint(:merkle_root)
45+
|> unique_constraint(:id)
4446
end
4547

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

49-
case Explorer.Repo.get_by(AggregatedProofs, merkle_root: agg_proof.merkle_root) do
51+
case Explorer.Repo.get_by(AggregatedProofs, block_number: agg_proof.block_number) do
5052
nil ->
5153
Explorer.Repo.insert(changeset)
5254

explorer/lib/explorer/models/aggregation_mode_proof.ex

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

1313
belongs_to(:aggregated_proof, AggregatedProof,
1414
define_field: false,
15-
foreign_key: :merkle_root,
16-
references: :merkle_root,
17-
type: :string
15+
foreign_key: :agg_proof_id,
16+
references: :id,
17+
type: :binary_id
1818
)
1919

2020
timestamps()
2121
end
2222

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

2929
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)