Hi sorry, again I, I have this error, calling the application like this:
ApplicationNoOpTxn(address, params, app_id, foreign_assets=[asa_id], app_args=[intToBytes(asa_id),bytes("put","utf-8")]
In the application I have no reference to indexes over the 1 for the application_args. I don’t really know what’s going on. Can anyone help me?
It looks like your application TEAL code is reading index 2, which is not allowed as you only have 3 arguments.
Can you try to dryrun your code using tealdbg
(Smart contract debugging - Algorand Developer Portal) or goal clerk dryrun-remote
(Make `goal clerk dryrun` directly work with application calls · Issue #1653 · algorand/go-algorand · GitHub)?
OK yes the error seems that, but I have no references to index 2… I will try to use the debugger, i see is in go, it exists also a python implementation included with py-algorand-sdk?
The tealdebugger
is just a tool you can use to verify a given dry-runned transaction against Smart Contracts’ logic, step by step. It doesn’t matter if the tool has been written in Go, this is just due to the fact that the Algorand’s node is written in Go. You can actually use Python SDK to create and sign the Application Call transactions you want to test against your PyTeal logic.
If your stack is based on Python, my personal advise is:
- Run the
sandbox
indev
mode, since this reduces debugging time - Deploy your PyTeal smart contract on the
sandbox
and get theAppID
- Create a set of
ApplicationCall
transactions with py-algorand-sdk associated with unit tests using PyTest - If a given unit test
ApplicationCall
fails, than write the failed unit test transaction to file $ ./sandbox copyTo unit_test_txn.signed
$ ./sandbox goal clerk dryrun -t unit_test_txn.signed --dryrun-dump -o unit_test.json
$ ./sandbox tealdbg debug --listen 0.0.0.0 -d unit_test.json