From 9e856e456cdc91d5f91d49f45220fcccc9be7553 Mon Sep 17 00:00:00 2001
From: Al
Date: Fri, 15 Dec 2023 10:01:15 +0100
Subject: [PATCH] feat: debugger related helpers and utils (#61)
* chore: wip
* Auto stash before merge of "feat/debugger-support" and "origin/main"
* feat: initial draft implementation for debugger support
* refactor: addressing pr comments, adding extra tests
* chore: regen docs; fix spinx docs bug
* chore: renaming back to .tok.map
* chore: updating name for traces files
* chore: addressing pr comments
* chore: update src/algokit_utils/_debug_utils.py
Co-authored-by: Neil Campbell
* refactor: addressing pr comments
* chore: typo fix
* chore: addressing pr comments
* chore: windows runner
* chore: testing ci
* chore: testing ci
* chore: removing windows as its unsupported by official images, adding more py versions
* chore: merge conflict fixes
* chore: minor tweaks
* refactor: minor improvements
* chore: bumping cryptography for pip-audit
* chore: fixing tests
* refactor: propagating comments from utils ts pr review
* chore: refining links to debugger
* docs: regen docs
* chore: fixing typo
* docs: updating information on how to read trace files
* chore: refining links to the marketplace
---------
Co-authored-by: Neil Campbell
---
.github/workflows/build-python.yaml | 25 +-
.vscode/settings.json | 11 +-
.../algokit_utils/algokit_utils.md.txt | 205 ++++++++-
.../_sources/capabilities/debugger.md.txt | 30 ++
.../_sources/capabilities/debugging.md.txt | 46 ++
docs/html/_sources/index.md.txt | 1 +
.../apidocs/algokit_utils/algokit_utils.html | 411 +++++++++++++-----
docs/html/capabilities/account.html | 1 +
docs/html/capabilities/app-client.html | 1 +
docs/html/capabilities/client.html | 1 +
docs/html/capabilities/debugger.html | 137 ++++++
docs/html/capabilities/debugging.html | 151 +++++++
docs/html/genindex.html | 58 ++-
docs/html/index.html | 1 +
docs/html/objects.inv | Bin 3122 -> 3366 bytes
docs/html/searchindex.js | 2 +-
docs/source/capabilities/debugging.md | 46 ++
docs/source/index.md | 1 +
poetry.lock | 108 +++--
pyproject.toml | 4 +
src/algokit_utils/__init__.py | 12 +-
src/algokit_utils/_debugging.py | 280 ++++++++++++
src/algokit_utils/application_client.py | 110 +++--
src/algokit_utils/common.py | 28 ++
src/algokit_utils/config.py | 101 ++++-
tests/test_app_client_call.py | 1 +
.../test_build_teal_sourcemaps.approved.txt | 1 +
...al_sourcemaps_without_sources.approved.txt | 1 +
tests/test_debug_utils.py | 177 ++++++++
tests/test_deploy_scenarios.py | 6 +-
30 files changed, 1730 insertions(+), 227 deletions(-)
create mode 100644 docs/html/_sources/capabilities/debugger.md.txt
create mode 100644 docs/html/_sources/capabilities/debugging.md.txt
create mode 100644 docs/html/capabilities/debugger.html
create mode 100644 docs/html/capabilities/debugging.html
create mode 100644 docs/source/capabilities/debugging.md
create mode 100644 src/algokit_utils/_debugging.py
create mode 100644 src/algokit_utils/common.py
create mode 100644 tests/test_debug_utils.approvals/test_build_teal_sourcemaps.approved.txt
create mode 100644 tests/test_debug_utils.approvals/test_build_teal_sourcemaps_without_sources.approved.txt
create mode 100644 tests/test_debug_utils.py
diff --git a/.github/workflows/build-python.yaml b/.github/workflows/build-python.yaml
index d7745bb8..a0e2c6e9 100644
--- a/.github/workflows/build-python.yaml
+++ b/.github/workflows/build-python.yaml
@@ -6,21 +6,34 @@ jobs:
build-python:
strategy:
matrix:
- os: ["ubuntu-latest" ]
- python: ["3.10"]
+ os: ["ubuntu-latest"]
+ python: ["3.10", "3.11", "3.12"]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout source code
uses: actions/checkout@v3
- - name: Install poetry
- run: pipx install poetry
-
- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- cache: "poetry"
+
+ - name: Install pipx
+ run: |
+ python -m pip install --upgrade pip
+ python -m pip install pipx
+ python -m pipx ensurepath
+
+ - name: Cache Poetry
+ uses: actions/cache@v2
+ with:
+ path: ~/.local/share/pipx/venvs/poetry
+ key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-poetry-
+
+ - name: Install poetry
+ run: pipx install poetry
- name: Install dependencies
run: poetry install --no-interaction
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 2a1aa409..6f0c035d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -54,9 +54,10 @@
]
},
- // PowerShell
- "[powershell]": {
- "editor.defaultFormatter": "ms-vscode.powershell"
- },
- "powershell.codeFormatting.preset": "Stroustrup"
+ // PowerShell
+ "[powershell]": {
+ "editor.defaultFormatter": "ms-vscode.powershell"
+ },
+ "powershell.codeFormatting.preset": "Stroustrup",
+ "python.testing.pytestArgs": ["."]
}
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 edbc218b..9eab990e 100644
--- a/docs/html/_sources/apidocs/algokit_utils/algokit_utils.md.txt
+++ b/docs/html/_sources/apidocs/algokit_utils/algokit_utils.md.txt
@@ -175,8 +175,8 @@ orphan: true
:parser: myst
:summary:
```
-* - {py:obj}`Program `
- - ```{autodoc2-docstring} algokit_utils.application_client.Program
+* - {py:obj}`Program `
+ - ```{autodoc2-docstring} algokit_utils.common.Program
:parser: myst
:summary:
```
@@ -190,6 +190,11 @@ orphan: true
:parser: myst
:summary:
```
+* - {py:obj}`TransactionParametersDict `
+ - ```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict
+ :parser: myst
+ :summary:
+ ```
* - {py:obj}`TransactionResponse `
- ```{autodoc2-docstring} algokit_utils.models.TransactionResponse
:parser: myst
@@ -318,11 +323,31 @@ orphan: true
:parser: myst
:summary:
```
+* - {py:obj}`opt_in `
+ - ```{autodoc2-docstring} algokit_utils.asset.opt_in
+ :parser: myst
+ :summary:
+ ```
+* - {py:obj}`opt_out `
+ - ```{autodoc2-docstring} algokit_utils.asset.opt_out
+ :parser: myst
+ :summary:
+ ```
+* - {py:obj}`persist_sourcemaps `
+ - ```{autodoc2-docstring} algokit_utils._debugging.persist_sourcemaps
+ :parser: myst
+ :summary:
+ ```
* - {py:obj}`replace_template_variables `
- ```{autodoc2-docstring} algokit_utils.deploy.replace_template_variables
:parser: myst
:summary:
```
+* - {py:obj}`simulate_and_persist_response `
+ - ```{autodoc2-docstring} algokit_utils._debugging.simulate_and_persist_response
+ :parser: myst
+ :summary:
+ ```
* - {py:obj}`transfer `
- ```{autodoc2-docstring} algokit_utils._transfer.transfer
:parser: myst
@@ -1502,16 +1527,16 @@ Bases: {py:obj}`enum.Enum`
`````
````{py:class} Program(program: str, client: algosdk.v2client.algod.AlgodClient)
-:canonical: algokit_utils.application_client.Program
+:canonical: algokit_utils.common.Program
-```{autodoc2-docstring} algokit_utils.application_client.Program
+```{autodoc2-docstring} algokit_utils.common.Program
:parser: myst
```
```{rubric} Initialization
```
-```{autodoc2-docstring} algokit_utils.application_client.Program.__init__
+```{autodoc2-docstring} algokit_utils.common.Program.__init__
:parser: myst
```
@@ -1713,6 +1738,144 @@ Bases: {py:obj}`enum.Enum`
`````
+`````{py:class} TransactionParametersDict()
+:canonical: algokit_utils.models.TransactionParametersDict
+
+Bases: {py:obj}`typing.TypedDict`
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict
+:parser: myst
+```
+
+```{rubric} Initialization
+```
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.__init__
+:parser: myst
+```
+
+````{py:attribute} accounts
+:canonical: algokit_utils.models.TransactionParametersDict.accounts
+:type: list[str]
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.accounts
+:parser: myst
+```
+
+````
+
+````{py:attribute} boxes
+:canonical: algokit_utils.models.TransactionParametersDict.boxes
+:type: collections.abc.Sequence[tuple[int, bytes | bytearray | str | int]]
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.boxes
+:parser: myst
+```
+
+````
+
+````{py:attribute} foreign_apps
+:canonical: algokit_utils.models.TransactionParametersDict.foreign_apps
+:type: list[int]
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.foreign_apps
+:parser: myst
+```
+
+````
+
+````{py:attribute} foreign_assets
+:canonical: algokit_utils.models.TransactionParametersDict.foreign_assets
+:type: list[int]
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.foreign_assets
+:parser: myst
+```
+
+````
+
+````{py:attribute} lease
+:canonical: algokit_utils.models.TransactionParametersDict.lease
+:type: bytes | str
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.lease
+:parser: myst
+```
+
+````
+
+````{py:attribute} note
+:canonical: algokit_utils.models.TransactionParametersDict.note
+:type: bytes | str
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.note
+:parser: myst
+```
+
+````
+
+````{py:attribute} rekey_to
+:canonical: algokit_utils.models.TransactionParametersDict.rekey_to
+:type: str
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.rekey_to
+:parser: myst
+```
+
+````
+
+````{py:attribute} sender
+:canonical: algokit_utils.models.TransactionParametersDict.sender
+:type: str
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.sender
+:parser: myst
+```
+
+````
+
+````{py:attribute} signer
+:canonical: algokit_utils.models.TransactionParametersDict.signer
+:type: algosdk.atomic_transaction_composer.TransactionSigner
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.signer
+:parser: myst
+```
+
+````
+
+````{py:attribute} suggested_params
+:canonical: algokit_utils.models.TransactionParametersDict.suggested_params
+:type: algosdk.transaction.SuggestedParams
+:value: >
+ None
+
+```{autodoc2-docstring} algokit_utils.models.TransactionParametersDict.suggested_params
+:parser: myst
+```
+
+````
+
+`````
+
`````{py:class} TransactionResponse
:canonical: algokit_utils.models.TransactionResponse
@@ -1957,6 +2120,30 @@ Bases: {py:obj}`algokit_utils._transfer.TransferParametersBase`
```
````
+````{py:function} opt_in(algod_client: algosdk.v2client.algod.AlgodClient, account: algokit_utils.models.Account, asset_ids: list[int]) -> dict[int, str]
+:canonical: algokit_utils.asset.opt_in
+
+```{autodoc2-docstring} algokit_utils.asset.opt_in
+:parser: myst
+```
+````
+
+````{py:function} opt_out(algod_client: algosdk.v2client.algod.AlgodClient, account: algokit_utils.models.Account, asset_ids: list[int]) -> dict[int, str]
+:canonical: algokit_utils.asset.opt_out
+
+```{autodoc2-docstring} algokit_utils.asset.opt_out
+:parser: myst
+```
+````
+
+````{py:function} persist_sourcemaps(*, sources: list[algokit_utils._debugging.PersistSourceMapInput], project_root: pathlib.Path, client: algosdk.v2client.algod.AlgodClient, with_sources: bool = True) -> None
+:canonical: algokit_utils._debugging.persist_sourcemaps
+
+```{autodoc2-docstring} algokit_utils._debugging.persist_sourcemaps
+:parser: myst
+```
+````
+
````{py:function} replace_template_variables(program: str, template_values: algokit_utils.deploy.TemplateValueMapping) -> str
:canonical: algokit_utils.deploy.replace_template_variables
@@ -1965,6 +2152,14 @@ Bases: {py:obj}`algokit_utils._transfer.TransferParametersBase`
```
````
+````{py:function} simulate_and_persist_response(atc: algosdk.atomic_transaction_composer.AtomicTransactionComposer, project_root: pathlib.Path, algod_client: algosdk.v2client.algod.AlgodClient, buffer_size_mb: float = 256) -> algosdk.atomic_transaction_composer.SimulateAtomicTransactionResponse
+:canonical: algokit_utils._debugging.simulate_and_persist_response
+
+```{autodoc2-docstring} algokit_utils._debugging.simulate_and_persist_response
+:parser: myst
+```
+````
+
````{py:function} transfer(client: algosdk.v2client.algod.AlgodClient, parameters: algokit_utils._transfer.TransferParameters) -> algosdk.transaction.PaymentTxn
:canonical: algokit_utils._transfer.transfer
diff --git a/docs/html/_sources/capabilities/debugger.md.txt b/docs/html/_sources/capabilities/debugger.md.txt
new file mode 100644
index 00000000..8116feec
--- /dev/null
+++ b/docs/html/_sources/capabilities/debugger.md.txt
@@ -0,0 +1,30 @@
+# Debugger
+
+The AlgoKit Python Utilities package provides a set of debugging tools that can be used to simulate and trace transactions on the Algorand blockchain. These tools and methods are optimized for developers who are building applications on Algorand and need to test and debug their smart contracts via [AVM Debugger extension](link to vscode extension).
+
+## Configuration
+
+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 [`AVM Debugger`](links to extension). 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 [AVM Debugger](link to vscode extension) 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.
+
+To enable debug mode in your project you can configure it as follows:
+
+```py
+from algokit_utils.config import config
+
+config.configure(debug=True)
+```
+
+## Debugging Utilities
+
+Debugging utilities can be used to simplify gathering artifacts to be used with [AVM Debugger](link to vscode extension) 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.
+- `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.
diff --git a/docs/html/_sources/capabilities/debugging.md.txt b/docs/html/_sources/capabilities/debugging.md.txt
new file mode 100644
index 00000000..e56b797b
--- /dev/null
+++ b/docs/html/_sources/capabilities/debugging.md.txt
@@ -0,0 +1,46 @@
+# Debugger
+
+The AlgoKit Python Utilities package provides a set of debugging tools that can be used to simulate and trace transactions on the Algorand blockchain. These tools and methods are optimized for developers who are building applications on Algorand and need to test and debug their smart contracts via [AVM Debugger extension](link to vscode extension).
+
+## Configuration
+
+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 [`AVM Debugger`](links to extension). 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 [AVM Debugger](link to vscode extension) 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.
+
+To enable debug mode in your project you can configure it as follows:
+
+```py
+from algokit_utils.config import config
+
+config.configure(debug=True)
+```
+
+## Debugging Utilities
+
+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
+
+The trace files are named in a specific format to provide useful information about the transactions they contain. The format is as follows:
+
+```ts
+`${timestamp}_lr${last_round}_${transaction_types}.trace.avm.json`;
+```
+
+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.
+
+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.
diff --git a/docs/html/_sources/index.md.txt b/docs/html/_sources/index.md.txt
index e71fa039..c260e516 100644
--- a/docs/html/_sources/index.md.txt
+++ b/docs/html/_sources/index.md.txt
@@ -79,6 +79,7 @@ The library helps you with the following capabilities:
- [**ARC-0032 Application Spec client**](capabilities/app-client.md) - Builds on top of the App management and App deployment capabilities to provide a high productivity application client that works with ARC-0032 application spec defined smart contracts (e.g. via Beaker)
- [**App deployment**](capabilities/app-deploy.md) - Idempotent (safely retryable) deployment of an app, including deploy-time immutability and permanence control and TEAL template substitution
- [**Algo transfers**](capabilities/transfer.md) - Ability to easily initiate algo transfers between accounts, including dispenser management and idempotent account funding
+ - [**Debugger**](capabilities/debugger.md) - Provides a set of debugging tools that can be used to simulate and trace transactions on the Algorand blockchain. These tools and methods are optimized for developers who are building applications on Algorand and need to test and debug their smart contracts via [AVM Debugger extension](link).
(reference-documentation)=
diff --git a/docs/html/apidocs/algokit_utils/algokit_utils.html b/docs/html/apidocs/algokit_utils/algokit_utils.html
index 2d0f20e2..9a4aebc1 100644
--- a/docs/html/apidocs/algokit_utils/algokit_utils.html
+++ b/docs/html/apidocs/algokit_utils/algokit_utils.html
@@ -99,6 +99,7 @@
TemplateValueMapping
TestNetDispenserApiClient
TransactionParameters
+TransactionParametersDict
TransactionResponse
TransferAssetParameters
TransferParameters
@@ -124,7 +125,11 @@
is_mainnet()
is_testnet()
num_extra_program_pages()
+opt_in()
+opt_out()
+persist_sourcemaps()
replace_template_variables()
+simulate_and_persist_response()
transfer()
transfer_asset()
@@ -270,7 +275,7 @@ ClassesOperationPerformed
|
Describes the actions taken during deployment |
-Program
|
+
Program
|
A compiled TEAL program |
TestNetDispenserApiClient
|
@@ -283,13 +288,16 @@ ClassesTransactionParameters
|
Additional parameters that can be included in a transaction |
-TransactionResponse
|
+
TransactionParametersDict
|
+Additional parameters that can be included in a transaction |
+
+TransactionResponse
|
Response for a non ABI call |
-TransferAssetParameters
|
+
TransferAssetParameters
|
Parameters for transferring assets between accounts |
-TransferParameters
|
+
TransferParameters
|
Parameters for transferring µALGOs between accounts |
@@ -366,9 +374,32 @@ Functionsnum_extra_program_pages
|
Calculate minimum number of extra_pages required for provided approval and clear programs |
-replace_template_variables
|
+
opt_in
|
+Opt-in to a list of assets on the Algorand blockchain. Before an account can receive a specific asset,
+it must opt-in to receive it. An opt-in transaction places an asset holding of 0 into the account and increases
+its minimum balance by 100,000 microAlgos. |
+
+opt_out
|
+Opt out from a list of Algorand Standard Assets (ASAs) by transferring them back to their creators.
+The account also recovers the Minimum Balance Requirement for the asset (100,000 microAlgos)
+The optOut function manages the opt-out process, permitting the account to discontinue holding a group of assets. |
+
+persist_sourcemaps
|
+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. |
+
+replace_template_variables
|
Replaces TMPL_* variables in program with template_values |
+simulate_and_persist_response
|
+Simulates the atomic transactions using the provided AtomicTransactionComposer object and AlgodClient object,
+and persists the simulation response to an AlgoKit AVM Debugger compliant JSON file. |
+
transfer
|
Transfer µALGOs between accounts |
@@ -425,7 +456,7 @@ API
-
-server: str
+server: str
None
URL for the service e.g. http://localhost:4001
or https://testnet-api.algonode.cloud
-
-token: str
+token: str
None
API Token to authenticate with the service
@@ -574,14 +605,14 @@ API