{ "name": "ExampleContract", "structs": { "UserStruct": [ { "name": "name", "type": "string" }, { "name": "id", "type": "uint64" }, { "name": "asset", "type": "uint64" } ] }, "methods": [ { "name": "add_user", "args": [ { "type": "(string,uint64,uint64)", "struct": "UserStruct", "name": "user" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "attach_asset_to_user", "args": [ { "type": "uint64", "name": "user_id" }, { "type": "asset", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_user", "args": [ { "type": "uint64", "name": "user_id" } ], "returns": { "type": "(string,uint64,uint64)", "struct": "UserStruct" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 116, 145 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ 43, 67, 88 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ 124 ], "errorMessage": "User with id must not exist" }, { "pc": [ 138, 160 ], "errorMessage": "User with that id does not exist" }, { "pc": [ 108 ], "errorMessage": "can only call when creating" }, { "pc": [ 46, 70, 91 ], "errorMessage": "can only call when not creating" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBjbGFzcyBFeGFtcGxlQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CiAgICBwdXNoYnl0ZXNzIDB4ZGE4NTM0YmQgMHg0ZWI0ZTlmMSAweDE2NTQ1ODgwIC8vIG1ldGhvZCAiYWRkX3VzZXIoKHN0cmluZyx1aW50NjQsdWludDY0KSl2b2lkIiwgbWV0aG9kICJhdHRhY2hfYXNzZXRfdG9fdXNlcih1aW50NjQsYXNzZXQpdm9pZCIsIG1ldGhvZCAiZ2V0X3VzZXIodWludDY0KShzdHJpbmcsdWludDY0LHVpbnQ2NCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2FkZF91c2VyX3JvdXRlQDMgbWFpbl9hdHRhY2hfYXNzZXRfdG9fdXNlcl9yb3V0ZUA0IG1haW5fZ2V0X3VzZXJfcm91dGVANQoKbWFpbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMAogICAgLy8gY2xhc3MgRXhhbXBsZUNvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX2dldF91c2VyX3JvdXRlQDU6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBjbGFzcyBFeGFtcGxlQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF91c2VyCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXR0YWNoX2Fzc2V0X3RvX3VzZXJfcm91dGVANDoKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTAKICAgIC8vIGNsYXNzIEV4YW1wbGVDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBhdHRhY2hfYXNzZXRfdG9fdXNlcgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRfdXNlcl9yb3V0ZUAzOgogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weTozMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMAogICAgLy8gY2xhc3MgRXhhbXBsZUNvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBhZGRfdXNlcgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTAKICAgIC8vIGNsYXNzIEV4YW1wbGVDb250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LkV4YW1wbGVDb250cmFjdC5hZGRfdXNlcih1c2VyOiBieXRlcykgLT4gdm9pZDoKYWRkX3VzZXI6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjMwLTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF91c2VyKHNlbGYsIHVzZXI6IFVzZXJTdHJ1Y3QpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzIKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5ib3hfZXhpc3RzKHVzZXIuaWQpLCAiVXNlciB3aXRoIGlkIG11c3Qgbm90IGV4aXN0IgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjcKICAgIC8vIF9kYXRhLCBleGlzdHMgPSBvcC5Cb3guZ2V0KHVzZXJfaWQuYnl0ZXMpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGJ1cnkgMQogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weTozMgogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmJveF9leGlzdHModXNlci5pZCksICJVc2VyIHdpdGggaWQgbXVzdCBub3QgZXhpc3QiCiAgICAhCiAgICBhc3NlcnQgLy8gVXNlciB3aXRoIGlkIG11c3Qgbm90IGV4aXN0CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjIwLTIxCiAgICAvLyAjIERlbGV0ZSBleGlzdGluZyBkYXRhLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHJlc2l6aW5nIHRoZSBib3gKICAgIC8vIG9wLkJveC5kZWxldGUoYm94X2tleSkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjIzCiAgICAvLyBvcC5Cb3gucHV0KGJveF9rZXksIHVzZXIuYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLnN0cnVjdF9pbl9ib3guY29udHJhY3QuRXhhbXBsZUNvbnRyYWN0LmF0dGFjaF9hc3NldF90b191c2VyKHVzZXJfaWQ6IGJ5dGVzLCBhc3NldDogdWludDY0KSAtPiB2b2lkOgphdHRhY2hfYXNzZXRfdG9fdXNlcjoKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzUtMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYXR0YWNoX2Fzc2V0X3RvX3VzZXIoc2VsZiwgdXNlcl9pZDogYXJjNC5VSW50NjQsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMwogICAgLy8gYm94X2RhdGEsIGV4aXN0cyA9IG9wLkJveC5nZXQodXNlcl9pZC5ieXRlcykKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgLy8gc3RydWN0X2luX2JveC9jb250cmFjdC5weToxNAogICAgLy8gYXNzZXJ0IGV4aXN0cywgIlVzZXIgd2l0aCB0aGF0IGlkIGRvZXMgbm90IGV4aXN0IgogICAgYXNzZXJ0IC8vIFVzZXIgd2l0aCB0aGF0IGlkIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjM4CiAgICAvLyB1c2VyLmFzc2V0ID0gYXJjNC5VSW50NjQoYXNzZXQuaWQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIHJlcGxhY2UyIDEwCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjE5CiAgICAvLyBib3hfa2V5ID0gdXNlci5pZC5ieXRlcwogICAgZHVwCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjAtMjEKICAgIC8vICMgRGVsZXRlIGV4aXN0aW5nIGRhdGEsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgcmVzaXppbmcgdGhlIGJveAogICAgLy8gb3AuQm94LmRlbGV0ZShib3hfa2V5KQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjMKICAgIC8vIG9wLkJveC5wdXQoYm94X2tleSwgdXNlci5ieXRlcykKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIGV4YW1wbGVzLnN0cnVjdF9pbl9ib3guY29udHJhY3QuRXhhbXBsZUNvbnRyYWN0LmdldF91c2VyKHVzZXJfaWQ6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X3VzZXI6CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjQxLTQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIGdldF91c2VyKHNlbGYsIHVzZXJfaWQ6IGFyYzQuVUludDY0KSAtPiBVc2VyU3RydWN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjEzCiAgICAvLyBib3hfZGF0YSwgZXhpc3RzID0gb3AuQm94LmdldCh1c2VyX2lkLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICAvLyBzdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjE0CiAgICAvLyBhc3NlcnQgZXhpc3RzLCAiVXNlciB3aXRoIHRoYXQgaWQgZG9lcyBub3QgZXhpc3QiCiAgICBhc3NlcnQgLy8gVXNlciB3aXRoIHRoYXQgaWQgZG9lcyBub3QgZXhpc3QKICAgIC8vIHN0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6NDMKICAgIC8vIHJldHVybiBzZWxmLnJlYWRfZnJvbV9ib3godXNlcl9pZCkKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CiABATEbQQBbggME2oU0vQROtOnxBBZUWIA2GgCOAwAwABsAA4EAQzEZFEQxGEQ2GgGIAGWABBUffHVMULAiQzEZFEQxGEQ2GgE2GgIXwDCIADEiQzEZFEQxGEQ2GgGIAA0iQzEZQP+8MRgURCJDigEAi/9XAghJvkUBFERJvEiL/7+JigIAi/6+RIv/FlwKSVcCCEm8SEy/iYoBAYv/vkSJ", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }