-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: Add example of struct in a box (#243)
- Loading branch information
1 parent
23f9bd2
commit b0530c1
Showing
20 changed files
with
2,510 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
from algopy import ARC4Contract, Asset, arc4, op, subroutine | ||
|
||
|
||
class UserStruct(arc4.Struct): | ||
name: arc4.String | ||
id: arc4.UInt64 | ||
asset: arc4.UInt64 | ||
|
||
|
||
class ExampleContract(ARC4Contract): | ||
|
||
@subroutine | ||
def read_from_box(self, user_id: arc4.UInt64) -> UserStruct: | ||
box_data, exists = op.Box.get(user_id.bytes) | ||
assert exists, "User with that id does not exist" | ||
return UserStruct.from_bytes(box_data) | ||
|
||
@subroutine | ||
def write_to_box(self, user: UserStruct) -> None: | ||
box_key = user.id.bytes | ||
# Delete existing data, so we don't have to worry about resizing the box | ||
op.Box.delete(box_key) | ||
|
||
op.Box.put(box_key, user.bytes) | ||
|
||
@subroutine | ||
def box_exists(self, user_id: arc4.UInt64) -> bool: | ||
_data, exists = op.Box.get(user_id.bytes) | ||
return exists | ||
|
||
@arc4.abimethod() | ||
def add_user(self, user: UserStruct) -> None: | ||
assert not self.box_exists(user.id), "User with id must not exist" | ||
self.write_to_box(user) | ||
|
||
@arc4.abimethod() | ||
def attach_asset_to_user(self, user_id: arc4.UInt64, asset: Asset) -> None: | ||
user = self.read_from_box(user_id) | ||
user.asset = arc4.UInt64(asset.id) | ||
self.write_to_box(user) | ||
|
||
@arc4.abimethod() | ||
def get_user(self, user_id: arc4.UInt64) -> UserStruct: | ||
return self.read_from_box(user_id) |
214 changes: 214 additions & 0 deletions
214
examples/struct_in_box/out/ExampleContract.approval.mir
Large diffs are not rendered by default.
Oops, something went wrong.
197 changes: 197 additions & 0 deletions
197
examples/struct_in_box/out/ExampleContract.approval.teal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,197 @@ | ||
#pragma version 10 | ||
|
||
examples.struct_in_box.contract.ExampleContract.approval_program: | ||
// struct_in_box/contract.py:10 | ||
// class ExampleContract(ARC4Contract): | ||
txn NumAppArgs | ||
bz main_bare_routing@7 | ||
method "add_user((string,uint64,uint64))void" | ||
method "attach_asset_to_user(uint64,asset)void" | ||
method "get_user(uint64)(string,uint64,uint64)" | ||
txna ApplicationArgs 0 | ||
match main_add_user_route@2 main_attach_asset_to_user_route@3 main_get_user_route@4 | ||
err // reject transaction | ||
|
||
main_add_user_route@2: | ||
// struct_in_box/contract.py:31 | ||
// @arc4.abimethod() | ||
txn OnCompletion | ||
! | ||
assert // OnCompletion is NoOp | ||
txn ApplicationID | ||
assert // is not creating | ||
// struct_in_box/contract.py:10 | ||
// class ExampleContract(ARC4Contract): | ||
txna ApplicationArgs 1 | ||
// struct_in_box/contract.py:31 | ||
// @arc4.abimethod() | ||
callsub add_user | ||
int 1 | ||
return | ||
|
||
main_attach_asset_to_user_route@3: | ||
// struct_in_box/contract.py:36 | ||
// @arc4.abimethod() | ||
txn OnCompletion | ||
! | ||
assert // OnCompletion is NoOp | ||
txn ApplicationID | ||
assert // is not creating | ||
// struct_in_box/contract.py:10 | ||
// class ExampleContract(ARC4Contract): | ||
txna ApplicationArgs 1 | ||
txna ApplicationArgs 2 | ||
btoi | ||
txnas Assets | ||
// struct_in_box/contract.py:36 | ||
// @arc4.abimethod() | ||
callsub attach_asset_to_user | ||
int 1 | ||
return | ||
|
||
main_get_user_route@4: | ||
// struct_in_box/contract.py:42 | ||
// @arc4.abimethod() | ||
txn OnCompletion | ||
! | ||
assert // OnCompletion is NoOp | ||
txn ApplicationID | ||
assert // is not creating | ||
// struct_in_box/contract.py:10 | ||
// class ExampleContract(ARC4Contract): | ||
txna ApplicationArgs 1 | ||
// struct_in_box/contract.py:42 | ||
// @arc4.abimethod() | ||
callsub get_user | ||
byte 0x151f7c75 | ||
swap | ||
concat | ||
log | ||
int 1 | ||
return | ||
|
||
main_bare_routing@7: | ||
// struct_in_box/contract.py:10 | ||
// class ExampleContract(ARC4Contract): | ||
txn OnCompletion | ||
! | ||
assert // reject transaction | ||
txn ApplicationID | ||
! | ||
assert // is creating | ||
int 1 | ||
return | ||
|
||
|
||
// examples.struct_in_box.contract.ExampleContract.add_user(user: bytes) -> void: | ||
add_user: | ||
// struct_in_box/contract.py:31-32 | ||
// @arc4.abimethod() | ||
// def add_user(self, user: UserStruct) -> None: | ||
proto 1 0 | ||
// struct_in_box/contract.py:33 | ||
// assert not self.box_exists(user.id), "User with id must not exist" | ||
frame_dig -1 | ||
extract 2 8 // on error: Index access is out of bounds | ||
callsub box_exists | ||
! | ||
assert // User with id must not exist | ||
// struct_in_box/contract.py:34 | ||
// self.write_to_box(user) | ||
frame_dig -1 | ||
callsub write_to_box | ||
frame_bury -1 | ||
retsub | ||
|
||
|
||
// examples.struct_in_box.contract.ExampleContract.box_exists(user_id: bytes) -> uint64: | ||
box_exists: | ||
// struct_in_box/contract.py:26-27 | ||
// @subroutine | ||
// def box_exists(self, user_id: arc4.UInt64) -> bool: | ||
proto 1 1 | ||
// struct_in_box/contract.py:28 | ||
// _data, exists = op.Box.get(user_id.bytes) | ||
frame_dig -1 | ||
box_get | ||
bury 1 | ||
// struct_in_box/contract.py:29 | ||
// return exists | ||
retsub | ||
|
||
|
||
// examples.struct_in_box.contract.ExampleContract.write_to_box(user: bytes) -> bytes: | ||
write_to_box: | ||
// struct_in_box/contract.py:18-19 | ||
// @subroutine | ||
// def write_to_box(self, user: UserStruct) -> None: | ||
proto 1 1 | ||
// struct_in_box/contract.py:20 | ||
// box_key = user.id.bytes | ||
frame_dig -1 | ||
extract 2 8 // on error: Index access is out of bounds | ||
// struct_in_box/contract.py:21-22 | ||
// # Delete existing data, so we don't have to worry about resizing the box | ||
// op.Box.delete(box_key) | ||
dup | ||
box_del | ||
pop | ||
// struct_in_box/contract.py:24 | ||
// op.Box.put(box_key, user.bytes) | ||
frame_dig -1 | ||
box_put | ||
frame_dig -1 | ||
retsub | ||
|
||
|
||
// examples.struct_in_box.contract.ExampleContract.attach_asset_to_user(user_id: bytes, asset: uint64) -> void: | ||
attach_asset_to_user: | ||
// struct_in_box/contract.py:36-37 | ||
// @arc4.abimethod() | ||
// def attach_asset_to_user(self, user_id: arc4.UInt64, asset: Asset) -> None: | ||
proto 2 0 | ||
// struct_in_box/contract.py:38 | ||
// user = self.read_from_box(user_id) | ||
frame_dig -2 | ||
callsub read_from_box | ||
// struct_in_box/contract.py:39 | ||
// user.asset = arc4.UInt64(asset.id) | ||
frame_dig -1 | ||
itob | ||
replace2 10 | ||
// struct_in_box/contract.py:40 | ||
// self.write_to_box(user) | ||
callsub write_to_box | ||
pop | ||
retsub | ||
|
||
|
||
// examples.struct_in_box.contract.ExampleContract.read_from_box(user_id: bytes) -> bytes: | ||
read_from_box: | ||
// struct_in_box/contract.py:12-13 | ||
// @subroutine | ||
// def read_from_box(self, user_id: arc4.UInt64) -> UserStruct: | ||
proto 1 1 | ||
// struct_in_box/contract.py:14 | ||
// box_data, exists = op.Box.get(user_id.bytes) | ||
frame_dig -1 | ||
box_get | ||
// struct_in_box/contract.py:15 | ||
// assert exists, "User with that id does not exist" | ||
assert // User with that id does not exist | ||
// struct_in_box/contract.py:16 | ||
// return UserStruct.from_bytes(box_data) | ||
retsub | ||
|
||
|
||
// examples.struct_in_box.contract.ExampleContract.get_user(user_id: bytes) -> bytes: | ||
get_user: | ||
// struct_in_box/contract.py:42-43 | ||
// @arc4.abimethod() | ||
// def get_user(self, user_id: arc4.UInt64) -> UserStruct: | ||
proto 1 1 | ||
// struct_in_box/contract.py:44 | ||
// return self.read_from_box(user_id) | ||
frame_dig -1 | ||
callsub read_from_box | ||
retsub |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
{ | ||
"hints": { | ||
"add_user((string,uint64,uint64))void": { | ||
"call_config": { | ||
"no_op": "CALL" | ||
}, | ||
"structs": { | ||
"user": { | ||
"name": "UserStruct", | ||
"elements": [ | ||
[ | ||
"name", | ||
"string" | ||
], | ||
[ | ||
"id", | ||
"uint64" | ||
], | ||
[ | ||
"asset", | ||
"uint64" | ||
] | ||
] | ||
} | ||
} | ||
}, | ||
"attach_asset_to_user(uint64,asset)void": { | ||
"call_config": { | ||
"no_op": "CALL" | ||
} | ||
}, | ||
"get_user(uint64)(string,uint64,uint64)": { | ||
"call_config": { | ||
"no_op": "CALL" | ||
}, | ||
"structs": { | ||
"output": { | ||
"name": "UserStruct", | ||
"elements": [ | ||
[ | ||
"name", | ||
"string" | ||
], | ||
[ | ||
"id", | ||
"uint64" | ||
], | ||
[ | ||
"asset", | ||
"uint64" | ||
] | ||
] | ||
} | ||
} | ||
} | ||
}, | ||
"source": { | ||
"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpleGFtcGxlcy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LkV4YW1wbGVDb250cmFjdC5hcHByb3ZhbF9wcm9ncmFtOgogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMAogICAgLy8gY2xhc3MgRXhhbXBsZUNvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwogICAgbWV0aG9kICJhZGRfdXNlcigoc3RyaW5nLHVpbnQ2NCx1aW50NjQpKXZvaWQiCiAgICBtZXRob2QgImF0dGFjaF9hc3NldF90b191c2VyKHVpbnQ2NCxhc3NldCl2b2lkIgogICAgbWV0aG9kICJnZXRfdXNlcih1aW50NjQpKHN0cmluZyx1aW50NjQsdWludDY0KSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYWRkX3VzZXJfcm91dGVAMiBtYWluX2F0dGFjaF9hc3NldF90b191c2VyX3JvdXRlQDMgbWFpbl9nZXRfdXNlcl9yb3V0ZUA0CiAgICBlcnIgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCgptYWluX2FkZF91c2VyX3JvdXRlQDI6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMAogICAgLy8gY2xhc3MgRXhhbXBsZUNvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBhZGRfdXNlcgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9hdHRhY2hfYXNzZXRfdG9fdXNlcl9yb3V0ZUAzOgogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTAKICAgIC8vIGNsYXNzIEV4YW1wbGVDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBhdHRhY2hfYXNzZXRfdG9fdXNlcgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9nZXRfdXNlcl9yb3V0ZUA0OgogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weTo0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTAKICAgIC8vIGNsYXNzIEV4YW1wbGVDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weTo0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgZ2V0X3VzZXIKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBjbGFzcyBFeGFtcGxlQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyByZWplY3QgdHJhbnNhY3Rpb24KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludCAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LkV4YW1wbGVDb250cmFjdC5hZGRfdXNlcih1c2VyOiBieXRlcykgLT4gdm9pZDoKYWRkX3VzZXI6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF91c2VyKHNlbGYsIHVzZXI6IFVzZXJTdHJ1Y3QpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzMKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5ib3hfZXhpc3RzKHVzZXIuaWQpLCAiVXNlciB3aXRoIGlkIG11c3Qgbm90IGV4aXN0IgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGNhbGxzdWIgYm94X2V4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIFVzZXIgd2l0aCBpZCBtdXN0IG5vdCBleGlzdAogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNAogICAgLy8gc2VsZi53cml0ZV90b19ib3godXNlcikKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiB3cml0ZV90b19ib3gKICAgIGZyYW1lX2J1cnkgLTEKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLnN0cnVjdF9pbl9ib3guY29udHJhY3QuRXhhbXBsZUNvbnRyYWN0LmJveF9leGlzdHModXNlcl9pZDogYnl0ZXMpIC0+IHVpbnQ2NDoKYm94X2V4aXN0czoKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjYtMjcKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYm94X2V4aXN0cyhzZWxmLCB1c2VyX2lkOiBhcmM0LlVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weToyOAogICAgLy8gX2RhdGEsIGV4aXN0cyA9IG9wLkJveC5nZXQodXNlcl9pZC5ieXRlcykKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYnVyeSAxCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjI5CiAgICAvLyByZXR1cm4gZXhpc3RzCiAgICByZXRzdWIKCgovLyBleGFtcGxlcy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LkV4YW1wbGVDb250cmFjdC53cml0ZV90b19ib3godXNlcjogYnl0ZXMpIC0+IGJ5dGVzOgp3cml0ZV90b19ib3g6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjE4LTE5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIHdyaXRlX3RvX2JveChzZWxmLCB1c2VyOiBVc2VyU3RydWN0KSAtPiBOb25lOgogICAgcHJvdG8gMSAxCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjIwCiAgICAvLyBib3hfa2V5ID0gdXNlci5pZC5ieXRlcwogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjEtMjIKICAgIC8vICMgRGVsZXRlIGV4aXN0aW5nIGRhdGEsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgcmVzaXppbmcgdGhlIGJveAogICAgLy8gb3AuQm94LmRlbGV0ZShib3hfa2V5KQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjQKICAgIC8vIG9wLkJveC5wdXQoYm94X2tleSwgdXNlci5ieXRlcykKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgZnJhbWVfZGlnIC0xCiAgICByZXRzdWIKCgovLyBleGFtcGxlcy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LkV4YW1wbGVDb250cmFjdC5hdHRhY2hfYXNzZXRfdG9fdXNlcih1c2VyX2lkOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXR0YWNoX2Fzc2V0X3RvX3VzZXI6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjM2LTM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIGF0dGFjaF9hc3NldF90b191c2VyKHNlbGYsIHVzZXJfaWQ6IGFyYzQuVUludDY0LCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzgKICAgIC8vIHVzZXIgPSBzZWxmLnJlYWRfZnJvbV9ib3godXNlcl9pZCkKICAgIGZyYW1lX2RpZyAtMgogICAgY2FsbHN1YiByZWFkX2Zyb21fYm94CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjM5CiAgICAvLyB1c2VyLmFzc2V0ID0gYXJjNC5VSW50NjQoYXNzZXQuaWQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIHJlcGxhY2UyIDEwCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjQwCiAgICAvLyBzZWxmLndyaXRlX3RvX2JveCh1c2VyKQogICAgY2FsbHN1YiB3cml0ZV90b19ib3gKICAgIHBvcAogICAgcmV0c3ViCgoKLy8gZXhhbXBsZXMuc3RydWN0X2luX2JveC5jb250cmFjdC5FeGFtcGxlQ29udHJhY3QucmVhZF9mcm9tX2JveCh1c2VyX2lkOiBieXRlcykgLT4gYnl0ZXM6CnJlYWRfZnJvbV9ib3g6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjEyLTEzCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIHJlYWRfZnJvbV9ib3goc2VsZiwgdXNlcl9pZDogYXJjNC5VSW50NjQpIC0+IFVzZXJTdHJ1Y3Q6CiAgICBwcm90byAxIDEKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTQKICAgIC8vIGJveF9kYXRhLCBleGlzdHMgPSBvcC5Cb3guZ2V0KHVzZXJfaWQuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBleGlzdHMsICJVc2VyIHdpdGggdGhhdCBpZCBkb2VzIG5vdCBleGlzdCIKICAgIGFzc2VydCAvLyBVc2VyIHdpdGggdGhhdCBpZCBkb2VzIG5vdCBleGlzdAogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weToxNgogICAgLy8gcmV0dXJuIFVzZXJTdHJ1Y3QuZnJvbV9ieXRlcyhib3hfZGF0YSkKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLnN0cnVjdF9pbl9ib3guY29udHJhY3QuRXhhbXBsZUNvbnRyYWN0LmdldF91c2VyKHVzZXJfaWQ6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X3VzZXI6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjQyLTQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIGdldF91c2VyKHNlbGYsIHVzZXJfaWQ6IGFyYzQuVUludDY0KSAtPiBVc2VyU3RydWN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjQ0CiAgICAvLyByZXR1cm4gc2VsZi5yZWFkX2Zyb21fYm94KHVzZXJfaWQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgcmVhZF9mcm9tX2JveAogICAgcmV0c3ViCg==", | ||
"clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpleGFtcGxlcy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LkV4YW1wbGVDb250cmFjdC5jbGVhcl9zdGF0ZV9wcm9ncmFtOgogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMAogICAgLy8gY2xhc3MgRXhhbXBsZUNvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICBpbnQgMQogICAgcmV0dXJuCg==" | ||
}, | ||
"state": { | ||
"global": { | ||
"num_byte_slices": 0, | ||
"num_uints": 0 | ||
}, | ||
"local": { | ||
"num_byte_slices": 0, | ||
"num_uints": 0 | ||
} | ||
}, | ||
"schema": { | ||
"global": { | ||
"declared": {}, | ||
"reserved": {} | ||
}, | ||
"local": { | ||
"declared": {}, | ||
"reserved": {} | ||
} | ||
}, | ||
"contract": { | ||
"name": "ExampleContract", | ||
"methods": [ | ||
{ | ||
"name": "add_user", | ||
"args": [ | ||
{ | ||
"type": "(string,uint64,uint64)", | ||
"name": "user" | ||
} | ||
], | ||
"returns": { | ||
"type": "void" | ||
} | ||
}, | ||
{ | ||
"name": "attach_asset_to_user", | ||
"args": [ | ||
{ | ||
"type": "uint64", | ||
"name": "user_id" | ||
}, | ||
{ | ||
"type": "asset", | ||
"name": "asset" | ||
} | ||
], | ||
"returns": { | ||
"type": "void" | ||
} | ||
}, | ||
{ | ||
"name": "get_user", | ||
"args": [ | ||
{ | ||
"type": "uint64", | ||
"name": "user_id" | ||
} | ||
], | ||
"returns": { | ||
"type": "(string,uint64,uint64)" | ||
} | ||
} | ||
], | ||
"networks": {} | ||
}, | ||
"bare_call_config": { | ||
"no_op": "CREATE" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
// Op // Stack (out) Source code Source line | ||
|
||
#pragma version 10 | ||
|
||
// examples.struct_in_box.contract.ExampleContract.clear_state_program() -> uint64: | ||
main_block@0: | ||
int 1 // 1 class ExampleContract(ARC4Contract): struct_in_box/contract.py:10 | ||
return // class ExampleContract(ARC4Contract): struct_in_box/contract.py:10 | ||
|
Oops, something went wrong.