Skip to content

Commit

Permalink
Fix last oracle chain loaded in mem table loader init
Browse files Browse the repository at this point in the history
  • Loading branch information
Neylix committed Oct 15, 2022
1 parent 2010acf commit ad91f88
Showing 1 changed file with 40 additions and 7 deletions.
47 changes: 40 additions & 7 deletions lib/archethic/oracle_chain/mem_table_loader.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
defmodule Archethic.OracleChain.MemTableLoader do
@moduledoc false

alias Archethic.Crypto

alias Archethic.OracleChain
alias Archethic.OracleChain.MemTable

alias Archethic.TransactionChain
Expand All @@ -17,15 +20,31 @@ defmodule Archethic.OracleChain.MemTableLoader do
end

def init(_) do
TransactionChain.list_transactions_by_type(:oracle_summary, [
:address,
:type,
data: [:content],
validation_stamp: [:timestamp]
])
|> Stream.each(&load_transaction(&1, true))
transactions_stream =
TransactionChain.list_transactions_by_type(:oracle_summary, [
:address,
:type,
data: [:content],
validation_stamp: [:timestamp]
])

Stream.each(transactions_stream, &load_transaction(&1, true))
|> Stream.run()

# Load last oracle chain from db
case Enum.take(transactions_stream, -1) do
[] ->
:ignore

[%Transaction{validation_stamp: %ValidationStamp{timestamp: last_summary_timestamp}}] ->
OracleChain.next_summary_date(last_summary_timestamp)
|> Crypto.derive_oracle_address(0)
|> TransactionChain.get_last_address()
|> elem(0)
|> get_chain()
|> Enum.each(&load_transaction(&1, true))
end

{:ok, []}
end

Expand Down Expand Up @@ -87,4 +106,18 @@ defmodule Archethic.OracleChain.MemTableLoader do
end)
end)
end

defp get_chain(address, opts \\ [], acc \\ []) do
case TransactionChain.get(
address,
[:address, :type, data: [:content], validation_stamp: [:timestamp]],
opts
) do
{transactions, false, _paging_state} ->
acc ++ transactions

{transactions, true, paging_state} ->
get_chain(address, [paging_state: paging_state], acc ++ transactions)
end
end
end

0 comments on commit ad91f88

Please sign in to comment.