diff --git a/lib/archethic/contracts/worker.ex b/lib/archethic/contracts/worker.ex index 1c42478f9..fec26a751 100644 --- a/lib/archethic/contracts/worker.ex +++ b/lib/archethic/contracts/worker.ex @@ -33,7 +33,7 @@ defmodule Archethic.Contracts.Worker do require Logger use GenStateMachine, callback_mode: :handle_event_function - @vsn 2 + @vsn 3 @schedule_trigger {:next_event, :internal, :start_schedulers} @process_trigger {:next_event, :internal, :process_next_trigger} @@ -244,6 +244,15 @@ defmodule Archethic.Contracts.Worker do {:keep_state, new_data, @schedule_and_process_trigger} end + def code_change(2, state, data, _extra) do + new_data = + Map.update!(data, :contract, fn %{transaction: contract_tx} -> + InterpretedContract.from_transaction!(contract_tx) + end) + + {:ok, state, new_data} + end + def code_change(_old_vsn, state, data, _extra), do: {:ok, state, data} # ---------------------------------------------- diff --git a/mix.exs b/mix.exs index 4c3bc65a7..058d79ce3 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Archethic.MixProject do def project do [ app: :archethic, - version: "1.5.14", + version: "1.6.0", build_path: "_build", config_path: "config/config.exs", deps_path: "deps", diff --git a/priv/migration_tasks/prod/1.6.0@summary_cache.exs b/priv/migration_tasks/prod/1.6.0@summary_cache.exs new file mode 100644 index 000000000..cf0e21900 --- /dev/null +++ b/priv/migration_tasks/prod/1.6.0@summary_cache.exs @@ -0,0 +1,78 @@ +defmodule Migration_1_6_0 do + @moduledoc false + + alias Archethic.BeaconChain + alias Archethic.BeaconChain.Slot + alias Archethic.BeaconChain.Subset.SummaryCache + alias Archethic.BeaconChain.Subset.SummaryCacheSupervisor + + alias Archethic.Utils + alias Archethic.Utils.VarInt + + require Logger + + def run() do + summary_date = BeaconChain.next_summary_date(DateTime.utc_now()) + + current_summary_path = Utils.mut_dir("slot_backup-#{DateTime.to_unix(summary_date)}") + + if File.exists?(current_summary_path) do + Logger.info("Migration 1.6.0 starting slot migration") + + processes_pid = start_processes() + + current_summary_path + |> File.read!() + |> deserialize() + |> tap(fn slots -> Logger.info("Migration 1.6.0 #{length(slots)} slots to migrate}") end) + |> Task.async_stream(fn {slot, key} -> SummaryCache.add_slot(slot, key) end) + |> Stream.run() + + maybe_stop_processes(processes_pid) + + Logger.info("Migration 1.6.0 removing old slot_backup") + Utils.mut_dir("slot_backup-*") |> Path.wildcard() |> Enum.each(&File.rm/1) + else + Logger.info("Migration 1.6.0 no slot to migrate") + end + end + + defp start_processes() do + {:ok, pubsub_pid} = + case Process.whereis(Archethic.PubSubRegistry) do + nil -> Registry.start_link(keys: :duplicate, name: Archethic.PubSubRegistry) + _ -> {:ok, nil} + end + + {:ok, supervisor_pid} = + case Process.whereis(SummaryCacheSupervisor) do + nil -> + PartitionSupervisor.start_link( + child_spec: SummaryCache, + name: SummaryCacheSupervisor, + partitions: 64 + ) + + _ -> + {:ok, nil} + end + + {pubsub_pid, supervisor_pid} + end + + defp maybe_stop_processes({pubsub_pid, supervisor_pid}) do + if is_pid(supervisor_pid), do: Supervisor.stop(supervisor_pid) + if is_pid(pubsub_pid), do: Supervisor.stop(pubsub_pid) + end + + defp deserialize(rest, acc \\ []) + defp deserialize(<<>>, acc), do: acc + + defp deserialize(rest, acc) do + {slot_size, rest} = VarInt.get_value(rest) + <> = rest + {slot, _} = Slot.deserialize(slot_bin) + {node_public_key, rest} = Utils.deserialize_public_key(rest) + deserialize(rest, [{slot, node_public_key} | acc]) + end +end diff --git a/rel/appups/archethic/1.5.14_to_1.6.0.appup b/rel/appups/archethic/1.5.14_to_1.6.0.appup new file mode 100644 index 000000000..2923eed4e --- /dev/null +++ b/rel/appups/archethic/1.5.14_to_1.6.0.appup @@ -0,0 +1,757 @@ +{"1.6.0", + [{"1.5.14", + [{add_module,'Elixir.Archethic.Contracts.Interpreter.Conditions.Subjects'}, + {add_module,'Elixir.Archethic.Contracts.Interpreter.Conditions'}, + {add_module,'Elixir.Archethic.Contracts.Interpreter.Constants'}, + {add_module,'Elixir.Archethic.Contracts.Interpreter.Contract'}, + {add_module,'Elixir.Archethic.Contracts.Wasm.IO.JSONRPCImpl'}, + {add_module,'Elixir.Archethic.Contracts.Wasm.IO.Request'}, + {add_module,'Elixir.Archethic.Contracts.Wasm.IO'}, + {add_module,'Elixir.Archethic.Contracts.Wasm.ReadResult'}, + {add_module,'Elixir.Archethic.Contracts.Wasm.Result'}, + {add_module,'Elixir.Archethic.Contracts.Wasm.UpdateResult'}, + {add_module,'Elixir.Archethic.Contracts.WasmContract'}, + {add_module,'Elixir.Archethic.Contracts.WasmImports'}, + {add_module,'Elixir.Archethic.Contracts.WasmMemory'}, + {add_module,'Elixir.Archethic.Contracts.WasmModule'}, + {add_module,'Elixir.Archethic.Contracts.WasmResult'}, + {add_module,'Elixir.Archethic.Contracts.WasmSpec.Function'}, + {add_module,'Elixir.Archethic.Contracts.WasmSpec.Trigger'}, + {add_module,'Elixir.Archethic.Contracts.WasmSpec.UpgradeOpts'}, + {add_module,'Elixir.Archethic.Contracts.WasmSpec'}, + {add_module,'Elixir.Archethic.TransactionChain.TransactionData.Contract'}, + {add_module,'Elixir.Archethic.TransactionChain.TransactionData.VersionedRecipient'}, + {add_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.JsonType'}, + {add_module,'Elixir.ArchethicWeb.API.Types.RecipientArgType'}, + {add_module,'Elixir.Jason.Encoder.Archethic.Contracts.Wasm.Result'}, + {update,'Elixir.Archethic.BeaconChain.SubsetSupervisor',supervisor}, + {load_module,'Elixir.Archethic.Cldr.Currency',brutal_purge,soft_purge,[]}, + {load_module,'Elixir.Archethic.Cldr.Number.Transliterate',brutal_purge, + soft_purge,[]}, + {load_module,'Elixir.Archethic.Contracts.Contract.State',brutal_purge, + soft_purge,[]}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.ActionInterpreter', + brutal_purge,soft_purge,[]}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.ConditionInterpreter', + brutal_purge,soft_purge,[]}, + {update,'Elixir.Archethic.TransactionChain.Supervisor',supervisor}, + {load_module,'Elixir.ArchethicWeb.API.FunctionCallPayload',brutal_purge, + soft_purge,[]}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.BeaconChainSummary', + brutal_purge,soft_purge,[]}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.Compiled', + brutal_purge,soft_purge,[]}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.Error',brutal_purge, + soft_purge,[]}, + {apply,{supervisor,restart_child, + ['Elixir.Archethic.BeaconChain.SubsetSupervisor','Elixir.Archethic.BeaconChain.Subset.SummaryCacheSupervisor']}}, + {update,'Elixir.Archethic.BeaconChain.Subset.SummaryCache', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic.Utils']}, + {apply,{supervisor,terminate_child, + ['Elixir.Archethic.BeaconChain.SubsetSupervisor','Elixir.Archethic.BeaconChain.Subset.SummaryCache']}}, + {load_module,'Elixir.Archethic.Contracts.Contract.Context',brutal_purge, + soft_purge, + ['Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.ConditionValidator', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Interpreter']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Legacy.ActionInterpreter', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Interpreter']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Legacy.ConditionInterpreter', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Interpreter']}, + {load_module,'Elixir.Archethic.P2P.Message.GetCurrentReplicationAttestations', + brutal_purge,soft_purge, + ['Elixir.Archethic.BeaconChain']}, + {load_module,'Elixir.Archethic.TransactionChain.TransactionData.Recipient', + brutal_purge,soft_purge, + ['Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.TransactionChain.TransactionData', + brutal_purge,soft_purge, + ['Elixir.Archethic.TransactionChain.TransactionData.Recipient']}, + {load_module,'Elixir.ArchethicWeb.API.TransactionPayload',brutal_purge, + soft_purge, + ['Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.API.Types.RecipientList',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto']}, + {load_module,'Elixir.ArchethicWeb.Explorer.BeaconChainLive',brutal_purge, + soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain']}, + {load_module,'Elixir.Archethic.Bootstrap.NetworkInit',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto','Elixir.Archethic.Reward', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.Bootstrap.TransactionHandler',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Library.Common.ChainImpl', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.BeaconChain.NetworkCoordinates', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.BeaconChain.Subset.SummaryCache', + 'Elixir.Archethic.Utils']}, + {update,'Elixir.Archethic.BeaconChain.Subset.StatsCollector', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.BeaconChain.NetworkCoordinates']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Library.Common.ContractImpl', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Library.Common.Contract', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Interpreter.Library.Common.ContractImpl', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.Crypto',brutal_purge,soft_purge, + ['Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.P2P.Message.GetCurrentSummaries', + brutal_purge,soft_purge, + ['Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.BeaconChain.Subset']}, + {load_module,'Elixir.Archethic.P2P.Message.ValidateTransaction', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Contract.Context', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.Mining.ProofOfWork',brutal_purge, + soft_purge, + ['Elixir.Archethic.Contracts','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Legacy',brutal_purge, + soft_purge, + ['Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Interpreter', + 'Elixir.Archethic.Contracts.Interpreter.Legacy.ActionInterpreter', + 'Elixir.Archethic.Contracts.Interpreter.Legacy.ConditionInterpreter']}, + {load_module,'Elixir.Archethic.DB.EmbeddedImpl.Encoding',brutal_purge, + soft_purge, + ['Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Reward',brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.Explorer.FaucetController',brutal_purge, + soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.ExplorerRouter',brutal_purge,soft_purge, + ['Elixir.ArchethicWeb.Explorer.FaucetController']}, + {update,'Elixir.Archethic.Networking.Scheduler', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {update,'Elixir.Archethic.OracleChain.Scheduler', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.Explorer.SettingsLive',brutal_purge, + soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.Reward', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.BeaconChain',brutal_purge,soft_purge, + ['Elixir.Archethic', + 'Elixir.Archethic.BeaconChain.NetworkCoordinates', + 'Elixir.Archethic.BeaconChain.Subset', + 'Elixir.Archethic.BeaconChain.Subset.SummaryCache', + 'Elixir.Archethic.Crypto','Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter',brutal_purge, + soft_purge, + ['Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Contract.State', + 'Elixir.Archethic.Contracts.Interpreter.ActionInterpreter', + 'Elixir.Archethic.Contracts.Interpreter.ConditionInterpreter', + 'Elixir.Archethic.Contracts.Interpreter.ConditionValidator', + 'Elixir.Archethic.Contracts.Interpreter.Legacy']}, + {update,'Elixir.Archethic.Contracts.Loader', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Worker','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.Resolver', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema',brutal_purge, + soft_purge, + ['Elixir.ArchethicWeb.API.GraphQL.Schema.Resolver']}, + {load_module,'Elixir.Archethic.Utils.Regression.Api',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Utils.Regression.Benchmark.EndToEndValidation', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Throw', + brutal_purge,soft_purge, + ['Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.UcoAth', + brutal_purge,soft_purge, + ['Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.UCO', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api']}, + {load_module,'Elixir.Archethic.TransactionChain.Transaction',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.TransactionData', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.TransactionType', + brutal_purge,soft_purge, + ['Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.ArchethicWeb.API.GraphQL.Schema.Resolver']}, + {load_module,'Elixir.Archethic.SharedSecrets.NodeRenewal',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Counter', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Dex', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic',brutal_purge,soft_purge, + ['Elixir.Archethic.BeaconChain','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain']}, + {load_module,'Elixir.Archethic.Utils',brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain']}, + {load_module,'Elixir.Archethic.Contracts',brutal_purge,soft_purge, + ['Elixir.Archethic', + 'Elixir.Archethic.Contracts.Contract.State', + 'Elixir.Archethic.Contracts.Interpreter', + 'Elixir.Archethic.Contracts.Loader', + 'Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.Method.CallContractFunction', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.ArchethicWeb.API.FunctionCallPayload']}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.TransactionSchema', + brutal_purge,soft_purge, + ['Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.TransactionChain',brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.DeterministicBalance', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto','Elixir.Archethic.Utils', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Legacy', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts','Elixir.Archethic.Utils', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.Method.AddOriginKey', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.ArchethicWeb.API.REST.OriginKeyController', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.Method.SimulateContractExecution', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient', + 'Elixir.ArchethicWeb.API.JsonRPC.Error', + 'Elixir.ArchethicWeb.API.JsonRPC.TransactionSchema']}, + {load_module,'Elixir.Archethic.P2P.Message.ValidateSmartContractCall', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Contract.Context', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient']}, + {update,'Elixir.Archethic.BeaconChain.Subset', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.BeaconChain.NetworkCoordinates', + 'Elixir.Archethic.BeaconChain.Subset.StatsCollector', + 'Elixir.Archethic.BeaconChain.Subset.SummaryCache', + 'Elixir.Archethic.Crypto','Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Mining.SmartContractValidation', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Contract.State', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient']}, + {load_module,'Elixir.ArchethicWeb.Explorer.TransactionDetailsLive', + brutal_purge,soft_purge, + ['Elixir.Archethic', + 'Elixir.Archethic.Contracts.Contract.State', + 'Elixir.Archethic.Crypto','Elixir.Archethic.Reward', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Counter', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.DeterministicBalance', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Dex', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Legacy', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Throw', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.UcoAth']}, + {load_module,'Elixir.Archethic.Mining.PendingTransactionValidation', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.Archethic.Crypto','Elixir.Archethic.Reward', + 'Elixir.Archethic.SharedSecrets.NodeRenewal', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Mining.ValidationContext',brutal_purge, + soft_purge, + ['Elixir.Archethic.Contracts.Contract.Context', + 'Elixir.Archethic.Mining.PendingTransactionValidation', + 'Elixir.Archethic.Mining.ProofOfWork', + 'Elixir.Archethic.Mining.SmartContractValidation', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {update,'Elixir.Archethic.Contracts.Worker', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Contract.Context', + 'Elixir.Archethic.Contracts.Loader','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient', + 'Elixir.Archethic.Utils']}, + {delete_module,'Elixir.Archethic.Contracts.Conditions.Subjects'}, + {delete_module,'Elixir.Archethic.Contracts.Conditions'}, + {delete_module,'Elixir.Archethic.Contracts.Constants'}, + {delete_module,'Elixir.Archethic.Contracts.Contract'}, + {delete_module,'Elixir.Archethic.TransactionChain.MemTablesLoader'}, + {delete_module,'Elixir.Archethic.TransactionChain.TransactionData.Recipient.ArgumentsEncoding'}, + {apply,{supervisor,terminate_child, + ['Elixir.Archethic.Telemetry',prometheus_metrics]}}, + {apply,{supervisor,restart_child, + ['Elixir.Archethic.Telemetry',prometheus_metrics]}}, + {apply,{supervisor,terminate_child, + ['Elixir.Archethic.Telemetry',telemetry_poller]}}, + {apply,{supervisor,restart_child, + ['Elixir.Archethic.Telemetry',telemetry_poller]}}, + {apply,{'Elixir.Archethic.Contracts.Loader',reparse_workers_contract,[]}}, + {apply,{'Elixir.Mix.Tasks.Archethic.Migrate',run,["1.6.0",true]}}]}], + [{"1.5.14", + [{delete_module,'Elixir.Archethic.Contracts.Interpreter.Conditions.Subjects'}, + {delete_module,'Elixir.Archethic.Contracts.Interpreter.Conditions'}, + {delete_module,'Elixir.Archethic.Contracts.Interpreter.Constants'}, + {delete_module,'Elixir.Archethic.Contracts.Interpreter.Contract'}, + {delete_module,'Elixir.Archethic.Contracts.Wasm.IO.JSONRPCImpl'}, + {delete_module,'Elixir.Archethic.Contracts.Wasm.IO.Request'}, + {delete_module,'Elixir.Archethic.Contracts.Wasm.IO'}, + {delete_module,'Elixir.Archethic.Contracts.Wasm.ReadResult'}, + {delete_module,'Elixir.Archethic.Contracts.Wasm.Result'}, + {delete_module,'Elixir.Archethic.Contracts.Wasm.UpdateResult'}, + {delete_module,'Elixir.Archethic.Contracts.WasmContract'}, + {delete_module,'Elixir.Archethic.Contracts.WasmImports'}, + {delete_module,'Elixir.Archethic.Contracts.WasmMemory'}, + {delete_module,'Elixir.Archethic.Contracts.WasmModule'}, + {delete_module,'Elixir.Archethic.Contracts.WasmResult'}, + {delete_module,'Elixir.Archethic.Contracts.WasmSpec.Function'}, + {delete_module,'Elixir.Archethic.Contracts.WasmSpec.Trigger'}, + {delete_module,'Elixir.Archethic.Contracts.WasmSpec.UpgradeOpts'}, + {delete_module,'Elixir.Archethic.Contracts.WasmSpec'}, + {delete_module,'Elixir.Archethic.TransactionChain.TransactionData.Contract'}, + {delete_module,'Elixir.Archethic.TransactionChain.TransactionData.VersionedRecipient'}, + {delete_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.JsonType'}, + {delete_module,'Elixir.ArchethicWeb.API.Types.RecipientArgType'}, + {delete_module,'Elixir.Jason.Encoder.Archethic.Contracts.Wasm.Result'}, + {update,'Elixir.Archethic.BeaconChain.SubsetSupervisor',supervisor}, + {load_module,'Elixir.Archethic.Cldr.Currency',brutal_purge,soft_purge,[]}, + {load_module,'Elixir.Archethic.Cldr.Number.Transliterate',brutal_purge, + soft_purge,[]}, + {load_module,'Elixir.Archethic.Contracts.Contract.State',brutal_purge, + soft_purge,[]}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.ActionInterpreter', + brutal_purge,soft_purge,[]}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.ConditionInterpreter', + brutal_purge,soft_purge,[]}, + {update,'Elixir.Archethic.TransactionChain.Supervisor',supervisor}, + {load_module,'Elixir.ArchethicWeb.API.FunctionCallPayload',brutal_purge, + soft_purge,[]}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.BeaconChainSummary', + brutal_purge,soft_purge,[]}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.Compiled', + brutal_purge,soft_purge,[]}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.Error',brutal_purge, + soft_purge,[]}, + {update,'Elixir.Archethic.BeaconChain.Subset.SummaryCache', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Contracts.Contract.Context',brutal_purge, + soft_purge, + ['Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.ConditionValidator', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Interpreter']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Legacy.ActionInterpreter', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Interpreter']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Legacy.ConditionInterpreter', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Interpreter']}, + {load_module,'Elixir.Archethic.P2P.Message.GetCurrentReplicationAttestations', + brutal_purge,soft_purge, + ['Elixir.Archethic.BeaconChain']}, + {load_module,'Elixir.Archethic.TransactionChain.TransactionData.Recipient', + brutal_purge,soft_purge, + ['Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.TransactionChain.TransactionData', + brutal_purge,soft_purge, + ['Elixir.Archethic.TransactionChain.TransactionData.Recipient']}, + {load_module,'Elixir.ArchethicWeb.API.TransactionPayload',brutal_purge, + soft_purge, + ['Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.API.Types.RecipientList',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto']}, + {load_module,'Elixir.ArchethicWeb.Explorer.BeaconChainLive',brutal_purge, + soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain']}, + {load_module,'Elixir.Archethic.Bootstrap.NetworkInit',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto','Elixir.Archethic.Reward', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.Bootstrap.TransactionHandler',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Library.Common.ChainImpl', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.BeaconChain.NetworkCoordinates', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.BeaconChain.Subset.SummaryCache', + 'Elixir.Archethic.Utils']}, + {update,'Elixir.Archethic.BeaconChain.Subset.StatsCollector', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.BeaconChain.NetworkCoordinates']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Library.Common.ContractImpl', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Library.Common.Contract', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Interpreter.Library.Common.ContractImpl', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.Crypto',brutal_purge,soft_purge, + ['Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.P2P.Message.GetCurrentSummaries', + brutal_purge,soft_purge, + ['Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.BeaconChain.Subset']}, + {load_module,'Elixir.Archethic.P2P.Message.ValidateTransaction', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts.Contract.Context', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.Mining.ProofOfWork',brutal_purge, + soft_purge, + ['Elixir.Archethic.Contracts','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter.Legacy',brutal_purge, + soft_purge, + ['Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Interpreter', + 'Elixir.Archethic.Contracts.Interpreter.Legacy.ActionInterpreter', + 'Elixir.Archethic.Contracts.Interpreter.Legacy.ConditionInterpreter']}, + {load_module,'Elixir.Archethic.DB.EmbeddedImpl.Encoding',brutal_purge, + soft_purge, + ['Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Reward',brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.Explorer.FaucetController',brutal_purge, + soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.ExplorerRouter',brutal_purge,soft_purge, + ['Elixir.ArchethicWeb.Explorer.FaucetController']}, + {update,'Elixir.Archethic.Networking.Scheduler', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {update,'Elixir.Archethic.OracleChain.Scheduler', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.Explorer.SettingsLive',brutal_purge, + soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.Reward', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.Archethic.BeaconChain',brutal_purge,soft_purge, + ['Elixir.Archethic', + 'Elixir.Archethic.BeaconChain.NetworkCoordinates', + 'Elixir.Archethic.BeaconChain.Subset', + 'Elixir.Archethic.BeaconChain.Subset.SummaryCache', + 'Elixir.Archethic.Crypto','Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Contracts.Interpreter',brutal_purge, + soft_purge, + ['Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Contract.State', + 'Elixir.Archethic.Contracts.Interpreter.ActionInterpreter', + 'Elixir.Archethic.Contracts.Interpreter.ConditionInterpreter', + 'Elixir.Archethic.Contracts.Interpreter.ConditionValidator', + 'Elixir.Archethic.Contracts.Interpreter.Legacy']}, + {update,'Elixir.Archethic.Contracts.Loader', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Worker','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.Resolver', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema',brutal_purge, + soft_purge, + ['Elixir.ArchethicWeb.API.GraphQL.Schema.Resolver']}, + {load_module,'Elixir.Archethic.Utils.Regression.Api',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Utils.Regression.Benchmark.EndToEndValidation', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Throw', + brutal_purge,soft_purge, + ['Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.UcoAth', + brutal_purge,soft_purge, + ['Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.UCO', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api']}, + {load_module,'Elixir.Archethic.TransactionChain.Transaction',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.TransactionData', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.API.GraphQL.Schema.TransactionType', + brutal_purge,soft_purge, + ['Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.ArchethicWeb.API.GraphQL.Schema.Resolver']}, + {load_module,'Elixir.Archethic.SharedSecrets.NodeRenewal',brutal_purge, + soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Counter', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Dex', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic',brutal_purge,soft_purge, + ['Elixir.Archethic.BeaconChain','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain']}, + {load_module,'Elixir.Archethic.Utils',brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain']}, + {load_module,'Elixir.Archethic.Contracts',brutal_purge,soft_purge, + ['Elixir.Archethic', + 'Elixir.Archethic.Contracts.Contract.State', + 'Elixir.Archethic.Contracts.Interpreter', + 'Elixir.Archethic.Contracts.Loader', + 'Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.Method.CallContractFunction', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.ArchethicWeb.API.FunctionCallPayload']}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.TransactionSchema', + brutal_purge,soft_purge, + ['Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.TransactionChain',brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.DeterministicBalance', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto','Elixir.Archethic.Utils', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Legacy', + brutal_purge,soft_purge, + ['Elixir.Archethic.Contracts','Elixir.Archethic.Utils', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract']}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.Method.AddOriginKey', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.ArchethicWeb.API.REST.OriginKeyController', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction']}, + {load_module,'Elixir.ArchethicWeb.API.JsonRPC.Method.SimulateContractExecution', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient', + 'Elixir.ArchethicWeb.API.JsonRPC.Error', + 'Elixir.ArchethicWeb.API.JsonRPC.TransactionSchema']}, + {load_module,'Elixir.Archethic.P2P.Message.ValidateSmartContractCall', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Contract.Context', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient']}, + {update,'Elixir.Archethic.BeaconChain.Subset', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.BeaconChain.NetworkCoordinates', + 'Elixir.Archethic.BeaconChain.Subset.StatsCollector', + 'Elixir.Archethic.BeaconChain.Subset.SummaryCache', + 'Elixir.Archethic.Crypto','Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Mining.SmartContractValidation', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Contract.State', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient']}, + {load_module,'Elixir.ArchethicWeb.Explorer.TransactionDetailsLive', + brutal_purge,soft_purge, + ['Elixir.Archethic', + 'Elixir.Archethic.Contracts.Contract.State', + 'Elixir.Archethic.Crypto','Elixir.Archethic.Reward', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData']}, + {load_module,'Elixir.Archethic.Utils.Regression.Playbook.SmartContract', + brutal_purge,soft_purge, + ['Elixir.Archethic.Crypto', + 'Elixir.Archethic.Utils.Regression.Api', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Counter', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.DeterministicBalance', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Dex', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Legacy', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.Throw', + 'Elixir.Archethic.Utils.Regression.Playbook.SmartContract.UcoAth']}, + {load_module,'Elixir.Archethic.Mining.PendingTransactionValidation', + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.Contracts', + 'Elixir.Archethic.Crypto','Elixir.Archethic.Reward', + 'Elixir.Archethic.SharedSecrets.NodeRenewal', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.TransactionChain.TransactionData', + 'Elixir.Archethic.Utils']}, + {load_module,'Elixir.Archethic.Mining.ValidationContext',brutal_purge, + soft_purge, + ['Elixir.Archethic.Contracts.Contract.Context', + 'Elixir.Archethic.Mining.PendingTransactionValidation', + 'Elixir.Archethic.Mining.ProofOfWork', + 'Elixir.Archethic.Mining.SmartContractValidation', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.Transaction', + 'Elixir.Archethic.Utils']}, + {update,'Elixir.Archethic.Contracts.Worker', + {advanced,[]}, + brutal_purge,soft_purge, + ['Elixir.Archethic','Elixir.Archethic.BeaconChain', + 'Elixir.Archethic.Contracts', + 'Elixir.Archethic.Contracts.Contract.Context', + 'Elixir.Archethic.Contracts.Loader','Elixir.Archethic.Crypto', + 'Elixir.Archethic.TransactionChain', + 'Elixir.Archethic.TransactionChain.TransactionData.Recipient', + 'Elixir.Archethic.Utils']}, + {add_module,'Elixir.Archethic.Contracts.Conditions.Subjects'}, + {add_module,'Elixir.Archethic.Contracts.Conditions'}, + {add_module,'Elixir.Archethic.Contracts.Constants'}, + {add_module,'Elixir.Archethic.Contracts.Contract'}, + {add_module,'Elixir.Archethic.TransactionChain.MemTablesLoader'}, + {add_module,'Elixir.Archethic.TransactionChain.TransactionData.Recipient.ArgumentsEncoding'}]}]}. diff --git a/rel/appups/ex_keccak/0.7.1_to_0.7.5.appup b/rel/appups/ex_keccak/0.7.1_to_0.7.5.appup new file mode 100644 index 000000000..9ae0a75ee --- /dev/null +++ b/rel/appups/ex_keccak/0.7.1_to_0.7.5.appup @@ -0,0 +1,9 @@ +{"0.7.5", + [{"0.7.1",[ + {apply,{code,purge, ['Elixir.ExKeccak']}}, + {apply,{code,delete, ['Elixir.ExKeccak']}}, + {apply,{code,purge, ['Elixir.ExKeccak']}}, + {apply,{code,delete, ['Elixir.ExKeccak']}}, + {load_module,'Elixir.ExKeccak',[]}]} + ], + [{"0.7.1",[{load_module,'Elixir.ExKeccak',[]}]}]}.