diff --git a/docs/html/_sources/apidocs/algokit_utils/algokit_utils.md.txt b/docs/html/_sources/apidocs/algokit_utils/algokit_utils.md.txt index 3978f1b..be0e90b 100644 --- a/docs/html/_sources/apidocs/algokit_utils/algokit_utils.md.txt +++ b/docs/html/_sources/apidocs/algokit_utils/algokit_utils.md.txt @@ -1795,7 +1795,7 @@ Bases: {py:obj}`algokit_utils._transfer.TransferParametersBase` ```` -````{py:function} persist_sourcemaps(*, sources: list[algokit_utils._debugging.PersistSourceMapInput], project_root: pathlib.Path, client: algosdk.v2client.algod.AlgodClient, with_sources: bool = True) -> None +````{py:function} persist_sourcemaps(*, sources: list[algokit_utils._debugging.PersistSourceMapInput], project_root: pathlib.Path, client: algosdk.v2client.algod.AlgodClient, with_sources: bool = True, persist_mappings: bool = False) -> None :canonical: algokit_utils._debugging.persist_sourcemaps ```{autodoc2-docstring} algokit_utils._debugging.persist_sourcemaps diff --git a/docs/html/_sources/capabilities/debugger.md.txt b/docs/html/_sources/capabilities/debugger.md.txt index 96ff7d2..ac23a73 100644 --- a/docs/html/_sources/capabilities/debugger.md.txt +++ b/docs/html/_sources/capabilities/debugger.md.txt @@ -6,11 +6,11 @@ The AlgoKit Python Utilities package provides a set of debugging tools that can The `config.py` file contains the `UpdatableConfig` class which manages and updates configuration settings for the AlgoKit project. The class has the following attributes: -- `debug`: Indicates whether debug mode is enabled. -- `project_root`: The path to the project root directory. Can be ignored if you are using `algokit_utils` inside an `algokit` compliant project (containing `.algokit.toml` file). For non algokit compliant projects, simply provide the path to the folder where you want to store sourcemaps and traces to be used with [`AlgoKit AVM Debugger`](https://github.com/algorandfoundation/algokit-avm-vscode-debugger). Alternatively you can also set the value via the `ALGOKIT_PROJECT_ROOT` environment variable. -- `trace_all`: Indicates whether to trace all operations. Defaults to false, this means that when debug mode is enabled, any (or all) application client calls performed via `algokit_utils` will store responses from `simulate` endpoint. These files are called traces, and can be used with `AlgoKit AVM Debugger` to debug TEAL source codes, transactions in the atomic group and etc. -- `trace_buffer_size_mb`: The size of the trace buffer in megabytes. By default uses 256 megabytes. When output folder containing debug trace files exceedes the size, oldest files are removed to optimize for storage consumption. -- `max_search_depth`: The maximum depth to search for a an `algokit` config file. By default it will traverse at most 10 folders searching for `.algokit.toml` file which will be used to assume algokit compliant project root path. +- `debug`: Indicates whether debug mode is enabled. +- `project_root`: The path to the project root directory. Can be ignored if you are using `algokit_utils` inside an `algokit` compliant project (containing `.algokit.toml` file). For non algokit compliant projects, simply provide the path to the folder where you want to store sourcemaps and traces to be used with [`AlgoKit AVM Debugger`](https://github.com/algorandfoundation/algokit-avm-vscode-debugger). Alternatively you can also set the value via the `ALGOKIT_PROJECT_ROOT` environment variable. +- `trace_all`: Indicates whether to trace all operations. Defaults to false, this means that when debug mode is enabled, any (or all) application client calls performed via `algokit_utils` will store responses from `simulate` endpoint. These files are called traces, and can be used with `AlgoKit AVM Debugger` to debug TEAL source codes, transactions in the atomic group and etc. +- `trace_buffer_size_mb`: The size of the trace buffer in megabytes. By default uses 256 megabytes. When output folder containing debug trace files exceedes the size, oldest files are removed to optimize for storage consumption. +- `max_search_depth`: The maximum depth to search for a an `algokit` config file. By default it will traverse at most 10 folders searching for `.algokit.toml` file which will be used to assume algokit compliant project root path. The `configure` method can be used to set these attributes. @@ -26,8 +26,7 @@ config.configure(debug=True) Debugging utilities can be used to simplify gathering artifacts to be used with [AlgoKit AVM Debugger](https://github.com/algorandfoundation/algokit-avm-vscode-debugger) in non algokit compliant projects. The following methods are provided: -- `persist_sourcemaps`: This method persists the sourcemaps for the given sources as AVM Debugger compliant artifacts. It takes a list of `PersistSourceMapInput` objects, a `Path` object representing the root directory of the project, an `AlgodClient` object for interacting with the Algorand blockchain, and a boolean indicating whether to dump teal source files along with sourcemaps. -- `simulate_and_persist_response`: This method simulates the atomic transactions using the provided `AtomicTransactionComposer` object and `AlgodClient` object, and persists the simulation response to an AVM Debugger compliant JSON file. It takes an `AtomicTransactionComposer` object representing the atomic transactions to be simulated and persisted, a `Path` object representing the root directory of the project, an `AlgodClient` object representing the Algorand client, and a float representing the size of the trace buffer in megabytes. +- `simulate_and_persist_response`: This method simulates the atomic transactions using the provided `AtomicTransactionComposer` object and `AlgodClient` object, and persists the simulation response to an AVM Debugger compliant JSON file. It takes an `AtomicTransactionComposer` object representing the atomic transactions to be simulated and persisted, a `Path` object representing the root directory of the project, an `AlgodClient` object representing the Algorand client, and a float representing the size of the trace buffer in megabytes. ### Trace filename format @@ -39,8 +38,8 @@ The trace files are named in a specific format to provide useful information abo Where: -- `timestamp`: The time when the trace file was created, in ISO 8601 format, with colons and periods removed. -- `last_round`: The last round when the simulation was performed. -- `transaction_types`: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as `${count}#${type}`, and different transaction types are separated by underscores. +- `timestamp`: The time when the trace file was created, in ISO 8601 format, with colons and periods removed. +- `last_round`: The last round when the simulation was performed. +- `transaction_types`: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as `${count}${type}`, and different transaction types are separated by underscores. -For example, a trace file might be named `20220301T123456Z_lr1000_2#pay_1#axfer.trace.avm.json`, indicating that the trace file was created at `2022-03-01T12:34:56Z`, the last round was `1000`, and the atomic group contained 2 payment transactions and 1 asset transfer transaction. +For example, a trace file might be named `20220301T123456Z_lr1000_2pay_1axfer.trace.avm.json`, indicating that the trace file was created at `2022-03-01T12:34:56Z`, the last round was `1000`, and the atomic group contained 2 payment transactions and 1 asset transfer transaction. diff --git a/docs/html/apidocs/algokit_utils/algokit_utils.html b/docs/html/apidocs/algokit_utils/algokit_utils.html index a68215d..7f3df1e 100644 --- a/docs/html/apidocs/algokit_utils/algokit_utils.html +++ b/docs/html/apidocs/algokit_utils/algokit_utils.html @@ -1534,14 +1534,16 @@

Example
-algokit_utils.persist_sourcemaps(*, sources: list[algokit_utils._debugging.PersistSourceMapInput], project_root: pathlib.Path, client: algosdk.v2client.algod.AlgodClient, with_sources: bool = True) None
+algokit_utils.persist_sourcemaps(*, sources: list[algokit_utils._debugging.PersistSourceMapInput], project_root: pathlib.Path, client: algosdk.v2client.algod.AlgodClient, with_sources: bool = True, persist_mappings: bool = False) None

Persist the sourcemaps for the given sources as an AlgoKit AVM Debugger compliant artifacts. Args: sources (list[PersistSourceMapInput]): A list of PersistSourceMapInput objects. project_root (Path): The root directory of the project. client (AlgodClient): An AlgodClient object for interacting with the Algorand blockchain. with_sources (bool): If True, it will dump teal source files along with sourcemaps. -Default is True, as needed by an AlgoKit AVM debugger.

+Default is True, as needed by an AlgoKit AVM debugger. +persist_mappings (bool): Enables legacy behavior of persisting the sources.avm.json mappings to +the project root. Default is False, given that the AlgoKit AVM VSCode extension will manage the mappings.

diff --git a/docs/html/capabilities/debugger.html b/docs/html/capabilities/debugger.html index 1e0b495..c64952c 100644 --- a/docs/html/capabilities/debugger.html +++ b/docs/html/capabilities/debugger.html @@ -110,7 +110,6 @@

Configuration

Debugging utilities can be used to simplify gathering artifacts to be used with AlgoKit AVM Debugger in non algokit compliant projects. The following methods are provided:

@@ -123,9 +122,9 @@

Trace filename format
  • timestamp: The time when the trace file was created, in ISO 8601 format, with colons and periods removed.

  • last_round: The last round when the simulation was performed.

  • -
  • transaction_types: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as ${count}#${type}, and different transaction types are separated by underscores.

  • +
  • transaction_types: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as ${count}${type}, and different transaction types are separated by underscores.

  • -

    For example, a trace file might be named 20220301T123456Z_lr1000_2#pay_1#axfer.trace.avm.json, indicating that the trace file was created at 2022-03-01T12:34:56Z, the last round was 1000, and the atomic group contained 2 payment transactions and 1 asset transfer transaction.

    +

    For example, a trace file might be named 20220301T123456Z_lr1000_2pay_1axfer.trace.avm.json, indicating that the trace file was created at 2022-03-01T12:34:56Z, the last round was 1000, and the atomic group contained 2 payment transactions and 1 asset transfer transaction.

    diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js index 7eb88cf..f6f87f5 100644 --- a/docs/html/searchindex.js +++ b/docs/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["apidocs/algokit_utils/algokit_utils", "capabilities/account", "capabilities/app-client", "capabilities/app-deploy", "capabilities/client", "capabilities/debugger", "capabilities/dispenser-client", "capabilities/transfer", "index"], "filenames": ["apidocs/algokit_utils/algokit_utils.md", "capabilities/account.md", "capabilities/app-client.md", "capabilities/app-deploy.md", "capabilities/client.md", "capabilities/debugger.md", "capabilities/dispenser-client.md", "capabilities/transfer.md", "index.md"], "titles": ["algokit_utils", "Account management", "App client", "App deployment", "Client management", "Debugger", "TestNet Dispenser Client", "Algo transfers", "AlgoKit Python Utilities"], "terms": {"appspecstatedict": 0, "typealia": 0, "none": [0, 2, 4, 7], "type": [0, 2, 5, 6], "defin": [0, 2, 3, 8], "applic": [0, 5, 8], "specif": [0, 2, 5], "state": [0, 3, 8], "entri": 0, "deletable_template_nam": 0, "templat": [0, 2, 8], "variabl": [0, 1, 2, 4, 5, 6, 7, 8], "name": [0, 1, 2, 3, 5], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8], "control": [0, 3, 8], "smart": [0, 2, 3, 5, 8], "contract": [0, 2, 3, 5, 8], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8], "delet": [0, 2, 3], "deploy": [0, 2, 7, 8], "defaultargumenttyp": 0, "liter": 0, "valu": [0, 2, 5, 7], "describ": [0, 3], "default": [0, 1, 2, 4, 5, 7, 8], "argument": [0, 6], "sourc": [0, 2, 5], "methodconfigdict": 0, "dictionari": [0, 2], "dict": 0, "oncompletionactionnam": 0, "callconfig": 0, "repres": [0, 1, 5], "allow": [0, 1, 2, 3, 4, 7], "action": [0, 2, 3], "each": [0, 5, 6], "complet": [0, 2, 8], "note_prefix": 0, "algokit_deploy": [0, 3], "j": [0, 3], "arc": [0, 2, 3, 8], "0002": 0, "compliant": [0, 5], "note": [0, 2, 3, 7], "prefix": 0, "deploi": [0, 1, 2, 8], "oncompleteactionnam": 0, "string": [0, 2, 3, 5, 7], "transact": [0, 1, 3, 5, 6, 7, 8], "templatevaluedict": 0, "str": [0, 2], "int": 0, "byte": [0, 3], "templatevaluemap": 0, "map": [0, 2, 3], "updatable_template_nam": 0, "updat": [0, 2, 3, 5], "abicallarg": 0, "base": [0, 1, 2, 3, 4], "deploycallarg": 0, "abical": 0, "abi": 0, "paramet": [0, 7], "an": [0, 1, 4, 5, 7, 8], "when": [0, 1, 2, 3, 5, 7], "call": [0, 3, 5, 7, 8], "abicallargsdict": 0, "deploycallargsdict": 0, "typeddict": 0, "initi": [0, 6, 7, 8], "self": 0, "see": [0, 2, 3, 4, 6, 7], "help": [0, 3, 8], "accur": 0, "signatur": [0, 2], "abicreatecallarg": 0, "deploycreatecallarg": 0, "creat": [0, 1, 3, 4, 5, 8], "abicreatecallargsdict": 0, "deploycreatecallargsdict": 0, "abitransactionrespons": [0, 3], "model": 0, "transactionrespons": [0, 3], "gener": [0, 2, 7, 8], "returntyp": 0, "respons": [0, 2, 5, 6], "decode_error": 0, "except": [0, 2, 6], "detail": [0, 2, 6], "error": [0, 8], "occur": [0, 2, 6], "attempt": [0, 2, 7], "decod": 0, "raw_valu": 0, "method": [0, 1, 3, 5, 6, 8], "algosdk": [0, 1, 2, 4], "make": [0, 2, 6, 7, 8], "The": [0, 2, 3, 4, 5, 6, 7, 8], "raw": [0, 2], "befor": [0, 2], "return_valu": 0, "result": [0, 2, 3], "tx_info": 0, "account": [0, 2, 7, 8], "hold": [0, 3], "private_kei": [0, 1], "address": [0, 1, 2, 6, 7], "field": [0, 3, 6, 7], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8], "base64": 0, "encod": [0, 3], "privat": [0, 1, 7], "kei": [0, 1, 2, 3, 7], "properti": [0, 1], "public_kei": [0, 1], "public": 0, "signer": [0, 1, 2, 3, 7, 8], "atomic_transaction_compos": [0, 2], "accounttransactionsign": [0, 7], "algoclientconfig": [0, 4], "connect": 0, "v2client": [0, 4], "algod": [0, 3, 4, 7, 8], "algodcli": [0, 2, 4, 5], "index": [0, 2, 3, 4, 8], "indexercli": [0, 4], "server": [0, 4], "url": 0, "servic": [0, 1, 4, 7], "e": [0, 2, 3, 4, 7, 8], "g": [0, 2, 3, 4, 8], "http": [0, 4], "localhost": 0, "4001": 0, "testnet": [0, 1, 3, 4, 7, 8], "api": [0, 6, 7, 8], "algonod": 0, "cloud": 0, "token": [0, 4, 6, 7], "authent": 0, "appdeploymetadata": 0, "metadata": [0, 3], "about": [0, 5], "store": [0, 5, 7], "dure": [0, 2, 3, 7], "creation": [0, 3, 8], "serial": 0, "json": [0, 5], "part": [0, 8], "applicationcli": [0, 2, 3], "applookup": [0, 3], "cach": 0, "appmetadata": [0, 3], "creator": [0, 2, 8], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8], "reduc": 0, "number": [0, 2, 3, 4, 7, 8], "multipl": [0, 2, 3], "app": [0, 7, 8], "discov": 0, "app_id": [0, 2], "apprefer": 0, "inform": [0, 2, 5], "algorand": [0, 3, 5, 8], "algod_cli": [0, 2, 7], "app_spec": [0, 2, 3], "application_specif": 0, "applicationspecif": [0, 2], "pathlib": 0, "path": [0, 5], "0": [0, 2, 3, 6, 7], "indexer_cli": 0, "existing_deploy": 0, "transactionsign": [0, 2], "sender": [0, 1, 2, 3, 6], "suggested_param": [0, 2, 7], "suggestedparam": [0, 2, 7], "template_valu": [0, 2, 3], "app_nam": [0, 2], "A": [0, 2, 5, 8], "wrap": [0, 2, 8], "0032": [0, 2, 3, 8], "spec": [0, 2, 8], "provid": [0, 1, 2, 3, 4, 5, 6, 7, 8], "high": [0, 2, 8], "product": [0, 2, 8], "interact": [0, 5, 6], "exist": [0, 1, 2, 3, 4], "altern": [0, 2, 5], "specifi": [0, 3, 4, 7, 8], "find": [0, 2, 7, 8], "client": [0, 5, 7, 8], "one": [0, 1, 2, 3, 4], "instead": [0, 2, 3], "resolv": [0, 1, 3, 4, 8], "onli": [0, 1, 2, 3], "requir": [0, 2, 6, 7], "sign": [0, 1, 2], "wa": [0, 3, 5, 7], "pass": [0, 2, 6], "all": [0, 2, 3, 5, 8], "associ": [0, 1, 2], "tmpl_": [0, 2, 3], "should": [0, 2, 3, 7], "NOT": 0, "includ": [0, 2, 3, 7, 8], "add_method_cal": 0, "atc": [0, 2], "atomictransactioncompos": [0, 2, 5], "abi_method": 0, "abimethod": 0, "bool": 0, "abi_arg": 0, "abiargsdict": 0, "transactionparamet": 0, "transactionparametersdict": 0, "on_complet": [0, 2], "oncomplet": 0, "noopoc": 0, "local_schema": 0, "stateschema": 0, "global_schema": 0, "approval_program": 0, "clear_program": 0, "extra_pag": [0, 2], "app_arg": 0, "list": [0, 2, 5], "call_config": 0, "au_spec": 0, "add": [0, 3, 8], "call_abi_method": [0, 2], "transaction_paramet": [0, 2], "oncompletecallparamet": [0, 2], "oncompletecallparametersdict": 0, "abi_kwarg": 0, "abiargtyp": 0, "submit": 0, "clear_stat": [0, 2], "clearstat": 0, "close_out": [0, 2], "closeout": 0, "compose_cal": [0, 2], "compose_clear_st": 0, "compose_close_out": 0, "ac": 0, "compose_cr": 0, "createcallparamet": [0, 2], "createcallparametersdict": 0, "id": [0, 2, 3, 6, 7, 8], "schema": [0, 3], "": [0, 2, 3, 6, 7, 8], "compose_delet": 0, "deleteappl": 0, "compose_opt_in": 0, "optin": 0, "compose_upd": 0, "updateappl": 0, "version": [0, 3], "allow_upd": [0, 3], "allow_delet": [0, 3], "on_upd": [0, 3], "onupd": 0, "au_deploi": 0, "fail": [0, 2, 3], "on_schema_break": [0, 3], "onschemabreak": 0, "create_arg": [0, 3], "update_arg": [0, 3], "delete_arg": [0, 3], "deployrespons": [0, 3], "refer": [0, 2, 3, 6, 7], "idempot": [0, 1, 7, 8], "chang": [0, 3], "against": [0, 1, 3, 4, 7, 8], "given": [0, 1, 2, 3, 4, 5], "via": [0, 2, 3, 5, 6, 7, 8], "time": [0, 1, 3, 5, 8], "placehold": 0, "substitut": [0, 8], "To": [0, 2, 3, 4, 5, 6, 7, 8], "understand": [0, 2], "architectur": [0, 3], "decis": [0, 3], "behind": [0, 3], "pleas": [0, 7], "github": 0, "com": [0, 4], "algorandfound": 0, "algokit": [0, 1, 2, 3, 4, 5, 6, 7], "cli": [0, 7], "blob": 0, "main": 0, "doc": [0, 6, 8], "2023": 0, "01": 0, "12_smart": 0, "md": 0, "If": [0, 1, 2, 3, 6, 7, 8], "break": [0, 3], "set": [0, 2, 3, 5, 6, 7, 8], "replaceapp": 0, "re": [0, 1, 2], "differ": [0, 3, 4, 5, 7], "teal": [0, 2, 3, 5, 8], "code": [0, 1, 3, 5, 6, 8], "auto": [0, 8], "increment": [0, 3], "tmpl_delet": [0, 2, 3], "condition": 0, "tmpl_updat": [0, 2, 3], "determin": [0, 3, 7], "what": [0, 2, 3], "take": [0, 2, 3, 4, 5, 6, 7], "ha": [0, 2, 3, 5, 7, 8], "increas": 0, "beyond": 0, "current": [0, 2, 3, 7, 8], "alloc": [0, 2], "return": [0, 1, 2, 4, 6, 7], "taken": [0, 3], "relev": 0, "rais": [0, 6], "deploymenterror": 0, "export_source_map": [0, 2], "export": [0, 2], "approv": [0, 2], "later": 0, "import": [0, 2, 5, 6, 8], "import_source_map": [0, 2], "get_global_st": [0, 2], "fals": [0, 2, 5], "get": [0, 1, 2, 4, 7, 8], "global": [0, 2, 3], "info": 0, "get_local_st": [0, 2], "local": [0, 1, 2, 3], "get_signer_send": 0, "tupl": [0, 2], "Will": 0, "otherwis": [0, 2, 3, 7], "fall": 0, "back": [0, 6], "obtain": [0, 1, 2, 6], "from": [0, 1, 2, 3, 4, 5, 6, 8], "source_map_json": 0, "opt_in": [0, 2], "prepar": 0, "application_cli": 0, "copi": 0, "new": [0, 1, 2, 3], "also": [0, 2, 3, 5], "to_resolv": 0, "defaultargumentdict": 0, "resolve_signer_send": 0, "valueerror": 0, "variant": [0, 2], "pull": 0, "150": 0, "directori": [0, 5], "write": [0, 3, 8], "out": [0, 2, 3, 4, 7], "artifact": [0, 5], "disk": 0, "arg": [0, 3], "option": [0, 2, 3, 4, 7], "where": [0, 2, 5, 8], "written": [0, 8], "enum": 0, "intflag": 0, "3": [0, 2], "handl": [0, 8], "both": [0, 2, 6], "normal": 0, "1": [0, 2, 3, 5], "2": [0, 2, 3, 5], "never": 0, "addit": [0, 1, 2, 8], "createtransactionparamet": 0, "defaultargu": 0, "contain": [0, 1, 2, 3, 5, 6, 8], "ani": [0, 2, 3, 4, 5, 6, 8], "mai": [0, 2], "prior": [0, 7], "some": [0, 1, 2, 3, 4, 7], "target": 0, "relat": 0, "ensurebalanceparamet": [0, 7], "ensur": [0, 8], "minimum": [0, 8], "\u00b5algo": 0, "account_to_fund": [0, 7], "receiv": [0, 6, 7], "fee_micro_algo": [0, 7], "flat": [0, 7], "fee": [0, 2, 7], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8], "want": [0, 5, 7, 8], "pai": [0, 7], "cover": [0, 7], "extra": [0, 7], "group": [0, 5, 7], "funding_sourc": [0, 7], "dispenser_api": 0, "testnetdispenserapicli": [0, 6, 7], "send": [0, 6, 7], "get_dispenser_account": [0, 1, 7], "instanc": [0, 1, 2, 3, 4, 7], "which": [0, 3, 5, 6, 7, 8], "dispens": [0, 1, 8], "max_fee_micro_algo": [0, 7], "maximum": [0, 5, 7], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8], "happi": [0, 7], "unbound": [0, 7], "possibl": [0, 2, 7, 8], "could": [0, 7], "reject": [0, 7], "network": [0, 2, 3, 7, 8], "congest": [0, 7], "min_funding_increment_micro_algo": [0, 7], "issu": [0, 2, 6, 7, 8], "fund": [0, 1, 7, 8], "amount": [0, 2, 6, 7], "transfer": [0, 5, 8], "avoid": [0, 7], "mani": [0, 7], "small": [0, 7], "often": [0, 2, 7], "activ": [0, 2, 7], "min_spending_balance_micro_algo": [0, 7], "balanc": [0, 7], "algo": [0, 1, 6, 8], "have": [0, 1, 2, 3, 4, 7, 8], "avail": [0, 2, 7, 8], "spend": [0, 7], "top": [0, 3, 7, 8], "meet": [0, 7], "ensurefundedrespons": [0, 7], "transaction_id": [0, 2, 6], "were": 0, "methodhint": 0, "hint": [0, 8], "caller": 0, "how": [0, 6], "kwd": 0, "appendapp": 0, "old": 0, "singl": [0, 2, 3], "been": [0, 2, 3, 8], "updateapp": 0, "clear": [0, 2], "program": [0, 2], "operationperform": 0, "No": 0, "found": [0, 3], "noth": [0, 3, 8], "replac": [0, 2, 3], "date": [0, 3], "origin": [0, 2, 3], "latest": 0, "compil": [0, 2], "fulli": 0, "binari": 0, "match": 0, "pc": [0, 2], "line": [0, 2], "auth_token": [0, 6], "request_timeout": 0, "dispenser_request_timeout": 0, "start": 0, "access": [0, 2, 7], "login": 0, "ci": 0, "constructor": [0, 6], "environ": [0, 1, 3, 4, 5, 6, 7, 8], "algokit_dispenser_access_token": [0, 6, 7], "load": [0, 1, 4], "preced": [0, 6], "request": [0, 3, 6], "timeout": 0, "15": 0, "second": 0, "modifi": 0, "asset_id": [0, 6, 7], "dispenserfundrespons": 0, "get_limit": [0, 6], "dispenserlimitrespons": 0, "limit": [0, 8], "refund": [0, 8], "refund_txn_id": [0, 6], "regist": [0, 8], "box": [0, 2, 3], "collect": 0, "abc": 0, "sequenc": [0, 2], "bytearrai": 0, "foreign_app": [0, 2], "foreign": [0, 2], "foreign_asset": [0, 2], "asset": [0, 2, 5, 6, 8], "leas": [0, 2], "rekey_to": 0, "rekei": 0, "non": [0, 3, 5], "confirmed_round": 0, "round": [0, 5], "confirm": 0, "dry": 0, "run": [0, 4, 7], "static": [0, 3], "from_atr": 0, "atomictransactionrespons": 0, "simulateatomictransactionrespons": 0, "transaction_index": 0, "either": [0, 1, 2, 3, 4], "more": [0, 2, 3, 7], "last": [0, 3, 5], "tx_id": [0, 6], "transferassetparamet": [0, 7], "_transfer": 0, "transferparametersbas": 0, "between": [0, 7, 8], "clawback_from": 0, "perform": [0, 3, 5, 6], "clawback": 0, "oper": [0, 3, 5], "case": [0, 3, 7, 8], "senderaccount": 0, "must": [0, 2, 3], "equal": 0, "asa": 0, "transferparamet": [0, 7], "create_kmd_wallet_account": [0, 1], "kmd_client": 0, "kmd": [0, 1, 4, 7, 8], "kmdclient": [0, 4], "wallet": [0, 1], "ensure_fund": [0, 7], "_ensure_fund": 0, "certain": 0, "free": 0, "lock": 0, "develop": [0, 2, 3, 5, 8], "org": 0, "librari": [0, 8], "paymenttxn": 0, "need": [0, 2, 3, 4, 5, 6, 7, 8], "payment": [0, 5, 6, 7], "indic": [0, 2, 3, 5, 6], "execute_atc_with_logic_error": 0, "wait_round": 0, "4": [0, 2], "approval_source_map": [0, 2], "source_map": [0, 2], "sourcemap": [0, 2, 5], "callabl": 0, "execut": [0, 2, 3], "pars": [0, 2], "logicerror": [0, 2], "abl": [0, 2, 3], "get_account": [0, 1], "fund_with_algo": 0, "float": [0, 5], "1000": [0, 5, 6], "identifi": [0, 1, 2, 8], "localnet": [0, 1, 3, 4, 7], "o": [0, 6], "f": 0, "_mnemon": [0, 1], "mnemon": [0, 1, 7, 8], "secret": 0, "Be": 0, "care": 0, "commit": 0, "ideal": 0, "storag": [0, 3, 5], "rather": [0, 3], "than": [0, 3, 7], "file": [0, 5, 8], "system": 0, "doesn": [0, 3], "t": [0, 3], "work": [0, 1, 2, 3, 8], "seamlessli": 0, "without": [0, 4, 8], "manual": [0, 4], "config": [0, 2, 4, 5], "reset": 0, "account_mnemon": 0, "follow": [0, 2, 3, 4, 5, 7, 8], "object": [0, 2, 3, 4, 5, 6], "automat": [0, 1, 2, 3, 7], "get_account_from_mnemon": [0, 1], "convert": 0, "25": 0, "word": 0, "passphras": 0, "get_algod_cli": [0, 4], "network_cli": 0, "configur": [0, 3, 8], "algod_serv": [0, 4], "algod_port": [0, 4], "algod_token": [0, 4], "get_app_id_from_tx_id": 0, "get_creator_app": [0, 3], "creator_account": 0, "get_default_localnet_config": [0, 4], "point": 0, "dispenser_mnenom": 0, "get_indexer_cli": [0, 4], "indexer_serv": [0, 4], "indexer_port": [0, 4], "indexer_token": [0, 4], "get_kmd_client_from_algod_cli": [0, 4], "suppli": [0, 3], "same": [0, 1, 3, 4], "port": [0, 4], "kmd_port": [0, 4], "4002": [0, 4], "get_kmd_wallet_account": [0, 1], "predic": 0, "get_localnet_default_account": [0, 1], "get_next_vers": 0, "current_vers": 0, "calcul": [0, 2], "next": 0, "semver": 0, "like": [0, 2, 7, 8], "lower": 0, "intend": 0, "mostli": 0, "conveni": [0, 1], "param": [0, 2], "within": 0, "valid": [0, 3], "input": 0, "output": [0, 2, 3, 5], "v1": 0, "beta1": 0, "4567": 0, "4568": 0, "alpha": 0, "deploymentfailederror": 0, "cannot": 0, "get_or_create_kmd_wallet_account": [0, 1], "get_sender_from_sign": 0, "is_localnet": 0, "true": [0, 2, 5, 7], "genesi": 0, "devnet": 0, "sandnet": 0, "is_mainnet": 0, "mainnet": [0, 1, 3, 4, 7], "is_testnet": 0, "num_extra_program_pag": 0, "opt": [0, 2, 8], "blockchain": [0, 5, 8], "place": 0, "its": 0, "100": 0, "000": 0, "microalgo": 0, "integ": 0, "opt_out": 0, "standard": [0, 7], "them": 0, "recov": 0, "optout": 0, "manag": [0, 3, 5, 7, 8], "process": [0, 3], "permit": 0, "discontinu": 0, "It": [0, 1, 3, 4, 5, 6], "essenti": 0, "zero": 0, "persist_sourcemap": [0, 5], "_debug": 0, "persistsourcemapinput": [0, 5], "project_root": [0, 5], "with_sourc": 0, "persist": [0, 5], "avm": [0, 5, 8], "debugg": [0, 8], "root": [0, 5], "project": [0, 5, 8], "dump": [0, 5], "along": [0, 5], "replace_template_vari": 0, "simulate_and_persist_respons": [0, 5], "buffer_size_mb": 0, "256": [0, 5], "simul": [0, 2, 5, 8], "atom": [0, 3, 5], "size": [0, 5], "trace": [0, 8], "buffer": [0, 5], "megabyt": [0, 5], "256mb": 0, "after": [0, 3], "consumpt": [0, 5], "transfer_asset": [0, 7], "assettransfertxn": [0, 7], "core": [1, 3, 4], "capabl": [1, 3, 4, 7], "util": [1, 3, 4, 6, 7], "inject": [1, 8], "well": 1, "encapsul": 1, "There": [1, 2, 3, 4, 7], "variou": [1, 2, 4, 8], "convent": [1, 3], "OR": [1, 2], "ny": 1, "power": 1, "new_account": 1, "generate_account": 1, "dispenser_mnemon": [1, 7], "function": [1, 2, 3, 4, 7, 8], "reli": 1, "being": [1, 3], "expos": [1, 2, 8], "These": [1, 2, 3, 5, 8], "retriev": [1, 3, 4], "beaker": [2, 3, 8], "data": [2, 3, 8], "usag": [2, 3, 4, 7], "exampl": [2, 3, 4, 5, 7], "check": [2, 3, 4, 7], "autom": [2, 3, 4, 7], "test": [2, 3, 4, 5, 7, 8], "wrapper": [2, 8], "correspond": 2, "two": [2, 6, 7], "wai": [2, 4, 6], "instanti": 2, "By": [2, 5], "uncondition": 2, "app_lookup": 2, "search": [2, 5], "under": [2, 3], "overridden": 2, "approach": [2, 8], "deriv": 2, "suggest": 2, "directli": [2, 6], "no_op": 2, "update_appl": 2, "remov": [2, 5], "delete_appl": 2, "close": 2, "support": [2, 3, 8], "everyth": 2, "select": 2, "explicitli": 2, "infer": 2, "bare": 2, "compat": 2, "made": [2, 7], "interpret": 2, "abireturnsubroutin": 2, "method_spec": 2, "algosd": 2, "python": [2, 3, 5], "keyword": 2, "hello": 2, "syntax": 2, "world": 2, "overrid": 2, "app_index": 2, "box_nam": 2, "page": 2, "suffici": 2, "futur": [2, 8], "dataclass": 2, "commoncallparamet": 2, "exact": 2, "depend": [2, 3], "algokit_util": [2, 4, 5, 6, 8], "compose_": 2, "first": [2, 6], "onc": [2, 4], "ad": 2, "For": [2, 5], "execute_atc": 2, "let": 2, "caus": 2, "throw": 2, "becaus": 2, "assert": 2, "lack": 2, "exhaust": 2, "opcod": 2, "budget": 2, "other": [2, 3, 7], "reason": 2, "look": 2, "someth": 2, "transactionpool": 2, "rememb": 2, "eval": 2, "error_messag": 2, "program_counter_valu": 2, "list_of_op_cod": 2, "messag": [2, 6], "combin": [2, 8], "much": 2, "easier": [2, 3, 8], "happen": [2, 3], "thrown": 2, "logic_error": 2, "line_no": 2, "insight": 2, "format": 2, "surround": 2, "extend": 2, "show": 2, "alreadi": [2, 3], "so": [2, 4, 7, 8], "previous": [2, 3], "crucial": 2, "complex": 2, "enabl": [2, 5], "safe": [3, 8], "retryabl": [3, 8], "immut": [3, 8], "perman": [3, 8], "higher": [3, 7, 8], "order": [3, 7, 8], "build": [3, 5, 8], "particularli": 3, "articul": 3, "record": 3, "while": [3, 6], "implement": 3, "natur": [3, 8], "evolv": [3, 8], "over": [3, 8], "diverg": 3, "principl": [3, 4], "goal": [3, 8], "comprehens": 3, "explain": 3, "concept": 3, "lifecycl": 3, "transpil": 3, "verifi": 3, "maintain": 3, "stabil": 3, "qualiti": 3, "final": 3, "runtim": 3, "confid": 3, "correct": 3, "utilis": 3, "furthermor": 3, "characterist": 3, "per": 3, "built": [3, 8], "framework": 3, "0004": 3, "mean": [3, 5], "languag": 3, "typescript": [3, 8], "explicit": 3, "upgrad": 3, "vari": 3, "present": 3, "whether": [3, 5], "had": 3, "creatoraccount": 3, "seri": 3, "lookup": 3, "payload": 3, "boolean": [3, 5], "chronolog": 3, "trivial": 3, "recommend": 3, "durat": 3, "recalcul": 3, "most": [3, 5], "prefer": [3, 4, 8], "fresh": 3, "logic": [3, 4, 8], "detect": 3, "doe": [3, 7], "concert": 3, "reliabl": 3, "popul": 3, "sinc": 3, "again": 3, "appli": 3, "straight": 3, "do": 3, "abov": 3, "abil": [3, 7, 8], "In": 3, "arrai": 3, "wil": 3, "hexadecim": 3, "shouldn": 3, "beaker_product": 3, "action_taken": 3, "done": [3, 6], "up": 3, "create_respons": 3, "update_respons": 3, "delete_respons": 3, "underli": [4, 7, 8], "class": [4, 5, 8], "inlin": 4, "modular": [4, 8], "interfac": [4, 8], "produc": 4, "myalgodnod": 4, "secret_token": 4, "get_algonode_config": 4, "node": 4, "configorport": 4, "assumpt": 4, "host": 4, "packag": 5, "tool": [5, 8], "optim": [5, 8], "who": [5, 8], "extens": [5, 8], "py": 5, "updatableconfig": 5, "attribut": 5, "mode": 5, "ignor": 5, "insid": 5, "toml": 5, "simpli": [5, 8], "folder": 5, "algokit_project_root": 5, "trace_al": 5, "endpoint": [5, 6], "etc": 5, "trace_buffer_size_mb": 5, "exceed": 5, "oldest": 5, "max_search_depth": 5, "depth": 5, "travers": 5, "10": 5, "assum": 5, "your": [5, 6, 8], "simplifi": 5, "gather": 5, "thei": 5, "timestamp": 5, "_lr": 5, "last_round": 5, "_": 5, "transaction_typ": 5, "iso": 5, "8601": 5, "colon": 5, "period": 5, "count": 5, "separ": [5, 7], "underscor": 5, "might": 5, "20220301t123456z_lr1000_2": 5, "pay_1": 5, "axfer": 5, "2022": 5, "03": 5, "01t12": 5, "34": 5, "56z": 5, "author": 6, "your_auth_token": 6, "receiver_address": 6, "fundrespons": 6, "keep": 6, "mind": 6, "yourself": 6, "invok": [6, 7], "txn_id": 6, "txn": 6, "inspect": 6, "account_address": 6, "limitrespons": 6, "individu": 6, "easili": [7, 8], "facilit": [7, 8], "transfer_paramet": 7, "from_account": 7, "to_address": 7, "micro_algo": 7, "micro": 7, "dispos": 7, "incredibli": 7, "script": 7, "those": 7, "use_dispenser_api": 7, "sure": 7, "document": 7, "smallest": 7, "divis": 7, "unit": 7, "programmat": 7, "sent": 7, "abstract": 7, "dedic": 7, "releas": 8, "pypi": 8, "solut": 8, "intuit": 8, "quicker": 8, "safer": 8, "larg": 8, "sdk": 8, "level": 8, "sensibl": 8, "common": 8, "task": 8, "equival": 8, "design": 8, "compos": 8, "read": 8, "diagnos": 8, "debug": 8, "thin": 8, "block": 8, "primit": 8, "wherev": 8, "safeti": 8, "strong": 8, "effort": 8, "put": 8, "good": 8, "intellisens": 8, "highli": 8, "mechan": 8, "terser": 8, "pip": 8, "poetri": 8, "Then": 8, "favourit": 8, "integr": 8, "mypi": 8, "incorrect": 8, "incorrectli": 8, "multisig": 8, "we": 8, "experi": 8, "improv": 8, "expand": 8}, "objects": {"": [[0, 0, 0, "-", "algokit_utils"]], "algokit_utils": [[0, 1, 1, "", "ABICallArgs"], [0, 1, 1, "", "ABICallArgsDict"], [0, 1, 1, "", "ABICreateCallArgs"], [0, 1, 1, "", "ABICreateCallArgsDict"], [0, 1, 1, "", "ABITransactionResponse"], [0, 1, 1, "", "Account"], [0, 1, 1, "", "AlgoClientConfig"], [0, 1, 1, "", "AppDeployMetaData"], [0, 1, 1, "", "AppLookup"], [0, 1, 1, "", "AppMetaData"], [0, 1, 1, "", "AppReference"], [0, 4, 1, "", "AppSpecStateDict"], [0, 1, 1, "", "ApplicationClient"], [0, 1, 1, "", "ApplicationSpecification"], [0, 1, 1, "", "CallConfig"], [0, 1, 1, "", "CreateCallParameters"], [0, 1, 1, "", "CreateCallParametersDict"], [0, 1, 1, "", "CreateTransactionParameters"], [0, 4, 1, "", "DELETABLE_TEMPLATE_NAME"], [0, 1, 1, "", "DefaultArgumentDict"], [0, 4, 1, "", "DefaultArgumentType"], [0, 1, 1, "", "DeployCallArgs"], [0, 1, 1, "", "DeployCallArgsDict"], [0, 1, 1, "", "DeployCreateCallArgs"], [0, 1, 1, "", "DeployCreateCallArgsDict"], [0, 1, 1, "", "DeployResponse"], [0, 1, 1, "", "EnsureBalanceParameters"], [0, 1, 1, "", "EnsureFundedResponse"], [0, 4, 1, "", "MethodConfigDict"], [0, 1, 1, "", "MethodHints"], [0, 4, 1, "", "NOTE_PREFIX"], [0, 4, 1, "", "OnCompleteActionName"], [0, 1, 1, "", "OnCompleteCallParameters"], [0, 1, 1, "", "OnCompleteCallParametersDict"], [0, 1, 1, "", "OnSchemaBreak"], [0, 1, 1, "", "OnUpdate"], [0, 1, 1, "", "OperationPerformed"], [0, 1, 1, "", "Program"], [0, 4, 1, "", "TemplateValueDict"], [0, 4, 1, "", "TemplateValueMapping"], [0, 1, 1, "", "TestNetDispenserApiClient"], [0, 1, 1, "", "TransactionParameters"], [0, 1, 1, "", "TransactionParametersDict"], [0, 1, 1, "", "TransactionResponse"], [0, 1, 1, "", "TransferAssetParameters"], [0, 1, 1, "", "TransferParameters"], [0, 4, 1, "", "UPDATABLE_TEMPLATE_NAME"], [0, 6, 1, "", "create_kmd_wallet_account"], [0, 6, 1, "", "ensure_funded"], [0, 6, 1, "", "execute_atc_with_logic_error"], [0, 6, 1, "", "get_account"], [0, 6, 1, "", "get_account_from_mnemonic"], [0, 6, 1, "", "get_algod_client"], [0, 6, 1, "", "get_app_id_from_tx_id"], [0, 6, 1, "", "get_creator_apps"], [0, 6, 1, "", "get_default_localnet_config"], [0, 6, 1, "", "get_dispenser_account"], [0, 6, 1, "", "get_indexer_client"], [0, 6, 1, "", "get_kmd_client_from_algod_client"], [0, 6, 1, "", "get_kmd_wallet_account"], [0, 6, 1, "", "get_localnet_default_account"], [0, 6, 1, "", "get_next_version"], [0, 6, 1, "", "get_or_create_kmd_wallet_account"], [0, 6, 1, "", "get_sender_from_signer"], [0, 6, 1, "", "is_localnet"], [0, 6, 1, "", "is_mainnet"], [0, 6, 1, "", "is_testnet"], [0, 6, 1, "", "num_extra_program_pages"], [0, 6, 1, "", "opt_in"], [0, 6, 1, "", "opt_out"], [0, 6, 1, "", "persist_sourcemaps"], [0, 6, 1, "", "replace_template_variables"], [0, 6, 1, "", "simulate_and_persist_response"], [0, 6, 1, "", "transfer"], [0, 6, 1, "", "transfer_asset"]], "algokit_utils.ABITransactionResponse": [[0, 2, 1, "", "decode_error"], [0, 2, 1, "", "method"], [0, 2, 1, "", "raw_value"], [0, 2, 1, "", "return_value"], [0, 2, 1, "", "tx_info"]], "algokit_utils.Account": [[0, 2, 1, "", "address"], [0, 2, 1, "", "private_key"], [0, 3, 1, "", "public_key"], [0, 3, 1, "", "signer"]], "algokit_utils.AlgoClientConfig": [[0, 2, 1, "", "server"], [0, 2, 1, "", "token"]], "algokit_utils.ApplicationClient": [[0, 5, 1, "", "add_method_call"], [0, 5, 1, "", "call"], [0, 5, 1, "", "clear_state"], [0, 5, 1, "", "close_out"], [0, 5, 1, "", "compose_call"], [0, 5, 1, "", "compose_clear_state"], [0, 5, 1, "", "compose_close_out"], [0, 5, 1, "", "compose_create"], [0, 5, 1, "", "compose_delete"], [0, 5, 1, "", "compose_opt_in"], [0, 5, 1, "", "compose_update"], [0, 5, 1, "", "create"], [0, 5, 1, "", "delete"], [0, 5, 1, "", "deploy"], [0, 5, 1, "", "export_source_map"], [0, 5, 1, "", "get_global_state"], [0, 5, 1, "", "get_local_state"], [0, 5, 1, "", "get_signer_sender"], [0, 5, 1, "", "import_source_map"], [0, 5, 1, "", "opt_in"], [0, 5, 1, "", "prepare"], [0, 5, 1, "", "resolve"], [0, 5, 1, "", "resolve_signer_sender"], [0, 5, 1, "", "update"]], "algokit_utils.ApplicationSpecification": [[0, 5, 1, "", "export"]], "algokit_utils.CallConfig": [[0, 2, 1, "", "ALL"], [0, 2, 1, "", "CALL"], [0, 2, 1, "", "CREATE"], [0, 2, 1, "", "NEVER"]], "algokit_utils.EnsureBalanceParameters": [[0, 2, 1, "", "account_to_fund"], [0, 2, 1, "", "fee_micro_algos"], [0, 2, 1, "", "funding_source"], [0, 2, 1, "", "max_fee_micro_algos"], [0, 2, 1, "", "min_funding_increment_micro_algos"], [0, 2, 1, "", "min_spending_balance_micro_algos"], [0, 2, 1, "", "note"], [0, 2, 1, "", "suggested_params"]], "algokit_utils.EnsureFundedResponse": [[0, 2, 1, "", "transaction_id"]], "algokit_utils.OnSchemaBreak": [[0, 2, 1, "", "AppendApp"], [0, 2, 1, "", "Fail"], [0, 2, 1, "", "ReplaceApp"]], "algokit_utils.OnUpdate": [[0, 2, 1, "", "AppendApp"], [0, 2, 1, "", "Fail"], [0, 2, 1, "", "ReplaceApp"], [0, 2, 1, "", "UpdateApp"]], "algokit_utils.OperationPerformed": [[0, 2, 1, "", "Create"], [0, 2, 1, "", "Nothing"], [0, 2, 1, "", "Replace"], [0, 2, 1, "", "Update"]], "algokit_utils.TestNetDispenserApiClient": [[0, 5, 1, "", "fund"], [0, 5, 1, "", "get_limit"], [0, 5, 1, "", "refund"]], "algokit_utils.TransactionParameters": [[0, 2, 1, "", "accounts"], [0, 2, 1, "", "boxes"], [0, 2, 1, "", "foreign_apps"], [0, 2, 1, "", "foreign_assets"], [0, 2, 1, "", "lease"], [0, 2, 1, "", "note"], [0, 2, 1, "", "rekey_to"], [0, 2, 1, "", "sender"], [0, 2, 1, "", "signer"], [0, 2, 1, "", "suggested_params"]], "algokit_utils.TransactionParametersDict": [[0, 2, 1, "", "accounts"], [0, 2, 1, "", "boxes"], [0, 2, 1, "", "foreign_apps"], [0, 2, 1, "", "foreign_assets"], [0, 2, 1, "", "lease"], [0, 2, 1, "", "note"], [0, 2, 1, "", "rekey_to"], [0, 2, 1, "", "sender"], [0, 2, 1, "", "signer"], [0, 2, 1, "", "suggested_params"]], "algokit_utils.TransactionResponse": [[0, 2, 1, "", "confirmed_round"], [0, 5, 1, "", "from_atr"], [0, 2, 1, "", "tx_id"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:property", "4": "py:data", "5": "py:method", "6": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "property", "Python property"], "4": ["py", "data", "Python data"], "5": ["py", "method", "Python method"], "6": ["py", "function", "Python function"]}, "titleterms": {"algokit_util": 0, "data": 0, "class": 0, "function": 0, "convent": 0, "exampl": 0, "account": [1, 6], "manag": [1, 4], "app": [2, 3], "client": [2, 4, 6], "design": [2, 3], "creat": [2, 6], "an": [2, 3, 6], "applic": [2, 3], "call": 2, "method": 2, "specifi": 2, "which": 2, "abi": 2, "argument": 2, "transact": 2, "paramet": [2, 3], "compos": 2, "read": 2, "state": 2, "handl": [2, 6], "logic": 2, "error": [2, 6], "diagnos": 2, "debug": [2, 5], "mode": 2, "trace": [2, 5], "field": 2, "deploy": 3, "find": 3, "creator": 3, "deploi": 3, "input": 3, "idempot": 3, "compil": 3, "templat": 3, "substitut": 3, "return": 3, "valu": 3, "network": 4, "configur": [4, 5], "debugg": 5, "util": [5, 8], "filenam": 5, "format": 5, "testnet": 6, "dispens": [6, 7], "fund": 6, "regist": 6, "refund": 6, "get": 6, "current": 6, "limit": 6, "algo": 7, "transfer": 7, "ensur": 7, "minimum": 7, "asset": 7, "algokit": 8, "python": 8, "content": 8, "core": 8, "principl": 8, "instal": 8, "usag": 8, "type": 8, "capabl": 8, "refer": 8, "document": 8, "roadmap": 8, "indic": 8, "tabl": 8}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"algokit_utils": [[0, "module-algokit_utils"]], "Data": [[0, "data"]], "Classes": [[0, "classes"]], "Functions": [[0, "functions"]], "Convention": [[0, "convention"]], "Example": [[0, "example"]], "Account management": [[1, "account-management"]], "Account": [[1, "account"]], "App client": [[2, "app-client"]], "Design": [[2, "design"], [3, "design"]], "Creating an application client": [[2, "creating-an-application-client"]], "Calling methods on the app": [[2, "calling-methods-on-the-app"]], "Specifying which method": [[2, "specifying-which-method"]], "ABI arguments": [[2, "abi-arguments"]], "Transaction Parameters": [[2, "transaction-parameters"]], "Composing calls": [[2, "composing-calls"]], "Reading state": [[2, "reading-state"]], "Handling logic errors and diagnosing errors": [[2, "handling-logic-errors-and-diagnosing-errors"]], "Debug Mode and traces Field": [[2, "debug-mode-and-traces-field"]], "App deployment": [[3, "app-deployment"]], "Finding apps by creator": [[3, "finding-apps-by-creator"]], "Deploying an application": [[3, "deploying-an-application"]], "Input parameters": [[3, "input-parameters"]], "Idempotency": [[3, "idempotency"]], "Compilation and template substitution": [[3, "compilation-and-template-substitution"]], "Return value": [[3, "return-value"]], "Client management": [[4, "client-management"]], "Network configuration": [[4, "network-configuration"]], "Clients": [[4, "clients"]], "Debugger": [[5, "debugger"]], "Configuration": [[5, "configuration"]], "Debugging Utilities": [[5, "debugging-utilities"]], "Trace filename format": [[5, "trace-filename-format"]], "TestNet Dispenser Client": [[6, "testnet-dispenser-client"]], "Creating a Dispenser Client": [[6, "creating-a-dispenser-client"]], "Funding an Account": [[6, "funding-an-account"]], "Registering a Refund": [[6, "registering-a-refund"]], "Getting Current Limit": [[6, "getting-current-limit"]], "Error Handling": [[6, "error-handling"]], "Algo transfers": [[7, "algo-transfers"]], "Transferring Algos": [[7, "transferring-algos"]], "Ensuring minimum Algos": [[7, "ensuring-minimum-algos"]], "Transfering Assets": [[7, "transfering-assets"]], "Dispenser": [[7, "dispenser"]], "AlgoKit Python Utilities": [[8, "algokit-python-utilities"]], "Contents": [[8, null]], "Core principles": [[8, "core-principles"]], "Installation": [[8, "installation"]], "Usage": [[8, "usage"]], "Types": [[8, "types"]], "Capabilities": [[8, "capabilities"]], "Reference documentation": [[8, "reference-documentation"]], "Roadmap": [[8, "roadmap"]], "Indices and tables": [[8, "indices-and-tables"]]}, "indexentries": {"abicallargs (class in algokit_utils)": [[0, "algokit_utils.ABICallArgs"]], "abicallargsdict (class in algokit_utils)": [[0, "algokit_utils.ABICallArgsDict"]], "abicreatecallargs (class in algokit_utils)": [[0, "algokit_utils.ABICreateCallArgs"]], "abicreatecallargsdict (class in algokit_utils)": [[0, "algokit_utils.ABICreateCallArgsDict"]], "abitransactionresponse (class in algokit_utils)": [[0, "algokit_utils.ABITransactionResponse"]], "all (algokit_utils.callconfig attribute)": [[0, "algokit_utils.CallConfig.ALL"]], "account (class in algokit_utils)": [[0, "algokit_utils.Account"]], "algoclientconfig (class in algokit_utils)": [[0, "algokit_utils.AlgoClientConfig"]], "appdeploymetadata (class in algokit_utils)": [[0, "algokit_utils.AppDeployMetaData"]], "applookup (class in algokit_utils)": [[0, "algokit_utils.AppLookup"]], "appmetadata (class in algokit_utils)": [[0, "algokit_utils.AppMetaData"]], "appreference (class in algokit_utils)": [[0, "algokit_utils.AppReference"]], "appspecstatedict (in module algokit_utils)": [[0, "algokit_utils.AppSpecStateDict"]], "appendapp (algokit_utils.onschemabreak attribute)": [[0, "algokit_utils.OnSchemaBreak.AppendApp"]], "appendapp (algokit_utils.onupdate attribute)": [[0, "algokit_utils.OnUpdate.AppendApp"]], "applicationclient (class in algokit_utils)": [[0, "algokit_utils.ApplicationClient"]], "applicationspecification (class in algokit_utils)": [[0, "algokit_utils.ApplicationSpecification"]], "call (algokit_utils.callconfig attribute)": [[0, "algokit_utils.CallConfig.CALL"]], "create (algokit_utils.callconfig attribute)": [[0, "algokit_utils.CallConfig.CREATE"]], "callconfig (class in algokit_utils)": [[0, "algokit_utils.CallConfig"]], "create (algokit_utils.operationperformed attribute)": [[0, "algokit_utils.OperationPerformed.Create"]], "createcallparameters (class in algokit_utils)": [[0, "algokit_utils.CreateCallParameters"]], "createcallparametersdict (class in algokit_utils)": [[0, "algokit_utils.CreateCallParametersDict"]], "createtransactionparameters (class in algokit_utils)": [[0, "algokit_utils.CreateTransactionParameters"]], "deletable_template_name (in module algokit_utils)": [[0, "algokit_utils.DELETABLE_TEMPLATE_NAME"]], "defaultargumentdict (class in algokit_utils)": [[0, "algokit_utils.DefaultArgumentDict"]], "defaultargumenttype (in module algokit_utils)": [[0, "algokit_utils.DefaultArgumentType"]], "deploycallargs (class in algokit_utils)": [[0, "algokit_utils.DeployCallArgs"]], "deploycallargsdict (class in algokit_utils)": [[0, "algokit_utils.DeployCallArgsDict"]], "deploycreatecallargs (class in algokit_utils)": [[0, "algokit_utils.DeployCreateCallArgs"]], "deploycreatecallargsdict (class in algokit_utils)": [[0, "algokit_utils.DeployCreateCallArgsDict"]], "deployresponse (class in algokit_utils)": [[0, "algokit_utils.DeployResponse"]], "ensurebalanceparameters (class in algokit_utils)": [[0, "algokit_utils.EnsureBalanceParameters"]], "ensurefundedresponse (class in algokit_utils)": [[0, "algokit_utils.EnsureFundedResponse"]], "fail (algokit_utils.onschemabreak attribute)": [[0, "algokit_utils.OnSchemaBreak.Fail"]], "fail (algokit_utils.onupdate attribute)": [[0, "algokit_utils.OnUpdate.Fail"]], "methodconfigdict (in module algokit_utils)": [[0, "algokit_utils.MethodConfigDict"]], "methodhints (class in algokit_utils)": [[0, "algokit_utils.MethodHints"]], "never (algokit_utils.callconfig attribute)": [[0, "algokit_utils.CallConfig.NEVER"]], "note_prefix (in module algokit_utils)": [[0, "algokit_utils.NOTE_PREFIX"]], "nothing (algokit_utils.operationperformed attribute)": [[0, "algokit_utils.OperationPerformed.Nothing"]], "oncompleteactionname (in module algokit_utils)": [[0, "algokit_utils.OnCompleteActionName"]], "oncompletecallparameters (class in algokit_utils)": [[0, "algokit_utils.OnCompleteCallParameters"]], "oncompletecallparametersdict (class in algokit_utils)": [[0, "algokit_utils.OnCompleteCallParametersDict"]], "onschemabreak (class in algokit_utils)": [[0, "algokit_utils.OnSchemaBreak"]], "onupdate (class in algokit_utils)": [[0, "algokit_utils.OnUpdate"]], "operationperformed (class in algokit_utils)": [[0, "algokit_utils.OperationPerformed"]], "program (class in algokit_utils)": [[0, "algokit_utils.Program"]], "replace (algokit_utils.operationperformed attribute)": [[0, "algokit_utils.OperationPerformed.Replace"]], "replaceapp (algokit_utils.onschemabreak attribute)": [[0, "algokit_utils.OnSchemaBreak.ReplaceApp"]], "replaceapp (algokit_utils.onupdate attribute)": [[0, "algokit_utils.OnUpdate.ReplaceApp"]], "templatevaluedict (in module algokit_utils)": [[0, "algokit_utils.TemplateValueDict"]], "templatevaluemapping (in module algokit_utils)": [[0, "algokit_utils.TemplateValueMapping"]], "testnetdispenserapiclient (class in algokit_utils)": [[0, "algokit_utils.TestNetDispenserApiClient"]], "transactionparameters (class in algokit_utils)": [[0, "algokit_utils.TransactionParameters"]], "transactionparametersdict (class in algokit_utils)": [[0, "algokit_utils.TransactionParametersDict"]], "transactionresponse (class in algokit_utils)": [[0, "algokit_utils.TransactionResponse"]], "transferassetparameters (class in algokit_utils)": [[0, "algokit_utils.TransferAssetParameters"]], "transferparameters (class in algokit_utils)": [[0, "algokit_utils.TransferParameters"]], "updatable_template_name (in module algokit_utils)": [[0, "algokit_utils.UPDATABLE_TEMPLATE_NAME"]], "update (algokit_utils.operationperformed attribute)": [[0, "algokit_utils.OperationPerformed.Update"]], "updateapp (algokit_utils.onupdate attribute)": [[0, "algokit_utils.OnUpdate.UpdateApp"]], "account_to_fund (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.account_to_fund"]], "accounts (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.accounts"]], "accounts (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.accounts"]], "add_method_call() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.add_method_call"]], "address (algokit_utils.account attribute)": [[0, "algokit_utils.Account.address"]], "algokit_utils": [[0, "module-algokit_utils"]], "boxes (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.boxes"]], "boxes (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.boxes"]], "call() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.call"]], "clear_state() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.clear_state"]], "close_out() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.close_out"]], "compose_call() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_call"]], "compose_clear_state() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_clear_state"]], "compose_close_out() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_close_out"]], "compose_create() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_create"]], "compose_delete() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_delete"]], "compose_opt_in() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_opt_in"]], "compose_update() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_update"]], "confirmed_round (algokit_utils.transactionresponse attribute)": [[0, "algokit_utils.TransactionResponse.confirmed_round"]], "create() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.create"]], "create_kmd_wallet_account() (in module algokit_utils)": [[0, "algokit_utils.create_kmd_wallet_account"]], "decode_error (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.decode_error"]], "delete() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.delete"]], "deploy() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.deploy"]], "ensure_funded() (in module algokit_utils)": [[0, "algokit_utils.ensure_funded"]], "execute_atc_with_logic_error() (in module algokit_utils)": [[0, "algokit_utils.execute_atc_with_logic_error"]], "export() (algokit_utils.applicationspecification method)": [[0, "algokit_utils.ApplicationSpecification.export"]], "export_source_map() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.export_source_map"]], "fee_micro_algos (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.fee_micro_algos"]], "foreign_apps (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.foreign_apps"]], "foreign_apps (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.foreign_apps"]], "foreign_assets (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.foreign_assets"]], "foreign_assets (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.foreign_assets"]], "from_atr() (algokit_utils.transactionresponse static method)": [[0, "algokit_utils.TransactionResponse.from_atr"]], "fund() (algokit_utils.testnetdispenserapiclient method)": [[0, "algokit_utils.TestNetDispenserApiClient.fund"]], "funding_source (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.funding_source"]], "get_account() (in module algokit_utils)": [[0, "algokit_utils.get_account"]], "get_account_from_mnemonic() (in module algokit_utils)": [[0, "algokit_utils.get_account_from_mnemonic"]], "get_algod_client() (in module algokit_utils)": [[0, "algokit_utils.get_algod_client"]], "get_app_id_from_tx_id() (in module algokit_utils)": [[0, "algokit_utils.get_app_id_from_tx_id"]], "get_creator_apps() (in module algokit_utils)": [[0, "algokit_utils.get_creator_apps"]], "get_default_localnet_config() (in module algokit_utils)": [[0, "algokit_utils.get_default_localnet_config"]], "get_dispenser_account() (in module algokit_utils)": [[0, "algokit_utils.get_dispenser_account"]], "get_global_state() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.get_global_state"]], "get_indexer_client() (in module algokit_utils)": [[0, "algokit_utils.get_indexer_client"]], "get_kmd_client_from_algod_client() (in module algokit_utils)": [[0, "algokit_utils.get_kmd_client_from_algod_client"]], "get_kmd_wallet_account() (in module algokit_utils)": [[0, "algokit_utils.get_kmd_wallet_account"]], "get_limit() (algokit_utils.testnetdispenserapiclient method)": [[0, "algokit_utils.TestNetDispenserApiClient.get_limit"]], "get_local_state() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.get_local_state"]], "get_localnet_default_account() (in module algokit_utils)": [[0, "algokit_utils.get_localnet_default_account"]], "get_next_version() (in module algokit_utils)": [[0, "algokit_utils.get_next_version"]], "get_or_create_kmd_wallet_account() (in module algokit_utils)": [[0, "algokit_utils.get_or_create_kmd_wallet_account"]], "get_sender_from_signer() (in module algokit_utils)": [[0, "algokit_utils.get_sender_from_signer"]], "get_signer_sender() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.get_signer_sender"]], "import_source_map() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.import_source_map"]], "is_localnet() (in module algokit_utils)": [[0, "algokit_utils.is_localnet"]], "is_mainnet() (in module algokit_utils)": [[0, "algokit_utils.is_mainnet"]], "is_testnet() (in module algokit_utils)": [[0, "algokit_utils.is_testnet"]], "lease (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.lease"]], "lease (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.lease"]], "max_fee_micro_algos (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.max_fee_micro_algos"]], "method (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.method"]], "min_funding_increment_micro_algos (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.min_funding_increment_micro_algos"]], "min_spending_balance_micro_algos (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.min_spending_balance_micro_algos"]], "module": [[0, "module-algokit_utils"]], "note (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.note"]], "note (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.note"]], "note (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.note"]], "num_extra_program_pages() (in module algokit_utils)": [[0, "algokit_utils.num_extra_program_pages"]], "opt_in() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.opt_in"]], "opt_in() (in module algokit_utils)": [[0, "algokit_utils.opt_in"]], "opt_out() (in module algokit_utils)": [[0, "algokit_utils.opt_out"]], "persist_sourcemaps() (in module algokit_utils)": [[0, "algokit_utils.persist_sourcemaps"]], "prepare() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.prepare"]], "private_key (algokit_utils.account attribute)": [[0, "algokit_utils.Account.private_key"]], "public_key (algokit_utils.account property)": [[0, "algokit_utils.Account.public_key"]], "raw_value (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.raw_value"]], "refund() (algokit_utils.testnetdispenserapiclient method)": [[0, "algokit_utils.TestNetDispenserApiClient.refund"]], "rekey_to (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.rekey_to"]], "rekey_to (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.rekey_to"]], "replace_template_variables() (in module algokit_utils)": [[0, "algokit_utils.replace_template_variables"]], "resolve() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.resolve"]], "resolve_signer_sender() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.resolve_signer_sender"]], "return_value (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.return_value"]], "sender (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.sender"]], "sender (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.sender"]], "server (algokit_utils.algoclientconfig attribute)": [[0, "algokit_utils.AlgoClientConfig.server"]], "signer (algokit_utils.account property)": [[0, "algokit_utils.Account.signer"]], "signer (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.signer"]], "signer (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.signer"]], "simulate_and_persist_response() (in module algokit_utils)": [[0, "algokit_utils.simulate_and_persist_response"]], "suggested_params (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.suggested_params"]], "suggested_params (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.suggested_params"]], "suggested_params (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.suggested_params"]], "token (algokit_utils.algoclientconfig attribute)": [[0, "algokit_utils.AlgoClientConfig.token"]], "transaction_id (algokit_utils.ensurefundedresponse attribute)": [[0, "algokit_utils.EnsureFundedResponse.transaction_id"]], "transfer() (in module algokit_utils)": [[0, "algokit_utils.transfer"]], "transfer_asset() (in module algokit_utils)": [[0, "algokit_utils.transfer_asset"]], "tx_id (algokit_utils.transactionresponse attribute)": [[0, "algokit_utils.TransactionResponse.tx_id"]], "tx_info (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.tx_info"]], "update() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.update"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["apidocs/algokit_utils/algokit_utils", "capabilities/account", "capabilities/app-client", "capabilities/app-deploy", "capabilities/client", "capabilities/debugger", "capabilities/dispenser-client", "capabilities/transfer", "index"], "filenames": ["apidocs/algokit_utils/algokit_utils.md", "capabilities/account.md", "capabilities/app-client.md", "capabilities/app-deploy.md", "capabilities/client.md", "capabilities/debugger.md", "capabilities/dispenser-client.md", "capabilities/transfer.md", "index.md"], "titles": ["algokit_utils", "Account management", "App client", "App deployment", "Client management", "Debugger", "TestNet Dispenser Client", "Algo transfers", "AlgoKit Python Utilities"], "terms": {"appspecstatedict": 0, "typealia": 0, "none": [0, 2, 4, 7], "type": [0, 2, 5, 6], "defin": [0, 2, 3, 8], "applic": [0, 5, 8], "specif": [0, 2, 5], "state": [0, 3, 8], "entri": 0, "deletable_template_nam": 0, "templat": [0, 2, 8], "variabl": [0, 1, 2, 4, 5, 6, 7, 8], "name": [0, 1, 2, 3, 5], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8], "control": [0, 3, 8], "smart": [0, 2, 3, 5, 8], "contract": [0, 2, 3, 5, 8], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8], "delet": [0, 2, 3], "deploy": [0, 2, 7, 8], "defaultargumenttyp": 0, "liter": 0, "valu": [0, 2, 5, 7], "describ": [0, 3], "default": [0, 1, 2, 4, 5, 7, 8], "argument": [0, 6], "sourc": [0, 2, 5], "methodconfigdict": 0, "dictionari": [0, 2], "dict": 0, "oncompletionactionnam": 0, "callconfig": 0, "repres": [0, 1, 5], "allow": [0, 1, 2, 3, 4, 7], "action": [0, 2, 3], "each": [0, 5, 6], "complet": [0, 2, 8], "note_prefix": 0, "algokit_deploy": [0, 3], "j": [0, 3], "arc": [0, 2, 3, 8], "0002": 0, "compliant": [0, 5], "note": [0, 2, 3, 7], "prefix": 0, "deploi": [0, 1, 2, 8], "oncompleteactionnam": 0, "string": [0, 2, 3, 5, 7], "transact": [0, 1, 3, 5, 6, 7, 8], "templatevaluedict": 0, "str": [0, 2], "int": 0, "byte": [0, 3], "templatevaluemap": 0, "map": [0, 2, 3], "updatable_template_nam": 0, "updat": [0, 2, 3, 5], "abicallarg": 0, "base": [0, 1, 2, 3, 4], "deploycallarg": 0, "abical": 0, "abi": 0, "paramet": [0, 7], "an": [0, 1, 4, 5, 7, 8], "when": [0, 1, 2, 3, 5, 7], "call": [0, 3, 5, 7, 8], "abicallargsdict": 0, "deploycallargsdict": 0, "typeddict": 0, "initi": [0, 6, 7, 8], "self": 0, "see": [0, 2, 3, 4, 6, 7], "help": [0, 3, 8], "accur": 0, "signatur": [0, 2], "abicreatecallarg": 0, "deploycreatecallarg": 0, "creat": [0, 1, 3, 4, 5, 8], "abicreatecallargsdict": 0, "deploycreatecallargsdict": 0, "abitransactionrespons": [0, 3], "model": 0, "transactionrespons": [0, 3], "gener": [0, 2, 7, 8], "returntyp": 0, "respons": [0, 2, 5, 6], "decode_error": 0, "except": [0, 2, 6], "detail": [0, 2, 6], "error": [0, 8], "occur": [0, 2, 6], "attempt": [0, 2, 7], "decod": 0, "raw_valu": 0, "method": [0, 1, 3, 5, 6, 8], "algosdk": [0, 1, 2, 4], "make": [0, 2, 6, 7, 8], "The": [0, 2, 3, 4, 5, 6, 7, 8], "raw": [0, 2], "befor": [0, 2], "return_valu": 0, "result": [0, 2, 3], "tx_info": 0, "account": [0, 2, 7, 8], "hold": [0, 3], "private_kei": [0, 1], "address": [0, 1, 2, 6, 7], "field": [0, 3, 6, 7], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8], "base64": 0, "encod": [0, 3], "privat": [0, 1, 7], "kei": [0, 1, 2, 3, 7], "properti": [0, 1], "public_kei": [0, 1], "public": 0, "signer": [0, 1, 2, 3, 7, 8], "atomic_transaction_compos": [0, 2], "accounttransactionsign": [0, 7], "algoclientconfig": [0, 4], "connect": 0, "v2client": [0, 4], "algod": [0, 3, 4, 7, 8], "algodcli": [0, 2, 4, 5], "index": [0, 2, 3, 4, 8], "indexercli": [0, 4], "server": [0, 4], "url": 0, "servic": [0, 1, 4, 7], "e": [0, 2, 3, 4, 7, 8], "g": [0, 2, 3, 4, 8], "http": [0, 4], "localhost": 0, "4001": 0, "testnet": [0, 1, 3, 4, 7, 8], "api": [0, 6, 7, 8], "algonod": 0, "cloud": 0, "token": [0, 4, 6, 7], "authent": 0, "appdeploymetadata": 0, "metadata": [0, 3], "about": [0, 5], "store": [0, 5, 7], "dure": [0, 2, 3, 7], "creation": [0, 3, 8], "serial": 0, "json": [0, 5], "part": [0, 8], "applicationcli": [0, 2, 3], "applookup": [0, 3], "cach": 0, "appmetadata": [0, 3], "creator": [0, 2, 8], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8], "reduc": 0, "number": [0, 2, 3, 4, 7, 8], "multipl": [0, 2, 3], "app": [0, 7, 8], "discov": 0, "app_id": [0, 2], "apprefer": 0, "inform": [0, 2, 5], "algorand": [0, 3, 5, 8], "algod_cli": [0, 2, 7], "app_spec": [0, 2, 3], "application_specif": 0, "applicationspecif": [0, 2], "pathlib": 0, "path": [0, 5], "0": [0, 2, 3, 6, 7], "indexer_cli": 0, "existing_deploy": 0, "transactionsign": [0, 2], "sender": [0, 1, 2, 3, 6], "suggested_param": [0, 2, 7], "suggestedparam": [0, 2, 7], "template_valu": [0, 2, 3], "app_nam": [0, 2], "A": [0, 2, 5, 8], "wrap": [0, 2, 8], "0032": [0, 2, 3, 8], "spec": [0, 2, 8], "provid": [0, 1, 2, 3, 4, 5, 6, 7, 8], "high": [0, 2, 8], "product": [0, 2, 8], "interact": [0, 6], "exist": [0, 1, 2, 3, 4], "altern": [0, 2, 5], "specifi": [0, 3, 4, 7, 8], "find": [0, 2, 7, 8], "client": [0, 5, 7, 8], "one": [0, 1, 2, 3, 4], "instead": [0, 2, 3], "resolv": [0, 1, 3, 4, 8], "onli": [0, 1, 2, 3], "requir": [0, 2, 6, 7], "sign": [0, 1, 2], "wa": [0, 3, 5, 7], "pass": [0, 2, 6], "all": [0, 2, 3, 5, 8], "associ": [0, 1, 2], "tmpl_": [0, 2, 3], "should": [0, 2, 3, 7], "NOT": 0, "includ": [0, 2, 3, 7, 8], "add_method_cal": 0, "atc": [0, 2], "atomictransactioncompos": [0, 2, 5], "abi_method": 0, "abimethod": 0, "bool": 0, "abi_arg": 0, "abiargsdict": 0, "transactionparamet": 0, "transactionparametersdict": 0, "on_complet": [0, 2], "oncomplet": 0, "noopoc": 0, "local_schema": 0, "stateschema": 0, "global_schema": 0, "approval_program": 0, "clear_program": 0, "extra_pag": [0, 2], "app_arg": 0, "list": [0, 2], "call_config": 0, "au_spec": 0, "add": [0, 3, 8], "call_abi_method": [0, 2], "transaction_paramet": [0, 2], "oncompletecallparamet": [0, 2], "oncompletecallparametersdict": 0, "abi_kwarg": 0, "abiargtyp": 0, "submit": 0, "clear_stat": [0, 2], "clearstat": 0, "close_out": [0, 2], "closeout": 0, "compose_cal": [0, 2], "compose_clear_st": 0, "compose_close_out": 0, "ac": 0, "compose_cr": 0, "createcallparamet": [0, 2], "createcallparametersdict": 0, "id": [0, 2, 3, 6, 7, 8], "schema": [0, 3], "": [0, 2, 3, 6, 7, 8], "compose_delet": 0, "deleteappl": 0, "compose_opt_in": 0, "optin": 0, "compose_upd": 0, "updateappl": 0, "version": [0, 3], "allow_upd": [0, 3], "allow_delet": [0, 3], "on_upd": [0, 3], "onupd": 0, "au_deploi": 0, "fail": [0, 2, 3], "on_schema_break": [0, 3], "onschemabreak": 0, "create_arg": [0, 3], "update_arg": [0, 3], "delete_arg": [0, 3], "deployrespons": [0, 3], "refer": [0, 2, 3, 6, 7], "idempot": [0, 1, 7, 8], "chang": [0, 3], "against": [0, 1, 3, 4, 7, 8], "given": [0, 1, 2, 3, 4], "via": [0, 2, 3, 5, 6, 7, 8], "time": [0, 1, 3, 5, 8], "placehold": 0, "substitut": [0, 8], "To": [0, 2, 3, 4, 5, 6, 7, 8], "understand": [0, 2], "architectur": [0, 3], "decis": [0, 3], "behind": [0, 3], "pleas": [0, 7], "github": 0, "com": [0, 4], "algorandfound": 0, "algokit": [0, 1, 2, 3, 4, 5, 6, 7], "cli": [0, 7], "blob": 0, "main": 0, "doc": [0, 6, 8], "2023": 0, "01": 0, "12_smart": 0, "md": 0, "If": [0, 1, 2, 3, 6, 7, 8], "break": [0, 3], "set": [0, 2, 3, 5, 6, 7, 8], "replaceapp": 0, "re": [0, 1, 2], "differ": [0, 3, 4, 5, 7], "teal": [0, 2, 3, 5, 8], "code": [0, 1, 3, 5, 6, 8], "auto": [0, 8], "increment": [0, 3], "tmpl_delet": [0, 2, 3], "condition": 0, "tmpl_updat": [0, 2, 3], "determin": [0, 3, 7], "what": [0, 2, 3], "take": [0, 2, 3, 4, 5, 6, 7], "ha": [0, 2, 3, 5, 7, 8], "increas": 0, "beyond": 0, "current": [0, 2, 3, 7, 8], "alloc": [0, 2], "return": [0, 1, 2, 4, 6, 7], "taken": [0, 3], "relev": 0, "rais": [0, 6], "deploymenterror": 0, "export_source_map": [0, 2], "export": [0, 2], "approv": [0, 2], "later": 0, "import": [0, 2, 5, 6, 8], "import_source_map": [0, 2], "get_global_st": [0, 2], "fals": [0, 2, 5], "get": [0, 1, 2, 4, 7, 8], "global": [0, 2, 3], "info": 0, "get_local_st": [0, 2], "local": [0, 1, 2, 3], "get_signer_send": 0, "tupl": [0, 2], "Will": 0, "otherwis": [0, 2, 3, 7], "fall": 0, "back": [0, 6], "obtain": [0, 1, 2, 6], "from": [0, 1, 2, 3, 4, 5, 6, 8], "source_map_json": 0, "opt_in": [0, 2], "prepar": 0, "application_cli": 0, "copi": 0, "new": [0, 1, 2, 3], "also": [0, 2, 3, 5], "to_resolv": 0, "defaultargumentdict": 0, "resolve_signer_send": 0, "valueerror": 0, "variant": [0, 2], "pull": 0, "150": 0, "directori": [0, 5], "write": [0, 3, 8], "out": [0, 2, 3, 4, 7], "artifact": [0, 5], "disk": 0, "arg": [0, 3], "option": [0, 2, 3, 4, 7], "where": [0, 2, 5, 8], "written": [0, 8], "enum": 0, "intflag": 0, "3": [0, 2], "handl": [0, 8], "both": [0, 2, 6], "normal": 0, "1": [0, 2, 3, 5], "2": [0, 2, 3, 5], "never": 0, "addit": [0, 1, 2, 8], "createtransactionparamet": 0, "defaultargu": 0, "contain": [0, 1, 2, 3, 5, 6, 8], "ani": [0, 2, 3, 4, 5, 6, 8], "mai": [0, 2], "prior": [0, 7], "some": [0, 1, 2, 3, 4, 7], "target": 0, "relat": 0, "ensurebalanceparamet": [0, 7], "ensur": [0, 8], "minimum": [0, 8], "\u00b5algo": 0, "account_to_fund": [0, 7], "receiv": [0, 6, 7], "fee_micro_algo": [0, 7], "flat": [0, 7], "fee": [0, 2, 7], "you": [0, 1, 2, 3, 4, 5, 6, 7, 8], "want": [0, 5, 7, 8], "pai": [0, 7], "cover": [0, 7], "extra": [0, 7], "group": [0, 5, 7], "funding_sourc": [0, 7], "dispenser_api": 0, "testnetdispenserapicli": [0, 6, 7], "send": [0, 6, 7], "get_dispenser_account": [0, 1, 7], "instanc": [0, 1, 2, 3, 4, 7], "which": [0, 3, 5, 6, 7, 8], "dispens": [0, 1, 8], "max_fee_micro_algo": [0, 7], "maximum": [0, 5, 7], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8], "happi": [0, 7], "unbound": [0, 7], "possibl": [0, 2, 7, 8], "could": [0, 7], "reject": [0, 7], "network": [0, 2, 3, 7, 8], "congest": [0, 7], "min_funding_increment_micro_algo": [0, 7], "issu": [0, 2, 6, 7, 8], "fund": [0, 1, 7, 8], "amount": [0, 2, 6, 7], "transfer": [0, 5, 8], "avoid": [0, 7], "mani": [0, 7], "small": [0, 7], "often": [0, 2, 7], "activ": [0, 2, 7], "min_spending_balance_micro_algo": [0, 7], "balanc": [0, 7], "algo": [0, 1, 6, 8], "have": [0, 1, 2, 3, 4, 7, 8], "avail": [0, 2, 7, 8], "spend": [0, 7], "top": [0, 3, 7, 8], "meet": [0, 7], "ensurefundedrespons": [0, 7], "transaction_id": [0, 2, 6], "were": 0, "methodhint": 0, "hint": [0, 8], "caller": 0, "how": [0, 6], "kwd": 0, "appendapp": 0, "old": 0, "singl": [0, 2, 3], "been": [0, 2, 3, 8], "updateapp": 0, "clear": [0, 2], "program": [0, 2], "operationperform": 0, "No": 0, "found": [0, 3], "noth": [0, 3, 8], "replac": [0, 2, 3], "date": [0, 3], "origin": [0, 2, 3], "latest": 0, "compil": [0, 2], "fulli": 0, "binari": 0, "match": 0, "pc": [0, 2], "line": [0, 2], "auth_token": [0, 6], "request_timeout": 0, "dispenser_request_timeout": 0, "start": 0, "access": [0, 2, 7], "login": 0, "ci": 0, "constructor": [0, 6], "environ": [0, 1, 3, 4, 5, 6, 7, 8], "algokit_dispenser_access_token": [0, 6, 7], "load": [0, 1, 4], "preced": [0, 6], "request": [0, 3, 6], "timeout": 0, "15": 0, "second": 0, "modifi": 0, "asset_id": [0, 6, 7], "dispenserfundrespons": 0, "get_limit": [0, 6], "dispenserlimitrespons": 0, "limit": [0, 8], "refund": [0, 8], "refund_txn_id": [0, 6], "regist": [0, 8], "box": [0, 2, 3], "collect": 0, "abc": 0, "sequenc": [0, 2], "bytearrai": 0, "foreign_app": [0, 2], "foreign": [0, 2], "foreign_asset": [0, 2], "asset": [0, 2, 5, 6, 8], "leas": [0, 2], "rekey_to": 0, "rekei": 0, "non": [0, 3, 5], "confirmed_round": 0, "round": [0, 5], "confirm": 0, "dry": 0, "run": [0, 4, 7], "static": [0, 3], "from_atr": 0, "atomictransactionrespons": 0, "simulateatomictransactionrespons": 0, "transaction_index": 0, "either": [0, 1, 2, 3, 4], "more": [0, 2, 3, 7], "last": [0, 3, 5], "tx_id": [0, 6], "transferassetparamet": [0, 7], "_transfer": 0, "transferparametersbas": 0, "between": [0, 7, 8], "clawback_from": 0, "perform": [0, 3, 5, 6], "clawback": 0, "oper": [0, 3, 5], "case": [0, 3, 7, 8], "senderaccount": 0, "must": [0, 2, 3], "equal": 0, "asa": 0, "transferparamet": [0, 7], "create_kmd_wallet_account": [0, 1], "kmd_client": 0, "kmd": [0, 1, 4, 7, 8], "kmdclient": [0, 4], "wallet": [0, 1], "ensure_fund": [0, 7], "_ensure_fund": 0, "certain": 0, "free": 0, "lock": 0, "develop": [0, 2, 3, 5, 8], "org": 0, "librari": [0, 8], "paymenttxn": 0, "need": [0, 2, 3, 4, 5, 6, 7, 8], "payment": [0, 5, 6, 7], "indic": [0, 2, 3, 5, 6], "execute_atc_with_logic_error": 0, "wait_round": 0, "4": [0, 2], "approval_source_map": [0, 2], "source_map": [0, 2], "sourcemap": [0, 2, 5], "callabl": 0, "execut": [0, 2, 3], "pars": [0, 2], "logicerror": [0, 2], "abl": [0, 2, 3], "get_account": [0, 1], "fund_with_algo": 0, "float": [0, 5], "1000": [0, 5, 6], "identifi": [0, 1, 2, 8], "localnet": [0, 1, 3, 4, 7], "o": [0, 6], "f": 0, "_mnemon": [0, 1], "mnemon": [0, 1, 7, 8], "secret": 0, "Be": 0, "care": 0, "commit": 0, "ideal": 0, "storag": [0, 3, 5], "rather": [0, 3], "than": [0, 3, 7], "file": [0, 5, 8], "system": 0, "doesn": [0, 3], "t": [0, 3], "work": [0, 1, 2, 3, 8], "seamlessli": 0, "without": [0, 4, 8], "manual": [0, 4], "config": [0, 2, 4, 5], "reset": 0, "account_mnemon": 0, "follow": [0, 2, 3, 4, 5, 7, 8], "object": [0, 2, 3, 4, 5, 6], "automat": [0, 1, 2, 3, 7], "get_account_from_mnemon": [0, 1], "convert": 0, "25": 0, "word": 0, "passphras": 0, "get_algod_cli": [0, 4], "network_cli": 0, "configur": [0, 3, 8], "algod_serv": [0, 4], "algod_port": [0, 4], "algod_token": [0, 4], "get_app_id_from_tx_id": 0, "get_creator_app": [0, 3], "creator_account": 0, "get_default_localnet_config": [0, 4], "point": 0, "dispenser_mnenom": 0, "get_indexer_cli": [0, 4], "indexer_serv": [0, 4], "indexer_port": [0, 4], "indexer_token": [0, 4], "get_kmd_client_from_algod_cli": [0, 4], "suppli": [0, 3], "same": [0, 1, 3, 4], "port": [0, 4], "kmd_port": [0, 4], "4002": [0, 4], "get_kmd_wallet_account": [0, 1], "predic": 0, "get_localnet_default_account": [0, 1], "get_next_vers": 0, "current_vers": 0, "calcul": [0, 2], "next": 0, "semver": 0, "like": [0, 2, 7, 8], "lower": 0, "intend": 0, "mostli": 0, "conveni": [0, 1], "param": [0, 2], "within": 0, "valid": [0, 3], "input": 0, "output": [0, 2, 3, 5], "v1": 0, "beta1": 0, "4567": 0, "4568": 0, "alpha": 0, "deploymentfailederror": 0, "cannot": 0, "get_or_create_kmd_wallet_account": [0, 1], "get_sender_from_sign": 0, "is_localnet": 0, "true": [0, 2, 5, 7], "genesi": 0, "devnet": 0, "sandnet": 0, "is_mainnet": 0, "mainnet": [0, 1, 3, 4, 7], "is_testnet": 0, "num_extra_program_pag": 0, "opt": [0, 2, 8], "blockchain": [0, 5, 8], "place": 0, "its": 0, "100": 0, "000": 0, "microalgo": 0, "integ": 0, "opt_out": 0, "standard": [0, 7], "them": 0, "recov": 0, "optout": 0, "manag": [0, 3, 5, 7, 8], "process": [0, 3], "permit": 0, "discontinu": 0, "It": [0, 1, 3, 4, 5, 6], "essenti": 0, "zero": 0, "persist_sourcemap": 0, "_debug": 0, "persistsourcemapinput": 0, "project_root": [0, 5], "with_sourc": 0, "persist": [0, 5], "avm": [0, 5, 8], "debugg": [0, 8], "root": [0, 5], "project": [0, 5, 8], "dump": 0, "along": 0, "replace_template_vari": 0, "simulate_and_persist_respons": [0, 5], "buffer_size_mb": 0, "256": [0, 5], "simul": [0, 2, 5, 8], "atom": [0, 3, 5], "size": [0, 5], "trace": [0, 8], "buffer": [0, 5], "megabyt": [0, 5], "256mb": 0, "after": [0, 3], "consumpt": [0, 5], "transfer_asset": [0, 7], "assettransfertxn": [0, 7], "core": [1, 3, 4], "capabl": [1, 3, 4, 7], "util": [1, 3, 4, 6, 7], "inject": [1, 8], "well": 1, "encapsul": 1, "There": [1, 2, 3, 4, 7], "variou": [1, 2, 4, 8], "convent": [1, 3], "OR": [1, 2], "ny": 1, "power": 1, "new_account": 1, "generate_account": 1, "dispenser_mnemon": [1, 7], "function": [1, 2, 3, 4, 7, 8], "reli": 1, "being": [1, 3], "expos": [1, 2, 8], "These": [1, 2, 3, 5, 8], "retriev": [1, 3, 4], "beaker": [2, 3, 8], "data": [2, 3, 8], "usag": [2, 3, 4, 7], "exampl": [2, 3, 4, 5, 7], "check": [2, 3, 4, 7], "autom": [2, 3, 4, 7], "test": [2, 3, 4, 5, 7, 8], "wrapper": [2, 8], "correspond": 2, "two": [2, 6, 7], "wai": [2, 4, 6], "instanti": 2, "By": [2, 5], "uncondition": 2, "app_lookup": 2, "search": [2, 5], "under": [2, 3], "overridden": 2, "approach": [2, 8], "deriv": 2, "suggest": 2, "directli": [2, 6], "no_op": 2, "update_appl": 2, "remov": [2, 5], "delete_appl": 2, "close": 2, "support": [2, 3, 8], "everyth": 2, "select": 2, "explicitli": 2, "infer": 2, "bare": 2, "compat": 2, "made": [2, 7], "interpret": 2, "abireturnsubroutin": 2, "method_spec": 2, "algosd": 2, "python": [2, 3, 5], "keyword": 2, "hello": 2, "syntax": 2, "world": 2, "overrid": 2, "app_index": 2, "box_nam": 2, "page": 2, "suffici": 2, "futur": [2, 8], "dataclass": 2, "commoncallparamet": 2, "exact": 2, "depend": [2, 3], "algokit_util": [2, 4, 5, 6, 8], "compose_": 2, "first": [2, 6], "onc": [2, 4], "ad": 2, "For": [2, 5], "execute_atc": 2, "let": 2, "caus": 2, "throw": 2, "becaus": 2, "assert": 2, "lack": 2, "exhaust": 2, "opcod": 2, "budget": 2, "other": [2, 3, 7], "reason": 2, "look": 2, "someth": 2, "transactionpool": 2, "rememb": 2, "eval": 2, "error_messag": 2, "program_counter_valu": 2, "list_of_op_cod": 2, "messag": [2, 6], "combin": [2, 8], "much": 2, "easier": [2, 3, 8], "happen": [2, 3], "thrown": 2, "logic_error": 2, "line_no": 2, "insight": 2, "format": 2, "surround": 2, "extend": 2, "show": 2, "alreadi": [2, 3], "so": [2, 4, 7, 8], "previous": [2, 3], "crucial": 2, "complex": 2, "enabl": [0, 2, 5], "safe": [3, 8], "retryabl": [3, 8], "immut": [3, 8], "perman": [3, 8], "higher": [3, 7, 8], "order": [3, 7, 8], "build": [3, 5, 8], "particularli": 3, "articul": 3, "record": 3, "while": [3, 6], "implement": 3, "natur": [3, 8], "evolv": [3, 8], "over": [3, 8], "diverg": 3, "principl": [3, 4], "goal": [3, 8], "comprehens": 3, "explain": 3, "concept": 3, "lifecycl": 3, "transpil": 3, "verifi": 3, "maintain": 3, "stabil": 3, "qualiti": 3, "final": 3, "runtim": 3, "confid": 3, "correct": 3, "utilis": 3, "furthermor": 3, "characterist": 3, "per": 3, "built": [3, 8], "framework": 3, "0004": 3, "mean": [3, 5], "languag": 3, "typescript": [3, 8], "explicit": 3, "upgrad": 3, "vari": 3, "present": 3, "whether": [3, 5], "had": 3, "creatoraccount": 3, "seri": 3, "lookup": 3, "payload": 3, "boolean": 3, "chronolog": 3, "trivial": 3, "recommend": 3, "durat": 3, "recalcul": 3, "most": [3, 5], "prefer": [3, 4, 8], "fresh": 3, "logic": [3, 4, 8], "detect": 3, "doe": [3, 7], "concert": 3, "reliabl": 3, "popul": 3, "sinc": 3, "again": 3, "appli": 3, "straight": 3, "do": 3, "abov": 3, "abil": [3, 7, 8], "In": 3, "arrai": 3, "wil": 3, "hexadecim": 3, "shouldn": 3, "beaker_product": 3, "action_taken": 3, "done": [3, 6], "up": 3, "create_respons": 3, "update_respons": 3, "delete_respons": 3, "underli": [4, 7, 8], "class": [4, 5, 8], "inlin": 4, "modular": [4, 8], "interfac": [4, 8], "produc": 4, "myalgodnod": 4, "secret_token": 4, "get_algonode_config": 4, "node": 4, "configorport": 4, "assumpt": 4, "host": 4, "packag": 5, "tool": [5, 8], "optim": [5, 8], "who": [5, 8], "extens": [0, 5, 8], "py": 5, "updatableconfig": 5, "attribut": 5, "mode": 5, "ignor": 5, "insid": 5, "toml": 5, "simpli": [5, 8], "folder": 5, "algokit_project_root": 5, "trace_al": 5, "endpoint": [5, 6], "etc": 5, "trace_buffer_size_mb": 5, "exceed": 5, "oldest": 5, "max_search_depth": 5, "depth": 5, "travers": 5, "10": 5, "assum": 5, "your": [5, 6, 8], "simplifi": 5, "gather": 5, "thei": 5, "timestamp": 5, "_lr": 5, "last_round": 5, "_": 5, "transaction_typ": 5, "iso": 5, "8601": 5, "colon": 5, "period": 5, "count": 5, "separ": [5, 7], "underscor": 5, "might": 5, "20220301t123456z_lr1000_2": [], "pay_1": [], "axfer": [], "2022": 5, "03": 5, "01t12": 5, "34": 5, "56z": 5, "author": 6, "your_auth_token": 6, "receiver_address": 6, "fundrespons": 6, "keep": 6, "mind": 6, "yourself": 6, "invok": [6, 7], "txn_id": 6, "txn": 6, "inspect": 6, "account_address": 6, "limitrespons": 6, "individu": 6, "easili": [7, 8], "facilit": [7, 8], "transfer_paramet": 7, "from_account": 7, "to_address": 7, "micro_algo": 7, "micro": 7, "dispos": 7, "incredibli": 7, "script": 7, "those": 7, "use_dispenser_api": 7, "sure": 7, "document": 7, "smallest": 7, "divis": 7, "unit": 7, "programmat": 7, "sent": 7, "abstract": 7, "dedic": 7, "releas": 8, "pypi": 8, "solut": 8, "intuit": 8, "quicker": 8, "safer": 8, "larg": 8, "sdk": 8, "level": 8, "sensibl": 8, "common": 8, "task": 8, "equival": 8, "design": 8, "compos": 8, "read": 8, "diagnos": 8, "debug": 8, "thin": 8, "block": 8, "primit": 8, "wherev": 8, "safeti": 8, "strong": 8, "effort": 8, "put": 8, "good": 8, "intellisens": 8, "highli": 8, "mechan": 8, "terser": 8, "pip": 8, "poetri": 8, "Then": 8, "favourit": 8, "integr": 8, "mypi": 8, "incorrect": 8, "incorrectli": 8, "multisig": 8, "we": 8, "experi": 8, "improv": 8, "expand": 8, "persist_map": 0, "legaci": 0, "behavior": 0, "vscode": 0, "20220301t123456z_lr1000_2pay_1axf": 5}, "objects": {"": [[0, 0, 0, "-", "algokit_utils"]], "algokit_utils": [[0, 1, 1, "", "ABICallArgs"], [0, 1, 1, "", "ABICallArgsDict"], [0, 1, 1, "", "ABICreateCallArgs"], [0, 1, 1, "", "ABICreateCallArgsDict"], [0, 1, 1, "", "ABITransactionResponse"], [0, 1, 1, "", "Account"], [0, 1, 1, "", "AlgoClientConfig"], [0, 1, 1, "", "AppDeployMetaData"], [0, 1, 1, "", "AppLookup"], [0, 1, 1, "", "AppMetaData"], [0, 1, 1, "", "AppReference"], [0, 4, 1, "", "AppSpecStateDict"], [0, 1, 1, "", "ApplicationClient"], [0, 1, 1, "", "ApplicationSpecification"], [0, 1, 1, "", "CallConfig"], [0, 1, 1, "", "CreateCallParameters"], [0, 1, 1, "", "CreateCallParametersDict"], [0, 1, 1, "", "CreateTransactionParameters"], [0, 4, 1, "", "DELETABLE_TEMPLATE_NAME"], [0, 1, 1, "", "DefaultArgumentDict"], [0, 4, 1, "", "DefaultArgumentType"], [0, 1, 1, "", "DeployCallArgs"], [0, 1, 1, "", "DeployCallArgsDict"], [0, 1, 1, "", "DeployCreateCallArgs"], [0, 1, 1, "", "DeployCreateCallArgsDict"], [0, 1, 1, "", "DeployResponse"], [0, 1, 1, "", "EnsureBalanceParameters"], [0, 1, 1, "", "EnsureFundedResponse"], [0, 4, 1, "", "MethodConfigDict"], [0, 1, 1, "", "MethodHints"], [0, 4, 1, "", "NOTE_PREFIX"], [0, 4, 1, "", "OnCompleteActionName"], [0, 1, 1, "", "OnCompleteCallParameters"], [0, 1, 1, "", "OnCompleteCallParametersDict"], [0, 1, 1, "", "OnSchemaBreak"], [0, 1, 1, "", "OnUpdate"], [0, 1, 1, "", "OperationPerformed"], [0, 1, 1, "", "Program"], [0, 4, 1, "", "TemplateValueDict"], [0, 4, 1, "", "TemplateValueMapping"], [0, 1, 1, "", "TestNetDispenserApiClient"], [0, 1, 1, "", "TransactionParameters"], [0, 1, 1, "", "TransactionParametersDict"], [0, 1, 1, "", "TransactionResponse"], [0, 1, 1, "", "TransferAssetParameters"], [0, 1, 1, "", "TransferParameters"], [0, 4, 1, "", "UPDATABLE_TEMPLATE_NAME"], [0, 6, 1, "", "create_kmd_wallet_account"], [0, 6, 1, "", "ensure_funded"], [0, 6, 1, "", "execute_atc_with_logic_error"], [0, 6, 1, "", "get_account"], [0, 6, 1, "", "get_account_from_mnemonic"], [0, 6, 1, "", "get_algod_client"], [0, 6, 1, "", "get_app_id_from_tx_id"], [0, 6, 1, "", "get_creator_apps"], [0, 6, 1, "", "get_default_localnet_config"], [0, 6, 1, "", "get_dispenser_account"], [0, 6, 1, "", "get_indexer_client"], [0, 6, 1, "", "get_kmd_client_from_algod_client"], [0, 6, 1, "", "get_kmd_wallet_account"], [0, 6, 1, "", "get_localnet_default_account"], [0, 6, 1, "", "get_next_version"], [0, 6, 1, "", "get_or_create_kmd_wallet_account"], [0, 6, 1, "", "get_sender_from_signer"], [0, 6, 1, "", "is_localnet"], [0, 6, 1, "", "is_mainnet"], [0, 6, 1, "", "is_testnet"], [0, 6, 1, "", "num_extra_program_pages"], [0, 6, 1, "", "opt_in"], [0, 6, 1, "", "opt_out"], [0, 6, 1, "", "persist_sourcemaps"], [0, 6, 1, "", "replace_template_variables"], [0, 6, 1, "", "simulate_and_persist_response"], [0, 6, 1, "", "transfer"], [0, 6, 1, "", "transfer_asset"]], "algokit_utils.ABITransactionResponse": [[0, 2, 1, "", "decode_error"], [0, 2, 1, "", "method"], [0, 2, 1, "", "raw_value"], [0, 2, 1, "", "return_value"], [0, 2, 1, "", "tx_info"]], "algokit_utils.Account": [[0, 2, 1, "", "address"], [0, 2, 1, "", "private_key"], [0, 3, 1, "", "public_key"], [0, 3, 1, "", "signer"]], "algokit_utils.AlgoClientConfig": [[0, 2, 1, "", "server"], [0, 2, 1, "", "token"]], "algokit_utils.ApplicationClient": [[0, 5, 1, "", "add_method_call"], [0, 5, 1, "", "call"], [0, 5, 1, "", "clear_state"], [0, 5, 1, "", "close_out"], [0, 5, 1, "", "compose_call"], [0, 5, 1, "", "compose_clear_state"], [0, 5, 1, "", "compose_close_out"], [0, 5, 1, "", "compose_create"], [0, 5, 1, "", "compose_delete"], [0, 5, 1, "", "compose_opt_in"], [0, 5, 1, "", "compose_update"], [0, 5, 1, "", "create"], [0, 5, 1, "", "delete"], [0, 5, 1, "", "deploy"], [0, 5, 1, "", "export_source_map"], [0, 5, 1, "", "get_global_state"], [0, 5, 1, "", "get_local_state"], [0, 5, 1, "", "get_signer_sender"], [0, 5, 1, "", "import_source_map"], [0, 5, 1, "", "opt_in"], [0, 5, 1, "", "prepare"], [0, 5, 1, "", "resolve"], [0, 5, 1, "", "resolve_signer_sender"], [0, 5, 1, "", "update"]], "algokit_utils.ApplicationSpecification": [[0, 5, 1, "", "export"]], "algokit_utils.CallConfig": [[0, 2, 1, "", "ALL"], [0, 2, 1, "", "CALL"], [0, 2, 1, "", "CREATE"], [0, 2, 1, "", "NEVER"]], "algokit_utils.EnsureBalanceParameters": [[0, 2, 1, "", "account_to_fund"], [0, 2, 1, "", "fee_micro_algos"], [0, 2, 1, "", "funding_source"], [0, 2, 1, "", "max_fee_micro_algos"], [0, 2, 1, "", "min_funding_increment_micro_algos"], [0, 2, 1, "", "min_spending_balance_micro_algos"], [0, 2, 1, "", "note"], [0, 2, 1, "", "suggested_params"]], "algokit_utils.EnsureFundedResponse": [[0, 2, 1, "", "transaction_id"]], "algokit_utils.OnSchemaBreak": [[0, 2, 1, "", "AppendApp"], [0, 2, 1, "", "Fail"], [0, 2, 1, "", "ReplaceApp"]], "algokit_utils.OnUpdate": [[0, 2, 1, "", "AppendApp"], [0, 2, 1, "", "Fail"], [0, 2, 1, "", "ReplaceApp"], [0, 2, 1, "", "UpdateApp"]], "algokit_utils.OperationPerformed": [[0, 2, 1, "", "Create"], [0, 2, 1, "", "Nothing"], [0, 2, 1, "", "Replace"], [0, 2, 1, "", "Update"]], "algokit_utils.TestNetDispenserApiClient": [[0, 5, 1, "", "fund"], [0, 5, 1, "", "get_limit"], [0, 5, 1, "", "refund"]], "algokit_utils.TransactionParameters": [[0, 2, 1, "", "accounts"], [0, 2, 1, "", "boxes"], [0, 2, 1, "", "foreign_apps"], [0, 2, 1, "", "foreign_assets"], [0, 2, 1, "", "lease"], [0, 2, 1, "", "note"], [0, 2, 1, "", "rekey_to"], [0, 2, 1, "", "sender"], [0, 2, 1, "", "signer"], [0, 2, 1, "", "suggested_params"]], "algokit_utils.TransactionParametersDict": [[0, 2, 1, "", "accounts"], [0, 2, 1, "", "boxes"], [0, 2, 1, "", "foreign_apps"], [0, 2, 1, "", "foreign_assets"], [0, 2, 1, "", "lease"], [0, 2, 1, "", "note"], [0, 2, 1, "", "rekey_to"], [0, 2, 1, "", "sender"], [0, 2, 1, "", "signer"], [0, 2, 1, "", "suggested_params"]], "algokit_utils.TransactionResponse": [[0, 2, 1, "", "confirmed_round"], [0, 5, 1, "", "from_atr"], [0, 2, 1, "", "tx_id"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:property", "4": "py:data", "5": "py:method", "6": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "property", "Python property"], "4": ["py", "data", "Python data"], "5": ["py", "method", "Python method"], "6": ["py", "function", "Python function"]}, "titleterms": {"algokit_util": 0, "data": 0, "class": 0, "function": 0, "convent": 0, "exampl": 0, "account": [1, 6], "manag": [1, 4], "app": [2, 3], "client": [2, 4, 6], "design": [2, 3], "creat": [2, 6], "an": [2, 3, 6], "applic": [2, 3], "call": 2, "method": 2, "specifi": 2, "which": 2, "abi": 2, "argument": 2, "transact": 2, "paramet": [2, 3], "compos": 2, "read": 2, "state": 2, "handl": [2, 6], "logic": 2, "error": [2, 6], "diagnos": 2, "debug": [2, 5], "mode": 2, "trace": [2, 5], "field": 2, "deploy": 3, "find": 3, "creator": 3, "deploi": 3, "input": 3, "idempot": 3, "compil": 3, "templat": 3, "substitut": 3, "return": 3, "valu": 3, "network": 4, "configur": [4, 5], "debugg": 5, "util": [5, 8], "filenam": 5, "format": 5, "testnet": 6, "dispens": [6, 7], "fund": 6, "regist": 6, "refund": 6, "get": 6, "current": 6, "limit": 6, "algo": 7, "transfer": 7, "ensur": 7, "minimum": 7, "asset": 7, "algokit": 8, "python": 8, "content": 8, "core": 8, "principl": 8, "instal": 8, "usag": 8, "type": 8, "capabl": 8, "refer": 8, "document": 8, "roadmap": 8, "indic": 8, "tabl": 8}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"algokit_utils": [[0, "module-algokit_utils"]], "Data": [[0, "data"]], "Classes": [[0, "classes"]], "Functions": [[0, "functions"]], "Convention": [[0, "convention"]], "Example": [[0, "example"]], "Account management": [[1, "account-management"]], "Account": [[1, "account"]], "App client": [[2, "app-client"]], "Design": [[2, "design"], [3, "design"]], "Creating an application client": [[2, "creating-an-application-client"]], "Calling methods on the app": [[2, "calling-methods-on-the-app"]], "Specifying which method": [[2, "specifying-which-method"]], "ABI arguments": [[2, "abi-arguments"]], "Transaction Parameters": [[2, "transaction-parameters"]], "Composing calls": [[2, "composing-calls"]], "Reading state": [[2, "reading-state"]], "Handling logic errors and diagnosing errors": [[2, "handling-logic-errors-and-diagnosing-errors"]], "Debug Mode and traces Field": [[2, "debug-mode-and-traces-field"]], "App deployment": [[3, "app-deployment"]], "Finding apps by creator": [[3, "finding-apps-by-creator"]], "Deploying an application": [[3, "deploying-an-application"]], "Input parameters": [[3, "input-parameters"]], "Idempotency": [[3, "idempotency"]], "Compilation and template substitution": [[3, "compilation-and-template-substitution"]], "Return value": [[3, "return-value"]], "Client management": [[4, "client-management"]], "Network configuration": [[4, "network-configuration"]], "Clients": [[4, "clients"]], "Debugger": [[5, "debugger"]], "Configuration": [[5, "configuration"]], "Debugging Utilities": [[5, "debugging-utilities"]], "Trace filename format": [[5, "trace-filename-format"]], "TestNet Dispenser Client": [[6, "testnet-dispenser-client"]], "Creating a Dispenser Client": [[6, "creating-a-dispenser-client"]], "Funding an Account": [[6, "funding-an-account"]], "Registering a Refund": [[6, "registering-a-refund"]], "Getting Current Limit": [[6, "getting-current-limit"]], "Error Handling": [[6, "error-handling"]], "Algo transfers": [[7, "algo-transfers"]], "Transferring Algos": [[7, "transferring-algos"]], "Ensuring minimum Algos": [[7, "ensuring-minimum-algos"]], "Transfering Assets": [[7, "transfering-assets"]], "Dispenser": [[7, "dispenser"]], "AlgoKit Python Utilities": [[8, "algokit-python-utilities"]], "Contents": [[8, null]], "Core principles": [[8, "core-principles"]], "Installation": [[8, "installation"]], "Usage": [[8, "usage"]], "Types": [[8, "types"]], "Capabilities": [[8, "capabilities"]], "Reference documentation": [[8, "reference-documentation"]], "Roadmap": [[8, "roadmap"]], "Indices and tables": [[8, "indices-and-tables"]]}, "indexentries": {"abicallargs (class in algokit_utils)": [[0, "algokit_utils.ABICallArgs"]], "abicallargsdict (class in algokit_utils)": [[0, "algokit_utils.ABICallArgsDict"]], "abicreatecallargs (class in algokit_utils)": [[0, "algokit_utils.ABICreateCallArgs"]], "abicreatecallargsdict (class in algokit_utils)": [[0, "algokit_utils.ABICreateCallArgsDict"]], "abitransactionresponse (class in algokit_utils)": [[0, "algokit_utils.ABITransactionResponse"]], "all (algokit_utils.callconfig attribute)": [[0, "algokit_utils.CallConfig.ALL"]], "account (class in algokit_utils)": [[0, "algokit_utils.Account"]], "algoclientconfig (class in algokit_utils)": [[0, "algokit_utils.AlgoClientConfig"]], "appdeploymetadata (class in algokit_utils)": [[0, "algokit_utils.AppDeployMetaData"]], "applookup (class in algokit_utils)": [[0, "algokit_utils.AppLookup"]], "appmetadata (class in algokit_utils)": [[0, "algokit_utils.AppMetaData"]], "appreference (class in algokit_utils)": [[0, "algokit_utils.AppReference"]], "appspecstatedict (in module algokit_utils)": [[0, "algokit_utils.AppSpecStateDict"]], "appendapp (algokit_utils.onschemabreak attribute)": [[0, "algokit_utils.OnSchemaBreak.AppendApp"]], "appendapp (algokit_utils.onupdate attribute)": [[0, "algokit_utils.OnUpdate.AppendApp"]], "applicationclient (class in algokit_utils)": [[0, "algokit_utils.ApplicationClient"]], "applicationspecification (class in algokit_utils)": [[0, "algokit_utils.ApplicationSpecification"]], "call (algokit_utils.callconfig attribute)": [[0, "algokit_utils.CallConfig.CALL"]], "create (algokit_utils.callconfig attribute)": [[0, "algokit_utils.CallConfig.CREATE"]], "callconfig (class in algokit_utils)": [[0, "algokit_utils.CallConfig"]], "create (algokit_utils.operationperformed attribute)": [[0, "algokit_utils.OperationPerformed.Create"]], "createcallparameters (class in algokit_utils)": [[0, "algokit_utils.CreateCallParameters"]], "createcallparametersdict (class in algokit_utils)": [[0, "algokit_utils.CreateCallParametersDict"]], "createtransactionparameters (class in algokit_utils)": [[0, "algokit_utils.CreateTransactionParameters"]], "deletable_template_name (in module algokit_utils)": [[0, "algokit_utils.DELETABLE_TEMPLATE_NAME"]], "defaultargumentdict (class in algokit_utils)": [[0, "algokit_utils.DefaultArgumentDict"]], "defaultargumenttype (in module algokit_utils)": [[0, "algokit_utils.DefaultArgumentType"]], "deploycallargs (class in algokit_utils)": [[0, "algokit_utils.DeployCallArgs"]], "deploycallargsdict (class in algokit_utils)": [[0, "algokit_utils.DeployCallArgsDict"]], "deploycreatecallargs (class in algokit_utils)": [[0, "algokit_utils.DeployCreateCallArgs"]], "deploycreatecallargsdict (class in algokit_utils)": [[0, "algokit_utils.DeployCreateCallArgsDict"]], "deployresponse (class in algokit_utils)": [[0, "algokit_utils.DeployResponse"]], "ensurebalanceparameters (class in algokit_utils)": [[0, "algokit_utils.EnsureBalanceParameters"]], "ensurefundedresponse (class in algokit_utils)": [[0, "algokit_utils.EnsureFundedResponse"]], "fail (algokit_utils.onschemabreak attribute)": [[0, "algokit_utils.OnSchemaBreak.Fail"]], "fail (algokit_utils.onupdate attribute)": [[0, "algokit_utils.OnUpdate.Fail"]], "methodconfigdict (in module algokit_utils)": [[0, "algokit_utils.MethodConfigDict"]], "methodhints (class in algokit_utils)": [[0, "algokit_utils.MethodHints"]], "never (algokit_utils.callconfig attribute)": [[0, "algokit_utils.CallConfig.NEVER"]], "note_prefix (in module algokit_utils)": [[0, "algokit_utils.NOTE_PREFIX"]], "nothing (algokit_utils.operationperformed attribute)": [[0, "algokit_utils.OperationPerformed.Nothing"]], "oncompleteactionname (in module algokit_utils)": [[0, "algokit_utils.OnCompleteActionName"]], "oncompletecallparameters (class in algokit_utils)": [[0, "algokit_utils.OnCompleteCallParameters"]], "oncompletecallparametersdict (class in algokit_utils)": [[0, "algokit_utils.OnCompleteCallParametersDict"]], "onschemabreak (class in algokit_utils)": [[0, "algokit_utils.OnSchemaBreak"]], "onupdate (class in algokit_utils)": [[0, "algokit_utils.OnUpdate"]], "operationperformed (class in algokit_utils)": [[0, "algokit_utils.OperationPerformed"]], "program (class in algokit_utils)": [[0, "algokit_utils.Program"]], "replace (algokit_utils.operationperformed attribute)": [[0, "algokit_utils.OperationPerformed.Replace"]], "replaceapp (algokit_utils.onschemabreak attribute)": [[0, "algokit_utils.OnSchemaBreak.ReplaceApp"]], "replaceapp (algokit_utils.onupdate attribute)": [[0, "algokit_utils.OnUpdate.ReplaceApp"]], "templatevaluedict (in module algokit_utils)": [[0, "algokit_utils.TemplateValueDict"]], "templatevaluemapping (in module algokit_utils)": [[0, "algokit_utils.TemplateValueMapping"]], "testnetdispenserapiclient (class in algokit_utils)": [[0, "algokit_utils.TestNetDispenserApiClient"]], "transactionparameters (class in algokit_utils)": [[0, "algokit_utils.TransactionParameters"]], "transactionparametersdict (class in algokit_utils)": [[0, "algokit_utils.TransactionParametersDict"]], "transactionresponse (class in algokit_utils)": [[0, "algokit_utils.TransactionResponse"]], "transferassetparameters (class in algokit_utils)": [[0, "algokit_utils.TransferAssetParameters"]], "transferparameters (class in algokit_utils)": [[0, "algokit_utils.TransferParameters"]], "updatable_template_name (in module algokit_utils)": [[0, "algokit_utils.UPDATABLE_TEMPLATE_NAME"]], "update (algokit_utils.operationperformed attribute)": [[0, "algokit_utils.OperationPerformed.Update"]], "updateapp (algokit_utils.onupdate attribute)": [[0, "algokit_utils.OnUpdate.UpdateApp"]], "account_to_fund (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.account_to_fund"]], "accounts (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.accounts"]], "accounts (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.accounts"]], "add_method_call() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.add_method_call"]], "address (algokit_utils.account attribute)": [[0, "algokit_utils.Account.address"]], "algokit_utils": [[0, "module-algokit_utils"]], "boxes (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.boxes"]], "boxes (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.boxes"]], "call() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.call"]], "clear_state() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.clear_state"]], "close_out() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.close_out"]], "compose_call() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_call"]], "compose_clear_state() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_clear_state"]], "compose_close_out() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_close_out"]], "compose_create() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_create"]], "compose_delete() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_delete"]], "compose_opt_in() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_opt_in"]], "compose_update() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.compose_update"]], "confirmed_round (algokit_utils.transactionresponse attribute)": [[0, "algokit_utils.TransactionResponse.confirmed_round"]], "create() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.create"]], "create_kmd_wallet_account() (in module algokit_utils)": [[0, "algokit_utils.create_kmd_wallet_account"]], "decode_error (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.decode_error"]], "delete() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.delete"]], "deploy() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.deploy"]], "ensure_funded() (in module algokit_utils)": [[0, "algokit_utils.ensure_funded"]], "execute_atc_with_logic_error() (in module algokit_utils)": [[0, "algokit_utils.execute_atc_with_logic_error"]], "export() (algokit_utils.applicationspecification method)": [[0, "algokit_utils.ApplicationSpecification.export"]], "export_source_map() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.export_source_map"]], "fee_micro_algos (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.fee_micro_algos"]], "foreign_apps (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.foreign_apps"]], "foreign_apps (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.foreign_apps"]], "foreign_assets (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.foreign_assets"]], "foreign_assets (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.foreign_assets"]], "from_atr() (algokit_utils.transactionresponse static method)": [[0, "algokit_utils.TransactionResponse.from_atr"]], "fund() (algokit_utils.testnetdispenserapiclient method)": [[0, "algokit_utils.TestNetDispenserApiClient.fund"]], "funding_source (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.funding_source"]], "get_account() (in module algokit_utils)": [[0, "algokit_utils.get_account"]], "get_account_from_mnemonic() (in module algokit_utils)": [[0, "algokit_utils.get_account_from_mnemonic"]], "get_algod_client() (in module algokit_utils)": [[0, "algokit_utils.get_algod_client"]], "get_app_id_from_tx_id() (in module algokit_utils)": [[0, "algokit_utils.get_app_id_from_tx_id"]], "get_creator_apps() (in module algokit_utils)": [[0, "algokit_utils.get_creator_apps"]], "get_default_localnet_config() (in module algokit_utils)": [[0, "algokit_utils.get_default_localnet_config"]], "get_dispenser_account() (in module algokit_utils)": [[0, "algokit_utils.get_dispenser_account"]], "get_global_state() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.get_global_state"]], "get_indexer_client() (in module algokit_utils)": [[0, "algokit_utils.get_indexer_client"]], "get_kmd_client_from_algod_client() (in module algokit_utils)": [[0, "algokit_utils.get_kmd_client_from_algod_client"]], "get_kmd_wallet_account() (in module algokit_utils)": [[0, "algokit_utils.get_kmd_wallet_account"]], "get_limit() (algokit_utils.testnetdispenserapiclient method)": [[0, "algokit_utils.TestNetDispenserApiClient.get_limit"]], "get_local_state() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.get_local_state"]], "get_localnet_default_account() (in module algokit_utils)": [[0, "algokit_utils.get_localnet_default_account"]], "get_next_version() (in module algokit_utils)": [[0, "algokit_utils.get_next_version"]], "get_or_create_kmd_wallet_account() (in module algokit_utils)": [[0, "algokit_utils.get_or_create_kmd_wallet_account"]], "get_sender_from_signer() (in module algokit_utils)": [[0, "algokit_utils.get_sender_from_signer"]], "get_signer_sender() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.get_signer_sender"]], "import_source_map() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.import_source_map"]], "is_localnet() (in module algokit_utils)": [[0, "algokit_utils.is_localnet"]], "is_mainnet() (in module algokit_utils)": [[0, "algokit_utils.is_mainnet"]], "is_testnet() (in module algokit_utils)": [[0, "algokit_utils.is_testnet"]], "lease (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.lease"]], "lease (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.lease"]], "max_fee_micro_algos (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.max_fee_micro_algos"]], "method (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.method"]], "min_funding_increment_micro_algos (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.min_funding_increment_micro_algos"]], "min_spending_balance_micro_algos (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.min_spending_balance_micro_algos"]], "module": [[0, "module-algokit_utils"]], "note (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.note"]], "note (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.note"]], "note (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.note"]], "num_extra_program_pages() (in module algokit_utils)": [[0, "algokit_utils.num_extra_program_pages"]], "opt_in() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.opt_in"]], "opt_in() (in module algokit_utils)": [[0, "algokit_utils.opt_in"]], "opt_out() (in module algokit_utils)": [[0, "algokit_utils.opt_out"]], "persist_sourcemaps() (in module algokit_utils)": [[0, "algokit_utils.persist_sourcemaps"]], "prepare() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.prepare"]], "private_key (algokit_utils.account attribute)": [[0, "algokit_utils.Account.private_key"]], "public_key (algokit_utils.account property)": [[0, "algokit_utils.Account.public_key"]], "raw_value (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.raw_value"]], "refund() (algokit_utils.testnetdispenserapiclient method)": [[0, "algokit_utils.TestNetDispenserApiClient.refund"]], "rekey_to (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.rekey_to"]], "rekey_to (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.rekey_to"]], "replace_template_variables() (in module algokit_utils)": [[0, "algokit_utils.replace_template_variables"]], "resolve() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.resolve"]], "resolve_signer_sender() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.resolve_signer_sender"]], "return_value (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.return_value"]], "sender (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.sender"]], "sender (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.sender"]], "server (algokit_utils.algoclientconfig attribute)": [[0, "algokit_utils.AlgoClientConfig.server"]], "signer (algokit_utils.account property)": [[0, "algokit_utils.Account.signer"]], "signer (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.signer"]], "signer (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.signer"]], "simulate_and_persist_response() (in module algokit_utils)": [[0, "algokit_utils.simulate_and_persist_response"]], "suggested_params (algokit_utils.ensurebalanceparameters attribute)": [[0, "algokit_utils.EnsureBalanceParameters.suggested_params"]], "suggested_params (algokit_utils.transactionparameters attribute)": [[0, "algokit_utils.TransactionParameters.suggested_params"]], "suggested_params (algokit_utils.transactionparametersdict attribute)": [[0, "algokit_utils.TransactionParametersDict.suggested_params"]], "token (algokit_utils.algoclientconfig attribute)": [[0, "algokit_utils.AlgoClientConfig.token"]], "transaction_id (algokit_utils.ensurefundedresponse attribute)": [[0, "algokit_utils.EnsureFundedResponse.transaction_id"]], "transfer() (in module algokit_utils)": [[0, "algokit_utils.transfer"]], "transfer_asset() (in module algokit_utils)": [[0, "algokit_utils.transfer_asset"]], "tx_id (algokit_utils.transactionresponse attribute)": [[0, "algokit_utils.TransactionResponse.tx_id"]], "tx_info (algokit_utils.abitransactionresponse attribute)": [[0, "algokit_utils.ABITransactionResponse.tx_info"]], "update() (algokit_utils.applicationclient method)": [[0, "algokit_utils.ApplicationClient.update"]]}}) \ No newline at end of file diff --git a/docs/markdown/apidocs/algokit_utils/algokit_utils.md b/docs/markdown/apidocs/algokit_utils/algokit_utils.md index d760378..8c99123 100644 --- a/docs/markdown/apidocs/algokit_utils/algokit_utils.md +++ b/docs/markdown/apidocs/algokit_utils/algokit_utils.md @@ -1049,7 +1049,7 @@ Returns: dict[int, str]: A dictionary where the keys are the asset IDs and the values are the transaction IDs of the executed transactions. -### algokit_utils.persist_sourcemaps(\*, sources: [list](https://docs.python.org/3/library/stdtypes.html#list)[algokit_utils._debugging.PersistSourceMapInput], project_root: [pathlib.Path](https://docs.python.org/3/library/pathlib.html#pathlib.Path), client: [algosdk.v2client.algod.AlgodClient](https://py-algorand-sdk.readthedocs.io/en/latest/algosdk/v2client/algod.html#algosdk.v2client.algod.AlgodClient), with_sources: [bool](https://docs.python.org/3/library/functions.html#bool) = True) → [None](https://docs.python.org/3/library/constants.html#None) +### algokit_utils.persist_sourcemaps(\*, sources: [list](https://docs.python.org/3/library/stdtypes.html#list)[algokit_utils._debugging.PersistSourceMapInput], project_root: [pathlib.Path](https://docs.python.org/3/library/pathlib.html#pathlib.Path), client: [algosdk.v2client.algod.AlgodClient](https://py-algorand-sdk.readthedocs.io/en/latest/algosdk/v2client/algod.html#algosdk.v2client.algod.AlgodClient), with_sources: [bool](https://docs.python.org/3/library/functions.html#bool) = True, persist_mappings: [bool](https://docs.python.org/3/library/functions.html#bool) = False) → [None](https://docs.python.org/3/library/constants.html#None) Persist the sourcemaps for the given sources as an AlgoKit AVM Debugger compliant artifacts. Args: @@ -1058,6 +1058,8 @@ project_root (Path): The root directory of the project. client (AlgodClient): An AlgodClient object for interacting with the Algorand blockchain. with_sources (bool): If True, it will dump teal source files along with sourcemaps. Default is True, as needed by an AlgoKit AVM debugger. +persist_mappings (bool): Enables legacy behavior of persisting the `sources.avm.json` mappings to +the project root. Default is False, given that the AlgoKit AVM VSCode extension will manage the mappings. ### algokit_utils.replace_template_variables(program: [str](https://docs.python.org/3/library/stdtypes.html#str), template_values: [algokit_utils.deploy.TemplateValueMapping](#algokit_utils.TemplateValueMapping)) → [str](https://docs.python.org/3/library/stdtypes.html#str) diff --git a/docs/markdown/capabilities/debugger.md b/docs/markdown/capabilities/debugger.md index 89d9fc6..ac23a73 100644 --- a/docs/markdown/capabilities/debugger.md +++ b/docs/markdown/capabilities/debugger.md @@ -26,7 +26,6 @@ config.configure(debug=True) Debugging utilities can be used to simplify gathering artifacts to be used with [AlgoKit AVM Debugger](https://github.com/algorandfoundation/algokit-avm-vscode-debugger) in non algokit compliant projects. The following methods are provided: -- `persist_sourcemaps`: This method persists the sourcemaps for the given sources as AVM Debugger compliant artifacts. It takes a list of `PersistSourceMapInput` objects, a `Path` object representing the root directory of the project, an `AlgodClient` object for interacting with the Algorand blockchain, and a boolean indicating whether to dump teal source files along with sourcemaps. - `simulate_and_persist_response`: This method simulates the atomic transactions using the provided `AtomicTransactionComposer` object and `AlgodClient` object, and persists the simulation response to an AVM Debugger compliant JSON file. It takes an `AtomicTransactionComposer` object representing the atomic transactions to be simulated and persisted, a `Path` object representing the root directory of the project, an `AlgodClient` object representing the Algorand client, and a float representing the size of the trace buffer in megabytes. ### Trace filename format @@ -41,6 +40,6 @@ Where: - `timestamp`: The time when the trace file was created, in ISO 8601 format, with colons and periods removed. - `last_round`: The last round when the simulation was performed. -- `transaction_types`: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as `${count}#${type}`, and different transaction types are separated by underscores. +- `transaction_types`: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as `${count}${type}`, and different transaction types are separated by underscores. -For example, a trace file might be named `20220301T123456Z_lr1000_2#pay_1#axfer.trace.avm.json`, indicating that the trace file was created at `2022-03-01T12:34:56Z`, the last round was `1000`, and the atomic group contained 2 payment transactions and 1 asset transfer transaction. +For example, a trace file might be named `20220301T123456Z_lr1000_2pay_1axfer.trace.avm.json`, indicating that the trace file was created at `2022-03-01T12:34:56Z`, the last round was `1000`, and the atomic group contained 2 payment transactions and 1 asset transfer transaction. diff --git a/docs/source/capabilities/debugger.md b/docs/source/capabilities/debugger.md index 96ff7d2..ac23a73 100644 --- a/docs/source/capabilities/debugger.md +++ b/docs/source/capabilities/debugger.md @@ -6,11 +6,11 @@ The AlgoKit Python Utilities package provides a set of debugging tools that can The `config.py` file contains the `UpdatableConfig` class which manages and updates configuration settings for the AlgoKit project. The class has the following attributes: -- `debug`: Indicates whether debug mode is enabled. -- `project_root`: The path to the project root directory. Can be ignored if you are using `algokit_utils` inside an `algokit` compliant project (containing `.algokit.toml` file). For non algokit compliant projects, simply provide the path to the folder where you want to store sourcemaps and traces to be used with [`AlgoKit AVM Debugger`](https://github.com/algorandfoundation/algokit-avm-vscode-debugger). Alternatively you can also set the value via the `ALGOKIT_PROJECT_ROOT` environment variable. -- `trace_all`: Indicates whether to trace all operations. Defaults to false, this means that when debug mode is enabled, any (or all) application client calls performed via `algokit_utils` will store responses from `simulate` endpoint. These files are called traces, and can be used with `AlgoKit AVM Debugger` to debug TEAL source codes, transactions in the atomic group and etc. -- `trace_buffer_size_mb`: The size of the trace buffer in megabytes. By default uses 256 megabytes. When output folder containing debug trace files exceedes the size, oldest files are removed to optimize for storage consumption. -- `max_search_depth`: The maximum depth to search for a an `algokit` config file. By default it will traverse at most 10 folders searching for `.algokit.toml` file which will be used to assume algokit compliant project root path. +- `debug`: Indicates whether debug mode is enabled. +- `project_root`: The path to the project root directory. Can be ignored if you are using `algokit_utils` inside an `algokit` compliant project (containing `.algokit.toml` file). For non algokit compliant projects, simply provide the path to the folder where you want to store sourcemaps and traces to be used with [`AlgoKit AVM Debugger`](https://github.com/algorandfoundation/algokit-avm-vscode-debugger). Alternatively you can also set the value via the `ALGOKIT_PROJECT_ROOT` environment variable. +- `trace_all`: Indicates whether to trace all operations. Defaults to false, this means that when debug mode is enabled, any (or all) application client calls performed via `algokit_utils` will store responses from `simulate` endpoint. These files are called traces, and can be used with `AlgoKit AVM Debugger` to debug TEAL source codes, transactions in the atomic group and etc. +- `trace_buffer_size_mb`: The size of the trace buffer in megabytes. By default uses 256 megabytes. When output folder containing debug trace files exceedes the size, oldest files are removed to optimize for storage consumption. +- `max_search_depth`: The maximum depth to search for a an `algokit` config file. By default it will traverse at most 10 folders searching for `.algokit.toml` file which will be used to assume algokit compliant project root path. The `configure` method can be used to set these attributes. @@ -26,8 +26,7 @@ config.configure(debug=True) Debugging utilities can be used to simplify gathering artifacts to be used with [AlgoKit AVM Debugger](https://github.com/algorandfoundation/algokit-avm-vscode-debugger) in non algokit compliant projects. The following methods are provided: -- `persist_sourcemaps`: This method persists the sourcemaps for the given sources as AVM Debugger compliant artifacts. It takes a list of `PersistSourceMapInput` objects, a `Path` object representing the root directory of the project, an `AlgodClient` object for interacting with the Algorand blockchain, and a boolean indicating whether to dump teal source files along with sourcemaps. -- `simulate_and_persist_response`: This method simulates the atomic transactions using the provided `AtomicTransactionComposer` object and `AlgodClient` object, and persists the simulation response to an AVM Debugger compliant JSON file. It takes an `AtomicTransactionComposer` object representing the atomic transactions to be simulated and persisted, a `Path` object representing the root directory of the project, an `AlgodClient` object representing the Algorand client, and a float representing the size of the trace buffer in megabytes. +- `simulate_and_persist_response`: This method simulates the atomic transactions using the provided `AtomicTransactionComposer` object and `AlgodClient` object, and persists the simulation response to an AVM Debugger compliant JSON file. It takes an `AtomicTransactionComposer` object representing the atomic transactions to be simulated and persisted, a `Path` object representing the root directory of the project, an `AlgodClient` object representing the Algorand client, and a float representing the size of the trace buffer in megabytes. ### Trace filename format @@ -39,8 +38,8 @@ The trace files are named in a specific format to provide useful information abo Where: -- `timestamp`: The time when the trace file was created, in ISO 8601 format, with colons and periods removed. -- `last_round`: The last round when the simulation was performed. -- `transaction_types`: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as `${count}#${type}`, and different transaction types are separated by underscores. +- `timestamp`: The time when the trace file was created, in ISO 8601 format, with colons and periods removed. +- `last_round`: The last round when the simulation was performed. +- `transaction_types`: A string representing the types and counts of transactions in the atomic group. Each transaction type is represented as `${count}${type}`, and different transaction types are separated by underscores. -For example, a trace file might be named `20220301T123456Z_lr1000_2#pay_1#axfer.trace.avm.json`, indicating that the trace file was created at `2022-03-01T12:34:56Z`, the last round was `1000`, and the atomic group contained 2 payment transactions and 1 asset transfer transaction. +For example, a trace file might be named `20220301T123456Z_lr1000_2pay_1axfer.trace.avm.json`, indicating that the trace file was created at `2022-03-01T12:34:56Z`, the last round was `1000`, and the atomic group contained 2 payment transactions and 1 asset transfer transaction. diff --git a/src/algokit_utils/_debugging.py b/src/algokit_utils/_debugging.py index 5563a08..b10356f 100644 --- a/src/algokit_utils/_debugging.py +++ b/src/algokit_utils/_debugging.py @@ -27,7 +27,7 @@ TRACES_FILE_EXT = ".trace.avm.json" DEBUG_TRACES_DIR = "debug_traces" TEAL_FILE_EXT = ".teal" -TEAL_SOURCEMAP_EXT = ".teal.tok.map" +TEAL_SOURCEMAP_EXT = ".teal.map" @dataclass @@ -107,37 +107,6 @@ def _load_or_create_sources(sources_path: Path) -> AVMDebuggerSourceMap: return AVMDebuggerSourceMap.from_dict(json.load(f)) -def _upsert_debug_sourcemaps(sourcemaps: list[AVMDebuggerSourceMapEntry], project_root: Path) -> None: - """ - This function updates or inserts debug sourcemaps. If path in the sourcemap during iteration leads to non - existing file, removes it. Otherwise upserts. - - Args: - sourcemaps (list[AVMDebuggerSourceMapEntry]): A list of AVMDebuggerSourceMapEntry objects. - project_root (Path): The root directory of the project. - - Returns: - None - """ - - sources_path = project_root / ALGOKIT_DIR / SOURCES_DIR / SOURCES_FILE - sources = _load_or_create_sources(sources_path) - - for sourcemap in sourcemaps: - source_file_path = Path(sourcemap.location) - if not source_file_path.exists() and sourcemap in sources.txn_group_sources: - sources.txn_group_sources.remove(sourcemap) - elif source_file_path.exists(): - if sourcemap not in sources.txn_group_sources: - sources.txn_group_sources.append(sourcemap) - else: - index = sources.txn_group_sources.index(sourcemap) - sources.txn_group_sources[index] = sourcemap - - with sources_path.open("w") as f: - json.dump(sources.to_dict(), f) - - def _write_to_file(path: Path, content: str) -> None: path.parent.mkdir(parents=True, exist_ok=True) path.write_text(content) @@ -174,8 +143,29 @@ def _build_avm_sourcemap( # noqa: PLR0913 return AVMDebuggerSourceMapEntry(str(source_map_output_path), program_hash) +def cleanup_old_trace_files(output_dir: Path, buffer_size_mb: float) -> None: + """ + Cleanup old trace files if total size exceeds buffer size limit. + + Args: + output_dir (Path): Directory containing trace files + buffer_size_mb (float): Maximum allowed size in megabytes + """ + total_size = sum(f.stat().st_size for f in output_dir.glob("*") if f.is_file()) + if total_size > buffer_size_mb * 1024 * 1024: + sorted_files = sorted(output_dir.glob("*"), key=lambda p: p.stat().st_mtime) + while total_size > buffer_size_mb * 1024 * 1024 and sorted_files: + oldest_file = sorted_files.pop(0) + total_size -= oldest_file.stat().st_size + oldest_file.unlink() + + def persist_sourcemaps( - *, sources: list[PersistSourceMapInput], project_root: Path, client: "AlgodClient", with_sources: bool = True + *, + sources: list[PersistSourceMapInput], + project_root: Path, + client: "AlgodClient", + with_sources: bool = True, ) -> None: """ Persist the sourcemaps for the given sources as an AlgoKit AVM Debugger compliant artifacts. @@ -187,7 +177,7 @@ def persist_sourcemaps( Default is True, as needed by an AlgoKit AVM debugger. """ - sourcemaps = [ + for source in sources: _build_avm_sourcemap( raw_teal=source.raw_teal, compiled_teal=source.compiled_teal, @@ -197,10 +187,6 @@ def persist_sourcemaps( client=client, with_sources=with_sources, ) - for source in sources - ] - - _upsert_debug_sourcemaps(sourcemaps, project_root) def simulate_response(atc: AtomicTransactionComposer, algod_client: "AlgodClient") -> SimulateAtomicTransactionResponse: @@ -257,24 +243,20 @@ def simulate_and_persist_response( response = simulate_response(atc_to_simulate, algod_client) txn_results = response.simulate_response["txn-groups"] - txn_types = [txn_result["txn-results"][0]["txn-result"]["txn"]["txn"]["type"] for txn_result in txn_results] - txn_types_count = {txn_type: txn_types.count(txn_type) for txn_type in set(txn_types)} - txn_types_str = "_".join([f"{count}#{txn_type}" for txn_type, count in txn_types_count.items()]) + txn_types = [ + txn["txn-result"]["txn"]["txn"]["type"] for txn_result in txn_results for txn in txn_result["txn-results"] + ] + txn_types_count = {} + for txn_type in txn_types: + if txn_type not in txn_types_count: + txn_types_count[txn_type] = txn_types.count(txn_type) + txn_types_str = "_".join([f"{count}{txn_type}" for txn_type, count in txn_types_count.items()]) last_round = response.simulate_response["last-round"] timestamp = datetime.now(tz=timezone.utc).strftime("%Y%m%d_%H%M%S") output_file = project_root / DEBUG_TRACES_DIR / f"{timestamp}_lr{last_round}_{txn_types_str}{TRACES_FILE_EXT}" output_file.parent.mkdir(parents=True, exist_ok=True) - - # cleanup old files if buffer size is exceeded - total_size = sum(f.stat().st_size for f in output_file.parent.glob("*") if f.is_file()) - if total_size > buffer_size_mb * 1024 * 1024: - sorted_files = sorted(output_file.parent.glob("*"), key=lambda p: p.stat().st_mtime) - while total_size > buffer_size_mb * 1024 * 1024: - oldest_file = sorted_files.pop(0) - total_size -= oldest_file.stat().st_size - oldest_file.unlink() - + cleanup_old_trace_files(output_file.parent, buffer_size_mb) output_file.write_text(json.dumps(response.simulate_response, indent=2)) return response diff --git a/tests/test_debug_utils.py b/tests/test_debug_utils.py index 459bd12..976a00c 100644 --- a/tests/test_debug_utils.py +++ b/tests/test_debug_utils.py @@ -1,11 +1,15 @@ import json +import os +from dataclasses import dataclass +from datetime import datetime, timezone +from pathlib import Path from typing import TYPE_CHECKING from unittest.mock import Mock import pytest from algokit_utils._debugging import ( - AVMDebuggerSourceMap, PersistSourceMapInput, + cleanup_old_trace_files, persist_sourcemaps, simulate_and_persist_response, ) @@ -19,9 +23,9 @@ AtomicTransactionComposer, TransactionWithSigner, ) -from algosdk.transaction import PaymentTxn +from algosdk.transaction import AssetTransferTxn, PaymentTxn -from tests.conftest import check_output_stability, get_unique_name +from tests.conftest import get_unique_name if TYPE_CHECKING: from algosdk.v2client.algod import AlgodClient @@ -59,23 +63,11 @@ def test_build_teal_sourcemaps(algod_client: "AlgodClient", tmp_path_factory: py sourcemap_file_path = root_path / "sources.avm.json" app_output_path = root_path / "cool_app" - assert (sourcemap_file_path).exists() + assert not (sourcemap_file_path).exists() assert (app_output_path / "approval.teal").exists() - assert (app_output_path / "approval.teal.tok.map").exists() + assert (app_output_path / "approval.teal.map").exists() assert (app_output_path / "clear.teal").exists() - assert (app_output_path / "clear.teal.tok.map").exists() - - result = AVMDebuggerSourceMap.from_dict(json.loads(sourcemap_file_path.read_text())) - for item in result.txn_group_sources: - item.location = "dummy" - - check_output_stability(json.dumps(result.to_dict())) - - # check for updates in case of multiple runs - persist_sourcemaps(sources=sources, project_root=cwd, client=algod_client) - result = AVMDebuggerSourceMap.from_dict(json.loads(sourcemap_file_path.read_text())) - for item in result.txn_group_sources: - assert item.location != "dummy" + assert (app_output_path / "clear.teal.map").exists() def test_build_teal_sourcemaps_without_sources( @@ -104,18 +96,13 @@ def test_build_teal_sourcemaps_without_sources( sourcemap_file_path = root_path / "sources.avm.json" app_output_path = root_path / "cool_app" - assert (sourcemap_file_path).exists() + assert not (sourcemap_file_path).exists() assert not (app_output_path / "approval.teal").exists() - assert (app_output_path / "approval.teal.tok.map").exists() - assert json.loads((app_output_path / "approval.teal.tok.map").read_text())["sources"] == [] + assert (app_output_path / "approval.teal.map").exists() + assert json.loads((app_output_path / "approval.teal.map").read_text())["sources"] == [] assert not (app_output_path / "clear.teal").exists() - assert (app_output_path / "clear.teal.tok.map").exists() - assert json.loads((app_output_path / "clear.teal.tok.map").read_text())["sources"] == [] - - result = AVMDebuggerSourceMap.from_dict(json.loads(sourcemap_file_path.read_text())) - for item in result.txn_group_sources: - item.location = "dummy" - check_output_stability(json.dumps(result.to_dict())) + assert (app_output_path / "clear.teal.map").exists() + assert json.loads((app_output_path / "clear.teal.map").read_text())["sources"] == [] def test_simulate_and_persist_response_via_app_call( @@ -175,3 +162,140 @@ def test_simulate_and_persist_response( while trace_file_path.exists(): tmp_atc = atc.clone() simulate_and_persist_response(tmp_atc, cwd, client_fixture.algod_client, buffer_size_mb=0.01) + + +@pytest.mark.parametrize( + ("transactions", "expected_filename_part"), + [ + # Single transaction types + ({"pay": 1}, "1pay"), + ({"axfer": 1}, "1axfer"), + ({"appl": 1}, "1appl"), + # Multiple of same type + ({"pay": 3}, "3pay"), + ({"axfer": 2}, "2axfer"), + ({"appl": 4}, "4appl"), + # Mixed combinations + ({"pay": 2, "axfer": 1, "appl": 3}, "2pay_1axfer_3appl"), + ({"pay": 1, "axfer": 1, "appl": 1}, "1pay_1axfer_1appl"), + ], +) +def test_simulate_response_filename_generation( # noqa: PLR0913 + transactions: dict[str, int], + expected_filename_part: str, + tmp_path_factory: pytest.TempPathFactory, + client_fixture: ApplicationClient, + funded_account: Account, + monkeypatch: pytest.MonkeyPatch, +) -> None: + cwd = tmp_path_factory.mktemp("cwd") + sp = client_fixture.algod_client.suggested_params() + atc = AtomicTransactionComposer() + signer = AccountTransactionSigner(funded_account.private_key) + + # Add payment transactions + for i in range(transactions.get("pay", 0)): + payment = PaymentTxn( + sender=funded_account.address, + receiver=client_fixture.app_address, + amt=1_000_000 * (i + 1), + note=f"Payment{i+1}".encode(), + sp=sp, + ) # type: ignore[no-untyped-call] + atc.add_transaction(TransactionWithSigner(payment, signer)) + + # Add asset transfer transactions + for i in range(transactions.get("axfer", 0)): + asset_transfer = AssetTransferTxn( + sender=funded_account.address, + receiver=client_fixture.app_address, + amt=1_000 * (i + 1), + index=1, # Using asset ID 1 for test + sp=sp, + ) # type: ignore[no-untyped-call] + atc.add_transaction(TransactionWithSigner(asset_transfer, signer)) + + # Add app calls + for i in range(transactions.get("appl", 0)): + client_fixture.compose_call(atc, "hello", name=f"test{i+1}") + + # Mock datetime + mock_datetime = datetime(2023, 1, 1, 12, 0, 0, tzinfo=timezone.utc) + + class MockDateTime: + @classmethod + def now(cls, tz: timezone | None = None) -> datetime: # noqa: ARG003 + return mock_datetime + + monkeypatch.setattr("algokit_utils._debugging.datetime", MockDateTime) + + response = simulate_and_persist_response(atc, cwd, client_fixture.algod_client) + last_round = response.simulate_response["last-round"] + expected_filename = f"20230101_120000_lr{last_round}_{expected_filename_part}.trace.avm.json" + + # Verify file exists with expected name + output_path = cwd / "debug_traces" + files = list(output_path.iterdir()) + assert len(files) == 1 + assert files[0].name == expected_filename + + # Verify transaction count + trace_file_content = json.loads(files[0].read_text()) + txn_results = trace_file_content["txn-groups"][0]["txn-results"] + expected_total_txns = sum(transactions.values()) + assert len(txn_results) == expected_total_txns + + +@dataclass +class TestFile: + name: str + content: bytes + mtime: datetime + + +def test_removes_oldest_files_when_buffer_size_exceeded(tmp_path: Path) -> None: + # Create test directory + trace_dir = tmp_path / "debug_traces" + trace_dir.mkdir() + + # Create test files with different timestamps and sizes + test_files: list[TestFile] = [ + TestFile(name="old.json", content=b"a" * (1024 * 1024), mtime=datetime(2023, 1, 1, tzinfo=timezone.utc)), + TestFile(name="newer.json", content=b"b" * (1024 * 1024), mtime=datetime(2023, 1, 2, tzinfo=timezone.utc)), + TestFile(name="newest.json", content=b"c" * (1024 * 1024), mtime=datetime(2023, 1, 3, tzinfo=timezone.utc)), + ] + + # Create files with specific timestamps + for file in test_files: + file_path = trace_dir / file.name + file_path.write_bytes(file.content) + os.utime(file_path, (file.mtime.timestamp(), file.mtime.timestamp())) + + # Set buffer size to 2MB (should remove oldest file) + cleanup_old_trace_files(trace_dir, buffer_size_mb=2.0) + + # Check remaining files + remaining_files = list(trace_dir.iterdir()) + remaining_names = [f.name for f in remaining_files] + + assert len(remaining_files) == 2 # noqa: PLR2004 + assert "newer.json" in remaining_names + assert "newest.json" in remaining_names + assert "old.json" not in remaining_names + + +def test_does_nothing_when_total_size_within_buffer_limit(tmp_path: Path) -> None: + # Create test directory + trace_dir = tmp_path / "debug_traces" + trace_dir.mkdir() + + # Create two 512KB files (total 1MB) + content = b"a" * (512 * 1024) # 512KB + (trace_dir / "file1.json").write_bytes(content) + (trace_dir / "file2.json").write_bytes(content) + + # Set buffer size to 2MB (files total 1MB, should not remove anything) + cleanup_old_trace_files(trace_dir, buffer_size_mb=2.0) + + remaining_files = list(trace_dir.iterdir()) + assert len(remaining_files) == 2 # noqa: PLR2004