Skip to content

Commit 1dd7b2f

Browse files
authored
Merge pull request #36 from algorandfoundation/feat/multi-inheritance
feat: add tests for multi-inheritance contract
2 parents 777faa0 + cfdf857 commit 1dd7b2f

18 files changed

+1597
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import type { uint64 } from '@algorandfoundation/algorand-typescript'
2+
import { Contract, GlobalState, Uint64 } from '@algorandfoundation/algorand-typescript'
3+
import { classes } from 'polytype'
4+
5+
export class CommonBase extends Contract {
6+
stateCommon = GlobalState<uint64>({ initialValue: 123 })
7+
8+
methodCommon() {
9+
return 'common'
10+
}
11+
12+
b2CantOverride(): string {
13+
return 'common'
14+
}
15+
}
16+
17+
export class BaseOne extends CommonBase {
18+
stateOne = GlobalState({ initialValue: Uint64(45) })
19+
methodOne() {
20+
return 'base-one'
21+
}
22+
}
23+
24+
export class BaseTwo extends CommonBase {
25+
stateTwo = GlobalState({ initialValue: 'Hello' })
26+
methodTwo() {
27+
return 'base-two'
28+
}
29+
30+
/**
31+
* Because CommonBase implements this method, and MRO for polytype is depth first; this method
32+
* should not be accessible from MultiBases as the MRO should be `BaseOne => CommonBase => BaseTwo => CommonBase`
33+
* and since CommonBase provides an implementation, this one should not be used
34+
*/
35+
b2CantOverride(): string {
36+
return 'base-two'
37+
}
38+
}
39+
40+
export class MultiBases extends classes(BaseOne, BaseTwo) {
41+
stateMulti = GlobalState({ initialValue: 'Hmmm' })
42+
43+
methodMulti() {
44+
return 'multi-bases'
45+
}
46+
47+
methodCallsSuper() {
48+
return super.methodTwo()
49+
}
50+
51+
callB2CantOverride() {
52+
return super.class(BaseTwo).b2CantOverride()
53+
}
54+
55+
callB2Common() {
56+
return super.class(BaseTwo).methodCommon()
57+
}
58+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#pragma version 10
2+
#pragma typetrack false
3+
4+
// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64:
5+
main:
6+
intcblock 1
7+
bytecblock 0x151f7c750006636f6d6d6f6e
8+
txn ApplicationID
9+
bnz main_after_if_else@2
10+
// tests/artifacts/multi-inheritance/contract.algo.ts:6
11+
// stateCommon = GlobalState<uint64>({ initialValue: 123 })
12+
pushbytes "stateCommon"
13+
pushint 123 // 123
14+
app_global_put
15+
// tests/artifacts/multi-inheritance/contract.algo.ts:18
16+
// stateOne = GlobalState({ initialValue: Uint64(45) })
17+
pushbytes "stateOne"
18+
pushint 45 // 45
19+
app_global_put
20+
21+
main_after_if_else@2:
22+
// tests/artifacts/multi-inheritance/contract.algo.ts:17
23+
// export class BaseOne extends CommonBase {
24+
txn NumAppArgs
25+
bz main_bare_routing@10
26+
pushbytess 0xc32533e3 0x455c8d09 0xf9f5142c // method "methodOne()string", method "methodCommon()string", method "b2CantOverride()string"
27+
txna ApplicationArgs 0
28+
match main_methodOne_route@5 main_methodCommon_route@6 main_b2CantOverride_route@7
29+
30+
main_after_if_else@14:
31+
// tests/artifacts/multi-inheritance/contract.algo.ts:17
32+
// export class BaseOne extends CommonBase {
33+
pushint 0 // 0
34+
return
35+
36+
main_b2CantOverride_route@7:
37+
// tests/artifacts/multi-inheritance/contract.algo.ts:12
38+
// b2CantOverride(): string {
39+
txn OnCompletion
40+
!
41+
assert // OnCompletion is not NoOp
42+
txn ApplicationID
43+
assert // can only call when not creating
44+
bytec_0 // 0x151f7c750006636f6d6d6f6e
45+
log
46+
intc_0 // 1
47+
return
48+
49+
main_methodCommon_route@6:
50+
// tests/artifacts/multi-inheritance/contract.algo.ts:8
51+
// methodCommon() {
52+
txn OnCompletion
53+
!
54+
assert // OnCompletion is not NoOp
55+
txn ApplicationID
56+
assert // can only call when not creating
57+
bytec_0 // 0x151f7c750006636f6d6d6f6e
58+
log
59+
intc_0 // 1
60+
return
61+
62+
main_methodOne_route@5:
63+
// tests/artifacts/multi-inheritance/contract.algo.ts:19
64+
// methodOne() {
65+
txn OnCompletion
66+
!
67+
assert // OnCompletion is not NoOp
68+
txn ApplicationID
69+
assert // can only call when not creating
70+
pushbytes 0x151f7c750008626173652d6f6e65
71+
log
72+
intc_0 // 1
73+
return
74+
75+
main_bare_routing@10:
76+
// tests/artifacts/multi-inheritance/contract.algo.ts:17
77+
// export class BaseOne extends CommonBase {
78+
txn OnCompletion
79+
bnz main_after_if_else@14
80+
txn ApplicationID
81+
!
82+
assert // can only call when creating
83+
intc_0 // 1
84+
return
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
{
2+
"hints": {
3+
"methodOne()string": {
4+
"call_config": {
5+
"no_op": "CALL"
6+
}
7+
},
8+
"methodCommon()string": {
9+
"call_config": {
10+
"no_op": "CALL"
11+
}
12+
},
13+
"b2CantOverride()string": {
14+
"call_config": {
15+
"no_op": "CALL"
16+
}
17+
}
18+
},
19+
"source": {
20+
"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gc3RhdGVPbmUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDQ1KSB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZU9uZSIKICAgIHB1c2hpbnQgNDUgLy8gNDUKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZU9uZSBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCiAgICBwdXNoYnl0ZXNzIDB4YzMyNTMzZTMgMHg0NTVjOGQwOSAweGY5ZjUxNDJjIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciLCBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIiwgbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9tZXRob2RPbmVfcm91dGVANSBtYWluX21ldGhvZENvbW1vbl9yb3V0ZUA2IG1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21ldGhvZENvbW1vbl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWV0aG9kT25lX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gbWV0aG9kT25lKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNmY2ZTY1CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=",
21+
"clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="
22+
},
23+
"state": {
24+
"global": {
25+
"num_byte_slices": 0,
26+
"num_uints": 2
27+
},
28+
"local": {
29+
"num_byte_slices": 0,
30+
"num_uints": 0
31+
}
32+
},
33+
"schema": {
34+
"global": {
35+
"declared": {
36+
"stateCommon": {
37+
"type": "uint64",
38+
"key": "stateCommon"
39+
},
40+
"stateOne": {
41+
"type": "uint64",
42+
"key": "stateOne"
43+
}
44+
},
45+
"reserved": {}
46+
},
47+
"local": {
48+
"declared": {},
49+
"reserved": {}
50+
}
51+
},
52+
"contract": {
53+
"name": "BaseOne",
54+
"methods": [
55+
{
56+
"name": "methodOne",
57+
"args": [],
58+
"readonly": false,
59+
"returns": {
60+
"type": "string"
61+
}
62+
},
63+
{
64+
"name": "methodCommon",
65+
"args": [],
66+
"readonly": false,
67+
"returns": {
68+
"type": "string"
69+
}
70+
},
71+
{
72+
"name": "b2CantOverride",
73+
"args": [],
74+
"readonly": false,
75+
"returns": {
76+
"type": "string"
77+
}
78+
}
79+
],
80+
"networks": {}
81+
},
82+
"bare_call_config": {
83+
"no_op": "CREATE"
84+
}
85+
}
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
{
2+
"name": "BaseOne",
3+
"structs": {},
4+
"methods": [
5+
{
6+
"name": "methodOne",
7+
"args": [],
8+
"returns": {
9+
"type": "string"
10+
},
11+
"actions": {
12+
"create": [],
13+
"call": [
14+
"NoOp"
15+
]
16+
},
17+
"readonly": false,
18+
"events": [],
19+
"recommendations": {}
20+
},
21+
{
22+
"name": "methodCommon",
23+
"args": [],
24+
"returns": {
25+
"type": "string"
26+
},
27+
"actions": {
28+
"create": [],
29+
"call": [
30+
"NoOp"
31+
]
32+
},
33+
"readonly": false,
34+
"events": [],
35+
"recommendations": {}
36+
},
37+
{
38+
"name": "b2CantOverride",
39+
"args": [],
40+
"returns": {
41+
"type": "string"
42+
},
43+
"actions": {
44+
"create": [],
45+
"call": [
46+
"NoOp"
47+
]
48+
},
49+
"readonly": false,
50+
"events": [],
51+
"recommendations": {}
52+
}
53+
],
54+
"arcs": [
55+
22,
56+
28
57+
],
58+
"networks": {},
59+
"state": {
60+
"schema": {
61+
"global": {
62+
"ints": 2,
63+
"bytes": 0
64+
},
65+
"local": {
66+
"ints": 0,
67+
"bytes": 0
68+
}
69+
},
70+
"keys": {
71+
"global": {
72+
"stateOne": {
73+
"keyType": "AVMString",
74+
"valueType": "AVMUint64",
75+
"key": "c3RhdGVPbmU="
76+
},
77+
"stateCommon": {
78+
"keyType": "AVMString",
79+
"valueType": "AVMUint64",
80+
"key": "c3RhdGVDb21tb24="
81+
}
82+
},
83+
"local": {},
84+
"box": {}
85+
},
86+
"maps": {
87+
"global": {},
88+
"local": {},
89+
"box": {}
90+
}
91+
},
92+
"bareActions": {
93+
"create": [
94+
"NoOp"
95+
],
96+
"call": []
97+
},
98+
"sourceInfo": {
99+
"approval": {
100+
"sourceInfo": [
101+
{
102+
"pc": [
103+
92,
104+
103,
105+
114
106+
],
107+
"errorMessage": "OnCompletion is not NoOp"
108+
},
109+
{
110+
"pc": [
111+
145
112+
],
113+
"errorMessage": "can only call when creating"
114+
},
115+
{
116+
"pc": [
117+
95,
118+
106,
119+
117
120+
],
121+
"errorMessage": "can only call when not creating"
122+
}
123+
],
124+
"pcOffsetMethod": "none"
125+
},
126+
"clear": {
127+
"sourceInfo": [],
128+
"pcOffsetMethod": "none"
129+
}
130+
},
131+
"source": {
132+
"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gc3RhdGVPbmUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDQ1KSB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZU9uZSIKICAgIHB1c2hpbnQgNDUgLy8gNDUKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZU9uZSBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCiAgICBwdXNoYnl0ZXNzIDB4YzMyNTMzZTMgMHg0NTVjOGQwOSAweGY5ZjUxNDJjIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciLCBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIiwgbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9tZXRob2RPbmVfcm91dGVANSBtYWluX21ldGhvZENvbW1vbl9yb3V0ZUA2IG1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21ldGhvZENvbW1vbl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWV0aG9kT25lX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gbWV0aG9kT25lKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNmY2ZTY1CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=",
133+
"clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="
134+
},
135+
"byteCode": {
136+
"approval": "CiABASYBDBUffHUABmNvbW1vbjEYQAAdgAtzdGF0ZUNvbW1vboF7Z4AIc3RhdGVPbmWBLWcxG0EAT4IDBMMlM+MERVyNCQT59RQsNhoAjgMAGQAOAAOBAEMxGRREMRhEKLAiQzEZFEQxGEQosCJDMRkURDEYRIAOFR98dQAIYmFzZS1vbmWwIkMxGUD/yDEYFEQiQw==",
137+
"clear": "CoEBQw=="
138+
},
139+
"compilerInfo": {
140+
"compiler": "puya",
141+
"compilerVersion": {
142+
"major": 4,
143+
"minor": 1,
144+
"patch": 1
145+
}
146+
},
147+
"events": [],
148+
"templateVariables": {}
149+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#pragma version 10
2+
#pragma typetrack false
3+
4+
// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64:
5+
main:
6+
pushint 1 // 1
7+
return

0 commit comments

Comments
 (0)