Skip to content
Snippets Groups Projects
Commit 23139a3d authored by ABDELGHANI Nassim's avatar ABDELGHANI Nassim Committed by ABDELGHANI Nassim
Browse files

fix transaction number of lines check

parent c7760a6e
No related branches found
No related tags found
1 merge request!46Resolve "Validation locale"
defmodule Block.Validation.Local.TransactionNumberOfLines do
@moduledoc """
A transaction in compact format cannot measure more than 100 lines
A transaction in [compact format](https://git.duniter.org/documents/rfcs/-/blob/master/rfc/0010_Duniter_Blockchain_Protocol_V12.md#compact-format) cannot measure more than 100 lines
https://git.duniter.org/documents/rfcs/-/blob/master/rfc/0010_Duniter_Blockchain_Protocol_V12.md#transactions
"""
def valid(block) do
length(block["transactions"]) < 100
block["transactions"]
|> Enum.all?(fn transaction -> compact_format_length(transaction) < 100 end)
end
defp compact_format_length(transaction) do
# header + blockstamp
# issuers + signatures
# inputs + unlocks
2 +
length(transaction["issuers"]) * 2 +
length(transaction["inputs"]) * 2 +
if(transaction["comment"] && String.length(transaction["comment"]) > 0,
do: 1,
else: 0
) + length(transaction["outputs"])
end
end
......@@ -62,9 +62,116 @@ defmodule Block.Validation.Local.TransactionNumberOfLinesTest do
]
}
@invalid_block %{
"version" => 10,
"nonce" => 200_000_000_001,
"number" => 11,
"powMin" => 1,
"time" => 1_489_679_935,
"medianTime" => 1_489_679_935,
"membersCount" => 2,
"monetaryMass" => 4800,
"unitbase" => 0,
"issuersCount" => 1,
"issuersFrame" => 6,
"issuersFrameVar" => 0,
"len" => 8,
"currency" => "duniter_unit_test_currency",
"issuer" => "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"signature" =>
"OjWOEdPEpzWKFqxdIcSdk0FUcsXk3vAu9rcmucktgF1L8CdSh09Te4Aek8MCQ8vE7no+EJkL7QR6bv2tI8e/Dw==",
"hash" => "7F2151494087FA237E1E793EA8C2D015B84A11492CAA282A44DC99DBB1DBAAC8",
"parameters" => "",
"previousHash" => "3524C70AAA67384D9627B0E79D2642DBB0402EF86B6205EC6AFC1EA20C6B5D92",
"previousIssuer" => "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"inner_hash" => "03E45A377A6BCDAA8AC8150A60EFB668C85068A7180C7524818CE331EFEC9ABC",
"dividend" => nil,
"identities" => [],
"joiners" => [],
"actives" => [],
"leavers" => [],
"revoked" => [],
"excluded" => [],
"certifications" => [],
"transactions" => [
%{
"version" => 9,
"blockstamp" => "10-3524C70AAA67384D9627B0E79D2642DBB0402EF86B6205EC6AFC1EA20C6B5D92",
"locktime" => 0,
"issuers" => [
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
"DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV"
],
"inputs" => [
"1200 =>0 =>T =>1F3F5DCAA471431680CD7F5A59D3D22A1A1091810FC72D8BDE2A40883CD6D48D =>0"
],
"unlocks" => [
"0 =>SIG(0)"
],
"outputs" => [
"1200 =>0 =>(XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB) && SIG(DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo)) || (SIG(DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV) && SIG(DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo))"
],
"comments" => [
"cross1"
],
"signatures" => [],
"comment" => "cross1",
"currency" => "duniter_unit_test_currency",
"block_number" => 11,
"time" => 1_489_679_935
}
]
}
alias Block.Validation.Local.TransactionNumberOfLines, as: TransactionNumberOfLines
test "validates a block has less than 100 transactions" do
assert TransactionNumberOfLines.valid(@block)
refute TransactionNumberOfLines.valid(@invalid_block)
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment