From 28b5197081a9eda4586658c918b410409d07c859 Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Fri, 21 Jun 2024 11:28:18 +0800 Subject: [PATCH] feat: support a wider range of types for inner transaction application args --- examples/sizes.txt | 2 +- src/puya/awst_build/eb/_literals.py | 4 +- .../awst_build/eb/transaction/inner_params.py | 26 +- stubs/algopy-stubs/itxn.pyi | 8 +- .../field_tuple_assignment.py | 18 +- .../out/FieldTupleContract.approval.mir | 611 ++++++++++-------- .../out/FieldTupleContract.approval.teal | 199 +++--- .../out/FieldTupleContract.arc32.json | 4 +- .../out/FieldTupleContract.clear.mir | 4 +- .../out/FieldTupleContract.clear.teal | 2 +- .../out/FieldTupleContract.destructured.ir | 121 ++-- .../out/FieldTupleContract.ssa.ir | 177 +++-- .../out/FieldTupleContract.ssa.opt_pass_1.ir | 141 ++-- .../out/FieldTupleContract.ssa.opt_pass_2.ir | 125 ++-- test_cases/inner_transactions/out/c2c.awst | 2 +- .../out/field_tuple_assignment.awst | 7 +- .../out_O2/FieldTupleContract.approval.teal | 33 + .../out_O2/FieldTupleContract.destructured.ir | 121 ++-- .../FieldTupleContract.approval.teal | 274 +++++--- .../FieldTupleContract.clear.teal | 2 +- .../FieldTupleContract.destructured.ir | 172 +++-- test_cases/inner_transactions/puya.log | 537 +++++++++++---- tests/test_expected_output/itxn.test | 186 +++++- 23 files changed, 1855 insertions(+), 921 deletions(-) diff --git a/examples/sizes.txt b/examples/sizes.txt index 39d320eb17..23cb4f4676 100644 --- a/examples/sizes.txt +++ b/examples/sizes.txt @@ -52,7 +52,7 @@ inner_transactions 1259 1193 66 1193 0 inner_transactions/ArrayAccess 214 195 19 195 0 inner_transactions/CreateAndTransfer 139 123 16 123 0 - inner_transactions/FieldTuple 505 462 43 462 0 + inner_transactions/FieldTuple 653 537 116 537 0 inner_transactions/Greeter 329 305 24 305 0 inner_transactions/itxn_loop 192 184 8 184 0 intrinsics/ImmediateVariants 166 162 4 162 0 diff --git a/src/puya/awst_build/eb/_literals.py b/src/puya/awst_build/eb/_literals.py index cab3914f02..03ba1b96fa 100644 --- a/src/puya/awst_build/eb/_literals.py +++ b/src/puya/awst_build/eb/_literals.py @@ -10,7 +10,7 @@ Lvalue, Statement, ) -from puya.awst_build import pytypes +from puya.awst_build import intrinsic_factory, pytypes from puya.awst_build.eb.interface import ( BuilderBinaryOp, BuilderComparisonOp, @@ -79,6 +79,8 @@ def to_bytes(self, location: SourceLocation) -> Expression: return BytesConstant( value=bytes_value, encoding=BytesEncoding.unknown, source_location=location ) + case bool(): + return intrinsic_factory.itob(self.resolve(), location) raise CodeError(f"cannot serialize literal of type {self.pytype}", location) @typing.override diff --git a/src/puya/awst_build/eb/transaction/inner_params.py b/src/puya/awst_build/eb/transaction/inner_params.py index ba100ea1e0..bb258284d9 100644 --- a/src/puya/awst_build/eb/transaction/inner_params.py +++ b/src/puya/awst_build/eb/transaction/inner_params.py @@ -3,6 +3,7 @@ import mypy.nodes +from puya import log from puya.awst import wtypes from puya.awst.nodes import ( INNER_PARAM_TXN_FIELDS, @@ -10,6 +11,7 @@ CreateInnerTransaction, Expression, SubmitInnerTransaction, + TupleExpression, TxnField, TxnFields, UInt64Constant, @@ -21,6 +23,7 @@ from puya.awst_build.eb._utils import bool_eval_to_constant, expect_no_args from puya.awst_build.eb.interface import InstanceBuilder, NodeBuilder, TypeBuilder from puya.awst_build.eb.transaction import get_field_python_name +from puya.awst_build.eb.tuple import TupleLiteralBuilder from puya.awst_build.eb.void import VoidExpressionBuilder from puya.awst_build.utils import ( expect_operand_type, @@ -31,6 +34,7 @@ from puya.errors import CodeError, InternalError from puya.parse import SourceLocation +logger = log.get_logger(__name__) _parameter_mapping: typing.Final = { get_field_python_name(f): (f, pytypes.from_basic_wtype(f.wtype)) for f in INNER_PARAM_TXN_FIELDS @@ -46,13 +50,33 @@ def get_field_expr(arg_name: str, arg: InstanceBuilder) -> tuple[TxnField, Expre return remapped_field elif field.is_array: match arg: + case TupleLiteralBuilder( + items=items, + source_location=tup_loc, + ) if field == TxnFields.app_args: + for item in items: + if item.pytype == pytypes.AccountType: + logger.warning( + f"{item.pytype} will not be added to foreign array," + f" use .bytes to suppress this warning", + location=item.source_location, + ) + elif item.pytype in (pytypes.AssetType, pytypes.ApplicationType): + logger.warning( + f"{item.pytype} will not be added to foreign array," + f" use .id to suppress this warning", + location=item.source_location, + ) + expr: Expression = TupleExpression.from_items( + [item.to_bytes(item.source_location) for item in items], tup_loc + ) + return field, expr case InstanceBuilder(pytype=pytypes.TupleType(items=tuple_item_types)) if all( field.valid_type(t.wtype) for t in tuple_item_types ): expr = arg.resolve() return field, expr raise CodeError(f"{arg_name} should be of type tuple[{field.type_desc}, ...]") - # TODO(first): pull the below out, and reuse above inside tuples, allowing literals in tuples elif field_pytype == pytypes.BytesType: # this handles the overlapping case of allowing Bytes && String to a single field field_expr = arg.to_bytes(arg.source_location) diff --git a/stubs/algopy-stubs/itxn.pyi b/stubs/algopy-stubs/itxn.pyi index 873f5d7f0d..124d035357 100644 --- a/stubs/algopy-stubs/itxn.pyi +++ b/stubs/algopy-stubs/itxn.pyi @@ -134,7 +134,7 @@ class InnerTransaction(_InnerTransaction[InnerTransactionResult]): local_num_uint: UInt64 | int = ..., local_num_bytes: UInt64 | int = ..., extra_program_pages: UInt64 | int = ..., - app_args: tuple[Bytes | BytesBacked, ...] = ..., + app_args: tuple[object, ...] = ..., accounts: tuple[Account, ...] = ..., assets: tuple[Asset, ...] = ..., apps: tuple[Application, ...] = ..., @@ -193,7 +193,7 @@ class InnerTransaction(_InnerTransaction[InnerTransactionResult]): local_num_uint: UInt64 | int = ..., local_num_bytes: UInt64 | int = ..., extra_program_pages: UInt64 | int = ..., - app_args: tuple[Bytes | BytesBacked, ...] = ..., + app_args: tuple[object, ...] = ..., accounts: tuple[Account, ...] = ..., assets: tuple[Asset, ...] = ..., apps: tuple[Application, ...] = ..., @@ -385,7 +385,7 @@ class ApplicationCall(_InnerTransaction[ApplicationCallInnerTransaction]): local_num_uint: UInt64 | int = ..., local_num_bytes: UInt64 | int = ..., extra_program_pages: UInt64 | int = ..., - app_args: tuple[Bytes | BytesBacked, ...] = ..., + app_args: tuple[object, ...] = ..., accounts: tuple[Account, ...] = ..., assets: tuple[Asset, ...] = ..., apps: tuple[Application, ...] = ..., @@ -406,7 +406,7 @@ class ApplicationCall(_InnerTransaction[ApplicationCallInnerTransaction]): local_num_uint: UInt64 | int = ..., local_num_bytes: UInt64 | int = ..., extra_program_pages: UInt64 | int = ..., - app_args: tuple[Bytes | BytesBacked, ...] = ..., + app_args: tuple[object, ...] = ..., accounts: tuple[Account, ...] = ..., assets: tuple[Asset, ...] = ..., apps: tuple[Application, ...] = ..., diff --git a/test_cases/inner_transactions/field_tuple_assignment.py b/test_cases/inner_transactions/field_tuple_assignment.py index 652fd8bc7c..df3fd239d8 100644 --- a/test_cases/inner_transactions/field_tuple_assignment.py +++ b/test_cases/inner_transactions/field_tuple_assignment.py @@ -2,8 +2,11 @@ ARC4Contract, Bytes, OnCompleteAction, + String, + UInt64, arc4, itxn, + op, ) LOG_1ST_ARG_AND_APPROVE = ( @@ -26,7 +29,15 @@ def test_assign_tuple(self) -> None: approval_program=ALWAYS_APPROVE, clear_state_program=ALWAYS_APPROVE, on_completion=OnCompleteAction.DeleteApplication, - app_args=(Bytes(b"1a"), Bytes(b"2a")), + app_args=( + Bytes(b"1a"), + Bytes(b"2a"), + b"hello", + "world", + String("!"), + UInt64(42), + True, + ), ), itxn.ApplicationCall( approval_program=ALWAYS_APPROVE, @@ -40,6 +51,11 @@ def test_assign_tuple(self) -> None: assert txn_1.app_args(0) == b"1a" assert txn_1.app_args(1) == b"2a" + assert txn_1.app_args(2) == b"hello" + assert txn_1.app_args(3) == b"world" + assert txn_1.app_args(4) == b"!" + assert txn_1.app_args(5) == op.itob(42) + assert txn_1.app_args(6) == op.itob(1) assert txn_2.app_args(0) == b"3a" assert txn_2.app_args(1) == b"4a" assert txn_2.app_args(2) == b"5a" diff --git a/test_cases/inner_transactions/out/FieldTupleContract.approval.mir b/test_cases/inner_transactions/out/FieldTupleContract.approval.mir index 46021cdd36..0469b6989d 100644 --- a/test_cases/inner_transactions/out/FieldTupleContract.approval.mir +++ b/test_cases/inner_transactions/out/FieldTupleContract.approval.mir @@ -4,341 +4,400 @@ // test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program() -> uint64: main_block@0: - txn NumAppArgs // {txn} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - bz main_bare_routing@6 // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // Implicit fall through to main_abi_routing@1 // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 + txn NumAppArgs // {txn} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + bz main_bare_routing@6 // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // Implicit fall through to main_abi_routing@1 // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 main_abi_routing@1: - txna ApplicationArgs 0 // {txna} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - method "test_assign_tuple()void" // tmp%1#0,method<"test_assign_tuple()void"> class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - method "test_assign_tuple_mixed()void" // tmp%1#0,method<"test_assign_tuple()void">,method<"test_assign_tuple_mixed()void"> class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - uncover 2 // load tmp%1#0 from l-stack (no copy) method<"test_assign_tuple()void">,method<"test_assign_tuple_mixed()void">,tmp%1#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - match main_test_assign_tuple_route@2 main_test_assign_tuple_mixed_route@3 // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - err // reject transaction // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 + txna ApplicationArgs 0 // {txna} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + method "test_assign_tuple()void" // tmp%1#0,method<"test_assign_tuple()void"> class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + method "test_assign_tuple_mixed()void" // tmp%1#0,method<"test_assign_tuple()void">,method<"test_assign_tuple_mixed()void"> class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + uncover 2 // load tmp%1#0 from l-stack (no copy) method<"test_assign_tuple()void">,method<"test_assign_tuple_mixed()void">,tmp%1#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + match main_test_assign_tuple_route@2 main_test_assign_tuple_mixed_route@3 // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + err // reject transaction // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 main_test_assign_tuple_route@2: - txn OnCompletion // {txn} arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - ! // {!} arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - assert // OnCompletion is NoOp // arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - txn ApplicationID // {txn} arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - // virtual: store tmp%4#0 to l-stack (no copy) tmp%4#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - // virtual: load tmp%4#0 from l-stack (no copy) tmp%4#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - assert // is not creating // arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - callsub test_assign_tuple // arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - int 1 // 1 arc4.abimethod inner_transactions/field_tuple_assignment.py:22 - return // arc4.abimethod inner_transactions/field_tuple_assignment.py:22 + txn OnCompletion // {txn} arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + ! // {!} arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + assert // OnCompletion is NoOp // arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + txn ApplicationID // {txn} arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + // virtual: store tmp%4#0 to l-stack (no copy) tmp%4#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + // virtual: load tmp%4#0 from l-stack (no copy) tmp%4#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + assert // is not creating // arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + callsub test_assign_tuple // arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + int 1 // 1 arc4.abimethod inner_transactions/field_tuple_assignment.py:25 + return // arc4.abimethod inner_transactions/field_tuple_assignment.py:25 main_test_assign_tuple_mixed_route@3: - txn OnCompletion // {txn} arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - // virtual: store tmp%5#0 to l-stack (no copy) tmp%5#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - // virtual: load tmp%5#0 from l-stack (no copy) tmp%5#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - ! // {!} arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - // virtual: store tmp%6#0 to l-stack (no copy) tmp%6#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - // virtual: load tmp%6#0 from l-stack (no copy) tmp%6#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - assert // OnCompletion is NoOp // arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - txn ApplicationID // {txn} arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - // virtual: store tmp%7#0 to l-stack (no copy) tmp%7#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - // virtual: load tmp%7#0 from l-stack (no copy) tmp%7#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - assert // is not creating // arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - callsub test_assign_tuple_mixed // arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - int 1 // 1 arc4.abimethod inner_transactions/field_tuple_assignment.py:69 - return // arc4.abimethod inner_transactions/field_tuple_assignment.py:69 + txn OnCompletion // {txn} arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + // virtual: store tmp%5#0 to l-stack (no copy) tmp%5#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + // virtual: load tmp%5#0 from l-stack (no copy) tmp%5#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + ! // {!} arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + // virtual: store tmp%6#0 to l-stack (no copy) tmp%6#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + // virtual: load tmp%6#0 from l-stack (no copy) tmp%6#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + assert // OnCompletion is NoOp // arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + txn ApplicationID // {txn} arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + // virtual: store tmp%7#0 to l-stack (no copy) tmp%7#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + // virtual: load tmp%7#0 from l-stack (no copy) tmp%7#0 arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + assert // is not creating // arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + callsub test_assign_tuple_mixed // arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + int 1 // 1 arc4.abimethod inner_transactions/field_tuple_assignment.py:85 + return // arc4.abimethod inner_transactions/field_tuple_assignment.py:85 main_bare_routing@6: - txn OnCompletion // {txn} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: store tmp%8#0 to l-stack (no copy) tmp%8#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: load tmp%8#0 from l-stack (no copy) tmp%8#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - ! // {!} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: store not%tmp%8#0 to l-stack (no copy) not%tmp%8#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: load not%tmp%8#0 from l-stack (no copy) not%tmp%8#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - assert // reject transaction // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - txn ApplicationID // {txn} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: store tmp%9#0 to l-stack (no copy) tmp%9#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: load tmp%9#0 from l-stack (no copy) tmp%9#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - ! // {!} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: store tmp%10#0 to l-stack (no copy) tmp%10#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - // virtual: load tmp%10#0 from l-stack (no copy) tmp%10#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - assert // is creating // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - int 1 // 1 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - return // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 + txn OnCompletion // {txn} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: store tmp%8#0 to l-stack (no copy) tmp%8#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: load tmp%8#0 from l-stack (no copy) tmp%8#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + ! // {!} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: store not%tmp%8#0 to l-stack (no copy) not%tmp%8#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: load not%tmp%8#0 from l-stack (no copy) not%tmp%8#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + assert // reject transaction // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + txn ApplicationID // {txn} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: store tmp%9#0 to l-stack (no copy) tmp%9#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: load tmp%9#0 from l-stack (no copy) tmp%9#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + ! // {!} class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: store tmp%10#0 to l-stack (no copy) tmp%10#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + // virtual: load tmp%10#0 from l-stack (no copy) tmp%10#0 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + assert // is creating // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + int 1 // 1 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + return // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 // test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: test_assign_tuple: - proto 0 0 // @arc4.abimethod\ndef test_assign_tuple(self) -> None: inner_transactions/field_tuple_assignment.py:22-23 + proto 0 0 // @arc4.abimethod\ndef test_assign_tuple(self) -> None: inner_transactions/field_tuple_assignment.py:25-26 test_assign_tuple_block@0: - itxn_begin // itxn.submit_txns(create_txns[0], create_txns[1]) inner_transactions/field_tuple_assignment.py:39 - byte 0x3161 // 0x3161 Bytes(b"1a") inner_transactions/field_tuple_assignment.py:29 - itxn_field ApplicationArgs // - byte 0x3261 // 0x3261 Bytes(b"2a") inner_transactions/field_tuple_assignment.py:29 - itxn_field ApplicationArgs // - int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:28 - itxn_field OnCompletion // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:27 - itxn_field ClearStateProgramPages // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:26 - itxn_field ApprovalProgramPages // - int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:25 - itxn_field TypeEnum // - int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:25 - itxn_field Fee // - itxn_next // create_txns[1] inner_transactions/field_tuple_assignment.py:39 - byte 0x646966666572656e7420706172616d20736574 // 0x646966666572656e7420706172616d20736574 b"different param set" inner_transactions/field_tuple_assignment.py:36 - itxn_field Note // - byte 0x3361 // 0x3361 Bytes(b"3a") inner_transactions/field_tuple_assignment.py:35 - itxn_field ApplicationArgs // - byte 0x3461 // 0x3461 Bytes(b"4a") inner_transactions/field_tuple_assignment.py:35 - itxn_field ApplicationArgs // - byte 0x3561 // 0x3561 Bytes(b"5a") inner_transactions/field_tuple_assignment.py:35 - itxn_field ApplicationArgs // - int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:34 - itxn_field OnCompletion // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:33 - itxn_field ClearStateProgramPages // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:32 - itxn_field ApprovalProgramPages // - int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:31 - itxn_field TypeEnum // - int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:31 - itxn_field Fee // - itxn_submit // itxn.submit_txns(create_txns[0], create_txns[1]) inner_transactions/field_tuple_assignment.py:39 - gitxna 0 ApplicationArgs 0 // {gitxna} txn_1.app_args(0) inner_transactions/field_tuple_assignment.py:41 - // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 txn_1.app_args(0) inner_transactions/field_tuple_assignment.py:41 - // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:41 - byte 0x3161 // tmp%0#0,0x3161 b"1a" inner_transactions/field_tuple_assignment.py:41 - == // {==} txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:41 - // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:41 - // virtual: load tmp%1#0 from l-stack (no copy) tmp%1#0 assert txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:41 - assert // assert txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:41 - gitxna 0 ApplicationArgs 1 // {gitxna} txn_1.app_args(1) inner_transactions/field_tuple_assignment.py:42 - // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 txn_1.app_args(1) inner_transactions/field_tuple_assignment.py:42 - // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:42 - byte 0x3261 // tmp%2#0,0x3261 b"2a" inner_transactions/field_tuple_assignment.py:42 - == // {==} txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:42 - // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:42 - // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 assert txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:42 - assert // assert txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:42 - itxna ApplicationArgs 0 // {itxna} txn_2.app_args(0) inner_transactions/field_tuple_assignment.py:43 - // virtual: store tmp%4#0 to l-stack (no copy) tmp%4#0 txn_2.app_args(0) inner_transactions/field_tuple_assignment.py:43 - // virtual: load tmp%4#0 from l-stack (no copy) tmp%4#0 txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:43 - byte 0x3361 // tmp%4#0,0x3361 b"3a" inner_transactions/field_tuple_assignment.py:43 - == // {==} txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:43 - // virtual: store tmp%5#0 to l-stack (no copy) tmp%5#0 txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:43 - // virtual: load tmp%5#0 from l-stack (no copy) tmp%5#0 assert txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:43 - assert // assert txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:43 - itxna ApplicationArgs 1 // {itxna} txn_2.app_args(1) inner_transactions/field_tuple_assignment.py:44 - // virtual: store tmp%6#0 to l-stack (no copy) tmp%6#0 txn_2.app_args(1) inner_transactions/field_tuple_assignment.py:44 - // virtual: load tmp%6#0 from l-stack (no copy) tmp%6#0 txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:44 - byte 0x3461 // tmp%6#0,0x3461 b"4a" inner_transactions/field_tuple_assignment.py:44 - == // {==} txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:44 - // virtual: store tmp%7#0 to l-stack (no copy) tmp%7#0 txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:44 - // virtual: load tmp%7#0 from l-stack (no copy) tmp%7#0 assert txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:44 - assert // assert txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:44 - itxna ApplicationArgs 2 // {itxna} txn_2.app_args(2) inner_transactions/field_tuple_assignment.py:45 - // virtual: store tmp%8#0 to l-stack (no copy) tmp%8#0 txn_2.app_args(2) inner_transactions/field_tuple_assignment.py:45 - // virtual: load tmp%8#0 from l-stack (no copy) tmp%8#0 txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:45 - byte 0x3561 // tmp%8#0,0x3561 b"5a" inner_transactions/field_tuple_assignment.py:45 - == // {==} txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:45 - // virtual: store tmp%9#0 to l-stack (no copy) tmp%9#0 txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:45 - // virtual: load tmp%9#0 from l-stack (no copy) tmp%9#0 assert txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:45 - assert // assert txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:45 - itxn_begin // itxn.submit_txns(create_txns[1], create_txns[0]) inner_transactions/field_tuple_assignment.py:50 - byte 0x646966666572656e7420706172616d20736574 // 0x646966666572656e7420706172616d20736574 b"different param set" inner_transactions/field_tuple_assignment.py:36 + int 42 // 42 UInt64(42) inner_transactions/field_tuple_assignment.py:38 + itob // {itob} UInt64(42) inner_transactions/field_tuple_assignment.py:38 + // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 UInt64(42) inner_transactions/field_tuple_assignment.py:38 + int 1 // tmp%0#0,1 True inner_transactions/field_tuple_assignment.py:39 + itob // tmp%0#0,{itob} True inner_transactions/field_tuple_assignment.py:39 + // virtual: store tmp%1#0 to l-stack (no copy) tmp%0#0,tmp%1#0 True inner_transactions/field_tuple_assignment.py:39 + itxn_begin // tmp%0#0,tmp%1#0 itxn.submit_txns(create_txns[0], create_txns[1]) inner_transactions/field_tuple_assignment.py:50 + byte 0x3161 // tmp%0#0,tmp%1#0,0x3161 Bytes(b"1a") inner_transactions/field_tuple_assignment.py:33 + itxn_field ApplicationArgs // tmp%0#0,tmp%1#0 + byte 0x3261 // tmp%0#0,tmp%1#0,0x3261 Bytes(b"2a") inner_transactions/field_tuple_assignment.py:34 + itxn_field ApplicationArgs // tmp%0#0,tmp%1#0 + byte 0x68656c6c6f // tmp%0#0,tmp%1#0,0x68656c6c6f b"hello" inner_transactions/field_tuple_assignment.py:35 + itxn_field ApplicationArgs // tmp%0#0,tmp%1#0 + byte "world" // tmp%0#0,tmp%1#0,"world" "world" inner_transactions/field_tuple_assignment.py:36 + itxn_field ApplicationArgs // tmp%0#0,tmp%1#0 + byte "!" // tmp%0#0,tmp%1#0,"!" String("!") inner_transactions/field_tuple_assignment.py:37 + itxn_field ApplicationArgs // tmp%0#0,tmp%1#0 + dig 1 // load tmp%0#0 from l-stack (copy) tmp%0#0,tmp%1#0,tmp%0#0 + itxn_field ApplicationArgs // tmp%0#0,tmp%1#0 + // virtual: load tmp%1#0 from l-stack (no copy) tmp%0#0,tmp%1#0 + itxn_field ApplicationArgs // tmp%0#0 + int DeleteApplication // tmp%0#0,DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:31 + itxn_field OnCompletion // tmp%0#0 + byte 0x098101 // tmp%0#0,0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:30 + itxn_field ClearStateProgramPages // tmp%0#0 + byte 0x098101 // tmp%0#0,0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:29 + itxn_field ApprovalProgramPages // tmp%0#0 + int appl // tmp%0#0,appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:28 + itxn_field TypeEnum // tmp%0#0 + int 0 // tmp%0#0,0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:28 + itxn_field Fee // tmp%0#0 + itxn_next // tmp%0#0 create_txns[1] inner_transactions/field_tuple_assignment.py:50 + byte 0x646966666572656e7420706172616d20736574 // tmp%0#0,0x646966666572656e7420706172616d20736574 b"different param set" inner_transactions/field_tuple_assignment.py:47 + itxn_field Note // tmp%0#0 + byte 0x3361 // tmp%0#0,0x3361 Bytes(b"3a") inner_transactions/field_tuple_assignment.py:46 + itxn_field ApplicationArgs // tmp%0#0 + byte 0x3461 // tmp%0#0,0x3461 Bytes(b"4a") inner_transactions/field_tuple_assignment.py:46 + itxn_field ApplicationArgs // tmp%0#0 + byte 0x3561 // tmp%0#0,0x3561 Bytes(b"5a") inner_transactions/field_tuple_assignment.py:46 + itxn_field ApplicationArgs // tmp%0#0 + int DeleteApplication // tmp%0#0,DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:45 + itxn_field OnCompletion // tmp%0#0 + byte 0x098101 // tmp%0#0,0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:44 + itxn_field ClearStateProgramPages // tmp%0#0 + byte 0x098101 // tmp%0#0,0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:43 + itxn_field ApprovalProgramPages // tmp%0#0 + int appl // tmp%0#0,appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:42 + itxn_field TypeEnum // tmp%0#0 + int 0 // tmp%0#0,0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:42 + itxn_field Fee // tmp%0#0 + itxn_submit // tmp%0#0 itxn.submit_txns(create_txns[0], create_txns[1]) inner_transactions/field_tuple_assignment.py:50 + gitxna 0 ApplicationArgs 0 // tmp%0#0,{gitxna} txn_1.app_args(0) inner_transactions/field_tuple_assignment.py:52 + // virtual: store tmp%2#0 to l-stack (no copy) tmp%0#0,tmp%2#0 txn_1.app_args(0) inner_transactions/field_tuple_assignment.py:52 + // virtual: load tmp%2#0 from l-stack (no copy) tmp%0#0,tmp%2#0 txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:52 + byte 0x3161 // tmp%0#0,tmp%2#0,0x3161 b"1a" inner_transactions/field_tuple_assignment.py:52 + == // tmp%0#0,{==} txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:52 + // virtual: store tmp%3#0 to l-stack (no copy) tmp%0#0,tmp%3#0 txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:52 + // virtual: load tmp%3#0 from l-stack (no copy) tmp%0#0,tmp%3#0 assert txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:52 + assert // tmp%0#0 assert txn_1.app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:52 + gitxna 0 ApplicationArgs 1 // tmp%0#0,{gitxna} txn_1.app_args(1) inner_transactions/field_tuple_assignment.py:53 + // virtual: store tmp%4#0 to l-stack (no copy) tmp%0#0,tmp%4#0 txn_1.app_args(1) inner_transactions/field_tuple_assignment.py:53 + // virtual: load tmp%4#0 from l-stack (no copy) tmp%0#0,tmp%4#0 txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:53 + byte 0x3261 // tmp%0#0,tmp%4#0,0x3261 b"2a" inner_transactions/field_tuple_assignment.py:53 + == // tmp%0#0,{==} txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:53 + // virtual: store tmp%5#0 to l-stack (no copy) tmp%0#0,tmp%5#0 txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:53 + // virtual: load tmp%5#0 from l-stack (no copy) tmp%0#0,tmp%5#0 assert txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:53 + assert // tmp%0#0 assert txn_1.app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:53 + gitxna 0 ApplicationArgs 2 // tmp%0#0,{gitxna} txn_1.app_args(2) inner_transactions/field_tuple_assignment.py:54 + // virtual: store tmp%6#0 to l-stack (no copy) tmp%0#0,tmp%6#0 txn_1.app_args(2) inner_transactions/field_tuple_assignment.py:54 + // virtual: load tmp%6#0 from l-stack (no copy) tmp%0#0,tmp%6#0 txn_1.app_args(2) == b"hello" inner_transactions/field_tuple_assignment.py:54 + byte 0x68656c6c6f // tmp%0#0,tmp%6#0,0x68656c6c6f b"hello" inner_transactions/field_tuple_assignment.py:54 + == // tmp%0#0,{==} txn_1.app_args(2) == b"hello" inner_transactions/field_tuple_assignment.py:54 + // virtual: store tmp%7#0 to l-stack (no copy) tmp%0#0,tmp%7#0 txn_1.app_args(2) == b"hello" inner_transactions/field_tuple_assignment.py:54 + // virtual: load tmp%7#0 from l-stack (no copy) tmp%0#0,tmp%7#0 assert txn_1.app_args(2) == b"hello" inner_transactions/field_tuple_assignment.py:54 + assert // tmp%0#0 assert txn_1.app_args(2) == b"hello" inner_transactions/field_tuple_assignment.py:54 + gitxna 0 ApplicationArgs 3 // tmp%0#0,{gitxna} txn_1.app_args(3) inner_transactions/field_tuple_assignment.py:55 + // virtual: store tmp%8#0 to l-stack (no copy) tmp%0#0,tmp%8#0 txn_1.app_args(3) inner_transactions/field_tuple_assignment.py:55 + // virtual: load tmp%8#0 from l-stack (no copy) tmp%0#0,tmp%8#0 txn_1.app_args(3) == b"world" inner_transactions/field_tuple_assignment.py:55 + byte 0x776f726c64 // tmp%0#0,tmp%8#0,0x776f726c64 b"world" inner_transactions/field_tuple_assignment.py:55 + == // tmp%0#0,{==} txn_1.app_args(3) == b"world" inner_transactions/field_tuple_assignment.py:55 + // virtual: store tmp%9#0 to l-stack (no copy) tmp%0#0,tmp%9#0 txn_1.app_args(3) == b"world" inner_transactions/field_tuple_assignment.py:55 + // virtual: load tmp%9#0 from l-stack (no copy) tmp%0#0,tmp%9#0 assert txn_1.app_args(3) == b"world" inner_transactions/field_tuple_assignment.py:55 + assert // tmp%0#0 assert txn_1.app_args(3) == b"world" inner_transactions/field_tuple_assignment.py:55 + gitxna 0 ApplicationArgs 4 // tmp%0#0,{gitxna} txn_1.app_args(4) inner_transactions/field_tuple_assignment.py:56 + // virtual: store tmp%10#0 to l-stack (no copy) tmp%0#0,tmp%10#0 txn_1.app_args(4) inner_transactions/field_tuple_assignment.py:56 + // virtual: load tmp%10#0 from l-stack (no copy) tmp%0#0,tmp%10#0 txn_1.app_args(4) == b"!" inner_transactions/field_tuple_assignment.py:56 + byte 0x21 // tmp%0#0,tmp%10#0,0x21 b"!" inner_transactions/field_tuple_assignment.py:56 + == // tmp%0#0,{==} txn_1.app_args(4) == b"!" inner_transactions/field_tuple_assignment.py:56 + // virtual: store tmp%11#0 to l-stack (no copy) tmp%0#0,tmp%11#0 txn_1.app_args(4) == b"!" inner_transactions/field_tuple_assignment.py:56 + // virtual: load tmp%11#0 from l-stack (no copy) tmp%0#0,tmp%11#0 assert txn_1.app_args(4) == b"!" inner_transactions/field_tuple_assignment.py:56 + assert // tmp%0#0 assert txn_1.app_args(4) == b"!" inner_transactions/field_tuple_assignment.py:56 + gitxna 0 ApplicationArgs 5 // tmp%0#0,{gitxna} txn_1.app_args(5) inner_transactions/field_tuple_assignment.py:57 + // virtual: store tmp%12#0 to l-stack (no copy) tmp%0#0,tmp%12#0 txn_1.app_args(5) inner_transactions/field_tuple_assignment.py:57 + // virtual: load tmp%12#0 from l-stack (no copy) tmp%0#0,tmp%12#0 txn_1.app_args(5) == op.itob(42) inner_transactions/field_tuple_assignment.py:57 + uncover 1 // load tmp%0#0 from l-stack (no copy) tmp%12#0,tmp%0#0 txn_1.app_args(5) == op.itob(42) inner_transactions/field_tuple_assignment.py:57 + == // {==} txn_1.app_args(5) == op.itob(42) inner_transactions/field_tuple_assignment.py:57 + // virtual: store tmp%14#0 to l-stack (no copy) tmp%14#0 txn_1.app_args(5) == op.itob(42) inner_transactions/field_tuple_assignment.py:57 + // virtual: load tmp%14#0 from l-stack (no copy) tmp%14#0 assert txn_1.app_args(5) == op.itob(42) inner_transactions/field_tuple_assignment.py:57 + assert // assert txn_1.app_args(5) == op.itob(42) inner_transactions/field_tuple_assignment.py:57 + gitxna 0 ApplicationArgs 6 // {gitxna} txn_1.app_args(6) inner_transactions/field_tuple_assignment.py:58 + // virtual: store tmp%15#0 to l-stack (no copy) tmp%15#0 txn_1.app_args(6) inner_transactions/field_tuple_assignment.py:58 + int 1 // tmp%15#0,1 1 inner_transactions/field_tuple_assignment.py:58 + itob // tmp%15#0,{itob} op.itob(1) inner_transactions/field_tuple_assignment.py:58 + // virtual: store tmp%16#0 to l-stack (no copy) tmp%15#0,tmp%16#0 op.itob(1) inner_transactions/field_tuple_assignment.py:58 + // virtual: load tmp%15#0 from l-stack (no copy) tmp%16#0,tmp%15#0 txn_1.app_args(6) == op.itob(1) inner_transactions/field_tuple_assignment.py:58 + // virtual: load tmp%16#0 from l-stack (no copy) tmp%15#0,tmp%16#0 txn_1.app_args(6) == op.itob(1) inner_transactions/field_tuple_assignment.py:58 + == // {==} txn_1.app_args(6) == op.itob(1) inner_transactions/field_tuple_assignment.py:58 + // virtual: store tmp%17#0 to l-stack (no copy) tmp%17#0 txn_1.app_args(6) == op.itob(1) inner_transactions/field_tuple_assignment.py:58 + // virtual: load tmp%17#0 from l-stack (no copy) tmp%17#0 assert txn_1.app_args(6) == op.itob(1) inner_transactions/field_tuple_assignment.py:58 + assert // assert txn_1.app_args(6) == op.itob(1) inner_transactions/field_tuple_assignment.py:58 + itxna ApplicationArgs 0 // {itxna} txn_2.app_args(0) inner_transactions/field_tuple_assignment.py:59 + // virtual: store tmp%18#0 to l-stack (no copy) tmp%18#0 txn_2.app_args(0) inner_transactions/field_tuple_assignment.py:59 + // virtual: load tmp%18#0 from l-stack (no copy) tmp%18#0 txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:59 + byte 0x3361 // tmp%18#0,0x3361 b"3a" inner_transactions/field_tuple_assignment.py:59 + == // {==} txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:59 + // virtual: store tmp%19#0 to l-stack (no copy) tmp%19#0 txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:59 + // virtual: load tmp%19#0 from l-stack (no copy) tmp%19#0 assert txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:59 + assert // assert txn_2.app_args(0) == b"3a" inner_transactions/field_tuple_assignment.py:59 + itxna ApplicationArgs 1 // {itxna} txn_2.app_args(1) inner_transactions/field_tuple_assignment.py:60 + // virtual: store tmp%20#0 to l-stack (no copy) tmp%20#0 txn_2.app_args(1) inner_transactions/field_tuple_assignment.py:60 + // virtual: load tmp%20#0 from l-stack (no copy) tmp%20#0 txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:60 + byte 0x3461 // tmp%20#0,0x3461 b"4a" inner_transactions/field_tuple_assignment.py:60 + == // {==} txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:60 + // virtual: store tmp%21#0 to l-stack (no copy) tmp%21#0 txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:60 + // virtual: load tmp%21#0 from l-stack (no copy) tmp%21#0 assert txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:60 + assert // assert txn_2.app_args(1) == b"4a" inner_transactions/field_tuple_assignment.py:60 + itxna ApplicationArgs 2 // {itxna} txn_2.app_args(2) inner_transactions/field_tuple_assignment.py:61 + // virtual: store tmp%22#0 to l-stack (no copy) tmp%22#0 txn_2.app_args(2) inner_transactions/field_tuple_assignment.py:61 + // virtual: load tmp%22#0 from l-stack (no copy) tmp%22#0 txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:61 + byte 0x3561 // tmp%22#0,0x3561 b"5a" inner_transactions/field_tuple_assignment.py:61 + == // {==} txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:61 + // virtual: store tmp%23#0 to l-stack (no copy) tmp%23#0 txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:61 + // virtual: load tmp%23#0 from l-stack (no copy) tmp%23#0 assert txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:61 + assert // assert txn_2.app_args(2) == b"5a" inner_transactions/field_tuple_assignment.py:61 + itxn_begin // itxn.submit_txns(create_txns[1], create_txns[0]) inner_transactions/field_tuple_assignment.py:66 + byte 0x646966666572656e7420706172616d20736574 // 0x646966666572656e7420706172616d20736574 b"different param set" inner_transactions/field_tuple_assignment.py:47 itxn_field Note // - byte 0x3362 // 0x3362 Bytes(b"3b") inner_transactions/field_tuple_assignment.py:48 + byte 0x3362 // 0x3362 Bytes(b"3b") inner_transactions/field_tuple_assignment.py:64 itxn_field ApplicationArgs // - byte 0x3462 // 0x3462 Bytes(b"4b") inner_transactions/field_tuple_assignment.py:48 + byte 0x3462 // 0x3462 Bytes(b"4b") inner_transactions/field_tuple_assignment.py:64 itxn_field ApplicationArgs // - byte 0x3562 // 0x3562 Bytes(b"5b") inner_transactions/field_tuple_assignment.py:48 + byte 0x3562 // 0x3562 Bytes(b"5b") inner_transactions/field_tuple_assignment.py:64 itxn_field ApplicationArgs // - int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:34 + int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:45 itxn_field OnCompletion // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:33 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:44 itxn_field ClearStateProgramPages // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:32 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:43 itxn_field ApprovalProgramPages // - int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:31 + int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:42 itxn_field TypeEnum // - int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:31 + int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:42 itxn_field Fee // - itxn_next // create_txns[0] inner_transactions/field_tuple_assignment.py:50 - byte 0x3162 // 0x3162 Bytes(b"1b") inner_transactions/field_tuple_assignment.py:47 + itxn_next // create_txns[0] inner_transactions/field_tuple_assignment.py:66 + byte 0x3162 // 0x3162 Bytes(b"1b") inner_transactions/field_tuple_assignment.py:63 itxn_field ApplicationArgs // - byte 0x3262 // 0x3262 Bytes(b"2b") inner_transactions/field_tuple_assignment.py:47 + byte 0x3262 // 0x3262 Bytes(b"2b") inner_transactions/field_tuple_assignment.py:63 itxn_field ApplicationArgs // - int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:28 + int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:31 itxn_field OnCompletion // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:27 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:30 itxn_field ClearStateProgramPages // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:26 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:29 itxn_field ApprovalProgramPages // - int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:25 + int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:28 itxn_field TypeEnum // - int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:25 + int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:28 itxn_field Fee // - itxn_submit // itxn.submit_txns(create_txns[1], create_txns[0]) inner_transactions/field_tuple_assignment.py:50 - itxna ApplicationArgs 0 // {itxna} txn_2.app_args(0) inner_transactions/field_tuple_assignment.py:52 - // virtual: store tmp%10#0 to l-stack (no copy) tmp%10#0 txn_2.app_args(0) inner_transactions/field_tuple_assignment.py:52 - // virtual: load tmp%10#0 from l-stack (no copy) tmp%10#0 txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:52 - byte 0x3162 // tmp%10#0,0x3162 b"1b" inner_transactions/field_tuple_assignment.py:52 - == // {==} txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:52 - // virtual: store tmp%11#0 to l-stack (no copy) tmp%11#0 txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:52 - // virtual: load tmp%11#0 from l-stack (no copy) tmp%11#0 assert txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:52 - assert // assert txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:52 - itxna ApplicationArgs 1 // {itxna} txn_2.app_args(1) inner_transactions/field_tuple_assignment.py:53 - // virtual: store tmp%12#0 to l-stack (no copy) tmp%12#0 txn_2.app_args(1) inner_transactions/field_tuple_assignment.py:53 - // virtual: load tmp%12#0 from l-stack (no copy) tmp%12#0 txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:53 - byte 0x3262 // tmp%12#0,0x3262 b"2b" inner_transactions/field_tuple_assignment.py:53 - == // {==} txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:53 - // virtual: store tmp%13#0 to l-stack (no copy) tmp%13#0 txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:53 - // virtual: load tmp%13#0 from l-stack (no copy) tmp%13#0 assert txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:53 - assert // assert txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:53 - gitxna 0 ApplicationArgs 0 // {gitxna} txn_1.app_args(0) inner_transactions/field_tuple_assignment.py:54 - // virtual: store tmp%14#0 to l-stack (no copy) tmp%14#0 txn_1.app_args(0) inner_transactions/field_tuple_assignment.py:54 - // virtual: load tmp%14#0 from l-stack (no copy) tmp%14#0 txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:54 - byte 0x3362 // tmp%14#0,0x3362 b"3b" inner_transactions/field_tuple_assignment.py:54 - == // {==} txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:54 - // virtual: store tmp%15#0 to l-stack (no copy) tmp%15#0 txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:54 - // virtual: load tmp%15#0 from l-stack (no copy) tmp%15#0 assert txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:54 - assert // assert txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:54 - gitxna 0 ApplicationArgs 1 // {gitxna} txn_1.app_args(1) inner_transactions/field_tuple_assignment.py:55 - // virtual: store tmp%16#0 to l-stack (no copy) tmp%16#0 txn_1.app_args(1) inner_transactions/field_tuple_assignment.py:55 - // virtual: load tmp%16#0 from l-stack (no copy) tmp%16#0 txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:55 - byte 0x3462 // tmp%16#0,0x3462 b"4b" inner_transactions/field_tuple_assignment.py:55 - == // {==} txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:55 - // virtual: store tmp%17#0 to l-stack (no copy) tmp%17#0 txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:55 - // virtual: load tmp%17#0 from l-stack (no copy) tmp%17#0 assert txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:55 - assert // assert txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:55 - gitxna 0 ApplicationArgs 2 // {gitxna} txn_1.app_args(2) inner_transactions/field_tuple_assignment.py:56 - // virtual: store tmp%18#0 to l-stack (no copy) tmp%18#0 txn_1.app_args(2) inner_transactions/field_tuple_assignment.py:56 - // virtual: load tmp%18#0 from l-stack (no copy) tmp%18#0 txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:56 - byte 0x3562 // tmp%18#0,0x3562 b"5b" inner_transactions/field_tuple_assignment.py:56 - == // {==} txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:56 - // virtual: store tmp%19#0 to l-stack (no copy) tmp%19#0 txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:56 - // virtual: load tmp%19#0 from l-stack (no copy) tmp%19#0 assert txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:56 - assert // assert txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:56 - itxn_begin // itxn.submit_txns(create_txns[0], create_txns[1]) inner_transactions/field_tuple_assignment.py:61 - byte 0x3163 // 0x3163 Bytes(b"1c") inner_transactions/field_tuple_assignment.py:58 + itxn_submit // itxn.submit_txns(create_txns[1], create_txns[0]) inner_transactions/field_tuple_assignment.py:66 + itxna ApplicationArgs 0 // {itxna} txn_2.app_args(0) inner_transactions/field_tuple_assignment.py:68 + // virtual: store tmp%24#0 to l-stack (no copy) tmp%24#0 txn_2.app_args(0) inner_transactions/field_tuple_assignment.py:68 + // virtual: load tmp%24#0 from l-stack (no copy) tmp%24#0 txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:68 + byte 0x3162 // tmp%24#0,0x3162 b"1b" inner_transactions/field_tuple_assignment.py:68 + == // {==} txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:68 + // virtual: store tmp%25#0 to l-stack (no copy) tmp%25#0 txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:68 + // virtual: load tmp%25#0 from l-stack (no copy) tmp%25#0 assert txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:68 + assert // assert txn_2.app_args(0) == b"1b" inner_transactions/field_tuple_assignment.py:68 + itxna ApplicationArgs 1 // {itxna} txn_2.app_args(1) inner_transactions/field_tuple_assignment.py:69 + // virtual: store tmp%26#0 to l-stack (no copy) tmp%26#0 txn_2.app_args(1) inner_transactions/field_tuple_assignment.py:69 + // virtual: load tmp%26#0 from l-stack (no copy) tmp%26#0 txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:69 + byte 0x3262 // tmp%26#0,0x3262 b"2b" inner_transactions/field_tuple_assignment.py:69 + == // {==} txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:69 + // virtual: store tmp%27#0 to l-stack (no copy) tmp%27#0 txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:69 + // virtual: load tmp%27#0 from l-stack (no copy) tmp%27#0 assert txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:69 + assert // assert txn_2.app_args(1) == b"2b" inner_transactions/field_tuple_assignment.py:69 + gitxna 0 ApplicationArgs 0 // {gitxna} txn_1.app_args(0) inner_transactions/field_tuple_assignment.py:70 + // virtual: store tmp%28#0 to l-stack (no copy) tmp%28#0 txn_1.app_args(0) inner_transactions/field_tuple_assignment.py:70 + // virtual: load tmp%28#0 from l-stack (no copy) tmp%28#0 txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:70 + byte 0x3362 // tmp%28#0,0x3362 b"3b" inner_transactions/field_tuple_assignment.py:70 + == // {==} txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:70 + // virtual: store tmp%29#0 to l-stack (no copy) tmp%29#0 txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:70 + // virtual: load tmp%29#0 from l-stack (no copy) tmp%29#0 assert txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:70 + assert // assert txn_1.app_args(0) == b"3b" inner_transactions/field_tuple_assignment.py:70 + gitxna 0 ApplicationArgs 1 // {gitxna} txn_1.app_args(1) inner_transactions/field_tuple_assignment.py:71 + // virtual: store tmp%30#0 to l-stack (no copy) tmp%30#0 txn_1.app_args(1) inner_transactions/field_tuple_assignment.py:71 + // virtual: load tmp%30#0 from l-stack (no copy) tmp%30#0 txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:71 + byte 0x3462 // tmp%30#0,0x3462 b"4b" inner_transactions/field_tuple_assignment.py:71 + == // {==} txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:71 + // virtual: store tmp%31#0 to l-stack (no copy) tmp%31#0 txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:71 + // virtual: load tmp%31#0 from l-stack (no copy) tmp%31#0 assert txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:71 + assert // assert txn_1.app_args(1) == b"4b" inner_transactions/field_tuple_assignment.py:71 + gitxna 0 ApplicationArgs 2 // {gitxna} txn_1.app_args(2) inner_transactions/field_tuple_assignment.py:72 + // virtual: store tmp%32#0 to l-stack (no copy) tmp%32#0 txn_1.app_args(2) inner_transactions/field_tuple_assignment.py:72 + // virtual: load tmp%32#0 from l-stack (no copy) tmp%32#0 txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:72 + byte 0x3562 // tmp%32#0,0x3562 b"5b" inner_transactions/field_tuple_assignment.py:72 + == // {==} txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:72 + // virtual: store tmp%33#0 to l-stack (no copy) tmp%33#0 txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:72 + // virtual: load tmp%33#0 from l-stack (no copy) tmp%33#0 assert txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:72 + assert // assert txn_1.app_args(2) == b"5b" inner_transactions/field_tuple_assignment.py:72 + itxn_begin // itxn.submit_txns(create_txns[0], create_txns[1]) inner_transactions/field_tuple_assignment.py:77 + byte 0x3163 // 0x3163 Bytes(b"1c") inner_transactions/field_tuple_assignment.py:74 itxn_field ApplicationArgs // - byte 0x3263 // 0x3263 Bytes(b"2c") inner_transactions/field_tuple_assignment.py:58 + byte 0x3263 // 0x3263 Bytes(b"2c") inner_transactions/field_tuple_assignment.py:74 itxn_field ApplicationArgs // - int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:28 + int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:31 itxn_field OnCompletion // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:27 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:30 itxn_field ClearStateProgramPages // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:26 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:29 itxn_field ApprovalProgramPages // - int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:25 + int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:28 itxn_field TypeEnum // - int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:25 + int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:28 itxn_field Fee // - itxn_next // create_txns[1] inner_transactions/field_tuple_assignment.py:61 - byte 0x646966666572656e7420706172616d20736574 // 0x646966666572656e7420706172616d20736574 b"different param set" inner_transactions/field_tuple_assignment.py:36 + itxn_next // create_txns[1] inner_transactions/field_tuple_assignment.py:77 + byte 0x646966666572656e7420706172616d20736574 // 0x646966666572656e7420706172616d20736574 b"different param set" inner_transactions/field_tuple_assignment.py:47 itxn_field Note // - byte 0x3363 // 0x3363 Bytes(b"3c") inner_transactions/field_tuple_assignment.py:59 + byte 0x3363 // 0x3363 Bytes(b"3c") inner_transactions/field_tuple_assignment.py:75 itxn_field ApplicationArgs // - byte 0x3463 // 0x3463 Bytes(b"4c") inner_transactions/field_tuple_assignment.py:59 + byte 0x3463 // 0x3463 Bytes(b"4c") inner_transactions/field_tuple_assignment.py:75 itxn_field ApplicationArgs // - byte 0x3563 // 0x3563 Bytes(b"5c") inner_transactions/field_tuple_assignment.py:59 + byte 0x3563 // 0x3563 Bytes(b"5c") inner_transactions/field_tuple_assignment.py:75 itxn_field ApplicationArgs // - int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:34 + int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:45 itxn_field OnCompletion // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:33 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:44 itxn_field ClearStateProgramPages // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:32 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:43 itxn_field ApprovalProgramPages // - int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:31 + int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:42 itxn_field TypeEnum // - int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:31 + int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:42 itxn_field Fee // - itxn_submit // itxn.submit_txns(create_txns[0], create_txns[1]) inner_transactions/field_tuple_assignment.py:61 - gitxna 0 ApplicationArgs 0 // {gitxna} txn_tuple[0].app_args(0) inner_transactions/field_tuple_assignment.py:63 - // virtual: store tmp%20#0 to l-stack (no copy) tmp%20#0 txn_tuple[0].app_args(0) inner_transactions/field_tuple_assignment.py:63 - // virtual: load tmp%20#0 from l-stack (no copy) tmp%20#0 txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:63 - byte 0x3163 // tmp%20#0,0x3163 b"1c" inner_transactions/field_tuple_assignment.py:63 - == // {==} txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:63 - // virtual: store tmp%21#0 to l-stack (no copy) tmp%21#0 txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:63 - // virtual: load tmp%21#0 from l-stack (no copy) tmp%21#0 assert txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:63 - assert // assert txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:63 - gitxna 0 ApplicationArgs 1 // {gitxna} txn_tuple[0].app_args(1) inner_transactions/field_tuple_assignment.py:64 - // virtual: store tmp%22#0 to l-stack (no copy) tmp%22#0 txn_tuple[0].app_args(1) inner_transactions/field_tuple_assignment.py:64 - // virtual: load tmp%22#0 from l-stack (no copy) tmp%22#0 txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:64 - byte 0x3263 // tmp%22#0,0x3263 b"2c" inner_transactions/field_tuple_assignment.py:64 - == // {==} txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:64 - // virtual: store tmp%23#0 to l-stack (no copy) tmp%23#0 txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:64 - // virtual: load tmp%23#0 from l-stack (no copy) tmp%23#0 assert txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:64 - assert // assert txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:64 - itxna ApplicationArgs 0 // {itxna} txn_tuple[1].app_args(0) inner_transactions/field_tuple_assignment.py:65 - // virtual: store tmp%24#0 to l-stack (no copy) tmp%24#0 txn_tuple[1].app_args(0) inner_transactions/field_tuple_assignment.py:65 - // virtual: load tmp%24#0 from l-stack (no copy) tmp%24#0 txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:65 - byte 0x3363 // tmp%24#0,0x3363 b"3c" inner_transactions/field_tuple_assignment.py:65 - == // {==} txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:65 - // virtual: store tmp%25#0 to l-stack (no copy) tmp%25#0 txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:65 - // virtual: load tmp%25#0 from l-stack (no copy) tmp%25#0 assert txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:65 - assert // assert txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:65 - itxna ApplicationArgs 1 // {itxna} txn_tuple[1].app_args(1) inner_transactions/field_tuple_assignment.py:66 - // virtual: store tmp%26#0 to l-stack (no copy) tmp%26#0 txn_tuple[1].app_args(1) inner_transactions/field_tuple_assignment.py:66 - // virtual: load tmp%26#0 from l-stack (no copy) tmp%26#0 txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:66 - byte 0x3463 // tmp%26#0,0x3463 b"4c" inner_transactions/field_tuple_assignment.py:66 - == // {==} txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:66 - // virtual: store tmp%27#0 to l-stack (no copy) tmp%27#0 txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:66 - // virtual: load tmp%27#0 from l-stack (no copy) tmp%27#0 assert txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:66 - assert // assert txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:66 - itxna ApplicationArgs 2 // {itxna} txn_tuple[1].app_args(2) inner_transactions/field_tuple_assignment.py:67 - // virtual: store tmp%28#0 to l-stack (no copy) tmp%28#0 txn_tuple[1].app_args(2) inner_transactions/field_tuple_assignment.py:67 - // virtual: load tmp%28#0 from l-stack (no copy) tmp%28#0 txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:67 - byte 0x3563 // tmp%28#0,0x3563 b"5c" inner_transactions/field_tuple_assignment.py:67 - == // {==} txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:67 - // virtual: store tmp%29#0 to l-stack (no copy) tmp%29#0 txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:67 - // virtual: load tmp%29#0 from l-stack (no copy) tmp%29#0 assert txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:67 - assert // assert txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:67 + itxn_submit // itxn.submit_txns(create_txns[0], create_txns[1]) inner_transactions/field_tuple_assignment.py:77 + gitxna 0 ApplicationArgs 0 // {gitxna} txn_tuple[0].app_args(0) inner_transactions/field_tuple_assignment.py:79 + // virtual: store tmp%34#0 to l-stack (no copy) tmp%34#0 txn_tuple[0].app_args(0) inner_transactions/field_tuple_assignment.py:79 + // virtual: load tmp%34#0 from l-stack (no copy) tmp%34#0 txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:79 + byte 0x3163 // tmp%34#0,0x3163 b"1c" inner_transactions/field_tuple_assignment.py:79 + == // {==} txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:79 + // virtual: store tmp%35#0 to l-stack (no copy) tmp%35#0 txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:79 + // virtual: load tmp%35#0 from l-stack (no copy) tmp%35#0 assert txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:79 + assert // assert txn_tuple[0].app_args(0) == b"1c" inner_transactions/field_tuple_assignment.py:79 + gitxna 0 ApplicationArgs 1 // {gitxna} txn_tuple[0].app_args(1) inner_transactions/field_tuple_assignment.py:80 + // virtual: store tmp%36#0 to l-stack (no copy) tmp%36#0 txn_tuple[0].app_args(1) inner_transactions/field_tuple_assignment.py:80 + // virtual: load tmp%36#0 from l-stack (no copy) tmp%36#0 txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:80 + byte 0x3263 // tmp%36#0,0x3263 b"2c" inner_transactions/field_tuple_assignment.py:80 + == // {==} txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:80 + // virtual: store tmp%37#0 to l-stack (no copy) tmp%37#0 txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:80 + // virtual: load tmp%37#0 from l-stack (no copy) tmp%37#0 assert txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:80 + assert // assert txn_tuple[0].app_args(1) == b"2c" inner_transactions/field_tuple_assignment.py:80 + itxna ApplicationArgs 0 // {itxna} txn_tuple[1].app_args(0) inner_transactions/field_tuple_assignment.py:81 + // virtual: store tmp%38#0 to l-stack (no copy) tmp%38#0 txn_tuple[1].app_args(0) inner_transactions/field_tuple_assignment.py:81 + // virtual: load tmp%38#0 from l-stack (no copy) tmp%38#0 txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:81 + byte 0x3363 // tmp%38#0,0x3363 b"3c" inner_transactions/field_tuple_assignment.py:81 + == // {==} txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:81 + // virtual: store tmp%39#0 to l-stack (no copy) tmp%39#0 txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:81 + // virtual: load tmp%39#0 from l-stack (no copy) tmp%39#0 assert txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:81 + assert // assert txn_tuple[1].app_args(0) == b"3c" inner_transactions/field_tuple_assignment.py:81 + itxna ApplicationArgs 1 // {itxna} txn_tuple[1].app_args(1) inner_transactions/field_tuple_assignment.py:82 + // virtual: store tmp%40#0 to l-stack (no copy) tmp%40#0 txn_tuple[1].app_args(1) inner_transactions/field_tuple_assignment.py:82 + // virtual: load tmp%40#0 from l-stack (no copy) tmp%40#0 txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:82 + byte 0x3463 // tmp%40#0,0x3463 b"4c" inner_transactions/field_tuple_assignment.py:82 + == // {==} txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:82 + // virtual: store tmp%41#0 to l-stack (no copy) tmp%41#0 txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:82 + // virtual: load tmp%41#0 from l-stack (no copy) tmp%41#0 assert txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:82 + assert // assert txn_tuple[1].app_args(1) == b"4c" inner_transactions/field_tuple_assignment.py:82 + itxna ApplicationArgs 2 // {itxna} txn_tuple[1].app_args(2) inner_transactions/field_tuple_assignment.py:83 + // virtual: store tmp%42#0 to l-stack (no copy) tmp%42#0 txn_tuple[1].app_args(2) inner_transactions/field_tuple_assignment.py:83 + // virtual: load tmp%42#0 from l-stack (no copy) tmp%42#0 txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:83 + byte 0x3563 // tmp%42#0,0x3563 b"5c" inner_transactions/field_tuple_assignment.py:83 + == // {==} txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:83 + // virtual: store tmp%43#0 to l-stack (no copy) tmp%43#0 txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:83 + // virtual: load tmp%43#0 from l-stack (no copy) tmp%43#0 assert txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:83 + assert // assert txn_tuple[1].app_args(2) == b"5c" inner_transactions/field_tuple_assignment.py:83 retsub // // test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() -> void: test_assign_tuple_mixed: - proto 0 0 // @arc4.abimethod\ndef test_assign_tuple_mixed(self) -> None: inner_transactions/field_tuple_assignment.py:69-70 + proto 0 0 // @arc4.abimethod\ndef test_assign_tuple_mixed(self) -> None: inner_transactions/field_tuple_assignment.py:85-86 test_assign_tuple_mixed_block@0: - itxn_begin // tuple_with_txn_fields[0].submit() inner_transactions/field_tuple_assignment.py:80 - byte 0x3161 // 0x3161 Bytes(b"1a") inner_transactions/field_tuple_assignment.py:76 + itxn_begin // tuple_with_txn_fields[0].submit() inner_transactions/field_tuple_assignment.py:96 + byte 0x3161 // 0x3161 Bytes(b"1a") inner_transactions/field_tuple_assignment.py:92 itxn_field ApplicationArgs // - byte 0x3261 // 0x3261 Bytes(b"2a") inner_transactions/field_tuple_assignment.py:76 + byte 0x3261 // 0x3261 Bytes(b"2a") inner_transactions/field_tuple_assignment.py:92 itxn_field ApplicationArgs // - int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:75 + int DeleteApplication // DeleteApplication OnCompleteAction.DeleteApplication inner_transactions/field_tuple_assignment.py:91 itxn_field OnCompletion // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:74 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:90 itxn_field ClearStateProgramPages // - byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:73 + byte 0x098101 // 0x098101 ALWAYS_APPROVE inner_transactions/field_tuple_assignment.py:89 itxn_field ApprovalProgramPages // - int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:72 + int appl // appl itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:88 itxn_field TypeEnum // - int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:72 + int 0 // 0 itxn.ApplicationCall inner_transactions/field_tuple_assignment.py:88 itxn_field Fee // - itxn_submit // tuple_with_txn_fields[0].submit() inner_transactions/field_tuple_assignment.py:80 - itxna ApplicationArgs 0 // {itxna} result_with_txn[0].app_args(0) inner_transactions/field_tuple_assignment.py:82 - // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 result_with_txn[0].app_args(0) inner_transactions/field_tuple_assignment.py:82 - // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:82 - byte 0x3161 // tmp%0#0,0x3161 b"1a" inner_transactions/field_tuple_assignment.py:82 - == // {==} result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:82 - // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:82 - // virtual: load tmp%1#0 from l-stack (no copy) tmp%1#0 assert result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:82 - assert // assert result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:82 - itxna ApplicationArgs 1 // {itxna} result_with_txn[0].app_args(1) inner_transactions/field_tuple_assignment.py:83 - // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 result_with_txn[0].app_args(1) inner_transactions/field_tuple_assignment.py:83 - // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:83 - byte 0x3261 // tmp%2#0,0x3261 b"2a" inner_transactions/field_tuple_assignment.py:83 - == // {==} result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:83 - // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:83 - // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 assert result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:83 - assert // assert result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:83 + itxn_submit // tuple_with_txn_fields[0].submit() inner_transactions/field_tuple_assignment.py:96 + itxna ApplicationArgs 0 // {itxna} result_with_txn[0].app_args(0) inner_transactions/field_tuple_assignment.py:98 + // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 result_with_txn[0].app_args(0) inner_transactions/field_tuple_assignment.py:98 + // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:98 + byte 0x3161 // tmp%0#0,0x3161 b"1a" inner_transactions/field_tuple_assignment.py:98 + == // {==} result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:98 + // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:98 + // virtual: load tmp%1#0 from l-stack (no copy) tmp%1#0 assert result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:98 + assert // assert result_with_txn[0].app_args(0) == b"1a" inner_transactions/field_tuple_assignment.py:98 + itxna ApplicationArgs 1 // {itxna} result_with_txn[0].app_args(1) inner_transactions/field_tuple_assignment.py:99 + // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 result_with_txn[0].app_args(1) inner_transactions/field_tuple_assignment.py:99 + // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:99 + byte 0x3261 // tmp%2#0,0x3261 b"2a" inner_transactions/field_tuple_assignment.py:99 + == // {==} result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:99 + // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:99 + // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 assert result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:99 + assert // assert result_with_txn[0].app_args(1) == b"2a" inner_transactions/field_tuple_assignment.py:99 retsub // diff --git a/test_cases/inner_transactions/out/FieldTupleContract.approval.teal b/test_cases/inner_transactions/out/FieldTupleContract.approval.teal index a708911b8b..1e59380d10 100644 --- a/test_cases/inner_transactions/out/FieldTupleContract.approval.teal +++ b/test_cases/inner_transactions/out/FieldTupleContract.approval.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program: - // inner_transactions/field_tuple_assignment.py:21 + // inner_transactions/field_tuple_assignment.py:24 // class FieldTupleContract(ARC4Contract): txn NumAppArgs bz main_bare_routing@6 @@ -12,7 +12,7 @@ test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval err // reject transaction main_test_assign_tuple_route@2: - // inner_transactions/field_tuple_assignment.py:22 + // inner_transactions/field_tuple_assignment.py:25 // @arc4.abimethod txn OnCompletion ! @@ -24,7 +24,7 @@ main_test_assign_tuple_route@2: return main_test_assign_tuple_mixed_route@3: - // inner_transactions/field_tuple_assignment.py:69 + // inner_transactions/field_tuple_assignment.py:85 // @arc4.abimethod txn OnCompletion ! @@ -36,7 +36,7 @@ main_test_assign_tuple_mixed_route@3: return main_bare_routing@6: - // inner_transactions/field_tuple_assignment.py:21 + // inner_transactions/field_tuple_assignment.py:24 // class FieldTupleContract(ARC4Contract): txn OnCompletion ! @@ -50,45 +50,70 @@ main_bare_routing@6: // test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: test_assign_tuple: - // inner_transactions/field_tuple_assignment.py:22-23 + // inner_transactions/field_tuple_assignment.py:25-26 // @arc4.abimethod // def test_assign_tuple(self) -> None: proto 0 0 + // inner_transactions/field_tuple_assignment.py:38 + // UInt64(42), + int 42 + itob // inner_transactions/field_tuple_assignment.py:39 + // True, + int 1 + itob + // inner_transactions/field_tuple_assignment.py:50 // txn_1, txn_2 = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_begin - // inner_transactions/field_tuple_assignment.py:29 - // app_args=(Bytes(b"1a"), Bytes(b"2a")), + // inner_transactions/field_tuple_assignment.py:33 + // Bytes(b"1a"), byte 0x3161 itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:34 + // Bytes(b"2a"), byte 0x3261 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:28 + // inner_transactions/field_tuple_assignment.py:35 + // b"hello", + byte 0x68656c6c6f + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:36 + // "world", + byte "world" + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:37 + // String("!"), + byte "!" + itxn_field ApplicationArgs + dig 1 + itxn_field ApplicationArgs + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:31 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:27 + // inner_transactions/field_tuple_assignment.py:30 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:26 + // inner_transactions/field_tuple_assignment.py:29 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:25 + // inner_transactions/field_tuple_assignment.py:28 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:39 + // inner_transactions/field_tuple_assignment.py:50 // txn_1, txn_2 = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_next - // inner_transactions/field_tuple_assignment.py:36 + // inner_transactions/field_tuple_assignment.py:47 // note=b"different param set", byte 0x646966666572656e7420706172616d20736574 itxn_field Note - // inner_transactions/field_tuple_assignment.py:35 + // inner_transactions/field_tuple_assignment.py:46 // app_args=(Bytes(b"3a"), Bytes(b"4a"), Bytes(b"5a")), byte 0x3361 itxn_field ApplicationArgs @@ -96,65 +121,95 @@ test_assign_tuple: itxn_field ApplicationArgs byte 0x3561 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:34 + // inner_transactions/field_tuple_assignment.py:45 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:33 + // inner_transactions/field_tuple_assignment.py:44 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:32 + // inner_transactions/field_tuple_assignment.py:43 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:31 + // inner_transactions/field_tuple_assignment.py:42 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:39 + // inner_transactions/field_tuple_assignment.py:50 // txn_1, txn_2 = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_submit - // inner_transactions/field_tuple_assignment.py:41 + // inner_transactions/field_tuple_assignment.py:52 // assert txn_1.app_args(0) == b"1a" gitxna 0 ApplicationArgs 0 byte 0x3161 == assert - // inner_transactions/field_tuple_assignment.py:42 + // inner_transactions/field_tuple_assignment.py:53 // assert txn_1.app_args(1) == b"2a" gitxna 0 ApplicationArgs 1 byte 0x3261 == assert - // inner_transactions/field_tuple_assignment.py:43 + // inner_transactions/field_tuple_assignment.py:54 + // assert txn_1.app_args(2) == b"hello" + gitxna 0 ApplicationArgs 2 + byte 0x68656c6c6f + == + assert + // inner_transactions/field_tuple_assignment.py:55 + // assert txn_1.app_args(3) == b"world" + gitxna 0 ApplicationArgs 3 + byte 0x776f726c64 + == + assert + // inner_transactions/field_tuple_assignment.py:56 + // assert txn_1.app_args(4) == b"!" + gitxna 0 ApplicationArgs 4 + byte 0x21 + == + assert + // inner_transactions/field_tuple_assignment.py:57 + // assert txn_1.app_args(5) == op.itob(42) + gitxna 0 ApplicationArgs 5 + == + assert + // inner_transactions/field_tuple_assignment.py:58 + // assert txn_1.app_args(6) == op.itob(1) + gitxna 0 ApplicationArgs 6 + int 1 + itob + == + assert + // inner_transactions/field_tuple_assignment.py:59 // assert txn_2.app_args(0) == b"3a" itxna ApplicationArgs 0 byte 0x3361 == assert - // inner_transactions/field_tuple_assignment.py:44 + // inner_transactions/field_tuple_assignment.py:60 // assert txn_2.app_args(1) == b"4a" itxna ApplicationArgs 1 byte 0x3461 == assert - // inner_transactions/field_tuple_assignment.py:45 + // inner_transactions/field_tuple_assignment.py:61 // assert txn_2.app_args(2) == b"5a" itxna ApplicationArgs 2 byte 0x3561 == assert - // inner_transactions/field_tuple_assignment.py:50 + // inner_transactions/field_tuple_assignment.py:66 // txn_1, txn_2 = itxn.submit_txns(create_txns[1], create_txns[0]) itxn_begin - // inner_transactions/field_tuple_assignment.py:36 + // inner_transactions/field_tuple_assignment.py:47 // note=b"different param set", byte 0x646966666572656e7420706172616d20736574 itxn_field Note - // inner_transactions/field_tuple_assignment.py:48 + // inner_transactions/field_tuple_assignment.py:64 // create_txns[1].set(app_args=(Bytes(b"3b"), Bytes(b"4b"), Bytes(b"5b"))) byte 0x3362 itxn_field ApplicationArgs @@ -162,119 +217,119 @@ test_assign_tuple: itxn_field ApplicationArgs byte 0x3562 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:34 + // inner_transactions/field_tuple_assignment.py:45 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:33 + // inner_transactions/field_tuple_assignment.py:44 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:32 + // inner_transactions/field_tuple_assignment.py:43 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:31 + // inner_transactions/field_tuple_assignment.py:42 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:50 + // inner_transactions/field_tuple_assignment.py:66 // txn_1, txn_2 = itxn.submit_txns(create_txns[1], create_txns[0]) itxn_next - // inner_transactions/field_tuple_assignment.py:47 + // inner_transactions/field_tuple_assignment.py:63 // create_txns[0].set(app_args=(Bytes(b"1b"), Bytes(b"2b"))) byte 0x3162 itxn_field ApplicationArgs byte 0x3262 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:28 + // inner_transactions/field_tuple_assignment.py:31 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:27 + // inner_transactions/field_tuple_assignment.py:30 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:26 + // inner_transactions/field_tuple_assignment.py:29 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:25 + // inner_transactions/field_tuple_assignment.py:28 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:50 + // inner_transactions/field_tuple_assignment.py:66 // txn_1, txn_2 = itxn.submit_txns(create_txns[1], create_txns[0]) itxn_submit - // inner_transactions/field_tuple_assignment.py:52 + // inner_transactions/field_tuple_assignment.py:68 // assert txn_2.app_args(0) == b"1b" itxna ApplicationArgs 0 byte 0x3162 == assert - // inner_transactions/field_tuple_assignment.py:53 + // inner_transactions/field_tuple_assignment.py:69 // assert txn_2.app_args(1) == b"2b" itxna ApplicationArgs 1 byte 0x3262 == assert - // inner_transactions/field_tuple_assignment.py:54 + // inner_transactions/field_tuple_assignment.py:70 // assert txn_1.app_args(0) == b"3b" gitxna 0 ApplicationArgs 0 byte 0x3362 == assert - // inner_transactions/field_tuple_assignment.py:55 + // inner_transactions/field_tuple_assignment.py:71 // assert txn_1.app_args(1) == b"4b" gitxna 0 ApplicationArgs 1 byte 0x3462 == assert - // inner_transactions/field_tuple_assignment.py:56 + // inner_transactions/field_tuple_assignment.py:72 // assert txn_1.app_args(2) == b"5b" gitxna 0 ApplicationArgs 2 byte 0x3562 == assert - // inner_transactions/field_tuple_assignment.py:61 + // inner_transactions/field_tuple_assignment.py:77 // txn_tuple = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_begin - // inner_transactions/field_tuple_assignment.py:58 + // inner_transactions/field_tuple_assignment.py:74 // create_txns[0].set(app_args=(Bytes(b"1c"), Bytes(b"2c"))) byte 0x3163 itxn_field ApplicationArgs byte 0x3263 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:28 + // inner_transactions/field_tuple_assignment.py:31 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:27 + // inner_transactions/field_tuple_assignment.py:30 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:26 + // inner_transactions/field_tuple_assignment.py:29 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:25 + // inner_transactions/field_tuple_assignment.py:28 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:61 + // inner_transactions/field_tuple_assignment.py:77 // txn_tuple = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_next - // inner_transactions/field_tuple_assignment.py:36 + // inner_transactions/field_tuple_assignment.py:47 // note=b"different param set", byte 0x646966666572656e7420706172616d20736574 itxn_field Note - // inner_transactions/field_tuple_assignment.py:59 + // inner_transactions/field_tuple_assignment.py:75 // create_txns[1].set(app_args=(Bytes(b"3c"), Bytes(b"4c"), Bytes(b"5c"))) byte 0x3363 itxn_field ApplicationArgs @@ -282,52 +337,52 @@ test_assign_tuple: itxn_field ApplicationArgs byte 0x3563 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:34 + // inner_transactions/field_tuple_assignment.py:45 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:33 + // inner_transactions/field_tuple_assignment.py:44 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:32 + // inner_transactions/field_tuple_assignment.py:43 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:31 + // inner_transactions/field_tuple_assignment.py:42 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:61 + // inner_transactions/field_tuple_assignment.py:77 // txn_tuple = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_submit - // inner_transactions/field_tuple_assignment.py:63 + // inner_transactions/field_tuple_assignment.py:79 // assert txn_tuple[0].app_args(0) == b"1c" gitxna 0 ApplicationArgs 0 byte 0x3163 == assert - // inner_transactions/field_tuple_assignment.py:64 + // inner_transactions/field_tuple_assignment.py:80 // assert txn_tuple[0].app_args(1) == b"2c" gitxna 0 ApplicationArgs 1 byte 0x3263 == assert - // inner_transactions/field_tuple_assignment.py:65 + // inner_transactions/field_tuple_assignment.py:81 // assert txn_tuple[1].app_args(0) == b"3c" itxna ApplicationArgs 0 byte 0x3363 == assert - // inner_transactions/field_tuple_assignment.py:66 + // inner_transactions/field_tuple_assignment.py:82 // assert txn_tuple[1].app_args(1) == b"4c" itxna ApplicationArgs 1 byte 0x3463 == assert - // inner_transactions/field_tuple_assignment.py:67 + // inner_transactions/field_tuple_assignment.py:83 // assert txn_tuple[1].app_args(2) == b"5c" itxna ApplicationArgs 2 byte 0x3563 @@ -338,47 +393,47 @@ test_assign_tuple: // test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() -> void: test_assign_tuple_mixed: - // inner_transactions/field_tuple_assignment.py:69-70 + // inner_transactions/field_tuple_assignment.py:85-86 // @arc4.abimethod // def test_assign_tuple_mixed(self) -> None: proto 0 0 - // inner_transactions/field_tuple_assignment.py:80 + // inner_transactions/field_tuple_assignment.py:96 // result_with_txn = tuple_with_txn_fields[0].submit(), tuple_with_txn_fields[1] itxn_begin - // inner_transactions/field_tuple_assignment.py:76 + // inner_transactions/field_tuple_assignment.py:92 // app_args=(Bytes(b"1a"), Bytes(b"2a")), byte 0x3161 itxn_field ApplicationArgs byte 0x3261 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:75 + // inner_transactions/field_tuple_assignment.py:91 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:74 + // inner_transactions/field_tuple_assignment.py:90 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:73 + // inner_transactions/field_tuple_assignment.py:89 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:72 + // inner_transactions/field_tuple_assignment.py:88 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:80 + // inner_transactions/field_tuple_assignment.py:96 // result_with_txn = tuple_with_txn_fields[0].submit(), tuple_with_txn_fields[1] itxn_submit - // inner_transactions/field_tuple_assignment.py:82 + // inner_transactions/field_tuple_assignment.py:98 // assert result_with_txn[0].app_args(0) == b"1a" itxna ApplicationArgs 0 byte 0x3161 == assert - // inner_transactions/field_tuple_assignment.py:83 + // inner_transactions/field_tuple_assignment.py:99 // assert result_with_txn[0].app_args(1) == b"2a" itxna ApplicationArgs 1 byte 0x3261 diff --git a/test_cases/inner_transactions/out/FieldTupleContract.arc32.json b/test_cases/inner_transactions/out/FieldTupleContract.arc32.json index 15f321d3df..1cbdf3686f 100644 --- a/test_cases/inner_transactions/out/FieldTupleContract.arc32.json +++ b/test_cases/inner_transactions/out/FieldTupleContract.arc32.json @@ -12,8 +12,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLmlubmVyX3RyYW5zYWN0aW9ucy5maWVsZF90dXBsZV9hc3NpZ25tZW50LkZpZWxkVHVwbGVDb250cmFjdC5hcHByb3ZhbF9wcm9ncmFtOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjEKICAgIC8vIGNsYXNzIEZpZWxkVHVwbGVDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIG1ldGhvZCAidGVzdF9hc3NpZ25fdHVwbGUoKXZvaWQiCiAgICBtZXRob2QgInRlc3RfYXNzaWduX3R1cGxlX21peGVkKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl90ZXN0X2Fzc2lnbl90dXBsZV9yb3V0ZUAyIG1haW5fdGVzdF9hc3NpZ25fdHVwbGVfbWl4ZWRfcm91dGVAMwogICAgZXJyIC8vIHJlamVjdCB0cmFuc2FjdGlvbgoKbWFpbl90ZXN0X2Fzc2lnbl90dXBsZV9yb3V0ZUAyOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2Fzc2lnbl90dXBsZQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0X2Fzc2lnbl90dXBsZV9taXhlZF9yb3V0ZUAzOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2Fzc2lnbl90dXBsZV9taXhlZAogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjIxCiAgICAvLyBjbGFzcyBGaWVsZFR1cGxlQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyByZWplY3QgdHJhbnNhY3Rpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludCAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmlubmVyX3RyYW5zYWN0aW9ucy5maWVsZF90dXBsZV9hc3NpZ25tZW50LkZpZWxkVHVwbGVDb250cmFjdC50ZXN0X2Fzc2lnbl90dXBsZSgpIC0+IHZvaWQ6CnRlc3RfYXNzaWduX3R1cGxlOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjItMjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHRlc3RfYXNzaWduX3R1cGxlKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjM5CiAgICAvLyB0eG5fMSwgdHhuXzIgPSBpdHhuLnN1Ym1pdF90eG5zKGNyZWF0ZV90eG5zWzBdLCBjcmVhdGVfdHhuc1sxXSkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjI5CiAgICAvLyBhcHBfYXJncz0oQnl0ZXMoYiIxYSIpLCBCeXRlcyhiIjJhIikpLAogICAgYnl0ZSAweDMxNjEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MzI2MQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjI4CiAgICAvLyBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnQgRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weToyNwogICAgLy8gY2xlYXJfc3RhdGVfcHJvZ3JhbT1BTFdBWVNfQVBQUk9WRSwKICAgIGJ5dGUgMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjYKICAgIC8vIGFwcHJvdmFsX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weToyNQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozOQogICAgLy8gdHhuXzEsIHR4bl8yID0gaXR4bi5zdWJtaXRfdHhucyhjcmVhdGVfdHhuc1swXSwgY3JlYXRlX3R4bnNbMV0pCiAgICBpdHhuX25leHQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjM2CiAgICAvLyBub3RlPWIiZGlmZmVyZW50IHBhcmFtIHNldCIsCiAgICBieXRlIDB4NjQ2OTY2NjY2NTcyNjU2ZTc0MjA3MDYxNzI2MTZkMjA3MzY1NzQKICAgIGl0eG5fZmllbGQgTm90ZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MzUKICAgIC8vIGFwcF9hcmdzPShCeXRlcyhiIjNhIiksIEJ5dGVzKGIiNGEiKSwgQnl0ZXMoYiI1YSIpKSwKICAgIGJ5dGUgMHgzMzYxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDM0NjEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MzU2MQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjM0CiAgICAvLyBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnQgRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozMwogICAgLy8gY2xlYXJfc3RhdGVfcHJvZ3JhbT1BTFdBWVNfQVBQUk9WRSwKICAgIGJ5dGUgMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MzIKICAgIC8vIGFwcHJvdmFsX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozMQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozOQogICAgLy8gdHhuXzEsIHR4bl8yID0gaXR4bi5zdWJtaXRfdHhucyhjcmVhdGVfdHhuc1swXSwgY3JlYXRlX3R4bnNbMV0pCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NDEKICAgIC8vIGFzc2VydCB0eG5fMS5hcHBfYXJncygwKSA9PSBiIjFhIgogICAgZ2l0eG5hIDAgQXBwbGljYXRpb25BcmdzIDAKICAgIGJ5dGUgMHgzMTYxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo0MgogICAgLy8gYXNzZXJ0IHR4bl8xLmFwcF9hcmdzKDEpID09IGIiMmEiCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnl0ZSAweDMyNjEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjQzCiAgICAvLyBhc3NlcnQgdHhuXzIuYXBwX2FyZ3MoMCkgPT0gYiIzYSIKICAgIGl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBieXRlIDB4MzM2MQogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NDQKICAgIC8vIGFzc2VydCB0eG5fMi5hcHBfYXJncygxKSA9PSBiIjRhIgogICAgaXR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ5dGUgMHgzNDYxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo0NQogICAgLy8gYXNzZXJ0IHR4bl8yLmFwcF9hcmdzKDIpID09IGIiNWEiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnl0ZSAweDM1NjEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjUwCiAgICAvLyB0eG5fMSwgdHhuXzIgPSBpdHhuLnN1Ym1pdF90eG5zKGNyZWF0ZV90eG5zWzFdLCBjcmVhdGVfdHhuc1swXSkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjM2CiAgICAvLyBub3RlPWIiZGlmZmVyZW50IHBhcmFtIHNldCIsCiAgICBieXRlIDB4NjQ2OTY2NjY2NTcyNjU2ZTc0MjA3MDYxNzI2MTZkMjA3MzY1NzQKICAgIGl0eG5fZmllbGQgTm90ZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NDgKICAgIC8vIGNyZWF0ZV90eG5zWzFdLnNldChhcHBfYXJncz0oQnl0ZXMoYiIzYiIpLCBCeXRlcyhiIjRiIiksIEJ5dGVzKGIiNWIiKSkpCiAgICBieXRlIDB4MzM2MgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgzNDYyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDM1NjIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozNAogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50IERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MzMKICAgIC8vIGNsZWFyX3N0YXRlX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjMyCiAgICAvLyBhcHByb3ZhbF9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MzEKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NTAKICAgIC8vIHR4bl8xLCB0eG5fMiA9IGl0eG4uc3VibWl0X3R4bnMoY3JlYXRlX3R4bnNbMV0sIGNyZWF0ZV90eG5zWzBdKQogICAgaXR4bl9uZXh0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo0NwogICAgLy8gY3JlYXRlX3R4bnNbMF0uc2V0KGFwcF9hcmdzPShCeXRlcyhiIjFiIiksIEJ5dGVzKGIiMmIiKSkpCiAgICBieXRlIDB4MzE2MgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgzMjYyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjgKICAgIC8vIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludCBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjI3CiAgICAvLyBjbGVhcl9zdGF0ZV9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weToyNgogICAgLy8gYXBwcm92YWxfcHJvZ3JhbT1BTFdBWVNfQVBQUk9WRSwKICAgIGJ5dGUgMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjI1CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjUwCiAgICAvLyB0eG5fMSwgdHhuXzIgPSBpdHhuLnN1Ym1pdF90eG5zKGNyZWF0ZV90eG5zWzFdLCBjcmVhdGVfdHhuc1swXSkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo1MgogICAgLy8gYXNzZXJ0IHR4bl8yLmFwcF9hcmdzKDApID09IGIiMWIiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgYnl0ZSAweDMxNjIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjUzCiAgICAvLyBhc3NlcnQgdHhuXzIuYXBwX2FyZ3MoMSkgPT0gYiIyYiIKICAgIGl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBieXRlIDB4MzI2MgogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NTQKICAgIC8vIGFzc2VydCB0eG5fMS5hcHBfYXJncygwKSA9PSBiIjNiIgogICAgZ2l0eG5hIDAgQXBwbGljYXRpb25BcmdzIDAKICAgIGJ5dGUgMHgzMzYyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo1NQogICAgLy8gYXNzZXJ0IHR4bl8xLmFwcF9hcmdzKDEpID09IGIiNGIiCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnl0ZSAweDM0NjIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjU2CiAgICAvLyBhc3NlcnQgdHhuXzEuYXBwX2FyZ3MoMikgPT0gYiI1YiIKICAgIGdpdHhuYSAwIEFwcGxpY2F0aW9uQXJncyAyCiAgICBieXRlIDB4MzU2MgogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NjEKICAgIC8vIHR4bl90dXBsZSA9IGl0eG4uc3VibWl0X3R4bnMoY3JlYXRlX3R4bnNbMF0sIGNyZWF0ZV90eG5zWzFdKQogICAgaXR4bl9iZWdpbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NTgKICAgIC8vIGNyZWF0ZV90eG5zWzBdLnNldChhcHBfYXJncz0oQnl0ZXMoYiIxYyIpLCBCeXRlcyhiIjJjIikpKQogICAgYnl0ZSAweDMxNjMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MzI2MwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjI4CiAgICAvLyBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnQgRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weToyNwogICAgLy8gY2xlYXJfc3RhdGVfcHJvZ3JhbT1BTFdBWVNfQVBQUk9WRSwKICAgIGJ5dGUgMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjYKICAgIC8vIGFwcHJvdmFsX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weToyNQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo2MQogICAgLy8gdHhuX3R1cGxlID0gaXR4bi5zdWJtaXRfdHhucyhjcmVhdGVfdHhuc1swXSwgY3JlYXRlX3R4bnNbMV0pCiAgICBpdHhuX25leHQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjM2CiAgICAvLyBub3RlPWIiZGlmZmVyZW50IHBhcmFtIHNldCIsCiAgICBieXRlIDB4NjQ2OTY2NjY2NTcyNjU2ZTc0MjA3MDYxNzI2MTZkMjA3MzY1NzQKICAgIGl0eG5fZmllbGQgTm90ZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NTkKICAgIC8vIGNyZWF0ZV90eG5zWzFdLnNldChhcHBfYXJncz0oQnl0ZXMoYiIzYyIpLCBCeXRlcyhiIjRjIiksIEJ5dGVzKGIiNWMiKSkpCiAgICBieXRlIDB4MzM2MwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgzNDYzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDM1NjMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozNAogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50IERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MzMKICAgIC8vIGNsZWFyX3N0YXRlX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjMyCiAgICAvLyBhcHByb3ZhbF9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MzEKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NjEKICAgIC8vIHR4bl90dXBsZSA9IGl0eG4uc3VibWl0X3R4bnMoY3JlYXRlX3R4bnNbMF0sIGNyZWF0ZV90eG5zWzFdKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjYzCiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzBdLmFwcF9hcmdzKDApID09IGIiMWMiCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgMAogICAgYnl0ZSAweDMxNjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjY0CiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzBdLmFwcF9hcmdzKDEpID09IGIiMmMiCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnl0ZSAweDMyNjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjY1CiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzFdLmFwcF9hcmdzKDApID09IGIiM2MiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgYnl0ZSAweDMzNjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjY2CiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzFdLmFwcF9hcmdzKDEpID09IGIiNGMiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnl0ZSAweDM0NjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjY3CiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzFdLmFwcF9hcmdzKDIpID09IGIiNWMiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnl0ZSAweDM1NjMKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMuaW5uZXJfdHJhbnNhY3Rpb25zLmZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQuRmllbGRUdXBsZUNvbnRyYWN0LnRlc3RfYXNzaWduX3R1cGxlX21peGVkKCkgLT4gdm9pZDoKdGVzdF9hc3NpZ25fdHVwbGVfbWl4ZWQ6CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo2OS03MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgdGVzdF9hc3NpZ25fdHVwbGVfbWl4ZWQoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6ODAKICAgIC8vIHJlc3VsdF93aXRoX3R4biA9IHR1cGxlX3dpdGhfdHhuX2ZpZWxkc1swXS5zdWJtaXQoKSwgdHVwbGVfd2l0aF90eG5fZmllbGRzWzFdCiAgICBpdHhuX2JlZ2luCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo3NgogICAgLy8gYXBwX2FyZ3M9KEJ5dGVzKGIiMWEiKSwgQnl0ZXMoYiIyYSIpKSwKICAgIGJ5dGUgMHgzMTYxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDMyNjEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo3NQogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50IERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NzQKICAgIC8vIGNsZWFyX3N0YXRlX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjczCiAgICAvLyBhcHByb3ZhbF9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NzIKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6ODAKICAgIC8vIHJlc3VsdF93aXRoX3R4biA9IHR1cGxlX3dpdGhfdHhuX2ZpZWxkc1swXS5zdWJtaXQoKSwgdHVwbGVfd2l0aF90eG5fZmllbGRzWzFdCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6ODIKICAgIC8vIGFzc2VydCByZXN1bHRfd2l0aF90eG5bMF0uYXBwX2FyZ3MoMCkgPT0gYiIxYSIKICAgIGl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBieXRlIDB4MzE2MQogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6ODMKICAgIC8vIGFzc2VydCByZXN1bHRfd2l0aF90eG5bMF0uYXBwX2FyZ3MoMSkgPT0gYiIyYSIKICAgIGl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBieXRlIDB4MzI2MQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLmlubmVyX3RyYW5zYWN0aW9ucy5maWVsZF90dXBsZV9hc3NpZ25tZW50LkZpZWxkVHVwbGVDb250cmFjdC5jbGVhcl9zdGF0ZV9wcm9ncmFtOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjEKICAgIC8vIGNsYXNzIEZpZWxkVHVwbGVDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgaW50IDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLmlubmVyX3RyYW5zYWN0aW9ucy5maWVsZF90dXBsZV9hc3NpZ25tZW50LkZpZWxkVHVwbGVDb250cmFjdC5hcHByb3ZhbF9wcm9ncmFtOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjQKICAgIC8vIGNsYXNzIEZpZWxkVHVwbGVDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIG1ldGhvZCAidGVzdF9hc3NpZ25fdHVwbGUoKXZvaWQiCiAgICBtZXRob2QgInRlc3RfYXNzaWduX3R1cGxlX21peGVkKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl90ZXN0X2Fzc2lnbl90dXBsZV9yb3V0ZUAyIG1haW5fdGVzdF9hc3NpZ25fdHVwbGVfbWl4ZWRfcm91dGVAMwogICAgZXJyIC8vIHJlamVjdCB0cmFuc2FjdGlvbgoKbWFpbl90ZXN0X2Fzc2lnbl90dXBsZV9yb3V0ZUAyOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2Fzc2lnbl90dXBsZQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0X2Fzc2lnbl90dXBsZV9taXhlZF9yb3V0ZUAzOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiB0ZXN0X2Fzc2lnbl90dXBsZV9taXhlZAogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjI0CiAgICAvLyBjbGFzcyBGaWVsZFR1cGxlQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyByZWplY3QgdHJhbnNhY3Rpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludCAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmlubmVyX3RyYW5zYWN0aW9ucy5maWVsZF90dXBsZV9hc3NpZ25tZW50LkZpZWxkVHVwbGVDb250cmFjdC50ZXN0X2Fzc2lnbl90dXBsZSgpIC0+IHZvaWQ6CnRlc3RfYXNzaWduX3R1cGxlOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjUtMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHRlc3RfYXNzaWduX3R1cGxlKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjM4CiAgICAvLyBVSW50NjQoNDIpLAogICAgaW50IDQyCiAgICBpdG9iCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozOQogICAgLy8gVHJ1ZSwKICAgIGludCAxCiAgICBpdG9iCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo1MAogICAgLy8gdHhuXzEsIHR4bl8yID0gaXR4bi5zdWJtaXRfdHhucyhjcmVhdGVfdHhuc1swXSwgY3JlYXRlX3R4bnNbMV0pCiAgICBpdHhuX2JlZ2luCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozMwogICAgLy8gQnl0ZXMoYiIxYSIpLAogICAgYnl0ZSAweDMxNjEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozNAogICAgLy8gQnl0ZXMoYiIyYSIpLAogICAgYnl0ZSAweDMyNjEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozNQogICAgLy8gYiJoZWxsbyIsCiAgICBieXRlIDB4Njg2NTZjNmM2ZgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjM2CiAgICAvLyAid29ybGQiLAogICAgYnl0ZSAid29ybGQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MzcKICAgIC8vIFN0cmluZygiISIpLAogICAgYnl0ZSAiISIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozMQogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50IERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MzAKICAgIC8vIGNsZWFyX3N0YXRlX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjI5CiAgICAvLyBhcHByb3ZhbF9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjgKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NTAKICAgIC8vIHR4bl8xLCB0eG5fMiA9IGl0eG4uc3VibWl0X3R4bnMoY3JlYXRlX3R4bnNbMF0sIGNyZWF0ZV90eG5zWzFdKQogICAgaXR4bl9uZXh0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo0NwogICAgLy8gbm90ZT1iImRpZmZlcmVudCBwYXJhbSBzZXQiLAogICAgYnl0ZSAweDY0Njk2NjY2NjU3MjY1NmU3NDIwNzA2MTcyNjE2ZDIwNzM2NTc0CiAgICBpdHhuX2ZpZWxkIE5vdGUKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjQ2CiAgICAvLyBhcHBfYXJncz0oQnl0ZXMoYiIzYSIpLCBCeXRlcyhiIjRhIiksIEJ5dGVzKGIiNWEiKSksCiAgICBieXRlIDB4MzM2MQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgzNDYxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDM1NjEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo0NQogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50IERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NDQKICAgIC8vIGNsZWFyX3N0YXRlX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjQzCiAgICAvLyBhcHByb3ZhbF9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NDIKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NTAKICAgIC8vIHR4bl8xLCB0eG5fMiA9IGl0eG4uc3VibWl0X3R4bnMoY3JlYXRlX3R4bnNbMF0sIGNyZWF0ZV90eG5zWzFdKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjUyCiAgICAvLyBhc3NlcnQgdHhuXzEuYXBwX2FyZ3MoMCkgPT0gYiIxYSIKICAgIGdpdHhuYSAwIEFwcGxpY2F0aW9uQXJncyAwCiAgICBieXRlIDB4MzE2MQogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NTMKICAgIC8vIGFzc2VydCB0eG5fMS5hcHBfYXJncygxKSA9PSBiIjJhIgogICAgZ2l0eG5hIDAgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ5dGUgMHgzMjYxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo1NAogICAgLy8gYXNzZXJ0IHR4bl8xLmFwcF9hcmdzKDIpID09IGIiaGVsbG8iCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnl0ZSAweDY4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjU1CiAgICAvLyBhc3NlcnQgdHhuXzEuYXBwX2FyZ3MoMykgPT0gYiJ3b3JsZCIKICAgIGdpdHhuYSAwIEFwcGxpY2F0aW9uQXJncyAzCiAgICBieXRlIDB4Nzc2ZjcyNmM2NAogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NTYKICAgIC8vIGFzc2VydCB0eG5fMS5hcHBfYXJncyg0KSA9PSBiIiEiCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnl0ZSAweDIxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo1NwogICAgLy8gYXNzZXJ0IHR4bl8xLmFwcF9hcmdzKDUpID09IG9wLml0b2IoNDIpCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NTgKICAgIC8vIGFzc2VydCB0eG5fMS5hcHBfYXJncyg2KSA9PSBvcC5pdG9iKDEpCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgNgogICAgaW50IDEKICAgIGl0b2IKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjU5CiAgICAvLyBhc3NlcnQgdHhuXzIuYXBwX2FyZ3MoMCkgPT0gYiIzYSIKICAgIGl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBieXRlIDB4MzM2MQogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NjAKICAgIC8vIGFzc2VydCB0eG5fMi5hcHBfYXJncygxKSA9PSBiIjRhIgogICAgaXR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ5dGUgMHgzNDYxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo2MQogICAgLy8gYXNzZXJ0IHR4bl8yLmFwcF9hcmdzKDIpID09IGIiNWEiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnl0ZSAweDM1NjEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjY2CiAgICAvLyB0eG5fMSwgdHhuXzIgPSBpdHhuLnN1Ym1pdF90eG5zKGNyZWF0ZV90eG5zWzFdLCBjcmVhdGVfdHhuc1swXSkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjQ3CiAgICAvLyBub3RlPWIiZGlmZmVyZW50IHBhcmFtIHNldCIsCiAgICBieXRlIDB4NjQ2OTY2NjY2NTcyNjU2ZTc0MjA3MDYxNzI2MTZkMjA3MzY1NzQKICAgIGl0eG5fZmllbGQgTm90ZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NjQKICAgIC8vIGNyZWF0ZV90eG5zWzFdLnNldChhcHBfYXJncz0oQnl0ZXMoYiIzYiIpLCBCeXRlcyhiIjRiIiksIEJ5dGVzKGIiNWIiKSkpCiAgICBieXRlIDB4MzM2MgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgzNDYyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDM1NjIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo0NQogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50IERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NDQKICAgIC8vIGNsZWFyX3N0YXRlX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjQzCiAgICAvLyBhcHByb3ZhbF9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NDIKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NjYKICAgIC8vIHR4bl8xLCB0eG5fMiA9IGl0eG4uc3VibWl0X3R4bnMoY3JlYXRlX3R4bnNbMV0sIGNyZWF0ZV90eG5zWzBdKQogICAgaXR4bl9uZXh0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo2MwogICAgLy8gY3JlYXRlX3R4bnNbMF0uc2V0KGFwcF9hcmdzPShCeXRlcyhiIjFiIiksIEJ5dGVzKGIiMmIiKSkpCiAgICBieXRlIDB4MzE2MgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgzMjYyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MzEKICAgIC8vIG9uX2NvbXBsZXRpb249T25Db21wbGV0ZUFjdGlvbi5EZWxldGVBcHBsaWNhdGlvbiwKICAgIGludCBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjMwCiAgICAvLyBjbGVhcl9zdGF0ZV9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weToyOQogICAgLy8gYXBwcm92YWxfcHJvZ3JhbT1BTFdBWVNfQVBQUk9WRSwKICAgIGJ5dGUgMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjI4CiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjY2CiAgICAvLyB0eG5fMSwgdHhuXzIgPSBpdHhuLnN1Ym1pdF90eG5zKGNyZWF0ZV90eG5zWzFdLCBjcmVhdGVfdHhuc1swXSkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo2OAogICAgLy8gYXNzZXJ0IHR4bl8yLmFwcF9hcmdzKDApID09IGIiMWIiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgYnl0ZSAweDMxNjIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjY5CiAgICAvLyBhc3NlcnQgdHhuXzIuYXBwX2FyZ3MoMSkgPT0gYiIyYiIKICAgIGl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBieXRlIDB4MzI2MgogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NzAKICAgIC8vIGFzc2VydCB0eG5fMS5hcHBfYXJncygwKSA9PSBiIjNiIgogICAgZ2l0eG5hIDAgQXBwbGljYXRpb25BcmdzIDAKICAgIGJ5dGUgMHgzMzYyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo3MQogICAgLy8gYXNzZXJ0IHR4bl8xLmFwcF9hcmdzKDEpID09IGIiNGIiCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnl0ZSAweDM0NjIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjcyCiAgICAvLyBhc3NlcnQgdHhuXzEuYXBwX2FyZ3MoMikgPT0gYiI1YiIKICAgIGdpdHhuYSAwIEFwcGxpY2F0aW9uQXJncyAyCiAgICBieXRlIDB4MzU2MgogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NzcKICAgIC8vIHR4bl90dXBsZSA9IGl0eG4uc3VibWl0X3R4bnMoY3JlYXRlX3R4bnNbMF0sIGNyZWF0ZV90eG5zWzFdKQogICAgaXR4bl9iZWdpbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NzQKICAgIC8vIGNyZWF0ZV90eG5zWzBdLnNldChhcHBfYXJncz0oQnl0ZXMoYiIxYyIpLCBCeXRlcyhiIjJjIikpKQogICAgYnl0ZSAweDMxNjMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MzI2MwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjMxCiAgICAvLyBvbl9jb21wbGV0aW9uPU9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24sCiAgICBpbnQgRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTozMAogICAgLy8gY2xlYXJfc3RhdGVfcHJvZ3JhbT1BTFdBWVNfQVBQUk9WRSwKICAgIGJ5dGUgMHgwOTgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjkKICAgIC8vIGFwcHJvdmFsX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weToyOAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo3NwogICAgLy8gdHhuX3R1cGxlID0gaXR4bi5zdWJtaXRfdHhucyhjcmVhdGVfdHhuc1swXSwgY3JlYXRlX3R4bnNbMV0pCiAgICBpdHhuX25leHQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjQ3CiAgICAvLyBub3RlPWIiZGlmZmVyZW50IHBhcmFtIHNldCIsCiAgICBieXRlIDB4NjQ2OTY2NjY2NTcyNjU2ZTc0MjA3MDYxNzI2MTZkMjA3MzY1NzQKICAgIGl0eG5fZmllbGQgTm90ZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NzUKICAgIC8vIGNyZWF0ZV90eG5zWzFdLnNldChhcHBfYXJncz0oQnl0ZXMoYiIzYyIpLCBCeXRlcyhiIjRjIiksIEJ5dGVzKGIiNWMiKSkpCiAgICBieXRlIDB4MzM2MwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgzNDYzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDM1NjMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo0NQogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50IERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NDQKICAgIC8vIGNsZWFyX3N0YXRlX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjQzCiAgICAvLyBhcHByb3ZhbF9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NDIKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6NzcKICAgIC8vIHR4bl90dXBsZSA9IGl0eG4uc3VibWl0X3R4bnMoY3JlYXRlX3R4bnNbMF0sIGNyZWF0ZV90eG5zWzFdKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5Ojc5CiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzBdLmFwcF9hcmdzKDApID09IGIiMWMiCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgMAogICAgYnl0ZSAweDMxNjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjgwCiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzBdLmFwcF9hcmdzKDEpID09IGIiMmMiCiAgICBnaXR4bmEgMCBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnl0ZSAweDMyNjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjgxCiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzFdLmFwcF9hcmdzKDApID09IGIiM2MiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgYnl0ZSAweDMzNjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjgyCiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzFdLmFwcF9hcmdzKDEpID09IGIiNGMiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnl0ZSAweDM0NjMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5OjgzCiAgICAvLyBhc3NlcnQgdHhuX3R1cGxlWzFdLmFwcF9hcmdzKDIpID09IGIiNWMiCiAgICBpdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnl0ZSAweDM1NjMKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMuaW5uZXJfdHJhbnNhY3Rpb25zLmZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQuRmllbGRUdXBsZUNvbnRyYWN0LnRlc3RfYXNzaWduX3R1cGxlX21peGVkKCkgLT4gdm9pZDoKdGVzdF9hc3NpZ25fdHVwbGVfbWl4ZWQ6CiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo4NS04NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgdGVzdF9hc3NpZ25fdHVwbGVfbWl4ZWQoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6OTYKICAgIC8vIHJlc3VsdF93aXRoX3R4biA9IHR1cGxlX3dpdGhfdHhuX2ZpZWxkc1swXS5zdWJtaXQoKSwgdHVwbGVfd2l0aF90eG5fZmllbGRzWzFdCiAgICBpdHhuX2JlZ2luCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo5MgogICAgLy8gYXBwX2FyZ3M9KEJ5dGVzKGIiMWEiKSwgQnl0ZXMoYiIyYSIpKSwKICAgIGJ5dGUgMHgzMTYxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDMyNjEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBpbm5lcl90cmFuc2FjdGlvbnMvZmllbGRfdHVwbGVfYXNzaWdubWVudC5weTo5MQogICAgLy8gb25fY29tcGxldGlvbj1PbkNvbXBsZXRlQWN0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAogICAgaW50IERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6OTAKICAgIC8vIGNsZWFyX3N0YXRlX3Byb2dyYW09QUxXQVlTX0FQUFJPVkUsCiAgICBieXRlIDB4MDk4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIC8vIGlubmVyX3RyYW5zYWN0aW9ucy9maWVsZF90dXBsZV9hc3NpZ25tZW50LnB5Ojg5CiAgICAvLyBhcHByb3ZhbF9wcm9ncmFtPUFMV0FZU19BUFBST1ZFLAogICAgYnl0ZSAweDA5ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6ODgKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6OTYKICAgIC8vIHJlc3VsdF93aXRoX3R4biA9IHR1cGxlX3dpdGhfdHhuX2ZpZWxkc1swXS5zdWJtaXQoKSwgdHVwbGVfd2l0aF90eG5fZmllbGRzWzFdCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6OTgKICAgIC8vIGFzc2VydCByZXN1bHRfd2l0aF90eG5bMF0uYXBwX2FyZ3MoMCkgPT0gYiIxYSIKICAgIGl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBieXRlIDB4MzE2MQogICAgPT0KICAgIGFzc2VydAogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6OTkKICAgIC8vIGFzc2VydCByZXN1bHRfd2l0aF90eG5bMF0uYXBwX2FyZ3MoMSkgPT0gYiIyYSIKICAgIGl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBieXRlIDB4MzI2MQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLmlubmVyX3RyYW5zYWN0aW9ucy5maWVsZF90dXBsZV9hc3NpZ25tZW50LkZpZWxkVHVwbGVDb250cmFjdC5jbGVhcl9zdGF0ZV9wcm9ncmFtOgogICAgLy8gaW5uZXJfdHJhbnNhY3Rpb25zL2ZpZWxkX3R1cGxlX2Fzc2lnbm1lbnQucHk6MjQKICAgIC8vIGNsYXNzIEZpZWxkVHVwbGVDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgaW50IDEKICAgIHJldHVybgo=" }, "state": { "global": { diff --git a/test_cases/inner_transactions/out/FieldTupleContract.clear.mir b/test_cases/inner_transactions/out/FieldTupleContract.clear.mir index 87660bff27..82a11c69cb 100644 --- a/test_cases/inner_transactions/out/FieldTupleContract.clear.mir +++ b/test_cases/inner_transactions/out/FieldTupleContract.clear.mir @@ -4,6 +4,6 @@ // test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program() -> uint64: main_block@0: - int 1 // 1 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 - return // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:21 + int 1 // 1 class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 + return // class FieldTupleContract(ARC4Contract): inner_transactions/field_tuple_assignment.py:24 diff --git a/test_cases/inner_transactions/out/FieldTupleContract.clear.teal b/test_cases/inner_transactions/out/FieldTupleContract.clear.teal index a210a0bda3..d74a9dd9ef 100644 --- a/test_cases/inner_transactions/out/FieldTupleContract.clear.teal +++ b/test_cases/inner_transactions/out/FieldTupleContract.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program: - // inner_transactions/field_tuple_assignment.py:21 + // inner_transactions/field_tuple_assignment.py:24 // class FieldTupleContract(ARC4Contract): int 1 return diff --git a/test_cases/inner_transactions/out/FieldTupleContract.destructured.ir b/test_cases/inner_transactions/out/FieldTupleContract.destructured.ir index a52bb967ae..5572a1dce3 100644 --- a/test_cases/inner_transactions/out/FieldTupleContract.destructured.ir +++ b/test_cases/inner_transactions/out/FieldTupleContract.destructured.ir @@ -1,13 +1,13 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract: program approval: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program() -> bool: - block@0: // L21 + block@0: // L24 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@6 - block@1: // abi_routing_L21 + block@1: // abi_routing_L24 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => fail // reject transaction} - block@2: // test_assign_tuple_route_L22 + block@2: // test_assign_tuple_route_L25 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -15,7 +15,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%4#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() return 1u - block@3: // test_assign_tuple_mixed_route_L69 + block@3: // test_assign_tuple_mixed_route_L85 let tmp%5#0: uint64 = (txn OnCompletion) let tmp%6#0: bool = (! tmp%5#0) (assert tmp%6#0) // OnCompletion is NoOp @@ -23,7 +23,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%7#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() return 1u - block@6: // bare_routing_L21 + block@6: // bare_routing_L24 let tmp%8#0: uint64 = (txn OnCompletion) let not%tmp%8#0: bool = (! tmp%8#0) (assert not%tmp%8#0) // reject transaction @@ -33,10 +33,17 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract return 1u subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: - block@0: // L22 + block@0: // L25 + let tmp%0#0: bytes = (itob 42u) + let tmp%1#0: bytes = (itob 1u) itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) + ((itxn_field ApplicationArgs) 0x68656c6c6f) + ((itxn_field ApplicationArgs) "world") + ((itxn_field ApplicationArgs) "!") + ((itxn_field ApplicationArgs) tmp%0#0) + ((itxn_field ApplicationArgs) tmp%1#0) ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) @@ -53,21 +60,37 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%0#0: bytes = (gitxna 0 ApplicationArgs 0) - let tmp%1#0: bool = (== tmp%0#0 0x3161) - (assert tmp%1#0) - let tmp%2#0: bytes = (gitxna 0 ApplicationArgs 1) - let tmp%3#0: bool = (== tmp%2#0 0x3261) + let tmp%2#0: bytes = (gitxna 0 ApplicationArgs 0) + let tmp%3#0: bool = (== tmp%2#0 0x3161) (assert tmp%3#0) - let tmp%4#0: bytes = (itxna ApplicationArgs 0) - let tmp%5#0: bool = (== tmp%4#0 0x3361) + let tmp%4#0: bytes = (gitxna 0 ApplicationArgs 1) + let tmp%5#0: bool = (== tmp%4#0 0x3261) (assert tmp%5#0) - let tmp%6#0: bytes = (itxna ApplicationArgs 1) - let tmp%7#0: bool = (== tmp%6#0 0x3461) + let tmp%6#0: bytes = (gitxna 0 ApplicationArgs 2) + let tmp%7#0: bool = (== tmp%6#0 0x68656c6c6f) (assert tmp%7#0) - let tmp%8#0: bytes = (itxna ApplicationArgs 2) - let tmp%9#0: bool = (== tmp%8#0 0x3561) + let tmp%8#0: bytes = (gitxna 0 ApplicationArgs 3) + let tmp%9#0: bool = (== tmp%8#0 0x776f726c64) (assert tmp%9#0) + let tmp%10#0: bytes = (gitxna 0 ApplicationArgs 4) + let tmp%11#0: bool = (== tmp%10#0 0x21) + (assert tmp%11#0) + let tmp%12#0: bytes = (gitxna 0 ApplicationArgs 5) + let tmp%14#0: bool = (== tmp%12#0 tmp%0#0) + (assert tmp%14#0) + let tmp%15#0: bytes = (gitxna 0 ApplicationArgs 6) + let tmp%16#0: bytes = (itob 1u) + let tmp%17#0: bool = (== tmp%15#0 tmp%16#0) + (assert tmp%17#0) + let tmp%18#0: bytes = (itxna ApplicationArgs 0) + let tmp%19#0: bool = (== tmp%18#0 0x3361) + (assert tmp%19#0) + let tmp%20#0: bytes = (itxna ApplicationArgs 1) + let tmp%21#0: bool = (== tmp%20#0 0x3461) + (assert tmp%21#0) + let tmp%22#0: bytes = (itxna ApplicationArgs 2) + let tmp%23#0: bool = (== tmp%22#0 0x3561) + (assert tmp%23#0) itxn_begin ((itxn_field Note) 0x646966666572656e7420706172616d20736574) ((itxn_field ApplicationArgs) 0x3362) @@ -87,21 +110,21 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%10#0: bytes = (itxna ApplicationArgs 0) - let tmp%11#0: bool = (== tmp%10#0 0x3162) - (assert tmp%11#0) - let tmp%12#0: bytes = (itxna ApplicationArgs 1) - let tmp%13#0: bool = (== tmp%12#0 0x3262) - (assert tmp%13#0) - let tmp%14#0: bytes = (gitxna 0 ApplicationArgs 0) - let tmp%15#0: bool = (== tmp%14#0 0x3362) - (assert tmp%15#0) - let tmp%16#0: bytes = (gitxna 0 ApplicationArgs 1) - let tmp%17#0: bool = (== tmp%16#0 0x3462) - (assert tmp%17#0) - let tmp%18#0: bytes = (gitxna 0 ApplicationArgs 2) - let tmp%19#0: bool = (== tmp%18#0 0x3562) - (assert tmp%19#0) + let tmp%24#0: bytes = (itxna ApplicationArgs 0) + let tmp%25#0: bool = (== tmp%24#0 0x3162) + (assert tmp%25#0) + let tmp%26#0: bytes = (itxna ApplicationArgs 1) + let tmp%27#0: bool = (== tmp%26#0 0x3262) + (assert tmp%27#0) + let tmp%28#0: bytes = (gitxna 0 ApplicationArgs 0) + let tmp%29#0: bool = (== tmp%28#0 0x3362) + (assert tmp%29#0) + let tmp%30#0: bytes = (gitxna 0 ApplicationArgs 1) + let tmp%31#0: bool = (== tmp%30#0 0x3462) + (assert tmp%31#0) + let tmp%32#0: bytes = (gitxna 0 ApplicationArgs 2) + let tmp%33#0: bool = (== tmp%32#0 0x3562) + (assert tmp%33#0) itxn_begin ((itxn_field ApplicationArgs) 0x3163) ((itxn_field ApplicationArgs) 0x3263) @@ -121,25 +144,25 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%20#0: bytes = (gitxna 0 ApplicationArgs 0) - let tmp%21#0: bool = (== tmp%20#0 0x3163) - (assert tmp%21#0) - let tmp%22#0: bytes = (gitxna 0 ApplicationArgs 1) - let tmp%23#0: bool = (== tmp%22#0 0x3263) - (assert tmp%23#0) - let tmp%24#0: bytes = (itxna ApplicationArgs 0) - let tmp%25#0: bool = (== tmp%24#0 0x3363) - (assert tmp%25#0) - let tmp%26#0: bytes = (itxna ApplicationArgs 1) - let tmp%27#0: bool = (== tmp%26#0 0x3463) - (assert tmp%27#0) - let tmp%28#0: bytes = (itxna ApplicationArgs 2) - let tmp%29#0: bool = (== tmp%28#0 0x3563) - (assert tmp%29#0) + let tmp%34#0: bytes = (gitxna 0 ApplicationArgs 0) + let tmp%35#0: bool = (== tmp%34#0 0x3163) + (assert tmp%35#0) + let tmp%36#0: bytes = (gitxna 0 ApplicationArgs 1) + let tmp%37#0: bool = (== tmp%36#0 0x3263) + (assert tmp%37#0) + let tmp%38#0: bytes = (itxna ApplicationArgs 0) + let tmp%39#0: bool = (== tmp%38#0 0x3363) + (assert tmp%39#0) + let tmp%40#0: bytes = (itxna ApplicationArgs 1) + let tmp%41#0: bool = (== tmp%40#0 0x3463) + (assert tmp%41#0) + let tmp%42#0: bytes = (itxna ApplicationArgs 2) + let tmp%43#0: bool = (== tmp%42#0 0x3563) + (assert tmp%43#0) return subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() -> void: - block@0: // L69 + block@0: // L85 itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) @@ -159,5 +182,5 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract program clear-state: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program() -> bool: - block@0: // L21 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/inner_transactions/out/FieldTupleContract.ssa.ir b/test_cases/inner_transactions/out/FieldTupleContract.ssa.ir index 4c484a004f..f2cb80de83 100644 --- a/test_cases/inner_transactions/out/FieldTupleContract.ssa.ir +++ b/test_cases/inner_transactions/out/FieldTupleContract.ssa.ir @@ -1,13 +1,13 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract: program approval: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program() -> bool: - block@0: // L21 + block@0: // L24 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@6 - block@1: // abi_routing_L21 + block@1: // abi_routing_L24 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => block@4} - block@2: // test_assign_tuple_route_L22 + block@2: // test_assign_tuple_route_L25 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (== tmp%2#0 NoOp) (assert tmp%3#0) // OnCompletion is NoOp @@ -15,7 +15,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%4#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() return 1u - block@3: // test_assign_tuple_mixed_route_L69 + block@3: // test_assign_tuple_mixed_route_L85 let tmp%5#0: uint64 = (txn OnCompletion) let tmp%6#0: bool = (== tmp%5#0 NoOp) (assert tmp%6#0) // OnCompletion is NoOp @@ -23,23 +23,23 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%7#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() return 1u - block@4: // switch_case_default_L21 + block@4: // switch_case_default_L24 goto block@5 - block@5: // switch_case_next_L21 + block@5: // switch_case_next_L24 fail // reject transaction - block@6: // bare_routing_L21 + block@6: // bare_routing_L24 let tmp%8#0: uint64 = (txn OnCompletion) switch tmp%8#0 {0u => block@7, * => block@8} - block@7: // create_L21 + block@7: // create_L24 let tmp%9#0: bool = (txn ApplicationID) let tmp%10#0: bool = (! tmp%9#0) (assert tmp%10#0) // is creating return 1u - block@8: // reject_bare_on_completion_L21 + block@8: // reject_bare_on_completion_L24 fail // reject transaction subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: - block@0: // L22 + block@0: // L25 let create_txns.0#0: itxn_field_set = itxn_field_set(0) let create_txns.0%%param_Fee_idx_0#0: uint64 = 0u let create_txns.0%%Fee_length#0: uint64 = 1u @@ -51,9 +51,16 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract let create_txns.0%%ClearStateProgramPages_length#0: uint64 = 1u let create_txns.0%%param_OnCompletion_idx_0#0: uint64 = DeleteApplication let create_txns.0%%OnCompletion_length#0: uint64 = 1u + let tmp%0#0: bytes = (itob 42u) + let tmp%1#0: bytes = (itob 1u) let create_txns.0%%param_ApplicationArgs_idx_0#0: bytes = 0x3161 let create_txns.0%%param_ApplicationArgs_idx_1#0: bytes = 0x3261 - let create_txns.0%%ApplicationArgs_length#0: uint64 = 2u + let create_txns.0%%param_ApplicationArgs_idx_2#0: bytes = 0x68656c6c6f + let create_txns.0%%param_ApplicationArgs_idx_3#0: bytes = "world" + let create_txns.0%%param_ApplicationArgs_idx_4#0: bytes = "!" + let create_txns.0%%param_ApplicationArgs_idx_5#0: bytes = tmp%0#0 + let create_txns.0%%param_ApplicationArgs_idx_6#0: bytes = tmp%1#0 + let create_txns.0%%ApplicationArgs_length#0: uint64 = 7u let create_txns.0%%Sender_length#0: uint64 = 0u let create_txns.0%%Note_length#0: uint64 = 0u let create_txns.0%%Receiver_length#0: uint64 = 0u @@ -163,13 +170,18 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract itxn_begin ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_0#0) ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_1#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_2#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_3#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_4#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_5#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_6#0) ((itxn_field OnCompletion) create_txns.0%%param_OnCompletion_idx_0#0) ((itxn_field ClearStateProgramPages) create_txns.0%%param_ClearStateProgramPages_idx_0#0) ((itxn_field ApprovalProgramPages) create_txns.0%%param_ApprovalProgramPages_idx_0#0) ((itxn_field TypeEnum) create_txns.0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) create_txns.0%%param_Fee_idx_0#0) goto block@1 - block@1: // next_txn_L39 + block@1: // next_txn_L50 itxn_next ((itxn_field Note) create_txns.1%%param_Note_idx_0#0) ((itxn_field ApplicationArgs) create_txns.1%%param_ApplicationArgs_idx_0#0) @@ -181,7 +193,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) create_txns.1%%param_TypeEnum_idx_0#0) ((itxn_field Fee) create_txns.1%%param_Fee_idx_0#0) goto block@2 - block@2: // next_txn_L39 + block@2: // next_txn_L50 itxn_submit let txn_1#0: itxn_group_idx = itxn_group_idx(0) let txn_1._is_last#0: bool = 0u @@ -309,21 +321,38 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract let txn_2.StateProofPK#0: bytes = itxn[txn_2#0].StateProofPK let txn_2.NumApprovalProgramPages#0: uint64 = itxn[txn_2#0].NumApprovalProgramPages let txn_2.NumClearStateProgramPages#0: uint64 = itxn[txn_2#0].NumClearStateProgramPages - let tmp%0#0: bytes = itxn[txn_1#0].ApplicationArgs[0u] - let tmp%1#0: bool = (== tmp%0#0 0x3161) - (assert tmp%1#0) - let tmp%2#0: bytes = itxn[txn_1#0].ApplicationArgs[1u] - let tmp%3#0: bool = (== tmp%2#0 0x3261) + let tmp%2#0: bytes = itxn[txn_1#0].ApplicationArgs[0u] + let tmp%3#0: bool = (== tmp%2#0 0x3161) (assert tmp%3#0) - let tmp%4#0: bytes = itxn[txn_2#0].ApplicationArgs[0u] - let tmp%5#0: bool = (== tmp%4#0 0x3361) + let tmp%4#0: bytes = itxn[txn_1#0].ApplicationArgs[1u] + let tmp%5#0: bool = (== tmp%4#0 0x3261) (assert tmp%5#0) - let tmp%6#0: bytes = itxn[txn_2#0].ApplicationArgs[1u] - let tmp%7#0: bool = (== tmp%6#0 0x3461) + let tmp%6#0: bytes = itxn[txn_1#0].ApplicationArgs[2u] + let tmp%7#0: bool = (== tmp%6#0 0x68656c6c6f) (assert tmp%7#0) - let tmp%8#0: bytes = itxn[txn_2#0].ApplicationArgs[2u] - let tmp%9#0: bool = (== tmp%8#0 0x3561) + let tmp%8#0: bytes = itxn[txn_1#0].ApplicationArgs[3u] + let tmp%9#0: bool = (== tmp%8#0 0x776f726c64) (assert tmp%9#0) + let tmp%10#0: bytes = itxn[txn_1#0].ApplicationArgs[4u] + let tmp%11#0: bool = (== tmp%10#0 0x21) + (assert tmp%11#0) + let tmp%12#0: bytes = itxn[txn_1#0].ApplicationArgs[5u] + let tmp%13#0: bytes = (itob 42u) + let tmp%14#0: bool = (== tmp%12#0 tmp%13#0) + (assert tmp%14#0) + let tmp%15#0: bytes = itxn[txn_1#0].ApplicationArgs[6u] + let tmp%16#0: bytes = (itob 1u) + let tmp%17#0: bool = (== tmp%15#0 tmp%16#0) + (assert tmp%17#0) + let tmp%18#0: bytes = itxn[txn_2#0].ApplicationArgs[0u] + let tmp%19#0: bool = (== tmp%18#0 0x3361) + (assert tmp%19#0) + let tmp%20#0: bytes = itxn[txn_2#0].ApplicationArgs[1u] + let tmp%21#0: bool = (== tmp%20#0 0x3461) + (assert tmp%21#0) + let tmp%22#0: bytes = itxn[txn_2#0].ApplicationArgs[2u] + let tmp%23#0: bool = (== tmp%22#0 0x3561) + (assert tmp%23#0) let create_txns.0#1: itxn_field_set = itxn_field_set(2) let create_txns.0%%param_ApplicationArgs_idx_0#1: bytes = 0x3162 let create_txns.0%%param_ApplicationArgs_idx_1#1: bytes = 0x3262 @@ -344,17 +373,27 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) create_txns.1%%param_TypeEnum_idx_0#0) ((itxn_field Fee) create_txns.1%%param_Fee_idx_0#0) goto block@3 - block@3: // next_txn_L50 + block@3: // next_txn_L66 itxn_next ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_0#1) ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_1#1) + let is_ApplicationArgs_count_gte_7%0#0: bool = (>= create_txns.0%%ApplicationArgs_length#1 7u) + goto is_ApplicationArgs_count_gte_7%0#0 ? block@4 : block@5 + block@4: // set_ApplicationArgs_2_to_6_L66 + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_2#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_3#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_4#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_5#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_6#0) + goto block@5 + block@5: // next_field_L66 ((itxn_field OnCompletion) create_txns.0%%param_OnCompletion_idx_0#0) ((itxn_field ClearStateProgramPages) create_txns.0%%param_ClearStateProgramPages_idx_0#0) ((itxn_field ApprovalProgramPages) create_txns.0%%param_ApprovalProgramPages_idx_0#0) ((itxn_field TypeEnum) create_txns.0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) create_txns.0%%param_Fee_idx_0#0) - goto block@4 - block@4: // next_txn_L50 + goto block@6 + block@6: // next_txn_L66 itxn_submit let txn_1#1: itxn_group_idx = itxn_group_idx(0) let txn_1._is_last#1: bool = 0u @@ -482,21 +521,21 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract let txn_2.StateProofPK#1: bytes = itxn[txn_2#1].StateProofPK let txn_2.NumApprovalProgramPages#1: uint64 = itxn[txn_2#1].NumApprovalProgramPages let txn_2.NumClearStateProgramPages#1: uint64 = itxn[txn_2#1].NumClearStateProgramPages - let tmp%10#0: bytes = itxn[txn_2#1].ApplicationArgs[0u] - let tmp%11#0: bool = (== tmp%10#0 0x3162) - (assert tmp%11#0) - let tmp%12#0: bytes = itxn[txn_2#1].ApplicationArgs[1u] - let tmp%13#0: bool = (== tmp%12#0 0x3262) - (assert tmp%13#0) - let tmp%14#0: bytes = itxn[txn_1#1].ApplicationArgs[0u] - let tmp%15#0: bool = (== tmp%14#0 0x3362) - (assert tmp%15#0) - let tmp%16#0: bytes = itxn[txn_1#1].ApplicationArgs[1u] - let tmp%17#0: bool = (== tmp%16#0 0x3462) - (assert tmp%17#0) - let tmp%18#0: bytes = itxn[txn_1#1].ApplicationArgs[2u] - let tmp%19#0: bool = (== tmp%18#0 0x3562) - (assert tmp%19#0) + let tmp%24#0: bytes = itxn[txn_2#1].ApplicationArgs[0u] + let tmp%25#0: bool = (== tmp%24#0 0x3162) + (assert tmp%25#0) + let tmp%26#0: bytes = itxn[txn_2#1].ApplicationArgs[1u] + let tmp%27#0: bool = (== tmp%26#0 0x3262) + (assert tmp%27#0) + let tmp%28#0: bytes = itxn[txn_1#1].ApplicationArgs[0u] + let tmp%29#0: bool = (== tmp%28#0 0x3362) + (assert tmp%29#0) + let tmp%30#0: bytes = itxn[txn_1#1].ApplicationArgs[1u] + let tmp%31#0: bool = (== tmp%30#0 0x3462) + (assert tmp%31#0) + let tmp%32#0: bytes = itxn[txn_1#1].ApplicationArgs[2u] + let tmp%33#0: bool = (== tmp%32#0 0x3562) + (assert tmp%33#0) let create_txns.0#2: itxn_field_set = itxn_field_set(4) let create_txns.0%%param_ApplicationArgs_idx_0#2: bytes = 0x3163 let create_txns.0%%param_ApplicationArgs_idx_1#2: bytes = 0x3263 @@ -509,13 +548,23 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract itxn_begin ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_0#2) ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_1#2) + let is_ApplicationArgs_count_gte_7%1#0: bool = (>= create_txns.0%%ApplicationArgs_length#2 7u) + goto is_ApplicationArgs_count_gte_7%1#0 ? block@7 : block@8 + block@7: // set_ApplicationArgs_2_to_6_L77 + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_2#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_3#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_4#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_5#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_6#0) + goto block@8 + block@8: // next_field_L77 ((itxn_field OnCompletion) create_txns.0%%param_OnCompletion_idx_0#0) ((itxn_field ClearStateProgramPages) create_txns.0%%param_ClearStateProgramPages_idx_0#0) ((itxn_field ApprovalProgramPages) create_txns.0%%param_ApprovalProgramPages_idx_0#0) ((itxn_field TypeEnum) create_txns.0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) create_txns.0%%param_Fee_idx_0#0) - goto block@5 - block@5: // next_txn_L61 + goto block@9 + block@9: // next_txn_L77 itxn_next ((itxn_field Note) create_txns.1%%param_Note_idx_0#0) ((itxn_field ApplicationArgs) create_txns.1%%param_ApplicationArgs_idx_0#2) @@ -526,8 +575,8 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field ApprovalProgramPages) create_txns.1%%param_ApprovalProgramPages_idx_0#0) ((itxn_field TypeEnum) create_txns.1%%param_TypeEnum_idx_0#0) ((itxn_field Fee) create_txns.1%%param_Fee_idx_0#0) - goto block@6 - block@6: // next_txn_L61 + goto block@10 + block@10: // next_txn_L77 itxn_submit let txn_tuple.0#0: itxn_group_idx = itxn_group_idx(0) let txn_tuple.0._is_last#0: bool = 0u @@ -655,25 +704,25 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract let txn_tuple.1.StateProofPK#0: bytes = itxn[txn_tuple.1#0].StateProofPK let txn_tuple.1.NumApprovalProgramPages#0: uint64 = itxn[txn_tuple.1#0].NumApprovalProgramPages let txn_tuple.1.NumClearStateProgramPages#0: uint64 = itxn[txn_tuple.1#0].NumClearStateProgramPages - let tmp%20#0: bytes = itxn[txn_tuple.0#0].ApplicationArgs[0u] - let tmp%21#0: bool = (== tmp%20#0 0x3163) - (assert tmp%21#0) - let tmp%22#0: bytes = itxn[txn_tuple.0#0].ApplicationArgs[1u] - let tmp%23#0: bool = (== tmp%22#0 0x3263) - (assert tmp%23#0) - let tmp%24#0: bytes = itxn[txn_tuple.1#0].ApplicationArgs[0u] - let tmp%25#0: bool = (== tmp%24#0 0x3363) - (assert tmp%25#0) - let tmp%26#0: bytes = itxn[txn_tuple.1#0].ApplicationArgs[1u] - let tmp%27#0: bool = (== tmp%26#0 0x3463) - (assert tmp%27#0) - let tmp%28#0: bytes = itxn[txn_tuple.1#0].ApplicationArgs[2u] - let tmp%29#0: bool = (== tmp%28#0 0x3563) - (assert tmp%29#0) + let tmp%34#0: bytes = itxn[txn_tuple.0#0].ApplicationArgs[0u] + let tmp%35#0: bool = (== tmp%34#0 0x3163) + (assert tmp%35#0) + let tmp%36#0: bytes = itxn[txn_tuple.0#0].ApplicationArgs[1u] + let tmp%37#0: bool = (== tmp%36#0 0x3263) + (assert tmp%37#0) + let tmp%38#0: bytes = itxn[txn_tuple.1#0].ApplicationArgs[0u] + let tmp%39#0: bool = (== tmp%38#0 0x3363) + (assert tmp%39#0) + let tmp%40#0: bytes = itxn[txn_tuple.1#0].ApplicationArgs[1u] + let tmp%41#0: bool = (== tmp%40#0 0x3463) + (assert tmp%41#0) + let tmp%42#0: bytes = itxn[txn_tuple.1#0].ApplicationArgs[2u] + let tmp%43#0: bool = (== tmp%42#0 0x3563) + (assert tmp%43#0) return subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() -> void: - block@0: // L69 + block@0: // L85 let tuple_with_txn_fields.0#0: itxn_field_set = itxn_field_set(0) let tuple_with_txn_fields.0%%param_Fee_idx_0#0: uint64 = 0u let tuple_with_txn_fields.0%%Fee_length#0: uint64 = 1u @@ -743,7 +792,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) tuple_with_txn_fields.0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) tuple_with_txn_fields.0%%param_Fee_idx_0#0) goto block@1 - block@1: // next_txn_L80 + block@1: // next_txn_L96 itxn_submit let result_with_txn.0#0: itxn_group_idx = itxn_group_idx(0) let result_with_txn.0._is_last#0: bool = 1u @@ -821,5 +870,5 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract program clear-state: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program() -> bool: - block@0: // L21 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/inner_transactions/out/FieldTupleContract.ssa.opt_pass_1.ir b/test_cases/inner_transactions/out/FieldTupleContract.ssa.opt_pass_1.ir index 3e5154a880..682cf6233a 100644 --- a/test_cases/inner_transactions/out/FieldTupleContract.ssa.opt_pass_1.ir +++ b/test_cases/inner_transactions/out/FieldTupleContract.ssa.opt_pass_1.ir @@ -1,13 +1,13 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract: program approval: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program() -> bool: - block@0: // L21 + block@0: // L24 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@6 - block@1: // abi_routing_L21 + block@1: // abi_routing_L24 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => fail // reject transaction} - block@2: // test_assign_tuple_route_L22 + block@2: // test_assign_tuple_route_L25 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -15,7 +15,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%4#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() return 1u - block@3: // test_assign_tuple_mixed_route_L69 + block@3: // test_assign_tuple_mixed_route_L85 let tmp%5#0: uint64 = (txn OnCompletion) let tmp%6#0: bool = (! tmp%5#0) (assert tmp%6#0) // OnCompletion is NoOp @@ -23,7 +23,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%7#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() return 1u - block@6: // bare_routing_L21 + block@6: // bare_routing_L24 let tmp%8#0: uint64 = (txn OnCompletion) let not%tmp%8#0: bool = (! tmp%8#0) (assert not%tmp%8#0) // reject transaction @@ -33,10 +33,17 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract return 1u subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: - block@0: // L22 + block@0: // L25 + let tmp%0#0: bytes = (itob 42u) + let tmp%1#0: bytes = (itob 1u) itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) + ((itxn_field ApplicationArgs) 0x68656c6c6f) + ((itxn_field ApplicationArgs) "world") + ((itxn_field ApplicationArgs) "!") + ((itxn_field ApplicationArgs) tmp%0#0) + ((itxn_field ApplicationArgs) tmp%1#0) ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) @@ -53,21 +60,37 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%0#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) - let tmp%1#0: bool = (== tmp%0#0 0x3161) - (assert tmp%1#0) - let tmp%2#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) - let tmp%3#0: bool = (== tmp%2#0 0x3261) + let tmp%2#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) + let tmp%3#0: bool = (== tmp%2#0 0x3161) (assert tmp%3#0) - let tmp%4#0: bytes = ((itxnas ApplicationArgs) 0u) - let tmp%5#0: bool = (== tmp%4#0 0x3361) + let tmp%4#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) + let tmp%5#0: bool = (== tmp%4#0 0x3261) (assert tmp%5#0) - let tmp%6#0: bytes = ((itxnas ApplicationArgs) 1u) - let tmp%7#0: bool = (== tmp%6#0 0x3461) + let tmp%6#0: bytes = ((gitxnas 0 ApplicationArgs) 2u) + let tmp%7#0: bool = (== tmp%6#0 0x68656c6c6f) (assert tmp%7#0) - let tmp%8#0: bytes = ((itxnas ApplicationArgs) 2u) - let tmp%9#0: bool = (== tmp%8#0 0x3561) + let tmp%8#0: bytes = ((gitxnas 0 ApplicationArgs) 3u) + let tmp%9#0: bool = (== tmp%8#0 0x776f726c64) (assert tmp%9#0) + let tmp%10#0: bytes = ((gitxnas 0 ApplicationArgs) 4u) + let tmp%11#0: bool = (== tmp%10#0 0x21) + (assert tmp%11#0) + let tmp%12#0: bytes = ((gitxnas 0 ApplicationArgs) 5u) + let tmp%14#0: bool = (== tmp%12#0 tmp%0#0) + (assert tmp%14#0) + let tmp%15#0: bytes = ((gitxnas 0 ApplicationArgs) 6u) + let tmp%16#0: bytes = (itob 1u) + let tmp%17#0: bool = (== tmp%15#0 tmp%16#0) + (assert tmp%17#0) + let tmp%18#0: bytes = ((itxnas ApplicationArgs) 0u) + let tmp%19#0: bool = (== tmp%18#0 0x3361) + (assert tmp%19#0) + let tmp%20#0: bytes = ((itxnas ApplicationArgs) 1u) + let tmp%21#0: bool = (== tmp%20#0 0x3461) + (assert tmp%21#0) + let tmp%22#0: bytes = ((itxnas ApplicationArgs) 2u) + let tmp%23#0: bool = (== tmp%22#0 0x3561) + (assert tmp%23#0) itxn_begin ((itxn_field Note) 0x646966666572656e7420706172616d20736574) ((itxn_field ApplicationArgs) 0x3362) @@ -81,30 +104,50 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract itxn_next ((itxn_field ApplicationArgs) 0x3162) ((itxn_field ApplicationArgs) 0x3262) + let is_ApplicationArgs_count_gte_7%0#0: bool = 0u + goto is_ApplicationArgs_count_gte_7%0#0 ? block@4 : block@5 + block@4: // set_ApplicationArgs_2_to_6_L66 + ((itxn_field ApplicationArgs) 0x68656c6c6f) + ((itxn_field ApplicationArgs) "world") + ((itxn_field ApplicationArgs) "!") + ((itxn_field ApplicationArgs) tmp%0#0) + ((itxn_field ApplicationArgs) tmp%1#0) + goto block@5 + block@5: // next_field_L66 ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%10#0: bytes = ((itxnas ApplicationArgs) 0u) - let tmp%11#0: bool = (== tmp%10#0 0x3162) - (assert tmp%11#0) - let tmp%12#0: bytes = ((itxnas ApplicationArgs) 1u) - let tmp%13#0: bool = (== tmp%12#0 0x3262) - (assert tmp%13#0) - let tmp%14#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) - let tmp%15#0: bool = (== tmp%14#0 0x3362) - (assert tmp%15#0) - let tmp%16#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) - let tmp%17#0: bool = (== tmp%16#0 0x3462) - (assert tmp%17#0) - let tmp%18#0: bytes = ((gitxnas 0 ApplicationArgs) 2u) - let tmp%19#0: bool = (== tmp%18#0 0x3562) - (assert tmp%19#0) + let tmp%24#0: bytes = ((itxnas ApplicationArgs) 0u) + let tmp%25#0: bool = (== tmp%24#0 0x3162) + (assert tmp%25#0) + let tmp%26#0: bytes = ((itxnas ApplicationArgs) 1u) + let tmp%27#0: bool = (== tmp%26#0 0x3262) + (assert tmp%27#0) + let tmp%28#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) + let tmp%29#0: bool = (== tmp%28#0 0x3362) + (assert tmp%29#0) + let tmp%30#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) + let tmp%31#0: bool = (== tmp%30#0 0x3462) + (assert tmp%31#0) + let tmp%32#0: bytes = ((gitxnas 0 ApplicationArgs) 2u) + let tmp%33#0: bool = (== tmp%32#0 0x3562) + (assert tmp%33#0) itxn_begin ((itxn_field ApplicationArgs) 0x3163) ((itxn_field ApplicationArgs) 0x3263) + let is_ApplicationArgs_count_gte_7%1#0: bool = 0u + goto is_ApplicationArgs_count_gte_7%1#0 ? block@7 : block@8 + block@7: // set_ApplicationArgs_2_to_6_L77 + ((itxn_field ApplicationArgs) 0x68656c6c6f) + ((itxn_field ApplicationArgs) "world") + ((itxn_field ApplicationArgs) "!") + ((itxn_field ApplicationArgs) tmp%0#0) + ((itxn_field ApplicationArgs) tmp%1#0) + goto block@8 + block@8: // next_field_L77 ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) @@ -121,25 +164,25 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%20#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) - let tmp%21#0: bool = (== tmp%20#0 0x3163) - (assert tmp%21#0) - let tmp%22#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) - let tmp%23#0: bool = (== tmp%22#0 0x3263) - (assert tmp%23#0) - let tmp%24#0: bytes = ((itxnas ApplicationArgs) 0u) - let tmp%25#0: bool = (== tmp%24#0 0x3363) - (assert tmp%25#0) - let tmp%26#0: bytes = ((itxnas ApplicationArgs) 1u) - let tmp%27#0: bool = (== tmp%26#0 0x3463) - (assert tmp%27#0) - let tmp%28#0: bytes = ((itxnas ApplicationArgs) 2u) - let tmp%29#0: bool = (== tmp%28#0 0x3563) - (assert tmp%29#0) + let tmp%34#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) + let tmp%35#0: bool = (== tmp%34#0 0x3163) + (assert tmp%35#0) + let tmp%36#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) + let tmp%37#0: bool = (== tmp%36#0 0x3263) + (assert tmp%37#0) + let tmp%38#0: bytes = ((itxnas ApplicationArgs) 0u) + let tmp%39#0: bool = (== tmp%38#0 0x3363) + (assert tmp%39#0) + let tmp%40#0: bytes = ((itxnas ApplicationArgs) 1u) + let tmp%41#0: bool = (== tmp%40#0 0x3463) + (assert tmp%41#0) + let tmp%42#0: bytes = ((itxnas ApplicationArgs) 2u) + let tmp%43#0: bool = (== tmp%42#0 0x3563) + (assert tmp%43#0) return subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() -> void: - block@0: // L69 + block@0: // L85 itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) @@ -161,5 +204,5 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract program clear-state: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program() -> bool: - block@0: // L21 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/inner_transactions/out/FieldTupleContract.ssa.opt_pass_2.ir b/test_cases/inner_transactions/out/FieldTupleContract.ssa.opt_pass_2.ir index a52bb967ae..131c4d6afb 100644 --- a/test_cases/inner_transactions/out/FieldTupleContract.ssa.opt_pass_2.ir +++ b/test_cases/inner_transactions/out/FieldTupleContract.ssa.opt_pass_2.ir @@ -1,13 +1,13 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract: program approval: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program() -> bool: - block@0: // L21 + block@0: // L24 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@6 - block@1: // abi_routing_L21 + block@1: // abi_routing_L24 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => fail // reject transaction} - block@2: // test_assign_tuple_route_L22 + block@2: // test_assign_tuple_route_L25 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -15,7 +15,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%4#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() return 1u - block@3: // test_assign_tuple_mixed_route_L69 + block@3: // test_assign_tuple_mixed_route_L85 let tmp%5#0: uint64 = (txn OnCompletion) let tmp%6#0: bool = (! tmp%5#0) (assert tmp%6#0) // OnCompletion is NoOp @@ -23,7 +23,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%7#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() return 1u - block@6: // bare_routing_L21 + block@6: // bare_routing_L24 let tmp%8#0: uint64 = (txn OnCompletion) let not%tmp%8#0: bool = (! tmp%8#0) (assert not%tmp%8#0) // reject transaction @@ -33,10 +33,17 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract return 1u subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: - block@0: // L22 + block@0: // L25 + let tmp%0#0: bytes = (itob 42u) + let tmp%1#0: bytes = (itob 1u) itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) + ((itxn_field ApplicationArgs) 0x68656c6c6f) + ((itxn_field ApplicationArgs) "world") + ((itxn_field ApplicationArgs) "!") + ((itxn_field ApplicationArgs) tmp%0#0) + ((itxn_field ApplicationArgs) tmp%1#0) ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) @@ -53,21 +60,37 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%0#0: bytes = (gitxna 0 ApplicationArgs 0) - let tmp%1#0: bool = (== tmp%0#0 0x3161) - (assert tmp%1#0) - let tmp%2#0: bytes = (gitxna 0 ApplicationArgs 1) - let tmp%3#0: bool = (== tmp%2#0 0x3261) + let tmp%2#0: bytes = (gitxna 0 ApplicationArgs 0) + let tmp%3#0: bool = (== tmp%2#0 0x3161) (assert tmp%3#0) - let tmp%4#0: bytes = (itxna ApplicationArgs 0) - let tmp%5#0: bool = (== tmp%4#0 0x3361) + let tmp%4#0: bytes = (gitxna 0 ApplicationArgs 1) + let tmp%5#0: bool = (== tmp%4#0 0x3261) (assert tmp%5#0) - let tmp%6#0: bytes = (itxna ApplicationArgs 1) - let tmp%7#0: bool = (== tmp%6#0 0x3461) + let tmp%6#0: bytes = (gitxna 0 ApplicationArgs 2) + let tmp%7#0: bool = (== tmp%6#0 0x68656c6c6f) (assert tmp%7#0) - let tmp%8#0: bytes = (itxna ApplicationArgs 2) - let tmp%9#0: bool = (== tmp%8#0 0x3561) + let tmp%8#0: bytes = (gitxna 0 ApplicationArgs 3) + let tmp%9#0: bool = (== tmp%8#0 0x776f726c64) (assert tmp%9#0) + let tmp%10#0: bytes = (gitxna 0 ApplicationArgs 4) + let tmp%11#0: bool = (== tmp%10#0 0x21) + (assert tmp%11#0) + let tmp%12#0: bytes = (gitxna 0 ApplicationArgs 5) + let tmp%14#0: bool = (== tmp%12#0 tmp%0#0) + (assert tmp%14#0) + let tmp%15#0: bytes = (gitxna 0 ApplicationArgs 6) + let tmp%16#0: bytes = (itob 1u) + let tmp%17#0: bool = (== tmp%15#0 tmp%16#0) + (assert tmp%17#0) + let tmp%18#0: bytes = (itxna ApplicationArgs 0) + let tmp%19#0: bool = (== tmp%18#0 0x3361) + (assert tmp%19#0) + let tmp%20#0: bytes = (itxna ApplicationArgs 1) + let tmp%21#0: bool = (== tmp%20#0 0x3461) + (assert tmp%21#0) + let tmp%22#0: bytes = (itxna ApplicationArgs 2) + let tmp%23#0: bool = (== tmp%22#0 0x3561) + (assert tmp%23#0) itxn_begin ((itxn_field Note) 0x646966666572656e7420706172616d20736574) ((itxn_field ApplicationArgs) 0x3362) @@ -81,30 +104,34 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract itxn_next ((itxn_field ApplicationArgs) 0x3162) ((itxn_field ApplicationArgs) 0x3262) + goto block@5 + block@5: // next_field_L66 ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%10#0: bytes = (itxna ApplicationArgs 0) - let tmp%11#0: bool = (== tmp%10#0 0x3162) - (assert tmp%11#0) - let tmp%12#0: bytes = (itxna ApplicationArgs 1) - let tmp%13#0: bool = (== tmp%12#0 0x3262) - (assert tmp%13#0) - let tmp%14#0: bytes = (gitxna 0 ApplicationArgs 0) - let tmp%15#0: bool = (== tmp%14#0 0x3362) - (assert tmp%15#0) - let tmp%16#0: bytes = (gitxna 0 ApplicationArgs 1) - let tmp%17#0: bool = (== tmp%16#0 0x3462) - (assert tmp%17#0) - let tmp%18#0: bytes = (gitxna 0 ApplicationArgs 2) - let tmp%19#0: bool = (== tmp%18#0 0x3562) - (assert tmp%19#0) + let tmp%24#0: bytes = (itxna ApplicationArgs 0) + let tmp%25#0: bool = (== tmp%24#0 0x3162) + (assert tmp%25#0) + let tmp%26#0: bytes = (itxna ApplicationArgs 1) + let tmp%27#0: bool = (== tmp%26#0 0x3262) + (assert tmp%27#0) + let tmp%28#0: bytes = (gitxna 0 ApplicationArgs 0) + let tmp%29#0: bool = (== tmp%28#0 0x3362) + (assert tmp%29#0) + let tmp%30#0: bytes = (gitxna 0 ApplicationArgs 1) + let tmp%31#0: bool = (== tmp%30#0 0x3462) + (assert tmp%31#0) + let tmp%32#0: bytes = (gitxna 0 ApplicationArgs 2) + let tmp%33#0: bool = (== tmp%32#0 0x3562) + (assert tmp%33#0) itxn_begin ((itxn_field ApplicationArgs) 0x3163) ((itxn_field ApplicationArgs) 0x3263) + goto block@8 + block@8: // next_field_L77 ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) @@ -121,25 +148,25 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%20#0: bytes = (gitxna 0 ApplicationArgs 0) - let tmp%21#0: bool = (== tmp%20#0 0x3163) - (assert tmp%21#0) - let tmp%22#0: bytes = (gitxna 0 ApplicationArgs 1) - let tmp%23#0: bool = (== tmp%22#0 0x3263) - (assert tmp%23#0) - let tmp%24#0: bytes = (itxna ApplicationArgs 0) - let tmp%25#0: bool = (== tmp%24#0 0x3363) - (assert tmp%25#0) - let tmp%26#0: bytes = (itxna ApplicationArgs 1) - let tmp%27#0: bool = (== tmp%26#0 0x3463) - (assert tmp%27#0) - let tmp%28#0: bytes = (itxna ApplicationArgs 2) - let tmp%29#0: bool = (== tmp%28#0 0x3563) - (assert tmp%29#0) + let tmp%34#0: bytes = (gitxna 0 ApplicationArgs 0) + let tmp%35#0: bool = (== tmp%34#0 0x3163) + (assert tmp%35#0) + let tmp%36#0: bytes = (gitxna 0 ApplicationArgs 1) + let tmp%37#0: bool = (== tmp%36#0 0x3263) + (assert tmp%37#0) + let tmp%38#0: bytes = (itxna ApplicationArgs 0) + let tmp%39#0: bool = (== tmp%38#0 0x3363) + (assert tmp%39#0) + let tmp%40#0: bytes = (itxna ApplicationArgs 1) + let tmp%41#0: bool = (== tmp%40#0 0x3463) + (assert tmp%41#0) + let tmp%42#0: bytes = (itxna ApplicationArgs 2) + let tmp%43#0: bool = (== tmp%42#0 0x3563) + (assert tmp%43#0) return subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() -> void: - block@0: // L69 + block@0: // L85 itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) @@ -159,5 +186,5 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract program clear-state: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program() -> bool: - block@0: // L21 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/inner_transactions/out/c2c.awst b/test_cases/inner_transactions/out/c2c.awst index bde6de523d..d0504f14c9 100644 --- a/test_cases/inner_transactions/out/c2c.awst +++ b/test_cases/inner_transactions/out/c2c.awst @@ -18,7 +18,7 @@ contract Greeter abimethod log_greetings(name: arc4.dynamic_array): void { - hello_call: inner_transaction_appl = submit_txn(create_inner_transaction(Fee=0u, TypeEnum=appl, ApplicationID=GlobalState['hello_app'], ApplicationArgs=(Method("hello(string)string"), name))) + hello_call: inner_transaction_appl = submit_txn(create_inner_transaction(Fee=0u, TypeEnum=appl, ApplicationID=GlobalState['hello_app'], ApplicationArgs=(Method("hello(string)string"), reinterpret_cast(name)))) greeting: arc4.dynamic_array = checked_maybe((extract<4, 0>(SINGLE_EVAL(id=0, source=hello_call.LastLog)), extract<0, 4>(SINGLE_EVAL(id=0, source=hello_call.LastLog)) == hex<"151F7C75">)) log(concat(concat('HelloWorld returned: ', ''), reinterpret_cast(arc4_decode(greeting, string)))) } diff --git a/test_cases/inner_transactions/out/field_tuple_assignment.awst b/test_cases/inner_transactions/out/field_tuple_assignment.awst index cdc5feea9e..ee453d543c 100644 --- a/test_cases/inner_transactions/out/field_tuple_assignment.awst +++ b/test_cases/inner_transactions/out/field_tuple_assignment.awst @@ -5,10 +5,15 @@ contract FieldTupleContract { abimethod test_assign_tuple(): void { - create_txns: tuple = (create_inner_transaction(Fee=0u, TypeEnum=appl, ApprovalProgramPages=hex<"098101">, ClearStateProgramPages=hex<"098101">, OnCompletion=DeleteApplication, ApplicationArgs=(hex<"3161">, hex<"3261">)), create_inner_transaction(Fee=0u, TypeEnum=appl, ApprovalProgramPages=hex<"098101">, ClearStateProgramPages=hex<"098101">, OnCompletion=DeleteApplication, ApplicationArgs=(hex<"3361">, hex<"3461">, hex<"3561">), Note=hex<"646966666572656E7420706172616D20736574">)) + create_txns: tuple = (create_inner_transaction(Fee=0u, TypeEnum=appl, ApprovalProgramPages=hex<"098101">, ClearStateProgramPages=hex<"098101">, OnCompletion=DeleteApplication, ApplicationArgs=(hex<"3161">, hex<"3261">, hex<"68656C6C6F">, 'world', reinterpret_cast('!'), itob(42u), itob(true))), create_inner_transaction(Fee=0u, TypeEnum=appl, ApprovalProgramPages=hex<"098101">, ClearStateProgramPages=hex<"098101">, OnCompletion=DeleteApplication, ApplicationArgs=(hex<"3361">, hex<"3461">, hex<"3561">), Note=hex<"646966666572656E7420706172616D20736574">)) (txn_1, txn_2): tuple = submit_txn(create_txns[0], create_txns[1]) assert(txn_1.ApplicationArgs[0u] == hex<"3161">) assert(txn_1.ApplicationArgs[1u] == hex<"3261">) + assert(txn_1.ApplicationArgs[2u] == hex<"68656C6C6F">) + assert(txn_1.ApplicationArgs[3u] == hex<"776F726C64">) + assert(txn_1.ApplicationArgs[4u] == hex<"21">) + assert(txn_1.ApplicationArgs[5u] == itob(42u)) + assert(txn_1.ApplicationArgs[6u] == itob(1u)) assert(txn_2.ApplicationArgs[0u] == hex<"3361">) assert(txn_2.ApplicationArgs[1u] == hex<"3461">) assert(txn_2.ApplicationArgs[2u] == hex<"3561">) diff --git a/test_cases/inner_transactions/out_O2/FieldTupleContract.approval.teal b/test_cases/inner_transactions/out_O2/FieldTupleContract.approval.teal index ff86eb7498..af503e04c3 100644 --- a/test_cases/inner_transactions/out_O2/FieldTupleContract.approval.teal +++ b/test_cases/inner_transactions/out_O2/FieldTupleContract.approval.teal @@ -43,11 +43,24 @@ main_bare_routing@6: // test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: test_assign_tuple: proto 0 0 + int 42 + itob + int 1 + itob itxn_begin byte 0x3161 itxn_field ApplicationArgs byte 0x3261 itxn_field ApplicationArgs + byte 0x68656c6c6f + itxn_field ApplicationArgs + byte "world" + itxn_field ApplicationArgs + byte "!" + itxn_field ApplicationArgs + dig 1 + itxn_field ApplicationArgs + itxn_field ApplicationArgs int DeleteApplication itxn_field OnCompletion byte 0x098101 @@ -86,6 +99,26 @@ test_assign_tuple: byte 0x3261 == assert + gitxna 0 ApplicationArgs 2 + byte 0x68656c6c6f + == + assert + gitxna 0 ApplicationArgs 3 + byte 0x776f726c64 + == + assert + gitxna 0 ApplicationArgs 4 + byte 0x21 + == + assert + gitxna 0 ApplicationArgs 5 + == + assert + gitxna 0 ApplicationArgs 6 + int 1 + itob + == + assert itxna ApplicationArgs 0 byte 0x3361 == diff --git a/test_cases/inner_transactions/out_O2/FieldTupleContract.destructured.ir b/test_cases/inner_transactions/out_O2/FieldTupleContract.destructured.ir index a52bb967ae..5572a1dce3 100644 --- a/test_cases/inner_transactions/out_O2/FieldTupleContract.destructured.ir +++ b/test_cases/inner_transactions/out_O2/FieldTupleContract.destructured.ir @@ -1,13 +1,13 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract: program approval: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program() -> bool: - block@0: // L21 + block@0: // L24 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@6 - block@1: // abi_routing_L21 + block@1: // abi_routing_L24 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => fail // reject transaction} - block@2: // test_assign_tuple_route_L22 + block@2: // test_assign_tuple_route_L25 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -15,7 +15,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%4#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() return 1u - block@3: // test_assign_tuple_mixed_route_L69 + block@3: // test_assign_tuple_mixed_route_L85 let tmp%5#0: uint64 = (txn OnCompletion) let tmp%6#0: bool = (! tmp%5#0) (assert tmp%6#0) // OnCompletion is NoOp @@ -23,7 +23,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%7#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() return 1u - block@6: // bare_routing_L21 + block@6: // bare_routing_L24 let tmp%8#0: uint64 = (txn OnCompletion) let not%tmp%8#0: bool = (! tmp%8#0) (assert not%tmp%8#0) // reject transaction @@ -33,10 +33,17 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract return 1u subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: - block@0: // L22 + block@0: // L25 + let tmp%0#0: bytes = (itob 42u) + let tmp%1#0: bytes = (itob 1u) itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) + ((itxn_field ApplicationArgs) 0x68656c6c6f) + ((itxn_field ApplicationArgs) "world") + ((itxn_field ApplicationArgs) "!") + ((itxn_field ApplicationArgs) tmp%0#0) + ((itxn_field ApplicationArgs) tmp%1#0) ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) @@ -53,21 +60,37 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%0#0: bytes = (gitxna 0 ApplicationArgs 0) - let tmp%1#0: bool = (== tmp%0#0 0x3161) - (assert tmp%1#0) - let tmp%2#0: bytes = (gitxna 0 ApplicationArgs 1) - let tmp%3#0: bool = (== tmp%2#0 0x3261) + let tmp%2#0: bytes = (gitxna 0 ApplicationArgs 0) + let tmp%3#0: bool = (== tmp%2#0 0x3161) (assert tmp%3#0) - let tmp%4#0: bytes = (itxna ApplicationArgs 0) - let tmp%5#0: bool = (== tmp%4#0 0x3361) + let tmp%4#0: bytes = (gitxna 0 ApplicationArgs 1) + let tmp%5#0: bool = (== tmp%4#0 0x3261) (assert tmp%5#0) - let tmp%6#0: bytes = (itxna ApplicationArgs 1) - let tmp%7#0: bool = (== tmp%6#0 0x3461) + let tmp%6#0: bytes = (gitxna 0 ApplicationArgs 2) + let tmp%7#0: bool = (== tmp%6#0 0x68656c6c6f) (assert tmp%7#0) - let tmp%8#0: bytes = (itxna ApplicationArgs 2) - let tmp%9#0: bool = (== tmp%8#0 0x3561) + let tmp%8#0: bytes = (gitxna 0 ApplicationArgs 3) + let tmp%9#0: bool = (== tmp%8#0 0x776f726c64) (assert tmp%9#0) + let tmp%10#0: bytes = (gitxna 0 ApplicationArgs 4) + let tmp%11#0: bool = (== tmp%10#0 0x21) + (assert tmp%11#0) + let tmp%12#0: bytes = (gitxna 0 ApplicationArgs 5) + let tmp%14#0: bool = (== tmp%12#0 tmp%0#0) + (assert tmp%14#0) + let tmp%15#0: bytes = (gitxna 0 ApplicationArgs 6) + let tmp%16#0: bytes = (itob 1u) + let tmp%17#0: bool = (== tmp%15#0 tmp%16#0) + (assert tmp%17#0) + let tmp%18#0: bytes = (itxna ApplicationArgs 0) + let tmp%19#0: bool = (== tmp%18#0 0x3361) + (assert tmp%19#0) + let tmp%20#0: bytes = (itxna ApplicationArgs 1) + let tmp%21#0: bool = (== tmp%20#0 0x3461) + (assert tmp%21#0) + let tmp%22#0: bytes = (itxna ApplicationArgs 2) + let tmp%23#0: bool = (== tmp%22#0 0x3561) + (assert tmp%23#0) itxn_begin ((itxn_field Note) 0x646966666572656e7420706172616d20736574) ((itxn_field ApplicationArgs) 0x3362) @@ -87,21 +110,21 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%10#0: bytes = (itxna ApplicationArgs 0) - let tmp%11#0: bool = (== tmp%10#0 0x3162) - (assert tmp%11#0) - let tmp%12#0: bytes = (itxna ApplicationArgs 1) - let tmp%13#0: bool = (== tmp%12#0 0x3262) - (assert tmp%13#0) - let tmp%14#0: bytes = (gitxna 0 ApplicationArgs 0) - let tmp%15#0: bool = (== tmp%14#0 0x3362) - (assert tmp%15#0) - let tmp%16#0: bytes = (gitxna 0 ApplicationArgs 1) - let tmp%17#0: bool = (== tmp%16#0 0x3462) - (assert tmp%17#0) - let tmp%18#0: bytes = (gitxna 0 ApplicationArgs 2) - let tmp%19#0: bool = (== tmp%18#0 0x3562) - (assert tmp%19#0) + let tmp%24#0: bytes = (itxna ApplicationArgs 0) + let tmp%25#0: bool = (== tmp%24#0 0x3162) + (assert tmp%25#0) + let tmp%26#0: bytes = (itxna ApplicationArgs 1) + let tmp%27#0: bool = (== tmp%26#0 0x3262) + (assert tmp%27#0) + let tmp%28#0: bytes = (gitxna 0 ApplicationArgs 0) + let tmp%29#0: bool = (== tmp%28#0 0x3362) + (assert tmp%29#0) + let tmp%30#0: bytes = (gitxna 0 ApplicationArgs 1) + let tmp%31#0: bool = (== tmp%30#0 0x3462) + (assert tmp%31#0) + let tmp%32#0: bytes = (gitxna 0 ApplicationArgs 2) + let tmp%33#0: bool = (== tmp%32#0 0x3562) + (assert tmp%33#0) itxn_begin ((itxn_field ApplicationArgs) 0x3163) ((itxn_field ApplicationArgs) 0x3263) @@ -121,25 +144,25 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) itxn_submit - let tmp%20#0: bytes = (gitxna 0 ApplicationArgs 0) - let tmp%21#0: bool = (== tmp%20#0 0x3163) - (assert tmp%21#0) - let tmp%22#0: bytes = (gitxna 0 ApplicationArgs 1) - let tmp%23#0: bool = (== tmp%22#0 0x3263) - (assert tmp%23#0) - let tmp%24#0: bytes = (itxna ApplicationArgs 0) - let tmp%25#0: bool = (== tmp%24#0 0x3363) - (assert tmp%25#0) - let tmp%26#0: bytes = (itxna ApplicationArgs 1) - let tmp%27#0: bool = (== tmp%26#0 0x3463) - (assert tmp%27#0) - let tmp%28#0: bytes = (itxna ApplicationArgs 2) - let tmp%29#0: bool = (== tmp%28#0 0x3563) - (assert tmp%29#0) + let tmp%34#0: bytes = (gitxna 0 ApplicationArgs 0) + let tmp%35#0: bool = (== tmp%34#0 0x3163) + (assert tmp%35#0) + let tmp%36#0: bytes = (gitxna 0 ApplicationArgs 1) + let tmp%37#0: bool = (== tmp%36#0 0x3263) + (assert tmp%37#0) + let tmp%38#0: bytes = (itxna ApplicationArgs 0) + let tmp%39#0: bool = (== tmp%38#0 0x3363) + (assert tmp%39#0) + let tmp%40#0: bytes = (itxna ApplicationArgs 1) + let tmp%41#0: bool = (== tmp%40#0 0x3463) + (assert tmp%41#0) + let tmp%42#0: bytes = (itxna ApplicationArgs 2) + let tmp%43#0: bool = (== tmp%42#0 0x3563) + (assert tmp%43#0) return subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() -> void: - block@0: // L69 + block@0: // L85 itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) @@ -159,5 +182,5 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract program clear-state: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program() -> bool: - block@0: // L21 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.approval.teal b/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.approval.teal index 38aa128854..c12c08f851 100644 --- a/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.approval.teal +++ b/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.approval.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program: - // inner_transactions/field_tuple_assignment.py:21 + // inner_transactions/field_tuple_assignment.py:24 // class FieldTupleContract(ARC4Contract): txn NumAppArgs bz main_bare_routing@6 @@ -13,7 +13,7 @@ test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval b main_switch_case_default@4 main_test_assign_tuple_route@2: - // inner_transactions/field_tuple_assignment.py:22 + // inner_transactions/field_tuple_assignment.py:25 // @arc4.abimethod txn OnCompletion int NoOp @@ -26,7 +26,7 @@ main_test_assign_tuple_route@2: return main_test_assign_tuple_mixed_route@3: - // inner_transactions/field_tuple_assignment.py:69 + // inner_transactions/field_tuple_assignment.py:85 // @arc4.abimethod txn OnCompletion int NoOp @@ -39,12 +39,12 @@ main_test_assign_tuple_mixed_route@3: return main_switch_case_default@4: - // inner_transactions/field_tuple_assignment.py:21 + // inner_transactions/field_tuple_assignment.py:24 // class FieldTupleContract(ARC4Contract): err // reject transaction main_bare_routing@6: - // inner_transactions/field_tuple_assignment.py:21 + // inner_transactions/field_tuple_assignment.py:24 // class FieldTupleContract(ARC4Contract): txn OnCompletion int 0 @@ -53,7 +53,7 @@ main_bare_routing@6: b main_reject_bare_on_completion@8 main_create@7: - // inner_transactions/field_tuple_assignment.py:21 + // inner_transactions/field_tuple_assignment.py:24 // class FieldTupleContract(ARC4Contract): txn ApplicationID ! @@ -62,52 +62,87 @@ main_create@7: return main_reject_bare_on_completion@8: - // inner_transactions/field_tuple_assignment.py:21 + // inner_transactions/field_tuple_assignment.py:24 // class FieldTupleContract(ARC4Contract): err // reject transaction // test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: test_assign_tuple: - // inner_transactions/field_tuple_assignment.py:22-23 + // inner_transactions/field_tuple_assignment.py:25-26 // @arc4.abimethod // def test_assign_tuple(self) -> None: proto 0 0 + // inner_transactions/field_tuple_assignment.py:38 + // UInt64(42), + int 42 + itob + // inner_transactions/field_tuple_assignment.py:39 + // True, + int 1 + itob + // inner_transactions/field_tuple_assignment.py:38 + // UInt64(42), + uncover 1 + dup + cover 2 + cover 2 // inner_transactions/field_tuple_assignment.py:39 + // True, + dup + cover 2 + cover 2 + // inner_transactions/field_tuple_assignment.py:50 // txn_1, txn_2 = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_begin - // inner_transactions/field_tuple_assignment.py:29 - // app_args=(Bytes(b"1a"), Bytes(b"2a")), + // inner_transactions/field_tuple_assignment.py:33 + // Bytes(b"1a"), byte 0x3161 itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:34 + // Bytes(b"2a"), byte 0x3261 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:28 + // inner_transactions/field_tuple_assignment.py:35 + // b"hello", + byte 0x68656c6c6f + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:36 + // "world", + byte "world" + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:37 + // String("!"), + byte "!" + itxn_field ApplicationArgs + itxn_field ApplicationArgs + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:31 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:27 + // inner_transactions/field_tuple_assignment.py:30 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:26 + // inner_transactions/field_tuple_assignment.py:29 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:25 + // inner_transactions/field_tuple_assignment.py:28 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:39 + // inner_transactions/field_tuple_assignment.py:50 // txn_1, txn_2 = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_next - // inner_transactions/field_tuple_assignment.py:36 + // inner_transactions/field_tuple_assignment.py:47 // note=b"different param set", byte 0x646966666572656e7420706172616d20736574 itxn_field Note - // inner_transactions/field_tuple_assignment.py:35 + // inner_transactions/field_tuple_assignment.py:46 // app_args=(Bytes(b"3a"), Bytes(b"4a"), Bytes(b"5a")), byte 0x3361 itxn_field ApplicationArgs @@ -115,70 +150,107 @@ test_assign_tuple: itxn_field ApplicationArgs byte 0x3561 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:34 + // inner_transactions/field_tuple_assignment.py:45 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:33 + // inner_transactions/field_tuple_assignment.py:44 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:32 + // inner_transactions/field_tuple_assignment.py:43 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:31 + // inner_transactions/field_tuple_assignment.py:42 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:39 + // inner_transactions/field_tuple_assignment.py:50 // txn_1, txn_2 = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_submit - // inner_transactions/field_tuple_assignment.py:41 + // inner_transactions/field_tuple_assignment.py:52 // assert txn_1.app_args(0) == b"1a" int 0 gitxnas 0 ApplicationArgs byte 0x3161 == assert - // inner_transactions/field_tuple_assignment.py:42 + // inner_transactions/field_tuple_assignment.py:53 // assert txn_1.app_args(1) == b"2a" int 1 gitxnas 0 ApplicationArgs byte 0x3261 == assert - // inner_transactions/field_tuple_assignment.py:43 + // inner_transactions/field_tuple_assignment.py:54 + // assert txn_1.app_args(2) == b"hello" + int 2 + gitxnas 0 ApplicationArgs + byte 0x68656c6c6f + == + assert + // inner_transactions/field_tuple_assignment.py:55 + // assert txn_1.app_args(3) == b"world" + int 3 + gitxnas 0 ApplicationArgs + byte 0x776f726c64 + == + assert + // inner_transactions/field_tuple_assignment.py:56 + // assert txn_1.app_args(4) == b"!" + int 4 + gitxnas 0 ApplicationArgs + byte 0x21 + == + assert + // inner_transactions/field_tuple_assignment.py:57 + // assert txn_1.app_args(5) == op.itob(42) + int 5 + gitxnas 0 ApplicationArgs + int 42 + itob + == + assert + // inner_transactions/field_tuple_assignment.py:58 + // assert txn_1.app_args(6) == op.itob(1) + int 6 + gitxnas 0 ApplicationArgs + int 1 + itob + == + assert + // inner_transactions/field_tuple_assignment.py:59 // assert txn_2.app_args(0) == b"3a" int 0 itxnas ApplicationArgs byte 0x3361 == assert - // inner_transactions/field_tuple_assignment.py:44 + // inner_transactions/field_tuple_assignment.py:60 // assert txn_2.app_args(1) == b"4a" int 1 itxnas ApplicationArgs byte 0x3461 == assert - // inner_transactions/field_tuple_assignment.py:45 + // inner_transactions/field_tuple_assignment.py:61 // assert txn_2.app_args(2) == b"5a" int 2 itxnas ApplicationArgs byte 0x3561 == assert - // inner_transactions/field_tuple_assignment.py:50 + // inner_transactions/field_tuple_assignment.py:66 // txn_1, txn_2 = itxn.submit_txns(create_txns[1], create_txns[0]) itxn_begin - // inner_transactions/field_tuple_assignment.py:36 + // inner_transactions/field_tuple_assignment.py:47 // note=b"different param set", byte 0x646966666572656e7420706172616d20736574 itxn_field Note - // inner_transactions/field_tuple_assignment.py:48 + // inner_transactions/field_tuple_assignment.py:64 // create_txns[1].set(app_args=(Bytes(b"3b"), Bytes(b"4b"), Bytes(b"5b"))) byte 0x3362 itxn_field ApplicationArgs @@ -186,124 +258,172 @@ test_assign_tuple: itxn_field ApplicationArgs byte 0x3562 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:34 + // inner_transactions/field_tuple_assignment.py:45 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:33 + // inner_transactions/field_tuple_assignment.py:44 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:32 + // inner_transactions/field_tuple_assignment.py:43 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:31 + // inner_transactions/field_tuple_assignment.py:42 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:50 + // inner_transactions/field_tuple_assignment.py:66 // txn_1, txn_2 = itxn.submit_txns(create_txns[1], create_txns[0]) itxn_next - // inner_transactions/field_tuple_assignment.py:47 + // inner_transactions/field_tuple_assignment.py:63 // create_txns[0].set(app_args=(Bytes(b"1b"), Bytes(b"2b"))) byte 0x3162 itxn_field ApplicationArgs byte 0x3262 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:28 + int 2 + int 7 + >= + // inner_transactions/field_tuple_assignment.py:66 + // txn_1, txn_2 = itxn.submit_txns(create_txns[1], create_txns[0]) + bz test_assign_tuple_next_field@5 + // inner_transactions/field_tuple_assignment.py:35 + // b"hello", + byte 0x68656c6c6f + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:36 + // "world", + byte "world" + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:37 + // String("!"), + byte "!" + itxn_field ApplicationArgs + frame_dig 0 + itxn_field ApplicationArgs + frame_dig 1 + itxn_field ApplicationArgs + +test_assign_tuple_next_field@5: + // inner_transactions/field_tuple_assignment.py:31 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:27 + // inner_transactions/field_tuple_assignment.py:30 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:26 + // inner_transactions/field_tuple_assignment.py:29 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:25 + // inner_transactions/field_tuple_assignment.py:28 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:50 + // inner_transactions/field_tuple_assignment.py:66 // txn_1, txn_2 = itxn.submit_txns(create_txns[1], create_txns[0]) itxn_submit - // inner_transactions/field_tuple_assignment.py:52 + // inner_transactions/field_tuple_assignment.py:68 // assert txn_2.app_args(0) == b"1b" int 0 itxnas ApplicationArgs byte 0x3162 == assert - // inner_transactions/field_tuple_assignment.py:53 + // inner_transactions/field_tuple_assignment.py:69 // assert txn_2.app_args(1) == b"2b" int 1 itxnas ApplicationArgs byte 0x3262 == assert - // inner_transactions/field_tuple_assignment.py:54 + // inner_transactions/field_tuple_assignment.py:70 // assert txn_1.app_args(0) == b"3b" int 0 gitxnas 0 ApplicationArgs byte 0x3362 == assert - // inner_transactions/field_tuple_assignment.py:55 + // inner_transactions/field_tuple_assignment.py:71 // assert txn_1.app_args(1) == b"4b" int 1 gitxnas 0 ApplicationArgs byte 0x3462 == assert - // inner_transactions/field_tuple_assignment.py:56 + // inner_transactions/field_tuple_assignment.py:72 // assert txn_1.app_args(2) == b"5b" int 2 gitxnas 0 ApplicationArgs byte 0x3562 == assert - // inner_transactions/field_tuple_assignment.py:61 + // inner_transactions/field_tuple_assignment.py:77 // txn_tuple = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_begin - // inner_transactions/field_tuple_assignment.py:58 + // inner_transactions/field_tuple_assignment.py:74 // create_txns[0].set(app_args=(Bytes(b"1c"), Bytes(b"2c"))) byte 0x3163 itxn_field ApplicationArgs byte 0x3263 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:28 + int 2 + int 7 + >= + // inner_transactions/field_tuple_assignment.py:77 + // txn_tuple = itxn.submit_txns(create_txns[0], create_txns[1]) + bz test_assign_tuple_next_field@8 + // inner_transactions/field_tuple_assignment.py:35 + // b"hello", + byte 0x68656c6c6f + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:36 + // "world", + byte "world" + itxn_field ApplicationArgs + // inner_transactions/field_tuple_assignment.py:37 + // String("!"), + byte "!" + itxn_field ApplicationArgs + frame_dig 0 + itxn_field ApplicationArgs + frame_dig 1 + itxn_field ApplicationArgs + +test_assign_tuple_next_field@8: + // inner_transactions/field_tuple_assignment.py:31 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:27 + // inner_transactions/field_tuple_assignment.py:30 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:26 + // inner_transactions/field_tuple_assignment.py:29 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:25 + // inner_transactions/field_tuple_assignment.py:28 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:61 + // inner_transactions/field_tuple_assignment.py:77 // txn_tuple = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_next - // inner_transactions/field_tuple_assignment.py:36 + // inner_transactions/field_tuple_assignment.py:47 // note=b"different param set", byte 0x646966666572656e7420706172616d20736574 itxn_field Note - // inner_transactions/field_tuple_assignment.py:59 + // inner_transactions/field_tuple_assignment.py:75 // create_txns[1].set(app_args=(Bytes(b"3c"), Bytes(b"4c"), Bytes(b"5c"))) byte 0x3363 itxn_field ApplicationArgs @@ -311,56 +431,56 @@ test_assign_tuple: itxn_field ApplicationArgs byte 0x3563 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:34 + // inner_transactions/field_tuple_assignment.py:45 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:33 + // inner_transactions/field_tuple_assignment.py:44 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:32 + // inner_transactions/field_tuple_assignment.py:43 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:31 + // inner_transactions/field_tuple_assignment.py:42 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:61 + // inner_transactions/field_tuple_assignment.py:77 // txn_tuple = itxn.submit_txns(create_txns[0], create_txns[1]) itxn_submit - // inner_transactions/field_tuple_assignment.py:63 + // inner_transactions/field_tuple_assignment.py:79 // assert txn_tuple[0].app_args(0) == b"1c" int 0 gitxnas 0 ApplicationArgs byte 0x3163 == assert - // inner_transactions/field_tuple_assignment.py:64 + // inner_transactions/field_tuple_assignment.py:80 // assert txn_tuple[0].app_args(1) == b"2c" int 1 gitxnas 0 ApplicationArgs byte 0x3263 == assert - // inner_transactions/field_tuple_assignment.py:65 + // inner_transactions/field_tuple_assignment.py:81 // assert txn_tuple[1].app_args(0) == b"3c" int 0 itxnas ApplicationArgs byte 0x3363 == assert - // inner_transactions/field_tuple_assignment.py:66 + // inner_transactions/field_tuple_assignment.py:82 // assert txn_tuple[1].app_args(1) == b"4c" int 1 itxnas ApplicationArgs byte 0x3463 == assert - // inner_transactions/field_tuple_assignment.py:67 + // inner_transactions/field_tuple_assignment.py:83 // assert txn_tuple[1].app_args(2) == b"5c" int 2 itxnas ApplicationArgs @@ -372,58 +492,58 @@ test_assign_tuple: // test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() -> void: test_assign_tuple_mixed: - // inner_transactions/field_tuple_assignment.py:69-70 + // inner_transactions/field_tuple_assignment.py:85-86 // @arc4.abimethod // def test_assign_tuple_mixed(self) -> None: proto 0 0 - // inner_transactions/field_tuple_assignment.py:80 + // inner_transactions/field_tuple_assignment.py:96 // result_with_txn = tuple_with_txn_fields[0].submit(), tuple_with_txn_fields[1] itxn_begin - // inner_transactions/field_tuple_assignment.py:76 + // inner_transactions/field_tuple_assignment.py:92 // app_args=(Bytes(b"1a"), Bytes(b"2a")), byte 0x3161 itxn_field ApplicationArgs byte 0x3261 itxn_field ApplicationArgs - // inner_transactions/field_tuple_assignment.py:75 + // inner_transactions/field_tuple_assignment.py:91 // on_completion=OnCompleteAction.DeleteApplication, int DeleteApplication itxn_field OnCompletion - // inner_transactions/field_tuple_assignment.py:74 + // inner_transactions/field_tuple_assignment.py:90 // clear_state_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ClearStateProgramPages - // inner_transactions/field_tuple_assignment.py:73 + // inner_transactions/field_tuple_assignment.py:89 // approval_program=ALWAYS_APPROVE, byte 0x098101 itxn_field ApprovalProgramPages - // inner_transactions/field_tuple_assignment.py:72 + // inner_transactions/field_tuple_assignment.py:88 // itxn.ApplicationCall( int appl itxn_field TypeEnum int 0 itxn_field Fee - // inner_transactions/field_tuple_assignment.py:80 + // inner_transactions/field_tuple_assignment.py:96 // result_with_txn = tuple_with_txn_fields[0].submit(), tuple_with_txn_fields[1] itxn_submit - // inner_transactions/field_tuple_assignment.py:82 + // inner_transactions/field_tuple_assignment.py:98 // assert result_with_txn[0].app_args(0) == b"1a" int 0 itxnas ApplicationArgs byte 0x3161 == assert - // inner_transactions/field_tuple_assignment.py:83 + // inner_transactions/field_tuple_assignment.py:99 // assert result_with_txn[0].app_args(1) == b"2a" int 1 itxnas ApplicationArgs byte 0x3261 == assert - // inner_transactions/field_tuple_assignment.py:78 + // inner_transactions/field_tuple_assignment.py:94 // Bytes(b"some other value"), byte 0x736f6d65206f746865722076616c7565 - // inner_transactions/field_tuple_assignment.py:84 + // inner_transactions/field_tuple_assignment.py:100 // assert result_with_txn[1] == b"some other value" byte 0x736f6d65206f746865722076616c7565 == diff --git a/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.clear.teal b/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.clear.teal index a210a0bda3..d74a9dd9ef 100644 --- a/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.clear.teal +++ b/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program: - // inner_transactions/field_tuple_assignment.py:21 + // inner_transactions/field_tuple_assignment.py:24 // class FieldTupleContract(ARC4Contract): int 1 return diff --git a/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.destructured.ir b/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.destructured.ir index 49ed6c55b8..45cf2924a5 100644 --- a/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.destructured.ir +++ b/test_cases/inner_transactions/out_unoptimized/FieldTupleContract.destructured.ir @@ -1,13 +1,13 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract: program approval: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program() -> bool: - block@0: // L21 + block@0: // L24 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@6 - block@1: // abi_routing_L21 + block@1: // abi_routing_L24 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => block@4} - block@2: // test_assign_tuple_route_L22 + block@2: // test_assign_tuple_route_L25 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (== tmp%2#0 NoOp) (assert tmp%3#0) // OnCompletion is NoOp @@ -15,7 +15,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%4#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() return 1u - block@3: // test_assign_tuple_mixed_route_L69 + block@3: // test_assign_tuple_mixed_route_L85 let tmp%5#0: uint64 = (txn OnCompletion) let tmp%6#0: bool = (== tmp%5#0 NoOp) (assert tmp%6#0) // OnCompletion is NoOp @@ -23,33 +23,42 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract (assert tmp%7#0) // is not creating test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() return 1u - block@4: // switch_case_default_L21 + block@4: // switch_case_default_L24 goto block@5 - block@5: // switch_case_next_L21 + block@5: // switch_case_next_L24 fail // reject transaction - block@6: // bare_routing_L21 + block@6: // bare_routing_L24 let tmp%8#0: uint64 = (txn OnCompletion) switch tmp%8#0 {0u => block@7, * => block@8} - block@7: // create_L21 + block@7: // create_L24 let tmp%9#0: bool = (txn ApplicationID) let tmp%10#0: bool = (! tmp%9#0) (assert tmp%10#0) // is creating return 1u - block@8: // reject_bare_on_completion_L21 + block@8: // reject_bare_on_completion_L24 fail // reject transaction subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple() -> void: - block@0: // L22 + block@0: // L25 + let tmp%0#0: bytes = (itob 42u) + let tmp%1#0: bytes = (itob 1u) + let create_txns.0%%param_ApplicationArgs_idx_5#0: bytes = tmp%0#0 + let create_txns.0%%param_ApplicationArgs_idx_6#0: bytes = tmp%1#0 itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) + ((itxn_field ApplicationArgs) 0x68656c6c6f) + ((itxn_field ApplicationArgs) "world") + ((itxn_field ApplicationArgs) "!") + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_5#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_6#0) ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@1 - block@1: // next_txn_L39 + block@1: // next_txn_L50 itxn_next ((itxn_field Note) 0x646966666572656e7420706172616d20736574) ((itxn_field ApplicationArgs) 0x3361) @@ -61,23 +70,40 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@2 - block@2: // next_txn_L39 + block@2: // next_txn_L50 itxn_submit - let tmp%0#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) - let tmp%1#0: bool = (== tmp%0#0 0x3161) - (assert tmp%1#0) - let tmp%2#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) - let tmp%3#0: bool = (== tmp%2#0 0x3261) + let tmp%2#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) + let tmp%3#0: bool = (== tmp%2#0 0x3161) (assert tmp%3#0) - let tmp%4#0: bytes = ((itxnas ApplicationArgs) 0u) - let tmp%5#0: bool = (== tmp%4#0 0x3361) + let tmp%4#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) + let tmp%5#0: bool = (== tmp%4#0 0x3261) (assert tmp%5#0) - let tmp%6#0: bytes = ((itxnas ApplicationArgs) 1u) - let tmp%7#0: bool = (== tmp%6#0 0x3461) + let tmp%6#0: bytes = ((gitxnas 0 ApplicationArgs) 2u) + let tmp%7#0: bool = (== tmp%6#0 0x68656c6c6f) (assert tmp%7#0) - let tmp%8#0: bytes = ((itxnas ApplicationArgs) 2u) - let tmp%9#0: bool = (== tmp%8#0 0x3561) + let tmp%8#0: bytes = ((gitxnas 0 ApplicationArgs) 3u) + let tmp%9#0: bool = (== tmp%8#0 0x776f726c64) (assert tmp%9#0) + let tmp%10#0: bytes = ((gitxnas 0 ApplicationArgs) 4u) + let tmp%11#0: bool = (== tmp%10#0 0x21) + (assert tmp%11#0) + let tmp%12#0: bytes = ((gitxnas 0 ApplicationArgs) 5u) + let tmp%13#0: bytes = (itob 42u) + let tmp%14#0: bool = (== tmp%12#0 tmp%13#0) + (assert tmp%14#0) + let tmp%15#0: bytes = ((gitxnas 0 ApplicationArgs) 6u) + let tmp%16#0: bytes = (itob 1u) + let tmp%17#0: bool = (== tmp%15#0 tmp%16#0) + (assert tmp%17#0) + let tmp%18#0: bytes = ((itxnas ApplicationArgs) 0u) + let tmp%19#0: bool = (== tmp%18#0 0x3361) + (assert tmp%19#0) + let tmp%20#0: bytes = ((itxnas ApplicationArgs) 1u) + let tmp%21#0: bool = (== tmp%20#0 0x3461) + (assert tmp%21#0) + let tmp%22#0: bytes = ((itxnas ApplicationArgs) 2u) + let tmp%23#0: bool = (== tmp%22#0 0x3561) + (assert tmp%23#0) itxn_begin ((itxn_field Note) 0x646966666572656e7420706172616d20736574) ((itxn_field ApplicationArgs) 0x3362) @@ -89,43 +115,63 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@3 - block@3: // next_txn_L50 + block@3: // next_txn_L66 itxn_next ((itxn_field ApplicationArgs) 0x3162) ((itxn_field ApplicationArgs) 0x3262) + let is_ApplicationArgs_count_gte_7%0#0: bool = (>= 2u 7u) + goto is_ApplicationArgs_count_gte_7%0#0 ? block@4 : block@5 + block@4: // set_ApplicationArgs_2_to_6_L66 + ((itxn_field ApplicationArgs) 0x68656c6c6f) + ((itxn_field ApplicationArgs) "world") + ((itxn_field ApplicationArgs) "!") + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_5#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_6#0) + goto block@5 + block@5: // next_field_L66 ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) - goto block@4 - block@4: // next_txn_L50 + goto block@6 + block@6: // next_txn_L66 itxn_submit - let tmp%10#0: bytes = ((itxnas ApplicationArgs) 0u) - let tmp%11#0: bool = (== tmp%10#0 0x3162) - (assert tmp%11#0) - let tmp%12#0: bytes = ((itxnas ApplicationArgs) 1u) - let tmp%13#0: bool = (== tmp%12#0 0x3262) - (assert tmp%13#0) - let tmp%14#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) - let tmp%15#0: bool = (== tmp%14#0 0x3362) - (assert tmp%15#0) - let tmp%16#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) - let tmp%17#0: bool = (== tmp%16#0 0x3462) - (assert tmp%17#0) - let tmp%18#0: bytes = ((gitxnas 0 ApplicationArgs) 2u) - let tmp%19#0: bool = (== tmp%18#0 0x3562) - (assert tmp%19#0) + let tmp%24#0: bytes = ((itxnas ApplicationArgs) 0u) + let tmp%25#0: bool = (== tmp%24#0 0x3162) + (assert tmp%25#0) + let tmp%26#0: bytes = ((itxnas ApplicationArgs) 1u) + let tmp%27#0: bool = (== tmp%26#0 0x3262) + (assert tmp%27#0) + let tmp%28#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) + let tmp%29#0: bool = (== tmp%28#0 0x3362) + (assert tmp%29#0) + let tmp%30#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) + let tmp%31#0: bool = (== tmp%30#0 0x3462) + (assert tmp%31#0) + let tmp%32#0: bytes = ((gitxnas 0 ApplicationArgs) 2u) + let tmp%33#0: bool = (== tmp%32#0 0x3562) + (assert tmp%33#0) itxn_begin ((itxn_field ApplicationArgs) 0x3163) ((itxn_field ApplicationArgs) 0x3263) + let is_ApplicationArgs_count_gte_7%1#0: bool = (>= 2u 7u) + goto is_ApplicationArgs_count_gte_7%1#0 ? block@7 : block@8 + block@7: // set_ApplicationArgs_2_to_6_L77 + ((itxn_field ApplicationArgs) 0x68656c6c6f) + ((itxn_field ApplicationArgs) "world") + ((itxn_field ApplicationArgs) "!") + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_5#0) + ((itxn_field ApplicationArgs) create_txns.0%%param_ApplicationArgs_idx_6#0) + goto block@8 + block@8: // next_field_L77 ((itxn_field OnCompletion) DeleteApplication) ((itxn_field ClearStateProgramPages) 0x098101) ((itxn_field ApprovalProgramPages) 0x098101) ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) - goto block@5 - block@5: // next_txn_L61 + goto block@9 + block@9: // next_txn_L77 itxn_next ((itxn_field Note) 0x646966666572656e7420706172616d20736574) ((itxn_field ApplicationArgs) 0x3363) @@ -136,28 +182,28 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field ApprovalProgramPages) 0x098101) ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) - goto block@6 - block@6: // next_txn_L61 + goto block@10 + block@10: // next_txn_L77 itxn_submit - let tmp%20#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) - let tmp%21#0: bool = (== tmp%20#0 0x3163) - (assert tmp%21#0) - let tmp%22#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) - let tmp%23#0: bool = (== tmp%22#0 0x3263) - (assert tmp%23#0) - let tmp%24#0: bytes = ((itxnas ApplicationArgs) 0u) - let tmp%25#0: bool = (== tmp%24#0 0x3363) - (assert tmp%25#0) - let tmp%26#0: bytes = ((itxnas ApplicationArgs) 1u) - let tmp%27#0: bool = (== tmp%26#0 0x3463) - (assert tmp%27#0) - let tmp%28#0: bytes = ((itxnas ApplicationArgs) 2u) - let tmp%29#0: bool = (== tmp%28#0 0x3563) - (assert tmp%29#0) + let tmp%34#0: bytes = ((gitxnas 0 ApplicationArgs) 0u) + let tmp%35#0: bool = (== tmp%34#0 0x3163) + (assert tmp%35#0) + let tmp%36#0: bytes = ((gitxnas 0 ApplicationArgs) 1u) + let tmp%37#0: bool = (== tmp%36#0 0x3263) + (assert tmp%37#0) + let tmp%38#0: bytes = ((itxnas ApplicationArgs) 0u) + let tmp%39#0: bool = (== tmp%38#0 0x3363) + (assert tmp%39#0) + let tmp%40#0: bytes = ((itxnas ApplicationArgs) 1u) + let tmp%41#0: bool = (== tmp%40#0 0x3463) + (assert tmp%41#0) + let tmp%42#0: bytes = ((itxnas ApplicationArgs) 2u) + let tmp%43#0: bool = (== tmp%42#0 0x3563) + (assert tmp%43#0) return subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed() -> void: - block@0: // L69 + block@0: // L85 itxn_begin ((itxn_field ApplicationArgs) 0x3161) ((itxn_field ApplicationArgs) 0x3261) @@ -167,7 +213,7 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@1 - block@1: // next_txn_L80 + block@1: // next_txn_L96 itxn_submit let tmp%0#0: bytes = ((itxnas ApplicationArgs) 0u) let tmp%1#0: bool = (== tmp%0#0 0x3161) @@ -181,5 +227,5 @@ contract test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract program clear-state: subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program() -> bool: - block@0: // L21 + block@0: // L24 return 1u \ No newline at end of file diff --git a/test_cases/inner_transactions/puya.log b/test_cases/inner_transactions/puya.log index c0eea867da..baf6d471db 100644 --- a/test_cases/inner_transactions/puya.log +++ b/test_cases/inner_transactions/puya.log @@ -977,46 +977,234 @@ debug: Sealing block@10: // after_if_else_L27 debug: Terminated block@10: // after_if_else_L27 debug: Sealing block@0: // L39 debug: Terminated block@0: // L39 -debug: Sealing block@0: // L22 -debug: Terminated block@0: // L22 -debug: Sealing block@1: // next_txn_L39 -debug: Terminated block@1: // next_txn_L39 -debug: Sealing block@2: // next_txn_L39 -debug: Terminated block@2: // next_txn_L39 -debug: Sealing block@3: // next_txn_L50 -debug: Terminated block@3: // next_txn_L50 -debug: Sealing block@4: // next_txn_L50 -debug: Terminated block@4: // next_txn_L50 -debug: Sealing block@5: // next_txn_L61 -debug: Terminated block@5: // next_txn_L61 -debug: Sealing block@6: // next_txn_L61 -debug: Terminated block@6: // next_txn_L61 -debug: Sealing block@0: // L69 -debug: Terminated block@0: // L69 -debug: Sealing block@1: // next_txn_L80 -debug: Terminated block@1: // next_txn_L80 -debug: Sealing block@0: // L21 -debug: Terminated block@0: // L21 -debug: Sealing block@None: // abi_routing_L21 -debug: Sealing block@None: // bare_routing_L21 -debug: Terminated block@1: // abi_routing_L21 -debug: Sealing block@None: // switch_case_default_L21 -debug: Sealing block@None: // test_assign_tuple_route_L22 -debug: Sealing block@None: // test_assign_tuple_mixed_route_L69 -debug: Terminated block@2: // test_assign_tuple_route_L22 -debug: Terminated block@3: // test_assign_tuple_mixed_route_L69 -debug: Terminated block@4: // switch_case_default_L21 -debug: Sealing block@5: // switch_case_next_L21 -debug: Terminated block@5: // switch_case_next_L21 -debug: Terminated block@6: // bare_routing_L21 -debug: Sealing block@None: // reject_bare_on_completion_L21 -debug: Sealing block@None: // create_L21 -debug: Terminated block@7: // create_L21 -debug: Terminated block@8: // reject_bare_on_completion_L21 -debug: Sealing block@None: // switch_case_next_L21 -debug: Sealing block@None: // after_if_else_L21 -debug: Sealing block@0: // L21 -debug: Terminated block@0: // L21 +debug: Sealing block@0: // L25 +debug: Terminated block@0: // L25 +debug: Sealing block@1: // next_txn_L50 +debug: Terminated block@1: // next_txn_L50 +debug: Sealing block@2: // next_txn_L50 +debug: Terminated block@2: // next_txn_L50 +debug: Sealing block@3: // next_txn_L66 +debug: Terminated block@3: // next_txn_L66 +debug: Sealing block@None: // set_ApplicationArgs_2_to_6_L66 +debug: Terminated block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Sealing block@5: // next_field_L66 +debug: Created Phi assignment: let create_txns.0%%param_OnCompletion_idx_0#1: uint64 = undefined while trying to resolve 'create_txns.0%%param_OnCompletion_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_OnCompletion_idx_0#0 to Phi node: let create_txns.0%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_OnCompletion_idx_0#0 to Phi node: let create_txns.0%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@3, create_txns.0%%param_OnCompletion_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@3, create_txns.0%%param_OnCompletion_idx_0#0 <- block@4) (create_txns.0%%param_OnCompletion_idx_0#1) with create_txns.0%%param_OnCompletion_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@3, create_txns.0%%param_OnCompletion_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@3, create_txns.0%%param_OnCompletion_idx_0#0 <- block@4) (create_txns.0%%param_OnCompletion_idx_0#1) with create_txns.0%%param_OnCompletion_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_ClearStateProgramPages_idx_0#1: bytes = undefined while trying to resolve 'create_txns.0%%param_ClearStateProgramPages_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_ClearStateProgramPages_idx_0#0 to Phi node: let create_txns.0%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_ClearStateProgramPages_idx_0#0 to Phi node: let create_txns.0%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@3, create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@3, create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@4) (create_txns.0%%param_ClearStateProgramPages_idx_0#1) with create_txns.0%%param_ClearStateProgramPages_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@3, create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@3, create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@4) (create_txns.0%%param_ClearStateProgramPages_idx_0#1) with create_txns.0%%param_ClearStateProgramPages_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_ApprovalProgramPages_idx_0#1: bytes = undefined while trying to resolve 'create_txns.0%%param_ApprovalProgramPages_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_ApprovalProgramPages_idx_0#0 to Phi node: let create_txns.0%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_ApprovalProgramPages_idx_0#0 to Phi node: let create_txns.0%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@3, create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@3, create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@4) (create_txns.0%%param_ApprovalProgramPages_idx_0#1) with create_txns.0%%param_ApprovalProgramPages_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@3, create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@3, create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@4) (create_txns.0%%param_ApprovalProgramPages_idx_0#1) with create_txns.0%%param_ApprovalProgramPages_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_TypeEnum_idx_0#1: uint64 = undefined while trying to resolve 'create_txns.0%%param_TypeEnum_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_TypeEnum_idx_0#0 to Phi node: let create_txns.0%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_TypeEnum_idx_0#0 to Phi node: let create_txns.0%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@3, create_txns.0%%param_TypeEnum_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@3, create_txns.0%%param_TypeEnum_idx_0#0 <- block@4) (create_txns.0%%param_TypeEnum_idx_0#1) with create_txns.0%%param_TypeEnum_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@3, create_txns.0%%param_TypeEnum_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@3, create_txns.0%%param_TypeEnum_idx_0#0 <- block@4) (create_txns.0%%param_TypeEnum_idx_0#1) with create_txns.0%%param_TypeEnum_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_Fee_idx_0#1: uint64 = undefined while trying to resolve 'create_txns.0%%param_Fee_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_Fee_idx_0#0 to Phi node: let create_txns.0%%param_Fee_idx_0#1: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_Fee_idx_0#0 to Phi node: let create_txns.0%%param_Fee_idx_0#1: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@3, create_txns.0%%param_Fee_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_Fee_idx_0#1: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@3, create_txns.0%%param_Fee_idx_0#0 <- block@4) (create_txns.0%%param_Fee_idx_0#1) with create_txns.0%%param_Fee_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_Fee_idx_0#1: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@3, create_txns.0%%param_Fee_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_Fee_idx_0#1: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@3, create_txns.0%%param_Fee_idx_0#0 <- block@4) (create_txns.0%%param_Fee_idx_0#1) with create_txns.0%%param_Fee_idx_0#0 in current definition for 1 blocks +debug: Terminated block@5: // next_field_L66 +debug: Sealing block@6: // next_txn_L66 +debug: Terminated block@6: // next_txn_L66 +debug: Sealing block@None: // set_ApplicationArgs_2_to_6_L77 +debug: Created Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_2#1: bytes = undefined while trying to resolve 'create_txns.0%%param_ApplicationArgs_idx_2' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_2#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_2#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_2#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_2#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_2#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_2#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_2#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_2#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_2#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_2#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_2#1) with create_txns.0%%param_ApplicationArgs_idx_2#0 +debug: Deleting Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_2#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_2#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_2#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_2#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_2#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_2#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_2#1) with create_txns.0%%param_ApplicationArgs_idx_2#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_3#1: bytes = undefined while trying to resolve 'create_txns.0%%param_ApplicationArgs_idx_3' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_3#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_3#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_3#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_3#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_3#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_3#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_3#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_3#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_3#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_3#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_3#1) with create_txns.0%%param_ApplicationArgs_idx_3#0 +debug: Deleting Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_3#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_3#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_3#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_3#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_3#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_3#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_3#1) with create_txns.0%%param_ApplicationArgs_idx_3#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_4#1: bytes = undefined while trying to resolve 'create_txns.0%%param_ApplicationArgs_idx_4' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_4#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_4#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_4#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_4#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_4#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_4#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_4#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_4#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_4#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_4#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_4#1) with create_txns.0%%param_ApplicationArgs_idx_4#0 +debug: Deleting Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_4#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_4#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_4#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_4#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_4#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_4#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_4#1) with create_txns.0%%param_ApplicationArgs_idx_4#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_5#1: bytes = undefined while trying to resolve 'create_txns.0%%param_ApplicationArgs_idx_5' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_5#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_5#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_5#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_5#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_5#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_5#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_5#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_5#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_5#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_5#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_5#1) with create_txns.0%%param_ApplicationArgs_idx_5#0 +debug: Deleting Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_5#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_5#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_5#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_5#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_5#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_5#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_5#1) with create_txns.0%%param_ApplicationArgs_idx_5#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_6#1: bytes = undefined while trying to resolve 'create_txns.0%%param_ApplicationArgs_idx_6' in block@5: // next_field_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_6#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_6#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_6#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.0%%param_ApplicationArgs_idx_6#0 to Phi node: let create_txns.0%%param_ApplicationArgs_idx_6#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_6#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_6#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_6#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_6#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_6#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_6#1) with create_txns.0%%param_ApplicationArgs_idx_6#0 +debug: Deleting Phi assignment: let create_txns.0%%param_ApplicationArgs_idx_6#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_6#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_6#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.0%%param_ApplicationArgs_idx_6#1: bytes = φ(create_txns.0%%param_ApplicationArgs_idx_6#0 <- block@3, create_txns.0%%param_ApplicationArgs_idx_6#0 <- block@4) (create_txns.0%%param_ApplicationArgs_idx_6#1) with create_txns.0%%param_ApplicationArgs_idx_6#0 in current definition for 1 blocks +debug: Terminated block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Sealing block@8: // next_field_L77 +debug: Created Phi assignment: let create_txns.0%%param_OnCompletion_idx_0#2: uint64 = undefined while trying to resolve 'create_txns.0%%param_OnCompletion_idx_0' in block@8: // next_field_L77 +debug: Added create_txns.0%%param_OnCompletion_idx_0#0 to Phi node: let create_txns.0%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.0%%param_OnCompletion_idx_0#0 to Phi node: let create_txns.0%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@6, create_txns.0%%param_OnCompletion_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.0%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@6, create_txns.0%%param_OnCompletion_idx_0#0 <- block@7) (create_txns.0%%param_OnCompletion_idx_0#2) with create_txns.0%%param_OnCompletion_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@6, create_txns.0%%param_OnCompletion_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.0%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.0%%param_OnCompletion_idx_0#0 <- block@6, create_txns.0%%param_OnCompletion_idx_0#0 <- block@7) (create_txns.0%%param_OnCompletion_idx_0#2) with create_txns.0%%param_OnCompletion_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_ClearStateProgramPages_idx_0#2: bytes = undefined while trying to resolve 'create_txns.0%%param_ClearStateProgramPages_idx_0' in block@8: // next_field_L77 +debug: Added create_txns.0%%param_ClearStateProgramPages_idx_0#0 to Phi node: let create_txns.0%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.0%%param_ClearStateProgramPages_idx_0#0 to Phi node: let create_txns.0%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@6, create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.0%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@6, create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@7) (create_txns.0%%param_ClearStateProgramPages_idx_0#2) with create_txns.0%%param_ClearStateProgramPages_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@6, create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.0%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@6, create_txns.0%%param_ClearStateProgramPages_idx_0#0 <- block@7) (create_txns.0%%param_ClearStateProgramPages_idx_0#2) with create_txns.0%%param_ClearStateProgramPages_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_ApprovalProgramPages_idx_0#2: bytes = undefined while trying to resolve 'create_txns.0%%param_ApprovalProgramPages_idx_0' in block@8: // next_field_L77 +debug: Added create_txns.0%%param_ApprovalProgramPages_idx_0#0 to Phi node: let create_txns.0%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.0%%param_ApprovalProgramPages_idx_0#0 to Phi node: let create_txns.0%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@6, create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.0%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@6, create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@7) (create_txns.0%%param_ApprovalProgramPages_idx_0#2) with create_txns.0%%param_ApprovalProgramPages_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@6, create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.0%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@6, create_txns.0%%param_ApprovalProgramPages_idx_0#0 <- block@7) (create_txns.0%%param_ApprovalProgramPages_idx_0#2) with create_txns.0%%param_ApprovalProgramPages_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_TypeEnum_idx_0#2: uint64 = undefined while trying to resolve 'create_txns.0%%param_TypeEnum_idx_0' in block@8: // next_field_L77 +debug: Added create_txns.0%%param_TypeEnum_idx_0#0 to Phi node: let create_txns.0%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.0%%param_TypeEnum_idx_0#0 to Phi node: let create_txns.0%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@6, create_txns.0%%param_TypeEnum_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.0%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@6, create_txns.0%%param_TypeEnum_idx_0#0 <- block@7) (create_txns.0%%param_TypeEnum_idx_0#2) with create_txns.0%%param_TypeEnum_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@6, create_txns.0%%param_TypeEnum_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.0%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.0%%param_TypeEnum_idx_0#0 <- block@6, create_txns.0%%param_TypeEnum_idx_0#0 <- block@7) (create_txns.0%%param_TypeEnum_idx_0#2) with create_txns.0%%param_TypeEnum_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.0%%param_Fee_idx_0#2: uint64 = undefined while trying to resolve 'create_txns.0%%param_Fee_idx_0' in block@8: // next_field_L77 +debug: Added create_txns.0%%param_Fee_idx_0#0 to Phi node: let create_txns.0%%param_Fee_idx_0#2: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.0%%param_Fee_idx_0#0 to Phi node: let create_txns.0%%param_Fee_idx_0#2: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@6, create_txns.0%%param_Fee_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.0%%param_Fee_idx_0#2: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@6, create_txns.0%%param_Fee_idx_0#0 <- block@7) (create_txns.0%%param_Fee_idx_0#2) with create_txns.0%%param_Fee_idx_0#0 +debug: Deleting Phi assignment: let create_txns.0%%param_Fee_idx_0#2: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@6, create_txns.0%%param_Fee_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.0%%param_Fee_idx_0#2: uint64 = φ(create_txns.0%%param_Fee_idx_0#0 <- block@6, create_txns.0%%param_Fee_idx_0#0 <- block@7) (create_txns.0%%param_Fee_idx_0#2) with create_txns.0%%param_Fee_idx_0#0 in current definition for 1 blocks +debug: Terminated block@8: // next_field_L77 +debug: Sealing block@9: // next_txn_L77 +debug: Created Phi assignment: let create_txns.1%%param_Note_idx_0#1: bytes = undefined while trying to resolve 'create_txns.1%%param_Note_idx_0' in block@8: // next_field_L77 +debug: Created Phi assignment: let create_txns.1%%param_Note_idx_0#2: bytes = undefined while trying to resolve 'create_txns.1%%param_Note_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.1%%param_Note_idx_0#0 to Phi node: let create_txns.1%%param_Note_idx_0#2: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.1%%param_Note_idx_0#0 to Phi node: let create_txns.1%%param_Note_idx_0#2: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@3, create_txns.1%%param_Note_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.1%%param_Note_idx_0#2: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@3, create_txns.1%%param_Note_idx_0#0 <- block@4) (create_txns.1%%param_Note_idx_0#2) with create_txns.1%%param_Note_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_Note_idx_0#2: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@3, create_txns.1%%param_Note_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.1%%param_Note_idx_0#2: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@3, create_txns.1%%param_Note_idx_0#0 <- block@4) (create_txns.1%%param_Note_idx_0#2) with create_txns.1%%param_Note_idx_0#0 in current definition for 1 blocks +debug: Added create_txns.1%%param_Note_idx_0#0 to Phi node: let create_txns.1%%param_Note_idx_0#1: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.1%%param_Note_idx_0#0 to Phi node: let create_txns.1%%param_Note_idx_0#1: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@6, create_txns.1%%param_Note_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.1%%param_Note_idx_0#1: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@6, create_txns.1%%param_Note_idx_0#0 <- block@7) (create_txns.1%%param_Note_idx_0#1) with create_txns.1%%param_Note_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_Note_idx_0#1: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@6, create_txns.1%%param_Note_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.1%%param_Note_idx_0#1: bytes = φ(create_txns.1%%param_Note_idx_0#0 <- block@6, create_txns.1%%param_Note_idx_0#0 <- block@7) (create_txns.1%%param_Note_idx_0#1) with create_txns.1%%param_Note_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.1%%param_ApplicationArgs_idx_0#3: bytes = undefined while trying to resolve 'create_txns.1%%param_ApplicationArgs_idx_0' in block@8: // next_field_L77 +debug: Added create_txns.1%%param_ApplicationArgs_idx_0#2 to Phi node: let create_txns.1%%param_ApplicationArgs_idx_0#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_0#2 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.1%%param_ApplicationArgs_idx_0#2 to Phi node: let create_txns.1%%param_ApplicationArgs_idx_0#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_0#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_0#2 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.1%%param_ApplicationArgs_idx_0#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_0#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_0#2 <- block@7) (create_txns.1%%param_ApplicationArgs_idx_0#3) with create_txns.1%%param_ApplicationArgs_idx_0#2 +debug: Deleting Phi assignment: let create_txns.1%%param_ApplicationArgs_idx_0#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_0#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_0#2 <- block@7) +debug: Replaced trivial Phi node: let create_txns.1%%param_ApplicationArgs_idx_0#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_0#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_0#2 <- block@7) (create_txns.1%%param_ApplicationArgs_idx_0#3) with create_txns.1%%param_ApplicationArgs_idx_0#2 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.1%%param_ApplicationArgs_idx_1#3: bytes = undefined while trying to resolve 'create_txns.1%%param_ApplicationArgs_idx_1' in block@8: // next_field_L77 +debug: Added create_txns.1%%param_ApplicationArgs_idx_1#2 to Phi node: let create_txns.1%%param_ApplicationArgs_idx_1#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_1#2 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.1%%param_ApplicationArgs_idx_1#2 to Phi node: let create_txns.1%%param_ApplicationArgs_idx_1#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_1#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_1#2 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.1%%param_ApplicationArgs_idx_1#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_1#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_1#2 <- block@7) (create_txns.1%%param_ApplicationArgs_idx_1#3) with create_txns.1%%param_ApplicationArgs_idx_1#2 +debug: Deleting Phi assignment: let create_txns.1%%param_ApplicationArgs_idx_1#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_1#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_1#2 <- block@7) +debug: Replaced trivial Phi node: let create_txns.1%%param_ApplicationArgs_idx_1#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_1#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_1#2 <- block@7) (create_txns.1%%param_ApplicationArgs_idx_1#3) with create_txns.1%%param_ApplicationArgs_idx_1#2 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.1%%param_ApplicationArgs_idx_2#3: bytes = undefined while trying to resolve 'create_txns.1%%param_ApplicationArgs_idx_2' in block@8: // next_field_L77 +debug: Added create_txns.1%%param_ApplicationArgs_idx_2#2 to Phi node: let create_txns.1%%param_ApplicationArgs_idx_2#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_2#2 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.1%%param_ApplicationArgs_idx_2#2 to Phi node: let create_txns.1%%param_ApplicationArgs_idx_2#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_2#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_2#2 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.1%%param_ApplicationArgs_idx_2#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_2#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_2#2 <- block@7) (create_txns.1%%param_ApplicationArgs_idx_2#3) with create_txns.1%%param_ApplicationArgs_idx_2#2 +debug: Deleting Phi assignment: let create_txns.1%%param_ApplicationArgs_idx_2#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_2#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_2#2 <- block@7) +debug: Replaced trivial Phi node: let create_txns.1%%param_ApplicationArgs_idx_2#3: bytes = φ(create_txns.1%%param_ApplicationArgs_idx_2#2 <- block@6, create_txns.1%%param_ApplicationArgs_idx_2#2 <- block@7) (create_txns.1%%param_ApplicationArgs_idx_2#3) with create_txns.1%%param_ApplicationArgs_idx_2#2 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.1%%param_OnCompletion_idx_0#1: uint64 = undefined while trying to resolve 'create_txns.1%%param_OnCompletion_idx_0' in block@8: // next_field_L77 +debug: Created Phi assignment: let create_txns.1%%param_OnCompletion_idx_0#2: uint64 = undefined while trying to resolve 'create_txns.1%%param_OnCompletion_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.1%%param_OnCompletion_idx_0#0 to Phi node: let create_txns.1%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.1%%param_OnCompletion_idx_0#0 to Phi node: let create_txns.1%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@3, create_txns.1%%param_OnCompletion_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.1%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@3, create_txns.1%%param_OnCompletion_idx_0#0 <- block@4) (create_txns.1%%param_OnCompletion_idx_0#2) with create_txns.1%%param_OnCompletion_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@3, create_txns.1%%param_OnCompletion_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.1%%param_OnCompletion_idx_0#2: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@3, create_txns.1%%param_OnCompletion_idx_0#0 <- block@4) (create_txns.1%%param_OnCompletion_idx_0#2) with create_txns.1%%param_OnCompletion_idx_0#0 in current definition for 1 blocks +debug: Added create_txns.1%%param_OnCompletion_idx_0#0 to Phi node: let create_txns.1%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.1%%param_OnCompletion_idx_0#0 to Phi node: let create_txns.1%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@6, create_txns.1%%param_OnCompletion_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.1%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@6, create_txns.1%%param_OnCompletion_idx_0#0 <- block@7) (create_txns.1%%param_OnCompletion_idx_0#1) with create_txns.1%%param_OnCompletion_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@6, create_txns.1%%param_OnCompletion_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.1%%param_OnCompletion_idx_0#1: uint64 = φ(create_txns.1%%param_OnCompletion_idx_0#0 <- block@6, create_txns.1%%param_OnCompletion_idx_0#0 <- block@7) (create_txns.1%%param_OnCompletion_idx_0#1) with create_txns.1%%param_OnCompletion_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.1%%param_ClearStateProgramPages_idx_0#1: bytes = undefined while trying to resolve 'create_txns.1%%param_ClearStateProgramPages_idx_0' in block@8: // next_field_L77 +debug: Created Phi assignment: let create_txns.1%%param_ClearStateProgramPages_idx_0#2: bytes = undefined while trying to resolve 'create_txns.1%%param_ClearStateProgramPages_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.1%%param_ClearStateProgramPages_idx_0#0 to Phi node: let create_txns.1%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.1%%param_ClearStateProgramPages_idx_0#0 to Phi node: let create_txns.1%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@3, create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.1%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@3, create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@4) (create_txns.1%%param_ClearStateProgramPages_idx_0#2) with create_txns.1%%param_ClearStateProgramPages_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@3, create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.1%%param_ClearStateProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@3, create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@4) (create_txns.1%%param_ClearStateProgramPages_idx_0#2) with create_txns.1%%param_ClearStateProgramPages_idx_0#0 in current definition for 1 blocks +debug: Added create_txns.1%%param_ClearStateProgramPages_idx_0#0 to Phi node: let create_txns.1%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.1%%param_ClearStateProgramPages_idx_0#0 to Phi node: let create_txns.1%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@6, create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.1%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@6, create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@7) (create_txns.1%%param_ClearStateProgramPages_idx_0#1) with create_txns.1%%param_ClearStateProgramPages_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@6, create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.1%%param_ClearStateProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@6, create_txns.1%%param_ClearStateProgramPages_idx_0#0 <- block@7) (create_txns.1%%param_ClearStateProgramPages_idx_0#1) with create_txns.1%%param_ClearStateProgramPages_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.1%%param_ApprovalProgramPages_idx_0#1: bytes = undefined while trying to resolve 'create_txns.1%%param_ApprovalProgramPages_idx_0' in block@8: // next_field_L77 +debug: Created Phi assignment: let create_txns.1%%param_ApprovalProgramPages_idx_0#2: bytes = undefined while trying to resolve 'create_txns.1%%param_ApprovalProgramPages_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.1%%param_ApprovalProgramPages_idx_0#0 to Phi node: let create_txns.1%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.1%%param_ApprovalProgramPages_idx_0#0 to Phi node: let create_txns.1%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@3, create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.1%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@3, create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@4) (create_txns.1%%param_ApprovalProgramPages_idx_0#2) with create_txns.1%%param_ApprovalProgramPages_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@3, create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.1%%param_ApprovalProgramPages_idx_0#2: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@3, create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@4) (create_txns.1%%param_ApprovalProgramPages_idx_0#2) with create_txns.1%%param_ApprovalProgramPages_idx_0#0 in current definition for 1 blocks +debug: Added create_txns.1%%param_ApprovalProgramPages_idx_0#0 to Phi node: let create_txns.1%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.1%%param_ApprovalProgramPages_idx_0#0 to Phi node: let create_txns.1%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@6, create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.1%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@6, create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@7) (create_txns.1%%param_ApprovalProgramPages_idx_0#1) with create_txns.1%%param_ApprovalProgramPages_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@6, create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.1%%param_ApprovalProgramPages_idx_0#1: bytes = φ(create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@6, create_txns.1%%param_ApprovalProgramPages_idx_0#0 <- block@7) (create_txns.1%%param_ApprovalProgramPages_idx_0#1) with create_txns.1%%param_ApprovalProgramPages_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.1%%param_TypeEnum_idx_0#1: uint64 = undefined while trying to resolve 'create_txns.1%%param_TypeEnum_idx_0' in block@8: // next_field_L77 +debug: Created Phi assignment: let create_txns.1%%param_TypeEnum_idx_0#2: uint64 = undefined while trying to resolve 'create_txns.1%%param_TypeEnum_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.1%%param_TypeEnum_idx_0#0 to Phi node: let create_txns.1%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.1%%param_TypeEnum_idx_0#0 to Phi node: let create_txns.1%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@3, create_txns.1%%param_TypeEnum_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.1%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@3, create_txns.1%%param_TypeEnum_idx_0#0 <- block@4) (create_txns.1%%param_TypeEnum_idx_0#2) with create_txns.1%%param_TypeEnum_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@3, create_txns.1%%param_TypeEnum_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.1%%param_TypeEnum_idx_0#2: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@3, create_txns.1%%param_TypeEnum_idx_0#0 <- block@4) (create_txns.1%%param_TypeEnum_idx_0#2) with create_txns.1%%param_TypeEnum_idx_0#0 in current definition for 1 blocks +debug: Added create_txns.1%%param_TypeEnum_idx_0#0 to Phi node: let create_txns.1%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.1%%param_TypeEnum_idx_0#0 to Phi node: let create_txns.1%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@6, create_txns.1%%param_TypeEnum_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.1%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@6, create_txns.1%%param_TypeEnum_idx_0#0 <- block@7) (create_txns.1%%param_TypeEnum_idx_0#1) with create_txns.1%%param_TypeEnum_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@6, create_txns.1%%param_TypeEnum_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.1%%param_TypeEnum_idx_0#1: uint64 = φ(create_txns.1%%param_TypeEnum_idx_0#0 <- block@6, create_txns.1%%param_TypeEnum_idx_0#0 <- block@7) (create_txns.1%%param_TypeEnum_idx_0#1) with create_txns.1%%param_TypeEnum_idx_0#0 in current definition for 1 blocks +debug: Created Phi assignment: let create_txns.1%%param_Fee_idx_0#1: uint64 = undefined while trying to resolve 'create_txns.1%%param_Fee_idx_0' in block@8: // next_field_L77 +debug: Created Phi assignment: let create_txns.1%%param_Fee_idx_0#2: uint64 = undefined while trying to resolve 'create_txns.1%%param_Fee_idx_0' in block@5: // next_field_L66 +debug: Added create_txns.1%%param_Fee_idx_0#0 to Phi node: let create_txns.1%%param_Fee_idx_0#2: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@3) in block@3: // next_txn_L66 +debug: Added create_txns.1%%param_Fee_idx_0#0 to Phi node: let create_txns.1%%param_Fee_idx_0#2: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@3, create_txns.1%%param_Fee_idx_0#0 <- block@4) in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Replacing trivial Phi node: let create_txns.1%%param_Fee_idx_0#2: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@3, create_txns.1%%param_Fee_idx_0#0 <- block@4) (create_txns.1%%param_Fee_idx_0#2) with create_txns.1%%param_Fee_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_Fee_idx_0#2: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@3, create_txns.1%%param_Fee_idx_0#0 <- block@4) +debug: Replaced trivial Phi node: let create_txns.1%%param_Fee_idx_0#2: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@3, create_txns.1%%param_Fee_idx_0#0 <- block@4) (create_txns.1%%param_Fee_idx_0#2) with create_txns.1%%param_Fee_idx_0#0 in current definition for 1 blocks +debug: Added create_txns.1%%param_Fee_idx_0#0 to Phi node: let create_txns.1%%param_Fee_idx_0#1: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@6) in block@6: // next_txn_L66 +debug: Added create_txns.1%%param_Fee_idx_0#0 to Phi node: let create_txns.1%%param_Fee_idx_0#1: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@6, create_txns.1%%param_Fee_idx_0#0 <- block@7) in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Replacing trivial Phi node: let create_txns.1%%param_Fee_idx_0#1: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@6, create_txns.1%%param_Fee_idx_0#0 <- block@7) (create_txns.1%%param_Fee_idx_0#1) with create_txns.1%%param_Fee_idx_0#0 +debug: Deleting Phi assignment: let create_txns.1%%param_Fee_idx_0#1: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@6, create_txns.1%%param_Fee_idx_0#0 <- block@7) +debug: Replaced trivial Phi node: let create_txns.1%%param_Fee_idx_0#1: uint64 = φ(create_txns.1%%param_Fee_idx_0#0 <- block@6, create_txns.1%%param_Fee_idx_0#0 <- block@7) (create_txns.1%%param_Fee_idx_0#1) with create_txns.1%%param_Fee_idx_0#0 in current definition for 1 blocks +debug: Terminated block@9: // next_txn_L77 +debug: Sealing block@10: // next_txn_L77 +debug: Terminated block@10: // next_txn_L77 +debug: Sealing block@0: // L85 +debug: Terminated block@0: // L85 +debug: Sealing block@1: // next_txn_L96 +debug: Terminated block@1: // next_txn_L96 +debug: Sealing block@0: // L24 +debug: Terminated block@0: // L24 +debug: Sealing block@None: // abi_routing_L24 +debug: Sealing block@None: // bare_routing_L24 +debug: Terminated block@1: // abi_routing_L24 +debug: Sealing block@None: // switch_case_default_L24 +debug: Sealing block@None: // test_assign_tuple_route_L25 +debug: Sealing block@None: // test_assign_tuple_mixed_route_L85 +debug: Terminated block@2: // test_assign_tuple_route_L25 +debug: Terminated block@3: // test_assign_tuple_mixed_route_L85 +debug: Terminated block@4: // switch_case_default_L24 +debug: Sealing block@5: // switch_case_next_L24 +debug: Terminated block@5: // switch_case_next_L24 +debug: Terminated block@6: // bare_routing_L24 +debug: Sealing block@None: // reject_bare_on_completion_L24 +debug: Sealing block@None: // create_L24 +debug: Terminated block@7: // create_L24 +debug: Terminated block@8: // reject_bare_on_completion_L24 +debug: Sealing block@None: // switch_case_next_L24 +debug: Sealing block@None: // after_if_else_L24 +debug: Sealing block@0: // L24 +debug: Terminated block@0: // L24 debug: Sealing block@0: // L19 debug: Terminated block@0: // L19 debug: Looking for 'range_item%0' in an unsealed block creating an incomplete Phi: block@1: // for_header_L27 @@ -5585,28 +5773,34 @@ debug: Optimizer: Remove Unused Variables debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: inlining the default target of a switch/goto nth -debug: adding block@1: // abi_routing_L21 as a predecessor of block@5: // switch_case_next_L21 due to inlining of block@4: // switch_case_default_L21 -debug: simplified terminator of block@1: // abi_routing_L21 from switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => block@4} to switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => block@5} +debug: adding block@1: // abi_routing_L24 as a predecessor of block@5: // switch_case_next_L24 due to inlining of block@4: // switch_case_default_L24 +debug: simplified terminator of block@1: // abi_routing_L24 from switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => block@4} to switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => block@5} debug: simplifying a switch with constants into goto nth -debug: simplified terminator of block@6: // bare_routing_L21 from switch tmp%8#0 {0u => block@7, * => block@8} to goto_nth [block@7][tmp%8#0] else goto block@8 +debug: simplified terminator of block@6: // bare_routing_L24 from switch tmp%8#0 {0u => block@7, * => block@8} to goto_nth [block@7][tmp%8#0] else goto block@8 debug: inlining the default target of a switch/goto nth -debug: simplified terminator of block@1: // abi_routing_L21 from switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => block@5} to switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => fail // reject transaction} +debug: simplified terminator of block@1: // abi_routing_L24 from switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => block@5} to switch tmp%1#0 {method "test_assign_tuple()void" => block@2, method "test_assign_tuple_mixed()void" => block@3, * => fail // reject transaction} debug: simplifying a goto nth with two targets into a conditional branch -debug: simplified terminator of block@6: // bare_routing_L21 from goto_nth [block@7][tmp%8#0] else goto block@8 to goto tmp%8#0 ? block@8 : block@7 +debug: simplified terminator of block@6: // bare_routing_L24 from goto_nth [block@7][tmp%8#0] else goto block@8 to goto tmp%8#0 ? block@8 : block@7 debug: inlining condition branch to err block into an assert false -debug: simplified terminator of block@6: // bare_routing_L21 from goto tmp%8#0 ? block@8 : block@7 to goto block@7 +debug: simplified terminator of block@6: // bare_routing_L24 from goto tmp%8#0 ? block@8 : block@7 to goto block@7 debug: Optimizer: Remove Linear Jump -debug: Merged linear block@5: // switch_case_next_L21 into block@4: // switch_case_default_L21 -debug: Merged linear block@7: // create_L21 into block@6: // bare_routing_L21 +debug: Merged linear block@5: // switch_case_next_L24 into block@4: // switch_case_default_L24 +debug: Merged linear block@7: // create_L24 into block@6: // bare_routing_L24 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks -debug: Removing unreachable blocks: block@4: // switch_case_default_L21, block@8: // reject_bare_on_completion_L21 +debug: Removing unreachable blocks: block@4: // switch_case_default_L24, block@8: // reject_bare_on_completion_L24 debug: Optimizer: Repeated Expression Elimination debug: Optimizing subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation +debug: Found equivalence set: tmp%0#0, create_txns.0%%param_ApplicationArgs_idx_5#0 +debug: Replacing {create_txns.0%%param_ApplicationArgs_idx_5#0} with tmp%0#0 made 3 modifications +debug: Found equivalence set: tmp%1#0, create_txns.0%%param_ApplicationArgs_idx_6#0 +debug: Replacing {create_txns.0%%param_ApplicationArgs_idx_6#0} with tmp%1#0 made 3 modifications debug: Optimizer: Intrinsic Simplifier +debug: Simplified (>= 2u 7u) to 0u +debug: Simplified (>= 2u 7u) to 0u debug: Optimizer: Remove Unused Variables debug: Removing unused variable create_txns.0#0 debug: Removing unused variable create_txns.0%%param_Fee_idx_0#0 @@ -5621,6 +5815,9 @@ debug: Removing unused variable create_txns.0%%param_OnCompletion_idx_0#0 debug: Removing unused variable create_txns.0%%OnCompletion_length#0 debug: Removing unused variable create_txns.0%%param_ApplicationArgs_idx_0#0 debug: Removing unused variable create_txns.0%%param_ApplicationArgs_idx_1#0 +debug: Removing unused variable create_txns.0%%param_ApplicationArgs_idx_2#0 +debug: Removing unused variable create_txns.0%%param_ApplicationArgs_idx_3#0 +debug: Removing unused variable create_txns.0%%param_ApplicationArgs_idx_4#0 debug: Removing unused variable create_txns.0%%ApplicationArgs_length#0 debug: Removing unused variable create_txns.0%%Sender_length#0 debug: Removing unused variable create_txns.0%%Note_length#0 @@ -6127,20 +6324,25 @@ debug: Removing unused variable txn_tuple.1.NumClearStateProgramPages#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump -debug: Replaced predecessor block@1: // next_txn_L39 with block@0: // L22 in block@2: // next_txn_L39 -debug: Merged linear block@1: // next_txn_L39 into block@0: // L22 -debug: Replaced predecessor block@2: // next_txn_L39 with block@0: // L22 in block@3: // next_txn_L50 -debug: Merged linear block@2: // next_txn_L39 into block@0: // L22 -debug: Replaced predecessor block@3: // next_txn_L50 with block@0: // L22 in block@4: // next_txn_L50 -debug: Merged linear block@3: // next_txn_L50 into block@0: // L22 -debug: Replaced predecessor block@4: // next_txn_L50 with block@0: // L22 in block@5: // next_txn_L61 -debug: Merged linear block@4: // next_txn_L50 into block@0: // L22 -debug: Replaced predecessor block@5: // next_txn_L61 with block@0: // L22 in block@6: // next_txn_L61 -debug: Merged linear block@5: // next_txn_L61 into block@0: // L22 -debug: Merged linear block@6: // next_txn_L61 into block@0: // L22 +debug: Replaced predecessor block@1: // next_txn_L50 with block@0: // L25 in block@2: // next_txn_L50 +debug: Merged linear block@1: // next_txn_L50 into block@0: // L25 +debug: Replaced predecessor block@2: // next_txn_L50 with block@0: // L25 in block@3: // next_txn_L66 +debug: Merged linear block@2: // next_txn_L50 into block@0: // L25 +debug: Replaced predecessor block@3: // next_txn_L66 with block@0: // L25 in block@5: // next_field_L66 +debug: Replaced predecessor block@3: // next_txn_L66 with block@0: // L25 in block@4: // set_ApplicationArgs_2_to_6_L66 +debug: Merged linear block@3: // next_txn_L66 into block@0: // L25 +debug: Replaced predecessor block@6: // next_txn_L66 with block@5: // next_field_L66 in block@8: // next_field_L77 +debug: Replaced predecessor block@6: // next_txn_L66 with block@5: // next_field_L66 in block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Merged linear block@6: // next_txn_L66 into block@5: // next_field_L66 +debug: Replaced predecessor block@9: // next_txn_L77 with block@8: // next_field_L77 in block@10: // next_txn_L77 +debug: Merged linear block@9: // next_txn_L77 into block@8: // next_field_L77 +debug: Merged linear block@10: // next_txn_L77 into block@8: // next_field_L77 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination +debug: Replacing redundant declaration let tmp%13#0: bytes = (itob 42u) with copy of existing registers [Register(ir_type=bytes, name='tmp%0', version=0, source_location=inner_transactions/field_tuple_assignment.py:38:20-30)] +debug: Found equivalence set: tmp%0#0, tmp%13#0 +debug: Replacing {tmp%13#0} with tmp%0#0 made 1 modifications debug: Optimizing subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer @@ -6275,7 +6477,7 @@ debug: Removing unused variable result_with_txn.1#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump -debug: Merged linear block@1: // next_txn_L80 into block@0: // L69 +debug: Merged linear block@1: // next_txn_L96 into block@0: // L85 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination @@ -6310,6 +6512,11 @@ debug: Optimizer: Copy Propagation debug: Optimizer: Intrinsic Simplifier debug: Simplified ((gitxnas 0 ApplicationArgs) 0u) to (gitxna 0 ApplicationArgs 0) debug: Simplified ((gitxnas 0 ApplicationArgs) 1u) to (gitxna 0 ApplicationArgs 1) +debug: Simplified ((gitxnas 0 ApplicationArgs) 2u) to (gitxna 0 ApplicationArgs 2) +debug: Simplified ((gitxnas 0 ApplicationArgs) 3u) to (gitxna 0 ApplicationArgs 3) +debug: Simplified ((gitxnas 0 ApplicationArgs) 4u) to (gitxna 0 ApplicationArgs 4) +debug: Simplified ((gitxnas 0 ApplicationArgs) 5u) to (gitxna 0 ApplicationArgs 5) +debug: Simplified ((gitxnas 0 ApplicationArgs) 6u) to (gitxna 0 ApplicationArgs 6) debug: Simplified ((itxnas ApplicationArgs) 0u) to (itxna ApplicationArgs 0) debug: Simplified ((itxnas ApplicationArgs) 1u) to (itxna ApplicationArgs 1) debug: Simplified ((itxnas ApplicationArgs) 2u) to (itxna ApplicationArgs 2) @@ -6324,11 +6531,20 @@ debug: Simplified ((itxnas ApplicationArgs) 0u) to (itxna ApplicationArgs 0) debug: Simplified ((itxnas ApplicationArgs) 1u) to (itxna ApplicationArgs 1) debug: Simplified ((itxnas ApplicationArgs) 2u) to (itxna ApplicationArgs 2) debug: Optimizer: Remove Unused Variables +debug: Removing unused variable is_ApplicationArgs_count_gte_7%0#0 +debug: Removing unused variable is_ApplicationArgs_count_gte_7%1#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@0: // L25 from goto 0u ? block@4 : block@5 to goto block@5 +debug: simplifying conditional branch with a constant into a goto +debug: simplified terminator of block@5: // next_field_L66 from goto 0u ? block@7 : block@8 to goto block@8 debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks +debug: Removing unreachable blocks: block@4: // set_ApplicationArgs_2_to_6_L66, block@7: // set_ApplicationArgs_2_to_6_L77 +debug: Removed unreachable predecessors from block@5: // next_field_L66 +debug: Removed unreachable predecessors from block@8: // next_field_L77 debug: Optimizer: Repeated Expression Elimination debug: Optimizing subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed debug: Optimizer: Constant Replacer @@ -6376,6 +6592,9 @@ debug: Optimizer: Remove Unused Variables debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump +debug: Replaced predecessor block@5: // next_field_L66 with block@0: // L25 in block@8: // next_field_L77 +debug: Merged linear block@5: // next_field_L66 into block@0: // L25 +debug: Merged linear block@8: // next_field_L77 into block@0: // L25 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination @@ -6401,7 +6620,53 @@ debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination -debug: No optimizations performed in pass 3, ending loop +debug: Output IR to inner_transactions/out/FieldTupleContract.ssa.opt_pass_3.ir +debug: Begin optimization pass 4/100 +debug: Optimizing subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizing subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizing subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizing subroutine test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.clear_state_program +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: No optimizations performed in pass 4, ending loop debug: Removing Phis from test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program debug: Removing Phis from test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple debug: Removing Phis from test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.test_assign_tuple_mixed @@ -7104,66 +7369,94 @@ debug: Replaced main_bare_routing@6.ops[12]: 'load tmp%9#0' with 'load tmp%9#0 f debug: Inserted main_bare_routing@6.ops[14]: 'store tmp%10#0 to l-stack (copy)' debug: Replaced main_bare_routing@6.ops[16]: 'load tmp%10#0' with 'load tmp%10#0 from l-stack (no copy)' debug: Found 2 edge set/s for test_cases.inner_transactions.field_tuple_assignment.FieldTupleContract.approval_program -debug: Inserted test_assign_tuple_block@0.ops[36]: 'store tmp%0#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[38]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[41]: 'store tmp%1#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[43]: 'load tmp%1#0' with 'load tmp%1#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[46]: 'store tmp%2#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[48]: 'load tmp%2#0' with 'load tmp%2#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[51]: 'store tmp%3#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[53]: 'load tmp%3#0' with 'load tmp%3#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[56]: 'store tmp%4#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[58]: 'load tmp%4#0' with 'load tmp%4#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[61]: 'store tmp%5#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[63]: 'load tmp%5#0' with 'load tmp%5#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[66]: 'store tmp%6#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[68]: 'load tmp%6#0' with 'load tmp%6#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[71]: 'store tmp%7#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[73]: 'load tmp%7#0' with 'load tmp%7#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[76]: 'store tmp%8#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[78]: 'load tmp%8#0' with 'load tmp%8#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[81]: 'store tmp%9#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[83]: 'load tmp%9#0' with 'load tmp%9#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[121]: 'store tmp%10#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[123]: 'load tmp%10#0' with 'load tmp%10#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[126]: 'store tmp%11#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[128]: 'load tmp%11#0' with 'load tmp%11#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[131]: 'store tmp%12#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[133]: 'load tmp%12#0' with 'load tmp%12#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[136]: 'store tmp%13#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[138]: 'load tmp%13#0' with 'load tmp%13#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[141]: 'store tmp%14#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[143]: 'load tmp%14#0' with 'load tmp%14#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[146]: 'store tmp%15#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[148]: 'load tmp%15#0' with 'load tmp%15#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[151]: 'store tmp%16#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[153]: 'load tmp%16#0' with 'load tmp%16#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[156]: 'store tmp%17#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[158]: 'load tmp%17#0' with 'load tmp%17#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[161]: 'store tmp%18#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[163]: 'load tmp%18#0' with 'load tmp%18#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[166]: 'store tmp%19#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[168]: 'load tmp%19#0' with 'load tmp%19#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[206]: 'store tmp%20#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[208]: 'load tmp%20#0' with 'load tmp%20#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[211]: 'store tmp%21#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[213]: 'load tmp%21#0' with 'load tmp%21#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[216]: 'store tmp%22#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[218]: 'load tmp%22#0' with 'load tmp%22#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[221]: 'store tmp%23#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[223]: 'load tmp%23#0' with 'load tmp%23#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[226]: 'store tmp%24#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[228]: 'load tmp%24#0' with 'load tmp%24#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[231]: 'store tmp%25#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[233]: 'load tmp%25#0' with 'load tmp%25#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[236]: 'store tmp%26#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[238]: 'load tmp%26#0' with 'load tmp%26#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[241]: 'store tmp%27#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[243]: 'load tmp%27#0' with 'load tmp%27#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[246]: 'store tmp%28#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[248]: 'load tmp%28#0' with 'load tmp%28#0 from l-stack (no copy)' -debug: Inserted test_assign_tuple_block@0.ops[251]: 'store tmp%29#0 to l-stack (copy)' -debug: Replaced test_assign_tuple_block@0.ops[253]: 'load tmp%29#0' with 'load tmp%29#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[52]: 'store tmp%2#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[54]: 'load tmp%2#0' with 'load tmp%2#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[57]: 'store tmp%3#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[59]: 'load tmp%3#0' with 'load tmp%3#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[62]: 'store tmp%4#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[64]: 'load tmp%4#0' with 'load tmp%4#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[67]: 'store tmp%5#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[69]: 'load tmp%5#0' with 'load tmp%5#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[72]: 'store tmp%6#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[74]: 'load tmp%6#0' with 'load tmp%6#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[77]: 'store tmp%7#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[79]: 'load tmp%7#0' with 'load tmp%7#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[82]: 'store tmp%8#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[84]: 'load tmp%8#0' with 'load tmp%8#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[87]: 'store tmp%9#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[89]: 'load tmp%9#0' with 'load tmp%9#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[92]: 'store tmp%10#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[94]: 'load tmp%10#0' with 'load tmp%10#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[97]: 'store tmp%11#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[99]: 'load tmp%11#0' with 'load tmp%11#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[102]: 'store tmp%12#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[104]: 'load tmp%12#0' with 'load tmp%12#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[107]: 'store tmp%14#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[109]: 'load tmp%14#0' with 'load tmp%14#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[119]: 'store tmp%17#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[121]: 'load tmp%17#0' with 'load tmp%17#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[124]: 'store tmp%18#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[126]: 'load tmp%18#0' with 'load tmp%18#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[129]: 'store tmp%19#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[131]: 'load tmp%19#0' with 'load tmp%19#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[134]: 'store tmp%20#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[136]: 'load tmp%20#0' with 'load tmp%20#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[139]: 'store tmp%21#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[141]: 'load tmp%21#0' with 'load tmp%21#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[144]: 'store tmp%22#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[146]: 'load tmp%22#0' with 'load tmp%22#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[149]: 'store tmp%23#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[151]: 'load tmp%23#0' with 'load tmp%23#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[189]: 'store tmp%24#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[191]: 'load tmp%24#0' with 'load tmp%24#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[194]: 'store tmp%25#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[196]: 'load tmp%25#0' with 'load tmp%25#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[199]: 'store tmp%26#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[201]: 'load tmp%26#0' with 'load tmp%26#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[204]: 'store tmp%27#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[206]: 'load tmp%27#0' with 'load tmp%27#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[209]: 'store tmp%28#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[211]: 'load tmp%28#0' with 'load tmp%28#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[214]: 'store tmp%29#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[216]: 'load tmp%29#0' with 'load tmp%29#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[219]: 'store tmp%30#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[221]: 'load tmp%30#0' with 'load tmp%30#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[224]: 'store tmp%31#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[226]: 'load tmp%31#0' with 'load tmp%31#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[229]: 'store tmp%32#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[231]: 'load tmp%32#0' with 'load tmp%32#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[234]: 'store tmp%33#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[236]: 'load tmp%33#0' with 'load tmp%33#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[274]: 'store tmp%34#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[276]: 'load tmp%34#0' with 'load tmp%34#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[279]: 'store tmp%35#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[281]: 'load tmp%35#0' with 'load tmp%35#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[284]: 'store tmp%36#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[286]: 'load tmp%36#0' with 'load tmp%36#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[289]: 'store tmp%37#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[291]: 'load tmp%37#0' with 'load tmp%37#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[294]: 'store tmp%38#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[296]: 'load tmp%38#0' with 'load tmp%38#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[299]: 'store tmp%39#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[301]: 'load tmp%39#0' with 'load tmp%39#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[304]: 'store tmp%40#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[306]: 'load tmp%40#0' with 'load tmp%40#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[309]: 'store tmp%41#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[311]: 'load tmp%41#0' with 'load tmp%41#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[314]: 'store tmp%42#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[316]: 'load tmp%42#0' with 'load tmp%42#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[319]: 'store tmp%43#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[321]: 'load tmp%43#0' with 'load tmp%43#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[115]: 'store tmp%16#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[118]: 'load tmp%16#0' with 'load tmp%16#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[112]: 'store tmp%15#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[118]: 'load tmp%15#0' with 'load tmp%15#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[5]: 'store tmp%1#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[20]: 'load tmp%1#0' with 'load tmp%1#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[2]: 'store tmp%0#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[19]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' +debug: Inserted test_assign_tuple_block@0.ops[20]: 'store tmp%0#0 to l-stack (copy)' +debug: Replaced test_assign_tuple_block@0.ops[108]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' debug: Inserted test_assign_tuple_mixed_block@0.ops[17]: 'store tmp%0#0 to l-stack (copy)' debug: Replaced test_assign_tuple_mixed_block@0.ops[19]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' debug: Inserted test_assign_tuple_mixed_block@0.ops[22]: 'store tmp%1#0 to l-stack (copy)' diff --git a/tests/test_expected_output/itxn.test b/tests/test_expected_output/itxn.test index 4f9ace7309..61ca213ce9 100644 --- a/tests/test_expected_output/itxn.test +++ b/tests/test_expected_output/itxn.test @@ -1,4 +1,3 @@ - ## case: test_cant_instantiate_inner_transaction from algopy import Contract, itxn @@ -6,7 +5,9 @@ from algopy import Contract, itxn class MyContract(Contract): def approval_program(self) -> bool: - txn = itxn.InnerTransactionResult() ## E: algopy.itxn.InnerTransactionResult cannot be instantiated directly, create a algopy.itxn.InnerTransaction and submit instead + txn = ( + itxn.InnerTransactionResult() ## E: algopy.itxn.InnerTransactionResult cannot be instantiated directly, create a algopy.itxn.InnerTransaction and submit instead + ) return True def clear_state_program(self) -> bool: @@ -22,24 +23,32 @@ class MyContract(Contract): def approval_program(self) -> bool: params = itxn.InnerTransaction(type=TransactionType.Payment) txn = params.submit() - self.cant_pass_inner_txn(txn) ## E: inner transactions cannot be used as a subroutine argument or return value - txn2 = self.cant_return_inner_txn() ## E: inner transactions can not be used like this - if (txn3 := params.submit()).created_app: ## E: inner transactions cannot be used in assignment expressions + self.cant_pass_inner_txn( ## E: inner transactions cannot be used as a subroutine argument or return value + txn + ) + txn2 = self.cant_return_inner_txn() ## E: inner transactions can not be used like this + if ( + txn3 := params.submit() ## E: inner transactions cannot be used in assignment expressions + ).created_app: pass - txn4 = txn ## E: inner transactions can not be used like this + txn4 = txn ## E: inner transactions can not be used like this return True def clear_state_program(self) -> bool: return True @subroutine - def cant_pass_inner_txn(self, txn: itxn.InnerTransactionResult) -> None: ## E: inner transactions cannot be used as a subroutine argument or return value + def cant_pass_inner_txn( + self, + txn: itxn.InnerTransactionResult, ## E: inner transactions cannot be used as a subroutine argument or return value + ) -> None: assert txn.type - @subroutine ## E: inner transactions cannot be used as a subroutine argument or return value + @subroutine ## E: inner transactions cannot be used as a subroutine argument or return value def cant_return_inner_txn(self) -> itxn.InnerTransactionResult: return itxn.InnerTransaction(type=TransactionType.Payment).submit() + ## case: test_inner_txn_local_only from algopy import * @@ -47,20 +56,33 @@ from algopy import * class MyContract(ARC4Contract): def __init__(self) -> None: - self.foo = GlobalState(itxn.InnerTransactionResult) ## E: ephemeral types (such as transaction related types) are not suitable for storage - self.foo_box = Box(itxn.InnerTransactionResult) ## E: ephemeral types (such as transaction related types) are not suitable for storage - self.foo_box_map = BoxMap(itxn.InnerTransactionResult, String) ## E: ephemeral types (such as transaction related types) are not suitable for storage - self.box_foo_map = BoxMap(String, itxn.InnerTransactionResult) ## E: ephemeral types (such as transaction related types) are not suitable for storage + self.foo = GlobalState( ## E: ephemeral types (such as transaction related types) are not suitable for storage + itxn.InnerTransactionResult + ) + self.foo_box = Box( ## E: ephemeral types (such as transaction related types) are not suitable for storage + itxn.InnerTransactionResult + ) + self.foo_box_map = BoxMap( ## E: ephemeral types (such as transaction related types) are not suitable for storage + itxn.InnerTransactionResult, String + ) + self.box_foo_map = BoxMap( ## E: ephemeral types (such as transaction related types) are not suitable for storage + String, itxn.InnerTransactionResult + ) @arc4.abimethod() def non_local_fields(self) -> None: - self.fields = itxn.InnerTransaction(type=TransactionType.Payment) ## E: ephemeral types (such as transaction related types) are not suitable for storage + self.fields = itxn.InnerTransaction( ## E: ephemeral types (such as transaction related types) are not suitable for storage + type=TransactionType.Payment + ) txn = self.fields.submit() @arc4.abimethod() def non_local_itxn(self) -> None: fields = itxn.InnerTransaction(type=TransactionType.Payment) - self.txn = fields.submit() ## E: ephemeral types (such as transaction related types) are not suitable for storage + self.txn = ( ## E: ephemeral types (such as transaction related types) are not suitable for storage + fields.submit() + ) + ## case: test_inner_txn_param_cant_be_aliased @@ -70,46 +92,66 @@ from algopy import Contract, TransactionType, itxn, subroutine class MyContract(Contract): def approval_program(self) -> bool: params = itxn.InnerTransaction(type=TransactionType.Payment) - self.cant_pass_inner_txn_params(params) ## E: inner transactions cannot be used as a subroutine argument or return value - params2 = self.cant_return_inner_txn_params() ## E: inner transactions can not be used like this - if (params3 := itxn.InnerTransaction(type=TransactionType.Payment)).submit().created_app: ## E: inner transactions cannot be used in assignment expressions + self.cant_pass_inner_txn_params( ## E: inner transactions cannot be used as a subroutine argument or return value + params + ) + params2 = ( + self.cant_return_inner_txn_params() ## E: inner transactions can not be used like this + ) + if ( + (params3 := itxn.InnerTransaction(type=TransactionType.Payment)) ## E: inner transactions cannot be used in assignment expressions + .submit() + .created_app + ): pass params4 = params ## E: inner transaction fields must be copied using .copy() when assigning to a new local - txn = (params5 := itxn.InnerTransaction(type=TransactionType.Payment)).submit() ## E: inner transactions cannot be used in assignment expressions + txn = ( + params5 := itxn.InnerTransaction( ## E: inner transactions cannot be used in assignment expressions + type=TransactionType.Payment + ) + ).submit() return True def clear_state_program(self) -> bool: return True @subroutine - def cant_pass_inner_txn_params(self, txn: itxn.InnerTransaction) -> None: ## E: inner transactions cannot be used as a subroutine argument or return value + def cant_pass_inner_txn_params( + self, + txn: itxn.InnerTransaction, ## E: inner transactions cannot be used as a subroutine argument or return value + ) -> None: pass @subroutine ## E: inner transactions cannot be used as a subroutine argument or return value def cant_return_inner_txn_params(self) -> itxn.InnerTransaction: return itxn.InnerTransaction(type=TransactionType.Payment) + ## case: test_inner_txn_param_loop_modified from algopy import Contract, TransactionType, itxn, subroutine class MyContract(Contract): - def approval_program(self) -> bool: ## E: Missing return statement [return] + def approval_program(self) -> bool: ## E: Missing return statement [return] params = itxn.InnerTransaction(type=TransactionType.Payment) while True: txn = params.submit() - params.set(fee=1) ## E: inner transaction fields cannot be modified after submission while in a loop + params.set( ## E: inner transaction fields cannot be modified after submission while in a loop + fee=1 + ) if txn.fee == 1: break def clear_state_program(self) -> bool: return True + ## case: test_abi_call_errors import typing from algopy import arc4, subroutine + class Client(arc4.ARC4Client, typing.Protocol): @arc4.abimethod @@ -119,33 +161,49 @@ class Client(arc4.ARC4Client, typing.Protocol): @subroutine def wrong_arg_type1() -> None: - arc4.abi_call(Client.foo, b"") ## E: can't covert literal to algopy.arc4.UIntN[typing.Literal[64]] + arc4.abi_call( + Client.foo, b"" ## E: can't covert literal to algopy.arc4.UIntN[typing.Literal[64]] + ) + @subroutine def wrong_arg_type2() -> None: - arc4.abi_call(Client.foo, "") ## E: can't covert literal to algopy.arc4.UIntN[typing.Literal[64]] + arc4.abi_call( + Client.foo, "" ## E: can't covert literal to algopy.arc4.UIntN[typing.Literal[64]] + ) + @subroutine def wrong_arg_type3() -> None: - arc4.abi_call("foo(uint64)void", b"") ## E: can't covert literal to algopy.arc4.UIntN[typing.Literal[64]] + arc4.abi_call( + "foo(uint64)void", b"" ## E: can't covert literal to algopy.arc4.UIntN[typing.Literal[64]] + ) + @subroutine def wrong_arg_type4() -> None: arc4.abi_call("foo(uint8)void", 256) ## E: invalid algopy.arc4.UIntN[typing.Literal[8]] value + @subroutine def wrong_arg_type5() -> None: - arc4.abi_call("foo", 2 ** 64 + 1) ## E: invalid algopy.arc4.UIntN[typing.Literal[64]] value + arc4.abi_call("foo", 2**64 + 1) ## E: invalid algopy.arc4.UIntN[typing.Literal[64]] value + @subroutine def method_selector_mismatch() -> None: - arc4.abi_call[arc4.UInt64]("foo(uint8)void", 1) ## E: method selector from args 'foo(uint8)uint64' does not match provided method selector: 'foo(uint8)void' + arc4.abi_call[arc4.UInt64]( + "foo(uint8)void", ## E: method selector from args 'foo(uint8)uint64' does not match provided method selector: 'foo(uint8)void' + 1, + ) + @subroutine def allowed_coercions() -> None: - arc4.abi_call("foo", 256) # value inferred from args + arc4.abi_call("foo", 256) # value inferred from args arc4.abi_call(Client.foo, 1) + ## case: test_stale_itxn_array_read from algopy import ( ARC4Contract, @@ -162,6 +220,7 @@ ALWAYS_APPROVE = ( b"\x81\x01" # pushint 1 ) + class MyContract(ARC4Contract): @arc4.abimethod @@ -185,11 +244,17 @@ class MyContract(ARC4Contract): ).submit() assert create_app_txn2.app_args(0) == b"42", "correct args used 2" - assert create_app_txn.app_args(0) == b"1", "this is an error" ## E: inner transaction array field can not be reliably accessed due to other inner transaction submissions or subroutine calls, move array field access closer to 'create_app_txn' definition + assert ( + create_app_txn.app_args(0) ## E: inner transaction array field can not be reliably accessed due to other inner transaction submissions or subroutine calls, move array field access closer to 'create_app_txn' definition + == b"1" + ), "this is an error" some_sub_that_may_submit_another_inner_txn() ## W: inner transaction 'create_app_txn2' potentially becomes stale here - assert create_app_txn2.app_args(0) == b"42", "this is an error" ## E: inner transaction array field can not be reliably accessed due to other inner transaction submissions or subroutine calls, move array field access closer to 'create_app_txn2' definition + assert ( + create_app_txn2.app_args(0) ## E: inner transaction array field can not be reliably accessed due to other inner transaction submissions or subroutine calls, move array field access closer to 'create_app_txn2' definition + == b"42" + ), "this is an error" @arc4.abimethod def test2(self) -> None: @@ -214,12 +279,17 @@ class MyContract(ARC4Contract): some_sub_that_may_submit_another_inner_txn() ## W: inner transaction 'create_app_txn' potentially becomes stale here - assert create_app_txn.app_args(0) == b"42", "correct args used" ## E: inner transaction array field can not be reliably accessed due to other inner transaction submissions or subroutine calls, move array field access closer to 'create_app_txn' definition + assert ( + create_app_txn.app_args(0) ## E: inner transaction array field can not be reliably accessed due to other inner transaction submissions or subroutine calls, move array field access closer to 'create_app_txn' definition + == b"42" + ), "correct args used" + @subroutine def some_sub_that_may_submit_another_inner_txn() -> None: pass + ## case: test_non_constant_group_index from algopy import ARC4Contract, Bytes, Txn, arc4, itxn @@ -228,6 +298,7 @@ ALWAYS_APPROVE = ( b"\x81\x01" # pushint 1 ) + class MyContract(ARC4Contract): @arc4.abimethod @@ -247,12 +318,19 @@ class MyContract(ARC4Contract): fee=0, ) if Txn.num_app_args: - create_1, create_2 = itxn.submit_txns(txn_1, txn_2) ## N: Potential cause of field access with non-constant group index + create_1, create_2 = itxn.submit_txns( + txn_1, txn_2 ## N: Potential cause of field access with non-constant group index + ) else: - create_2, create_1 = itxn.submit_txns(txn_1, txn_2) ## N: Potential cause of field access with non-constant group index + create_2, create_1 = itxn.submit_txns( + txn_1, txn_2 ## N: Potential cause of field access with non-constant group index + ) assert create_1.num_app_args > 2 - assert create_1.app_args(0) == b"1" ## E: Inner transaction field access with non constant group index, to resolve move field access to same code path where the inner transaction is submitted + assert ( + create_1.app_args(0) ## E: Inner transaction field access with non constant group index, to resolve move field access to same code path where the inner transaction is submitted + == b"1" + ) ## case: test_unassigned_create_itxn @@ -264,14 +342,52 @@ ALWAYS_APPROVE = ( b"\x81\x01" # pushint 1 ) + class FieldTupleContract(ARC4Contract): @arc4.abimethod def test_assign_tuple(self) -> None: - itxn.ApplicationCall( ## W: expression result is ignored \ - ## E: statement has no effect, did you forget to submit? + itxn.ApplicationCall( ## W: expression result is ignored \ + ## E: statement has no effect, did you forget to submit? approval_program=ALWAYS_APPROVE, clear_state_program=ALWAYS_APPROVE, on_completion=OnCompleteAction.DeleteApplication, app_args=(Bytes(b"1a"), Bytes(b"2a")), fee=0, ) + + +## case: test_itxn_app_args + +from algopy import * + + +class AppArgs(ARC4Contract): + @arc4.abimethod + def test_account(self) -> None: + itxn.ApplicationCall( + app_args=( + Account(), ## W: algopy.Account will not be added to foreign array, use .bytes to suppress this warning + ), + ).submit() + + @arc4.abimethod + def test_application(self) -> None: + itxn.ApplicationCall( + app_args=( + Application(), ## W: algopy.Application will not be added to foreign array, use .id to suppress this warning + ), + ).submit() + + @arc4.abimethod + def test_asset(self) -> None: + itxn.ApplicationCall( + app_args=( + Asset(), ## W: algopy.Asset will not be added to foreign array, use .id to suppress this warning + ), + ).submit() + + @arc4.abimethod + def test_literal_int(self) -> None: + itxn.ApplicationCall( + app_args=(42,), ## E: cannot serialize literal of type int + ).submit()