Skip to content

Commit 95337bf

Browse files
committed
feat: foreign key for agg mode proofs
1 parent 22a493f commit 95337bf

File tree

2 files changed

+33
-12
lines changed

2 files changed

+33
-12
lines changed

explorer/lib/explorer/models/aggregated_proofs.ex

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ defmodule AggregatedProofs do
1010
field(:status, :integer)
1111
field(:tx_hash, :string)
1212
field(:blob_versioned_hash, :string)
13-
field(:blob_data, :binary)
1413
field(:number_of_proofs, :integer)
1514
field(:block_number, :integer)
1615

16+
has_many(:proofs_agg_mode, AggregationModeProof)
17+
1718
timestamps()
1819
end
1920

@@ -29,23 +30,22 @@ defmodule AggregatedProofs do
2930
:blob_versioned_hash,
3031
:block_number,
3132
:tx_hash,
32-
:blob_data,
3333
:number_of_proofs
3434
])
3535
|> validate_required([
3636
:number,
37-
:merkle_root,
3837
:status,
39-
:tx_hash,
38+
:merkle_root,
4039
:blob_versioned_hash,
41-
:number_of_proofs,
42-
:block_number
40+
:block_number,
41+
:tx_hash,
42+
:number_of_proofs
4343
])
4444
|> unique_constraint(:number)
4545
end
4646

4747
def insert_or_update(agg_proof) do
48-
changeset = AggregatedProofs.changeset(%AggregatedProofs{}, Map.from_struct(agg_proof))
48+
changeset = AggregatedProofs.changeset(%AggregatedProofs{}, agg_proof)
4949

5050
case Explorer.Repo.get_by(AggregatedProofs, number: agg_proof.number) do
5151
nil ->

explorer/lib/explorer/models/aggregation_mode_proof.ex

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,39 @@ defmodule AggregationModeProof do
99
schema "proofs_agg_mode" do
1010
field(:aggregated_proof_number, :integer)
1111
field(:proof_hash, :string)
12+
field(:index, :integer)
13+
14+
belongs_to(:aggregated_proof, AggregatedProof,
15+
define_field: false,
16+
foreign_key: :aggregated_proof_number,
17+
references: :number,
18+
type: :integer
19+
)
20+
21+
timestamps()
1222
end
1323

1424
def changeset(proof, attrs) do
1525
proof
16-
|> cast(attrs, [:aggregated_proof_number, :proof_hash])
17-
|> validate_required([:aggregated_proof_number, :proof_hash])
26+
|> cast(attrs, [:aggregated_proof_number, :proof_hash, :index])
27+
|> validate_required([:aggregated_proof_number, :proof_hash, :index])
1828
end
1929

20-
def insert_proof(proof) do
30+
def insert_or_update(proof) do
2131
changeset =
22-
AggregationModeProof.changeset(%AggregationModeProof{}, Map.from_struct(proof))
32+
AggregationModeProof.changeset(%AggregationModeProof{}, proof)
33+
34+
case(
35+
Explorer.Repo.get_by(AggregationModeProof, proof_hash: proof.proof_hash, index: proof.index)
36+
) do
37+
nil ->
38+
Explorer.Repo.insert(changeset)
39+
40+
existing_proof ->
41+
"Updating single aggregated proof" |> Logger.debug()
2342

24-
Explorer.Repo.insert(changeset)
43+
Ecto.Changeset.change(existing_proof, changeset.changes)
44+
|> Explorer.Repo.update()
45+
end
2546
end
2647
end

0 commit comments

Comments
 (0)