From 2b3dea0dcc183111b97ea611d7d6054f861ea304 Mon Sep 17 00:00:00 2001 From: Tristan Menzel Date: Thu, 18 Jan 2024 03:01:25 +0800 Subject: [PATCH] feat: Check min_avm_version of intrinsic ops against target avm version for compiler --- examples/amm/puya.log | 2 +- examples/auction/puya.log | 2 +- examples/calculator/puya.log | 2 +- examples/global_state/puya.log | 2 +- examples/hello_world/puya.log | 2 +- examples/local_state/puya.log | 2 +- examples/voting/puya.log | 2 +- scripts/generate_avm_ops.py | 3 + src/puya/__main__.py | 1 + src/puya/codegen/builder.py | 8 ++ src/puya/codegen/teal_writer.py | 2 +- src/puya/ir/avm_ops.py | 150 +++++++++++++++++++- src/puya/ir/avm_ops_models.py | 1 + src/puya/options.py | 1 + test_cases/abi_routing/puya.log | 2 +- test_cases/address_constant.puya.log | 2 +- test_cases/application/puya.log | 2 +- test_cases/arc4_types/puya.log | 2 +- test_cases/asset/puya.log | 2 +- test_cases/augmented_assignment/puya.log | 2 +- test_cases/avm_types_in_abi/puya.log | 2 +- test_cases/biguint_binary_ops/puya.log | 2 +- test_cases/boolean_binary_ops/puya.log | 2 +- test_cases/byte_constants.puya.log | 2 +- test_cases/bytes_ops/puya.log | 2 +- test_cases/callsub/puya.log | 2 +- test_cases/chained_assignment/puya.log | 2 +- test_cases/conditional_execution/puya.log | 2 +- test_cases/conditional_expressions/puya.log | 2 +- test_cases/contains/puya.log | 2 +- test_cases/edverify/puya.log | 2 +- test_cases/enumeration/puya.log | 2 +- test_cases/everything/puya.log | 2 +- test_cases/koopman/puya.log | 2 +- test_cases/less_simple/puya.log | 2 +- test_cases/match/puya.log | 2 +- test_cases/module_consts/puya.log | 2 +- test_cases/mylib/puya.log | 2 +- test_cases/nested_loops/puya.log | 2 +- test_cases/non_utf8.puya.log | 2 +- test_cases/scratch_slots/puya.log | 2 +- test_cases/simple/puya.log | 2 +- test_cases/simplish/puya.log | 2 +- test_cases/ssa/puya.log | 2 +- test_cases/ssa2/puya.log | 2 +- test_cases/string_ops/puya.log | 2 +- test_cases/stubs/puya.log | 2 +- test_cases/transaction/puya.log | 2 +- test_cases/tuple_support.puya.log | 2 +- test_cases/unary/puya.log | 2 +- test_cases/undefined_phi_args/puya.log | 2 +- test_cases/unssa/puya.log | 2 +- test_cases/with_reentrancy/puya.log | 2 +- 53 files changed, 210 insertions(+), 48 deletions(-) diff --git a/examples/amm/puya.log b/examples/amm/puya.log index 852d71e665..b03945fa08 100644 --- a/examples/amm/puya.log +++ b/examples/amm/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['amm'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['amm'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/examples/auction/puya.log b/examples/auction/puya.log index e8ffe7d583..bc7438c424 100644 --- a/examples/auction/puya.log +++ b/examples/auction/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['auction'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['auction'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/examples/calculator/puya.log b/examples/calculator/puya.log index 421139f744..d6ea9e221d 100644 --- a/examples/calculator/puya.log +++ b/examples/calculator/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['calculator'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['calculator'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/examples/global_state/puya.log b/examples/global_state/puya.log index 54fc4b0c9b..a96b9944c1 100644 --- a/examples/global_state/puya.log +++ b/examples/global_state/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['global_state'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['global_state'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/examples/hello_world/puya.log b/examples/hello_world/puya.log index caaa176eb6..7803aab4ff 100644 --- a/examples/hello_world/puya.log +++ b/examples/hello_world/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['hello_world'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['hello_world'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/examples/local_state/puya.log b/examples/local_state/puya.log index 0b6e080bdc..83e272ad43 100644 --- a/examples/local_state/puya.log +++ b/examples/local_state/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['local_state'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['local_state'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/examples/voting/puya.log b/examples/voting/puya.log index 3258da0ae4..8b72725b45 100644 --- a/examples/voting/puya.log +++ b/examples/voting/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['voting'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['voting'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/scripts/generate_avm_ops.py b/scripts/generate_avm_ops.py index adc72cbcb2..f332722fe6 100644 --- a/scripts/generate_avm_ops.py +++ b/scripts/generate_avm_ops.py @@ -166,6 +166,7 @@ def generate_op_node( immediate_types=immediate_types, signature=signature, cost=cost, + min_avm_version=op.min_avm_version, ) yield f"{op_name} = {data!r}" if op.doc: @@ -212,6 +213,7 @@ class AVMOp(enum.StrEnum): immediate_types: Sequence[ImmediateKind] _signature: OpSignature | DynamicSignatures cost: int | None + min_avm_version: int def __new__(cls, data: AVMOpData | str) -> "AVMOp": # the weird union type on data && then assert, @@ -225,6 +227,7 @@ def __new__(cls, data: AVMOpData | str) -> "AVMOp": obj.immediate_types = tuple(data.immediate_types) obj._signature = data.signature # noqa: SLF001 obj.cost = data.cost + obj.min_avm_version = data.min_avm_version return obj def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: diff --git a/src/puya/__main__.py b/src/puya/__main__.py index 7b276faa41..6b083ed046 100644 --- a/src/puya/__main__.py +++ b/src/puya/__main__.py @@ -89,6 +89,7 @@ def main() -> None: type=LogLevel.from_string, choices=list(LogLevel), ) + parser.add_argument("--target-avm-version", type=int, choices=[8, 9, 10]) parser.add_argument("paths", type=Path, nargs="+", metavar="PATH") options = PuyaOptions() diff --git a/src/puya/codegen/builder.py b/src/puya/codegen/builder.py index 3c0b3cb560..c25dfe135c 100644 --- a/src/puya/codegen/builder.py +++ b/src/puya/codegen/builder.py @@ -12,6 +12,7 @@ ) from puya.codegen.teal_writer import emit_memory_ir_as_teal from puya.context import CompileContext +from puya.errors import CodeError from puya.ir import models from puya.ir.types_ import AVMBytesEncoding from puya.ir.visitor import IRVisitor @@ -150,6 +151,13 @@ def visit_phi_argument(self, arg: models.PhiArgument) -> None: raise NotImplementedError def visit_intrinsic_op(self, intrinsic: models.Intrinsic) -> None: + if intrinsic.op.min_avm_version > self.context.options.target_avm_version: + raise CodeError( + f"Opcode {intrinsic.op.code} requires a min avm version of " + f"{intrinsic.op.min_avm_version} but the target avm version is" + f" {self.context.options.target_avm_version}", + intrinsic.source_location, + ) for arg in intrinsic.args: arg.accept(self) self._add_op( diff --git a/src/puya/codegen/teal_writer.py b/src/puya/codegen/teal_writer.py index 943c1679b4..f03876dd99 100644 --- a/src/puya/codegen/teal_writer.py +++ b/src/puya/codegen/teal_writer.py @@ -84,7 +84,7 @@ def emit_memory_ir_as_teal( annotater.header(writer) writer.new_line() - writer.append_line("#pragma version 8") + writer.append_line(f"#pragma version {context.options.target_avm_version}") writer.new_line() for subroutine in subroutines: diff --git a/src/puya/ir/avm_ops.py b/src/puya/ir/avm_ops.py index 8489dd8470..af0f34661c 100644 --- a/src/puya/ir/avm_ops.py +++ b/src/puya/ir/avm_ops.py @@ -17,6 +17,7 @@ class AVMOp(enum.StrEnum): immediate_types: Sequence[ImmediateKind] _signature: OpSignature | DynamicSignatures cost: int | None + min_avm_version: int def __new__(cls, data: AVMOpData | str) -> "AVMOp": # the weird union type on data && then assert, @@ -30,6 +31,7 @@ def __new__(cls, data: AVMOpData | str) -> "AVMOp": obj.immediate_types = tuple(data.immediate_types) obj._signature = data.signature # noqa: SLF001 obj.cost = data.cost + obj.min_avm_version = data.min_avm_version return obj def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: @@ -87,6 +89,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=6, ) """ X is field F from account A. Y is 1 if A owns positive algos, else 0 @@ -99,6 +102,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=1, ) """ A plus B. Fail on overflow. @@ -114,6 +118,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=10, + min_avm_version=4, ) """ A plus B. A and B are interpreted as big-endian unsigned integers @@ -126,6 +131,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=2, ) """ A plus B as a 128-bit result. X is the carry-bit, Y is the low-order 64 bits. @@ -136,6 +142,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64, StackType.uint64], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=1, ) """ A is not zero and B is not zero => {0 or 1} @@ -146,6 +153,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[]), immediate_types=(), cost=1, + min_avm_version=2, ) """ delete key A from the global state of the current application @@ -162,6 +170,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.any]), immediate_types=(), cost=1, + min_avm_version=2, ) """ global state of the key A in the current application @@ -176,6 +185,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=2, ) """ X is the global state of application A, key B. Y is 1 if key existed, else 0 @@ -190,6 +200,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.any], returns=[]), immediate_types=(), cost=1, + min_avm_version=2, ) """ write B to key A in the global state of the current application @@ -200,6 +211,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.address_or_index, StackType.bytes], returns=[]), immediate_types=(), cost=1, + min_avm_version=2, ) """ delete key B from account A's local state of the current application @@ -218,6 +230,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=2, ) """ local state of the key B in the current application in account A @@ -234,6 +247,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=2, ) """ X is the local state of application B, key C in account A. Y is 1 if key existed, else 0 @@ -251,6 +265,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=2, ) """ write C to key B in account A's local state of the current application @@ -265,6 +280,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=2, ) """ 1 if account A is opted in to application B, else 0 @@ -309,6 +325,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=5, ) """ X is field F from app A. Y is 1 if A exists, else 0 @@ -322,6 +339,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[StackType.bytes]), immediate_types=(ImmediateKind.uint8,), cost=1, + min_avm_version=1, ) """ Nth LogicSig argument @@ -332,6 +350,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[StackType.bytes]), immediate_types=(), cost=1, + min_avm_version=1, ) """ LogicSig argument 0 @@ -342,6 +361,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[StackType.bytes]), immediate_types=(), cost=1, + min_avm_version=1, ) """ LogicSig argument 1 @@ -352,6 +372,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[StackType.bytes]), immediate_types=(), cost=1, + min_avm_version=1, ) """ LogicSig argument 2 @@ -362,6 +383,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[StackType.bytes]), immediate_types=(), cost=1, + min_avm_version=1, ) """ LogicSig argument 3 @@ -372,6 +394,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[StackType.bytes]), immediate_types=(), cost=1, + min_avm_version=5, ) """ Ath LogicSig argument @@ -382,6 +405,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[]), immediate_types=(), cost=1, + min_avm_version=3, ) """ immediately fail unless A is a non-zero number @@ -404,6 +428,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=2, ) """ X is field F from account A's holding of asset B. Y is 1 if A is opted into B, else 0 @@ -458,6 +483,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=2, ) """ X is field F from asset A. Y is 1 if A exists, else 0 @@ -471,6 +497,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.address_or_index], returns=[StackType.uint64]), immediate_types=(), cost=1, + min_avm_version=2, ) """ balance for account A, in microalgos. The balance is observed after the effects of previous @@ -486,6 +513,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes]), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=7, ) """ decode A which was base64-encoded using _encoding_ E. Fail if A is not base64 encoded with @@ -512,6 +540,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.any], returns=[StackType.uint64]), immediate_types=(), cost=1, + min_avm_version=4, ) """ The highest set bit in A. If A is a byte-array, it is interpreted as a big-endian unsigned @@ -527,6 +556,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=1, ) """ A bitwise-and B @@ -537,6 +567,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bytes]), immediate_types=(), cost=6, + min_avm_version=4, ) """ A bitwise-and B. A and B are zero-left extended to the greater of their lengths @@ -547,6 +578,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[StackType.uint64]), immediate_types=(), cost=1, + min_avm_version=1, ) """ bitwise invert value A @@ -557,6 +589,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes]), immediate_types=(), cost=4, + min_avm_version=4, ) """ A with all bits inverted @@ -569,6 +602,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=1, ) """ A bitwise-or B @@ -579,6 +613,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bytes]), immediate_types=(), cost=6, + min_avm_version=4, ) """ A bitwise-or B. A and B are zero-left extended to the greater of their lengths @@ -591,6 +626,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=1, ) """ A bitwise-xor B @@ -601,6 +637,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bytes]), immediate_types=(), cost=6, + min_avm_version=4, ) """ A bitwise-xor B. A and B are zero-left extended to the greater of their lengths @@ -617,6 +654,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=7, ) """ field F of block A. Fail unless A falls between txn.LastValid-1002 and txn.FirstValid @@ -630,6 +668,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=8, ) """ create a box named A, of length B. Fail if the name A is empty or B exceeds 32,768. Returns 0 @@ -644,6 +683,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.box_name], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=8, ) """ delete box named A if it exists. Return 1 if A existed, 0 otherwise @@ -657,6 +697,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=8, ) """ read C bytes from box A, starting at offset B. Fail if A does not exist, or the byte range is @@ -670,6 +711,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=8, ) """ X is the contents of box A if A exists, else ''. Y is 1 if A exists, else 0. @@ -684,6 +726,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=8, ) """ X is the length of box A if A exists, else 0. Y is 1 if A exists, else 0. @@ -694,6 +737,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.box_name, StackType.bytes], returns=[]), immediate_types=(), cost=1, + min_avm_version=8, ) """ replaces the contents of box A with byte-array B. Fails if A exists and len(B) != len(box A). @@ -709,6 +753,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=8, ) """ write byte-array C into box A, starting at offset B. Fail if A does not exist, or the byte @@ -720,6 +765,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.box_name, StackType.uint64], returns=[]), immediate_types=(), cost=1, + min_avm_version=10, ) """ change the size of box named A to be of length B, adding zero bytes to end or removing bytes @@ -735,6 +781,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=10, ) """ set box A to contain its previous bytes up to index B, followed by D, followed by the original @@ -749,6 +796,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bigint], returns=[StackType.bigint]), immediate_types=(), cost=40, + min_avm_version=6, ) """ The largest integer I such that I^2 <= A. A and I are interpreted as big-endian unsigned @@ -760,6 +808,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.uint64]), immediate_types=(), cost=1, + min_avm_version=1, ) """ converts big-endian byte array A to uint64. Fails if len(A) > 8. Padded by leading 0s if len(A) @@ -773,6 +822,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[StackType.bytes]), immediate_types=(), cost=1, + min_avm_version=4, ) """ zero filled byte-array of length A @@ -783,6 +833,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bytes]), immediate_types=(), cost=1, + min_avm_version=2, ) """ join A and B @@ -797,6 +848,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=1, ) """ A divided by B (truncated division). Fail if B == 0. @@ -811,6 +863,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=20, + min_avm_version=4, ) """ A divided by B (truncated division). A and B are interpreted as big-endian unsigned integers. @@ -825,6 +878,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=20, + min_avm_version=4, ) """ W,X = (A,B / C,D); Y,Z = (A,B modulo C,D) @@ -840,6 +894,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=6, ) """ A,B / C. Fail if C == 0 or if result overflows. @@ -853,6 +908,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bytes]), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=10, ) """ for curve points A and B, return the curve point A + B @@ -886,6 +942,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes]), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=10, ) """ maps field element A to group G @@ -904,6 +961,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bytes]), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=10, ) """ for curve points A and scalars B, return curve point B0A0 + B1A1 + B2A2 + ... + BnAn @@ -921,6 +979,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bool]), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=10, ) """ 1 if the product of the pairing of each point in A with its respective point in B is equal to @@ -939,6 +998,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bytes]), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=10, ) """ for curve point A and scalar B, return the curve point BA, the point A multiplied by the scalar @@ -953,6 +1013,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bool]), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=10, ) """ 1 if A is in the main prime-order subgroup of G (including the point at infinity) else 0. @@ -964,6 +1025,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes, StackType.bytes]), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=5, ) """ decompress pubkey A into components X, Y @@ -980,6 +1042,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=2000, + min_avm_version=5, ) """ for (data A, recovery id B, signature C, D) recover a public key @@ -1003,6 +1066,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=5, ) """ for (data A, signature B, C and pubkey D, E) verify the signature of the data against the @@ -1022,6 +1086,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1900, + min_avm_version=1, ) """ for (data A, signature B, pubkey C) verify the signature of ("ProgData" || program_hash || @@ -1040,6 +1105,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1900, + min_avm_version=7, ) """ for (data A, signature B, pubkey C) verify the signature of the data against the pubkey => {0 @@ -1051,6 +1117,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.any, StackType.any], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=1, ) """ A is equal to B => {0 or 1} @@ -1061,6 +1128,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bigint, StackType.bigint], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=4, ) """ 1 if A is equal to B, else 0. A and B are interpreted as big-endian unsigned integers @@ -1073,6 +1141,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=4, ) """ A raised to the Bth power. Fail if A == B == 0 and on overflow @@ -1085,6 +1154,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=10, + min_avm_version=4, ) """ A raised to the Bth power as a 128-bit result in two uint64s. X is the high 64 bits, Y is the @@ -1096,6 +1166,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes]), immediate_types=(ImmediateKind.uint8, ImmediateKind.uint8), cost=1, + min_avm_version=5, ) """ A range of bytes from A starting at S up to but not including S+L. If L is 0, then extract to @@ -1109,6 +1180,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=5, ) """ A range of bytes from A starting at B up to but not including B+C. If B+C is larger than the @@ -1124,6 +1196,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=5, ) """ A uint16 formed from a range of big-endian bytes from A starting at B up to but not including @@ -1137,6 +1210,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=5, ) """ A uint32 formed from a range of big-endian bytes from A starting at B up to but not including @@ -1150,6 +1224,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=5, ) """ A uint64 formed from a range of big-endian bytes from A starting at B up to but not including @@ -1161,6 +1236,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[StackType.uint64]), immediate_types=(ImmediateKind.uint8,), cost=1, + min_avm_version=4, ) """ ID of the asset or application created in the Tth transaction of the current group @@ -1174,6 +1250,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[StackType.uint64]), immediate_types=(), cost=1, + min_avm_version=4, ) """ ID of the asset or application created in the Ath transaction of the current group @@ -1187,6 +1264,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.any, StackType.uint64], returns=[StackType.uint64]), immediate_types=(), cost=1, + min_avm_version=3, ) """ Bth bit of (byte-array or integer) A. If B is greater than or equal to the bit length of the @@ -1202,6 +1280,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=3, ) """ Bth byte of A, as an integer. If B is greater than or equal to the array length, the program @@ -1285,6 +1364,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.uint8, ImmediateKind.arg_enum), cost=1, + min_avm_version=6, ) """ field F of the Tth transaction in the last inner group submitted @@ -1306,6 +1386,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.uint8, ImmediateKind.arg_enum, ImmediateKind.uint8), cost=1, + min_avm_version=6, ) """ Ith value of the array field F from the Tth transaction in the last inner group submitted @@ -1331,6 +1412,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.uint8, ImmediateKind.arg_enum), cost=1, + min_avm_version=6, ) """ Ath value of the array field F from the Tth transaction in the last inner group submitted @@ -1341,6 +1423,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[StackType.any]), immediate_types=(ImmediateKind.uint8, ImmediateKind.uint8), cost=1, + min_avm_version=4, ) """ Ith scratch space value of the Tth transaction in the current group @@ -1353,6 +1436,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[StackType.any]), immediate_types=(ImmediateKind.uint8,), cost=1, + min_avm_version=4, ) """ Ith scratch space value of the Ath transaction in the current group @@ -1365,6 +1449,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64, StackType.uint64], returns=[StackType.any]), immediate_types=(), cost=1, + min_avm_version=6, ) """ Bth scratch space value of the Ath transaction in the current group @@ -1397,6 +1482,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=1, ) """ global field F @@ -1407,6 +1493,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64, StackType.uint64], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=1, ) """ A greater than B => {0 or 1} @@ -1417,6 +1504,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bigint, StackType.bigint], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=4, ) """ 1 if A is greater than B, else 0. A and B are interpreted as big-endian unsigned integers @@ -1427,6 +1515,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64, StackType.uint64], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=1, ) """ A greater than or equal to B => {0 or 1} @@ -1437,6 +1526,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bigint, StackType.bigint], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=4, ) """ 1 if A is greater than or equal to B, else 0. A and B are interpreted as big-endian unsigned @@ -1520,6 +1610,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.uint8, ImmediateKind.arg_enum), cost=1, + min_avm_version=1, ) """ field F of the Tth transaction in the current group @@ -1544,6 +1635,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.uint8, ImmediateKind.arg_enum, ImmediateKind.uint8), cost=1, + min_avm_version=2, ) """ Ith value of the array field F from the Tth transaction in the current group @@ -1571,6 +1663,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.uint8, ImmediateKind.arg_enum), cost=1, + min_avm_version=5, ) """ Ath value of the array field F from the Tth transaction in the current group @@ -1699,6 +1792,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=3, ) """ field F of the Ath transaction in the current group @@ -1728,6 +1822,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum, ImmediateKind.uint8), cost=1, + min_avm_version=3, ) """ Ith value of the array field F from the Ath transaction in the current group @@ -1765,6 +1860,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=5, ) """ Bth value of the array field F from the Ath transaction in the current group @@ -1775,6 +1871,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[StackType.bytes]), immediate_types=(), cost=1, + min_avm_version=1, ) """ converts uint64 A to big-endian byte array, always of length 8 @@ -1857,6 +1954,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=5, ) """ field F of the last inner transaction @@ -1867,6 +1965,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[]), immediate_types=(), cost=1, + min_avm_version=5, ) """ begin preparation of a new inner transaction in a new transaction group @@ -1937,6 +2036,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=5, ) """ set field F of the current inner transaction to A @@ -1949,7 +2049,11 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: """ itxn_next = AVMOpData( - op_code="itxn_next", signature=OpSignature(args=[], returns=[]), immediate_types=(), cost=1 + op_code="itxn_next", + signature=OpSignature(args=[], returns=[]), + immediate_types=(), + cost=1, + min_avm_version=6, ) """ begin preparation of a new inner transaction in the same transaction group @@ -1962,6 +2066,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[]), immediate_types=(), cost=1, + min_avm_version=5, ) """ execute the current inner transaction group. Fail if executing this group would exceed the @@ -1987,6 +2092,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum, ImmediateKind.uint8), cost=1, + min_avm_version=5, ) """ Ith value of the array field F of the last inner transaction @@ -2012,6 +2118,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=6, ) """ Ath value of the array field F of the last inner transaction @@ -2035,6 +2142,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=None, + min_avm_version=7, ) """ key B's value, of type R, from a [valid](jsonspec.md) utf-8 encoded json object A @@ -2053,6 +2161,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes_32]), immediate_types=(), cost=130, + min_avm_version=1, ) """ Keccak256 hash of value A, yields [32]byte @@ -2063,6 +2172,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.uint64]), immediate_types=(), cost=1, + min_avm_version=1, ) """ yields length of byte value A @@ -2073,6 +2183,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[], returns=[StackType.any]), immediate_types=(ImmediateKind.uint8,), cost=1, + min_avm_version=1, ) """ Ith scratch space value. All scratch spaces are 0 at program start. @@ -2083,6 +2194,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[StackType.any]), immediate_types=(), cost=1, + min_avm_version=5, ) """ Ath scratch space value. All scratch spaces are 0 at program start. @@ -2093,6 +2205,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[]), immediate_types=(), cost=1, + min_avm_version=5, ) """ write A to log state of the current application @@ -2106,6 +2219,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64, StackType.uint64], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=1, ) """ A less than B => {0 or 1} @@ -2116,6 +2230,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bigint, StackType.bigint], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=4, ) """ 1 if A is less than B, else 0. A and B are interpreted as big-endian unsigned integers @@ -2126,6 +2241,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64, StackType.uint64], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=1, ) """ A less than or equal to B => {0 or 1} @@ -2136,6 +2252,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bigint, StackType.bigint], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=4, ) """ 1 if A is less than or equal to B, else 0. A and B are interpreted as big-endian unsigned @@ -2147,6 +2264,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.address_or_index], returns=[StackType.uint64]), immediate_types=(), cost=1, + min_avm_version=3, ) """ minimum required balance for account A, in microalgos. Required balance is affected by ASA, @@ -2166,6 +2284,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=1, ) """ A modulo B. Fail if B == 0. @@ -2176,6 +2295,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bytes]), immediate_types=(), cost=20, + min_avm_version=4, ) """ A modulo B. A and B are interpreted as big-endian unsigned integers. Fail if B is zero. @@ -2188,6 +2308,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=1, ) """ A times B. Fail on overflow. @@ -2203,6 +2324,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=20, + min_avm_version=4, ) """ A times B. A and B are interpreted as big-endian unsigned integers. @@ -2215,6 +2337,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=1, ) """ A times B as a 128-bit result in two uint64s. X is the high 64 bits, Y is the low @@ -2225,6 +2348,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.any, StackType.any], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=1, ) """ A is not equal to B => {0 or 1} @@ -2235,6 +2359,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bigint, StackType.bigint], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=4, ) """ 0 if A is equal to B, else 1. A and B are interpreted as big-endian unsigned integers @@ -2245,6 +2370,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[StackType.uint64]), immediate_types=(), cost=1, + min_avm_version=1, ) """ A == 0 yields 1; else 0 @@ -2255,6 +2381,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64, StackType.uint64], returns=[StackType.bool]), immediate_types=(), cost=1, + min_avm_version=1, ) """ A is not zero or B is not zero => {0 or 1} @@ -2265,6 +2392,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes, StackType.bytes], returns=[StackType.bytes]), immediate_types=(ImmediateKind.uint8,), cost=1, + min_avm_version=7, ) """ Copy of A with the bytes starting at S replaced by the bytes of B. Fails if S+len(B) exceeds @@ -2280,6 +2408,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=7, ) """ Copy of A with the bytes starting at B replaced by the bytes of C. Fails if B+len(C) exceeds @@ -2295,6 +2424,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=3, ) """ selects one of two values based on top-of-stack: B if C != 0, else A @@ -2307,6 +2437,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=3, ) """ Copy of (byte-array or integer) A, with the Bth bit set to (0 or 1) C. If B is greater than or @@ -2325,6 +2456,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=3, ) """ Copy of A with the Bth byte set to small integer (between 0..255) C. If B is greater than or @@ -2336,6 +2468,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes_32]), immediate_types=(), cost=35, + min_avm_version=1, ) """ SHA256 hash of value A, yields [32]byte @@ -2346,6 +2479,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes]), immediate_types=(), cost=130, + min_avm_version=7, ) """ SHA3_256 hash of value A, yields [32]byte @@ -2356,6 +2490,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes_32]), immediate_types=(), cost=45, + min_avm_version=1, ) """ SHA512_256 hash of value A, yields [32]byte @@ -2368,6 +2503,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=4, ) """ A times 2^B, modulo 2^64 @@ -2380,6 +2516,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=4, ) """ A divided by 2^B @@ -2390,6 +2527,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64], returns=[StackType.uint64]), immediate_types=(), cost=4, + min_avm_version=4, ) """ The largest integer I such that I^2 <= A @@ -2400,6 +2538,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.any], returns=[]), immediate_types=(ImmediateKind.uint8,), cost=1, + min_avm_version=1, ) """ store A to the Ith scratch space @@ -2410,6 +2549,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.uint64, StackType.any], returns=[]), immediate_types=(), cost=1, + min_avm_version=5, ) """ store B to the Ath scratch space @@ -2422,6 +2562,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=1, ) """ A minus B. Fail if B > A. @@ -2434,6 +2575,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=10, + min_avm_version=4, ) """ A minus B. A and B are interpreted as big-endian unsigned integers. Fail on underflow. @@ -2444,6 +2586,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: signature=OpSignature(args=[StackType.bytes], returns=[StackType.bytes]), immediate_types=(ImmediateKind.uint8, ImmediateKind.uint8), cost=1, + min_avm_version=2, ) """ A range of bytes from A starting at S up to but not including E. If E < S, or either is larger @@ -2457,6 +2600,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(), cost=1, + min_avm_version=2, ) """ A range of bytes from A starting at B up to but not including C. If C < B, or either is larger @@ -2540,6 +2684,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=1, ) """ field F of current transaction @@ -2561,6 +2706,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum, ImmediateKind.uint8), cost=1, + min_avm_version=2, ) """ Ith value of the array field F of the current transaction @@ -2588,6 +2734,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=1, + min_avm_version=5, ) """ Ath value of the array field F of the current transaction @@ -2601,6 +2748,7 @@ def get_signature(self, immediates: Sequence[str | int]) -> OpSignature: ), immediate_types=(ImmediateKind.arg_enum,), cost=5700, + min_avm_version=7, ) """ Verify the proof B of message A against pubkey C. Returns vrf output and verification flag. diff --git a/src/puya/ir/avm_ops_models.py b/src/puya/ir/avm_ops_models.py index 65279a97d6..9d0622aeac 100644 --- a/src/puya/ir/avm_ops_models.py +++ b/src/puya/ir/avm_ops_models.py @@ -47,3 +47,4 @@ class AVMOpData: signature: OpSignature | DynamicSignatures immediate_types: Sequence[ImmediateKind] = attrs.field(default=()) cost: int | None + min_avm_version: int diff --git a/src/puya/options.py b/src/puya/options.py index 977c1b34f7..d217d57fc8 100644 --- a/src/puya/options.py +++ b/src/puya/options.py @@ -22,3 +22,4 @@ class PuyaOptions: debug_level: int = 0 optimization_level: int = 0 log_level: LogLevel = LogLevel.info + target_avm_version: int = 8 diff --git a/test_cases/abi_routing/puya.log b/test_cases/abi_routing/puya.log index aa178b4d16..e5fc6e20d1 100644 --- a/test_cases/abi_routing/puya.log +++ b/test_cases/abi_routing/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['abi_routing'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['abi_routing'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/address_constant.puya.log b/test_cases/address_constant.puya.log index 275c1e4eb0..bccd313170 100644 --- a/test_cases/address_constant.puya.log +++ b/test_cases/address_constant.puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['address_constant.py'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['address_constant.py'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/application/puya.log b/test_cases/application/puya.log index 8c2eb61888..33d3173777 100644 --- a/test_cases/application/puya.log +++ b/test_cases/application/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['application'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['application'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/arc4_types/puya.log b/test_cases/arc4_types/puya.log index 8616f9ff03..462d96c3e6 100644 --- a/test_cases/arc4_types/puya.log +++ b/test_cases/arc4_types/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['arc4_types'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['arc4_types'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) arc4_types/array.py:71:9 warning: expression result is ignored debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 diff --git a/test_cases/asset/puya.log b/test_cases/asset/puya.log index 178625a970..0bd1bee6cb 100644 --- a/test_cases/asset/puya.log +++ b/test_cases/asset/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['asset'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['asset'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/augmented_assignment/puya.log b/test_cases/augmented_assignment/puya.log index cfaa65453e..7406d78da7 100644 --- a/test_cases/augmented_assignment/puya.log +++ b/test_cases/augmented_assignment/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['augmented_assignment'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['augmented_assignment'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/avm_types_in_abi/puya.log b/test_cases/avm_types_in_abi/puya.log index 75fb9623b7..682249b928 100644 --- a/test_cases/avm_types_in_abi/puya.log +++ b/test_cases/avm_types_in_abi/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['avm_types_in_abi'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['avm_types_in_abi'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/biguint_binary_ops/puya.log b/test_cases/biguint_binary_ops/puya.log index 804029b249..a7b67a3c4d 100644 --- a/test_cases/biguint_binary_ops/puya.log +++ b/test_cases/biguint_binary_ops/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['biguint_binary_ops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['biguint_binary_ops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/boolean_binary_ops/puya.log b/test_cases/boolean_binary_ops/puya.log index 50e8bea96a..8d2473a9a4 100644 --- a/test_cases/boolean_binary_ops/puya.log +++ b/test_cases/boolean_binary_ops/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['boolean_binary_ops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['boolean_binary_ops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/byte_constants.puya.log b/test_cases/byte_constants.puya.log index 7a008d4588..77f3acce46 100644 --- a/test_cases/byte_constants.puya.log +++ b/test_cases/byte_constants.puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['byte_constants.py'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['byte_constants.py'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/bytes_ops/puya.log b/test_cases/bytes_ops/puya.log index 82fa3dd692..5366d88324 100644 --- a/test_cases/bytes_ops/puya.log +++ b/test_cases/bytes_ops/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['bytes_ops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['bytes_ops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/callsub/puya.log b/test_cases/callsub/puya.log index c35f12847c..bb4e97c54a 100644 --- a/test_cases/callsub/puya.log +++ b/test_cases/callsub/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['callsub'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['callsub'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/chained_assignment/puya.log b/test_cases/chained_assignment/puya.log index 674eee22f2..1e3b13b82a 100644 --- a/test_cases/chained_assignment/puya.log +++ b/test_cases/chained_assignment/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['chained_assignment'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['chained_assignment'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/conditional_execution/puya.log b/test_cases/conditional_execution/puya.log index e3b8a190b7..1ef986d012 100644 --- a/test_cases/conditional_execution/puya.log +++ b/test_cases/conditional_execution/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['conditional_execution'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['conditional_execution'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) conditional_execution/contract.py:11:9 warning: expression result is ignored conditional_execution/contract.py:17:9 warning: expression result is ignored conditional_execution/contract.py:23:9 warning: expression result is ignored diff --git a/test_cases/conditional_expressions/puya.log b/test_cases/conditional_expressions/puya.log index bc11978172..bb4c5cd556 100644 --- a/test_cases/conditional_expressions/puya.log +++ b/test_cases/conditional_expressions/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['conditional_expressions'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['conditional_expressions'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/contains/puya.log b/test_cases/contains/puya.log index e596372226..676c370e51 100644 --- a/test_cases/contains/puya.log +++ b/test_cases/contains/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['contains'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['contains'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/edverify/puya.log b/test_cases/edverify/puya.log index 0c638f2c0c..ec4fc43d4a 100644 --- a/test_cases/edverify/puya.log +++ b/test_cases/edverify/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['edverify'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['edverify'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/enumeration/puya.log b/test_cases/enumeration/puya.log index 60bfde8c87..e04617f95d 100644 --- a/test_cases/enumeration/puya.log +++ b/test_cases/enumeration/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['enumeration'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['enumeration'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/everything/puya.log b/test_cases/everything/puya.log index c7288f32e6..7d19d9325b 100644 --- a/test_cases/everything/puya.log +++ b/test_cases/everything/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['everything'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['everything'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/koopman/puya.log b/test_cases/koopman/puya.log index 31825824a6..1e7562029e 100644 --- a/test_cases/koopman/puya.log +++ b/test_cases/koopman/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['koopman'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['koopman'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/less_simple/puya.log b/test_cases/less_simple/puya.log index c8c552825f..ff14ce5c43 100644 --- a/test_cases/less_simple/puya.log +++ b/test_cases/less_simple/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['less_simple'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['less_simple'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/match/puya.log b/test_cases/match/puya.log index 81b2e6b0f0..9aa32be157 100644 --- a/test_cases/match/puya.log +++ b/test_cases/match/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['match'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['match'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/module_consts/puya.log b/test_cases/module_consts/puya.log index e3fa45a953..3cd3be0163 100644 --- a/test_cases/module_consts/puya.log +++ b/test_cases/module_consts/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['module_consts'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['module_consts'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/mylib/puya.log b/test_cases/mylib/puya.log index e151e20a2c..92d57d1394 100644 --- a/test_cases/mylib/puya.log +++ b/test_cases/mylib/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['mylib'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['mylib'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/nested_loops/puya.log b/test_cases/nested_loops/puya.log index be01c304ec..9f6a52a512 100644 --- a/test_cases/nested_loops/puya.log +++ b/test_cases/nested_loops/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['nested_loops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['nested_loops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/non_utf8.puya.log b/test_cases/non_utf8.puya.log index fe0bceb5a9..dbac0c9b64 100644 --- a/test_cases/non_utf8.puya.log +++ b/test_cases/non_utf8.puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['non_utf8.py'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['non_utf8.py'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/scratch_slots/puya.log b/test_cases/scratch_slots/puya.log index 7beb2d1773..04afcd9cc9 100644 --- a/test_cases/scratch_slots/puya.log +++ b/test_cases/scratch_slots/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['scratch_slots'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['scratch_slots'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/simple/puya.log b/test_cases/simple/puya.log index 58e0efdd05..064132c70c 100644 --- a/test_cases/simple/puya.log +++ b/test_cases/simple/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['simple'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['simple'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/simplish/puya.log b/test_cases/simplish/puya.log index 9f4e19c9b8..3f1c3849f8 100644 --- a/test_cases/simplish/puya.log +++ b/test_cases/simplish/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['simplish'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['simplish'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/ssa/puya.log b/test_cases/ssa/puya.log index 0b10b9cc5a..c0c6a297ac 100644 --- a/test_cases/ssa/puya.log +++ b/test_cases/ssa/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['ssa'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['ssa'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/ssa2/puya.log b/test_cases/ssa2/puya.log index 4d12de59cf..e7d23c1811 100644 --- a/test_cases/ssa2/puya.log +++ b/test_cases/ssa2/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['ssa2'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['ssa2'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/string_ops/puya.log b/test_cases/string_ops/puya.log index 315fb5a6ad..a0dbaaae6d 100644 --- a/test_cases/string_ops/puya.log +++ b/test_cases/string_ops/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['string_ops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['string_ops'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/stubs/puya.log b/test_cases/stubs/puya.log index 575e766e66..6d31f1f3da 100644 --- a/test_cases/stubs/puya.log +++ b/test_cases/stubs/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['stubs'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['stubs'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/transaction/puya.log b/test_cases/transaction/puya.log index c9511afedf..c450fe0b9c 100644 --- a/test_cases/transaction/puya.log +++ b/test_cases/transaction/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['transaction'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['transaction'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/tuple_support.puya.log b/test_cases/tuple_support.puya.log index 17aea94a2d..6839843ab5 100644 --- a/test_cases/tuple_support.puya.log +++ b/test_cases/tuple_support.puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['tuple_support.py'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['tuple_support.py'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/unary/puya.log b/test_cases/unary/puya.log index 168006c9a6..23dc4f398b 100644 --- a/test_cases/unary/puya.log +++ b/test_cases/unary/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['unary'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['unary'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/undefined_phi_args/puya.log b/test_cases/undefined_phi_args/puya.log index df5d332ad3..d8b98d2cc7 100644 --- a/test_cases/undefined_phi_args/puya.log +++ b/test_cases/undefined_phi_args/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['undefined_phi_args'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['undefined_phi_args'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) debug: Sealing block@0: // L13 debug: Terminated block@0: // L13 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L20 diff --git a/test_cases/unssa/puya.log b/test_cases/unssa/puya.log index e9169eba8e..0a7fa1cd0f 100644 --- a/test_cases/unssa/puya.log +++ b/test_cases/unssa/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['unssa'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['unssa'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) unssa/contract.py:6:9 warning: expression result is ignored unssa/contract.py:13:9 warning: expression result is ignored unssa/contract.py:15:9 warning: expression result is ignored diff --git a/test_cases/with_reentrancy/puya.log b/test_cases/with_reentrancy/puya.log index 955183ffd5..ebd119e5d0 100644 --- a/test_cases/with_reentrancy/puya.log +++ b/test_cases/with_reentrancy/puya.log @@ -1,4 +1,4 @@ -debug: PuyaOptions(paths=['with_reentrancy'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=) +debug: PuyaOptions(paths=['with_reentrancy'], output_teal=True, output_arc32=True, output_awst=False, output_ssa_ir=True, output_optimization_ir=True, output_cssa_ir=True, output_post_ssa_ir=True, output_parallel_copies_ir=True, output_final_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=8) with_reentrancy/contract.py:9:9 warning: expression result is ignored debug: Sealing block@0: // L13 debug: Terminated block@0: // L13