Skip to content

Commit

Permalink
Do not initialize empty contract with empty conditions
Browse files Browse the repository at this point in the history
  • Loading branch information
bchamagne authored and Neylix committed May 4, 2023
1 parent 2d6bf4c commit d01bb0b
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 16 deletions.
6 changes: 1 addition & 5 deletions lib/archethic/contracts/contract.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,7 @@ defmodule Archethic.Contracts.Contract do

defstruct triggers: %{},
version: 0,
conditions: %{
transaction: %Conditions{},
inherit: %Conditions{},
oracle: %Conditions{}
},
conditions: %{},
constants: %Constants{},
next_transaction: %Transaction{data: %TransactionData{}}

Expand Down
6 changes: 1 addition & 5 deletions lib/archethic/contracts/interpreter.ex
Original file line number Diff line number Diff line change
Expand Up @@ -485,11 +485,7 @@ defmodule Archethic.Contracts.Interpreter do
end

defp parse_contract(1, ast) do
# we need to force the initialization of conditions to an empty map
# to be able to detect that user did not omit some condition blocks
initial_contract = %Contract{conditions: %{}}

case parse_ast_block(ast, initial_contract) do
case parse_ast_block(ast, %Contract{}) do
{:ok, contract} ->
{:ok, %{contract | version: 1}}

Expand Down
18 changes: 12 additions & 6 deletions lib/archethic/transaction_chain/mem_tables_loader.ex
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,19 @@ defmodule Archethic.TransactionChain.MemTablesLoader do
defp handle_pending_transaction(%Transaction{data: %TransactionData{code: ""}}), do: :ok

defp handle_pending_transaction(tx = %Transaction{address: address}) do
%Contract{conditions: %{transaction: transaction_conditions}} = Contract.from_transaction!(tx)
%Contract{conditions: conditions} = Contract.from_transaction!(tx)

# TODO: improve the criteria of pending detection
if ContractConditions.empty?(transaction_conditions) do
:ok
else
PendingLedger.add_address(address)
case Map.get(conditions, :transaction) do
nil ->
:ok

transaction_conditions ->
# TODO: improve the criteria of pending detection
if ContractConditions.empty?(transaction_conditions) do
:ok
else
PendingLedger.add_address(address)
end
end
end

Expand Down
4 changes: 4 additions & 0 deletions test/archethic/contracts_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ defmodule Archethic.ContractsTest do
content: "hello"
]
condition transaction: []
actions triggered_by: transaction do
add_uco_transfer to: "3265CCD78CD74984FAB3CC6984D30C8C82044EBBAB1A4FFFB683BDB2D8C5BCF9", amount: 1000000000
end
Expand Down Expand Up @@ -59,6 +61,8 @@ defmodule Archethic.ContractsTest do
content: regex_match?(\"hello\")
]
condition transaction: []
actions triggered_by: transaction do
set_content "hello"
end
Expand Down
2 changes: 2 additions & 0 deletions test/archethic/transaction_chain/mem_tables_loader_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ defmodule Archethic.TransactionChain.MemTablesLoaderTest do
previous_public_key: "Contract1",
data: %TransactionData{
code: """
condition inherit: []
condition transaction: [
content: regex_match?(\"hello\")
]
Expand Down

0 comments on commit d01bb0b

Please sign in to comment.