diff --git a/.github/workflows/pr-generator.yml b/.github/workflows/pr-generator.yml index 74c1c9187..74849e7fd 100644 --- a/.github/workflows/pr-generator.yml +++ b/.github/workflows/pr-generator.yml @@ -59,7 +59,7 @@ jobs: if: (contains(inputs.go_algorand_version, '-stable')) && (!contains(inputs.indexer_version, '-')) uses: actions/setup-go@v3 with: - go-version: 1.20.7 + go-version: 1.21.10 - name: Generate conduit docs if: (contains(inputs.go_algorand_version, '-stable')) && (!contains(inputs.indexer_version, '-')) @@ -134,6 +134,6 @@ jobs: branch: "automatic-pr-go-algorand-${{ inputs.go_algorand_version }}-indexer-${{ inputs.indexer_version }}" title: "Automatic update generated for go-algorand: ${{ inputs.go_algorand_version }} and indexer: ${{ inputs.indexer_version }}" body: "Changes generated automatically by github action docs-generator." - reviewers: "nullun" + reviewers: "nullun,SilentRhetoric,Loedn,larkiny" delete-branch: true base: staging diff --git a/.go-algorand-beta.version b/.go-algorand-beta.version index ca9c34df7..144af87af 100644 --- a/.go-algorand-beta.version +++ b/.go-algorand-beta.version @@ -1 +1 @@ -v3.24.0-beta +v3.26.0-beta diff --git a/.go-algorand-stable.version b/.go-algorand-stable.version index a51865878..db69d9bef 100644 --- a/.go-algorand-stable.version +++ b/.go-algorand-stable.version @@ -1 +1 @@ -v3.24.0-stable +v3.26.0-stable diff --git a/.indexer.version b/.indexer.version index 18091983f..1545d9665 100644 --- a/.indexer.version +++ b/.indexer.version @@ -1 +1 @@ -3.4.0 +3.5.0 diff --git a/docs/clis/goal/node/generate-p2pid.md b/docs/clis/goal/node/generate-p2pid.md new file mode 100644 index 000000000..247cf95a5 --- /dev/null +++ b/docs/clis/goal/node/generate-p2pid.md @@ -0,0 +1,60 @@ +title: goal node generate-p2pid +--- +## goal node generate-p2pid + + + +Generate a new p2p private key + + + +### Synopsis + + + +Generate a new p2p private key (saved to peerIDPrivKey.key) and print out peerID to stdout + + + +``` + +goal node generate-p2pid [flags] + +``` + + + +### Options + + + +``` + + -h, --help help for generate-p2pid + +``` + + + +### Options inherited from parent commands + + + +``` + + -d, --datadir stringArray Data directory for the node + + -k, --kmddir string Data directory for kmd + +``` + + + +### SEE ALSO + + + +* [goal node](../../node/node/) - Manage a specified algorand node + + + diff --git a/docs/clis/goal/node/node.md b/docs/clis/goal/node/node.md index 96e66d45f..8b1165d1a 100644 --- a/docs/clis/goal/node/node.md +++ b/docs/clis/goal/node/node.md @@ -58,6 +58,7 @@ goal node [flags] * [goal node catchup](../catchup/) - Catchup the Algorand node to a specific catchpoint * [goal node clone](../clone/) - Clone the specified node to create another node * [goal node create](../create/) - Create a node at the desired data directory for the desired network +* [goal node generate-p2pid](../generate-p2pid/) - Generate a new p2p private key * [goal node generatetoken](../generatetoken/) - Generate and install a new API token * [goal node lastround](../lastround/) - Print the last round number * [goal node pendingtxns](../pendingtxns/) - Get a snapshot of current pending transactions on this node diff --git a/docs/get-details/algokit/cli-reference.md b/docs/get-details/algokit/cli-reference.md index 35971c0ce..279466ef7 100644 --- a/docs/get-details/algokit/cli-reference.md +++ b/docs/get-details/algokit/cli-reference.md @@ -313,7 +313,7 @@ Copy the contents of the doctor message (in Markdown format) in your clipboard. ## explore -Explore the specified network in the browser using Dappflow. +Explore the specified network in the browser using Lora. ```shell algokit explore [OPTIONS] [[localnet|testnet|mainnet]] @@ -482,7 +482,7 @@ algokit localnet console [OPTIONS] ### explore -Explore the AlgoKit LocalNet using Dappflow +Explore the AlgoKit LocalNet using Lora ```shell algokit localnet explore [OPTIONS] diff --git a/docs/get-details/algokit/features/explore.md b/docs/get-details/algokit/features/explore.md index f2c709ab4..a289d7639 100644 --- a/docs/get-details/algokit/features/explore.md +++ b/docs/get-details/algokit/features/explore.md @@ -1,10 +1,10 @@ title: Explore -AlgoKit provides a quick shortcut to [explore](../cli-reference.md#explore) various Algorand networks using [Dappflow](https://app.dappflow.org/) including [AlogKit LocalNet](./localnet.md)! +AlgoKit provides a quick shortcut to [explore](../cli-reference.md#explore) various Algorand networks using [Lora](https://lora.algokit.io/mainnet) including [AlogKit LocalNet](./localnet.md)! ## LocalNet -The following three commands are all equivalent and will open Dappflow pointing to the local [AlgoKit LocalNet](./localnet.md) instance: +The following three commands are all equivalent and will open [Lora](https://lora.algokit.io/localnet) pointing to the local [AlgoKit LocalNet](./localnet.md) instance: - `algokit explore` - `algokit explore localnet` @@ -12,10 +12,10 @@ The following three commands are all equivalent and will open Dappflow pointing ## Testnet -`algokit explore testnet` will open Dappflow pointing to TestNet via the [node](https://algonode.io/api/). +`algokit explore testnet` will open [Lora](https://lora.algokit.io/testnet) pointing to TestNet via the [node](https://algonode.io/api/). ## Mainnet -`algokit explore mainnet` will open Dappflow pointing to MainNet via the [node](https://algonode.io/api/). +`algokit explore mainnet` will open [Lora](https://lora.algokit.io/mainnet) pointing to MainNet via the [node](https://algonode.io/api/). To learn more about the `algokit explore` command, please refer to [explore](../cli-reference.md#explore) in the AlgoKit CLI reference documentation. diff --git a/docs/get-details/algokit/imgs/algokit_v2_demo.png b/docs/get-details/algokit/imgs/algokit_v2_demo.png new file mode 100644 index 000000000..dcc14676f Binary files /dev/null and b/docs/get-details/algokit/imgs/algokit_v2_demo.png differ diff --git a/docs/get-details/algokit/imgs/algokitv2_json.png b/docs/get-details/algokit/imgs/algokitv2_json.png new file mode 100644 index 000000000..2678d38c1 Binary files /dev/null and b/docs/get-details/algokit/imgs/algokitv2_json.png differ diff --git a/docs/get-details/algokit/imgs/algokitv2_starter.png b/docs/get-details/algokit/imgs/algokitv2_starter.png new file mode 100644 index 000000000..9160044cc Binary files /dev/null and b/docs/get-details/algokit/imgs/algokitv2_starter.png differ diff --git a/docs/get-details/algokit/imgs/dappflow.png b/docs/get-details/algokit/imgs/dappflow.png deleted file mode 100644 index 2b8ee68d1..000000000 Binary files a/docs/get-details/algokit/imgs/dappflow.png and /dev/null differ diff --git a/docs/get-details/algokit/imgs/dappflow1.png b/docs/get-details/algokit/imgs/dappflow1.png deleted file mode 100644 index 2f2ccb388..000000000 Binary files a/docs/get-details/algokit/imgs/dappflow1.png and /dev/null differ diff --git a/docs/get-details/algokit/imgs/dappflow2.png b/docs/get-details/algokit/imgs/dappflow2.png deleted file mode 100644 index 4efe6c9dc..000000000 Binary files a/docs/get-details/algokit/imgs/dappflow2.png and /dev/null differ diff --git a/docs/get-details/algokit/imgs/dappflow3.png b/docs/get-details/algokit/imgs/dappflow3.png deleted file mode 100644 index 4385a104b..000000000 Binary files a/docs/get-details/algokit/imgs/dappflow3.png and /dev/null differ diff --git a/docs/get-details/algokit/imgs/dappflow4.png b/docs/get-details/algokit/imgs/dappflow4.png deleted file mode 100644 index 96fb01020..000000000 Binary files a/docs/get-details/algokit/imgs/dappflow4.png and /dev/null differ diff --git a/docs/get-details/algokit/imgs/dappflow5.png b/docs/get-details/algokit/imgs/dappflow5.png deleted file mode 100644 index 64d409c62..000000000 Binary files a/docs/get-details/algokit/imgs/dappflow5.png and /dev/null differ diff --git a/docs/get-details/algokit/imgs/dappflow6.png b/docs/get-details/algokit/imgs/dappflow6.png deleted file mode 100644 index 0030e3b55..000000000 Binary files a/docs/get-details/algokit/imgs/dappflow6.png and /dev/null differ diff --git a/docs/get-details/algokit/imgs/lora-wallet.png b/docs/get-details/algokit/imgs/lora-wallet.png new file mode 100644 index 000000000..fa1c6c51d Binary files /dev/null and b/docs/get-details/algokit/imgs/lora-wallet.png differ diff --git a/docs/get-details/algokit/imgs/lora1.png b/docs/get-details/algokit/imgs/lora1.png new file mode 100644 index 000000000..7fc10cfb8 Binary files /dev/null and b/docs/get-details/algokit/imgs/lora1.png differ diff --git a/docs/get-details/algokit/imgs/lora10.png b/docs/get-details/algokit/imgs/lora10.png new file mode 100644 index 000000000..e92c862ac Binary files /dev/null and b/docs/get-details/algokit/imgs/lora10.png differ diff --git a/docs/get-details/algokit/imgs/lora11.png b/docs/get-details/algokit/imgs/lora11.png new file mode 100644 index 000000000..b1e7586ff Binary files /dev/null and b/docs/get-details/algokit/imgs/lora11.png differ diff --git a/docs/get-details/algokit/imgs/lora12.png b/docs/get-details/algokit/imgs/lora12.png new file mode 100644 index 000000000..b3ce2f98a Binary files /dev/null and b/docs/get-details/algokit/imgs/lora12.png differ diff --git a/docs/get-details/algokit/imgs/lora13.png b/docs/get-details/algokit/imgs/lora13.png new file mode 100644 index 000000000..6d0c5962d Binary files /dev/null and b/docs/get-details/algokit/imgs/lora13.png differ diff --git a/docs/get-details/algokit/imgs/lora14.png b/docs/get-details/algokit/imgs/lora14.png new file mode 100644 index 000000000..03ad8b6f3 Binary files /dev/null and b/docs/get-details/algokit/imgs/lora14.png differ diff --git a/docs/get-details/algokit/imgs/lora15.png b/docs/get-details/algokit/imgs/lora15.png new file mode 100644 index 000000000..9dfca5fe4 Binary files /dev/null and b/docs/get-details/algokit/imgs/lora15.png differ diff --git a/docs/get-details/algokit/imgs/lora16.png b/docs/get-details/algokit/imgs/lora16.png new file mode 100644 index 000000000..f6f0aa77f Binary files /dev/null and b/docs/get-details/algokit/imgs/lora16.png differ diff --git a/docs/get-details/algokit/imgs/lora17.png b/docs/get-details/algokit/imgs/lora17.png new file mode 100644 index 000000000..cc02de24c Binary files /dev/null and b/docs/get-details/algokit/imgs/lora17.png differ diff --git a/docs/get-details/algokit/imgs/lora2.png b/docs/get-details/algokit/imgs/lora2.png new file mode 100644 index 000000000..fc3c5255e Binary files /dev/null and b/docs/get-details/algokit/imgs/lora2.png differ diff --git a/docs/get-details/algokit/imgs/lora3.png b/docs/get-details/algokit/imgs/lora3.png new file mode 100644 index 000000000..19c12bb99 Binary files /dev/null and b/docs/get-details/algokit/imgs/lora3.png differ diff --git a/docs/get-details/algokit/imgs/lora4.png b/docs/get-details/algokit/imgs/lora4.png new file mode 100644 index 000000000..558d815e4 Binary files /dev/null and b/docs/get-details/algokit/imgs/lora4.png differ diff --git a/docs/get-details/algokit/imgs/lora5.png b/docs/get-details/algokit/imgs/lora5.png new file mode 100644 index 000000000..f7355a3a0 Binary files /dev/null and b/docs/get-details/algokit/imgs/lora5.png differ diff --git a/docs/get-details/algokit/imgs/lora6.png b/docs/get-details/algokit/imgs/lora6.png new file mode 100644 index 000000000..e897def49 Binary files /dev/null and b/docs/get-details/algokit/imgs/lora6.png differ diff --git a/docs/get-details/algokit/imgs/lora7.png b/docs/get-details/algokit/imgs/lora7.png new file mode 100644 index 000000000..e7d270b7d Binary files /dev/null and b/docs/get-details/algokit/imgs/lora7.png differ diff --git a/docs/get-details/algokit/imgs/lora8.png b/docs/get-details/algokit/imgs/lora8.png new file mode 100644 index 000000000..3d63f6c8d Binary files /dev/null and b/docs/get-details/algokit/imgs/lora8.png differ diff --git a/docs/get-details/algokit/imgs/lora9.png b/docs/get-details/algokit/imgs/lora9.png new file mode 100644 index 000000000..1b2a2d62c Binary files /dev/null and b/docs/get-details/algokit/imgs/lora9.png differ diff --git a/docs/get-details/algokit/index.md b/docs/get-details/algokit/index.md index e16902d81..5830219a7 100644 --- a/docs/get-details/algokit/index.md +++ b/docs/get-details/algokit/index.md @@ -12,7 +12,7 @@ For details on how to use individual features see the following - [Dispenser](./features/dispenser.md) - interactive TestNet Dispenser for receiveing TestALGO - [Dispenser](./features/dispenser.md) - Fund your TestNet account with ALGOs from the AlgoKit TestNet Dispenser - [Doctor](./features/doctor.md) - Check AlgoKit installation and dependencies -- [Explore](./features/explore.md) - Explore Algorand Blockchains using Dappflow +- [Explore](./features/explore.md) - Explore Algorand Blockchains using Lora - [Generate](./features/generate.md) - Generate code for an Algorand project - [Goal](./features/goal.md) - Run the Algorand goal CLI against the AlgoKit Sandbox - [Init](./features/init.md) - Quickly initialize new projects using official Algorand Templates or community provided templates diff --git a/docs/get-details/algokit/tutorials/intro.md b/docs/get-details/algokit/tutorials/intro.md index f284eda1f..b16f34777 100644 --- a/docs/get-details/algokit/tutorials/intro.md +++ b/docs/get-details/algokit/tutorials/intro.md @@ -1,22 +1,17 @@ -title: AlgoKit Quick Start Tutorial +title: AlgoKit Quick Start Guide -AlgoKit is the primary tool used by the Algorand community to develop smart contracts on the Algorand blockchain. It provides the capabilities to develop, test and deploy Algorand smart contracts within minutes! This guide is intended to help you setup AlgoKit and to start developing your application. +AlgoKit is a simple, one-stop tool for developers to quickly and easily build and launch secure, automated, production-ready decentralized applications on the Algorand protocol -- now also featuring native support for Python! This empowers developers to write Algorand apps in regular Python, one of the world's most popular programming languages. -## Quick start videos +In addition, AlgoKit features: -If you prefer videos, take a look at this 10 minute guide to getting started. - -[![Learn How to Build on Algorand in 10 Minutes](../imgs/algokit-intro-video-thumbnail.jpg)](https://www.youtube.com/embed/MzBRef_Res8) - -Detailed video guides for both [Windows](https://www.youtube.com/embed/22RvINnZsRo) and [Mac](https://www.youtube.com/embed/zsurtpCGmgE) are also available. +- A library of smart contract templates to kickstart your build +- All necessary application infrastructure running locally +- Toolchain integrations for languages you love, like Python and TypeScript +- A simplified frontend design experience ## Prerequisites -This guide presents installing AlgoKit using an OS agnostic procedure. For OS specific instructions take a look at the [quick start videos](#quick-start-videos) above. - -Using this procedure requires the the following components be installed already - -- [Python 3.10](https://www.python.org/downloads/) or higher +- [Python 3.12](https://www.python.org/downloads/) or higher - [PipX](https://pypa.github.io/pipx/#on-linux-install-via-pip-requires-pip-190-or-later) - [Git](https://github.com/git-guides/install-git#install-git) - [Docker](https://docker.com/download/) @@ -24,15 +19,76 @@ Using this procedure requires the the following components be installed already ## Install AlgoKit -To install AlgoKit, run the following command from a terminal. +=== "Windows" + !!! Note + This method will install the most recent python3 version [via winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/). If you already have python 3.12+ installed, you may you may prefer to use `pipx install algokit` as explained within the pipx on any OS section so you can control the python version used. -```shell -pipx install algokit -``` + - Ensure prerequisites are installed + - [Git](https://github.com/git-guides/install-git#install-git-on-windows) (or `winget install git.git`) + - [Docker](https://docs.docker.com/desktop/install/windows-install/) (or `winget install docker.dockerdesktop`) + + !!! Info + See [our LocalNet documentation](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/localnet.md#prerequisites) for more tips on installing Docker on Windows + + - Install Python3 using WinGet + - Install python: `winget install python.python.3.12` + - Restart the terminal to ensure Python and pip are available on the path + + !!! Info + Windows has a feature called **App Execution Aliases** that provides redirects for the Python command that guide users to the Windows Store. unfortunately these aliases can prevent normal execution of Python if Python is installed via other means, to disable them search for **Manage app execution aliases** from the start menu, and then turn off entries listed as **App Installer python.exe** or **App Installer python3.exe**. + + - Install pipx: + ``` + pip install --user pipx + python -m pipx ensurepath + ``` + - Restart the terminal to ensure pipx is available on the path + - Install AlgoKit via pipx: `pipx install algokit` + - If you used AlgoKit before, update it with pipx: `pipx upgrade algokit` + - Restart the terminal to ensure AlgoKit is available on the path + +=== "macOS" + !!! Note + This method will install the latest Python3 release as a dependency via Homebrew. If you already have Python 3.10+ installed, you may prefer to use `pipx install algokit` as explained within the OS agnostic tab so you can control the python version used. + + - Ensure prerequisites are installed + + - [Homebrew](https://docs.brew.sh/Installation) + - [Git](https://github.com/git-guides/install-git#install-git-on-mac) (should already be available if `brew` is installed) + - [Docker](https://docs.docker.com/desktop/install/mac-install/), (or `brew install --cask docker`) + + !!! Info + Docker requires MacOS 11+ + + - Install using Homebrew `brew install algorandfoundation/tap/algokit` + - Restart the terminal to ensure AlgoKit is available on the path + + +=== "Linux" + - Ensure prerequisites are installed + + - [Python 3.12+](https://www.python.org/downloads/) + + !!! Info + There is probably a better way to install Python than to download it directly, e.g. your local Linux package manager + + - [pipx](https://pypa.github.io/pipx/#on-linux-install-via-pip-requires-pip-190-or-later) + - [Git](https://github.com/git-guides/install-git#install-git-on-linux) + - [Docker](https://docs.docker.com/desktop/install/linux-install/) + - Continue with step 2 in the following section to install via `pipx` on any OS + +=== "OS agnostic" + To install AlgoKit, run the following command from a terminal. -After the installation completes, **restart the terminal**. + ```shell + pipx install algokit + ``` -For more detailed installation documentation, see the [quick start videos](#quick-start-videos). + If you used AlgoKit before, update it with pipx: `pipx upgrade algokit` + + After the installation completes, **restart the terminal**. + +Additional AlgoKit videos are available on the [@AlgoDevs YouTube channel](https://youtube.com/@AlgoDevs). ## Verify the Installation @@ -45,18 +101,18 @@ algokit --version Output similar to the following should be displayed: ```shell -algokit, version 0.5.0 +algokit, version 2.0.0 ``` ## Start a LocalNet -AlgoKit supports using a [local version of the Algorand blockchain](../features/localnet.md). To start an instance of this LocalNet run the following command from the terminal: +AlgoKit supports using a [local version of the Algorand blockchain](../../get-details/algokit/features/localnet/). To start an instance of this LocalNet run the following command from the terminal: ```shell algokit localnet start ``` -This should start an instance of the LocalNet within docker. If you open the Docker Desktop application you should see something similar to the following: +This should start an instance of the LocalNet within docker. If you open the Docker Desktop application you should something similar to the following: ![Docker Desktop LocalNet Instance](../imgs/localnet.png) @@ -68,104 +124,140 @@ Now that AlgoKit is installed, you can rapidly create a new project to get start algokit init ``` -This will launch a guided menu system to create a specific project tailored to your needs. The templates are basic starter applications for various Algorand development scenarios. To read more about templates checkout AlgoKit detailed documentation. - -For now we'll use the `playground` template, which is a lightweight starting point for learning and experimentation. You can initialise a project using this template by running: - -```shell -algokit init -t playground --no-workspace -``` - -Next, you will be prompted for the name of your project. Finally, select the default value for the rest of the prompts (enter). +This will launch a guided menu system to create a specific project tailored to your needs. You will first be prompted to select a specific template. The templates are basic starter applications for various Algorand development scenarios. To read more about templates checkout AlgoKit detailed documentation. For this guide, we will use the Python smart contract starter template. Select the following options: +1. `Smart Contracts` +2. `Python` +3. name of your project: `DEMO` +4. Template preset: select `Starter`. +5. Contract deployment code: select `Python` +6. algokit project bootstrap: `Y` +7. git repository: `Y` -Once finished, (if you have it installed) VS Code should automatically be opened with the initialised project and you will be prompted to install appropriate VS Code extensions. This starter app will contain one smart contract (built using the [Beaker](https://beaker.algo.xyz/) smart contract development framework) named `helloworld.py`, in the `hello_world` folder, with one method (`hello`) that takes a `String` and returns a `String`. +Once finished, (if you have it installed) VS Code should automatically be opened with the initialized project and you will be prompted to install appropriate VS Code extensions. This starter app will contain one smart contract (built with [Algorand Python](https://algorandfoundation.github.io/puya/) named `contract.py`, in the `hello_world` folder, with one method (`hello`) that takes a `String` and returns a `String`. -![AlgoKit Playground Contract](../imgs/algokitplayground.png) +![AlgoKit Starter Contract](../imgs/algokitv2_starter.png) ## Run the Demo Application -Once the playground project is created, you will notice in the `hello_world` folder a file named `demo.py` which is a simple example of using AlgoKit to deploy and make a call to the `helloworld.py` smart contract on the LocalNet instance started earlier. +Once the starter project is created, you will notice in the `smart_contracts/hello_world` folder a file named `deploy_config.py` which is a simple example of using AlgoKit to deploy and make a call to the `contract.py` smart contract on the LocalNet instance started earlier. -![AlgoKit Playground Demo](../imgs/algokitdemo.png) +![AlgoKit Starter config ](../imgs/algokit_v2_demo.png) -Right clicking on this file and selecting `Run Python File in Terminal` will deploy the `HelloWorldApp` smart contract and then call it passing the parameter `name` with a value of `Beaker`. Alternatively, you can hit F5 (or whatever keyboard shortcut is set in VS Code for running the debugger) while you are viewing the `helloworld.py` file and it will: +By hitting F5 you will deploy the `HelloWorld` smart contract and then call it passing the parameter `name` with a value of `world`. You can edit this parameter in the `deploy_config.py` file and it will: 1. Start LocalNet 2. Build the smart contract -3. Deploy and call the smart contract (`demo.py`) +3. Deploy and call the smart contract (`contract.py`) -This should produce something similiar to the following in the VSCode terminal. +If you would like to manually build and deploy the `HelloWorld` smart contract run the following AlgoKit commands: ```shell -(playground-py3.11) User@Algo-User-MBP myalgokit project % "/Users/user/code/algokit/myalgokit pro -ject/.venv/bin/python" "/Users/user/code/algokit/myalgokit project/playground/hello_world/demo.py" -Deployed app in txid SBNIJYZUOXVPXDFJHAVDDCO5TQ4WZ7P37QOOQM6CSVSMIURETHNQ - App ID: 11 - Address: 377KDIVHB7K2LFFJIPUPQFWJGVD36MAP4EI6Y2HAGRAW6JPK4MDUBC3YVY +algokit project run build +algokit project run deploy +``` -Hello, Beaker +This should produce something similar to the following in the VSCode terminal. + +```shell +HelloWorld not found in PDEEWXLITMAPDMDYGP4XUV2EUJVPNZVKR7OUSSFZ63U4XNL2Y25FN5PYN4 account, deploying app. +HelloWorld (v1.0) deployed successfully, with app id 1002. +Called hello on HelloWorld (1002) with name=world, received: Hello, world ``` -The App ID of of the deployed contract and its Algorand address is displayed, followed by the message returned from the smart contract call (`Hello, Beaker`). +The App ID of of the deployed contract and its Algorand address is displayed, followed by the message returned from the smart contract call (`Hello, world`). At this point you have deployed a simple contract to an Algorand network and called it successfully! Additionally, you can find the native TEAL smart contract code and the appropriate smart contract manifest JSON files have been output to the `artifacts` folder. -![AlgoKit Playground Demo](../imgs/algokitartifacts.png) +![AlgoKit Starter Demo](../imgs/algokitv2_json.png) -Running the `build.py` python file will also generate these artifacts without deploying. These files can be used by tools like [Dappflow](https://dappflow.org/), [goal](https://developer.algorand.org/docs/clis/goal/goal/), etc. to deploy your smart contract to the various Algorand networks. +These files can be used by tools like [Lora](https://lora.algokit.io/localnet), [goal](https://developer.algorand.org/docs/clis/goal/goal/), etc. to deploy your smart contract to the various Algorand networks. -## Using Dappflow +## Using Lora -Dappflow is a web-based user interface that let's you visualise accounts, transactions, assets and applications on an Algorand network and also provides ability to deploy and call smart contracts. This works for TestNet, MainNet and also LocalNet. Furthermore, you can also create and fund accounts on LocalNet. While AlgoKit surfaces both a programming interface and a command line interface for interacting with Algorand, it also allows you to quickly open Dappflow so you can see what's happening visually. +Lora is a web-based user interface that let's you visualize accounts, transactions, assets and applications on an Algorand network and also provides ability to deploy and call smart contracts. This works for TestNet, MainNet and also LocalNet. While AlgoKit surfaces both a programming interface and a command line interface for interacting with Algorand, it also allows you to quickly open Lora so you can see what's happening visually. -Dappflow can be launched from AlgoKit by running the following command from the VS Code terminal. +Lora can be launched from AlgoKit by running the following command from the terminal. ```shell algokit explore ``` -By default it will open Dappflow to point to LocalNet (It will be displayed as `sandnet-v1` in the upper left hand corner.), but you can pass in parameters to point it to TestNet and MainNet too. +By default it will open Lora and point to LocalNet (It will be displayed as `LocalNet` in the upper right hand corner), but you can pass in parameters to point it to TestNet and MainNet too. -This command will launch your default web browser and load the Dappflow web application. +This command will launch your default web browser and load the Lora web application. **Note:** If you are using Safari, then it won't work against LocalNet and you will need to open it in a different browser. -![AlgoKit Dappflow](../imgs/dappflow1.png) +![Lora](../imgs/lora1.png) -### Create test account +### Create / Connect local account for testing -To issue commands against the LocalNet network you need an account with ALGOs in it. Dappflow lets you easily create one. +To issue commands against the LocalNet network you need an account with ALGO in it. Lora gives you three options for connecting to a local wallet: `Connect KMD`, `Connect MNEMONIC`, and `Connect Lute` -Select `Dev Wallets` from the left menu and click on the `Create wallet` button. This will create an account on the LocalNet and fund it with 100 Algos that can be used to test with. +- `Connect KMD`: Lora will automatically import KMD wallet. -![AlgoKit Dappflow](../imgs/dappflow2.png) +- `Connect MNEMONIC`: You can manually input a MNEMONIC for an account you own. -In the bottom left hand corner of the menu, select `Connect wallet` and you will be prompted with several wallet choices. Choose the `Dev Wallet` option. This will connect the account you just created to Dappflow so you can use that account for signing transactions from the Dappflow user interface. +- `Connect Lute`: You can create local accounts from [Lute](https://lute.app/) and connect to them. + +In this guide, we will use the KMD wallet. + +Select `Connect wallet` located at top right hand side of the webpage and you will be prompted with the three wallet choices. Choose the `Connect KMD` option. This will prompt you to enter the KMD password. If this is your first time building on Algorand, you do not have a KMD password so leave it blank and click `OK`. This will connect the KMD account to Lora so you can use that account for signing transactions from the Lora user interface. + +![Lora](../imgs/lora-wallet.png) ### Deploy the Hello World application -To deploy the built Beaker smart contract application, select the `Beaker studio` menu and click on the import beaker app. Select `File` and `Upload file`, browse to the artifacts created in the previous section of this guide. Select the `application.json` manifest file. This will load the specific manifest file for the Hello World sample application. +1. To deploy your smart contract application, select the `App Lab` menu and click on the `Create` button. +![Lora](../imgs/lora2.png) + +2. Click `Deploy new` and `Select an ARC-32 JSON app spec file` to browse to the artifacts created in the previous section of this guide. Select the `HelloWorld.arc32.json` manifest file. +![Lora](../imgs/lora3.png) +![Lora](../imgs/lora4.png) +![Lora](../imgs/lora5.png) + +3. This will load the specific manifest file for the Hello World sample application. Click `Next`. +![Lora](../imgs/lora6.png) + +4. You can change the `Name` and the `Version` of your app. We will keep it as it is. Click `Next`. +![Lora](../imgs/lora7.png) + +5. Click the `() Call` button. Then build and add the create transaction by clicking `Add`. +![Lora](../imgs/lora8.png) +![Lora](../imgs/lora9.png) + + +6. Click `Deploy` and sign the transaction by clicking `OK` in the KMD pop up to deploy the smart contract to the local Algorand network. +![Lora](../imgs/lora10.png) + +7. You should now see the deployed `HelloWorld` contract on the `App Lab` page. +![Lora](../imgs/lora11.png) -![AlgoKit Dappflow](../imgs/dappflow3.png) +8. Now click on the `App ID` inside of the `HelloWorld` card to go to the `Application` page. +![Lora](../imgs/lora12.png) -To deploy this application again, select the `Create app` button followed by the `Create` button from the popup. You should get a `Transaction successful` message with the option to view the specific transaction in the explorer. Close out of the popup and then scroll down to the `ABI` section of the page. The `hello` method should be displayed with an execute button beside it. +10. Inside the `ABI Methods` section, you should see the `hello` method. Click on the drop down and the `Call` button. You will be prompted with a popup allowing you to enter the parameter for the `hello` method and call it. +![Lora](../imgs/lora13.png) -![AlgoKit Dappflow](../imgs/dappflow4.png) -Click on the Execute button and a popup will be displayed allowing you to enter the parameter that we defined in the `HelloWorldApp` smart contract. +11. Enter a string in the `value` input and click on `Add`. +![Lora](../imgs/lora14.png) -![AlgoKit Dappflow](../imgs/dappflow5.png) +12. You should now see the transaction you just built on the `Application` page. Click `Send` and sign the transaction with your KMD wallet to execute the transaction. +![Lora](../imgs/lora15.png) -Enter a string in the parameter and click on `Execute`. You should get get a confirmation that the method executed properly and what the smart contract returned. +13. You should now see the `Send Result` showing you the details about the transaction you just executed! +![Lora](../imgs/lora16.png) -![AlgoKit Dappflow](../imgs/dappflow6.png) +1. You can also click on `Transaction ID` to go to the `Transaction` page and see the full detail of the transaction. +![Lora](../imgs/lora17.png) -You have now successfully deployed and executed a smart contract method call using Dappflow! +You have now successfully deployed and executed a smart contract method call using Lora! ## Next steps - To learn more about AlgoKit and what you can do with it, checkout the [AlgoKit documentation](../index.md). -- To learn more about Beaker, take a look at the [Beaker documentation](https://beaker.algo.xyz/). +- To learn more about Python on Algorand, take a look at the [Python documentation](https://algorandfoundation.github.io/puya/). - More information on Algorand smart contracts is also available in the [smart contract documentation](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/). diff --git a/docs/get-details/algorand-networks/betanet.md b/docs/get-details/algorand-networks/betanet.md index 4c9ee7761..683a069c9 100644 --- a/docs/get-details/algorand-networks/betanet.md +++ b/docs/get-details/algorand-networks/betanet.md @@ -4,10 +4,10 @@ title: BetaNet 🔷 🔷 = BetaNet availability only # Version -`v3.24.0-beta` +`v3.26.0-beta` # Release Version -https://github.com/algorand/go-algorand/releases/tag/v3.24.0-beta +https://github.com/algorand/go-algorand/releases/tag/v3.26.0-beta # Genesis ID `betanet-v1.0` diff --git a/docs/get-details/algorand-networks/mainnet.md b/docs/get-details/algorand-networks/mainnet.md index 33237028d..14b5fc06e 100644 --- a/docs/get-details/algorand-networks/mainnet.md +++ b/docs/get-details/algorand-networks/mainnet.md @@ -1,10 +1,10 @@ title: MainNet # Version -`v3.24.0-stable` +`v3.26.0-stable` # Release Version -https://github.com/algorand/go-algorand/releases/tag/v3.24.0-stable +https://github.com/algorand/go-algorand/releases/tag/v3.26.0-stable # Genesis ID `mainnet-v1.0` diff --git a/docs/get-details/algorand-networks/testnet.md b/docs/get-details/algorand-networks/testnet.md index 6dd42cda5..e94c76c2d 100644 --- a/docs/get-details/algorand-networks/testnet.md +++ b/docs/get-details/algorand-networks/testnet.md @@ -1,10 +1,10 @@ title: TestNet # Version -`v3.24.0-stable` +`v3.26.0-stable` # Release Version -https://github.com/algorand/go-algorand/releases/tag/v3.24.0-stable +https://github.com/algorand/go-algorand/releases/tag/v3.26.0-stable # Genesis ID `testnet-v1.0` diff --git a/docs/get-details/dapps/avm/teal/opcodes/v10.md b/docs/get-details/dapps/avm/teal/opcodes/v10.md index 40e52eb01..4d58e9093 100644 --- a/docs/get-details/dapps/avm/teal/opcodes/v10.md +++ b/docs/get-details/dapps/avm/teal/opcodes/v10.md @@ -1638,7 +1638,7 @@ Fields | Index | Name | Type | Notes | | - | ------ | -- | --------- | -| 0 | BlkSeed | []byte | | +| 0 | BlkSeed | [32]byte | | | 1 | BlkTimestamp | uint64 | | diff --git a/docs/get-details/dapps/avm/teal/opcodes/v7.md b/docs/get-details/dapps/avm/teal/opcodes/v7.md index 9e76ad86b..513d3954a 100644 --- a/docs/get-details/dapps/avm/teal/opcodes/v7.md +++ b/docs/get-details/dapps/avm/teal/opcodes/v7.md @@ -1476,6 +1476,6 @@ Fields | Index | Name | Type | Notes | | - | ------ | -- | --------- | -| 0 | BlkSeed | []byte | | +| 0 | BlkSeed | [32]byte | | | 1 | BlkTimestamp | uint64 | | diff --git a/docs/get-details/dapps/avm/teal/opcodes/v8.md b/docs/get-details/dapps/avm/teal/opcodes/v8.md index dbc1a2ac7..10b02981f 100644 --- a/docs/get-details/dapps/avm/teal/opcodes/v8.md +++ b/docs/get-details/dapps/avm/teal/opcodes/v8.md @@ -1635,6 +1635,6 @@ Fields | Index | Name | Type | Notes | | - | ------ | -- | --------- | -| 0 | BlkSeed | []byte | | +| 0 | BlkSeed | [32]byte | | | 1 | BlkTimestamp | uint64 | | diff --git a/docs/get-details/dapps/avm/teal/opcodes/v9.md b/docs/get-details/dapps/avm/teal/opcodes/v9.md index 6e1e957e8..624424b1d 100644 --- a/docs/get-details/dapps/avm/teal/opcodes/v9.md +++ b/docs/get-details/dapps/avm/teal/opcodes/v9.md @@ -1635,6 +1635,6 @@ Fields | Index | Name | Type | Notes | | - | ------ | -- | --------- | -| 0 | BlkSeed | []byte | | +| 0 | BlkSeed | [32]byte | | | 1 | BlkTimestamp | uint64 | | diff --git a/docs/get-started/algokit.md b/docs/get-started/algokit.md index 0c839de7b..b16f34777 100644 --- a/docs/get-started/algokit.md +++ b/docs/get-started/algokit.md @@ -1,7 +1,9 @@ title: AlgoKit Quick Start Guide AlgoKit is a simple, one-stop tool for developers to quickly and easily build and launch secure, automated, production-ready decentralized applications on the Algorand protocol -- now also featuring native support for Python! This empowers developers to write Algorand apps in regular Python, one of the world's most popular programming languages. + In addition, AlgoKit features: + - A library of smart contract templates to kickstart your build - All necessary application infrastructure running locally - Toolchain integrations for languages you love, like Python and TypeScript @@ -122,11 +124,16 @@ Now that AlgoKit is installed, you can rapidly create a new project to get start algokit init ``` -This will launch a guided menu system to create a specific project tailored to your needs. You will first be prompted to select a specific template. The templates are basic starter applications for various Algorand development scenarios. To read more about templates checkout AlgoKit detailed documentation. For now, use the arrow keys to select the `starter` template, which is a lightweight starting point for learning and experimentation. - -Next, you will be prompted for the name of your project. Finally, select the default value for the rest of the prompts (enter). +This will launch a guided menu system to create a specific project tailored to your needs. You will first be prompted to select a specific template. The templates are basic starter applications for various Algorand development scenarios. To read more about templates checkout AlgoKit detailed documentation. For this guide, we will use the Python smart contract starter template. Select the following options: +1. `Smart Contracts` +2. `Python` +3. name of your project: `DEMO` +4. Template preset: select `Starter`. +5. Contract deployment code: select `Python` +6. algokit project bootstrap: `Y` +7. git repository: `Y` -Once finished, (if you have it installed) VS Code should automatically be opened with the initialised project and you will be prompted to install appropriate VS Code extensions. This starter app will contain one smart contract (built with [Python](https://algorandfoundation.github.io/puya/) named `contract.py`, in the `hello_world` folder, with one method (`hello`) that takes a `String` and returns a `String`. +Once finished, (if you have it installed) VS Code should automatically be opened with the initialized project and you will be prompted to install appropriate VS Code extensions. This starter app will contain one smart contract (built with [Algorand Python](https://algorandfoundation.github.io/puya/) named `contract.py`, in the `hello_world` folder, with one method (`hello`) that takes a `String` and returns a `String`. ![AlgoKit Starter Contract](../imgs/algokitv2_starter.png) @@ -136,13 +143,20 @@ Once the starter project is created, you will notice in the `smart_contracts/hel ![AlgoKit Starter config ](../imgs/algokit_v2_demo.png) -By hitting F5 you will deploy the `HelloWorldApp` smart contract and then call it passing the parameter `name` with a value of `world`. You can edit this parameter in the `deploy_config.py` file and it will: +By hitting F5 you will deploy the `HelloWorld` smart contract and then call it passing the parameter `name` with a value of `world`. You can edit this parameter in the `deploy_config.py` file and it will: 1. Start LocalNet 2. Build the smart contract 3. Deploy and call the smart contract (`contract.py`) -This should produce something similiar to the following in the VSCode terminal. +If you would like to manually build and deploy the `HelloWorld` smart contract run the following AlgoKit commands: + +```shell +algokit project run build +algokit project run deploy +``` + +This should produce something similar to the following in the VSCode terminal. ```shell HelloWorld not found in PDEEWXLITMAPDMDYGP4XUV2EUJVPNZVKR7OUSSFZ63U4XNL2Y25FN5PYN4 account, deploying app. @@ -158,55 +172,89 @@ Additionally, you can find the native TEAL smart contract code and the appropria ![AlgoKit Starter Demo](../imgs/algokitv2_json.png) -These files can be used by tools like [Dappflow](https://dappflow.org/), [goal](https://developer.algorand.org/docs/clis/goal/goal/), etc. to deploy your smart contract to the various Algorand networks. +These files can be used by tools like [Lora](https://lora.algokit.io/localnet), [goal](https://developer.algorand.org/docs/clis/goal/goal/), etc. to deploy your smart contract to the various Algorand networks. -## Using Dappflow +## Using Lora -Dappflow is a web-based user interface that let's you visualise accounts, transactions, assets and applications on an Algorand network and also provides ability to deploy and call smart contracts. This works for TestNet, MainNet and also LocalNet. Furthermore, you can also create and fund accounts on LocalNet. While AlgoKit surfaces both a programming interface and a command line interface for interacting with Algorand, it also allows you to quickly open Dappflow so you can see what's happening visually. +Lora is a web-based user interface that let's you visualize accounts, transactions, assets and applications on an Algorand network and also provides ability to deploy and call smart contracts. This works for TestNet, MainNet and also LocalNet. While AlgoKit surfaces both a programming interface and a command line interface for interacting with Algorand, it also allows you to quickly open Lora so you can see what's happening visually. -Dappflow can be launched from AlgoKit by running the following command from the VS Code terminal. +Lora can be launched from AlgoKit by running the following command from the terminal. ```shell algokit explore ``` -By default it will open Dappflow to point to LocalNet (It will be displayed as `sandbox` in the upper left hand corner.), but you can pass in parameters to point it to TestNet and MainNet too. +By default it will open Lora and point to LocalNet (It will be displayed as `LocalNet` in the upper right hand corner), but you can pass in parameters to point it to TestNet and MainNet too. -This command will launch your default web browser and load the Dappflow web application. +This command will launch your default web browser and load the Lora web application. **Note:** If you are using Safari, then it won't work against LocalNet and you will need to open it in a different browser. -![AlgoKit Dappflow](../imgs/dappflow1.png) +![Lora](../imgs/lora1.png) + +### Create / Connect local account for testing + +To issue commands against the LocalNet network you need an account with ALGO in it. Lora gives you three options for connecting to a local wallet: `Connect KMD`, `Connect MNEMONIC`, and `Connect Lute` -### Create test account +- `Connect KMD`: Lora will automatically import KMD wallet. -To issue commands against the LocalNet network you need an account with ALGOs in it. Dappflow lets you easily create one. +- `Connect MNEMONIC`: You can manually input a MNEMONIC for an account you own. -Select `Dev Wallets` from the left menu and click on the `Create wallet` button. This will create an account on the LocalNet and fund it with 100 Algos that can be used to test with. +- `Connect Lute`: You can create local accounts from [Lute](https://lute.app/) and connect to them. -![AlgoKit Dappflow](../imgs/dappflow2.png) +In this guide, we will use the KMD wallet. -In the bottom left hand corner of the menu, select `Connect wallet` and you will be prompted with several wallet choices. Choose the `Dev Wallet` option. This will connect the account you just created to Dappflow so you can use that account for signing transactions from the Dappflow user interface. +Select `Connect wallet` located at top right hand side of the webpage and you will be prompted with the three wallet choices. Choose the `Connect KMD` option. This will prompt you to enter the KMD password. If this is your first time building on Algorand, you do not have a KMD password so leave it blank and click `OK`. This will connect the KMD account to Lora so you can use that account for signing transactions from the Lora user interface. + +![Lora](../imgs/lora-wallet.png) ### Deploy the Hello World application -To deploy your smart contract application, select the `Beaker studio` menu and click on the import beaker app. Select `File` and `Upload file`, browse to the artifacts created in the previous section of this guide. Select the `*.arc32.json` manifest file. This will load the specific manifest file for the Hello World sample application. +1. To deploy your smart contract application, select the `App Lab` menu and click on the `Create` button. +![Lora](../imgs/lora2.png) + +2. Click `Deploy new` and `Select an ARC-32 JSON app spec file` to browse to the artifacts created in the previous section of this guide. Select the `HelloWorld.arc32.json` manifest file. +![Lora](../imgs/lora3.png) +![Lora](../imgs/lora4.png) +![Lora](../imgs/lora5.png) + +3. This will load the specific manifest file for the Hello World sample application. Click `Next`. +![Lora](../imgs/lora6.png) + +4. You can change the `Name` and the `Version` of your app. We will keep it as it is. Click `Next`. +![Lora](../imgs/lora7.png) + +5. Click the `() Call` button. Then build and add the create transaction by clicking `Add`. +![Lora](../imgs/lora8.png) +![Lora](../imgs/lora9.png) + + +6. Click `Deploy` and sign the transaction by clicking `OK` in the KMD pop up to deploy the smart contract to the local Algorand network. +![Lora](../imgs/lora10.png) + +7. You should now see the deployed `HelloWorld` contract on the `App Lab` page. +![Lora](../imgs/lora11.png) -![AlgoKit Dappflow](../imgs/dappflow3.png) +8. Now click on the `App ID` inside of the `HelloWorld` card to go to the `Application` page. +![Lora](../imgs/lora12.png) -To deploy this application again, select the `Create app` button followed by the `Create` button from the popup. You should get a `Transaction successful` message with the option to view the specific transaction in the explorer. Close out of the popup and then scroll down to the `ABI` section of the page. The `hello` method should be displayed with an execute button beside it. +10. Inside the `ABI Methods` section, you should see the `hello` method. Click on the drop down and the `Call` button. You will be prompted with a popup allowing you to enter the parameter for the `hello` method and call it. +![Lora](../imgs/lora13.png) -![AlgoKit Dappflow](../imgs/dappflow4.png) -Click on the Execute button and a popup will be displayed allowing you to enter the parameter that we defined in the `HelloWorldApp` smart contract. +11. Enter a string in the `value` input and click on `Add`. +![Lora](../imgs/lora14.png) -![AlgoKit Dappflow](../imgs/dappflow5.png) +12. You should now see the transaction you just built on the `Application` page. Click `Send` and sign the transaction with your KMD wallet to execute the transaction. +![Lora](../imgs/lora15.png) -Enter a string in the parameter and click on `Execute`. You should get get a confirmation that the method executed properly and what the smart contract returned. +13. You should now see the `Send Result` showing you the details about the transaction you just executed! +![Lora](../imgs/lora16.png) -![AlgoKit Dappflow](../imgs/dappflow6.png) +1. You can also click on `Transaction ID` to go to the `Transaction` page and see the full detail of the transaction. +![Lora](../imgs/lora17.png) -You have now successfully deployed and executed a smart contract method call using Dappflow! +You have now successfully deployed and executed a smart contract method call using Lora! ## Next steps diff --git a/docs/get-started/basics/why_algorand.md b/docs/get-started/basics/why_algorand.md index c0a30dc76..de40268c8 100644 --- a/docs/get-started/basics/why_algorand.md +++ b/docs/get-started/basics/why_algorand.md @@ -92,12 +92,12 @@ The speed at which blocks are produced, the amount of transactions that can fit ## Throughput You want to choose a blockchain that can scale and handle high throughput so that your users don’t experience long wait times when interacting with your application. -On Algorand, blocks are produced every 3.3 seconds and can hold up to 25,000 transactions, which results in a throughput of about 7,500 transactions per second (7500 TPS). +On Algorand, blocks are produced every 2.85 seconds and can hold up to 25,000 transactions, which results in a throughput of over 9,000 transactions per second (9,000 TPS). ## Finality In proof-of-work blockchains, since forking is a possibility, transactions can’t be considered final until a certain amount of time passes and the likelihood of the transaction being on an orphaned chain is practically zero. This means that the actual throughput of this type of blockchain is caveated by a delay in finality. Downstream processes in an application must take this into account to avoid compounding issues if a transaction ends up being invalid. -As we mentioned earlier, Algorand does not have forking so transactions are final as soon as they are confirmed in a block. A throughput of 6,000 TPS then actually means 6,000 _finalized_ transactions per second. +As we mentioned earlier, Algorand does not have forking so transactions are final as soon as they are confirmed in a block. A throughput of 9,000 TPS then actually means 9,000 _finalized_ transactions per second. # Core features Algorand makes it easy to tokenize, transfer, and program conditions on any instrument of value. Create fungible and nonfungible tokens with a single transaction (no smart contract code required). Or program sophisticated decentralized applications (dApps) with Algorand smart contracts. diff --git a/docs/imgs/dappflow.png b/docs/imgs/dappflow.png deleted file mode 100644 index 2b8ee68d1..000000000 Binary files a/docs/imgs/dappflow.png and /dev/null differ diff --git a/docs/imgs/dappflow1.png b/docs/imgs/dappflow1.png deleted file mode 100644 index 2f2ccb388..000000000 Binary files a/docs/imgs/dappflow1.png and /dev/null differ diff --git a/docs/imgs/dappflow2.png b/docs/imgs/dappflow2.png deleted file mode 100644 index 4efe6c9dc..000000000 Binary files a/docs/imgs/dappflow2.png and /dev/null differ diff --git a/docs/imgs/dappflow3.png b/docs/imgs/dappflow3.png deleted file mode 100644 index 4385a104b..000000000 Binary files a/docs/imgs/dappflow3.png and /dev/null differ diff --git a/docs/imgs/dappflow4.png b/docs/imgs/dappflow4.png deleted file mode 100644 index 96fb01020..000000000 Binary files a/docs/imgs/dappflow4.png and /dev/null differ diff --git a/docs/imgs/dappflow5.png b/docs/imgs/dappflow5.png deleted file mode 100644 index 64d409c62..000000000 Binary files a/docs/imgs/dappflow5.png and /dev/null differ diff --git a/docs/imgs/dappflow6.png b/docs/imgs/dappflow6.png deleted file mode 100644 index 0030e3b55..000000000 Binary files a/docs/imgs/dappflow6.png and /dev/null differ diff --git a/docs/imgs/dappflow_transaction.png b/docs/imgs/dappflow_transaction.png deleted file mode 100644 index 3eda5de32..000000000 Binary files a/docs/imgs/dappflow_transaction.png and /dev/null differ diff --git a/docs/imgs/lora-wallet.png b/docs/imgs/lora-wallet.png new file mode 100644 index 000000000..fa1c6c51d Binary files /dev/null and b/docs/imgs/lora-wallet.png differ diff --git a/docs/imgs/lora1.png b/docs/imgs/lora1.png new file mode 100644 index 000000000..7fc10cfb8 Binary files /dev/null and b/docs/imgs/lora1.png differ diff --git a/docs/imgs/lora10.png b/docs/imgs/lora10.png new file mode 100644 index 000000000..e92c862ac Binary files /dev/null and b/docs/imgs/lora10.png differ diff --git a/docs/imgs/lora11.png b/docs/imgs/lora11.png new file mode 100644 index 000000000..b1e7586ff Binary files /dev/null and b/docs/imgs/lora11.png differ diff --git a/docs/imgs/lora12.png b/docs/imgs/lora12.png new file mode 100644 index 000000000..b3ce2f98a Binary files /dev/null and b/docs/imgs/lora12.png differ diff --git a/docs/imgs/lora13.png b/docs/imgs/lora13.png new file mode 100644 index 000000000..6d0c5962d Binary files /dev/null and b/docs/imgs/lora13.png differ diff --git a/docs/imgs/lora14.png b/docs/imgs/lora14.png new file mode 100644 index 000000000..03ad8b6f3 Binary files /dev/null and b/docs/imgs/lora14.png differ diff --git a/docs/imgs/lora15.png b/docs/imgs/lora15.png new file mode 100644 index 000000000..9dfca5fe4 Binary files /dev/null and b/docs/imgs/lora15.png differ diff --git a/docs/imgs/lora16.png b/docs/imgs/lora16.png new file mode 100644 index 000000000..f6f0aa77f Binary files /dev/null and b/docs/imgs/lora16.png differ diff --git a/docs/imgs/lora17.png b/docs/imgs/lora17.png new file mode 100644 index 000000000..cc02de24c Binary files /dev/null and b/docs/imgs/lora17.png differ diff --git a/docs/imgs/lora2.png b/docs/imgs/lora2.png new file mode 100644 index 000000000..fc3c5255e Binary files /dev/null and b/docs/imgs/lora2.png differ diff --git a/docs/imgs/lora3.png b/docs/imgs/lora3.png new file mode 100644 index 000000000..19c12bb99 Binary files /dev/null and b/docs/imgs/lora3.png differ diff --git a/docs/imgs/lora4.png b/docs/imgs/lora4.png new file mode 100644 index 000000000..558d815e4 Binary files /dev/null and b/docs/imgs/lora4.png differ diff --git a/docs/imgs/lora5.png b/docs/imgs/lora5.png new file mode 100644 index 000000000..f7355a3a0 Binary files /dev/null and b/docs/imgs/lora5.png differ diff --git a/docs/imgs/lora6.png b/docs/imgs/lora6.png new file mode 100644 index 000000000..e897def49 Binary files /dev/null and b/docs/imgs/lora6.png differ diff --git a/docs/imgs/lora7.png b/docs/imgs/lora7.png new file mode 100644 index 000000000..e7d270b7d Binary files /dev/null and b/docs/imgs/lora7.png differ diff --git a/docs/imgs/lora8.png b/docs/imgs/lora8.png new file mode 100644 index 000000000..3d63f6c8d Binary files /dev/null and b/docs/imgs/lora8.png differ diff --git a/docs/imgs/lora9.png b/docs/imgs/lora9.png new file mode 100644 index 000000000..1b2a2d62c Binary files /dev/null and b/docs/imgs/lora9.png differ diff --git a/docs/rest-apis/algod.md b/docs/rest-apis/algod.md index 56bd2320b..2b7cd7709 100644 --- a/docs/rest-apis/algod.md +++ b/docs/rest-apis/algod.md @@ -4,6 +4,84 @@ title: algod ## Paths + +### GET /debug/settings/config +Gets the merged config file. +``` +GET /debug/settings/config +``` + + +**Description** +Returns the merged (defaults + overrides) config file in json. + + +**Responses** + +|HTTP Code|Description|Schema| +|---|---|---| +|**200**|The merged config file in json.|string| +|**default**|Unknown Error|No Content| + + +**Produces** + +* `application/json` + + +**Tags** + +* private + + + +### GET /debug/settings/pprof + +**Description** +Retrieves the current settings for blocking and mutex profiles + + +**Responses** + +|HTTP Code|Description|Schema| +|---|---|---| +|**200**|DebugPprof is the response to the /debug/extra/pprof endpoint|[DebugSettingsProf](#debugsettingsprof)| + + +**Produces** + +* `application/json` + + +**Tags** + +* private + + + +### PUT /debug/settings/pprof + +**Description** +Enables blocking and mutex profiles, and returns the old settings + + +**Responses** + +|HTTP Code|Description|Schema| +|---|---|---| +|**200**|DebugPprof is the response to the /debug/extra/pprof endpoint|[DebugSettingsProf](#debugsettingsprof)| + + +**Produces** + +* `application/json` + + +**Tags** + +* private + + ### GET /genesis Gets the genesis information. @@ -2049,6 +2127,7 @@ POST /v2/transactions/async |**200**||No Content| |**400**|Bad Request - Malformed Algorand transaction|[ErrorResponse](#errorresponse)| |**401**|Invalid API Token|[ErrorResponse](#errorresponse)| +|**404**|Developer or Experimental API not enabled|No Content| |**500**|Internal Error|[ErrorResponse](#errorresponse)| |**503**|Service Temporarily Unavailable|[ErrorResponse](#errorresponse)| |**default**|Unknown Error|No Content| @@ -2062,6 +2141,7 @@ POST /v2/transactions/async **Tags** * experimental +* public @@ -2614,6 +2694,17 @@ References a box of an application. |**minor**
*required*|integer (int64)| + +### DebugSettingsProf +algod mutex and blocking profiling state. + + +|Name|Description|Schema| +|---|---|---| +|**block-rate**
*optional*|The rate of blocking events. The profiler aims to sample an average of one blocking event per rate nanoseconds spent blocked. To turn off profiling entirely, pass rate 0.
**Example** : `1000`|integer| +|**mutex-rate**
*optional*|The rate of mutex events. On average 1/rate events are reported. To turn off profiling entirely, pass rate 0
**Example** : `1000`|integer| + + ### DryrunRequest Request data type for dryrun endpoint. Given the Transactions and simulated ledger state upload, run TEAL scripts and return debugging information. @@ -2825,6 +2916,7 @@ Request type for simulation endpoint. |**allow-unnamed-resources**
*optional*|Allows access to unnamed resources during simulation.|boolean| |**exec-trace-config**
*optional*||[SimulateTraceConfig](#simulatetraceconfig)| |**extra-opcode-budget**
*optional*|Applies extra opcode budget during simulation for each transaction group.|integer| +|**fix-signers**
*optional*|If true, signers for transactions that are missing signatures will be fixed during evaluation.|boolean| |**round**
*optional*|If provided, specifies the round preceding the simulation. State changes through this round will be used to run this simulation. Usually only the 4 most recent rounds will be available (controlled by the node config value MaxAcctLookback). If not specified, defaults to the latest available round.|integer| |**txn-groups**
*required*|The transaction groups to simulate.|< [SimulateRequestTransactionGroup](#simulaterequesttransactiongroup) > array| @@ -2876,6 +2968,7 @@ Simulation result for an individual transaction |---|---|---| |**app-budget-consumed**
*optional*|Budget used during execution of an app call transaction. This value includes budged used by inner app calls spawned by this transaction.|integer| |**exec-trace**
*optional*||[SimulationTransactionExecTrace](#simulationtransactionexectrace)| +|**fixed-signer**
*optional*|The account that needed to sign this transaction when no signature was provided and the provided signer was incorrect.|string| |**logic-sig-budget-consumed**
*optional*|Budget used during execution of a logic sig transaction.|integer| |**txn-result**
*required*||[PendingTransactionResponse](#pendingtransactionresponse)| |**unnamed-resources-accessed**
*optional*||[SimulateUnnamedResourcesAccessed](#simulateunnamedresourcesaccessed)| @@ -2907,6 +3000,7 @@ The set of parameters and limits override during simulation. If this set of para |**allow-empty-signatures**
*optional*|If true, transactions without signatures are allowed and simulated as if they were properly signed.|boolean| |**allow-unnamed-resources**
*optional*|If true, allows access to unnamed resources during simulation.|boolean| |**extra-opcode-budget**
*optional*|The extra opcode budget added to each transaction group during simulation|integer| +|**fix-signers**
*optional*|If true, signers for transactions that are missing signatures will be fixed during evaluation.|boolean| |**max-log-calls**
*optional*|The maximum log calls one can make during simulation|integer| |**max-log-size**
*optional*|The maximum byte number to log during simulation|integer| diff --git a/docs/rest-apis/indexer.md b/docs/rest-apis/indexer.md index fdd90a7dc..471a8dafc 100644 --- a/docs/rest-apis/indexer.md +++ b/docs/rest-apis/indexer.md @@ -1391,25 +1391,29 @@ data/basics/userBalance.go : AccountData |Name|Description|Schema| |---|---|---| |**address**
*required*|the account public key|string| -|**amount**
*required*|\[algo\] total number of MicroAlgos in the account|integer| +|**amount**
*required*|total number of MicroAlgos in the account|integer| |**amount-without-pending-rewards**
*required*|specifies the amount of MicroAlgos in the account, without the pending rewards.|integer| -|**apps-local-state**
*optional*|\[appl\] applications local data stored in this account.

Note the raw object uses `map[int] -> AppLocalState` for this type.|< [ApplicationLocalState](#applicationlocalstate) > array| -|**apps-total-extra-pages**
*optional*|\[teap\] the sum of all extra application program pages for this account.|integer| -|**apps-total-schema**
*optional*|\[tsch\] stores the sum of all of the local schemas and global schemas in this account.

Note: the raw account uses `StateSchema` for this type.|[ApplicationStateSchema](#applicationstateschema)| -|**assets**
*optional*|\[asset\] assets held by this account.

Note the raw object uses `map[int] -> AssetHolding` for this type.|< [AssetHolding](#assetholding) > array| -|**auth-addr**
*optional*|\[spend\] the address against which signing should be checked. If empty, the address of the current account is used. This field can be updated in any transaction by setting the RekeyTo field.|string| +|**apps-local-state**
*optional*|application local data stored in this account.

Note the raw object uses `map[int] -> AppLocalState` for this type.|< [ApplicationLocalState](#applicationlocalstate) > array| +|**apps-total-extra-pages**
*optional*|the sum of all extra application program pages for this account.|integer| +|**apps-total-schema**
*optional*|the sum of all of the local schemas and global schemas in this account.

Note: the raw account uses `StateSchema` for this type.|[ApplicationStateSchema](#applicationstateschema)| +|**assets**
*optional*|assets held by this account.

Note the raw object uses `map[int] -> AssetHolding` for this type.|< [AssetHolding](#assetholding) > array| +|**auth-addr**
*optional*|The address against which signing should be checked. If empty, the address of the current account is used. This field can be updated in any transaction by setting the RekeyTo field.|string| |**closed-at-round**
*optional*|Round during which this account was most recently closed.|integer| -|**created-apps**
*optional*|\[appp\] parameters of applications created by this account including app global data.

Note: the raw account uses `map[int] -> AppParams` for this type.|< [Application](#application) > array| -|**created-assets**
*optional*|\[apar\] parameters of assets created by this account.

Note: the raw account uses `map[int] -> Asset` for this type.|< [Asset](#asset) > array| +|**created-apps**
*optional*|parameters of applications created by this account including app global data.

Note: the raw account uses `map[int] -> AppParams` for this type.|< [Application](#application) > array| +|**created-assets**
*optional*|parameters of assets created by this account.

Note: the raw account uses `map[int] -> Asset` for this type.|< [Asset](#asset) > array| |**created-at-round**
*optional*|Round during which this account first appeared in a transaction.|integer| |**deleted**
*optional*|Whether or not this account is currently closed.|boolean| +|**incentive-eligible**
*optional*|can the account receive block incentives if its balance is in range at proposal time.|boolean| +|**last-heartbeat**
*optional*|The round in which this account last went online, or explicitly renewed their online status.|integer| +|**last-proposed**
*optional*|The round in which this account last proposed the block.|integer| +|**min-balance**
*required*|MicroAlgo balance required by the account.

The requirement grows based on asset and application usage.|integer| |**participation**
*optional*||[AccountParticipation](#accountparticipation)| |**pending-rewards**
*required*|amount of MicroAlgos of pending rewards in this account.|integer| -|**reward-base**
*optional*|\[ebase\] used as part of the rewards computation. Only applicable to accounts which are participating.|integer| -|**rewards**
*required*|\[ern\] total rewards of MicroAlgos the account has received, including pending rewards.|integer| +|**reward-base**
*optional*|used as part of the rewards computation. Only applicable to accounts which are participating.|integer| +|**rewards**
*required*|total rewards of MicroAlgos the account has received, including pending rewards.|integer| |**round**
*required*|The round for which this information is relevant.|integer| -|**sig-type**
*optional*|Indicates what type of signature is used by this account, must be one of:
* sig
* msig
* lsig
* or null if unknown|enum (sig, msig, lsig)| -|**status**
*required*|\[onl\] delegation status of the account's MicroAlgos
* Offline - indicates that the associated account is delegated.
* Online - indicates that the associated account used as part of the delegation pool.
* NotParticipating - indicates that the associated account is neither a delegator nor a delegate.|string| +|**sig-type**
*optional*|the type of signature used by this account, must be one of:
* sig
* msig
* lsig
* or null if unknown|enum (sig, msig, lsig)| +|**status**
*required*|voting status of the account's MicroAlgos
* Offline - indicates that the associated account is delegated.
* Online - indicates that the associated account used as part of the delegation pool.
* NotParticipating - indicates that the associated account is neither a delegator nor a delegate.|string| |**total-apps-opted-in**
*required*|The count of all applications that have been opted in, equivalent to the count of application local data (AppLocalState objects) stored in this account.|integer| |**total-assets-opted-in**
*required*|The count of all assets that have been opted in, equivalent to the count of AssetHolding objects held by this account.|integer| |**total-box-bytes**
*required*|For app-accounts only. The total number of bytes allocated for the keys and values of boxes which belong to the associated application.|integer| @@ -1425,12 +1429,12 @@ AccountParticipation describes the parameters used by this account in consensus |Name|Description|Schema| |---|---|---| -|**selection-participation-key**
*required*|\[sel\] Selection public key (if any) currently registered for this round.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| -|**state-proof-key**
*optional*|\[stprf\] Root of the state proof key (if any)
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| -|**vote-first-valid**
*required*|\[voteFst\] First round for which this participation is valid.|integer| -|**vote-key-dilution**
*required*|\[voteKD\] Number of subkeys in each batch of participation keys.|integer| -|**vote-last-valid**
*required*|\[voteLst\] Last round for which this participation is valid.|integer| -|**vote-participation-key**
*required*|\[vote\] root participation public key (if any) currently registered for this round.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| +|**selection-participation-key**
*required*|Selection public key (if any) currently registered for this round.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| +|**state-proof-key**
*optional*|Root of the state proof key (if any)
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| +|**vote-first-valid**
*required*|First round for which this participation is valid.|integer| +|**vote-key-dilution**
*required*|Number of subkeys in each batch of participation keys.|integer| +|**vote-last-valid**
*required*|Last round for which this participation is valid.|integer| +|**vote-participation-key**
*required*|root participation public key (if any) currently registered for this round.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| @@ -1454,8 +1458,8 @@ Application index and its parameters |**created-at-round**
*optional*|Round when this application was created.|integer| |**deleted**
*optional*|Whether or not this application is currently deleted.|boolean| |**deleted-at-round**
*optional*|Round when this application was deleted.|integer| -|**id**
*required*|\[appidx\] application index.|integer| -|**params**
*required*|\[appparams\] application parameters.|[ApplicationParams](#applicationparams)| +|**id**
*required*|application index.|integer| +|**params**
*required*|application parameters.|[ApplicationParams](#applicationparams)| @@ -1468,9 +1472,9 @@ Stores local state associated with an application. |**closed-out-at-round**
*optional*|Round when account closed out of the application.|integer| |**deleted**
*optional*|Whether or not the application local state is currently deleted from its account.|boolean| |**id**
*required*|The application which this local state is for.|integer| -|**key-value**
*optional*|\[tkv\] storage.|[TealKeyValueStore](#tealkeyvaluestore)| +|**key-value**
*optional*|storage.|[TealKeyValueStore](#tealkeyvaluestore)| |**opted-in-at-round**
*optional*|Round when the account opted into the application.|integer| -|**schema**
*required*|\[hsch\] schema.|[ApplicationStateSchema](#applicationstateschema)| +|**schema**
*required*|schema.|[ApplicationStateSchema](#applicationstateschema)| @@ -1480,7 +1484,7 @@ Stores the global information associated with an application. |Name|Description|Schema| |---|---|---| -|**logs**
*required*|\[lg\] Logs for the application being executed by the transaction.|< string (byte) > array| +|**logs**
*required*|Logs for the application being executed by the transaction.|< string (byte) > array| |**txid**
*required*|Transaction ID|string| @@ -1491,13 +1495,13 @@ Stores the global information associated with an application. |Name|Description|Schema| |---|---|---| -|**approval-program**
*required*|\[approv\] approval program.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| -|**clear-state-program**
*required*|\[clearp\] approval program.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| +|**approval-program**
*required*|approval program.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| +|**clear-state-program**
*required*|clear state program.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| |**creator**
*optional*|The address that created this application. This is the address where the parameters and global state for this application can be found.|string| -|**extra-program-pages**
*optional*|\[epp\] the amount of extra program pages available to this app.|integer| -|**global-state**
*optional*|[\gs\] global schema|[TealKeyValueStore](#tealkeyvaluestore)| -|**global-state-schema**
*optional*|[\gsch\] global schema|[ApplicationStateSchema](#applicationstateschema)| -|**local-state-schema**
*optional*|[\lsch\] local schema|[ApplicationStateSchema](#applicationstateschema)| +|**extra-program-pages**
*optional*|the number of extra program pages available to this app.|integer| +|**global-state**
*optional*|global state|[TealKeyValueStore](#tealkeyvaluestore)| +|**global-state-schema**
*optional*|global schema|[ApplicationStateSchema](#applicationstateschema)| +|**local-state-schema**
*optional*|local schema|[ApplicationStateSchema](#applicationstateschema)| @@ -1507,8 +1511,8 @@ Specifies maximums on the number of each type that may be stored. |Name|Description|Schema| |---|---|---| -|**num-byte-slice**
*required*|\[nbs\] num of byte slices.|integer| -|**num-uint**
*required*|\[nui\] num of uints.|integer| +|**num-byte-slice**
*required*|number of byte slices.|integer| +|**num-uint**
*required*|number of uints.|integer| @@ -1535,10 +1539,10 @@ data/basics/userBalance.go : AssetHolding |Name|Description|Schema| |---|---|---| -|**amount**
*required*|\[a\] number of units held.|integer| +|**amount**
*required*|number of units held.|integer| |**asset-id**
*required*|Asset ID of the holding.|integer| |**deleted**
*optional*|Whether or not the asset holding is currently deleted from its account.|boolean| -|**is-frozen**
*required*|\[f\] whether or not the holding is frozen.|boolean| +|**is-frozen**
*required*|whether or not the holding is frozen.|boolean| |**opted-in-at-round**
*optional*|Round during which the account opted into this asset holding.|integer| |**opted-out-at-round**
*optional*|Round during which the account opted out of this asset holding.|integer| @@ -1555,20 +1559,20 @@ data/transactions/asset.go : AssetParams |Name|Description|Schema| |---|---|---| -|**clawback**
*optional*|\[c\] Address of account used to clawback holdings of this asset. If empty, clawback is not permitted.|string| +|**clawback**
*optional*|Address of account used to clawback holdings of this asset. If empty, clawback is not permitted.|string| |**creator**
*required*|The address that created this asset. This is the address where the parameters for this asset can be found, and also the address where unwanted asset units can be sent in the worst case.|string| -|**decimals**
*required*|\[dc\] The number of digits to use after the decimal point when displaying this asset. If 0, the asset is not divisible. If 1, the base unit of the asset is in tenths. If 2, the base unit of the asset is in hundredths, and so on. This value must be between 0 and 19 (inclusive).
**Minimum value** : `0`
**Maximum value** : `19`|integer| -|**default-frozen**
*optional*|\[df\] Whether holdings of this asset are frozen by default.|boolean| -|**freeze**
*optional*|\[f\] Address of account used to freeze holdings of this asset. If empty, freezing is not permitted.|string| -|**manager**
*optional*|\[m\] Address of account used to manage the keys of this asset and to destroy it.|string| -|**metadata-hash**
*optional*|\[am\] A commitment to some unspecified asset metadata. The format of this metadata is up to the application.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| -|**name**
*optional*|\[an\] Name of this asset, as supplied by the creator. Included only when the asset name is composed of printable utf-8 characters.|string| +|**decimals**
*required*|The number of digits to use after the decimal point when displaying this asset. If 0, the asset is not divisible. If 1, the base unit of the asset is in tenths. If 2, the base unit of the asset is in hundredths, and so on. This value must be between 0 and 19 (inclusive).
**Minimum value** : `0`
**Maximum value** : `19`|integer| +|**default-frozen**
*optional*|Whether holdings of this asset are frozen by default.|boolean| +|**freeze**
*optional*|Address of account used to freeze holdings of this asset. If empty, freezing is not permitted.|string| +|**manager**
*optional*|Address of account used to manage the keys of this asset and to destroy it.|string| +|**metadata-hash**
*optional*|A commitment to some unspecified asset metadata. The format of this metadata is up to the application.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| +|**name**
*optional*|Name of this asset, as supplied by the creator. Included only when the asset name is composed of printable utf-8 characters.|string| |**name-b64**
*optional*|Base64 encoded name of this asset, as supplied by the creator.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| -|**reserve**
*optional*|\[r\] Address of account holding reserve (non-minted) units of this asset.|string| -|**total**
*required*|\[t\] The total number of units of this asset.|integer| -|**unit-name**
*optional*|\[un\] Name of a unit of this asset, as supplied by the creator. Included only when the name of a unit of this asset is composed of printable utf-8 characters.|string| +|**reserve**
*optional*|Address of account holding reserve (non-minted) units of this asset.|string| +|**total**
*required*|The total number of units of this asset.|integer| +|**unit-name**
*optional*|Name of a unit of this asset, as supplied by the creator. Included only when the name of a unit of this asset is composed of printable utf-8 characters.|string| |**unit-name-b64**
*optional*|Base64 encoded name of a unit of this asset, as supplied by the creator.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| -|**url**
*optional*|\[au\] URL where more information about the asset can be retrieved. Included only when the URL is composed of printable utf-8 characters.|string| +|**url**
*optional*|URL where more information about the asset can be retrieved. Included only when the URL is composed of printable utf-8 characters.|string| |**url-b64**
*optional*|Base64 encoded URL where more information about the asset can be retrieved.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| @@ -1582,10 +1586,14 @@ data/bookkeeping/block.go : Block |Name|Description|Schema| |---|---|---| +|**bonus**
*optional*|the potential bonus payout for this block.|integer| +|**fees-collected**
*optional*|the sum of all fees paid by transactions in this block.|integer| |**genesis-hash**
*required*|\[gh\] hash to which this block belongs.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| |**genesis-id**
*required*|\[gen\] ID to which this block belongs.|string| |**participation-updates**
*optional*||[ParticipationUpdates](#participationupdates)| |**previous-block-hash**
*required*|\[prev\] Previous block hash.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| +|**proposer**
*optional*|the proposer of this block.|string| +|**proposer-payout**
*optional*|the actual amount transferred to the proposer from the fee sink.|integer| |**rewards**
*optional*||[BlockRewards](#blockrewards)| |**round**
*required*|\[rnd\] Current round on which this block was appended to the chain.|integer| |**seed**
*required*|\[seed\] Sortition seed.
**Pattern** : `"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==\|[A-Za-z0-9+/]{3}=)?$"`|string (byte)| @@ -1778,6 +1786,7 @@ Participation account data that needs to be checked/acted on by the network. |Name|Description|Schema| |---|---|---| +|**absent-participation-accounts**
*optional*|\[partupabs\] a list of online accounts that need to be suspended.|< string > array| |**expired-participation-accounts**
*optional*|\[partupdrmv\] a list of online accounts that needs to be converted to offline since their participation key expired.|< string > array| @@ -1902,9 +1911,9 @@ Represents a TEAL value. |Name|Description|Schema| |---|---|---| -|**bytes**
*required*|\[tb\] bytes value.|string| -|**type**
*required*|\[tt\] value type. Value `1` refers to **bytes**, value `2` refers to **uint**|integer| -|**uint**
*required*|\[ui\] uint value.|integer| +|**bytes**
*required*|bytes value.|string| +|**type**
*required*|type of the value. Value `1` refers to **bytes**, value `2` refers to **uint**|integer| +|**uint**
*required*|uint value.|integer| diff --git a/docs/run-a-node/reference/config.md b/docs/run-a-node/reference/config.md index b72832f7c..1a6ceea3e 100644 --- a/docs/run-a-node/reference/config.md +++ b/docs/run-a-node/reference/config.md @@ -32,7 +32,7 @@ The `algod` process configuration parameters are shown in the table below. | Property| Description | Default Value | |------|------|------| -| Version | Version tracks the current version of the defaults so we can migrate old -> new
This is specifically important whenever we decide to change the default value
for an existing parameter. This field tag must be updated any time we add a new version. | 33 | +| Version | Version tracks the current version of the defaults so we can migrate old -> new
This is specifically important whenever we decide to change the default value
for an existing parameter. This field tag must be updated any time we add a new version. | 34 | | Archival | Archival nodes retain a full copy of the block history. Non-Archival nodes will delete old blocks and only retain what's need to properly validate blockchain messages (the precise number of recent blocks depends on the consensus parameters. Currently the last 1321 blocks are required). This means that non-Archival nodes require significantly less storage than Archival nodes. If setting this to true for the first time, the existing ledger may need to be deleted to get the historical values stored as the setting only affects current blocks forward. To do this, shutdown the node and delete all .sqlite files within the data/testnet-version directory, except the crash.sqlite file. Restart the node and wait for the node to sync. | false | | GossipFanout | GossipFanout sets the maximum number of peers the node will connect to with outgoing connections. If the list of peers is less than this setting, fewer connections will be made. The node will not connect to the same peer multiple times (with outgoing connections). | 4 | | NetAddress | NetAddress is the address and/or port on which a node listens for incoming connections, or blank to ignore incoming connections. Specify an IP and port or just a port. For example, 127.0.0.1:0 will listen on a random port on the localhost. | | @@ -54,7 +54,8 @@ The `algod` process configuration parameters are shown in the table below. | CrashDBDir | CrashDBDir is an optional directory to persist agreement's consensus participation state.
For isolation, the node will create a subdirectory in this location, named by the genesis-id of the network.
If not specified, the node will use the HotDataDir | | | LogFileDir | LogFileDir is an optional directory to store the log, node.log
If not specified, the node will use the HotDataDir.
The -o command line option can be used to override this output location. | | | LogArchiveDir | LogArchiveDir is an optional directory to store the log archive.
If not specified, the node will use the ColdDataDir. | | -| IncomingConnectionsLimit | IncomingConnectionsLimit specifies the max number of incoming connections
for the port configured in NetAddress. 0 means no connections allowed. Must be non-negative.
Estimating 1.5MB per incoming connection, 1.5MB*2400 = 3.6GB | 2400 | +| IncomingConnectionsLimit | IncomingConnectionsLimit specifies the max number of incoming connections
for the gossip protocol configured in NetAddress. 0 means no connections allowed. Must be non-negative.
Estimating 1.5MB per incoming connection, 1.5MB*2400 = 3.6GB | 2400 | +| P2PHybridIncomingConnectionsLimit | P2PHybridIncomingConnectionsLimit is used as IncomingConnectionsLimit for P2P connections in hybrid mode.
For pure P2P nodes IncomingConnectionsLimit is used. | 1200 | | BroadcastConnectionsLimit | BroadcastConnectionsLimit specifies the number of connections that
will receive broadcast (gossip) messages from this node. If the
node has more connections than this number, it will send broadcasts
to the top connections by priority (outgoing connections first, then
by money held by peers based on their participation key). 0 means
no outgoing messages (not even transaction broadcasting to outgoing
peers). -1 means unbounded (default). | -1 | | AnnounceParticipationKey | AnnounceParticipationKey specifies that this node should announce its
participation key (with the largest stake) to its gossip peers. This
allows peers to prioritize our connection, if necessary, in case of a
DoS attack. Disabling this means that the peers will not have any
additional information to allow them to prioritize our connection. | true | | PriorityPeers | PriorityPeers specifies peer IP addresses that should always get
outgoing broadcast messages from this node. | | @@ -110,8 +111,9 @@ The `algod` process configuration parameters are shown in the table below. | HeartbeatUpdateInterval | HeartbeatUpdateInterval defines the interval at which the heartbeat information is being sent to the
telemetry (when enabled). Defined in seconds. Minimum value is 60. | 600 | | EnableProfiler | EnableProfiler enables the go pprof endpoints, should be false if
the algod api will be exposed to untrusted individuals | false | | EnableRuntimeMetrics | EnableRuntimeMetrics exposes Go runtime metrics in /metrics and via node_exporter. | false | +| EnableNetDevMetrics | EnableNetDevMetrics exposes network interface total bytes sent/received metrics in /metrics | false | | TelemetryToLog | TelemetryToLog configures whether to record messages to node.log that are normally only sent to remote event monitoring. | true | -| DNSSecurityFlags | DNSSecurityFlags instructs algod validating DNS responses.
Possible fla values
0x00 - disabled
0x01 (dnssecSRV) - validate SRV response
0x02 (dnssecRelayAddr) - validate relays' names to addresses resolution
0x04 (dnssecTelemetryAddr) - validate telemetry and metrics names to addresses resolution
... | 1 | +| DNSSecurityFlags | DNSSecurityFlags instructs algod validating DNS responses.
Possible fla values
0x00 - disabled
0x01 (dnssecSRV) - validate SRV response
0x02 (dnssecRelayAddr) - validate relays' names to addresses resolution
0x04 (dnssecTelemetryAddr) - validate telemetry and metrics names to addresses resolution
0x08 (dnssecTXT) - validate TXT response
... | 9 | | EnablePingHandler | EnablePingHandler controls whether the gossip node would respond to ping messages with a pong message. | true | | DisableOutgoingConnectionThrottling | DisableOutgoingConnectionThrottling disables the connection throttling of the network library, which
allow the network library to continuously disconnect relays based on their relative (and absolute) performance. | false | | NetworkProtocolVersion | NetworkProtocolVersion overrides network protocol version ( if present ) | | @@ -164,10 +166,14 @@ The `algod` process configuration parameters are shown in the table below. | StorageEngine | StorageEngine allows to control which type of storage to use for the ledger.
Available options are:
- sqlite (default)
- pebbledb (experimental, in development) | sqlite | | TxIncomingFilterMaxSize | TxIncomingFilterMaxSize sets the maximum size for the de-duplication cache used by the incoming tx filter
only relevant if TxIncomingFilteringFlags is non-zero | 500000 | | BlockServiceMemCap | BlockServiceMemCap is the memory capacity in bytes which is allowed for the block service to use for HTTP block requests.
When it exceeds this capacity, it redirects the block requests to a different node | 500000000 | -| EnableP2P | EnableP2P turns on the peer to peer network | false | +| EnableP2P | EnableP2P turns on the peer to peer network.
When both EnableP2P and EnableP2PHybridMode (below) are set, EnableP2PHybridMode takes precedence. | false | +| EnableP2PHybridMode | EnableP2PHybridMode turns on both websockets and P2P networking.
Enabling this setting also requires PublicAddress to be set. | false | +| P2PHybridNetAddress | P2PHybridNetAddress sets the listen address used for P2P networking, if hybrid mode is set. | | +| EnableDHTProviders | EnableDHT will turn on the hash table for use with capabilities advertisement | false | | P2PPersistPeerID | P2PPersistPeerID will write the private key used for the node's PeerID to the P2PPrivateKeyLocation.
This is only used when P2PEnable is true. If P2PPrivateKey is not specified, it uses the default location. | false | | P2PPrivateKeyLocation | P2PPrivateKeyLocation allows the user to specify a custom path to the private key used for the node's PeerID.
The private key provided must be an ed25519 private key.
This is only used when P2PEnable is true. If the parameter is not set, it uses the default location. | | | DisableAPIAuth | DisableAPIAuth turns off authentication for public (non-admin) API endpoints. | false | +| GoMemLimit | GoMemLimit provides the Go runtime with a soft memory limit. The default behavior is no limit,
unless the GOMEMLIMIT environment variable is set. | 0 | diff --git a/docs/run-a-node/setup/node-troubleshooting.md b/docs/run-a-node/setup/node-troubleshooting.md index 38211290d..88ab3b173 100644 --- a/docs/run-a-node/setup/node-troubleshooting.md +++ b/docs/run-a-node/setup/node-troubleshooting.md @@ -53,9 +53,6 @@ One of the most common issues are that the node is on the wrong network, has the * **Check that the node is on the right network**: when running `goal node status`, `Genesis ID` must be `mainnet-v1.0` for MainNet, `testnet-v1.0` for TestNet, `betanet-v1.0` for BetaNet. See [Switch Networks](/docs/run-a-node/operations/switch_networks) to solve this issue. * **Check that the version** reported of `algod -v` and `goal version -v` are the latest stable release (if using MainNet or TestNet) or the latest beta release (if using BetaNet). See the [official repo](https://github.com/algorand/go-algorand/releases) for the list of all releases. Beta releases are clearly marked as such. -You can easily check all of the above using [dAppFlow node status](https://app.dappflow.org/node-manager/dashboard) webapp. -Click on settings on the bottom left, fill in URL (usually `http://localhost`, inside `$ALGORAND_DATA/algod.net`), port (usually 8080, inside `$ALGORAND_DATA/algod.net`), token (from `$ALGORAND_DATA/algod.token`). - ## My node is not syncing/catching up at all (Last Committed Block is 0) As soon as the node is started, the `Last Committed Block` from `goal node status` should be increasing. diff --git a/docs/sdks/go/index.md b/docs/sdks/go/index.md index 4052c932c..535a0e08d 100644 --- a/docs/sdks/go/index.md +++ b/docs/sdks/go/index.md @@ -1,6 +1,6 @@ title: Go SDK: Your First Transaction -This section is a quick start guide for interacting with the Algorand network using Go. This guide will help to install [Algorand sandbox](https://github.com/algorand/sandbox){:target="_blank"}, which provides a node for testing and development. This guide will also help to install the Go SDK, create an account and submit your first transaction on Algorand. +This section is a quick start guide for interacting with the Algorand network using Go. This guide will help to install [Algorand sandbox](https://github.com/algorand/sandbox){target=blank}, which provides a node for testing and development. This guide will also help to install the Go SDK, create an account and submit your first transaction on Algorand. # Install Sandbox @@ -184,6 +184,6 @@ fmt.Printf("Confirmed Transaction: %s in Round %d\n", pendingTxID, confirmedTxn. # Viewing the Transaction -To view the transaction we submitted to the sandbox Algod, open [DappFlow](https://app.dappflow.org/explorer/home){target=_blank} and choose `Sandbox` configuration option, then search for the transaction ID. +To view the transaction we submitted to the sandbox Algod, open [Lora](https://lora.algokit.io/localnet){target=_blank} and choose `LocalNet` configuration option, then search for the transaction ID. -To view a transaction submitted to public network like testnet, open [Pera Explorer](https://testnet.explorer.perawallet.app/){:target="_blank"} or [Bitquery](https://explorer.bitquery.io/algorand_testnet){:target="_blank"} and paste the transaction ID into the search bar or simply click on the funded transaction link on the dispenser page. +To view a transaction submitted to public network like testnet, open [Lora](https://lora.algokit.io/testnet){target=_blank} or [Pera Explorer](https://testnet.explorer.perawallet.app/){target=blank} and paste the transaction ID into the search bar. diff --git a/docs/sdks/java/index.md b/docs/sdks/java/index.md index 4cc3fe4d2..357a47e65 100644 --- a/docs/sdks/java/index.md +++ b/docs/sdks/java/index.md @@ -1,6 +1,6 @@ title: Java SDK: Your First Transaction -This section is a quick start guide for interacting with Algorand network using Java. This guide will help to install [Algorand sandbox](https://github.com/algorand/sandbox){:target="_blank"}, which provides a node for testing and development. This guide will also help to install the Java SDK, create an account and submit your first transaction. +This section is a quick start guide for interacting with Algorand network using Java. This guide will help to install [Algorand sandbox](https://github.com/algorand/sandbox){target=blank}, which provides a node for testing and development. This guide will also help to install the Java SDK, create an account and submit your first transaction. # Install Sandbox @@ -8,8 +8,8 @@ This section is a quick start guide for interacting with Algorand network using This step is only required if you are not using AlgoKit. If you are using AlgoKit, you can spin up a sandbox using the LocalNet, see [AlgoKit getting started guide](/docs/get-started/algokit/#start-a-localnet) for more information. !!! Prerequisites - - Docker Compose ([install guide](https://docs.docker.com/compose/install/){:target="_blank"}) - - Git ([install guide](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git){:target="_blank"}) + - Docker Compose ([install guide](https://docs.docker.com/compose/install/){target=blank}) + - Git ([install guide](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git){target=blank}) Algorand provides a docker instance for setting up a node, which can be used to get started developing. To install and use this instance, follow these instructions. @@ -28,7 +28,7 @@ This will install and start private network. To read more about Algorand network Algorand provides an [SDK for Java](https://github.com/algorand/java-algorand-sdk). The instructions for installing the SDK are as follows. The Java SDK is available in the MVN repository and can be used in your Maven project by including the following dependency. !!! Prerequisites - Java SDK requires Java 7+ and Android minSdkVersion 16+. Check for the latest version of the Java SDK [here](https://github.com/algorand/java-algorand-sdk#installation){:target="_blank"}. + Java SDK requires Java 7+ and Android minSdkVersion 16+. Check for the latest version of the Java SDK [here](https://github.com/algorand/java-algorand-sdk#installation){target=blank}. ```java @@ -40,7 +40,7 @@ Algorand provides an [SDK for Java](https://github.com/algorand/java-algorand-sd The [GitHub repository](https://github.com/algorand/js-algorand-sdk){target=_blank} contains additional documentation and examples. -See the Java SDK [reference documentation](https://algorand.github.io/java-algorand-sdk/){:target="_blank"} for more information on packages and methods. +See the Java SDK [reference documentation](https://algorand.github.io/java-algorand-sdk/){target=blank} for more information on packages and methods. The SDK is installed and can now interact with the Sandbox created earlier. @@ -56,17 +56,17 @@ System.out.println("Passphrase: " + acct.toMnemonic()); [Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/Overview.java#L76-L79) -[More Information](../../get-details/accounts/create/#standalone){:target="_blank"} +[More Information](../../get-details/accounts/create/#standalone){target=blank} !!! Warning - Never share Mnemonic private keys. Production environments require stringent private key management. For more information on key management in community Wallets, click [here](../../../../ecosystem-projects/#wallets){:target="_blank"}. For the [Algorand open source wallet](https://developer.algorand.org/articles/algorand-wallet-now-open-source/){:target="_blank"}, click [here](https://github.com/algorand/algorand-wallet){:target="_blank"}. + Never share Mnemonic private keys. Production environments require stringent private key management. For more information on key management in community Wallets, click [here](../../../../ecosystem-projects/#wallets){target=blank}. For the [Algorand open source wallet](https://developer.algorand.org/articles/algorand-wallet-now-open-source/){target=blank}, click [here](https://github.com/algorand/algorand-wallet){target=blank}. # Fund the Account Before sending transactions to the Algorand network, the account must be funded to cover the minimal transaction fees that exist on Algorand. In this example, we'll be using prefunded accounts available in the Sandbox. To fund an account on Testnet account use the [Algorand faucet](https://dispenser.testnet.aws.algodev.network/){target=_blank}. !!! Info - All Algorand accounts require a minimum balance to be registered in the ledger. To read more about Algorand minimums see this [link](../../get-details/accounts/#minimum-balance){:target="_blank"}. + All Algorand accounts require a minimum balance to be registered in the ledger. To read more about Algorand minimums see this [link](../../get-details/accounts/#minimum-balance){target=blank}. # Connect Your Client @@ -138,7 +138,7 @@ SignedTransaction sptxn = acct.signTransaction(ptxn); !!! Info - Algorand provides additional ways for transactions to be signed, other than by a standalone account. For more information see [Authorization](../../get-details/transactions/signatures){:target="_blank"}. + Algorand provides additional ways for transactions to be signed, other than by a standalone account. For more information see [Authorization](../../get-details/transactions/signatures){target=blank}. # Submit the Transaction The signed transaction can now be submitted to the network. The SDK `waitForConfirmation` utility function is called after the transaction is submitted to wait until the transaction is broadcast to the Algorand blockchain and is confirmed. @@ -159,6 +159,6 @@ System.out.printf("Transaction %s confirmed in round %d\n", txid, result.confirm # Viewing the Transaction -To view the transaction we submitted to the sandbox Algod, open [DappFlow](https://app.dappflow.org/explorer/home){target=_blank} and choose `Sandbox` configuration option, then search for the transaction ID. +To view the transaction we submitted to the sandbox Algod, open [Lora](https://lora.algokit.io/localnet){target=_blank} and choose `LocalNet` configuration option, then search for the transaction ID. -To view a transaction submitted to public network like testnet, open [Pera Explorer](https://testnet.explorer.perawallet.app/){:target="_blank"} or [Bitquery](https://explorer.bitquery.io/algorand_testnet){:target="_blank"} and paste the transaction ID into the search bar or simply click on the funded transaction link on the dispenser page. +To view a transaction submitted to public network like testnet, open [Lora](https://lora.algokit.io/testnet){target=_blank} or [Pera Explorer](https://testnet.explorer.perawallet.app/){target=blank} and paste the transaction ID into the search bar. diff --git a/docs/sdks/javascript/index.md b/docs/sdks/javascript/index.md index 12ea3311d..bd9639336 100644 --- a/docs/sdks/javascript/index.md +++ b/docs/sdks/javascript/index.md @@ -1,6 +1,6 @@ title: JS SDK: Your First Transaction -This section is a quick start guide for interacting with the Algorand network using JavaScript. This guide will help to install the [Algorand sandbox](https://github.com/algorand/sandbox){:target="_blank"}, which provides a node for testing and development. This guide will also help to install the JavaScript SDK, create an account and submit your first transaction using different JavaScript Runtimes. +This section is a quick start guide for interacting with the Algorand network using JavaScript. This guide will help to install the [Algorand sandbox](https://github.com/algorand/sandbox){target=blank}, which provides a node for testing and development. This guide will also help to install the JavaScript SDK, create an account and submit your first transaction using different JavaScript Runtimes. ​ # Install Sandbox @@ -163,6 +163,6 @@ console.log(`Decoded Note: ${Buffer.from(result.txn.txn.note).toString()}`); ​ # View the Transaction -To view the transaction we submitted to the sandbox Algod, open [DappFlow](https://app.dappflow.org/explorer/home){target=_blank} and choose `Sandbox` configuration option, then search for the transaction ID. +To view the transaction we submitted to the sandbox Algod, open [Lora](https://lora.algokit.io/localnet){target=_blank} and choose `LocalNet` configuration option, then search for the transaction ID. -To view a transaction submitted to public network like testnet, open [Pera Explorer](https://testnet.explorer.perawallet.app/){:target="_blank"} or [Bitquery](https://explorer.bitquery.io/algorand_testnet){:target="_blank"} and paste the transaction ID into the search bar or simply click on the funded transaction link on the dispenser page. +To view a transaction submitted to public network like testnet, open [Lora](https://lora.algokit.io/testnet){target=_blank} or [Pera Explorer](https://testnet.explorer.perawallet.app/){target=blank} and paste the transaction ID into the search bar. diff --git a/docs/sdks/python/index.md b/docs/sdks/python/index.md index 6fbc26fbc..c0dcf7c84 100644 --- a/docs/sdks/python/index.md +++ b/docs/sdks/python/index.md @@ -1,6 +1,6 @@ title: Python SDK: Your first transaction -This section is a quick start guide for interacting with the Algorand network using Python. This guide will help to install [Algorand sandbox](https://github.com/algorand/sandbox){:target="_blank"}, which provides a node for testing and development. This guide will also help to install the Python SDK, create an account and submit your first transaction on Algorand. +This section is a quick start guide for interacting with the Algorand network using Python. This guide will help to install [Algorand sandbox](https://github.com/algorand/sandbox){target=blank}, which provides a node for testing and development. This guide will also help to install the Python SDK, create an account and submit your first transaction on Algorand. # Install Sandbox @@ -157,6 +157,6 @@ print(f"Decoded note: {b64decode(txn_result['txn']['txn']['note'])}") # View the Transaction -To view the transaction we submitted to the sandbox Algod, open [DappFlow](https://app.dappflow.org/explorer/home){target=_blank} and choose `Sandbox` configuration option, then search for the transaction ID. +To view the transaction we submitted to the sandbox Algod, open [Lora](https://lora.algokit.io/localnet){target=_blank} and choose `LocalNet` configuration option, then search for the transaction ID. -To view a transaction submitted to public network like testnet, open [Pera Explorer](https://testnet.explorer.perawallet.app/){:target="_blank"} or [Bitquery](https://explorer.bitquery.io/algorand_testnet){:target="_blank"} and paste the transaction ID into the search bar or simply click on the funded transaction link on the dispenser page. +To view a transaction submitted to public network like testnet, open [Lora](https://lora.algokit.io/testnet){target=_blank} or [Pera Explorer](https://testnet.explorer.perawallet.app/){target=blank} and paste the transaction ID into the search bar.