From 3d39ad4e45e5955eabb966fdf9f321ffc8045baa Mon Sep 17 00:00:00 2001 From: Bastien CHAMAGNE Date: Thu, 19 Jan 2023 17:13:19 +0100 Subject: [PATCH] add doctest --- .../interpreter/transaction_statements.ex | 116 +++++++++++++++++- 1 file changed, 112 insertions(+), 4 deletions(-) diff --git a/lib/archethic/contracts/interpreter/transaction_statements.ex b/lib/archethic/contracts/interpreter/transaction_statements.ex index b462f8c259..298ecc9f65 100644 --- a/lib/archethic/contracts/interpreter/transaction_statements.ex +++ b/lib/archethic/contracts/interpreter/transaction_statements.ex @@ -213,33 +213,141 @@ defmodule Archethic.Contracts.Interpreter.TransactionStatements do @doc """ Add multiple recipients + + ## Examples + + iex> TransactionStatements.add_recipients(%Transaction{data: %TransactionData{recipients: ["lucy"]}}, ["hannah"]) + %Transaction{ + data: %TransactionData{ + recipients: ["hannah","lucy"] + } + } """ @spec add_recipients(Transaction.t(), list(binary())) :: Transaction.t() def add_recipients(tx = %Transaction{}, args) when is_list(args) do - Enum.reduce(args, tx, &add_recipient/2) + Enum.reduce(args, tx, &add_recipient(&2, &1)) end @doc """ Add multiple ownerships + + ## Examples + + iex> {pub_key1, _} = Archethic.Crypto.generate_deterministic_keypair("seed") + iex> {pub_key2, _} = Archethic.Crypto.generate_deterministic_keypair("seed2") + iex> %Transaction{ + ...> data: %TransactionData{ + ...> ownerships: [ + ...> %Ownership{ + ...> authorized_keys: %{ + ...> ^pub_key2 => _ + ...> }, + ...> secret: "ENCODED_SECRET2" + ...> }, + ...> %Ownership{ + ...> authorized_keys: %{ + ...> ^pub_key1 => _ + ...> }, + ...> secret: "ENCODED_SECRET1" + ...> } + ...> ] + ...> } + ...> } = TransactionStatements.add_ownerships(%Transaction{data: %TransactionData{}}, [[ + ...> {"secret", "ENCODED_SECRET1"}, + ...> {"secret_key", :crypto.strong_rand_bytes(32)}, + ...> {"authorized_public_keys", [pub_key1]} + ...> ], + ...> [ + ...> {"secret", "ENCODED_SECRET2"}, + ...> {"secret_key", :crypto.strong_rand_bytes(32)}, + ...> {"authorized_public_keys", [pub_key2]} + ...> ] + ...> ]) """ @spec add_ownerships(Transaction.t(), list(list())) :: Transaction.t() def add_ownerships(tx = %Transaction{}, args) when is_list(args) do - Enum.reduce(args, tx, &add_ownership/2) + Enum.reduce(args, tx, &add_ownership(&2, &1)) end @doc """ Add multiple token transfers + + ## Examples + + iex> address1 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>> + iex> address2 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>> + iex> address3 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>> + iex> address4 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>> + iex> %Transaction{ + ...> data: %TransactionData{ + ...> ledger: %Ledger{ + ...> token: %TokenLedger{ + ...> transfers: [ + ...> %TokenTransfer{ + ...> to: ^address3, + ...> amount: 3, + ...> token_address: ^address4, + ...> token_id: 4 + ...> }, + ...> %TokenTransfer{ + ...> to: ^address1, + ...> amount: 1, + ...> token_address: ^address2, + ...> token_id: 2 + ...> } + ...> ] + ...> } + ...> } + ...> } + ...> } = TransactionStatements.add_token_transfers(%Transaction{data: %TransactionData{}}, [[ + ...> {"to", address1}, + ...> {"amount", 1}, + ...> {"token_address", address2}, + ...> {"token_id", 2} + ...> ], + ...> [ + ...> {"to", address3}, + ...> {"amount", 3}, + ...> {"token_address", address4}, + ...> {"token_id", 4} + ...> ]]) """ @spec add_token_transfers(Transaction.t(), list(list())) :: Transaction.t() def add_token_transfers(tx = %Transaction{}, args) when is_list(args) do - Enum.reduce(args, tx, &add_token_transfer/2) + Enum.reduce(args, tx, &add_token_transfer(&2, &1)) end @doc """ Add multiple UCO transfers + + ## Examples + + iex> address1 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>> + iex> address2 = <<0::8, 0::8, :crypto.strong_rand_bytes(32)::binary>> + iex> %Transaction{ + ...> data: %TransactionData{ + ...> ledger: %Ledger{ + ...> uco: %UCOLedger{ + ...> transfers: [ + ...> %UCOTransfer{ + ...> to: ^address2, + ...> amount: 2 + ...> }, + ...> %UCOTransfer{ + ...> to: ^address1, + ...> amount: 1 + ...> } + ...> ] + ...> } + ...> } + ...> } + ...> } = TransactionStatements.add_uco_transfers(%Transaction{data: %TransactionData{}}, [ + ...> [{"to", address1}, {"amount", 1}], + ...> [{"to", address2}, {"amount", 2}] + ...> ]) """ @spec add_uco_transfers(Transaction.t(), list(list())) :: Transaction.t() def add_uco_transfers(tx = %Transaction{}, args) when is_list(args) do - Enum.reduce(args, tx, &add_uco_transfer/2) + Enum.reduce(args, tx, &add_uco_transfer(&2, &1)) end end