From 5087dd1aec78a832477418b44030534586120495 Mon Sep 17 00:00:00 2001 From: Tristan Menzel Date: Mon, 24 Feb 2025 13:52:42 -0800 Subject: [PATCH] fix: Allow template vars as module constants --- .../ast-visitors/source-file-visitor.ts | 11 +- src/awst_build/constant-store.ts | 6 +- src/awst_build/context/awst-build-context.ts | 6 +- .../o1/template-var/MyContract.approval.teal | 61 +++-- .../out/o1/template-var/MyContract.arc32.json | 15 +- .../out/o1/template-var/MyContract.arc56.json | 39 +++- .../MyContract.approval.0.ssa.ir | 65 ++++-- .../MyContract.approval.1.ssa.array.ir | 53 +++-- .../MyContract.approval.2.ssa.slot.ir | 53 +++-- .../o2/template-var/MyContract.approval.teal | 61 +++-- .../out/o2/template-var/MyContract.arc32.json | 15 +- .../out/o2/template-var/MyContract.arc56.json | 39 +++- .../MyContract.approval.0.ssa.ir | 65 ++++-- .../MyContract.approval.1.ssa.array.ir | 53 +++-- .../MyContract.approval.2.ssa.slot.ir | 53 +++-- .../template-var/MyContract.approval.teal | 88 ++++--- .../template-var/MyContract.arc32.json | 15 +- .../template-var/MyContract.arc56.json | 35 ++- .../MyContract.approval.0.ssa.ir | 65 ++++-- .../MyContract.approval.1.ssa.array.ir | 80 ++++--- .../MyContract.approval.2.ssa.slot.ir | 80 ++++--- .../template-var/template-var.awst | 5 + .../template-var/template-var.awst.json | 214 ++++++++++++++---- tests/approvals/template-var.algo.ts | 7 + tests/onchain/template-vars.spec.ts | 26 ++- 25 files changed, 832 insertions(+), 378 deletions(-) diff --git a/src/awst_build/ast-visitors/source-file-visitor.ts b/src/awst_build/ast-visitors/source-file-visitor.ts index aee53f7d5..7b25a036b 100644 --- a/src/awst_build/ast-visitors/source-file-visitor.ts +++ b/src/awst_build/ast-visitors/source-file-visitor.ts @@ -1,12 +1,14 @@ import ts from 'typescript' +import { isConstant } from '../../awst' import type * as awst from '../../awst/nodes' +import { TemplateVar } from '../../awst/nodes' import { CodeError } from '../../errors' import { logger, patchErrorLocation } from '../../logger' -import { expandMaybeArray, invariant } from '../../util' +import { codeInvariant, expandMaybeArray, invariant } from '../../util' import type { ModuleStatements } from '../../visitor/syntax-names' import type { Visitor } from '../../visitor/visitor' import { accept } from '../../visitor/visitor' -import { requireConstantOfType } from '../eb/util' +import { requireExpressionOfType } from '../eb/util' import { ContractClassPType, LibClassType, LogicSigPType } from '../ptypes' import { ARC4StructType } from '../ptypes/arc4-types' import { BaseVisitor } from './base-visitor' @@ -94,7 +96,10 @@ export class SourceFileVisitor extends BaseVisitor implements Visitor() + #constants = new Map() #typeChecker: ts.TypeChecker constructor(program: ts.Program) { this.#typeChecker = program.getTypeChecker() @@ -21,7 +21,7 @@ export class ConstantStore { return this.#constants.get(symbol) } - addConstant(identifier: ts.Identifier, value: Constant, constantLocation: SourceLocation) { + addConstant(identifier: ts.Identifier, value: Constant | TemplateVar, constantLocation: SourceLocation) { const symbol = this.#typeChecker.resolveName(identifier.text, identifier, ts.SymbolFlags.All, false) invariant(symbol, 'Constant identifier must resolve to a symbol') diff --git a/src/awst_build/context/awst-build-context.ts b/src/awst_build/context/awst-build-context.ts index 922531de6..a4fa57bef 100644 --- a/src/awst_build/context/awst-build-context.ts +++ b/src/awst_build/context/awst-build-context.ts @@ -3,7 +3,7 @@ import ts from 'typescript' import type { awst } from '../../awst' import type { ContractReference, LogicSigReference } from '../../awst/models' import { nodeFactory } from '../../awst/node-factory' -import type { AppStorageDefinition, ARC4MethodConfig, Constant } from '../../awst/nodes' +import type { AppStorageDefinition, ARC4MethodConfig } from '../../awst/nodes' import { SourceLocation } from '../../awst/source-location' import { logger } from '../../logger' import { invariant } from '../../util' @@ -70,7 +70,7 @@ export abstract class AwstBuildContext { * @param identifier The identifier of the constant declaration in this source file * @param value The compile time constant value */ - abstract addConstant(identifier: ts.Identifier, value: awst.Constant): void + abstract addConstant(identifier: ts.Identifier, value: awst.Constant | awst.TemplateVar): void /** * Retrieve the evaluation context @@ -194,7 +194,7 @@ class AwstBuildContextImpl extends AwstBuildContext { ) } - addConstant(identifier: ts.Identifier, value: Constant) { + addConstant(identifier: ts.Identifier, value: awst.Constant | awst.TemplateVar) { this.constants.addConstant(identifier, value, this.getSourceLocation(identifier)) } diff --git a/tests/approvals/out/o1/template-var/MyContract.approval.teal b/tests/approvals/out/o1/template-var/MyContract.approval.teal index 669215ea0..38ae5055a 100644 --- a/tests/approvals/out/o1/template-var/MyContract.approval.teal +++ b/tests/approvals/out/o1/template-var/MyContract.approval.teal @@ -4,33 +4,52 @@ // @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: main: intcblock 1 TMPL_AN_INT - bytecblock 0x151f7c75 TMPL_SOME_BYTES TMPL_A_STRING - // tests/approvals/template-var.algo.ts:4 + bytecblock 0x151f7c75 TMPL_AN_ADDRESS TMPL_SOME_BYTES TMPL_A_STRING + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { txn NumAppArgs - bz main_bare_routing@8 - pushbytess 0xbe93200b 0xc1a13295 0xaf43db36 // method "getInt()uint64", method "getString()string", method "getBytes()byte[]" + bz main_bare_routing@9 + pushbytess 0xbe93200b 0xc1a13295 0xaf43db36 0x0559cac1 // method "getInt()uint64", method "getString()string", method "getBytes()byte[]", method "getAddress()address" txna ApplicationArgs 0 - match main_getInt_route@3 main_getString_route@4 main_getBytes_route@5 + match main_getInt_route@3 main_getString_route@4 main_getBytes_route@5 main_getAddress_route@6 -main_after_if_else@12: - // tests/approvals/template-var.algo.ts:4 +main_after_if_else@13: + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { pushint 0 // 0 return +main_getAddress_route@6: + // tests/approvals/template-var.algo.ts:20 + // getAddress() { + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + bytec_0 // 0x151f7c75 + // tests/approvals/template-var.algo.ts:5 + // const specialAddress = TemplateVar
('AN_ADDRESS') + bytec_1 // TMPL_AN_ADDRESS + // tests/approvals/template-var.algo.ts:20 + // getAddress() { + concat + log + intc_0 // 1 + return + main_getBytes_route@5: - // tests/approvals/template-var.algo.ts:13 + // tests/approvals/template-var.algo.ts:16 // getBytes() { txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // tests/approvals/template-var.algo.ts:14 + // tests/approvals/template-var.algo.ts:17 // return TemplateVar('SOME_BYTES') - bytec_1 // TMPL_SOME_BYTES - // tests/approvals/template-var.algo.ts:13 + bytec_2 // TMPL_SOME_BYTES + // tests/approvals/template-var.algo.ts:16 // getBytes() { dup len @@ -46,17 +65,17 @@ main_getBytes_route@5: return main_getString_route@4: - // tests/approvals/template-var.algo.ts:9 + // tests/approvals/template-var.algo.ts:12 // getString() { txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // tests/approvals/template-var.algo.ts:10 + // tests/approvals/template-var.algo.ts:13 // return TemplateVar('A_STRING') - bytec_2 // TMPL_A_STRING - // tests/approvals/template-var.algo.ts:9 + bytec_3 // TMPL_A_STRING + // tests/approvals/template-var.algo.ts:12 // getString() { dup len @@ -72,17 +91,17 @@ main_getString_route@4: return main_getInt_route@3: - // tests/approvals/template-var.algo.ts:5 + // tests/approvals/template-var.algo.ts:8 // getInt() { txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // tests/approvals/template-var.algo.ts:6 + // tests/approvals/template-var.algo.ts:9 // return TemplateVar('AN_INT') intc_1 // TMPL_AN_INT - // tests/approvals/template-var.algo.ts:5 + // tests/approvals/template-var.algo.ts:8 // getInt() { itob bytec_0 // 0x151f7c75 @@ -92,11 +111,11 @@ main_getInt_route@3: intc_0 // 1 return -main_bare_routing@8: - // tests/approvals/template-var.algo.ts:4 +main_bare_routing@9: + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { txn OnCompletion - bnz main_after_if_else@12 + bnz main_after_if_else@13 txn ApplicationID ! assert // can only call when creating diff --git a/tests/approvals/out/o1/template-var/MyContract.arc32.json b/tests/approvals/out/o1/template-var/MyContract.arc32.json index 4c2abc0e3..03e9f6ed2 100644 --- a/tests/approvals/out/o1/template-var/MyContract.arc32.json +++ b/tests/approvals/out/o1/template-var/MyContract.arc32.json @@ -14,10 +14,15 @@ "call_config": { "no_op": "CALL" } + }, + "getAddress()address": { + "call_config": { + "no_op": "CALL" + } } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSBUTVBMX0FOX0lOVAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IFRNUExfU09NRV9CWVRFUyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAogICAgcHVzaGJ5dGVzcyAweGJlOTMyMDBiIDB4YzFhMTMyOTUgMHhhZjQzZGIzNiAvLyBtZXRob2QgImdldEludCgpdWludDY0IiwgbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIsIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0SW50X3JvdXRlQDMgbWFpbl9nZXRTdHJpbmdfcm91dGVANCBtYWluX2dldEJ5dGVzX3JvdXRlQDUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0Qnl0ZXNfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxMwogICAgLy8gZ2V0Qnl0ZXMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxNAogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPGJ5dGVzPignU09NRV9CWVRFUycpCiAgICBieXRlY18xIC8vIFRNUExfU09NRV9CWVRFUwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEzCiAgICAvLyBnZXRCeXRlcygpIHsKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldFN0cmluZ19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIGdldFN0cmluZygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEwCiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8c3RyaW5nPignQV9TVFJJTkcnKQogICAgYnl0ZWNfMiAvLyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OQogICAgLy8gZ2V0U3RyaW5nKCkgewogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0SW50X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NQogICAgLy8gZ2V0SW50KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NgogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPHVpbnQ2ND4oJ0FOX0lOVCcpCiAgICBpbnRjXzEgLy8gVE1QTF9BTl9JTlQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo1CiAgICAvLyBnZXRJbnQoKSB7CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSBUTVBMX0FOX0lOVAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IFRNUExfQU5fQUREUkVTUyBUTVBMX1NPTUVfQllURVMgVE1QTF9BX1NUUklORwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKICAgIHB1c2hieXRlc3MgMHhiZTkzMjAwYiAweGMxYTEzMjk1IDB4YWY0M2RiMzYgMHgwNTU5Y2FjMSAvLyBtZXRob2QgImdldEludCgpdWludDY0IiwgbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIsIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0QWRkcmVzcygpYWRkcmVzcyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0SW50X3JvdXRlQDMgbWFpbl9nZXRTdHJpbmdfcm91dGVANCBtYWluX2dldEJ5dGVzX3JvdXRlQDUgbWFpbl9nZXRBZGRyZXNzX3JvdXRlQDYKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0QWRkcmVzc19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjIwCiAgICAvLyBnZXRBZGRyZXNzKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo1CiAgICAvLyBjb25zdCBzcGVjaWFsQWRkcmVzcyA9IFRlbXBsYXRlVmFyPEFkZHJlc3M+KCdBTl9BRERSRVNTJykKICAgIGJ5dGVjXzEgLy8gVE1QTF9BTl9BRERSRVNTCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MjAKICAgIC8vIGdldEFkZHJlc3MoKSB7CiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCeXRlc19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE2CiAgICAvLyBnZXRCeXRlcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE3CiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8Ynl0ZXM+KCdTT01FX0JZVEVTJykKICAgIGJ5dGVjXzIgLy8gVE1QTF9TT01FX0JZVEVTCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTYKICAgIC8vIGdldEJ5dGVzKCkgewogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0U3RyaW5nX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTIKICAgIC8vIGdldFN0cmluZygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8c3RyaW5nPignQV9TVFJJTkcnKQogICAgYnl0ZWNfMyAvLyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTIKICAgIC8vIGdldFN0cmluZygpIHsKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEludF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjgKICAgIC8vIGdldEludCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIHJldHVybiBUZW1wbGF0ZVZhcjx1aW50NjQ+KCdBTl9JTlQnKQogICAgaW50Y18xIC8vIFRNUExfQU5fSU5UCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OAogICAgLy8gZ2V0SW50KCkgewogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { @@ -66,6 +71,14 @@ "returns": { "type": "byte[]" } + }, + { + "name": "getAddress", + "args": [], + "readonly": false, + "returns": { + "type": "address" + } } ], "networks": {} diff --git a/tests/approvals/out/o1/template-var/MyContract.arc56.json b/tests/approvals/out/o1/template-var/MyContract.arc56.json index cd9e109c8..20a0563a0 100644 --- a/tests/approvals/out/o1/template-var/MyContract.arc56.json +++ b/tests/approvals/out/o1/template-var/MyContract.arc56.json @@ -49,6 +49,22 @@ "readonly": false, "events": [], "recommendations": {} + }, + { + "name": "getAddress", + "args": [], + "returns": { + "type": "address" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} } ], "arcs": [ @@ -89,23 +105,25 @@ "sourceInfo": [ { "pc": [ - 39, - 61, - 83 + 46, + 59, + 81, + 103 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 103 + 123 ], "errorMessage": "can only call when creating" }, { "pc": [ - 42, - 64, - 86 + 49, + 62, + 84, + 106 ], "errorMessage": "can only call when not creating" } @@ -118,11 +136,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSBUTVBMX0FOX0lOVAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IFRNUExfU09NRV9CWVRFUyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAogICAgcHVzaGJ5dGVzcyAweGJlOTMyMDBiIDB4YzFhMTMyOTUgMHhhZjQzZGIzNiAvLyBtZXRob2QgImdldEludCgpdWludDY0IiwgbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIsIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0SW50X3JvdXRlQDMgbWFpbl9nZXRTdHJpbmdfcm91dGVANCBtYWluX2dldEJ5dGVzX3JvdXRlQDUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0Qnl0ZXNfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxMwogICAgLy8gZ2V0Qnl0ZXMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxNAogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPGJ5dGVzPignU09NRV9CWVRFUycpCiAgICBieXRlY18xIC8vIFRNUExfU09NRV9CWVRFUwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEzCiAgICAvLyBnZXRCeXRlcygpIHsKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldFN0cmluZ19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIGdldFN0cmluZygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEwCiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8c3RyaW5nPignQV9TVFJJTkcnKQogICAgYnl0ZWNfMiAvLyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OQogICAgLy8gZ2V0U3RyaW5nKCkgewogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0SW50X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NQogICAgLy8gZ2V0SW50KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NgogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPHVpbnQ2ND4oJ0FOX0lOVCcpCiAgICBpbnRjXzEgLy8gVE1QTF9BTl9JTlQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo1CiAgICAvLyBnZXRJbnQoKSB7CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSBUTVBMX0FOX0lOVAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IFRNUExfQU5fQUREUkVTUyBUTVBMX1NPTUVfQllURVMgVE1QTF9BX1NUUklORwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKICAgIHB1c2hieXRlc3MgMHhiZTkzMjAwYiAweGMxYTEzMjk1IDB4YWY0M2RiMzYgMHgwNTU5Y2FjMSAvLyBtZXRob2QgImdldEludCgpdWludDY0IiwgbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIsIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0QWRkcmVzcygpYWRkcmVzcyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0SW50X3JvdXRlQDMgbWFpbl9nZXRTdHJpbmdfcm91dGVANCBtYWluX2dldEJ5dGVzX3JvdXRlQDUgbWFpbl9nZXRBZGRyZXNzX3JvdXRlQDYKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0QWRkcmVzc19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjIwCiAgICAvLyBnZXRBZGRyZXNzKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo1CiAgICAvLyBjb25zdCBzcGVjaWFsQWRkcmVzcyA9IFRlbXBsYXRlVmFyPEFkZHJlc3M+KCdBTl9BRERSRVNTJykKICAgIGJ5dGVjXzEgLy8gVE1QTF9BTl9BRERSRVNTCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MjAKICAgIC8vIGdldEFkZHJlc3MoKSB7CiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCeXRlc19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE2CiAgICAvLyBnZXRCeXRlcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE3CiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8Ynl0ZXM+KCdTT01FX0JZVEVTJykKICAgIGJ5dGVjXzIgLy8gVE1QTF9TT01FX0JZVEVTCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTYKICAgIC8vIGdldEJ5dGVzKCkgewogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0U3RyaW5nX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTIKICAgIC8vIGdldFN0cmluZygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8c3RyaW5nPignQV9TVFJJTkcnKQogICAgYnl0ZWNfMyAvLyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTIKICAgIC8vIGdldFN0cmluZygpIHsKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEludF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjgKICAgIC8vIGdldEludCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIHJldHVybiBUZW1wbGF0ZVZhcjx1aW50NjQ+KCdBTl9JTlQnKQogICAgaW50Y18xIC8vIFRNUExfQU5fSU5UCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OAogICAgLy8gZ2V0SW50KCkgewogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAQAmAwQVH3x1AAAxG0EAWoIDBL6TIAsEwaEylQSvQ9s2NhoAjgMALwAZAAOBAEMxGRREMRhEKUkVFlcGAkxQKExQsCJDMRkURDEYRCpJFRZXBgJMUChMULAiQzEZFEQxGEQjFihMULAiQzEZQP+9MRgURCJD", + "approval": "CiACAQAmBAQVH3x1AAAAMRtBAG6CBAS+kyALBMGhMpUEr0PbNgQFWcrBNhoAjgQAPAAmABAAA4EAQzEZFEQxGEQoKVCwIkMxGRREMRhEKkkVFlcGAkxQKExQsCJDMRkURDEYRCtJFRZXBgJMUChMULAiQzEZFEQxGEQjFihMULAiQzEZQP+wMRgURCJD", "clear": "CoEBQw==" }, "compilerInfo": { @@ -138,6 +156,9 @@ "AN_INT": { "type": "AVMUint64" }, + "AN_ADDRESS": { + "type": "address" + }, "SOME_BYTES": { "type": "AVMBytes" }, diff --git a/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.0.ssa.ir b/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.0.ssa.ir index d239b6923..6005aa7bb 100644 --- a/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.0.ssa.ir +++ b/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.0.ssa.ir @@ -4,14 +4,14 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP return tmp%0#0 subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__() -> bool: - block@0: // L4 + block@0: // L7 let tmp%0#0: uint64 = (txn NumAppArgs) let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@7 - block@1: // abi_routing_L4 + goto tmp%1#0 ? block@1 : block@8 + block@1: // abi_routing_L7 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getInt()uint64" => block@2, method "getString()string" => block@3, method "getBytes()byte[]" => block@4, * => block@5} - block@2: // getInt_route_L5 + switch tmp%2#0 {method "getInt()uint64" => block@2, method "getString()string" => block@3, method "getBytes()byte[]" => block@4, method "getAddress()address" => block@5, * => block@6} + block@2: // getInt_route_L8 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -23,7 +23,7 @@ subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__ let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%7#0) return 1u - block@3: // getString_route_L9 + block@3: // getString_route_L12 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is not NoOp @@ -38,7 +38,7 @@ subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__ let tmp%12#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%12#0) return 1u - block@4: // getBytes_route_L13 + block@4: // getBytes_route_L16 let tmp%13#0: uint64 = (txn OnCompletion) let tmp%14#0: bool = (== tmp%13#0 NoOp) (assert tmp%14#0) // OnCompletion is not NoOp @@ -53,38 +53,53 @@ subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__ let tmp%17#0: bytes = (concat 0x151f7c75 encoded_value%1#0) (log tmp%17#0) return 1u - block@5: // switch_case_default_L4 - goto block@6 - block@6: // switch_case_next_L4 - goto block@11 - block@7: // bare_routing_L4 + block@5: // getAddress_route_L20 let tmp%18#0: uint64 = (txn OnCompletion) - switch tmp%18#0 {0u => block@8, * => block@9} - block@8: // __algots__.defaultCreate_L4 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (== tmp%19#0 0u) - (assert tmp%20#0) // can only call when creating + let tmp%19#0: bool = (== tmp%18#0 NoOp) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (!= tmp%20#0 0u) + (assert tmp%21#0) // can only call when not creating + let tmp%22#0: bytes[32] = tests/approvals/template-var.algo.ts::MyContract.getAddress() + let tmp%23#0: bytes = (concat 0x151f7c75 tmp%22#0) + (log tmp%23#0) + return 1u + block@6: // switch_case_default_L7 + goto block@7 + block@7: // switch_case_next_L7 + goto block@12 + block@8: // bare_routing_L7 + let tmp%24#0: uint64 = (txn OnCompletion) + switch tmp%24#0 {0u => block@9, * => block@10} + block@9: // __algots__.defaultCreate_L7 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (== tmp%25#0 0u) + (assert tmp%26#0) // can only call when creating tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() return 1u - block@9: // switch_case_default_L4 - goto block@10 - block@10: // switch_case_next_L4 + block@10: // switch_case_default_L7 goto block@11 - block@11: // after_if_else_L4 + block@11: // switch_case_next_L7 + goto block@12 + block@12: // after_if_else_L7 return 0u subroutine tests/approvals/template-var.algo.ts::MyContract.getInt() -> uint64: - block@0: // L5 + block@0: // L8 return TemplateVar[uint64](TMPL_AN_INT) subroutine tests/approvals/template-var.algo.ts::MyContract.getString() -> bytes: - block@0: // L9 + block@0: // L12 return TemplateVar[bytes](TMPL_A_STRING) subroutine tests/approvals/template-var.algo.ts::MyContract.getBytes() -> bytes: - block@0: // L13 + block@0: // L16 return TemplateVar[bytes](TMPL_SOME_BYTES) +subroutine tests/approvals/template-var.algo.ts::MyContract.getAddress() -> bytes[32]: + block@0: // L20 + return TemplateVar[bytes[32]](TMPL_AN_ADDRESS) + subroutine tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() -> void: - block@0: // L4 + block@0: // L7 return \ No newline at end of file diff --git a/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir b/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir index 35f5d6a36..5889bd455 100644 --- a/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir +++ b/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir @@ -1,11 +1,11 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 let tmp%0#1: uint64 = (txn NumAppArgs) - goto tmp%0#1 ? block@2 : block@8 - block@2: // abi_routing_L4 + goto tmp%0#1 ? block@2 : block@9 + block@2: // abi_routing_L7 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, * => block@12} - block@3: // getInt_route_L5 + switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, method "getAddress()address" => block@6, * => block@13} + block@3: // getInt_route_L8 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (! tmp%3#0) (assert tmp%4#0) // OnCompletion is not NoOp @@ -16,8 +16,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%7#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0: bool = 1u - goto block@13 - block@4: // getString_route_L9 + goto block@14 + block@4: // getString_route_L12 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is not NoOp @@ -31,8 +31,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%12#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%12#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1: bool = 1u - goto block@13 - block@5: // getBytes_route_L13 + goto block@14 + block@5: // getBytes_route_L16 let tmp%13#0: uint64 = (txn OnCompletion) let tmp%14#0: bool = (! tmp%13#0) (assert tmp%14#0) // OnCompletion is not NoOp @@ -46,19 +46,30 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%17#0: bytes = (concat 0x151f7c75 encoded_value%1#0) (log tmp%17#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2: bool = 1u - goto block@13 - block@8: // bare_routing_L4 + goto block@14 + block@6: // getAddress_route_L20 let tmp%18#0: uint64 = (txn OnCompletion) - goto tmp%18#0 ? block@12 : block@9 - block@9: // __algots__.defaultCreate_L4 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (! tmp%19#0) - (assert tmp%20#0) // can only call when creating + let tmp%19#0: bool = (! tmp%18#0) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + (assert tmp%20#0) // can only call when not creating + let tmp%22#0: bytes[32] = TemplateVar[bytes[32]](TMPL_AN_ADDRESS) + let tmp%23#0: bytes = (concat 0x151f7c75 tmp%22#0) + (log tmp%23#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3: bool = 1u - goto block@13 - block@12: // after_if_else_L4 - let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 0u - goto block@13 - block@13: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@9, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@12) + goto block@14 + block@9: // bare_routing_L7 + let tmp%24#0: uint64 = (txn OnCompletion) + goto tmp%24#0 ? block@13 : block@10 + block@10: // __algots__.defaultCreate_L7 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // can only call when creating + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 1u + goto block@14 + block@13: // after_if_else_L7 + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5: bool = 0u + goto block@14 + block@14: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@6, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@10, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5 <- block@13) return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir b/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir index 35f5d6a36..5889bd455 100644 --- a/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/o1/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir @@ -1,11 +1,11 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 let tmp%0#1: uint64 = (txn NumAppArgs) - goto tmp%0#1 ? block@2 : block@8 - block@2: // abi_routing_L4 + goto tmp%0#1 ? block@2 : block@9 + block@2: // abi_routing_L7 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, * => block@12} - block@3: // getInt_route_L5 + switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, method "getAddress()address" => block@6, * => block@13} + block@3: // getInt_route_L8 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (! tmp%3#0) (assert tmp%4#0) // OnCompletion is not NoOp @@ -16,8 +16,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%7#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0: bool = 1u - goto block@13 - block@4: // getString_route_L9 + goto block@14 + block@4: // getString_route_L12 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is not NoOp @@ -31,8 +31,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%12#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%12#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1: bool = 1u - goto block@13 - block@5: // getBytes_route_L13 + goto block@14 + block@5: // getBytes_route_L16 let tmp%13#0: uint64 = (txn OnCompletion) let tmp%14#0: bool = (! tmp%13#0) (assert tmp%14#0) // OnCompletion is not NoOp @@ -46,19 +46,30 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%17#0: bytes = (concat 0x151f7c75 encoded_value%1#0) (log tmp%17#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2: bool = 1u - goto block@13 - block@8: // bare_routing_L4 + goto block@14 + block@6: // getAddress_route_L20 let tmp%18#0: uint64 = (txn OnCompletion) - goto tmp%18#0 ? block@12 : block@9 - block@9: // __algots__.defaultCreate_L4 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (! tmp%19#0) - (assert tmp%20#0) // can only call when creating + let tmp%19#0: bool = (! tmp%18#0) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + (assert tmp%20#0) // can only call when not creating + let tmp%22#0: bytes[32] = TemplateVar[bytes[32]](TMPL_AN_ADDRESS) + let tmp%23#0: bytes = (concat 0x151f7c75 tmp%22#0) + (log tmp%23#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3: bool = 1u - goto block@13 - block@12: // after_if_else_L4 - let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 0u - goto block@13 - block@13: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@9, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@12) + goto block@14 + block@9: // bare_routing_L7 + let tmp%24#0: uint64 = (txn OnCompletion) + goto tmp%24#0 ? block@13 : block@10 + block@10: // __algots__.defaultCreate_L7 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // can only call when creating + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 1u + goto block@14 + block@13: // after_if_else_L7 + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5: bool = 0u + goto block@14 + block@14: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@6, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@10, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5 <- block@13) return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o2/template-var/MyContract.approval.teal b/tests/approvals/out/o2/template-var/MyContract.approval.teal index 669215ea0..38ae5055a 100644 --- a/tests/approvals/out/o2/template-var/MyContract.approval.teal +++ b/tests/approvals/out/o2/template-var/MyContract.approval.teal @@ -4,33 +4,52 @@ // @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: main: intcblock 1 TMPL_AN_INT - bytecblock 0x151f7c75 TMPL_SOME_BYTES TMPL_A_STRING - // tests/approvals/template-var.algo.ts:4 + bytecblock 0x151f7c75 TMPL_AN_ADDRESS TMPL_SOME_BYTES TMPL_A_STRING + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { txn NumAppArgs - bz main_bare_routing@8 - pushbytess 0xbe93200b 0xc1a13295 0xaf43db36 // method "getInt()uint64", method "getString()string", method "getBytes()byte[]" + bz main_bare_routing@9 + pushbytess 0xbe93200b 0xc1a13295 0xaf43db36 0x0559cac1 // method "getInt()uint64", method "getString()string", method "getBytes()byte[]", method "getAddress()address" txna ApplicationArgs 0 - match main_getInt_route@3 main_getString_route@4 main_getBytes_route@5 + match main_getInt_route@3 main_getString_route@4 main_getBytes_route@5 main_getAddress_route@6 -main_after_if_else@12: - // tests/approvals/template-var.algo.ts:4 +main_after_if_else@13: + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { pushint 0 // 0 return +main_getAddress_route@6: + // tests/approvals/template-var.algo.ts:20 + // getAddress() { + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + bytec_0 // 0x151f7c75 + // tests/approvals/template-var.algo.ts:5 + // const specialAddress = TemplateVar
('AN_ADDRESS') + bytec_1 // TMPL_AN_ADDRESS + // tests/approvals/template-var.algo.ts:20 + // getAddress() { + concat + log + intc_0 // 1 + return + main_getBytes_route@5: - // tests/approvals/template-var.algo.ts:13 + // tests/approvals/template-var.algo.ts:16 // getBytes() { txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // tests/approvals/template-var.algo.ts:14 + // tests/approvals/template-var.algo.ts:17 // return TemplateVar('SOME_BYTES') - bytec_1 // TMPL_SOME_BYTES - // tests/approvals/template-var.algo.ts:13 + bytec_2 // TMPL_SOME_BYTES + // tests/approvals/template-var.algo.ts:16 // getBytes() { dup len @@ -46,17 +65,17 @@ main_getBytes_route@5: return main_getString_route@4: - // tests/approvals/template-var.algo.ts:9 + // tests/approvals/template-var.algo.ts:12 // getString() { txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // tests/approvals/template-var.algo.ts:10 + // tests/approvals/template-var.algo.ts:13 // return TemplateVar('A_STRING') - bytec_2 // TMPL_A_STRING - // tests/approvals/template-var.algo.ts:9 + bytec_3 // TMPL_A_STRING + // tests/approvals/template-var.algo.ts:12 // getString() { dup len @@ -72,17 +91,17 @@ main_getString_route@4: return main_getInt_route@3: - // tests/approvals/template-var.algo.ts:5 + // tests/approvals/template-var.algo.ts:8 // getInt() { txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // tests/approvals/template-var.algo.ts:6 + // tests/approvals/template-var.algo.ts:9 // return TemplateVar('AN_INT') intc_1 // TMPL_AN_INT - // tests/approvals/template-var.algo.ts:5 + // tests/approvals/template-var.algo.ts:8 // getInt() { itob bytec_0 // 0x151f7c75 @@ -92,11 +111,11 @@ main_getInt_route@3: intc_0 // 1 return -main_bare_routing@8: - // tests/approvals/template-var.algo.ts:4 +main_bare_routing@9: + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { txn OnCompletion - bnz main_after_if_else@12 + bnz main_after_if_else@13 txn ApplicationID ! assert // can only call when creating diff --git a/tests/approvals/out/o2/template-var/MyContract.arc32.json b/tests/approvals/out/o2/template-var/MyContract.arc32.json index 4c2abc0e3..03e9f6ed2 100644 --- a/tests/approvals/out/o2/template-var/MyContract.arc32.json +++ b/tests/approvals/out/o2/template-var/MyContract.arc32.json @@ -14,10 +14,15 @@ "call_config": { "no_op": "CALL" } + }, + "getAddress()address": { + "call_config": { + "no_op": "CALL" + } } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSBUTVBMX0FOX0lOVAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IFRNUExfU09NRV9CWVRFUyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAogICAgcHVzaGJ5dGVzcyAweGJlOTMyMDBiIDB4YzFhMTMyOTUgMHhhZjQzZGIzNiAvLyBtZXRob2QgImdldEludCgpdWludDY0IiwgbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIsIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0SW50X3JvdXRlQDMgbWFpbl9nZXRTdHJpbmdfcm91dGVANCBtYWluX2dldEJ5dGVzX3JvdXRlQDUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0Qnl0ZXNfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxMwogICAgLy8gZ2V0Qnl0ZXMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxNAogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPGJ5dGVzPignU09NRV9CWVRFUycpCiAgICBieXRlY18xIC8vIFRNUExfU09NRV9CWVRFUwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEzCiAgICAvLyBnZXRCeXRlcygpIHsKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldFN0cmluZ19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIGdldFN0cmluZygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEwCiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8c3RyaW5nPignQV9TVFJJTkcnKQogICAgYnl0ZWNfMiAvLyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OQogICAgLy8gZ2V0U3RyaW5nKCkgewogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0SW50X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NQogICAgLy8gZ2V0SW50KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NgogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPHVpbnQ2ND4oJ0FOX0lOVCcpCiAgICBpbnRjXzEgLy8gVE1QTF9BTl9JTlQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo1CiAgICAvLyBnZXRJbnQoKSB7CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSBUTVBMX0FOX0lOVAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IFRNUExfQU5fQUREUkVTUyBUTVBMX1NPTUVfQllURVMgVE1QTF9BX1NUUklORwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKICAgIHB1c2hieXRlc3MgMHhiZTkzMjAwYiAweGMxYTEzMjk1IDB4YWY0M2RiMzYgMHgwNTU5Y2FjMSAvLyBtZXRob2QgImdldEludCgpdWludDY0IiwgbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIsIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0QWRkcmVzcygpYWRkcmVzcyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0SW50X3JvdXRlQDMgbWFpbl9nZXRTdHJpbmdfcm91dGVANCBtYWluX2dldEJ5dGVzX3JvdXRlQDUgbWFpbl9nZXRBZGRyZXNzX3JvdXRlQDYKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0QWRkcmVzc19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjIwCiAgICAvLyBnZXRBZGRyZXNzKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo1CiAgICAvLyBjb25zdCBzcGVjaWFsQWRkcmVzcyA9IFRlbXBsYXRlVmFyPEFkZHJlc3M+KCdBTl9BRERSRVNTJykKICAgIGJ5dGVjXzEgLy8gVE1QTF9BTl9BRERSRVNTCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MjAKICAgIC8vIGdldEFkZHJlc3MoKSB7CiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCeXRlc19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE2CiAgICAvLyBnZXRCeXRlcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE3CiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8Ynl0ZXM+KCdTT01FX0JZVEVTJykKICAgIGJ5dGVjXzIgLy8gVE1QTF9TT01FX0JZVEVTCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTYKICAgIC8vIGdldEJ5dGVzKCkgewogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0U3RyaW5nX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTIKICAgIC8vIGdldFN0cmluZygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8c3RyaW5nPignQV9TVFJJTkcnKQogICAgYnl0ZWNfMyAvLyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTIKICAgIC8vIGdldFN0cmluZygpIHsKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEludF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjgKICAgIC8vIGdldEludCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIHJldHVybiBUZW1wbGF0ZVZhcjx1aW50NjQ+KCdBTl9JTlQnKQogICAgaW50Y18xIC8vIFRNUExfQU5fSU5UCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OAogICAgLy8gZ2V0SW50KCkgewogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { @@ -66,6 +71,14 @@ "returns": { "type": "byte[]" } + }, + { + "name": "getAddress", + "args": [], + "readonly": false, + "returns": { + "type": "address" + } } ], "networks": {} diff --git a/tests/approvals/out/o2/template-var/MyContract.arc56.json b/tests/approvals/out/o2/template-var/MyContract.arc56.json index cd9e109c8..20a0563a0 100644 --- a/tests/approvals/out/o2/template-var/MyContract.arc56.json +++ b/tests/approvals/out/o2/template-var/MyContract.arc56.json @@ -49,6 +49,22 @@ "readonly": false, "events": [], "recommendations": {} + }, + { + "name": "getAddress", + "args": [], + "returns": { + "type": "address" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} } ], "arcs": [ @@ -89,23 +105,25 @@ "sourceInfo": [ { "pc": [ - 39, - 61, - 83 + 46, + 59, + 81, + 103 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 103 + 123 ], "errorMessage": "can only call when creating" }, { "pc": [ - 42, - 64, - 86 + 49, + 62, + 84, + 106 ], "errorMessage": "can only call when not creating" } @@ -118,11 +136,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSBUTVBMX0FOX0lOVAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IFRNUExfU09NRV9CWVRFUyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAogICAgcHVzaGJ5dGVzcyAweGJlOTMyMDBiIDB4YzFhMTMyOTUgMHhhZjQzZGIzNiAvLyBtZXRob2QgImdldEludCgpdWludDY0IiwgbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIsIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0SW50X3JvdXRlQDMgbWFpbl9nZXRTdHJpbmdfcm91dGVANCBtYWluX2dldEJ5dGVzX3JvdXRlQDUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0Qnl0ZXNfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxMwogICAgLy8gZ2V0Qnl0ZXMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxNAogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPGJ5dGVzPignU09NRV9CWVRFUycpCiAgICBieXRlY18xIC8vIFRNUExfU09NRV9CWVRFUwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEzCiAgICAvLyBnZXRCeXRlcygpIHsKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldFN0cmluZ19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIGdldFN0cmluZygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEwCiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8c3RyaW5nPignQV9TVFJJTkcnKQogICAgYnl0ZWNfMiAvLyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OQogICAgLy8gZ2V0U3RyaW5nKCkgewogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0SW50X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NQogICAgLy8gZ2V0SW50KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NgogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPHVpbnQ2ND4oJ0FOX0lOVCcpCiAgICBpbnRjXzEgLy8gVE1QTF9BTl9JTlQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo1CiAgICAvLyBnZXRJbnQoKSB7CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSBUTVBMX0FOX0lOVAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IFRNUExfQU5fQUREUkVTUyBUTVBMX1NPTUVfQllURVMgVE1QTF9BX1NUUklORwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjcKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDkKICAgIHB1c2hieXRlc3MgMHhiZTkzMjAwYiAweGMxYTEzMjk1IDB4YWY0M2RiMzYgMHgwNTU5Y2FjMSAvLyBtZXRob2QgImdldEludCgpdWludDY0IiwgbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIsIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0QWRkcmVzcygpYWRkcmVzcyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0SW50X3JvdXRlQDMgbWFpbl9nZXRTdHJpbmdfcm91dGVANCBtYWluX2dldEJ5dGVzX3JvdXRlQDUgbWFpbl9nZXRBZGRyZXNzX3JvdXRlQDYKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0QWRkcmVzc19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjIwCiAgICAvLyBnZXRBZGRyZXNzKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo1CiAgICAvLyBjb25zdCBzcGVjaWFsQWRkcmVzcyA9IFRlbXBsYXRlVmFyPEFkZHJlc3M+KCdBTl9BRERSRVNTJykKICAgIGJ5dGVjXzEgLy8gVE1QTF9BTl9BRERSRVNTCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MjAKICAgIC8vIGdldEFkZHJlc3MoKSB7CiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRCeXRlc19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE2CiAgICAvLyBnZXRCeXRlcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE3CiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8Ynl0ZXM+KCdTT01FX0JZVEVTJykKICAgIGJ5dGVjXzIgLy8gVE1QTF9TT01FX0JZVEVTCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTYKICAgIC8vIGdldEJ5dGVzKCkgewogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0U3RyaW5nX3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTIKICAgIC8vIGdldFN0cmluZygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8c3RyaW5nPignQV9TVFJJTkcnKQogICAgYnl0ZWNfMyAvLyBUTVBMX0FfU1RSSU5HCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTIKICAgIC8vIGdldFN0cmluZygpIHsKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEludF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjgKICAgIC8vIGdldEludCgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIHJldHVybiBUZW1wbGF0ZVZhcjx1aW50NjQ+KCdBTl9JTlQnKQogICAgaW50Y18xIC8vIFRNUExfQU5fSU5UCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OAogICAgLy8gZ2V0SW50KCkgewogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiACAQAmAwQVH3x1AAAxG0EAWoIDBL6TIAsEwaEylQSvQ9s2NhoAjgMALwAZAAOBAEMxGRREMRhEKUkVFlcGAkxQKExQsCJDMRkURDEYRCpJFRZXBgJMUChMULAiQzEZFEQxGEQjFihMULAiQzEZQP+9MRgURCJD", + "approval": "CiACAQAmBAQVH3x1AAAAMRtBAG6CBAS+kyALBMGhMpUEr0PbNgQFWcrBNhoAjgQAPAAmABAAA4EAQzEZFEQxGEQoKVCwIkMxGRREMRhEKkkVFlcGAkxQKExQsCJDMRkURDEYRCtJFRZXBgJMUChMULAiQzEZFEQxGEQjFihMULAiQzEZQP+wMRgURCJD", "clear": "CoEBQw==" }, "compilerInfo": { @@ -138,6 +156,9 @@ "AN_INT": { "type": "AVMUint64" }, + "AN_ADDRESS": { + "type": "address" + }, "SOME_BYTES": { "type": "AVMBytes" }, diff --git a/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.0.ssa.ir b/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.0.ssa.ir index d239b6923..6005aa7bb 100644 --- a/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.0.ssa.ir +++ b/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.0.ssa.ir @@ -4,14 +4,14 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP return tmp%0#0 subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__() -> bool: - block@0: // L4 + block@0: // L7 let tmp%0#0: uint64 = (txn NumAppArgs) let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@7 - block@1: // abi_routing_L4 + goto tmp%1#0 ? block@1 : block@8 + block@1: // abi_routing_L7 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getInt()uint64" => block@2, method "getString()string" => block@3, method "getBytes()byte[]" => block@4, * => block@5} - block@2: // getInt_route_L5 + switch tmp%2#0 {method "getInt()uint64" => block@2, method "getString()string" => block@3, method "getBytes()byte[]" => block@4, method "getAddress()address" => block@5, * => block@6} + block@2: // getInt_route_L8 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -23,7 +23,7 @@ subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__ let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%7#0) return 1u - block@3: // getString_route_L9 + block@3: // getString_route_L12 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is not NoOp @@ -38,7 +38,7 @@ subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__ let tmp%12#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%12#0) return 1u - block@4: // getBytes_route_L13 + block@4: // getBytes_route_L16 let tmp%13#0: uint64 = (txn OnCompletion) let tmp%14#0: bool = (== tmp%13#0 NoOp) (assert tmp%14#0) // OnCompletion is not NoOp @@ -53,38 +53,53 @@ subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__ let tmp%17#0: bytes = (concat 0x151f7c75 encoded_value%1#0) (log tmp%17#0) return 1u - block@5: // switch_case_default_L4 - goto block@6 - block@6: // switch_case_next_L4 - goto block@11 - block@7: // bare_routing_L4 + block@5: // getAddress_route_L20 let tmp%18#0: uint64 = (txn OnCompletion) - switch tmp%18#0 {0u => block@8, * => block@9} - block@8: // __algots__.defaultCreate_L4 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (== tmp%19#0 0u) - (assert tmp%20#0) // can only call when creating + let tmp%19#0: bool = (== tmp%18#0 NoOp) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (!= tmp%20#0 0u) + (assert tmp%21#0) // can only call when not creating + let tmp%22#0: bytes[32] = tests/approvals/template-var.algo.ts::MyContract.getAddress() + let tmp%23#0: bytes = (concat 0x151f7c75 tmp%22#0) + (log tmp%23#0) + return 1u + block@6: // switch_case_default_L7 + goto block@7 + block@7: // switch_case_next_L7 + goto block@12 + block@8: // bare_routing_L7 + let tmp%24#0: uint64 = (txn OnCompletion) + switch tmp%24#0 {0u => block@9, * => block@10} + block@9: // __algots__.defaultCreate_L7 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (== tmp%25#0 0u) + (assert tmp%26#0) // can only call when creating tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() return 1u - block@9: // switch_case_default_L4 - goto block@10 - block@10: // switch_case_next_L4 + block@10: // switch_case_default_L7 goto block@11 - block@11: // after_if_else_L4 + block@11: // switch_case_next_L7 + goto block@12 + block@12: // after_if_else_L7 return 0u subroutine tests/approvals/template-var.algo.ts::MyContract.getInt() -> uint64: - block@0: // L5 + block@0: // L8 return TemplateVar[uint64](TMPL_AN_INT) subroutine tests/approvals/template-var.algo.ts::MyContract.getString() -> bytes: - block@0: // L9 + block@0: // L12 return TemplateVar[bytes](TMPL_A_STRING) subroutine tests/approvals/template-var.algo.ts::MyContract.getBytes() -> bytes: - block@0: // L13 + block@0: // L16 return TemplateVar[bytes](TMPL_SOME_BYTES) +subroutine tests/approvals/template-var.algo.ts::MyContract.getAddress() -> bytes[32]: + block@0: // L20 + return TemplateVar[bytes[32]](TMPL_AN_ADDRESS) + subroutine tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() -> void: - block@0: // L4 + block@0: // L7 return \ No newline at end of file diff --git a/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir b/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir index 35f5d6a36..5889bd455 100644 --- a/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir +++ b/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir @@ -1,11 +1,11 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 let tmp%0#1: uint64 = (txn NumAppArgs) - goto tmp%0#1 ? block@2 : block@8 - block@2: // abi_routing_L4 + goto tmp%0#1 ? block@2 : block@9 + block@2: // abi_routing_L7 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, * => block@12} - block@3: // getInt_route_L5 + switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, method "getAddress()address" => block@6, * => block@13} + block@3: // getInt_route_L8 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (! tmp%3#0) (assert tmp%4#0) // OnCompletion is not NoOp @@ -16,8 +16,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%7#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0: bool = 1u - goto block@13 - block@4: // getString_route_L9 + goto block@14 + block@4: // getString_route_L12 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is not NoOp @@ -31,8 +31,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%12#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%12#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1: bool = 1u - goto block@13 - block@5: // getBytes_route_L13 + goto block@14 + block@5: // getBytes_route_L16 let tmp%13#0: uint64 = (txn OnCompletion) let tmp%14#0: bool = (! tmp%13#0) (assert tmp%14#0) // OnCompletion is not NoOp @@ -46,19 +46,30 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%17#0: bytes = (concat 0x151f7c75 encoded_value%1#0) (log tmp%17#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2: bool = 1u - goto block@13 - block@8: // bare_routing_L4 + goto block@14 + block@6: // getAddress_route_L20 let tmp%18#0: uint64 = (txn OnCompletion) - goto tmp%18#0 ? block@12 : block@9 - block@9: // __algots__.defaultCreate_L4 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (! tmp%19#0) - (assert tmp%20#0) // can only call when creating + let tmp%19#0: bool = (! tmp%18#0) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + (assert tmp%20#0) // can only call when not creating + let tmp%22#0: bytes[32] = TemplateVar[bytes[32]](TMPL_AN_ADDRESS) + let tmp%23#0: bytes = (concat 0x151f7c75 tmp%22#0) + (log tmp%23#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3: bool = 1u - goto block@13 - block@12: // after_if_else_L4 - let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 0u - goto block@13 - block@13: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@9, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@12) + goto block@14 + block@9: // bare_routing_L7 + let tmp%24#0: uint64 = (txn OnCompletion) + goto tmp%24#0 ? block@13 : block@10 + block@10: // __algots__.defaultCreate_L7 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // can only call when creating + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 1u + goto block@14 + block@13: // after_if_else_L7 + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5: bool = 0u + goto block@14 + block@14: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@6, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@10, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5 <- block@13) return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir b/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir index 35f5d6a36..5889bd455 100644 --- a/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/o2/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir @@ -1,11 +1,11 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 let tmp%0#1: uint64 = (txn NumAppArgs) - goto tmp%0#1 ? block@2 : block@8 - block@2: // abi_routing_L4 + goto tmp%0#1 ? block@2 : block@9 + block@2: // abi_routing_L7 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, * => block@12} - block@3: // getInt_route_L5 + switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, method "getAddress()address" => block@6, * => block@13} + block@3: // getInt_route_L8 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (! tmp%3#0) (assert tmp%4#0) // OnCompletion is not NoOp @@ -16,8 +16,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%7#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0: bool = 1u - goto block@13 - block@4: // getString_route_L9 + goto block@14 + block@4: // getString_route_L12 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is not NoOp @@ -31,8 +31,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%12#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%12#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1: bool = 1u - goto block@13 - block@5: // getBytes_route_L13 + goto block@14 + block@5: // getBytes_route_L16 let tmp%13#0: uint64 = (txn OnCompletion) let tmp%14#0: bool = (! tmp%13#0) (assert tmp%14#0) // OnCompletion is not NoOp @@ -46,19 +46,30 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%17#0: bytes = (concat 0x151f7c75 encoded_value%1#0) (log tmp%17#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2: bool = 1u - goto block@13 - block@8: // bare_routing_L4 + goto block@14 + block@6: // getAddress_route_L20 let tmp%18#0: uint64 = (txn OnCompletion) - goto tmp%18#0 ? block@12 : block@9 - block@9: // __algots__.defaultCreate_L4 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (! tmp%19#0) - (assert tmp%20#0) // can only call when creating + let tmp%19#0: bool = (! tmp%18#0) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + (assert tmp%20#0) // can only call when not creating + let tmp%22#0: bytes[32] = TemplateVar[bytes[32]](TMPL_AN_ADDRESS) + let tmp%23#0: bytes = (concat 0x151f7c75 tmp%22#0) + (log tmp%23#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3: bool = 1u - goto block@13 - block@12: // after_if_else_L4 - let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 0u - goto block@13 - block@13: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@9, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@12) + goto block@14 + block@9: // bare_routing_L7 + let tmp%24#0: uint64 = (txn OnCompletion) + goto tmp%24#0 ? block@13 : block@10 + block@10: // __algots__.defaultCreate_L7 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (! tmp%25#0) + (assert tmp%26#0) // can only call when creating + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 1u + goto block@14 + block@13: // after_if_else_L7 + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5: bool = 0u + goto block@14 + block@14: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@6, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@10, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5 <- block@13) return tmp%0#0 \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/template-var/MyContract.approval.teal b/tests/approvals/out/unoptimized/template-var/MyContract.approval.teal index 951138975..364fa6237 100644 --- a/tests/approvals/out/unoptimized/template-var/MyContract.approval.teal +++ b/tests/approvals/out/unoptimized/template-var/MyContract.approval.teal @@ -4,40 +4,60 @@ // @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: main: intcblock 0 1 TMPL_AN_INT - bytecblock 0x151f7c75 TMPL_A_STRING TMPL_SOME_BYTES + bytecblock 0x151f7c75 TMPL_A_STRING TMPL_SOME_BYTES TMPL_AN_ADDRESS main_block@1: - // tests/approvals/template-var.algo.ts:4 + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { txn NumAppArgs intc_0 // 0 != - bz main_bare_routing@8 + bz main_bare_routing@9 main_abi_routing@2: - // tests/approvals/template-var.algo.ts:4 + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { txna ApplicationArgs 0 pushbytes 0xbe93200b // method "getInt()uint64" pushbytes 0xc1a13295 // method "getString()string" pushbytes 0xaf43db36 // method "getBytes()byte[]" - uncover 3 - match main_getInt_route@3 main_getString_route@4 main_getBytes_route@5 + pushbytes 0x0559cac1 // method "getAddress()address" + uncover 4 + match main_getInt_route@3 main_getString_route@4 main_getBytes_route@5 main_getAddress_route@6 -main_switch_case_default@6: +main_switch_case_default@7: -main_switch_case_next@7: +main_switch_case_next@8: -main_after_if_else@12: - // tests/approvals/template-var.algo.ts:4 +main_after_if_else@13: + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { intc_0 // 0 -main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@13: +main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@14: return +main_getAddress_route@6: + // tests/approvals/template-var.algo.ts:20 + // getAddress() { + txn OnCompletion + intc_0 // NoOp + == + assert // OnCompletion is not NoOp + txn ApplicationID + intc_0 // 0 + != + assert // can only call when not creating + callsub getAddress + bytec_0 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + b main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@14 + main_getBytes_route@5: - // tests/approvals/template-var.algo.ts:13 + // tests/approvals/template-var.algo.ts:16 // getBytes() { txn OnCompletion intc_0 // NoOp @@ -59,10 +79,10 @@ main_getBytes_route@5: concat log intc_1 // 1 - b main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@13 + b main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@14 main_getString_route@4: - // tests/approvals/template-var.algo.ts:9 + // tests/approvals/template-var.algo.ts:12 // getString() { txn OnCompletion intc_0 // NoOp @@ -84,10 +104,10 @@ main_getString_route@4: concat log intc_1 // 1 - b main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@13 + b main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@14 main_getInt_route@3: - // tests/approvals/template-var.algo.ts:5 + // tests/approvals/template-var.algo.ts:8 // getInt() { txn OnCompletion intc_0 // NoOp @@ -104,23 +124,23 @@ main_getInt_route@3: concat log intc_1 // 1 - b main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@13 + b main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@14 -main_bare_routing@8: - // tests/approvals/template-var.algo.ts:4 +main_bare_routing@9: + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { txn OnCompletion intc_0 // 0 swap - match main___algots__.defaultCreate@9 + match main___algots__.defaultCreate@10 -main_switch_case_default@10: +main_switch_case_default@11: -main_switch_case_next@11: - b main_after_if_else@12 +main_switch_case_next@12: + b main_after_if_else@13 -main___algots__.defaultCreate@9: - // tests/approvals/template-var.algo.ts:4 +main___algots__.defaultCreate@10: + // tests/approvals/template-var.algo.ts:7 // export class MyContract extends Contract { txn ApplicationID intc_0 // 0 @@ -128,12 +148,12 @@ main___algots__.defaultCreate@9: assert // can only call when creating callsub __algots__.defaultCreate intc_1 // 1 - b main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@13 + b main_after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__@14 // tests/approvals/template-var.algo.ts::MyContract.getInt() -> uint64: getInt: - // tests/approvals/template-var.algo.ts:6 + // tests/approvals/template-var.algo.ts:9 // return TemplateVar('AN_INT') intc_2 // TMPL_AN_INT retsub @@ -141,7 +161,7 @@ getInt: // tests/approvals/template-var.algo.ts::MyContract.getString() -> bytes: getString: - // tests/approvals/template-var.algo.ts:10 + // tests/approvals/template-var.algo.ts:13 // return TemplateVar('A_STRING') bytec_1 // TMPL_A_STRING retsub @@ -149,12 +169,22 @@ getString: // tests/approvals/template-var.algo.ts::MyContract.getBytes() -> bytes: getBytes: - // tests/approvals/template-var.algo.ts:14 + // tests/approvals/template-var.algo.ts:17 // return TemplateVar('SOME_BYTES') bytec_2 // TMPL_SOME_BYTES retsub +// tests/approvals/template-var.algo.ts::MyContract.getAddress() -> bytes: +getAddress: + // tests/approvals/template-var.algo.ts:5 + // const specialAddress = TemplateVar
('AN_ADDRESS') + bytec_3 // TMPL_AN_ADDRESS + // tests/approvals/template-var.algo.ts:21 + // return specialAddress + retsub + + // tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() -> void: __algots__.defaultCreate: retsub diff --git a/tests/approvals/out/unoptimized/template-var/MyContract.arc32.json b/tests/approvals/out/unoptimized/template-var/MyContract.arc32.json index 9eb70e771..c6561fb3c 100644 --- a/tests/approvals/out/unoptimized/template-var/MyContract.arc32.json +++ b/tests/approvals/out/unoptimized/template-var/MyContract.arc32.json @@ -14,10 +14,15 @@ "call_config": { "no_op": "CALL" } + }, + "getAddress()address": { + "call_config": { + "no_op": "CALL" + } } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIFRNUExfQU5fSU5UCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgVE1QTF9BX1NUUklORyBUTVBMX1NPTUVfQllURVMKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGJlOTMyMDBiIC8vIG1ldGhvZCAiZ2V0SW50KCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMWExMzI5NSAvLyBtZXRob2QgImdldFN0cmluZygpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4YWY0M2RiMzYgLy8gbWV0aG9kICJnZXRCeXRlcygpYnl0ZVtdIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBtYWluX2dldEludF9yb3V0ZUAzIG1haW5fZ2V0U3RyaW5nX3JvdXRlQDQgbWFpbl9nZXRCeXRlc19yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ2V0Qnl0ZXNfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxMwogICAgLy8gZ2V0Qnl0ZXMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJ5dGVzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9nZXRTdHJpbmdfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo5CiAgICAvLyBnZXRTdHJpbmcoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFN0cmluZwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fZ2V0SW50X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NQogICAgLy8gZ2V0SW50KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRJbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDEwOgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKCi8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5nZXRJbnQoKSAtPiB1aW50NjQ6CmdldEludDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo2CiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8dWludDY0PignQU5fSU5UJykKICAgIGludGNfMiAvLyBUTVBMX0FOX0lOVAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldFN0cmluZygpIC0+IGJ5dGVzOgpnZXRTdHJpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTAKICAgIC8vIHJldHVybiBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdBX1NUUklORycpCiAgICBieXRlY18xIC8vIFRNUExfQV9TVFJJTkcKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5nZXRCeXRlcygpIC0+IGJ5dGVzOgpnZXRCeXRlczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxNAogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPGJ5dGVzPignU09NRV9CWVRFUycpCiAgICBieXRlY18yIC8vIFRNUExfU09NRV9CWVRFUwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIFRNUExfQU5fSU5UCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgVE1QTF9BX1NUUklORyBUTVBMX1NPTUVfQllURVMgVE1QTF9BTl9BRERSRVNTCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A5CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhiZTkzMjAwYiAvLyBtZXRob2QgImdldEludCgpdWludDY0IgogICAgcHVzaGJ5dGVzIDB4YzFhMTMyOTUgLy8gbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGFmNDNkYjM2IC8vIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIKICAgIHB1c2hieXRlcyAweDA1NTljYWMxIC8vIG1ldGhvZCAiZ2V0QWRkcmVzcygpYWRkcmVzcyIKICAgIHVuY292ZXIgNAogICAgbWF0Y2ggbWFpbl9nZXRJbnRfcm91dGVAMyBtYWluX2dldFN0cmluZ19yb3V0ZUA0IG1haW5fZ2V0Qnl0ZXNfcm91dGVANSBtYWluX2dldEFkZHJlc3Nfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgptYWluX3N3aXRjaF9jYXNlX25leHRAODoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0OgogICAgcmV0dXJuCgptYWluX2dldEFkZHJlc3Nfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoyMAogICAgLy8gZ2V0QWRkcmVzcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QWRkcmVzcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9nZXRCeXRlc19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE2CiAgICAvLyBnZXRCeXRlcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qnl0ZXMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2dldFN0cmluZ19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEyCiAgICAvLyBnZXRTdHJpbmcoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFN0cmluZwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fZ2V0SW50X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OAogICAgLy8gZ2V0SW50KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRJbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTAKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgoKLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldEludCgpIC0+IHVpbnQ2NDoKZ2V0SW50OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIHJldHVybiBUZW1wbGF0ZVZhcjx1aW50NjQ+KCdBTl9JTlQnKQogICAgaW50Y18yIC8vIFRNUExfQU5fSU5UCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuZ2V0U3RyaW5nKCkgLT4gYnl0ZXM6CmdldFN0cmluZzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxMwogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPHN0cmluZz4oJ0FfU1RSSU5HJykKICAgIGJ5dGVjXzEgLy8gVE1QTF9BX1NUUklORwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldEJ5dGVzKCkgLT4gYnl0ZXM6CmdldEJ5dGVzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE3CiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8Ynl0ZXM+KCdTT01FX0JZVEVTJykKICAgIGJ5dGVjXzIgLy8gVE1QTF9TT01FX0JZVEVTCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuZ2V0QWRkcmVzcygpIC0+IGJ5dGVzOgpnZXRBZGRyZXNzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IHNwZWNpYWxBZGRyZXNzID0gVGVtcGxhdGVWYXI8QWRkcmVzcz4oJ0FOX0FERFJFU1MnKQogICAgYnl0ZWNfMyAvLyBUTVBMX0FOX0FERFJFU1MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoyMQogICAgLy8gcmV0dXJuIHNwZWNpYWxBZGRyZXNzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { @@ -66,6 +71,14 @@ "returns": { "type": "byte[]" } + }, + { + "name": "getAddress", + "args": [], + "readonly": false, + "returns": { + "type": "address" + } } ], "networks": {} diff --git a/tests/approvals/out/unoptimized/template-var/MyContract.arc56.json b/tests/approvals/out/unoptimized/template-var/MyContract.arc56.json index 9c7b2dc48..ec9bb151f 100644 --- a/tests/approvals/out/unoptimized/template-var/MyContract.arc56.json +++ b/tests/approvals/out/unoptimized/template-var/MyContract.arc56.json @@ -49,6 +49,22 @@ "readonly": false, "events": [], "recommendations": {} + }, + { + "name": "getAddress", + "args": [], + "returns": { + "type": "address" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} } ], "arcs": [ @@ -89,23 +105,25 @@ "sourceInfo": [ { "pc": [ - 44, + 52, 73, - 102 + 102, + 131 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 135 + 164 ], "errorMessage": "can only call when creating" }, { "pc": [ - 49, + 57, 78, - 107 + 107, + 136 ], "errorMessage": "can only call when not creating" } @@ -118,11 +136,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIFRNUExfQU5fSU5UCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgVE1QTF9BX1NUUklORyBUTVBMX1NPTUVfQllURVMKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDgKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweGJlOTMyMDBiIC8vIG1ldGhvZCAiZ2V0SW50KCl1aW50NjQiCiAgICBwdXNoYnl0ZXMgMHhjMWExMzI5NSAvLyBtZXRob2QgImdldFN0cmluZygpc3RyaW5nIgogICAgcHVzaGJ5dGVzIDB4YWY0M2RiMzYgLy8gbWV0aG9kICJnZXRCeXRlcygpYnl0ZVtdIgogICAgdW5jb3ZlciAzCiAgICBtYXRjaCBtYWluX2dldEludF9yb3V0ZUAzIG1haW5fZ2V0U3RyaW5nX3JvdXRlQDQgbWFpbl9nZXRCeXRlc19yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX2RlZmF1bHRANjoKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA3OgoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18wIC8vIDAKCm1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTM6CiAgICByZXR1cm4KCm1haW5fZ2V0Qnl0ZXNfcm91dGVANToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxMwogICAgLy8gZ2V0Qnl0ZXMoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldEJ5dGVzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKbWFpbl9nZXRTdHJpbmdfcm91dGVANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo5CiAgICAvLyBnZXRTdHJpbmcoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFN0cmluZwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fZ2V0SW50X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NQogICAgLy8gZ2V0SW50KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRJbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTMKCm1haW5fYmFyZV9yb3V0aW5nQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAOQoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDEwOgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDExOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTIKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgID09CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBjYWxsc3ViIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxMwoKCi8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5nZXRJbnQoKSAtPiB1aW50NjQ6CmdldEludDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo2CiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8dWludDY0PignQU5fSU5UJykKICAgIGludGNfMiAvLyBUTVBMX0FOX0lOVAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldFN0cmluZygpIC0+IGJ5dGVzOgpnZXRTdHJpbmc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6MTAKICAgIC8vIHJldHVybiBUZW1wbGF0ZVZhcjxzdHJpbmc+KCdBX1NUUklORycpCiAgICBieXRlY18xIC8vIFRNUExfQV9TVFJJTkcKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5nZXRCeXRlcygpIC0+IGJ5dGVzOgpnZXRCeXRlczoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxNAogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPGJ5dGVzPignU09NRV9CWVRFUycpCiAgICBieXRlY18yIC8vIFRNUExfU09NRV9CWVRFUwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZSgpIC0+IHZvaWQ6Cl9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZToKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIFRNUExfQU5fSU5UCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgVE1QTF9BX1NUUklORyBUTVBMX1NPTUVfQllURVMgVE1QTF9BTl9BRERSRVNTCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A5CgptYWluX2FiaV9yb3V0aW5nQDI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHhiZTkzMjAwYiAvLyBtZXRob2QgImdldEludCgpdWludDY0IgogICAgcHVzaGJ5dGVzIDB4YzFhMTMyOTUgLy8gbWV0aG9kICJnZXRTdHJpbmcoKXN0cmluZyIKICAgIHB1c2hieXRlcyAweGFmNDNkYjM2IC8vIG1ldGhvZCAiZ2V0Qnl0ZXMoKWJ5dGVbXSIKICAgIHB1c2hieXRlcyAweDA1NTljYWMxIC8vIG1ldGhvZCAiZ2V0QWRkcmVzcygpYWRkcmVzcyIKICAgIHVuY292ZXIgNAogICAgbWF0Y2ggbWFpbl9nZXRJbnRfcm91dGVAMyBtYWluX2dldFN0cmluZ19yb3V0ZUA0IG1haW5fZ2V0Qnl0ZXNfcm91dGVANSBtYWluX2dldEFkZHJlc3Nfcm91dGVANgoKbWFpbl9zd2l0Y2hfY2FzZV9kZWZhdWx0QDc6CgptYWluX3N3aXRjaF9jYXNlX25leHRAODoKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCgptYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0OgogICAgcmV0dXJuCgptYWluX2dldEFkZHJlc3Nfcm91dGVANjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoyMAogICAgLy8gZ2V0QWRkcmVzcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0QWRkcmVzcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIGIgbWFpbl9hZnRlcl9pbmxpbmVkX3Rlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo6TXlDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfX0AxNAoKbWFpbl9nZXRCeXRlc19yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE2CiAgICAvLyBnZXRCeXRlcygpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0Qnl0ZXMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgptYWluX2dldFN0cmluZ19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjEyCiAgICAvLyBnZXRTdHJpbmcoKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldFN0cmluZwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fZ2V0SW50X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6OAogICAgLy8gZ2V0SW50KCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE5vT3AKICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRJbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICBiIG1haW5fYWZ0ZXJfaW5saW5lZF90ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19wdXlhX2FyYzRfcm91dGVyX19AMTQKCm1haW5fYmFyZV9yb3V0aW5nQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6NwogICAgLy8gZXhwb3J0IGNsYXNzIE15Q29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgbWF0Y2ggbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTAKCm1haW5fc3dpdGNoX2Nhc2VfZGVmYXVsdEAxMToKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDEzCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czo3CiAgICAvLyBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgYiBtYWluX2FmdGVyX2lubGluZWRfdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0Ll9fcHV5YV9hcmM0X3JvdXRlcl9fQDE0CgoKLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldEludCgpIC0+IHVpbnQ2NDoKZ2V0SW50OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjkKICAgIC8vIHJldHVybiBUZW1wbGF0ZVZhcjx1aW50NjQ+KCdBTl9JTlQnKQogICAgaW50Y18yIC8vIFRNUExfQU5fSU5UCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuZ2V0U3RyaW5nKCkgLT4gYnl0ZXM6CmdldFN0cmluZzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoxMwogICAgLy8gcmV0dXJuIFRlbXBsYXRlVmFyPHN0cmluZz4oJ0FfU1RSSU5HJykKICAgIGJ5dGVjXzEgLy8gVE1QTF9BX1NUUklORwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjpNeUNvbnRyYWN0LmdldEJ5dGVzKCkgLT4gYnl0ZXM6CmdldEJ5dGVzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjE3CiAgICAvLyByZXR1cm4gVGVtcGxhdGVWYXI8Ynl0ZXM+KCdTT01FX0JZVEVTJykKICAgIGJ5dGVjXzIgLy8gVE1QTF9TT01FX0JZVEVTCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuZ2V0QWRkcmVzcygpIC0+IGJ5dGVzOgpnZXRBZGRyZXNzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL3RlbXBsYXRlLXZhci5hbGdvLnRzOjUKICAgIC8vIGNvbnN0IHNwZWNpYWxBZGRyZXNzID0gVGVtcGxhdGVWYXI8QWRkcmVzcz4oJ0FOX0FERFJFU1MnKQogICAgYnl0ZWNfMyAvLyBUTVBMX0FOX0FERFJFU1MKICAgIC8vIHRlc3RzL2FwcHJvdmFscy90ZW1wbGF0ZS12YXIuYWxnby50czoyMQogICAgLy8gcmV0dXJuIHNwZWNpYWxBZGRyZXNzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvdGVtcGxhdGUtdmFyLmFsZ28udHM6Ok15Q29udHJhY3QuX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { - "approval": "CiADAAEAJgMEFR98dQAAMRsiE0EAcTYaAIAEvpMgC4AEwaEylYAEr0PbNk8DjgMAPAAfAAIiQzEZIhJEMRgiE0SIAF5JFRZXBgJMUChMULAjQv/iMRkiEkQxGCITRIgAP0kVFlcGAkxQKExQsCNC/8UxGSISRDEYIhNEiAAgFihMULAjQv+vMRkiTI4BAANC/6MxGCISRIgACiNC/5gkiSmJKomJ", + "approval": "CiADAAEAJgQEFR98dQAAADEbIhNBAI42GgCABL6TIAuABMGhMpWABK9D2zaABAVZysFPBI4EAFEANAAXAAIiQzEZIhJEMRgiE0SIAHUoTFCwI0L/6jEZIhJEMRgiE0SIAF5JFRZXBgJMUChMULAjQv/NMRkiEkQxGCITRIgAP0kVFlcGAkxQKExQsCNC/7AxGSISRDEYIhNEiAAgFihMULAjQv+aMRkiTI4BAANC/44xGCISRIgADCNC/4MkiSmJKokriYk=", "clear": "CoEBQw==" }, "compilerInfo": { @@ -143,6 +161,9 @@ }, "SOME_BYTES": { "type": "AVMBytes" + }, + "AN_ADDRESS": { + "type": "address" } } } \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.0.ssa.ir b/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.0.ssa.ir index d239b6923..6005aa7bb 100644 --- a/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.0.ssa.ir +++ b/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.0.ssa.ir @@ -4,14 +4,14 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP return tmp%0#0 subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__() -> bool: - block@0: // L4 + block@0: // L7 let tmp%0#0: uint64 = (txn NumAppArgs) let tmp%1#0: bool = (!= tmp%0#0 0u) - goto tmp%1#0 ? block@1 : block@7 - block@1: // abi_routing_L4 + goto tmp%1#0 ? block@1 : block@8 + block@1: // abi_routing_L7 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getInt()uint64" => block@2, method "getString()string" => block@3, method "getBytes()byte[]" => block@4, * => block@5} - block@2: // getInt_route_L5 + switch tmp%2#0 {method "getInt()uint64" => block@2, method "getString()string" => block@3, method "getBytes()byte[]" => block@4, method "getAddress()address" => block@5, * => block@6} + block@2: // getInt_route_L8 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -23,7 +23,7 @@ subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__ let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%7#0) return 1u - block@3: // getString_route_L9 + block@3: // getString_route_L12 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is not NoOp @@ -38,7 +38,7 @@ subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__ let tmp%12#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%12#0) return 1u - block@4: // getBytes_route_L13 + block@4: // getBytes_route_L16 let tmp%13#0: uint64 = (txn OnCompletion) let tmp%14#0: bool = (== tmp%13#0 NoOp) (assert tmp%14#0) // OnCompletion is not NoOp @@ -53,38 +53,53 @@ subroutine tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__ let tmp%17#0: bytes = (concat 0x151f7c75 encoded_value%1#0) (log tmp%17#0) return 1u - block@5: // switch_case_default_L4 - goto block@6 - block@6: // switch_case_next_L4 - goto block@11 - block@7: // bare_routing_L4 + block@5: // getAddress_route_L20 let tmp%18#0: uint64 = (txn OnCompletion) - switch tmp%18#0 {0u => block@8, * => block@9} - block@8: // __algots__.defaultCreate_L4 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (== tmp%19#0 0u) - (assert tmp%20#0) // can only call when creating + let tmp%19#0: bool = (== tmp%18#0 NoOp) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (!= tmp%20#0 0u) + (assert tmp%21#0) // can only call when not creating + let tmp%22#0: bytes[32] = tests/approvals/template-var.algo.ts::MyContract.getAddress() + let tmp%23#0: bytes = (concat 0x151f7c75 tmp%22#0) + (log tmp%23#0) + return 1u + block@6: // switch_case_default_L7 + goto block@7 + block@7: // switch_case_next_L7 + goto block@12 + block@8: // bare_routing_L7 + let tmp%24#0: uint64 = (txn OnCompletion) + switch tmp%24#0 {0u => block@9, * => block@10} + block@9: // __algots__.defaultCreate_L7 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (== tmp%25#0 0u) + (assert tmp%26#0) // can only call when creating tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() return 1u - block@9: // switch_case_default_L4 - goto block@10 - block@10: // switch_case_next_L4 + block@10: // switch_case_default_L7 goto block@11 - block@11: // after_if_else_L4 + block@11: // switch_case_next_L7 + goto block@12 + block@12: // after_if_else_L7 return 0u subroutine tests/approvals/template-var.algo.ts::MyContract.getInt() -> uint64: - block@0: // L5 + block@0: // L8 return TemplateVar[uint64](TMPL_AN_INT) subroutine tests/approvals/template-var.algo.ts::MyContract.getString() -> bytes: - block@0: // L9 + block@0: // L12 return TemplateVar[bytes](TMPL_A_STRING) subroutine tests/approvals/template-var.algo.ts::MyContract.getBytes() -> bytes: - block@0: // L13 + block@0: // L16 return TemplateVar[bytes](TMPL_SOME_BYTES) +subroutine tests/approvals/template-var.algo.ts::MyContract.getAddress() -> bytes[32]: + block@0: // L20 + return TemplateVar[bytes[32]](TMPL_AN_ADDRESS) + subroutine tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() -> void: - block@0: // L4 + block@0: // L7 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir b/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir index 95aa8935a..e95ecdcd5 100644 --- a/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir +++ b/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.1.ssa.array.ir @@ -1,14 +1,14 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 goto block@1 - block@1: // L4 + block@1: // L7 let tmp%0#1: uint64 = (txn NumAppArgs) let tmp%1#0: bool = (!= tmp%0#1 0u) - goto tmp%1#0 ? block@2 : block@8 - block@2: // abi_routing_L4 + goto tmp%1#0 ? block@2 : block@9 + block@2: // abi_routing_L7 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, * => block@6} - block@3: // getInt_route_L5 + switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, method "getAddress()address" => block@6, * => block@7} + block@3: // getInt_route_L8 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -20,8 +20,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%7#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0: bool = 1u - goto block@13 - block@4: // getString_route_L9 + goto block@14 + block@4: // getString_route_L12 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is not NoOp @@ -36,8 +36,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%12#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%12#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1: bool = 1u - goto block@13 - block@5: // getBytes_route_L13 + goto block@14 + block@5: // getBytes_route_L16 let tmp%13#0: uint64 = (txn OnCompletion) let tmp%14#0: bool = (== tmp%13#0 NoOp) (assert tmp%14#0) // OnCompletion is not NoOp @@ -52,44 +52,60 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%17#0: bytes = (concat 0x151f7c75 encoded_value%1#0) (log tmp%17#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2: bool = 1u - goto block@13 - block@6: // switch_case_default_L4 - goto block@7 - block@7: // switch_case_next_L4 - goto block@12 - block@8: // bare_routing_L4 + goto block@14 + block@6: // getAddress_route_L20 let tmp%18#0: uint64 = (txn OnCompletion) - switch tmp%18#0 {0u => block@9, * => block@10} - block@9: // __algots__.defaultCreate_L4 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (== tmp%19#0 0u) - (assert tmp%20#0) // can only call when creating - tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() + let tmp%19#0: bool = (== tmp%18#0 NoOp) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (!= tmp%20#0 0u) + (assert tmp%21#0) // can only call when not creating + let tmp%22#0: bytes[32] = tests/approvals/template-var.algo.ts::MyContract.getAddress() + let tmp%23#0: bytes = (concat 0x151f7c75 tmp%22#0) + (log tmp%23#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3: bool = 1u + goto block@14 + block@7: // switch_case_default_L7 + goto block@8 + block@8: // switch_case_next_L7 goto block@13 - block@10: // switch_case_default_L4 - goto block@11 - block@11: // switch_case_next_L4 + block@9: // bare_routing_L7 + let tmp%24#0: uint64 = (txn OnCompletion) + switch tmp%24#0 {0u => block@10, * => block@11} + block@10: // __algots__.defaultCreate_L7 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (== tmp%25#0 0u) + (assert tmp%26#0) // can only call when creating + tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 1u + goto block@14 + block@11: // switch_case_default_L7 goto block@12 - block@12: // after_if_else_L4 - let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 0u + block@12: // switch_case_next_L7 goto block@13 - block@13: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@9, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@12) + block@13: // after_if_else_L7 + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5: bool = 0u + goto block@14 + block@14: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@6, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@10, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5 <- block@13) return tmp%0#0 subroutine tests/approvals/template-var.algo.ts::MyContract.getInt() -> uint64: - block@0: // L5 + block@0: // L8 return TemplateVar[uint64](TMPL_AN_INT) subroutine tests/approvals/template-var.algo.ts::MyContract.getString() -> bytes: - block@0: // L9 + block@0: // L12 return TemplateVar[bytes](TMPL_A_STRING) subroutine tests/approvals/template-var.algo.ts::MyContract.getBytes() -> bytes: - block@0: // L13 + block@0: // L16 return TemplateVar[bytes](TMPL_SOME_BYTES) +subroutine tests/approvals/template-var.algo.ts::MyContract.getAddress() -> bytes[32]: + block@0: // L20 + return TemplateVar[bytes[32]](TMPL_AN_ADDRESS) + subroutine tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() -> void: - block@0: // L4 + block@0: // L7 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir b/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir index 95aa8935a..e95ecdcd5 100644 --- a/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir +++ b/tests/approvals/out/unoptimized/template-var/MyContract.ir/MyContract.approval.2.ssa.slot.ir @@ -1,14 +1,14 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram: block@0: // L1 goto block@1 - block@1: // L4 + block@1: // L7 let tmp%0#1: uint64 = (txn NumAppArgs) let tmp%1#0: bool = (!= tmp%0#1 0u) - goto tmp%1#0 ? block@2 : block@8 - block@2: // abi_routing_L4 + goto tmp%1#0 ? block@2 : block@9 + block@2: // abi_routing_L7 let tmp%2#0: bytes = (txna ApplicationArgs 0) - switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, * => block@6} - block@3: // getInt_route_L5 + switch tmp%2#0 {method "getInt()uint64" => block@3, method "getString()string" => block@4, method "getBytes()byte[]" => block@5, method "getAddress()address" => block@6, * => block@7} + block@3: // getInt_route_L8 let tmp%3#0: uint64 = (txn OnCompletion) let tmp%4#0: bool = (== tmp%3#0 NoOp) (assert tmp%4#0) // OnCompletion is not NoOp @@ -20,8 +20,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%7#0: bytes = (concat 0x151f7c75 val_as_bytes%0#0) (log tmp%7#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0: bool = 1u - goto block@13 - block@4: // getString_route_L9 + goto block@14 + block@4: // getString_route_L12 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is not NoOp @@ -36,8 +36,8 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%12#0: bytes = (concat 0x151f7c75 encoded_value%0#0) (log tmp%12#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1: bool = 1u - goto block@13 - block@5: // getBytes_route_L13 + goto block@14 + block@5: // getBytes_route_L16 let tmp%13#0: uint64 = (txn OnCompletion) let tmp%14#0: bool = (== tmp%13#0 NoOp) (assert tmp%14#0) // OnCompletion is not NoOp @@ -52,44 +52,60 @@ main @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalP let tmp%17#0: bytes = (concat 0x151f7c75 encoded_value%1#0) (log tmp%17#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2: bool = 1u - goto block@13 - block@6: // switch_case_default_L4 - goto block@7 - block@7: // switch_case_next_L4 - goto block@12 - block@8: // bare_routing_L4 + goto block@14 + block@6: // getAddress_route_L20 let tmp%18#0: uint64 = (txn OnCompletion) - switch tmp%18#0 {0u => block@9, * => block@10} - block@9: // __algots__.defaultCreate_L4 - let tmp%19#0: uint64 = (txn ApplicationID) - let tmp%20#0: bool = (== tmp%19#0 0u) - (assert tmp%20#0) // can only call when creating - tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() + let tmp%19#0: bool = (== tmp%18#0 NoOp) + (assert tmp%19#0) // OnCompletion is not NoOp + let tmp%20#0: uint64 = (txn ApplicationID) + let tmp%21#0: bool = (!= tmp%20#0 0u) + (assert tmp%21#0) // can only call when not creating + let tmp%22#0: bytes[32] = tests/approvals/template-var.algo.ts::MyContract.getAddress() + let tmp%23#0: bytes = (concat 0x151f7c75 tmp%22#0) + (log tmp%23#0) let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3: bool = 1u + goto block@14 + block@7: // switch_case_default_L7 + goto block@8 + block@8: // switch_case_next_L7 goto block@13 - block@10: // switch_case_default_L4 - goto block@11 - block@11: // switch_case_next_L4 + block@9: // bare_routing_L7 + let tmp%24#0: uint64 = (txn OnCompletion) + switch tmp%24#0 {0u => block@10, * => block@11} + block@10: // __algots__.defaultCreate_L7 + let tmp%25#0: uint64 = (txn ApplicationID) + let tmp%26#0: bool = (== tmp%25#0 0u) + (assert tmp%26#0) // can only call when creating + tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 1u + goto block@14 + block@11: // switch_case_default_L7 goto block@12 - block@12: // after_if_else_L4 - let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4: bool = 0u + block@12: // switch_case_next_L7 goto block@13 - block@13: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 - let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@9, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@12) + block@13: // after_if_else_L7 + let tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5: bool = 0u + goto block@14 + block@14: // after_inlined_tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router___L1 + let tmp%0#0: bool = φ(tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#0 <- block@3, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#1 <- block@4, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#2 <- block@5, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#3 <- block@6, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#4 <- block@10, tests/approvals/template-var.algo.ts::MyContract.__puya_arc4_router__%0#5 <- block@13) return tmp%0#0 subroutine tests/approvals/template-var.algo.ts::MyContract.getInt() -> uint64: - block@0: // L5 + block@0: // L8 return TemplateVar[uint64](TMPL_AN_INT) subroutine tests/approvals/template-var.algo.ts::MyContract.getString() -> bytes: - block@0: // L9 + block@0: // L12 return TemplateVar[bytes](TMPL_A_STRING) subroutine tests/approvals/template-var.algo.ts::MyContract.getBytes() -> bytes: - block@0: // L13 + block@0: // L16 return TemplateVar[bytes](TMPL_SOME_BYTES) +subroutine tests/approvals/template-var.algo.ts::MyContract.getAddress() -> bytes[32]: + block@0: // L20 + return TemplateVar[bytes[32]](TMPL_AN_ADDRESS) + subroutine tests/approvals/template-var.algo.ts::MyContract.__algots__.defaultCreate() -> void: - block@0: // L4 + block@0: // L7 return \ No newline at end of file diff --git a/tests/approvals/out/unoptimized/template-var/template-var.awst b/tests/approvals/out/unoptimized/template-var/template-var.awst index cc2b149e0..53e597ace 100644 --- a/tests/approvals/out/unoptimized/template-var/template-var.awst +++ b/tests/approvals/out/unoptimized/template-var/template-var.awst @@ -25,6 +25,11 @@ contract MyContract return TemplateVar[bytes](TMPL_SOME_BYTES) } + getAddress(): arc4.static_array + { + return TemplateVar[arc4.static_array](TMPL_AN_ADDRESS) + } + __algots__.defaultCreate(): void { } diff --git a/tests/approvals/out/unoptimized/template-var/template-var.awst.json b/tests/approvals/out/unoptimized/template-var/template-var.awst.json index 0b02afe4c..6bb822446 100644 --- a/tests/approvals/out/unoptimized/template-var/template-var.awst.json +++ b/tests/approvals/out/unoptimized/template-var/template-var.awst.json @@ -3,8 +3,8 @@ "_type": "Contract", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 4, - "end_line": 4, + "line": 7, + "end_line": 7, "column": 0, "end_column": 42 }, @@ -167,8 +167,8 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 5, - "end_line": 5, + "line": 8, + "end_line": 8, "column": 2, "end_column": 10 }, @@ -184,8 +184,8 @@ "_type": "Block", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 5, - "end_line": 7, + "line": 8, + "end_line": 10, "column": 11, "end_column": 3 }, @@ -194,8 +194,8 @@ "_type": "ReturnStatement", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 6, - "end_line": 6, + "line": 9, + "end_line": 9, "column": 4, "end_column": 40 }, @@ -203,8 +203,8 @@ "_type": "TemplateVar", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 6, - "end_line": 6, + "line": 9, + "end_line": 9, "column": 11, "end_column": 40 }, @@ -235,8 +235,8 @@ "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 5, - "end_line": 5, + "line": 8, + "end_line": 8, "column": 2, "end_column": 10 }, @@ -253,8 +253,8 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 9, - "end_line": 9, + "line": 12, + "end_line": 12, "column": 2, "end_column": 13 }, @@ -270,8 +270,8 @@ "_type": "Block", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 9, - "end_line": 11, + "line": 12, + "end_line": 14, "column": 14, "end_column": 3 }, @@ -280,8 +280,8 @@ "_type": "ReturnStatement", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 10, - "end_line": 10, + "line": 13, + "end_line": 13, "column": 4, "end_column": 42 }, @@ -289,8 +289,8 @@ "_type": "TemplateVar", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 10, - "end_line": 10, + "line": 13, + "end_line": 13, "column": 11, "end_column": 42 }, @@ -321,8 +321,8 @@ "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 9, - "end_line": 9, + "line": 12, + "end_line": 12, "column": 2, "end_column": 13 }, @@ -339,8 +339,8 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 13, - "end_line": 13, + "line": 16, + "end_line": 16, "column": 2, "end_column": 12 }, @@ -356,8 +356,8 @@ "_type": "Block", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 13, - "end_line": 15, + "line": 16, + "end_line": 18, "column": 13, "end_column": 3 }, @@ -366,8 +366,8 @@ "_type": "ReturnStatement", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 14, - "end_line": 14, + "line": 17, + "end_line": 17, "column": 4, "end_column": 43 }, @@ -375,8 +375,8 @@ "_type": "TemplateVar", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 14, - "end_line": 14, + "line": 17, + "end_line": 17, "column": 11, "end_column": 43 }, @@ -407,8 +407,8 @@ "_type": "ARC4ABIMethodConfig", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 13, - "end_line": 13, + "line": 16, + "end_line": 16, "column": 2, "end_column": 12 }, @@ -425,8 +425,146 @@ "_type": "ContractMethod", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 4, - "end_line": 4, + "line": 20, + "end_line": 20, + "column": 2, + "end_column": 14 + }, + "args": [], + "return_type": { + "_type": "ARC4StaticArray", + "name": "arc4.static_array", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "account", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "arc4_name": "address", + "element_type": { + "_type": "ARC4UIntN", + "name": "arc4.byte", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "arc4_name": "byte", + "n": 8 + }, + "source_location": null, + "array_size": 32 + }, + "body": { + "_type": "Block", + "source_location": { + "file": "tests/approvals/template-var.algo.ts", + "line": 20, + "end_line": 22, + "column": 15, + "end_column": 3 + }, + "body": [ + { + "_type": "ReturnStatement", + "source_location": { + "file": "tests/approvals/template-var.algo.ts", + "line": 21, + "end_line": 21, + "column": 4, + "end_column": 25 + }, + "value": { + "_type": "TemplateVar", + "source_location": { + "file": "tests/approvals/template-var.algo.ts", + "line": 5, + "end_line": 5, + "column": 23, + "end_column": 57 + }, + "wtype": { + "_type": "ARC4StaticArray", + "name": "arc4.static_array", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "account", + "immutable": true, + "ephemeral": false, + "scalar_type": 1 + }, + "arc4_name": "address", + "element_type": { + "_type": "ARC4UIntN", + "name": "arc4.byte", + "immutable": true, + "ephemeral": false, + "scalar_type": 1, + "native_type": { + "_type": "WType", + "name": "uint64", + "immutable": true, + "ephemeral": false, + "scalar_type": 2 + }, + "arc4_name": "byte", + "n": 8 + }, + "source_location": null, + "array_size": 32 + }, + "name": "TMPL_AN_ADDRESS" + } + } + ], + "label": null, + "comment": null + }, + "documentation": { + "_type": "MethodDocumentation", + "description": null, + "args": {}, + "returns": null + }, + "inline": null, + "cref": "tests/approvals/template-var.algo.ts::MyContract", + "member_name": "getAddress", + "arc4_method_config": { + "_type": "ARC4ABIMethodConfig", + "source_location": { + "file": "tests/approvals/template-var.algo.ts", + "line": 20, + "end_line": 20, + "column": 2, + "end_column": 14 + }, + "allowed_completion_types": [ + 0 + ], + "create": 3, + "name": "getAddress", + "readonly": false, + "default_args": {} + } + }, + { + "_type": "ContractMethod", + "source_location": { + "file": "tests/approvals/template-var.algo.ts", + "line": 7, + "end_line": 7, "column": 0, "end_column": 42 }, @@ -442,8 +580,8 @@ "_type": "Block", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 4, - "end_line": 4, + "line": 7, + "end_line": 7, "column": 0, "end_column": 42 }, @@ -464,8 +602,8 @@ "_type": "ARC4BareMethodConfig", "source_location": { "file": "tests/approvals/template-var.algo.ts", - "line": 4, - "end_line": 4, + "line": 7, + "end_line": 7, "column": 0, "end_column": 42 }, diff --git a/tests/approvals/template-var.algo.ts b/tests/approvals/template-var.algo.ts index e5d6be6a2..83976b8c2 100644 --- a/tests/approvals/template-var.algo.ts +++ b/tests/approvals/template-var.algo.ts @@ -1,5 +1,8 @@ import type { bytes, uint64 } from '@algorandfoundation/algorand-typescript' import { Contract, TemplateVar } from '@algorandfoundation/algorand-typescript' +import type { Address } from '@algorandfoundation/algorand-typescript/arc4' + +const specialAddress = TemplateVar
('AN_ADDRESS') export class MyContract extends Contract { getInt() { @@ -13,4 +16,8 @@ export class MyContract extends Contract { getBytes() { return TemplateVar('SOME_BYTES') } + + getAddress() { + return specialAddress + } } diff --git a/tests/onchain/template-vars.spec.ts b/tests/onchain/template-vars.spec.ts index 99ead53e1..d7e233579 100644 --- a/tests/onchain/template-vars.spec.ts +++ b/tests/onchain/template-vars.spec.ts @@ -1,25 +1,33 @@ +import { Address } from 'algosdk' import { describe, expect } from 'vitest' import { hexToUint8Array } from '../../src/util' import { createArc4TestFixture } from './util/test-fixture' describe('template var', () => { + const address = Address.fromString('A7NMWS3NT3IUDMLVO26ULGXGIIOUQ3ND2TXSER6EBGRZNOBOUIQXHIBGDE') + + const templateVars = { + AN_INT: 356n, + A_STRING: 'Hello world', + SOME_BYTES: hexToUint8Array('FF0044'), + AN_ADDRESS: address.publicKey, + } const test = createArc4TestFixture('tests/approvals/template-var.algo.ts', { MyContract: { deployParams: { - deployTimeParams: { - AN_INT: 356n, - A_STRING: 'Hello world', - SOME_BYTES: hexToUint8Array('FF0044'), - }, + deployTimeParams: templateVars, }, }, }) - test('it runs', async ({ appClientMyContract }) => { + test('it runs', async ({ appClientMyContract, testAccount }) => { + testAccount.addr const resultInt = await appClientMyContract.send.call({ method: 'getInt' }) - expect(resultInt.return).toBe(356n) + expect(resultInt.return).toBe(templateVars.AN_INT) const resultString = await appClientMyContract.send.call({ method: 'getString' }) - expect(resultString.return).toBe('Hello world') + expect(resultString.return).toBe(templateVars.A_STRING) const resultBytes = await appClientMyContract.send.call({ method: 'getBytes' }) - expect(resultBytes.return).toStrictEqual(Array.from(hexToUint8Array('FF0044'))) + expect(resultBytes.return).toStrictEqual(Array.from(templateVars.SOME_BYTES)) + const resultAddress = await appClientMyContract.send.call({ method: 'getAddress' }) + expect(resultAddress.return).toStrictEqual(address.toString()) }) })