#
tokens: 39169/50000 1/942 files (page 73/93)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 73 of 93. Use http://codebase.md/goplausible/algorand-mcp?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── llms-install.md
├── llms.txt
├── package.json
├── packages
│   ├── client
│   │   ├── .env.example
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── src
│   │   │   ├── env.ts
│   │   │   ├── index.ts
│   │   │   └── LocalWallet.ts
│   │   └── tsconfig.json
│   └── server
│       ├── .env.example
│       ├── API specs
│       │   ├── algod_api.json
│       │   ├── indexer_api.json
│       │   ├── mcp.json
│       │   ├── nfd_api.json
│       │   ├── ultrade_api.json
│       │   ├── vestige_api.json
│       │   └── vestige_free_api.json
│       ├── Dockerfile
│       ├── jest.config.js
│       ├── package.json
│       ├── README.md
│       ├── smithery.yaml
│       ├── src
│       │   ├── algorand-client.ts
│       │   ├── env.ts
│       │   ├── index.ts
│       │   ├── resources
│       │   │   ├── index.ts
│       │   │   ├── knowledge
│       │   │   │   ├── ARCs.txt
│       │   │   │   ├── developers-algokit-architecture-decisions.txt
│       │   │   │   ├── developers-algokit-cli.txt
│       │   │   │   ├── developers-algokit-utils-python.txt
│       │   │   │   ├── developers-algokit-utils-typescript.txt
│       │   │   │   ├── developers-clis.txt
│       │   │   │   ├── developers-details.txt
│       │   │   │   ├── developers-liquid-auth.txt
│       │   │   │   ├── developers-nodes.txt
│       │   │   │   ├── developers-puya.txt
│       │   │   │   ├── developers-python.txt
│       │   │   │   ├── developers-sdks-js.txt
│       │   │   │   ├── developers-sdks-python.txt
│       │   │   │   ├── developers-tealscript.txt
│       │   │   │   ├── developers.txt
│       │   │   │   ├── index.ts
│       │   │   │   ├── taxonomy
│       │   │   │   │   ├── algokit-cli:README.md
│       │   │   │   │   ├── algokit:cli:algokit.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2022-11-14_sandbox-approach.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2022-11-22_beaker-testing-strategy.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-01-11_beaker_productionisation_review.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-01-11_brew_install.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-01-12_smart-contract-deployment.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-06-06_frontend-templates.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2023-07-19_advanced_generate_command.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2024-01-13_native_binaries.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2024-01-23_init-wizard-v2.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2024-01-31_binary_distribution.md
│       │   │   │   │   ├── algokit:cli:architecture-decisions:2024-03-06_local_dev_ui_packaging.md
│       │   │   │   │   ├── algokit:cli:articles:output_stability.md
│       │   │   │   │   ├── algokit:cli:cli:index.md
│       │   │   │   │   ├── algokit:cli:features:compile.md
│       │   │   │   │   ├── algokit:cli:features:completions.md
│       │   │   │   │   ├── algokit:cli:features:config.md
│       │   │   │   │   ├── algokit:cli:features:dispenser.md
│       │   │   │   │   ├── algokit:cli:features:doctor.md
│       │   │   │   │   ├── algokit:cli:features:explore.md
│       │   │   │   │   ├── algokit:cli:features:generate.md
│       │   │   │   │   ├── algokit:cli:features:goal.md
│       │   │   │   │   ├── algokit:cli:features:init.md
│       │   │   │   │   ├── algokit:cli:features:localnet.md
│       │   │   │   │   ├── algokit:cli:features:project:bootstrap.md
│       │   │   │   │   ├── algokit:cli:features:project:deploy.md
│       │   │   │   │   ├── algokit:cli:features:project:link.md
│       │   │   │   │   ├── algokit:cli:features:project:list.md
│       │   │   │   │   ├── algokit:cli:features:project:run.md
│       │   │   │   │   ├── algokit:cli:features:project.md
│       │   │   │   │   ├── algokit:cli:features:tasks:analyze.md
│       │   │   │   │   ├── algokit:cli:features:tasks:ipfs.md
│       │   │   │   │   ├── algokit:cli:features:tasks:mint.md
│       │   │   │   │   ├── algokit:cli:features:tasks:nfd.md
│       │   │   │   │   ├── algokit:cli:features:tasks:opt.md
│       │   │   │   │   ├── algokit:cli:features:tasks:send.md
│       │   │   │   │   ├── algokit:cli:features:tasks:sign.md
│       │   │   │   │   ├── algokit:cli:features:tasks:transfer.md
│       │   │   │   │   ├── algokit:cli:features:tasks:vanity_address.md
│       │   │   │   │   ├── algokit:cli:features:tasks:wallet.md
│       │   │   │   │   ├── algokit:cli:features:tasks.md
│       │   │   │   │   ├── algokit:cli:tutorials:algokit-template.md
│       │   │   │   │   ├── algokit:cli:tutorials:intro.md
│       │   │   │   │   ├── algokit:cli:tutorials:smart-contracts.md
│       │   │   │   │   ├── algokit:docs:testnet_api.md
│       │   │   │   │   ├── algokit:lora:README.md
│       │   │   │   │   ├── algokit:README.md
│       │   │   │   │   ├── algokit:utils:python:markdown:apidocs:algokit_utils:algokit_utils.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:account.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:app-client.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:app-deploy.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:client.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:debugger.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:dispenser-client.md
│       │   │   │   │   ├── algokit:utils:python:markdown:capabilities:transfer.md
│       │   │   │   │   ├── algokit:utils:python:markdown:index.md
│       │   │   │   │   ├── algokit:utils:python:README.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:account.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:app-client.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:app-deploy.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:client.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:debugger.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:dispenser-client.md
│       │   │   │   │   ├── algokit:utils:python:source:capabilities:transfer.md
│       │   │   │   │   ├── algokit:utils:python:source:index.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:account.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:algorand-client.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:amount.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:app-client.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:app-deploy.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:app.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:asset.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:client.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:debugging.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:dispenser-client.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:event-emitter.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:indexer.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:testing.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:transaction-composer.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:transaction.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:transfer.md
│       │   │   │   │   ├── algokit:utils:typescript:capabilities:typed-app-clients.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:testing.TestLogger.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:testing.TransactionLogger.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_account_manager.AccountManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_account.MultisigAccount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_account.SigningAccount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_algorand_client.AlgorandClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_amount.AlgoAmount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_arc56.Arc56Method.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_client.AppClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_client.ApplicationClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_deployer.AppDeployer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_factory.AppFactory.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_app_manager.AppManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_asset_manager.AssetManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_async_event_emitter.AsyncEventEmitter.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_client_manager.ClientManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_composer.TransactionComposer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_config.UpdatableConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_dispenser_client.TestNetDispenserApiClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_kmd_account_manager.KmdAccountManager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:classes:types_logic_error.LogicError.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_app.OnSchemaBreak.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_app.OnUpdate.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_indexer.AccountStatus.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_indexer.ApplicationOnComplete.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_indexer.SignatureType.md
│       │   │   │   │   ├── algokit:utils:typescript:code:enums:types_lifecycle_events.EventType.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_account_manager.EnsureFundedResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_account.AccountConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_account.TransactionSignerAccount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_algorand_client_interface.AlgorandClientInterface.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Arc56Contract.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Event.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Method.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.ProgramSourceInfo.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageKey.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageMap.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StructField.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallABIArgs.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallCoreParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCallInterfaceParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCoreParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.AppSourceMaps.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.FundAppAccountParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppById.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppByIdBase.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_client.SourceMapExport.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppLookup.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppMetadata.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_factory.AppFactoryParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_manager.AppInformation.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxReference.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValueRequestParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValuesRequestParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSources.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.CallConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.DeclaredSchemaValueSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.Hint.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.ReservedSchemaValueSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.Schema.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.SchemaSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.StateSchemaSpec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app_spec.Struct.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppCallParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppCallTransactionResultOfType.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppCompilationResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppDeployMetadata.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppLookup.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppMetadata.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppReference.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppState.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.AppStorageSchema.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.BoxName.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.BoxReference.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.BoxValueRequestParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.BoxValuesRequestParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.CompiledTeal.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.CoreAppCallArgs.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.CreateAppParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.RawAppCallArgs.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.TealTemplateParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_app.UpdateAppParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset_manager.BulkAssetOptInOutResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset.AssetBulkOptInOutParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptInParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_asset.CreateAssetParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_client_manager.AlgoSdkClients.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppClient.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppFactory.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_composer.BuiltTransactions.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_config.Config.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_debugging.AVMTracesEventData.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourceDebugEventData.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourcesDebugEventData.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserFundResponse.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserLimitResponse.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.TestNetDispenserApiClientParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_indexer.LookupAssetHoldingsOptions.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_logic_error.LogicErrorDetails.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoClientConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_network_client.NetworkDetails.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.AlgoKitLogCaptureFixture.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixture.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixtureConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandTestAutomationContext.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.GetTestAccountParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_testing.LogSnapshotConfig.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.AtomicTransactionComposerToSend.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResults.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendAtomicTransactionComposerResults.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResult.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResults.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionGroupToSend.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionToSign.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoRekeyParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedReturnType.md
│       │   │   │   │   ├── algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:index.indexer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:index.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:testing.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_account_manager_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_account_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_account.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algo_http_client_with_retry.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_interface.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_creator.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_sender.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client_transfer_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_algorand_client.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_amount_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_amount.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_arc56.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_client_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_client.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_deployer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_factory_and_client_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_factory.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_app.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_asset_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_asset.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_async_event_emitter.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_client_manager_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_client_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_composer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_config.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_debugging.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_dispenser_client_spec.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_dispenser_client.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_expand.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_indexer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_kmd_account_manager.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_lifecycle_events.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_logging.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_logic_error.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_network_client.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_testing.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_transaction.md
│       │   │   │   │   ├── algokit:utils:typescript:code:modules:types_transfer.md
│       │   │   │   │   ├── algokit:utils:typescript:code:README.md
│       │   │   │   │   ├── algokit:utils:typescript:README.md
│       │   │   │   │   ├── algokit:utils:typescript:v7-migration.md
│       │   │   │   │   ├── algokit:utils:typescript:v8-migration.md
│       │   │   │   │   ├── ARCs:ARC-template.md
│       │   │   │   │   ├── ARCs:assets:arc-0012:README.md
│       │   │   │   │   ├── ARCs:assets:arc-0034:TemplateForm.md
│       │   │   │   │   ├── ARCs:assets:arc-0062:README.md
│       │   │   │   │   ├── ARCs:pages:nfts.md
│       │   │   │   │   ├── ARCs:pages:wallets.md
│       │   │   │   │   ├── ARCs:README.md
│       │   │   │   │   ├── ARCs:specs:arc-0000.md
│       │   │   │   │   ├── ARCs:specs:arc-0001.md
│       │   │   │   │   ├── ARCs:specs:arc-0002.md
│       │   │   │   │   ├── ARCs:specs:arc-0003.md
│       │   │   │   │   ├── ARCs:specs:arc-0004.md
│       │   │   │   │   ├── ARCs:specs:arc-0005.md
│       │   │   │   │   ├── ARCs:specs:arc-0006.md
│       │   │   │   │   ├── ARCs:specs:arc-0007.md
│       │   │   │   │   ├── ARCs:specs:arc-0008.md
│       │   │   │   │   ├── ARCs:specs:arc-0009.md
│       │   │   │   │   ├── ARCs:specs:arc-0010.md
│       │   │   │   │   ├── ARCs:specs:arc-0011.md
│       │   │   │   │   ├── ARCs:specs:arc-0012.md
│       │   │   │   │   ├── ARCs:specs:arc-0015.md
│       │   │   │   │   ├── ARCs:specs:arc-0016.md
│       │   │   │   │   ├── ARCs:specs:arc-0018.md
│       │   │   │   │   ├── ARCs:specs:arc-0019.md
│       │   │   │   │   ├── ARCs:specs:arc-0020.md
│       │   │   │   │   ├── ARCs:specs:arc-0021.md
│       │   │   │   │   ├── ARCs:specs:arc-0022.md
│       │   │   │   │   ├── ARCs:specs:arc-0023.md
│       │   │   │   │   ├── ARCs:specs:arc-0025.md
│       │   │   │   │   ├── ARCs:specs:arc-0026.md
│       │   │   │   │   ├── ARCs:specs:arc-0028.md
│       │   │   │   │   ├── ARCs:specs:arc-0032.md
│       │   │   │   │   ├── ARCs:specs:arc-0033.md
│       │   │   │   │   ├── ARCs:specs:arc-0034.md
│       │   │   │   │   ├── ARCs:specs:arc-0035.md
│       │   │   │   │   ├── ARCs:specs:arc-0036.md
│       │   │   │   │   ├── ARCs:specs:arc-0042.md
│       │   │   │   │   ├── ARCs:specs:arc-0047.md
│       │   │   │   │   ├── ARCs:specs:arc-0048.md
│       │   │   │   │   ├── ARCs:specs:arc-0049.md
│       │   │   │   │   ├── ARCs:specs:arc-0054.md
│       │   │   │   │   ├── ARCs:specs:arc-0055.md
│       │   │   │   │   ├── ARCs:specs:arc-0056.md
│       │   │   │   │   ├── ARCs:specs:arc-0059.md
│       │   │   │   │   ├── ARCs:specs:arc-0062.md
│       │   │   │   │   ├── ARCs:specs:arc-0065.md
│       │   │   │   │   ├── ARCs:specs:arc-0069.md
│       │   │   │   │   ├── ARCs:specs:arc-0072.md
│       │   │   │   │   ├── ARCs:specs:arc-0073.md
│       │   │   │   │   ├── ARCs:specs:arc-0074.md
│       │   │   │   │   ├── ARCs:specs:arc-0076.md
│       │   │   │   │   ├── ARCs:specs:arc-0078.md
│       │   │   │   │   ├── ARCs:specs:arc-0079.md
│       │   │   │   │   ├── ARCs:specs:arc-0200.md
│       │   │   │   │   ├── clis_index.md
│       │   │   │   │   ├── developer:docs:about.md
│       │   │   │   │   ├── developer:docs:clis:algokey:algokey.md
│       │   │   │   │   ├── developer:docs:clis:algokey:generate.md
│       │   │   │   │   ├── developer:docs:clis:algokey:import.md
│       │   │   │   │   ├── developer:docs:clis:algokey:multisig:append-auth-addr.md
│       │   │   │   │   ├── developer:docs:clis:algokey:multisig:multisig.md
│       │   │   │   │   ├── developer:docs:clis:algokey:part:info.md
│       │   │   │   │   ├── developer:docs:clis:algokey:part:part.md
│       │   │   │   │   ├── developer:docs:clis:algokey:part:reparent.md
│       │   │   │   │   ├── developer:docs:clis:algokey:sign.md
│       │   │   │   │   ├── developer:docs:clis:conduit:conduit.md
│       │   │   │   │   ├── developer:docs:clis:conduit:init.md
│       │   │   │   │   ├── developer:docs:clis:conduit:list:exporters.md
│       │   │   │   │   ├── developer:docs:clis:conduit:list:importers.md
│       │   │   │   │   ├── developer:docs:clis:conduit:list:list.md
│       │   │   │   │   ├── developer:docs:clis:conduit:list:processors.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:diagcfg.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:metric:disable.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:metric:enable.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:metric:metric.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:metric:status.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:disable.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:enable.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:endpoint.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:name.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:status.md
│       │   │   │   │   ├── developer:docs:clis:diagcfg:telemetry:telemetry.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:restart.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:start.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:status.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:stop.md
│       │   │   │   │   ├── developer:docs:clis:goal:node:wait.md
│       │   │   │   │   ├── developer:docs:clis:goal:protocols.md
│       │   │   │   │   ├── developer:docs:clis:goal:report.md
│       │   │   │   │   ├── developer:docs:clis:goal:version.md
│       │   │   │   │   ├── developer:docs:clis:goal:wallet:list.md
│       │   │   │   │   ├── developer:docs:clis:goal:wallet:new.md
│       │   │   │   │   ├── developer:docs:clis:goal:wallet:wallet.md
│       │   │   │   │   ├── developer:docs:clis:indexer:api-config.md
│       │   │   │   │   ├── developer:docs:clis:indexer:daemon.md
│       │   │   │   │   ├── developer:docs:clis:indexer:indexer.md
│       │   │   │   │   ├── developer:docs:clis:indexer:util:util.md
│       │   │   │   │   ├── developer:docs:clis:indexer:util:validator.md
│       │   │   │   │   ├── developer:docs:clis:kmd.md
│       │   │   │   │   ├── developer:docs:clis:tealdbg:debug.md
│       │   │   │   │   ├── developer:docs:clis:tealdbg:remote.md
│       │   │   │   │   ├── developer:docs:clis:tealdbg:tealdbg.md
│       │   │   │   │   ├── developer:docs:details:accounts:create.md
│       │   │   │   │   ├── developer:docs:details:accounts:index.md
│       │   │   │   │   ├── developer:docs:details:accounts:rekey.md
│       │   │   │   │   ├── developer:docs:details:algorand_consensus.md
│       │   │   │   │   ├── developer:docs:details:algorand-networks:betanet.md
│       │   │   │   │   ├── developer:docs:details:algorand-networks:index.md
│       │   │   │   │   ├── developer:docs:details:algorand-networks:mainnet.md
│       │   │   │   │   ├── developer:docs:details:algorand-networks:testnet.md
│       │   │   │   │   ├── developer:docs:details:asa.md
│       │   │   │   │   ├── developer:docs:details:atc.md
│       │   │   │   │   ├── developer:docs:details:atomic_transfers.md
│       │   │   │   │   ├── developer:docs:details:conduit.md
│       │   │   │   │   ├── developer:docs:details:crust.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:guidelines.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:jsonspec.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v1.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v10.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v2.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v3.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v4.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v5.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v6.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v7.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v8.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:opcodes:v9.md
│       │   │   │   │   ├── developer:docs:details:dapps:avm:teal:specification.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:ABI:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:create.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:innertx.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:state.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:apps:txs.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:debugging.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:frontend:apps.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:frontend:smartsigs.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:guidelines.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:smartsigs:index.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:smartsigs:modes.md
│       │   │   │   │   ├── developer:docs:details:dapps:smart-contracts:smartsigs:walkthrough.md
│       │   │   │   │   ├── developer:docs:details:dapps:writing-contracts:beaker.md
│       │   │   │   │   ├── developer:docs:details:dapps:writing-contracts:pyteal.md
│       │   │   │   │   ├── developer:docs:details:dapps:writing-contracts:python.md
│       │   │   │   │   ├── developer:docs:details:encoding.md
│       │   │   │   │   ├── developer:docs:details:ethereum_to_algorand.md
│       │   │   │   │   ├── developer:docs:details:index.md
│       │   │   │   │   ├── developer:docs:details:indexer.md
│       │   │   │   │   ├── developer:docs:details:parameter_tables.md
│       │   │   │   │   ├── developer:docs:details:stateproofs:index.md
│       │   │   │   │   ├── developer:docs:details:stateproofs:light_client.md
│       │   │   │   │   ├── developer:docs:details:technical_faq.md
│       │   │   │   │   ├── developer:docs:details:transactions:index.md
│       │   │   │   │   ├── developer:docs:details:transactions:offline_transactions.md
│       │   │   │   │   ├── developer:docs:details:transactions:payment_prompts.md
│       │   │   │   │   ├── developer:docs:details:transactions:signatures.md
│       │   │   │   │   ├── developer:docs:details:transactions:transactions.md
│       │   │   │   │   ├── developer:docs:details:useful_resources.md
│       │   │   │   │   ├── developer:docs:get-started:algokit.md
│       │   │   │   │   ├── developer:docs:get-started:basics:what_is_blockchain.md
│       │   │   │   │   ├── developer:docs:get-started:basics:whats_a_dapp.md
│       │   │   │   │   ├── developer:docs:get-started:basics:where_to_start.md
│       │   │   │   │   ├── developer:docs:get-started:basics:why_algorand.md
│       │   │   │   │   ├── developer:docs:get-started:tokenization:ft.md
│       │   │   │   │   ├── developer:docs:get-started:tokenization:nft.md
│       │   │   │   │   ├── developer:docs:index.md
│       │   │   │   │   ├── developer:docs:rest-apis:algod.md
│       │   │   │   │   ├── developer:docs:rest-apis:indexer.md
│       │   │   │   │   ├── developer:docs:rest-apis:kmd.md
│       │   │   │   │   ├── developer:docs:rest-apis:restendpoints.md
│       │   │   │   │   ├── developer:docs:run-a-node:operations:catchup.md
│       │   │   │   │   ├── developer:docs:run-a-node:operations:switch_networks.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:generate_keys.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:index.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:offline.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:online.md
│       │   │   │   │   ├── developer:docs:run-a-node:participate:renew.md
│       │   │   │   │   ├── developer:docs:run-a-node:reference:artifacts.md
│       │   │   │   │   ├── developer:docs:run-a-node:reference:config.md
│       │   │   │   │   ├── developer:docs:run-a-node:reference:relay.md
│       │   │   │   │   ├── developer:docs:run-a-node:reference:telemetry-config.md
│       │   │   │   │   ├── developer:docs:run-a-node:setup:indexer.md
│       │   │   │   │   ├── developer:docs:run-a-node:setup:install.md
│       │   │   │   │   ├── developer:docs:run-a-node:setup:node-troubleshooting.md
│       │   │   │   │   ├── developer:docs:run-a-node:setup:types.md
│       │   │   │   │   ├── developer:docs:sdks:go:index.md
│       │   │   │   │   ├── developer:docs:sdks:index.md
│       │   │   │   │   ├── developer:docs:sdks:java:index.md
│       │   │   │   │   ├── developer:docs:sdks:javascript:index.md
│       │   │   │   │   ├── developer:docs:sdks:python:index.md
│       │   │   │   │   ├── developer:python:code:example:accounts.md
│       │   │   │   │   ├── developer:python:code:example:arc4_types.md
│       │   │   │   │   ├── developer:python:code:example:assets.md
│       │   │   │   │   ├── developer:python:code:example:box_storage.md
│       │   │   │   │   ├── developer:python:code:example:control_flow.md
│       │   │   │   │   ├── developer:python:code:example:crypto:merkle_tree.md
│       │   │   │   │   ├── developer:python:code:example:defi:amm.md
│       │   │   │   │   ├── developer:python:code:example:defi:auction.md
│       │   │   │   │   ├── developer:python:code:example:defi:htlc_logicsig.md
│       │   │   │   │   ├── developer:python:code:example:defi:marketplace.md
│       │   │   │   │   ├── developer:python:code:example:events:arc28_events.md
│       │   │   │   │   ├── developer:python:code:example:global_storage.md
│       │   │   │   │   ├── developer:python:code:example:governance:simple_voting.md
│       │   │   │   │   ├── developer:python:code:example:hello_world.md
│       │   │   │   │   ├── developer:python:code:example:inner_transactions.md
│       │   │   │   │   ├── developer:python:code:example:local_storage.md
│       │   │   │   │   ├── developer:python:code:example:nft:proof_of_attendance.md
│       │   │   │   │   ├── developer:python:code:example:privacy:zk_whitelist.md
│       │   │   │   │   ├── developer:python:code:example:scratch_storage.md
│       │   │   │   │   ├── developer:python:code:example:self_payment.md
│       │   │   │   │   ├── developer:python:code:example:struct_in_box.md
│       │   │   │   │   ├── developer:python:code:example:subsidize_app_call.md
│       │   │   │   │   ├── developer:python:code:example:transactions.md
│       │   │   │   │   ├── developer:python:code:example:utility:calculator.md
│       │   │   │   │   ├── devportal-code-examples:projects:python-contract-examples:README.md
│       │   │   │   │   ├── devportal-code-examples:README.md
│       │   │   │   │   ├── docs:.walletconnect:index.md
│       │   │   │   │   ├── docs:.walletconnect:walletconnect-schema.md
│       │   │   │   │   ├── docs:README.md
│       │   │   │   │   ├── docs:scripts:example_tracker:example_list.md
│       │   │   │   │   ├── docs:scripts:README.md
│       │   │   │   │   ├── index.md
│       │   │   │   │   ├── liquid_auth_index.md
│       │   │   │   │   ├── liquid-auth:ARCHITECTURE.md
│       │   │   │   │   ├── liquid-auth:decisions:1-Service-Authentication.md
│       │   │   │   │   ├── liquid-auth:decisions:2-Bidirectional-Communication.md
│       │   │   │   │   ├── liquid-auth:decisions:3-Peer-to-Peer-Signaling.md
│       │   │   │   │   ├── liquid-auth:decisions:4-Fido-Extension.md
│       │   │   │   │   ├── liquid-auth:decisions:README.md
│       │   │   │   │   ├── liquid-auth:docs:architecture.md
│       │   │   │   │   ├── liquid-auth:docs:clients:android:provider-service:authenticate.md
│       │   │   │   │   ├── liquid-auth:docs:clients:android:provider-service:register.md
│       │   │   │   │   ├── liquid-auth:docs:clients:browser:authentication.md
│       │   │   │   │   ├── liquid-auth:docs:clients:browser:example.md
│       │   │   │   │   ├── liquid-auth:docs:introduction.md
│       │   │   │   │   ├── liquid-auth:docs:README.md
│       │   │   │   │   ├── liquid-auth:docs:server:environment-variables.md
│       │   │   │   │   ├── liquid-auth:docs:server:integrations.md
│       │   │   │   │   ├── liquid-auth:docs:server:introduction.md
│       │   │   │   │   ├── liquid-auth:docs:server:running-locally.md
│       │   │   │   │   ├── liquid-auth:README.md
│       │   │   │   │   ├── liquid-auth:SEQUENCE.md
│       │   │   │   │   ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md
│       │   │   │   │   ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md
│       │   │   │   │   ├── liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md
│       │   │   │   │   ├── liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md
│       │   │   │   │   ├── liquid-auth:sites:express-dapp:README.md
│       │   │   │   │   ├── liquid-auth:VISION.md
│       │   │   │   │   ├── puya_index.md
│       │   │   │   │   ├── puya:docs:algopy_testing:index.md
│       │   │   │   │   ├── puya:docs:api-algopy.arc4.md
│       │   │   │   │   ├── puya:docs:api-algopy.gtxn.md
│       │   │   │   │   ├── puya:docs:api-algopy.itxn.md
│       │   │   │   │   ├── puya:docs:api-algopy.md
│       │   │   │   │   ├── puya:docs:api-algopy.op.md
│       │   │   │   │   ├── puya:docs:api.md
│       │   │   │   │   ├── puya:docs:compiler.md
│       │   │   │   │   ├── puya:docs:index.md
│       │   │   │   │   ├── puya:docs:language-guide.md
│       │   │   │   │   ├── puya:docs:lg-arc28.md
│       │   │   │   │   ├── puya:docs:lg-arc4.md
│       │   │   │   │   ├── puya:docs:lg-builtins.md
│       │   │   │   │   ├── puya:docs:lg-calling-apps.md
│       │   │   │   │   ├── puya:docs:lg-compile.md
│       │   │   │   │   ├── puya:docs:lg-control.md
│       │   │   │   │   ├── puya:docs:lg-errors.md
│       │   │   │   │   ├── puya:docs:lg-logs.md
│       │   │   │   │   ├── puya:docs:lg-modules.md
│       │   │   │   │   ├── puya:docs:lg-opcode-budget.md
│       │   │   │   │   ├── puya:docs:lg-ops.md
│       │   │   │   │   ├── puya:docs:lg-storage.md
│       │   │   │   │   ├── puya:docs:lg-structure.md
│       │   │   │   │   ├── puya:docs:lg-transactions.md
│       │   │   │   │   ├── puya:docs:lg-types.md
│       │   │   │   │   ├── puya:docs:lg-unsupported-python-features.md
│       │   │   │   │   ├── puya:docs:principles.md
│       │   │   │   │   ├── puya:examples:auction:README.md
│       │   │   │   │   ├── puya:python:testing:docs:algopy.md
│       │   │   │   │   ├── puya:python:testing:docs:api.md
│       │   │   │   │   ├── puya:python:testing:docs:coverage.md
│       │   │   │   │   ├── puya:python:testing:docs:examples.md
│       │   │   │   │   ├── puya:python:testing:docs:faq.md
│       │   │   │   │   ├── puya:python:testing:docs:index.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:arc4-types.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:avm-types.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:concepts.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:contract-testing.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:index.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:opcodes.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:signature-testing.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:state-management.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:subroutines.md
│       │   │   │   │   ├── puya:python:testing:docs:testing-guide:transactions.md
│       │   │   │   │   ├── puya:python:testing:examples:README.md
│       │   │   │   │   ├── puya:python:testing:README.md
│       │   │   │   │   ├── puya:README.md
│       │   │   │   │   ├── puya:src:puya:ARCHITECTURE.md
│       │   │   │   │   ├── puya:src:puyapy:_typeshed:README.md
│       │   │   │   │   ├── puya:src:puyapy:_vendor:mypy:typeshed:stdlib:_typeshed:README.md
│       │   │   │   │   ├── puya:src:puyapy:awst_build:README.md
│       │   │   │   │   ├── puya:stubs:README.md
│       │   │   │   │   ├── puya:tests:test_expected_output:README.md
│       │   │   │   │   ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-bytes-and-strings.md
│       │   │   │   │   ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-integer-types.md
│       │   │   │   │   ├── puya:typescript:docs:README.md
│       │   │   │   │   ├── puya:typescript:packages:algo-ts:readme.md
│       │   │   │   │   ├── puya:typescript:README.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIAddressType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIArrayDynamicType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIArrayStaticType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIBoolType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIByteType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIContract.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIInterface.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIMethod.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIStringType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABITupleType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIUfixedType.md
│       │   │   │   │   ├── SDKs:javascript:classes:ABIUintType.md
│       │   │   │   │   ├── SDKs:javascript:classes:Algodv2.md
│       │   │   │   │   ├── SDKs:javascript:classes:AtomicTransactionComposer.md
│       │   │   │   │   ├── SDKs:javascript:classes:DryrunResult.md
│       │   │   │   │   ├── SDKs:javascript:classes:Indexer.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Account.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AccountParticipation.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AccountResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AccountsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AccountStateDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Application.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationLocalState.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationLocalStatesResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationLogData.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationLogsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationParams.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Asset.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetBalancesResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetHolding.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetHoldingsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetParams.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.AssetsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Block.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BlockRewards.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BlockUpgradeState.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BlockUpgradeVote.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Box.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BoxDescriptor.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.BoxesResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ErrorResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.EvalDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.EvalDeltaKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.HashFactory.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.HealthCheck.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.IndexerStateProofMessage.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.MerkleArrayProof.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.MiniAssetHolding.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.ParticipationUpdates.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofFields.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofParticipant.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofReveal.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofSignature.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofSigSlot.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofTracking.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateProofVerifier.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.StateSchema.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TealKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TealValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.Transaction.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionApplication.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionAssetConfig.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionAssetFreeze.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionAssetTransfer.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionKeyreg.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionPayment.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionSignature.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionSignatureLogicsig.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisig.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisigSubsignature.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:indexerModels.TransactionStateProof.md
│       │   │   │   │   ├── SDKs:javascript:classes:Kmd.md
│       │   │   │   │   ├── SDKs:javascript:classes:LogicSig.md
│       │   │   │   │   ├── SDKs:javascript:classes:LogicSigAccount.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Account.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountApplicationResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountAssetHolding.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountAssetResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountAssetsInformationResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountParticipation.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AccountStateDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AppCallLogs.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Application.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationInitialStates.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationKVStorage.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationLocalState.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationParams.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationStateOperation.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Asset.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AssetHolding.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AssetHoldingReference.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AssetParams.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AvmKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.AvmValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BlockHashResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BlockLogsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BlockResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BlockTxidsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Box.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BoxDescriptor.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BoxesResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BoxReference.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.BuildVersion.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.CompileResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DisassembleResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunRequest.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunSource.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunState.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.DryrunTxnResult.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ErrorResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.EvalDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.EvalDeltaKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.GetBlockTimeStampOffsetResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.GetSyncRoundResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.KvDelta.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.LedgerStateDeltaForTransactionGroup.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.LightBlockHeaderProof.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.NodeStatusResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.PendingTransactionsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.PostTransactionsResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.ScratchChange.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateInitialStates.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateRequest.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateRequestTransactionGroup.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateTraceConfig.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateTransactionGroupResult.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulationEvalOverrides.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulationOpcodeTraceUnit.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SimulationTransactionExecTrace.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.StateProof.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.StateProofMessage.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.SupplyResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TealKeyValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TealValue.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TransactionParametersResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.TransactionProofResponse.md
│       │   │   │   │   ├── SDKs:javascript:classes:modelsv2.Version.md
│       │   │   │   │   ├── SDKs:javascript:classes:SourceMap.md
│       │   │   │   │   ├── SDKs:javascript:classes:Transaction.md
│       │   │   │   │   ├── SDKs:javascript:enums:ABIReferenceType.md
│       │   │   │   │   ├── SDKs:javascript:enums:ABITransactionType.md
│       │   │   │   │   ├── SDKs:javascript:enums:AtomicTransactionComposerStatus.md
│       │   │   │   │   ├── SDKs:javascript:enums:IntDecoding.md
│       │   │   │   │   ├── SDKs:javascript:enums:OnApplicationComplete.md
│       │   │   │   │   ├── SDKs:javascript:enums:TransactionType.md
│       │   │   │   │   ├── SDKs:javascript:examples:README.md
│       │   │   │   │   ├── SDKs:javascript:FAQ.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIContractNetworkInfo.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIContractNetworks.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIContractParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIInterfaceParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIMethodArgParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIMethodParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIMethodReturnParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:ABIResult.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:Account.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:Address.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:AlgodTokenHeader.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:BaseHTTPClient.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:BaseHTTPClientError.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:BaseHTTPClientResponse.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:BoxReference.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:CustomTokenHeader.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedAssetParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedBoxReference.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedGlobalStateSchema.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedLocalStateSchema.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedLogicSig.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedLogicSigAccount.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedMultisig.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedSignedTransaction.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedSubsig.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:EncodedTransaction.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:IndexerTokenHeader.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:KMDTokenHeader.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:MultisigMetadata.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:SignedTransaction.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:SuggestedParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:TransactionParams.md
│       │   │   │   │   ├── SDKs:javascript:interfaces:TransactionWithSigner.md
│       │   │   │   │   ├── SDKs:javascript:modules:indexerModels.md
│       │   │   │   │   ├── SDKs:javascript:modules:modelsv2.md
│       │   │   │   │   ├── SDKs:javascript:modules.md
│       │   │   │   │   ├── SDKs:javascript:README.md
│       │   │   │   │   ├── SDKs:python:algosdk:v2client:harness:README.md
│       │   │   │   │   ├── SDKs:python:examples:README.md
│       │   │   │   │   ├── SDKs:python:README.md
│       │   │   │   │   ├── tealscript:examples_amm_README.md
│       │   │   │   │   ├── tealscript:examples_auction_README.md
│       │   │   │   │   ├── tealscript:examples_big_box_README.md
│       │   │   │   │   ├── tealscript:examples_itxns_README.md
│       │   │   │   │   ├── tealscript:examples_lsig_with_app_README.md
│       │   │   │   │   ├── tealscript:examples_reti_README.md
│       │   │   │   │   ├── tealscript:FEATURES.md
│       │   │   │   │   ├── tealscript:guides_atomic_txn.md
│       │   │   │   │   ├── tealscript:guides_features.md
│       │   │   │   │   ├── tealscript:guides_getting_started.md
│       │   │   │   │   ├── tealscript:guides_inner_transactions.md
│       │   │   │   │   ├── tealscript:guides_lifecycle.md
│       │   │   │   │   ├── tealscript:guides_math.md
│       │   │   │   │   ├── tealscript:guides_methods.md
│       │   │   │   │   ├── tealscript:guides_multiple_contracts.md
│       │   │   │   │   ├── tealscript:guides_pyteal.md
│       │   │   │   │   ├── tealscript:guides_storage.md
│       │   │   │   │   ├── tealscript:guides_Supported Types_arrays.md
│       │   │   │   │   ├── tealscript:guides_Supported Types_numbers.md
│       │   │   │   │   ├── TEALScript:README.md
│       │   │   │   │   ├── tealscript:tests_test_package_README.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0001-intro.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0002-init.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0003-contract.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0004-artifacts.md
│       │   │   │   │   ├── tealscript:tutorials_Hello World_0005-hello.md
│       │   │   │   │   └── tealscript:tutorials_Hello World_0006-test.md
│       │   │   │   └── taxonomy-categories
│       │   │   │       ├── algokit-utils.json
│       │   │   │       ├── algokit.json
│       │   │   │       ├── arcs.json
│       │   │   │       ├── clis.json
│       │   │   │       ├── details.json
│       │   │   │       ├── developers.json
│       │   │   │       ├── liquid-auth.json
│       │   │   │       ├── nodes.json
│       │   │   │       ├── puya.json
│       │   │   │       ├── python.json
│       │   │   │       ├── sdks.json
│       │   │   │       └── tealscript.json
│       │   │   └── wallet
│       │   │       └── index.ts
│       │   ├── tools
│       │   │   ├── accountManager.ts
│       │   │   ├── algodManager.ts
│       │   │   ├── apiManager
│       │   │   │   ├── algod
│       │   │   │   │   ├── account.ts
│       │   │   │   │   ├── application.ts
│       │   │   │   │   ├── asset.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── transaction.ts
│       │   │   │   ├── example
│       │   │   │   │   ├── get-balance.ts
│       │   │   │   │   └── index.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── indexer
│       │   │   │   │   ├── account.ts
│       │   │   │   │   ├── application.ts
│       │   │   │   │   ├── asset.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── transaction.ts
│       │   │   │   ├── nfd
│       │   │   │   │   └── index.ts
│       │   │   │   ├── tinyman
│       │   │   │   │   ├── analytics.ts
│       │   │   │   │   ├── bootstrap.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── liquidity.ts
│       │   │   │   │   ├── opt_in.ts
│       │   │   │   │   ├── pool.ts
│       │   │   │   │   ├── remove_liquidity.ts
│       │   │   │   │   └── swap.ts
│       │   │   │   ├── ultrade
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── market.ts
│       │   │   │   │   ├── system.ts
│       │   │   │   │   └── wallet.ts
│       │   │   │   └── vestige
│       │   │   │       ├── assets.ts
│       │   │   │       ├── balances.ts
│       │   │   │       ├── index.ts
│       │   │   │       ├── networks.ts
│       │   │   │       ├── notes.ts
│       │   │   │       ├── pools.ts
│       │   │   │       ├── protocols.ts
│       │   │   │       ├── swaps.ts
│       │   │   │       └── vaults.ts
│       │   │   ├── arc26Manager.ts
│       │   │   ├── index.ts
│       │   │   ├── knowledgeManager.ts
│       │   │   ├── transactionManager
│       │   │   │   ├── accountTransactions.ts
│       │   │   │   ├── appTransactions
│       │   │   │   │   ├── callTxn.ts
│       │   │   │   │   ├── clearTxn.ts
│       │   │   │   │   ├── closeOutTxn.ts
│       │   │   │   │   ├── createTxn.ts
│       │   │   │   │   ├── deleteTxn.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── optInTxn.ts
│       │   │   │   │   ├── test
│       │   │   │   │   │   ├── counter_approval.teal
│       │   │   │   │   │   ├── counter_clear.teal
│       │   │   │   │   │   ├── storage_test_approval_v2.teal
│       │   │   │   │   │   ├── storage_test_approval.teal
│       │   │   │   │   │   └── storage_test_clear.teal
│       │   │   │   │   ├── types.ts
│       │   │   │   │   └── updateTxn.ts
│       │   │   │   ├── assetTransactions.ts
│       │   │   │   ├── generalTransaction.ts
│       │   │   │   └── index.ts
│       │   │   └── utilityManager.ts
│       │   ├── types.ts
│       │   └── utils
│       │       └── responseProcessor.ts
│       ├── tests
│       │   ├── resources
│       │   │   ├── algod
│       │   │   │   ├── account.test.ts
│       │   │   │   ├── application.test.ts
│       │   │   │   ├── asset.test.ts
│       │   │   │   └── transaction.test.ts
│       │   │   └── indexer
│       │   │       ├── account.test.ts
│       │   │       ├── application.test.ts
│       │   │       ├── asset.test.ts
│       │   │       └── transaction.test.ts
│       │   └── tools
│       │       ├── accountManager.test.ts
│       │       ├── algodManager.test.ts
│       │       ├── apiManager
│       │       │   └── example
│       │       │       └── get-balance.test.ts
│       │       ├── transactionManager
│       │       │   ├── accountTransactionManager.test.ts
│       │       │   ├── appTransactionManager.test.ts
│       │       │   ├── assetTransactionManager.test.ts
│       │       │   ├── generalTransactionManager.test.ts
│       │       │   └── transactionManager.test.ts
│       │       └── utilityManager.test.ts
│       └── tsconfig.json
├── README.md
├── rename_files.sh
└── tsconfig.json
```

# Files

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:dapps:avm:teal:specification.md:
--------------------------------------------------------------------------------

```markdown
  1 | title: The Algorand Virtual Machine (AVM) and TEAL.
  2 | 
  3 | The AVM is a bytecode based stack interpreter that executes programs
  4 | associated with Algorand transactions. TEAL is an assembly language
  5 | syntax for specifying a program that is ultimately converted to AVM
  6 | bytecode. These programs can be used to check the parameters of the
  7 | transaction and approve the transaction as if by a signature. This use
  8 | is called a _Smart Signature_. Starting with v2, these programs may
  9 | also execute as _Smart Contracts_, which are often called
 10 | _Applications_. Contract executions are invoked with explicit
 11 | application call transactions.
 12 | 
 13 | Programs have read-only access to the transaction they are attached
 14 | to, the other transactions in their atomic transaction group, and a
 15 | few global values. In addition, _Smart Contracts_ have access to
 16 | limited state that is global to the application, per-account local
 17 | state for each account that has opted-in to the application, and
 18 | additional per-application arbitrary state in named _boxes_. For both types of
 19 | program, approval is signaled by finishing with the stack containing a
 20 | single non-zero uint64 value, though `return` can be used to signal an
 21 | early approval which approves based only upon the top stack value
 22 | being a non-zero uint64 value.
 23 | 
 24 | ## The Stack
 25 | 
 26 | The stack starts empty and can contain values of either uint64 or byte-arrays
 27 | (byte-arrays may not exceed
 28 | 4096 bytes in length). Most operations act on the stack, popping
 29 | arguments from it and pushing results to it. Some operations have
 30 | _immediate_ arguments that are encoded directly into the instruction,
 31 | rather than coming from the stack.
 32 | 
 33 | The maximum stack depth is 1000. If the stack depth is exceeded or if
 34 | a byte-array element exceeds 4096 bytes, the program fails. If an
 35 | opcode is documented to access a position in the stack that does not
 36 | exist, the operation fails. Most often, this is an attempt to access
 37 | an element below the stack -- the simplest example is an operation
 38 | like `concat` which expects two arguments on the stack. If the stack
 39 | has fewer than two elements, the operation fails. Some operations, like
 40 | `frame_dig` and `proto` could fail because of an attempt to access
 41 | above the current stack.
 42 | 
 43 | ## Stack Types
 44 | 
 45 | While every element of the stack is restricted to the types `uint64` and `bytes`, 
 46 | the values of these types may be known to be bounded.  The more common bounded types are 
 47 | named to provide more semantic information in the documentation. They're also used during
 48 | assembly time to do type checking and to provide more informative error messages.
 49 | 
 50 | 
 51 | #### Definitions
 52 | 
 53 | | Name | Bound | AVM Type |
 54 | | ---- | ---- | -------- |
 55 | | []byte | len(x) <= 4096 | []byte |
 56 | | address | len(x) == 32 | []byte |
 57 | | any |  | any |
 58 | | bigint | len(x) <= 64 | []byte |
 59 | | bool | x <= 1 | uint64 |
 60 | | boxName | 1 <= len(x) <= 64 | []byte |
 61 | | method | len(x) == 4 | []byte |
 62 | | none |  | none |
 63 | | stateKey | len(x) <= 64 | []byte |
 64 | | uint64 | x <= 18446744073709551615 | uint64 |
 65 | 
 66 | 
 67 | 
 68 | ## Scratch Space
 69 | 
 70 | In addition to the stack there are 256 positions of scratch
 71 | space. Like stack values, scratch locations may be uint64s or
 72 | byte-arrays. Scratch locations are initialized as uint64 zero. Scratch
 73 | space is accessed by the `load(s)` and `store(s)` opcodes which move
 74 | data from or to scratch space, respectively. Application calls may
 75 | inspect the final scratch space of earlier application calls in the
 76 | same group using `gload(s)(s)`
 77 | 
 78 | ## Versions
 79 | 
 80 | In order to maintain existing semantics for previously written
 81 | programs, AVM code is versioned.  When new opcodes are introduced, or
 82 | behavior is changed, a new version is introduced.  Programs carrying
 83 | old versions are executed with their original semantics. In the AVM
 84 | bytecode, the version is an incrementing integer, currently 6, and
 85 | denoted vX throughout this document.
 86 | 
 87 | ## Execution Modes
 88 | 
 89 | Starting from v2, the AVM can run programs in two modes:
 90 | 1. LogicSig or _stateless_ mode, used to execute Smart Signatures
 91 | 2. Application or _stateful_ mode, used to execute Smart Contracts
 92 | 
 93 | Differences between modes include:
 94 | 1. Max program length (consensus parameters LogicSigMaxSize, MaxAppTotalProgramLen & MaxExtraAppProgramPages)
 95 | 2. Max program cost (consensus parameters LogicSigMaxCost, MaxAppProgramCost)
 96 | 3. Opcode availability. Refer to [opcodes document](opcodes/v10.md) for details.
 97 | 4. Some global values, such as LatestTimestamp, are only available in stateful mode.
 98 | 5. Only Applications can observe transaction effects, such as Logs or IDs allocated to ASAs or new Applications.
 99 | 
100 | ## Execution Environment for Smart Signatures
101 | 
102 | Smart Signatures execute as part of testing a proposed transaction to
103 | see if it is valid and authorized to be committed into a block. If an
104 | authorized program executes and finishes with a single non-zero uint64
105 | value on the stack then that program has validated the transaction it
106 | is attached to.
107 | 
108 | The program has access to data from the transaction it is attached to
109 | (`txn` op), any transactions in a transaction group it is part of
110 | (`gtxn` op), and a few global values like consensus parameters
111 | (`global` op). Some "Args" may be attached to a transaction being
112 | validated by a program. Args are an array of byte strings. A common
113 | pattern would be to have the key to unlock some contract as an Arg. Be
114 | aware that Smart Signature Args are recorded on the blockchain and
115 | publicly visible when the transaction is submitted to the network,
116 | even before the transaction has been included in a block. These Args
117 | are _not_ part of the transaction ID nor of the TxGroup hash. They
118 | also cannot be read from other programs in the group of transactions.
119 | 
120 | A program can either authorize some delegated action on a normal
121 | signature-based or multisignature-based account or be wholly in charge
122 | of a contract account.
123 | 
124 | * If the account has signed the program (by providing a valid ed25519
125 |   signature or valid multisignature for the authorizer address on the
126 |   string "Program" concatenated with the program bytecode) then: if the
127 |   program returns true the transaction is authorized as if the account
128 |   had signed it. This allows an account to hand out a signed program
129 |   so that other users can carry out delegated actions which are
130 |   approved by the program. Note that Smart Signature Args are _not_
131 |   signed.
132 | 
133 | * If the SHA512_256 hash of the program (prefixed by "Program") is
134 |   equal to authorizer address of the transaction sender then this is a
135 |   contract account wholly controlled by the program. No other
136 |   signature is necessary or possible. The only way to execute a
137 |   transaction against the contract account is for the program to
138 |   approve it.
139 | 
140 | The bytecode plus the length of all Args must add up to no more than
141 | 1000 bytes (consensus parameter LogicSigMaxSize). Each opcode has an
142 | associated cost, usually 1, but a few slow operations have higher
143 | costs. Prior to v4, the program's cost was estimated as the static sum
144 | of all the opcode costs in the program (whether they were actually
145 | executed or not). Beginning with v4, the program's cost is tracked
146 | dynamically, while being evaluated. If the program exceeds its budget,
147 | it fails.
148 | 
149 | The total program cost of all Smart Signatures in a group must not
150 | exceed 20,000 (consensus parameter LogicSigMaxCost) times the number
151 | of transactions in the group.
152 | 
153 | 
154 | ## Execution Environment for Smart Contracts (Applications)
155 | 
156 | Smart Contracts are executed in ApplicationCall transactions. Like
157 | Smart Signatures, contracts indicate success by leaving a single
158 | non-zero integer on the stack.  A failed Smart Contract call to an
159 | ApprovalProgram is not a valid transaction, thus not written to the
160 | blockchain. An ApplicationCall with OnComplete set to ClearState
161 | invokes the ClearStateProgram, rather than the usual
162 | ApprovalProgram. If the ClearStateProgram fails, application state
163 | changes are rolled back, but the transaction still succeeds, and the
164 | Sender's local state for the called application is removed.
165 | 
166 | Smart Contracts have access to everything a Smart Signature may access
167 | (see previous section), as well as the ability to examine blockchain
168 | state such as balances and contract state (their own state and the
169 | state of other contracts).  They also have access to some global
170 | values that are not visible to Smart Signatures because the values
171 | change over time.  Since smart contracts access changing state, nodes
172 | must rerun their code to determine if the ApplicationCall transactions
173 | in their pool would still succeed each time a block is added to the
174 | blockchain.
175 | 
176 | Smart contracts have limits on their execution cost (700, consensus
177 | parameter MaxAppProgramCost). Before v4, this was a static limit on
178 | the cost of all the instructions in the program. Starting in v4, the cost
179 | is tracked dynamically during execution and must not exceed
180 | MaxAppProgramCost. Beginning with v5, programs costs are pooled and
181 | tracked dynamically across app executions in a group.  If `n`
182 | application invocations appear in a group, then the total execution
183 | cost of all such calls must not exceed `n`*MaxAppProgramCost. In v6, inner
184 | application calls become possible, and each such call increases the
185 | pooled budget by MaxAppProgramCost at the time the inner group is submitted
186 | with `itxn_submit`.
187 | 
188 | Executions of the ClearStateProgram are more stringent, in order to
189 | ensure that applications may be closed out, but that applications also
190 | are assured a chance to clean up their internal state. At the
191 | beginning of the execution of a ClearStateProgram, the pooled budget
192 | available must be MaxAppProgramCost or higher. If it is not, the
193 | containing transaction group fails without clearing the app's
194 | state. During the execution of the ClearStateProgram, no more than
195 | MaxAppProgramCost may be drawn. If further execution is attempted, the
196 | ClearStateProgram fails, and the app's state _is cleared_.
197 | 
198 | 
199 | ### Resource availability
200 | 
201 | Smart contracts have limits on the amount of blockchain state they
202 | may examine.  Opcodes may only access blockchain resources such as
203 | Accounts, Assets, Boxes, and contract state if the given resource is
204 | _available_.
205 | 
206 |  * A resource in the "foreign array" fields of the ApplicationCall
207 |    transaction (`txn.Accounts`, `txn.ForeignAssets`, and
208 |    `txn.ForeignApplications`) is _available_.
209 | 
210 |  * The `txn.Sender`, `global CurrentApplicationID`, and `global
211 |    CurrentApplicationAddress` are _available_.
212 | 
213 |  * Prior to v4, all assets were considered _available_ to the
214 |    `asset_holding_get` opcode, and all applications were _available_
215 |    to the `app_local_get_ex` opcode.
216 | 
217 |  * Since v6, any asset or contract that was created earlier in the
218 |    same transaction group (whether by a top-level or inner
219 |    transaction) is _available_. In addition, any account that is the
220 |    associated account of a contract that was created earlier in the
221 |    group is _available_.
222 | 
223 |  * Since v7, the account associated with any contract present in the
224 |    `txn.ForeignApplications` field is _available_.
225 |    
226 |  * Since v9, there is group-level resource sharing. Any resource that
227 |    is available in _some_ top-level transaction in a transaction group
228 |    is available in _all_ v9 or later application calls in the group,
229 |    whether those application calls are top-level or inner.
230 |    
231 |  * When considering whether an asset holding or application local
232 |    state is available by group-level resource sharing, the holding or
233 |    local state must be available in a top-level transaction without
234 |    considering group sharing. For example, if account A is made
235 |    available in one transaction, and asset X is made available in
236 |    another, group resource sharing does _not_ make A's X holding
237 |    available.
238 |      
239 |  * Top-level transactions that are not application calls also make
240 |    resources available to group-level resource sharing. The following
241 |    resources are made available by other transaction types.
242 | 
243 |      1. `pay` - `txn.Sender`, `txn.Receiver`, and
244 |         `txn.CloseRemainderTo` (if set).
245 | 
246 |      1. `keyreg` - `txn.Sender`
247 | 
248 |      1. `acfg` - `txn.Sender`, `txn.ConfigAsset`, and the
249 |         `txn.ConfigAsset` holding of `txn.Sender`.
250 | 
251 |      1. `axfer` - `txn.Sender`, `txn.AssetReceiver`, `txn.AssetSender`
252 |         (if set), `txnAssetCloseTo` (if set), `txn.XferAsset`, and the
253 |         `txn.XferAsset` holding of each of those accounts.
254 | 
255 |      1. `afrz` - `txn.Sender`, `txn.FreezeAccount`, `txn.FreezeAsset`,
256 |         and the `txn.FreezeAsset` holding of `txn.FreezeAccount`. The
257 |         `txn.FreezeAsset` holding of `txn.Sender` is _not_ made
258 |         available.
259 | 
260 | 
261 |  * A Box is _available_ to an Approval Program if _any_ transaction in
262 |    the same group contains a box reference (`txn.Boxes`) that denotes
263 |    the box. A box reference contains an index `i`, and name `n`. The
264 |    index refers to the `ith` application in the transaction's
265 |    ForeignApplications array, with the usual convention that 0
266 |    indicates the application ID of the app called by that
267 |    transaction. No box is ever _available_ to a ClearStateProgram.
268 | 
269 | Regardless of _availability_, any attempt to access an Asset or
270 | Application with an ID less than 256 from within a Contract will fail
271 | immediately. This avoids any ambiguity in opcodes that interpret their
272 | integer arguments as resource IDs _or_ indexes into the
273 | `txn.ForeignAssets` or `txn.ForeignApplications` arrays.
274 | 
275 | It is recommended that contract authors avoid supplying array indexes
276 | to these opcodes, and always use explicit resource IDs. By using
277 | explicit IDs, contracts will better take advantage of group resource
278 | sharing.  The array indexing interpretation may be deprecated in a
279 | future version.
280 | 
281 | ## Constants
282 | 
283 | Constants can be pushed onto the stack in two different ways:
284 | 
285 | 1. Constants can be pushed directly with `pushint` or
286 |    `pushbytes`. This method is more efficient for constants that are
287 |    only used once.
288 | 
289 | 2. Constants can be loaded into storage separate from the stack and
290 |    scratch space, using two opcodes `intcblock` and
291 |    `bytecblock`. Then, constants from this storage can be
292 |    pushed onto the stack by referring to the type and index using
293 |    `intc`, `intc_[0123]`, `bytec`, and `bytec_[0123]`. This method is
294 |    more efficient for constants that are used multiple times.
295 | 
296 | The assembler will hide most of this, allowing simple use of `int 1234`
297 | and `byte 0xcafed00d`. Constants introduced via `int` and `byte` will
298 | be assembled into appropriate uses of `pushint|pushbytes` and
299 | `{int|byte}c, {int|byte}c_[0123]` to minimize program size.
300 | 
301 | 
302 | The opcodes `intcblock` and `bytecblock` use [proto-buf style variable length unsigned int](https://developers.google.com/protocol-buffers/docs/encoding#varint),
303 | reproduced [here](#varuint). The `intcblock` opcode is followed by a
304 | varuint specifying the number of integer constants and then that
305 | number of varuints. The `bytecblock` opcode is followed by a varuint
306 | specifying the number of byte constants, and then that number of pairs
307 | of (varuint, bytes) length prefixed byte strings.
308 | 
309 | ### Named Integer Constants
310 | 
311 | #### OnComplete
312 | 
313 | An application transaction must indicate the action to be taken following the execution of its approvalProgram or clearStateProgram. The constants below describe the available actions.
314 | 
315 | | Value | Name | Description |
316 | | - | ---- | -------- |
317 | | 0 | NoOp | Only execute the `ApprovalProgram` associated with this application ID, with no additional effects. |
318 | | 1 | OptIn | Before executing the `ApprovalProgram`, allocate local state for this application into the sender's account data. |
319 | | 2 | CloseOut | After executing the `ApprovalProgram`, clear any local state for this application out of the sender's account data. |
320 | | 3 | ClearState | Don't execute the `ApprovalProgram`, and instead execute the `ClearStateProgram` (which may not reject this transaction). Additionally, clear any local state for this application out of the sender's account data as in `CloseOutOC`. |
321 | | 4 | UpdateApplication | After executing the `ApprovalProgram`, replace the `ApprovalProgram` and `ClearStateProgram` associated with this application ID with the programs specified in this transaction. |
322 | | 5 | DeleteApplication | After executing the `ApprovalProgram`, delete the application parameters from the account data of the application's creator. |
323 | 
324 | #### TypeEnum constants
325 | 
326 | | Value | Name | Description |
327 | | - | --- | ------ |
328 | | 0 | unknown | Unknown type. Invalid transaction |
329 | | 1 | pay | Payment |
330 | | 2 | keyreg | KeyRegistration |
331 | | 3 | acfg | AssetConfig |
332 | | 4 | axfer | AssetTransfer |
333 | | 5 | afrz | AssetFreeze |
334 | | 6 | appl | ApplicationCall |
335 | 
336 | 
337 | ## Operations
338 | 
339 | Most operations work with only one type of argument, uint64 or bytes, and fail if the wrong type value is on the stack.
340 | 
341 | Many instructions accept values to designate Accounts, Assets, or Applications. Beginning with v4, these values may be given as an _offset_ in the corresponding Txn fields (Txn.Accounts, Txn.ForeignAssets, Txn.ForeignApps) _or_ as the value itself (a byte-array address for Accounts, or a uint64 ID). The values, however, must still be present in the Txn fields. Before v4, most opcodes required the use of an offset, except for reading account local values of assets or applications, which accepted the IDs directly and did not require the ID to be present in the corresponding _Foreign_ array. (Note that beginning with v4, those IDs _are_ required to be present in their corresponding _Foreign_ array.) See individual opcodes for details. In the case of account offsets or application offsets, 0 is specially defined to Txn.Sender or the ID of the current application, respectively.
342 | 
343 | This summary is supplemented by more detail in the [opcodes document](opcodes/v10.md).
344 | 
345 | Some operations immediately fail the program.
346 | A transaction checked by a program that fails is not valid.
347 | An account governed by a buggy program might not have a way to get assets back out of it. Code carefully.
348 | 
349 | In the documentation for each opcode, the stack arguments that are
350 | popped are referred to alphabetically, beginning with the deepest
351 | argument as `A`.  These arguments are shown in the opcode description,
352 | and if the opcode must be of a specific type, it is noted there.  All
353 | opcodes fail if a specified type is incorrect.
354 | 
355 | If an opcode pushes more than one result, the values are named for
356 | ease of exposition and clarity concerning their stack positions.  When
357 | an opcode manipulates the stack in such a way that a value changes
358 | position but is otherwise unchanged, the name of the output on the
359 | return stack matches the name of the input value.
360 | 
361 | ### Arithmetic and Logic Operations
362 | 
363 | | Opcode | Description |
364 | | - | -- |
365 | | `+` | A plus B. Fail on overflow. |
366 | | `-` | A minus B. Fail if B > A. |
367 | | `/` | A divided by B (truncated division). Fail if B == 0. |
368 | | `*` | A times B. Fail on overflow. |
369 | | `<` | A less than B => {0 or 1} |
370 | | `>` | A greater than B => {0 or 1} |
371 | | `<=` | A less than or equal to B => {0 or 1} |
372 | | `>=` | A greater than or equal to B => {0 or 1} |
373 | | `&&` | A is not zero and B is not zero => {0 or 1} |
374 | | `\|\|` | A is not zero or B is not zero => {0 or 1} |
375 | | `shl` | A times 2^B, modulo 2^64 |
376 | | `shr` | A divided by 2^B |
377 | | `sqrt` | The largest integer I such that I^2 <= A |
378 | | `bitlen` | The highest set bit in A. If A is a byte-array, it is interpreted as a big-endian unsigned integer. bitlen of 0 is 0, bitlen of 8 is 4 |
379 | | `exp` | A raised to the Bth power. Fail if A == B == 0 and on overflow |
380 | | `==` | A is equal to B => {0 or 1} |
381 | | `!=` | A is not equal to B => {0 or 1} |
382 | | `!` | A == 0 yields 1; else 0 |
383 | | `itob` | converts uint64 A to big-endian byte array, always of length 8 |
384 | | `btoi` | converts big-endian byte array A to uint64. Fails if len(A) > 8. Padded by leading 0s if len(A) < 8. |
385 | | `%` | A modulo B. Fail if B == 0. |
386 | | `\|` | A bitwise-or B |
387 | | `&` | A bitwise-and B |
388 | | `^` | A bitwise-xor B |
389 | | `~` | bitwise invert value A |
390 | | `mulw` | A times B as a 128-bit result in two uint64s. X is the high 64 bits, Y is the low |
391 | | `addw` | A plus B as a 128-bit result. X is the carry-bit, Y is the low-order 64 bits. |
392 | | `divw` | A,B / C. Fail if C == 0 or if result overflows. |
393 | | `divmodw` | W,X = (A,B / C,D); Y,Z = (A,B modulo C,D) |
394 | | `expw` | A raised to the Bth power as a 128-bit result in two uint64s. X is the high 64 bits, Y is the low. Fail if A == B == 0 or if the results exceeds 2^128-1 |
395 | 
396 | ### Byte Array Manipulation
397 | 
398 | | Opcode | Description |
399 | | - | -- |
400 | | `getbit` | Bth bit of (byte-array or integer) A. If B is greater than or equal to the bit length of the value (8*byte length), the program fails |
401 | | `setbit` | Copy of (byte-array or integer) A, with the Bth bit set to (0 or 1) C. If B is greater than or equal to the bit length of the value (8*byte length), the program fails |
402 | | `getbyte` | Bth byte of A, as an integer. If B is greater than or equal to the array length, the program fails |
403 | | `setbyte` | Copy of A with the Bth byte set to small integer (between 0..255) C. If B is greater than or equal to the array length, the program fails |
404 | | `concat` | join A and B |
405 | | `len` | yields length of byte value A |
406 | | `substring s e` | A range of bytes from A starting at S up to but not including E. If E < S, or either is larger than the array length, the program fails |
407 | | `substring3` | A range of bytes from A starting at B up to but not including C. If C < B, or either is larger than the array length, the program fails |
408 | | `extract s l` | A range of bytes from A starting at S up to but not including S+L. If L is 0, then extract to the end of the string. If S or S+L is larger than the array length, the program fails |
409 | | `extract3` | A range of bytes from A starting at B up to but not including B+C. If B+C is larger than the array length, the program fails<br />`extract3` can be called using `extract` with no immediates. |
410 | | `extract_uint16` | A uint16 formed from a range of big-endian bytes from A starting at B up to but not including B+2. If B+2 is larger than the array length, the program fails |
411 | | `extract_uint32` | A uint32 formed from a range of big-endian bytes from A starting at B up to but not including B+4. If B+4 is larger than the array length, the program fails |
412 | | `extract_uint64` | A uint64 formed from a range of big-endian bytes from A starting at B up to but not including B+8. If B+8 is larger than the array length, the program fails |
413 | | `replace2 s` | Copy of A with the bytes starting at S replaced by the bytes of B. Fails if S+len(B) exceeds len(A)<br />`replace2` can be called using `replace` with 1 immediate. |
414 | | `replace3` | Copy of A with the bytes starting at B replaced by the bytes of C. Fails if B+len(C) exceeds len(A)<br />`replace3` can be called using `replace` with no immediates. |
415 | | `base64_decode e` | decode A which was base64-encoded using _encoding_ E. Fail if A is not base64 encoded with encoding E |
416 | | `json_ref r` | key B's value, of type R, from a [valid](jsonspec.md) utf-8 encoded json object A |
417 | 
418 | The following opcodes take byte-array values that are interpreted as
419 | big-endian unsigned integers.  For mathematical operators, the
420 | returned values are the shortest byte-array that can represent the
421 | returned value.  For example, the zero value is the empty
422 | byte-array. For comparison operators, the returned value is a uint64.
423 | 
424 | Input lengths are limited to a maximum length of 64 bytes,
425 | representing a 512 bit unsigned integer. Output lengths are not
426 | explicitly restricted, though only `b*` and `b+` can produce a larger
427 | output than their inputs, so there is an implicit length limit of 128
428 | bytes on outputs.
429 | 
430 | | Opcode | Description |
431 | | - | -- |
432 | | `b+` | A plus B. A and B are interpreted as big-endian unsigned integers |
433 | | `b-` | A minus B. A and B are interpreted as big-endian unsigned integers. Fail on underflow. |
434 | | `b/` | A divided by B (truncated division). A and B are interpreted as big-endian unsigned integers. Fail if B is zero. |
435 | | `b*` | A times B. A and B are interpreted as big-endian unsigned integers. |
436 | | `b<` | 1 if A is less than B, else 0. A and B are interpreted as big-endian unsigned integers |
437 | | `b>` | 1 if A is greater than B, else 0. A and B are interpreted as big-endian unsigned integers |
438 | | `b<=` | 1 if A is less than or equal to B, else 0. A and B are interpreted as big-endian unsigned integers |
439 | | `b>=` | 1 if A is greater than or equal to B, else 0. A and B are interpreted as big-endian unsigned integers |
440 | | `b==` | 1 if A is equal to B, else 0. A and B are interpreted as big-endian unsigned integers |
441 | | `b!=` | 0 if A is equal to B, else 1. A and B are interpreted as big-endian unsigned integers |
442 | | `b%` | A modulo B. A and B are interpreted as big-endian unsigned integers. Fail if B is zero. |
443 | | `bsqrt` | The largest integer I such that I^2 <= A. A and I are interpreted as big-endian unsigned integers |
444 | 
445 | These opcodes operate on the bits of byte-array values.  The shorter
446 | input array is interpreted as though left padded with zeros until it is the
447 | same length as the other input.  The returned values are the same
448 | length as the longer input.  Therefore, unlike array arithmetic,
449 | these results may contain leading zero bytes.
450 | 
451 | | Opcode | Description |
452 | | - | -- |
453 | | `b\|` | A bitwise-or B. A and B are zero-left extended to the greater of their lengths |
454 | | `b&` | A bitwise-and B. A and B are zero-left extended to the greater of their lengths |
455 | | `b^` | A bitwise-xor B. A and B are zero-left extended to the greater of their lengths |
456 | | `b~` | A with all bits inverted |
457 | 
458 | ### Cryptographic Operations
459 | 
460 | | Opcode | Description |
461 | | - | -- |
462 | | `sha256` | SHA256 hash of value A, yields [32]byte |
463 | | `keccak256` | Keccak256 hash of value A, yields [32]byte |
464 | | `sha512_256` | SHA512_256 hash of value A, yields [32]byte |
465 | | `sha3_256` | SHA3_256 hash of value A, yields [32]byte |
466 | | `ed25519verify` | for (data A, signature B, pubkey C) verify the signature of ("ProgData" \|\| program_hash \|\| data) against the pubkey => {0 or 1} |
467 | | `ed25519verify_bare` | for (data A, signature B, pubkey C) verify the signature of the data against the pubkey => {0 or 1} |
468 | | `ecdsa_verify v` | for (data A, signature B, C and pubkey D, E) verify the signature of the data against the pubkey => {0 or 1} |
469 | | `ecdsa_pk_recover v` | for (data A, recovery id B, signature C, D) recover a public key |
470 | | `ecdsa_pk_decompress v` | decompress pubkey A into components X, Y |
471 | | `vrf_verify s` | Verify the proof B of message A against pubkey C. Returns vrf output and verification flag. |
472 | | `ec_add g` | for curve points A and B, return the curve point A + B |
473 | | `ec_scalar_mul g` | for curve point A and scalar B, return the curve point BA, the point A multiplied by the scalar B. |
474 | | `ec_pairing_check g` | 1 if the product of the pairing of each point in A with its respective point in B is equal to the identity element of the target group Gt, else 0 |
475 | | `ec_multi_scalar_mul g` | for curve points A and scalars B, return curve point B0A0 + B1A1 + B2A2 + ... + BnAn |
476 | | `ec_subgroup_check g` | 1 if A is in the main prime-order subgroup of G (including the point at infinity) else 0. Program fails if A is not in G at all. |
477 | | `ec_map_to g` | maps field element A to group G |
478 | 
479 | ### Loading Values
480 | 
481 | Opcodes for getting data onto the stack.
482 | 
483 | Some of these have immediate data in the byte or bytes after the opcode.
484 | 
485 | | Opcode | Description |
486 | | - | -- |
487 | | `intcblock uint ...` | prepare block of uint64 constants for use by intc |
488 | | `intc i` | Ith constant from intcblock |
489 | | `intc_0` | constant 0 from intcblock |
490 | | `intc_1` | constant 1 from intcblock |
491 | | `intc_2` | constant 2 from intcblock |
492 | | `intc_3` | constant 3 from intcblock |
493 | | `pushint uint` | immediate UINT |
494 | | `pushints uint ...` | push sequence of immediate uints to stack in the order they appear (first uint being deepest) |
495 | | `bytecblock bytes ...` | prepare block of byte-array constants for use by bytec |
496 | | `bytec i` | Ith constant from bytecblock |
497 | | `bytec_0` | constant 0 from bytecblock |
498 | | `bytec_1` | constant 1 from bytecblock |
499 | | `bytec_2` | constant 2 from bytecblock |
500 | | `bytec_3` | constant 3 from bytecblock |
501 | | `pushbytes bytes` | immediate BYTES |
502 | | `pushbytess bytes ...` | push sequences of immediate byte arrays to stack (first byte array being deepest) |
503 | | `bzero` | zero filled byte-array of length A |
504 | | `arg n` | Nth LogicSig argument |
505 | | `arg_0` | LogicSig argument 0 |
506 | | `arg_1` | LogicSig argument 1 |
507 | | `arg_2` | LogicSig argument 2 |
508 | | `arg_3` | LogicSig argument 3 |
509 | | `args` | Ath LogicSig argument |
510 | | `txn f` | field F of current transaction |
511 | | `gtxn t f` | field F of the Tth transaction in the current group |
512 | | `txna f i` | Ith value of the array field F of the current transaction<br />`txna` can be called using `txn` with 2 immediates. |
513 | | `txnas f` | Ath value of the array field F of the current transaction |
514 | | `gtxna t f i` | Ith value of the array field F from the Tth transaction in the current group<br />`gtxna` can be called using `gtxn` with 3 immediates. |
515 | | `gtxnas t f` | Ath value of the array field F from the Tth transaction in the current group |
516 | | `gtxns f` | field F of the Ath transaction in the current group |
517 | | `gtxnsa f i` | Ith value of the array field F from the Ath transaction in the current group<br />`gtxnsa` can be called using `gtxns` with 2 immediates. |
518 | | `gtxnsas f` | Bth value of the array field F from the Ath transaction in the current group |
519 | | `global f` | global field F |
520 | | `load i` | Ith scratch space value. All scratch spaces are 0 at program start. |
521 | | `loads` | Ath scratch space value.  All scratch spaces are 0 at program start. |
522 | | `store i` | store A to the Ith scratch space |
523 | | `stores` | store B to the Ath scratch space |
524 | | `gload t i` | Ith scratch space value of the Tth transaction in the current group |
525 | | `gloads i` | Ith scratch space value of the Ath transaction in the current group |
526 | | `gloadss` | Bth scratch space value of the Ath transaction in the current group |
527 | | `gaid t` | ID of the asset or application created in the Tth transaction of the current group |
528 | | `gaids` | ID of the asset or application created in the Ath transaction of the current group |
529 | 
530 | #### Transaction Fields
531 | ##### Scalar Fields
532 | | Index | Name | Type | In | Notes |
533 | | - | ------ | -- | - | --------- |
534 | | 0 | Sender | address |      | 32 byte address |
535 | | 1 | Fee | uint64 |      | microalgos |
536 | | 2 | FirstValid | uint64 |      | round number |
537 | | 3 | FirstValidTime | uint64 | v7  | UNIX timestamp of block before txn.FirstValid. Fails if negative |
538 | | 4 | LastValid | uint64 |      | round number |
539 | | 5 | Note | []byte |      | Any data up to 1024 bytes |
540 | | 6 | Lease | [32]byte |      | 32 byte lease value |
541 | | 7 | Receiver | address |      | 32 byte address |
542 | | 8 | Amount | uint64 |      | microalgos |
543 | | 9 | CloseRemainderTo | address |      | 32 byte address |
544 | | 10 | VotePK | [32]byte |      | 32 byte address |
545 | | 11 | SelectionPK | [32]byte |      | 32 byte address |
546 | | 12 | VoteFirst | uint64 |      | The first round that the participation key is valid. |
547 | | 13 | VoteLast | uint64 |      | The last round that the participation key is valid. |
548 | | 14 | VoteKeyDilution | uint64 |      | Dilution for the 2-level participation key |
549 | | 15 | Type | []byte |      | Transaction type as bytes |
550 | | 16 | TypeEnum | uint64 |      | Transaction type as integer |
551 | | 17 | XferAsset | uint64 |      | Asset ID |
552 | | 18 | AssetAmount | uint64 |      | value in Asset's units |
553 | | 19 | AssetSender | address |      | 32 byte address. Source of assets if Sender is the Asset's Clawback address. |
554 | | 20 | AssetReceiver | address |      | 32 byte address |
555 | | 21 | AssetCloseTo | address |      | 32 byte address |
556 | | 22 | GroupIndex | uint64 |      | Position of this transaction within an atomic transaction group. A stand-alone transaction is implicitly element 0 in a group of 1 |
557 | | 23 | TxID | [32]byte |      | The computed ID for this transaction. 32 bytes. |
558 | | 24 | ApplicationID | uint64 | v2  | ApplicationID from ApplicationCall transaction |
559 | | 25 | OnCompletion | uint64 | v2  | ApplicationCall transaction on completion action |
560 | | 27 | NumAppArgs | uint64 | v2  | Number of ApplicationArgs |
561 | | 29 | NumAccounts | uint64 | v2  | Number of Accounts |
562 | | 30 | ApprovalProgram | []byte | v2  | Approval program |
563 | | 31 | ClearStateProgram | []byte | v2  | Clear state program |
564 | | 32 | RekeyTo | address | v2  | 32 byte Sender's new AuthAddr |
565 | | 33 | ConfigAsset | uint64 | v2  | Asset ID in asset config transaction |
566 | | 34 | ConfigAssetTotal | uint64 | v2  | Total number of units of this asset created |
567 | | 35 | ConfigAssetDecimals | uint64 | v2  | Number of digits to display after the decimal place when displaying the asset |
568 | | 36 | ConfigAssetDefaultFrozen | bool | v2  | Whether the asset's slots are frozen by default or not, 0 or 1 |
569 | | 37 | ConfigAssetUnitName | []byte | v2  | Unit name of the asset |
570 | | 38 | ConfigAssetName | []byte | v2  | The asset name |
571 | | 39 | ConfigAssetURL | []byte | v2  | URL |
572 | | 40 | ConfigAssetMetadataHash | [32]byte | v2  | 32 byte commitment to unspecified asset metadata |
573 | | 41 | ConfigAssetManager | address | v2  | 32 byte address |
574 | | 42 | ConfigAssetReserve | address | v2  | 32 byte address |
575 | | 43 | ConfigAssetFreeze | address | v2  | 32 byte address |
576 | | 44 | ConfigAssetClawback | address | v2  | 32 byte address |
577 | | 45 | FreezeAsset | uint64 | v2  | Asset ID being frozen or un-frozen |
578 | | 46 | FreezeAssetAccount | address | v2  | 32 byte address of the account whose asset slot is being frozen or un-frozen |
579 | | 47 | FreezeAssetFrozen | bool | v2  | The new frozen value, 0 or 1 |
580 | | 49 | NumAssets | uint64 | v3  | Number of Assets |
581 | | 51 | NumApplications | uint64 | v3  | Number of Applications |
582 | | 52 | GlobalNumUint | uint64 | v3  | Number of global state integers in ApplicationCall |
583 | | 53 | GlobalNumByteSlice | uint64 | v3  | Number of global state byteslices in ApplicationCall |
584 | | 54 | LocalNumUint | uint64 | v3  | Number of local state integers in ApplicationCall |
585 | | 55 | LocalNumByteSlice | uint64 | v3  | Number of local state byteslices in ApplicationCall |
586 | | 56 | ExtraProgramPages | uint64 | v4  | Number of additional pages for each of the application's approval and clear state programs. An ExtraProgramPages of 1 means 2048 more total bytes, or 1024 for each program. |
587 | | 57 | Nonparticipation | bool | v5  | Marks an account nonparticipating for rewards |
588 | | 59 | NumLogs | uint64 | v5  | Number of Logs (only with `itxn` in v5). Application mode only |
589 | | 60 | CreatedAssetID | uint64 | v5  | Asset ID allocated by the creation of an ASA (only with `itxn` in v5). Application mode only |
590 | | 61 | CreatedApplicationID | uint64 | v5  | ApplicationID allocated by the creation of an application (only with `itxn` in v5). Application mode only |
591 | | 62 | LastLog | []byte | v6  | The last message emitted. Empty bytes if none were emitted. Application mode only |
592 | | 63 | StateProofPK | []byte | v6  | 64 byte state proof public key |
593 | | 65 | NumApprovalProgramPages | uint64 | v7  | Number of Approval Program pages |
594 | | 67 | NumClearStateProgramPages | uint64 | v7  | Number of ClearState Program pages |
595 | 
596 | ##### Array Fields
597 | | Index | Name | Type | In | Notes |
598 | | - | ------ | -- | - | --------- |
599 | | 26 | ApplicationArgs | []byte | v2  | Arguments passed to the application in the ApplicationCall transaction |
600 | | 28 | Accounts | address | v2  | Accounts listed in the ApplicationCall transaction |
601 | | 48 | Assets | uint64 | v3  | Foreign Assets listed in the ApplicationCall transaction |
602 | | 50 | Applications | uint64 | v3  | Foreign Apps listed in the ApplicationCall transaction |
603 | | 58 | Logs | []byte | v5  | Log messages emitted by an application call (only with `itxn` in v5). Application mode only |
604 | | 64 | ApprovalProgramPages | []byte | v7  | Approval Program as an array of pages |
605 | | 66 | ClearStateProgramPages | []byte | v7  | ClearState Program as an array of pages |
606 | 
607 | 
608 | Additional details in the [opcodes document](opcodes/v10.md#txn) on the `txn` op.
609 | 
610 | **Global Fields**
611 | 
612 | Global fields are fields that are common to all the transactions in the group. In particular it includes consensus parameters.
613 | 
614 | | Index | Name | Type | In | Notes |
615 | | - | ------ | -- | - | --------- |
616 | | 0 | MinTxnFee | uint64 |      | microalgos |
617 | | 1 | MinBalance | uint64 |      | microalgos |
618 | | 2 | MaxTxnLife | uint64 |      | rounds |
619 | | 3 | ZeroAddress | address |      | 32 byte address of all zero bytes |
620 | | 4 | GroupSize | uint64 |      | Number of transactions in this atomic transaction group. At least 1 |
621 | | 5 | LogicSigVersion | uint64 | v2  | Maximum supported version |
622 | | 6 | Round | uint64 | v2  | Current round number. Application mode only. |
623 | | 7 | LatestTimestamp | uint64 | v2  | Last confirmed block UNIX timestamp. Fails if negative. Application mode only. |
624 | | 8 | CurrentApplicationID | uint64 | v2  | ID of current application executing. Application mode only. |
625 | | 9 | CreatorAddress | address | v3  | Address of the creator of the current application. Application mode only. |
626 | | 10 | CurrentApplicationAddress | address | v5  | Address that the current application controls. Application mode only. |
627 | | 11 | GroupID | [32]byte | v5  | ID of the transaction group. 32 zero bytes if the transaction is not part of a group. |
628 | | 12 | OpcodeBudget | uint64 | v6  | The remaining cost that can be spent by opcodes in this program. |
629 | | 13 | CallerApplicationID | uint64 | v6  | The application ID of the application that called this application. 0 if this application is at the top-level. Application mode only. |
630 | | 14 | CallerApplicationAddress | address | v6  | The application address of the application that called this application. ZeroAddress if this application is at the top-level. Application mode only. |
631 | | 15 | AssetCreateMinBalance | uint64 | v10  | The additional minimum balance required to create (and opt-in to) an asset. |
632 | | 16 | AssetOptInMinBalance | uint64 | v10  | The additional minimum balance required to opt-in to an asset. |
633 | | 17 | GenesisHash | [32]byte | v10  | The Genesis Hash for the network. |
634 | 
635 | 
636 | **Asset Fields**
637 | 
638 | Asset fields include `AssetHolding` and `AssetParam` fields that are used in the `asset_holding_get` and `asset_params_get` opcodes.
639 | 
640 | | Index | Name | Type | Notes |
641 | | - | ------ | -- | --------- |
642 | | 0 | AssetBalance | uint64 | Amount of the asset unit held by this account |
643 | | 1 | AssetFrozen | bool | Is the asset frozen or not |
644 | 
645 | 
646 | | Index | Name | Type | In | Notes |
647 | | - | ------ | -- | - | --------- |
648 | | 0 | AssetTotal | uint64 |      | Total number of units of this asset |
649 | | 1 | AssetDecimals | uint64 |      | See AssetParams.Decimals |
650 | | 2 | AssetDefaultFrozen | bool |      | Frozen by default or not |
651 | | 3 | AssetUnitName | []byte |      | Asset unit name |
652 | | 4 | AssetName | []byte |      | Asset name |
653 | | 5 | AssetURL | []byte |      | URL with additional info about the asset |
654 | | 6 | AssetMetadataHash | [32]byte |      | Arbitrary commitment |
655 | | 7 | AssetManager | address |      | Manager address |
656 | | 8 | AssetReserve | address |      | Reserve address |
657 | | 9 | AssetFreeze | address |      | Freeze address |
658 | | 10 | AssetClawback | address |      | Clawback address |
659 | | 11 | AssetCreator | address | v5  | Creator address |
660 | 
661 | 
662 | **App Fields**
663 | 
664 | App fields used in the `app_params_get` opcode.
665 | 
666 | | Index | Name | Type | Notes |
667 | | - | ------ | -- | --------- |
668 | | 0 | AppApprovalProgram | []byte | Bytecode of Approval Program |
669 | | 1 | AppClearStateProgram | []byte | Bytecode of Clear State Program |
670 | | 2 | AppGlobalNumUint | uint64 | Number of uint64 values allowed in Global State |
671 | | 3 | AppGlobalNumByteSlice | uint64 | Number of byte array values allowed in Global State |
672 | | 4 | AppLocalNumUint | uint64 | Number of uint64 values allowed in Local State |
673 | | 5 | AppLocalNumByteSlice | uint64 | Number of byte array values allowed in Local State |
674 | | 6 | AppExtraProgramPages | uint64 | Number of Extra Program Pages of code space |
675 | | 7 | AppCreator | address | Creator address |
676 | | 8 | AppAddress | address | Address for which this application has authority |
677 | 
678 | 
679 | **Account Fields**
680 | 
681 | Account fields used in the `acct_params_get` opcode.
682 | 
683 | | Index | Name | Type | In | Notes |
684 | | - | ------ | -- | - | --------- |
685 | | 0 | AcctBalance | uint64 |      | Account balance in microalgos |
686 | | 1 | AcctMinBalance | uint64 |      | Minimum required balance for account, in microalgos |
687 | | 2 | AcctAuthAddr | address |      | Address the account is rekeyed to. |
688 | | 3 | AcctTotalNumUint | uint64 | v8  | The total number of uint64 values allocated by this account in Global and Local States. |
689 | | 4 | AcctTotalNumByteSlice | uint64 | v8  | The total number of byte array values allocated by this account in Global and Local States. |
690 | | 5 | AcctTotalExtraAppPages | uint64 | v8  | The number of extra app code pages used by this account. |
691 | | 6 | AcctTotalAppsCreated | uint64 | v8  | The number of existing apps created by this account. |
692 | | 7 | AcctTotalAppsOptedIn | uint64 | v8  | The number of apps this account is opted into. |
693 | | 8 | AcctTotalAssetsCreated | uint64 | v8  | The number of existing ASAs created by this account. |
694 | | 9 | AcctTotalAssets | uint64 | v8  | The numbers of ASAs held by this account (including ASAs this account created). |
695 | | 10 | AcctTotalBoxes | uint64 | v8  | The number of existing boxes created by this account's app. |
696 | | 11 | AcctTotalBoxBytes | uint64 | v8  | The total number of bytes used by this account's app's box keys and values. |
697 | 
698 | 
699 | ### Flow Control
700 | 
701 | | Opcode | Description |
702 | | - | -- |
703 | | `err` | Fail immediately. |
704 | | `bnz target` | branch to TARGET if value A is not zero |
705 | | `bz target` | branch to TARGET if value A is zero |
706 | | `b target` | branch unconditionally to TARGET |
707 | | `return` | use A as success value; end |
708 | | `pop` | discard A |
709 | | `popn n` | remove N values from the top of the stack |
710 | | `dup` | duplicate A |
711 | | `dup2` | duplicate A and B |
712 | | `dupn n` | duplicate A, N times |
713 | | `dig n` | Nth value from the top of the stack. dig 0 is equivalent to dup |
714 | | `bury n` | replace the Nth value from the top of the stack with A. bury 0 fails. |
715 | | `cover n` | remove top of stack, and place it deeper in the stack such that N elements are above it. Fails if stack depth <= N. |
716 | | `uncover n` | remove the value at depth N in the stack and shift above items down so the Nth deep value is on top of the stack. Fails if stack depth <= N. |
717 | | `frame_dig i` | Nth (signed) value from the frame pointer. |
718 | | `frame_bury i` | replace the Nth (signed) value from the frame pointer in the stack with A |
719 | | `swap` | swaps A and B on stack |
720 | | `select` | selects one of two values based on top-of-stack: B if C != 0, else A |
721 | | `assert` | immediately fail unless A is a non-zero number |
722 | | `callsub target` | branch unconditionally to TARGET, saving the next instruction on the call stack |
723 | | `proto a r` | Prepare top call frame for a retsub that will assume A args and R return values. |
724 | | `retsub` | pop the top instruction from the call stack and branch to it |
725 | | `switch target ...` | branch to the Ath label. Continue at following instruction if index A exceeds the number of labels. |
726 | | `match target ...` | given match cases from A[1] to A[N], branch to the Ith label where A[I] = B. Continue to the following instruction if no matches are found. |
727 | 
728 | ### State Access
729 | 
730 | | Opcode | Description |
731 | | - | -- |
732 | | `balance` | balance for account A, in microalgos. The balance is observed after the effects of previous transactions in the group, and after the fee for the current transaction is deducted. Changes caused by inner transactions are observable immediately following `itxn_submit` |
733 | | `min_balance` | minimum required balance for account A, in microalgos. Required balance is affected by ASA, App, and Box usage. When creating or opting into an app, the minimum balance grows before the app code runs, therefore the increase is visible there. When deleting or closing out, the minimum balance decreases after the app executes. Changes caused by inner transactions or box usage are observable immediately following the opcode effecting the change. |
734 | | `app_opted_in` | 1 if account A is opted in to application B, else 0 |
735 | | `app_local_get` | local state of the key B in the current application in account A |
736 | | `app_local_get_ex` | X is the local state of application B, key C in account A. Y is 1 if key existed, else 0 |
737 | | `app_global_get` | global state of the key A in the current application |
738 | | `app_global_get_ex` | X is the global state of application A, key B. Y is 1 if key existed, else 0 |
739 | | `app_local_put` | write C to key B in account A's local state of the current application |
740 | | `app_global_put` | write B to key A in the global state of the current application |
741 | | `app_local_del` | delete key B from account A's local state of the current application |
742 | | `app_global_del` | delete key A from the global state of the current application |
743 | | `asset_holding_get f` | X is field F from account A's holding of asset B. Y is 1 if A is opted into B, else 0 |
744 | | `asset_params_get f` | X is field F from asset A. Y is 1 if A exists, else 0 |
745 | | `app_params_get f` | X is field F from app A. Y is 1 if A exists, else 0 |
746 | | `acct_params_get f` | X is field F from account A. Y is 1 if A owns positive algos, else 0 |
747 | | `log` | write A to log state of the current application |
748 | | `block f` | field F of block A. Fail unless A falls between txn.LastValid-1002 and txn.FirstValid (exclusive) |
749 | 
750 | ### Box Access
751 | 
752 | Box opcodes that create, delete, or resize boxes affect the minimum
753 | balance requirement of the calling application's account.  The change
754 | is immediate, and can be observed after exection by using
755 | `min_balance`.  If the account does not possess the new minimum
756 | balance, the opcode fails.
757 | 
758 | All box related opcodes fail immediately if used in a
759 | ClearStateProgram. This behavior is meant to discourage Smart Contract
760 | authors from depending upon the availability of boxes in a ClearState
761 | transaction, as accounts using ClearState are under no requirement to
762 | furnish appropriate Box References.  Authors would do well to keep the
763 | same issue in mind with respect to the availability of Accounts,
764 | Assets, and Apps though State Access opcodes _are_ allowed in
765 | ClearState programs because the current application and sender account
766 | are sure to be _available_.
767 | 
768 | | Opcode | Description |
769 | | - | -- |
770 | | `box_create` | create a box named A, of length B. Fail if the name A is empty or B exceeds 32,768. Returns 0 if A already existed, else 1 |
771 | | `box_extract` | read C bytes from box A, starting at offset B. Fail if A does not exist, or the byte range is outside A's size. |
772 | | `box_replace` | write byte-array C into box A, starting at offset B. Fail if A does not exist, or the byte range is outside A's size. |
773 | | `box_splice` | set box A to contain its previous bytes up to index B, followed by D, followed by the original bytes of A that began at index B+C. |
774 | | `box_del` | delete box named A if it exists. Return 1 if A existed, 0 otherwise |
775 | | `box_len` | X is the length of box A if A exists, else 0. Y is 1 if A exists, else 0. |
776 | | `box_get` | X is the contents of box A if A exists, else ''. Y is 1 if A exists, else 0. |
777 | | `box_put` | replaces the contents of box A with byte-array B. Fails if A exists and len(B) != len(box A). Creates A if it does not exist |
778 | | `box_resize` | change the size of box named A to be of length B, adding zero bytes to end or removing bytes from the end, as needed. Fail if the name A is empty, A is not an existing box, or B exceeds 32,768. |
779 | 
780 | ### Inner Transactions
781 | 
782 | The following opcodes allow for "inner transactions". Inner
783 | transactions allow stateful applications to have many of the effects
784 | of a true top-level transaction, programmatically.  However, they are
785 | different in significant ways.  The most important differences are
786 | that they are not signed, duplicates are not rejected, and they do not
787 | appear in the block in the usual away. Instead, their effects are
788 | noted in metadata associated with their top-level application
789 | call transaction.  An inner transaction's `Sender` must be the
790 | SHA512_256 hash of the application ID (prefixed by "appID"), or an
791 | account that has been rekeyed to that hash.
792 | 
793 | In v5, inner transactions may perform `pay`, `axfer`, `acfg`, and
794 | `afrz` effects.  After executing an inner transaction with
795 | `itxn_submit`, the effects of the transaction are visible beginning
796 | with the next instruction with, for example, `balance` and
797 | `min_balance` checks. In v6, inner transactions may also perform
798 | `keyreg` and `appl` effects. Inner `appl` calls fail if they attempt
799 | to invoke a program with version less than v4, or if they attempt to
800 | opt-in to an app with a ClearState Program less than v4.
801 | 
802 | In v5, only a subset of the transaction's header fields may be set: `Type`/`TypeEnum`,
803 | `Sender`, and `Fee`. In v6, header fields `Note` and `RekeyTo` may
804 | also be set.  For the specific (non-header) fields of each transaction
805 | type, any field may be set.  This allows, for example, clawback
806 | transactions, asset opt-ins, and asset creates in addition to the more
807 | common uses of `axfer` and `acfg`.  All fields default to the zero
808 | value, except those described under `itxn_begin`.
809 | 
810 | Fields may be set multiple times, but may not be read. The most recent
811 | setting is used when `itxn_submit` executes. For this purpose `Type`
812 | and `TypeEnum` are considered to be the same field. When using
813 | `itxn_field` to set an array field (`ApplicationArgs` `Accounts`,
814 | `Assets`, or `Applications`) each use adds an element to the end of
815 | the array, rather than setting the entire array at once.
816 | 
817 | `itxn_field` fails immediately for unsupported fields, unsupported
818 | transaction types, or improperly typed values for a particular
819 | field. `itxn_field` makes acceptance decisions entirely from the field
820 | and value provided, never considering previously set fields. Illegal
821 | interactions between fields, such as setting fields that belong to two
822 | different transaction types, are rejected by `itxn_submit`.
823 | 
824 | | Opcode | Description |
825 | | - | -- |
826 | | `itxn_begin` | begin preparation of a new inner transaction in a new transaction group |
827 | | `itxn_next` | begin preparation of a new inner transaction in the same transaction group |
828 | | `itxn_field f` | set field F of the current inner transaction to A |
829 | | `itxn_submit` | execute the current inner transaction group. Fail if executing this group would exceed the inner transaction limit, or if any transaction in the group fails. |
830 | | `itxn f` | field F of the last inner transaction |
831 | | `itxna f i` | Ith value of the array field F of the last inner transaction |
832 | | `itxnas f` | Ath value of the array field F of the last inner transaction |
833 | | `gitxn t f` | field F of the Tth transaction in the last inner group submitted |
834 | | `gitxna t f i` | Ith value of the array field F from the Tth transaction in the last inner group submitted |
835 | | `gitxnas t f` | Ath value of the array field F from the Tth transaction in the last inner group submitted |
836 | 
837 | 
838 | # Assembler Syntax
839 | 
840 | The assembler parses line by line. Ops that only take stack arguments
841 | appear on a line by themselves. Immediate arguments follow the opcode
842 | on the same line, separated by whitespace.
843 | 
844 | The first line may contain a special version pragma `#pragma version X`, which directs the assembler to generate bytecode targeting a certain version. For instance, `#pragma version 2` produces bytecode targeting v2. By default, the assembler targets v1.
845 | 
846 | Subsequent lines may contain other pragma declarations (i.e., `#pragma <some-specification>`), pertaining to checks that the assembler should perform before agreeing to emit the program bytes, specific optimizations, etc. Those declarations are optional and cannot alter the semantics as described in this document.
847 | 
848 | "`//`" prefixes a line comment.
849 | 
850 | ## Constants and Pseudo-Ops
851 | 
852 | A few pseudo-ops simplify writing code. `int` and `byte` and `addr` and `method` followed by a constant record the constant to a `intcblock` or `bytecblock` at the beginning of code and insert an `intc` or `bytec` reference where the instruction appears to load that value. `addr` parses an Algorand account address base32 and converts it to a regular bytes constant. `method` is passed a method signature and takes the first four bytes of the hash to convert it to the standard method selector defined in [ARC4](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0004.md)
853 | 
854 | `byte` constants are:
855 | ```
856 | byte base64 AAAA...
857 | byte b64 AAAA...
858 | byte base64(AAAA...)
859 | byte b64(AAAA...)
860 | byte base32 AAAA...
861 | byte b32 AAAA...
862 | byte base32(AAAA...)
863 | byte b32(AAAA...)
864 | byte 0x0123456789abcdef...
865 | byte "\x01\x02"
866 | byte "string literal"
867 | ```
868 | 
869 | `int` constants may be `0x` prefixed for hex, `0o` or `0` prefixed for
870 | octal, `0b` for binary, or decimal numbers.
871 | 
872 | `intcblock` may be explicitly assembled. It will conflict with the assembler gathering `int` pseudo-ops into a `intcblock` program prefix, but may be used if code only has explicit `intc` references. `intcblock` should be followed by space separated int constants all on one line.
873 | 
874 | `bytecblock` may be explicitly assembled. It will conflict with the assembler if there are any `byte` pseudo-ops but may be used if only explicit `bytec` references are used. `bytecblock` should be followed with byte constants all on one line, either 'encoding value' pairs (`b64 AAA...`) or 0x prefix or function-style values (`base64(...)`) or string literal values.
875 | 
876 | ## Labels and Branches
877 | 
878 | A label is defined by any string not some other opcode or keyword and ending in ':'. A label can be an argument (without the trailing ':') to a branching instruction.
879 | 
880 | Example:
881 | ```
882 | int 1
883 | bnz safe
884 | err
885 | safe:
886 | pop
887 | ```
888 | 
889 | # Encoding and Versioning
890 | 
891 | A compiled program starts with a varuint declaring the version of the compiled code. Any addition, removal, or change of opcode behavior increments the version. For the most part opcode behavior should not change, addition will be infrequent (not likely more often than every three months and less often as the language matures), and removal should be very rare.
892 | 
893 | For version 1, subsequent bytes after the varuint are program opcode bytes. Future versions could put other metadata following the version identifier.
894 | 
895 | It is important to prevent newly-introduced transaction types and
896 | fields from breaking assumptions made by programs written before they
897 | existed. If one of the transactions in a group will execute a program
898 | whose version predates a transaction type or field that can violate
899 | expectations, that transaction type or field must not be used anywhere
900 | in the transaction group.
901 | 
902 | Concretely, the above requirement is translated as follows: A v1
903 | program included in a transaction group that includes a
904 | ApplicationCall transaction or a non-zero RekeyTo field will fail
905 | regardless of the program itself.
906 | 
907 | This requirement is enforced as follows:
908 | 
909 | * For every transaction, compute the earliest version that supports
910 |   all the fields and values in this transaction.
911 |   
912 | * Compute the largest version number across all the transactions in a group (of size 1 or more), call it `maxVerNo`. If any transaction in this group has a program with a version smaller than `maxVerNo`, then that program will fail.
913 | 
914 | In addition, applications must be v4 or greater to be called in an inner transaction.
915 | 
916 | ## Varuint
917 | 
918 | A '[proto-buf style variable length unsigned int](https://developers.google.com/protocol-buffers/docs/encoding#varint)' is encoded with 7 data bits per byte and the high bit is 1 if there is a following byte and 0 for the last byte. The lowest order 7 bits are in the first byte, followed by successively higher groups of 7 bits.
919 | 
920 | # What AVM Programs Cannot Do
921 | 
922 | Design and implementation limitations to be aware of with various versions.
923 | 
924 | * Stateless programs cannot lookup balances of Algos or other
925 |   assets. (Standard transaction accounting will apply after the Smart
926 |   Signature has authorized a transaction. A transaction could still be
927 |   invalid by other accounting rules just as a standard signed
928 |   transaction could be invalid. e.g. I can't give away money I don't
929 |   have.)
930 | * Programs cannot access information in previous blocks. Programs
931 |   cannot access information in other transactions in the current
932 |   block, unless they are a part of the same atomic transaction group.
933 | * Smart Signatures cannot know exactly what round the current transaction
934 |   will commit in (but it is somewhere in FirstValid through
935 |   LastValid).
936 | * Programs cannot know exactly what time its transaction is committed.
937 | * Programs cannot loop prior to v4. In v3 and prior, the branch
938 |   instructions `bnz` "branch if not zero", `bz` "branch if zero" and
939 |   `b` "branch" can only branch forward.
940 | * Until v4, the AVM had no notion of subroutines (and therefore no
941 |   recursion). As of v4, use `callsub` and `retsub`.
942 | * Programs cannot make indirect jumps. `b`, `bz`, `bnz`, and `callsub`
943 |   jump to an immediately specified address, and `retsub` jumps to the
944 |   address currently on the top of the call stack, which is manipulated
945 |   only by previous calls to `callsub` and `retsub`.
946 | 
```
Page 73/93FirstPrevNextLast