-
Notifications
You must be signed in to change notification settings - Fork 0
/
box_contract.py
98 lines (78 loc) · 2.15 KB
/
box_contract.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/env python3
import json
from pyteal import (
abi,
App,
Approve,
BareCallActions,
Bytes,
CallConfig,
Expr,
Int,
Itob,
Log,
OnCompleteAction,
Router,
Seq,
pragma,
)
pragma(compiler_version="^0.21.0")
CONTRACT_VERSION = 8
router = Router(
# Name of the contract
"box-demo",
# What to do for each on-complete type when no arguments are passed (bare call)
BareCallActions(
no_op=OnCompleteAction(action=Approve(), call_config=CallConfig.CREATE)
),
)
@router.method(no_op=CallConfig.CALL)
def create() -> Expr:
"""Create a box"""
return Seq(
# 44 byte box created with box_create
Log(Itob(App.box_create(Bytes("BoxA"), Int(44)))),
)
@router.method(no_op=CallConfig.CALL)
def put(value: abi.String) -> Expr:
"""Write to a box"""
return Seq(
# box created with box_put
App.box_put(Bytes("BoxA"), value.get()),
Approve(),
)
@router.method(no_op=CallConfig.CALL)
def read() -> Expr:
"""Read from a box"""
return Seq(
# App.box_put(Bytes("BoxA"), Bytes("Let's read some bytes")),
boxint := App.box_get(Bytes("BoxA")),
Log(boxint.value()),
)
@router.method(no_op=CallConfig.CALL)
def length() -> Expr:
"""Get the length a box value"""
return Seq(
# App.box_put(
# Bytes("BoxA"), Bytes("this is a test of a very very very very long string")
# ),
bt := App.box_length(Bytes("BoxA")),
Log(Itob(bt.value())),
)
@router.method(no_op=CallConfig.CALL)
def delete() -> Expr:
"""Delete a box"""
return Seq(
# App.box_put(
# Bytes("BoxA"), Bytes("this is a test of a very very very very long string")
# ),
Log(Itob(App.box_delete(Bytes("BoxA")))),
)
if __name__ == "__main__":
approval, clearstate, contract = router.compile_program(version=CONTRACT_VERSION)
with open("approve-box.teal", "w") as f:
f.write(approval)
with open("clear-box.teal", "w") as f:
f.write(clearstate)
with open("contract.json", "w") as f:
f.write(json.dumps(contract.dictify(), indent=4))