From f9e32cd8994a6950e07fce471f1c93766b3886ff Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Tue, 16 Jul 2024 14:22:38 +0200 Subject: [PATCH] fix: element offsets after boolean --- src/lib/compiler.ts | 1 + tests/abi.test.ts | 6 + tests/contracts/abi.algo.ts | 18 + .../ABITestPostBoolTupleOffset.approval.teal | 110 ++++ .../ABITestPostBoolTupleOffset.arc32.json | 65 ++ .../ABITestPostBoolTupleOffset.arc4.json | 20 + ...BITestPostBoolTupleOffset.arc56_draft.json | 608 ++++++++++++++++++ .../ABITestPostBoolTupleOffset.clear.teal | 1 + 8 files changed, 829 insertions(+) create mode 100644 tests/contracts/artifacts/ABITestPostBoolTupleOffset.approval.teal create mode 100644 tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc32.json create mode 100644 tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc4.json create mode 100644 tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc56_draft.json create mode 100644 tests/contracts/artifacts/ABITestPostBoolTupleOffset.clear.teal diff --git a/src/lib/compiler.ts b/src/lib/compiler.ts index d595a3bd7..2c2188da1 100644 --- a/src/lib/compiler.ts +++ b/src/lib/compiler.ts @@ -3505,6 +3505,7 @@ export default class Compiler { if (consecutiveBools) { offset += Math.ceil(consecutiveBools / 8); + consecutiveBools = 0; } if (ti.kind === 'tuple' || ti.kind === 'object') { diff --git a/tests/abi.test.ts b/tests/abi.test.ts index 7844f101c..868a01790 100644 --- a/tests/abi.test.ts +++ b/tests/abi.test.ts @@ -921,4 +921,10 @@ describe('ABI', function () { expect(await runMethod(appClient, 'dynamicArrayIteration')).toEqual('Hello World!'); }); + + test('postBoolTupleOffset', async () => { + const { appClient } = await compileAndCreate('postBoolTupleOffset'); + + expect(await runMethod(appClient, 'postBoolTupleOffset')).toEqual([true, 1n, 2n]); + }); }); diff --git a/tests/contracts/abi.algo.ts b/tests/contracts/abi.algo.ts index 8989e2820..49cd86e48 100644 --- a/tests/contracts/abi.algo.ts +++ b/tests/contracts/abi.algo.ts @@ -1607,3 +1607,21 @@ class ABITestDynamicArrayIteration extends Contract { return message; } } + +type T9 = { + a: boolean; + b: uint64; + c: uint64; +}; + +class ABITestPostBoolTupleOffset extends Contract { + postBoolTupleOffset(): T9 { + const retVal: T9 = { a: false, b: 0, c: 0 }; + + retVal.a = true; + retVal.b = 1; + retVal.c = 2; + + return retVal; + } +} diff --git a/tests/contracts/artifacts/ABITestPostBoolTupleOffset.approval.teal b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.approval.teal new file mode 100644 index 000000000..cf8cfdcae --- /dev/null +++ b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.approval.teal @@ -0,0 +1,110 @@ +#pragma version 10 + +// This TEAL was generated by TEALScript v0.97.0 +// https://github.com/algorandfoundation/TEALScript + +// This contract is compliant with and/or implements the following ARCs: [ ARC4 ] + +// The following ten lines of TEAL handle initial program flow +// This pattern is used to make it easy for anyone to parse the start of the program and determine if a specific action is allowed +// Here, action refers to the OnComplete in combination with whether the app is being created or called +// Every possible action for this contract is represented in the switch statement +// If the action is not implemented in the contract, its respective branch will be "*NOT_IMPLEMENTED" which just contains "err" +txn ApplicationID +! +int 6 +* +txn OnCompletion ++ +switch *call_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *create_NoOp *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED *NOT_IMPLEMENTED + +*NOT_IMPLEMENTED: + // The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID? + err + +// postBoolTupleOffset()(bool,uint64,uint64) +*abi_route_postBoolTupleOffset: + // The ABI return prefix + byte 0x151f7c75 + + // execute postBoolTupleOffset()(bool,uint64,uint64) + callsub postBoolTupleOffset + concat + log + int 1 + return + +// postBoolTupleOffset(): T9 +postBoolTupleOffset: + proto 0 1 + + // Push empty bytes after the frame pointer to reserve space for local variables + byte 0x + + // tests/contracts/abi.algo.ts:1619 + // retVal: T9 = { a: false, b: 0, c: 0 } + byte 0x00 + int 0 + dup + setbit + byte 0x0000000000000000 + concat + byte 0x0000000000000000 + concat + frame_bury 0 // retVal: T9 + + // tests/contracts/abi.algo.ts:1621 + // retVal.a = true + frame_dig 0 // retVal: T9 + store 255 // full array + load 255 // full array + int 0 + int 1 + setbit + frame_bury 0 // retVal: T9 + + // tests/contracts/abi.algo.ts:1622 + // retVal.b = 1 + frame_dig 0 // retVal: T9 + store 255 // full array + load 255 // full array + byte 0x0000000000000001 + replace2 1 + frame_bury 0 // retVal: T9 + + // tests/contracts/abi.algo.ts:1623 + // retVal.c = 2 + frame_dig 0 // retVal: T9 + store 255 // full array + load 255 // full array + byte 0x0000000000000002 + replace2 9 + frame_bury 0 // retVal: T9 + + // tests/contracts/abi.algo.ts:1625 + // return retVal; + frame_dig 0 // retVal: T9 + + // set the subroutine return value + frame_bury 0 + retsub + +*abi_route_createApplication: + int 1 + return + +*create_NoOp: + method "createApplication()void" + txna ApplicationArgs 0 + match *abi_route_createApplication + + // this contract does not implement the given ABI method for create NoOp + err + +*call_NoOp: + method "postBoolTupleOffset()(bool,uint64,uint64)" + txna ApplicationArgs 0 + match *abi_route_postBoolTupleOffset + + // this contract does not implement the given ABI method for call NoOp + err \ No newline at end of file diff --git a/tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc32.json b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc32.json new file mode 100644 index 000000000..e04e28ca5 --- /dev/null +++ b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc32.json @@ -0,0 +1,65 @@ +{ + "hints": { + "postBoolTupleOffset()(bool,uint64,uint64)": { + "call_config": { + "no_op": "CALL" + } + }, + "createApplication()void": { + "call_config": { + "no_op": "CREATE" + } + } + }, + "bare_call_config": { + "no_op": "NEVER", + "opt_in": "NEVER", + "close_out": "NEVER", + "update_application": "NEVER", + "delete_application": "NEVER" + }, + "schema": { + "local": { + "declared": {}, + "reserved": {} + }, + "global": { + "declared": {}, + "reserved": {} + } + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjk3LjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHBvc3RCb29sVHVwbGVPZmZzZXQoKShib29sLHVpbnQ2NCx1aW50NjQpCiphYmlfcm91dGVfcG9zdEJvb2xUdXBsZU9mZnNldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBwb3N0Qm9vbFR1cGxlT2Zmc2V0KCkoYm9vbCx1aW50NjQsdWludDY0KQoJY2FsbHN1YiBwb3N0Qm9vbFR1cGxlT2Zmc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gcG9zdEJvb2xUdXBsZU9mZnNldCgpOiBUOQpwb3N0Qm9vbFR1cGxlT2Zmc2V0OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTYxOQoJLy8gcmV0VmFsOiBUOSA9IHsgYTogZmFsc2UsIGI6IDAsIGM6IDAgfQoJYnl0ZSAweDAwCglpbnQgMAoJZHVwCglzZXRiaXQKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCgljb25jYXQKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCgljb25jYXQKCWZyYW1lX2J1cnkgMCAvLyByZXRWYWw6IFQ5CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE2MjEKCS8vIHJldFZhbC5hID0gdHJ1ZQoJZnJhbWVfZGlnIDAgLy8gcmV0VmFsOiBUOQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglpbnQgMQoJc2V0Yml0CglmcmFtZV9idXJ5IDAgLy8gcmV0VmFsOiBUOQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjIyCgkvLyByZXRWYWwuYiA9IDEKCWZyYW1lX2RpZyAwIC8vIHJldFZhbDogVDkKCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMQoJcmVwbGFjZTIgMQoJZnJhbWVfYnVyeSAwIC8vIHJldFZhbDogVDkKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTYyMwoJLy8gcmV0VmFsLmMgPSAyCglmcmFtZV9kaWcgMCAvLyByZXRWYWw6IFQ5CglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDIKCXJlcGxhY2UyIDkKCWZyYW1lX2J1cnkgMCAvLyByZXRWYWw6IFQ5CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE2MjUKCS8vIHJldHVybiByZXRWYWw7CglmcmFtZV9kaWcgMCAvLyByZXRWYWw6IFQ5CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJwb3N0Qm9vbFR1cGxlT2Zmc2V0KCkoYm9vbCx1aW50NjQsdWludDY0KSIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfcG9zdEJvb2xUdXBsZU9mZnNldAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" + }, + "contract": { + "name": "ABITestPostBoolTupleOffset", + "desc": "", + "methods": [ + { + "name": "postBoolTupleOffset", + "args": [], + "returns": { + "type": "(bool,uint64,uint64)" + } + }, + { + "name": "createApplication", + "args": [], + "returns": { + "type": "void" + } + } + ] + } +} \ No newline at end of file diff --git a/tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc4.json b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc4.json new file mode 100644 index 000000000..f385ef611 --- /dev/null +++ b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc4.json @@ -0,0 +1,20 @@ +{ + "name": "ABITestPostBoolTupleOffset", + "desc": "", + "methods": [ + { + "name": "postBoolTupleOffset", + "args": [], + "returns": { + "type": "(bool,uint64,uint64)" + } + }, + { + "name": "createApplication", + "args": [], + "returns": { + "type": "void" + } + } + ] +} \ No newline at end of file diff --git a/tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc56_draft.json b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc56_draft.json new file mode 100644 index 000000000..165e592ce --- /dev/null +++ b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.arc56_draft.json @@ -0,0 +1,608 @@ +{ + "name": "ABITestPostBoolTupleOffset", + "desc": "", + "methods": [ + { + "name": "postBoolTupleOffset", + "args": [], + "returns": { + "type": "(bool,uint64,uint64)", + "struct": "T9" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + } + }, + { + "name": "createApplication", + "args": [], + "returns": { + "type": "void" + }, + "actions": { + "create": [ + "NoOp" + ], + "call": [] + } + } + ], + "arcs": [ + 4, + 56 + ], + "structs": { + "T9": { + "a": "bool", + "b": "uint64", + "c": "uint64" + } + }, + "state": { + "schema": { + "global": { + "bytes": 0, + "ints": 0 + }, + "local": { + "bytes": 0, + "ints": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [], + "call": [] + }, + "sourceInfo": [ + { + "teal": 1, + "source": 1617, + "pc": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ] + }, + { + "teal": 13, + "source": 1617, + "pc": [ + 16, + 17 + ] + }, + { + "teal": 14, + "source": 1617, + "pc": [ + 18 + ] + }, + { + "teal": 15, + "source": 1617, + "pc": [ + 19, + 20 + ] + }, + { + "teal": 16, + "source": 1617, + "pc": [ + 21 + ] + }, + { + "teal": 17, + "source": 1617, + "pc": [ + 22, + 23 + ] + }, + { + "teal": 18, + "source": 1617, + "pc": [ + 24 + ] + }, + { + "teal": 19, + "source": 1617, + "pc": [ + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50 + ] + }, + { + "teal": 23, + "source": 1617, + "errorMessage": "The requested action is not implemented in this contract. Are you using the correct OnComplete? Did you set your app ID?", + "pc": [ + 51 + ] + }, + { + "teal": 28, + "source": 1618, + "pc": [ + 52, + 53, + 54, + 55, + 56, + 57 + ] + }, + { + "teal": 31, + "source": 1618, + "pc": [ + 58, + 59, + 60 + ] + }, + { + "teal": 32, + "source": 1618, + "pc": [ + 61 + ] + }, + { + "teal": 33, + "source": 1618, + "pc": [ + 62 + ] + }, + { + "teal": 34, + "source": 1618, + "pc": [ + 63 + ] + }, + { + "teal": 35, + "source": 1618, + "pc": [ + 64 + ] + }, + { + "teal": 39, + "source": 1618, + "pc": [ + 65, + 66, + 67 + ] + }, + { + "teal": 42, + "source": 1618, + "pc": [ + 68, + 69 + ] + }, + { + "teal": 46, + "source": 1619, + "pc": [ + 70, + 71, + 72 + ] + }, + { + "teal": 47, + "source": 1619, + "pc": [ + 73 + ] + }, + { + "teal": 48, + "source": 1619, + "pc": [ + 74 + ] + }, + { + "teal": 49, + "source": 1619, + "pc": [ + 75 + ] + }, + { + "teal": 50, + "source": 1619, + "pc": [ + 76 + ] + }, + { + "teal": 51, + "source": 1619, + "pc": [ + 77 + ] + }, + { + "teal": 52, + "source": 1619, + "pc": [ + 78 + ] + }, + { + "teal": 53, + "source": 1619, + "pc": [ + 79 + ] + }, + { + "teal": 54, + "source": 1619, + "pc": [ + 80, + 81 + ] + }, + { + "teal": 58, + "source": 1621, + "pc": [ + 82, + 83 + ] + }, + { + "teal": 59, + "source": 1621, + "pc": [ + 84, + 85 + ] + }, + { + "teal": 60, + "source": 1621, + "pc": [ + 86, + 87 + ] + }, + { + "teal": 61, + "source": 1621, + "pc": [ + 88 + ] + }, + { + "teal": 62, + "source": 1621, + "pc": [ + 89 + ] + }, + { + "teal": 63, + "source": 1621, + "pc": [ + 90 + ] + }, + { + "teal": 64, + "source": 1621, + "pc": [ + 91, + 92 + ] + }, + { + "teal": 68, + "source": 1622, + "pc": [ + 93, + 94 + ] + }, + { + "teal": 69, + "source": 1622, + "pc": [ + 95, + 96 + ] + }, + { + "teal": 70, + "source": 1622, + "pc": [ + 97, + 98 + ] + }, + { + "teal": 71, + "source": 1622, + "pc": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108 + ] + }, + { + "teal": 72, + "source": 1622, + "pc": [ + 109, + 110 + ] + }, + { + "teal": 73, + "source": 1622, + "pc": [ + 111, + 112 + ] + }, + { + "teal": 77, + "source": 1623, + "pc": [ + 113, + 114 + ] + }, + { + "teal": 78, + "source": 1623, + "pc": [ + 115, + 116 + ] + }, + { + "teal": 79, + "source": 1623, + "pc": [ + 117, + 118 + ] + }, + { + "teal": 80, + "source": 1623, + "pc": [ + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128 + ] + }, + { + "teal": 81, + "source": 1623, + "pc": [ + 129, + 130 + ] + }, + { + "teal": 82, + "source": 1623, + "pc": [ + 131, + 132 + ] + }, + { + "teal": 86, + "source": 1625, + "pc": [ + 133, + 134 + ] + }, + { + "teal": 89, + "source": 1618, + "pc": [ + 135, + 136 + ] + }, + { + "teal": 90, + "source": 1618, + "pc": [ + 137 + ] + }, + { + "teal": 93, + "source": 1617, + "pc": [ + 138 + ] + }, + { + "teal": 94, + "source": 1617, + "pc": [ + 139 + ] + }, + { + "teal": 97, + "source": 1617, + "pc": [ + 140, + 141, + 142, + 143, + 144, + 145 + ] + }, + { + "teal": 98, + "source": 1617, + "pc": [ + 146, + 147, + 148 + ] + }, + { + "teal": 99, + "source": 1617, + "pc": [ + 149, + 150, + 151, + 152 + ] + }, + { + "teal": 102, + "source": 1617, + "errorMessage": "this contract does not implement the given ABI method for create NoOp", + "pc": [ + 153 + ] + }, + { + "teal": 105, + "source": 1617, + "pc": [ + 154, + 155, + 156, + 157, + 158, + 159 + ] + }, + { + "teal": 106, + "source": 1617, + "pc": [ + 160, + 161, + 162 + ] + }, + { + "teal": 107, + "source": 1617, + "pc": [ + 163, + 164, + 165, + 166 + ] + }, + { + "teal": 110, + "source": 1617, + "errorMessage": "this contract does not implement the given ABI method for call NoOp", + "pc": [ + 167 + ] + } + ], + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjk3LjAKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIHBvc3RCb29sVHVwbGVPZmZzZXQoKShib29sLHVpbnQ2NCx1aW50NjQpCiphYmlfcm91dGVfcG9zdEJvb2xUdXBsZU9mZnNldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBwb3N0Qm9vbFR1cGxlT2Zmc2V0KCkoYm9vbCx1aW50NjQsdWludDY0KQoJY2FsbHN1YiBwb3N0Qm9vbFR1cGxlT2Zmc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gcG9zdEJvb2xUdXBsZU9mZnNldCgpOiBUOQpwb3N0Qm9vbFR1cGxlT2Zmc2V0OgoJcHJvdG8gMCAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTYxOQoJLy8gcmV0VmFsOiBUOSA9IHsgYTogZmFsc2UsIGI6IDAsIGM6IDAgfQoJYnl0ZSAweDAwCglpbnQgMAoJZHVwCglzZXRiaXQKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCgljb25jYXQKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwCgljb25jYXQKCWZyYW1lX2J1cnkgMCAvLyByZXRWYWw6IFQ5CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE2MjEKCS8vIHJldFZhbC5hID0gdHJ1ZQoJZnJhbWVfZGlnIDAgLy8gcmV0VmFsOiBUOQoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglpbnQgMQoJc2V0Yml0CglmcmFtZV9idXJ5IDAgLy8gcmV0VmFsOiBUOQoKCS8vIHRlc3RzL2NvbnRyYWN0cy9hYmkuYWxnby50czoxNjIyCgkvLyByZXRWYWwuYiA9IDEKCWZyYW1lX2RpZyAwIC8vIHJldFZhbDogVDkKCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMQoJcmVwbGFjZTIgMQoJZnJhbWVfYnVyeSAwIC8vIHJldFZhbDogVDkKCgkvLyB0ZXN0cy9jb250cmFjdHMvYWJpLmFsZ28udHM6MTYyMwoJLy8gcmV0VmFsLmMgPSAyCglmcmFtZV9kaWcgMCAvLyByZXRWYWw6IFQ5CglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDIKCXJlcGxhY2UyIDkKCWZyYW1lX2J1cnkgMCAvLyByZXRWYWw6IFQ5CgoJLy8gdGVzdHMvY29udHJhY3RzL2FiaS5hbGdvLnRzOjE2MjUKCS8vIHJldHVybiByZXRWYWw7CglmcmFtZV9kaWcgMCAvLyByZXRWYWw6IFQ5CgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnQgMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJwb3N0Qm9vbFR1cGxlT2Zmc2V0KCkoYm9vbCx1aW50NjQsdWludDY0KSIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfcG9zdEJvb2xUdXBsZU9mZnNldAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" + }, + "byteCode": { + "approval": "CiACAQAmAQgAAAAAAAAAADEYFIEGCzEZCI0MAGcAAAAAAAAAAAAAAFkAAAAAAAAAAAAAAIAEFR98dYgABFCwIkOKAAGAAIABACNJVChQKFCMAIsANf80/yMiVIwAiwA1/zT/gAgAAAAAAAAAAVwBjACLADX/NP+ACAAAAAAAAAACXAmMAIsAjACJIkOABLhEezY2GgCOAf/xAIAE6OTPxTYaAI4B/40A", + "clear": "Cg==" + }, + "compilerInfo": { + "compiler": "algod", + "compilerVersion": { + "major": 3, + "minor": 25, + "patch": 0, + "commitHash": "9855f57c" + } + } +} \ No newline at end of file diff --git a/tests/contracts/artifacts/ABITestPostBoolTupleOffset.clear.teal b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.clear.teal new file mode 100644 index 000000000..e9f1d65b3 --- /dev/null +++ b/tests/contracts/artifacts/ABITestPostBoolTupleOffset.clear.teal @@ -0,0 +1 @@ +#pragma version 10 \ No newline at end of file