#
tokens: 38840/50000 1/942 files (page 65/93)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 65 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:asa.md:
--------------------------------------------------------------------------------

```markdown
   1 | title: Algorand Standard Assets (ASAs)
   2 | 
   3 | The Algorand protocol supports the creation of on-chain assets that benefit from the same security, compatibility, speed and ease of use as the Algo. The official name for assets on Algorand is **Algorand Standard Assets (ASA)**.
   4 | 
   5 | With Algorand Standard Assets you can represent stablecoins, loyalty points, system credits, and in-game points, just to name a few examples. You can also represent single, unique assets like a deed for a house, collectable items, unique parts on a supply chain, etc. There is also ABI_CODEC functionality to place transfer restrictions on an asset that help support securities, compliance, and certification use cases.
   6 | 
   7 | 
   8 | 
   9 | !!! info
  10 |     Assets that represent many of the same type, like a stablecoin, may be referred to as **fungible assets**. Single, unique assets are referred to as **non-fungible assets**. 
  11 | 
  12 | 
  13 | This section begins with an [overview](#assets-overview) of the asset implementation on Algorand including a review of all [asset parameters](#asset-parameters). This is followed by [how-tos](#asset-functions) in the SDKs and `goal` for all on-chain asset functions.
  14 | 
  15 | # Quick start videos
  16 | 
  17 | If you prefer videos, take a look at this 7 minute guide to learn about Introduction to Assets.
  18 | 
  19 | <iframe width="100%" style="aspect-ratio:16/9" src="https://www.youtube-nocookie.com/embed/94XMLuTt8nM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
  20 | 
  21 | # Assets overview
  22 | 
  23 | Here are several things to be aware of before getting started with assets.
  24 | 
  25 | - For every asset an account creates or owns, its minimum balance is increased by 0.1 Algos (100,000 microAlgos). 
  26 | - This minimum balance requirement will be placed on the original creator as long as the asset has not been destroyed. Transferring the asset does not alleviate the creator's minimum balance requirement.
  27 | - Before a new asset can be transferred to a specific account the receiver must opt-in to receive the asset. This process is described below in [Receiving an asset](#receiving-an-asset). 
  28 | - If any transaction is issued that would violate the minimum balance requirements, the transaction will fail.
  29 | 
  30 | !!! info
  31 |     Prior to AVM 1.1 (go-algorand 3.5.0), a single Algorand account was only permitted to create and optin to 1000 assets. These limits are now removed allowing an unlimited number of assets to be created and optin to by a single account.
  32 | 
  33 | ## Asset parameters
  34 | The type of asset that is created will depend on the parameters that are passed during asset creation and sometimes during asset re-configuration. View the full list of asset parameters in the [Asset Parameters Reference](../transactions/transactions#asset-parameters).
  35 | 
  36 | ### Immutable asset parameters
  37 | 
  38 | These eight parameters can *only* be specified when an asset is created.  
  39 | 
  40 | - [Creator](../transactions/transactions#creator) (*required*)
  41 | - [AssetName](../transactions/transactions#assetname) (*optional, but recommended*)
  42 | - [UnitName](../transactions/transactions#unitname) (*optional, but recommended*)
  43 | - [Total](../transactions/transactions#total) (*required*)
  44 | - [Decimals](../transactions/transactions#decimals) (*required*)
  45 | - [DefaultFrozen](../transactions/transactions#defaultfrozen) (*required*)
  46 | - [URL](../transactions/transactions#url) (*optional*)
  47 | - [MetaDataHash](../transactions/transactions#metadatahash) (*optional*)
  48 | 
  49 | ### Mutable asset parameters
  50 | There are four parameters that correspond to addresses that can authorize specific functionality for an asset. These addresses must be specified on creation but they can also be modified after creation. Alternatively, these addresses can be set as empty strings, which will irrevocably lock the function that they would have had authority over. 
  51 | 
  52 | Here are the four address types.
  53 | 
  54 | [**Manager Address**](../transactions/transactions#manageraddr)
  55 | 
  56 | The manager account is the only account that can authorize transactions to [re-configure](#modifying-an-asset) or [destroy](#destroying-an-asset) an asset. 
  57 | 
  58 | !!! warning
  59 |     Never set this address to empty if you want to be able to re-configure or destroy the asset.
  60 | 
  61 | [**Reserve Address**](../transactions/transactions#reserveaddr)
  62 | 
  63 | Specifying a reserve account signifies that non-minted assets will reside in that account instead of the default creator account. Assets transferred from this account are "minted" units of the asset. If you specify a new reserve address, you must make sure the new account has opted into the asset and then issue a transaction to transfer all assets to the new reserve.
  64 | 
  65 | !!! warning 
  66 |     The reserve account has no functional authority in the protocol. It is purely informational. 
  67 | 
  68 | 
  69 | [**Freeze Address**](../transactions/transactions#freezeaddr)
  70 | 
  71 | The freeze account is allowed to freeze or unfreeze the asset holdings for a specific account. When an account is frozen it cannot send or receive the frozen asset. In traditional finance, freezing assets may be performed to restrict liquidation of company stock, to investigate suspected criminal activity or to deny-list certain accounts. If the DefaultFrozen state is set to True, you can use the unfreeze action to authorize certain accounts to trade the asset (such as after passing KYC/AML checks).
  72 | 
  73 | !!! note
  74 |     Just remember that DefaultFrozen is an [immutable parameter](#immutable-asset-parameters) and cannot be changed after creation.
  75 | 
  76 | !!! tip
  77 |     Set this address to `""` if you want to prove to asset holders that the asset can never be frozen.
  78 | 
  79 | [**Clawback Address**](../transactions/transactions#clawbackaddr)
  80 | 
  81 | The clawback address represents an account that is allowed to transfer assets from and to any asset holder (assuming they have opted-in).  Use this if you need the option to revoke assets from an account (like if they breach certain contractual obligations tied to holding the asset). In traditional finance, this sort of transaction is referred to as a clawback.
  82 | 
  83 | !!! tip
  84 |     Set this address to `""` if you want to ensure to asset holders that assets can never be revoked.
  85 | 
  86 | If any of these four addresses is set to `""` that address will be cleared and can never be reset for the life of the asset. This will also effectively disable the feature of that address. For example setting the freeze address to `""` will prevent the asset from ever being frozen.
  87 | 
  88 | # Asset functions
  89 | 
  90 | # Quick start videos
  91 | 
  92 | If you prefer videos, take a look at this 8 minute guide to learn about Building Solutions Using ASAs.
  93 | 
  94 | <iframe width="100%" style="aspect-ratio:16/9" src="https://www.youtube-nocookie.com/embed/_Q37eysrRh4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
  95 | 
  96 | ## Creating an asset
  97 | **Transaction Authorizer**: Any account with sufficient Algo balance
  98 | 
  99 | Create assets using either the SDKs or `goal`. When using the SDKs supply all creation parameters. With `goal`, managing the various addresses associated with the asset must be done after executing an asset creation. See Modifying an Asset in the next section for more details on changing addresses for the asset.
 100 | 
 101 | === "JavaScript"
 102 |     <!-- ===JSSDK_ASSET_CREATE=== -->
 103 | 	```javascript
 104 | 	const suggestedParams = await algodClient.getTransactionParams().do();
 105 | 	const txn = algosdk.makeAssetCreateTxnWithSuggestedParamsFromObject({
 106 | 	  from: creator.addr,
 107 | 	  suggestedParams,
 108 | 	  defaultFrozen: false,
 109 | 	  unitName: 'rug',
 110 | 	  assetName: 'Really Useful Gift',
 111 | 	  manager: creator.addr,
 112 | 	  reserve: creator.addr,
 113 | 	  freeze: creator.addr,
 114 | 	  clawback: creator.addr,
 115 | 	  assetURL: 'http://path/to/my/asset/details',
 116 | 	  total: 1000,
 117 | 	  decimals: 0,
 118 | 	});
 119 | 	
 120 | 	const signedTxn = txn.signTxn(creator.privateKey);
 121 | 	await algodClient.sendRawTransaction(signedTxn).do();
 122 | 	const result = await algosdk.waitForConfirmation(
 123 | 	  algodClient,
 124 | 	  txn.txID().toString(),
 125 | 	  3
 126 | 	);
 127 | 	
 128 | 	const assetIndex = result['asset-index'];
 129 | 	console.log(`Asset ID created: ${assetIndex}`);
 130 | 	```
 131 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/asa.ts#L17-L43)
 132 |     <!-- ===JSSDK_ASSET_CREATE=== -->
 133 | 
 134 | === "Python"
 135 |     <!-- ===PYSDK_ASSET_CREATE=== -->
 136 | 	```python
 137 | 	# Account 1 creates an asset called `rug` with a total supply
 138 | 	# of 1000 units and sets itself to the freeze/clawback/manager/reserve roles
 139 | 	sp = algod_client.suggested_params()
 140 | 	txn = transaction.AssetConfigTxn(
 141 | 	    sender=acct1.address,
 142 | 	    sp=sp,
 143 | 	    default_frozen=False,
 144 | 	    unit_name="rug",
 145 | 	    asset_name="Really Useful Gift",
 146 | 	    manager=acct1.address,
 147 | 	    reserve=acct1.address,
 148 | 	    freeze=acct1.address,
 149 | 	    clawback=acct1.address,
 150 | 	    url="https://path/to/my/asset/details",
 151 | 	    total=1000,
 152 | 	    decimals=0,
 153 | 	)
 154 | 	
 155 | 	# Sign with secret key of creator
 156 | 	stxn = txn.sign(acct1.private_key)
 157 | 	# Send the transaction to the network and retrieve the txid.
 158 | 	txid = algod_client.send_transaction(stxn)
 159 | 	print(f"Sent asset create transaction with txid: {txid}")
 160 | 	# Wait for the transaction to be confirmed
 161 | 	results = transaction.wait_for_confirmation(algod_client, txid, 4)
 162 | 	print(f"Result confirmed in round: {results['confirmed-round']}")
 163 | 	
 164 | 	# grab the asset id for the asset we just created
 165 | 	created_asset = results["asset-index"]
 166 | 	print(f"Asset ID created: {created_asset}")
 167 | 	```
 168 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/asa.py#L13-L43)
 169 |     <!-- ===PYSDK_ASSET_CREATE=== -->
 170 | 
 171 | === "Java"
 172 |     <!-- ===JAVASDK_ASSET_CREATE=== -->
 173 | 	```java
 174 | 	// Account 1 creates an asset called `rug` with a total supply
 175 | 	// of 1000 units and sets itself to the freeze/clawback/manager/reserve roles
 176 | 	Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
 177 | 	TransactionParametersResponse sp = rsp.body();
 178 | 	
 179 | 	// Under the covers, this is an AssetConfig with asset id set to 0
 180 | 	Transaction createTxn = Transaction.AssetCreateTransactionBuilder().suggestedParams(sp)
 181 | 	        .sender(acct.getAddress())
 182 | 	        .assetTotal(1000)
 183 | 	        .assetDecimals(0)
 184 | 	        .defaultFrozen(false)
 185 | 	        .assetUnitName("rug")
 186 | 	        .assetName("Really Useful Gift")
 187 | 	        .url("https://path/to/my/asset/details")
 188 | 	        .manager(acct.getAddress())
 189 | 	        .reserve(acct.getAddress())
 190 | 	        .freeze(acct.getAddress())
 191 | 	        .clawback(acct.getAddress())
 192 | 	        .build();
 193 | 	
 194 | 	SignedTransaction signedCreateTxn = acct.signTransaction(createTxn);
 195 | 	Response<PostTransactionsResponse> submitResult = algodClient.RawTransaction()
 196 | 	        .rawtxn(Encoder.encodeToMsgPack(signedCreateTxn)).execute();
 197 | 	String txId = submitResult.body().txId;
 198 | 	PendingTransactionResponse result = Utils.waitForConfirmation(algodClient, txId, 4);
 199 | 	
 200 | 	// Grab the asset id for the asset we just created
 201 | 	Long asaId = result.assetIndex;
 202 | 	System.out.printf("Created asset with id: %d\n", asaId);
 203 | 	
 204 | 	```
 205 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/ASAExamples.java#L47-L77)
 206 |     <!-- ===JAVASDK_ASSET_CREATE=== -->
 207 | 
 208 | === "Go"
 209 |     <!-- ===GOSDK_ASSET_CREATE=== -->
 210 | 	```go
 211 | 	// Configure parameters for asset creation
 212 | 	var (
 213 | 		creatorAddr       = creator.Address.String()
 214 | 		assetName         = "Really Useful Gift"
 215 | 		unitName          = "rug"
 216 | 		assetURL          = "https://path/to/my/asset/details"
 217 | 		assetMetadataHash = "thisIsSomeLength32HashCommitment"
 218 | 		defaultFrozen     = false
 219 | 		decimals          = uint32(0)
 220 | 		totalIssuance     = uint64(1000)
 221 | 	
 222 | 		manager  = creatorAddr
 223 | 		reserve  = creatorAddr
 224 | 		freeze   = creatorAddr
 225 | 		clawback = creatorAddr
 226 | 	
 227 | 		note []byte
 228 | 	)
 229 | 	
 230 | 	// Get network-related transaction parameters and assign
 231 | 	txParams, err := algodClient.SuggestedParams().Do(context.Background())
 232 | 	if err != nil {
 233 | 		log.Fatalf("error getting suggested tx params: %s", err)
 234 | 	}
 235 | 	
 236 | 	// Construct the transaction
 237 | 	txn, err := transaction.MakeAssetCreateTxn(
 238 | 		creatorAddr, note, txParams, totalIssuance, decimals,
 239 | 		defaultFrozen, manager, reserve, freeze, clawback,
 240 | 		unitName, assetName, assetURL, assetMetadataHash,
 241 | 	)
 242 | 	
 243 | 	if err != nil {
 244 | 		log.Fatalf("failed to make transaction: %s", err)
 245 | 	}
 246 | 	
 247 | 	// sign the transaction
 248 | 	txid, stx, err := crypto.SignTransaction(creator.PrivateKey, txn)
 249 | 	if err != nil {
 250 | 		log.Fatalf("failed to sign transaction: %s", err)
 251 | 	}
 252 | 	
 253 | 	// Broadcast the transaction to the network
 254 | 	_, err = algodClient.SendRawTransaction(stx).Do(context.Background())
 255 | 	if err != nil {
 256 | 		log.Fatalf("failed to send transaction: %s", err)
 257 | 	}
 258 | 	
 259 | 	// Wait for confirmation
 260 | 	confirmedTxn, err := transaction.WaitForConfirmation(algodClient, txid, 4, context.Background())
 261 | 	if err != nil {
 262 | 		log.Fatalf("error waiting for confirmation:  %s", err)
 263 | 	}
 264 | 	
 265 | 	log.Printf("Create Transaction: %s confirmed in Round %d with new asset id: %d\n",
 266 | 		txid, confirmedTxn.ConfirmedRound, confirmedTxn.AssetIndex)
 267 | 	```
 268 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/asa/main.go#L42-L98)
 269 |     <!-- ===GOSDK_ASSET_CREATE=== -->
 270 | 
 271 | === "goal"
 272 |     <!-- ===GOAL_ASSET_CREATE=== -->
 273 |     ``` goal
 274 |         goal asset create --creator <address> --total 1000 --unitname <unit-name> --asseturl "https://path/to/my/asset/details" --decimals 0   -d data
 275 |     ```
 276 |     <!-- ===GOAL_ASSET_CREATE=== -->
 277 | 
 278 | 
 279 | !!!note
 280 | 	The Algorand Foundation [hosts many standards (ARCs)](https://arc.algorand.foundation/) associated with asset creation. Conforming to these standards allows your apps/assets to work well with existing community tools that support them.
 281 | 
 282 | **See also**
 283 | 
 284 | - [Anatomy of an Asset Creation Transaction](../transactions#create-an-asset)
 285 | 
 286 | 
 287 | ## Modifying an asset
 288 | 
 289 | **Authorized by**: [Asset Manager Account](../transactions/transactions#manageraddr)
 290 | 
 291 | After an asset has been created only the manager, reserve, freeze and clawback accounts can be changed. All other parameters are locked for the life of the asset. If any of these addresses are set to `""` that address will be cleared and can never be reset for the life of the asset. Only the manager account can make configuration changes and must authorize the transaction.
 292 | 
 293 | === "JavaScript"
 294 |     <!-- ===JSSDK_ASSET_CONFIG=== -->
 295 | 	```javascript
 296 | 	const manager = accounts[1];
 297 | 	
 298 | 	const configTxn = algosdk.makeAssetConfigTxnWithSuggestedParamsFromObject({
 299 | 	  from: creator.addr,
 300 | 	  manager: manager.addr,
 301 | 	  freeze: manager.addr,
 302 | 	  clawback: manager.addr,
 303 | 	  reserve: undefined,
 304 | 	  suggestedParams,
 305 | 	  assetIndex,
 306 | 	  // don't throw error if freeze, clawback, or manager are empty
 307 | 	  strictEmptyAddressChecking: false,
 308 | 	});
 309 | 	
 310 | 	const signedConfigTxn = configTxn.signTxn(creator.privateKey);
 311 | 	await algodClient.sendRawTransaction(signedConfigTxn).do();
 312 | 	const configResult = await algosdk.waitForConfirmation(
 313 | 	  algodClient,
 314 | 	  txn.txID().toString(),
 315 | 	  3
 316 | 	);
 317 | 	console.log(`Result confirmed in round: ${configResult['confirmed-round']}`);
 318 | 	```
 319 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/asa.ts#L60-L82)
 320 |     <!-- ===JSSDK_ASSET_CONFIG=== -->
 321 | 
 322 | === "Python"
 323 |     <!-- ===PYSDK_ASSET_CONFIG=== -->
 324 | 	```python
 325 | 	sp = algod_client.suggested_params()
 326 | 	# Create a config transaction that wipes the
 327 | 	# reserve address for the asset
 328 | 	txn = transaction.AssetConfigTxn(
 329 | 	    sender=acct1.address,
 330 | 	    sp=sp,
 331 | 	    manager=acct1.address,
 332 | 	    reserve=None,
 333 | 	    freeze=acct1.address,
 334 | 	    clawback=acct1.address,
 335 | 	    strict_empty_address_check=False,
 336 | 	)
 337 | 	# Sign with secret key of manager
 338 | 	stxn = txn.sign(acct1.private_key)
 339 | 	# Send the transaction to the network and retrieve the txid.
 340 | 	txid = algod_client.send_transaction(stxn)
 341 | 	print(f"Sent asset config transaction with txid: {txid}")
 342 | 	# Wait for the transaction to be confirmed
 343 | 	results = transaction.wait_for_confirmation(algod_client, txid, 4)
 344 | 	print(f"Result confirmed in round: {results['confirmed-round']}")
 345 | 	```
 346 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/asa.py#L46-L66)
 347 |     <!-- ===PYSDK_ASSET_CONFIG=== -->
 348 | 
 349 | === "Java"
 350 |     <!-- ===JAVASDK_ASSET_CONFIG=== -->
 351 | 	```java
 352 | 	Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
 353 | 	TransactionParametersResponse sp = rsp.body();
 354 | 	// Wipe the `reserve` address through an AssetConfigTransaction
 355 | 	Transaction reconfigureTxn = Transaction.AssetConfigureTransactionBuilder().suggestedParams(sp)
 356 | 	        .sender(acct.getAddress())
 357 | 	        .assetIndex(asaId)
 358 | 	        .manager(acct.getAddress())
 359 | 	        .freeze(acct.getAddress())
 360 | 	        .clawback(acct.getAddress())
 361 | 	        .strictEmptyAddressChecking(false)
 362 | 	        .reserve(new byte[32])
 363 | 	        .build();
 364 | 	
 365 | 	```
 366 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/ASAExamples.java#L83-L96)
 367 |     <!-- ===JAVASDK_ASSET_CONFIG=== -->
 368 | 
 369 | === "Go"
 370 |     <!-- ===GOSDK_ASSET_CONFIG=== -->
 371 | 	```go
 372 | 	creatorAddr := creator.Address.String()
 373 | 	var (
 374 | 		newManager  = creatorAddr
 375 | 		newFreeze   = creatorAddr
 376 | 		newClawback = creatorAddr
 377 | 		newReserve  = ""
 378 | 	
 379 | 		strictAddrCheck = false
 380 | 		note            []byte
 381 | 	)
 382 | 	
 383 | 	// Get network-related transaction parameters and assign
 384 | 	sp, err := algodClient.SuggestedParams().Do(context.Background())
 385 | 	if err != nil {
 386 | 		log.Fatalf("error getting suggested tx params: %s", err)
 387 | 	}
 388 | 	
 389 | 	txn, err := transaction.MakeAssetConfigTxn(creatorAddr, note, sp, assetID, newManager, newReserve, newFreeze, newClawback, strictAddrCheck)
 390 | 	if err != nil {
 391 | 		log.Fatalf("failed to make  txn: %s", err)
 392 | 	}
 393 | 	// sign the transaction
 394 | 	txid, stx, err := crypto.SignTransaction(creator.PrivateKey, txn)
 395 | 	if err != nil {
 396 | 		log.Fatalf("failed to sign transaction: %s", err)
 397 | 	}
 398 | 	
 399 | 	// Broadcast the transaction to the network
 400 | 	_, err = algodClient.SendRawTransaction(stx).Do(context.Background())
 401 | 	if err != nil {
 402 | 		log.Fatalf("failed to send transaction: %s", err)
 403 | 	}
 404 | 	
 405 | 	// Wait for confirmation
 406 | 	confirmedTxn, err := transaction.WaitForConfirmation(algodClient, txid, 4, context.Background())
 407 | 	if err != nil {
 408 | 		log.Fatalf("error waiting for confirmation:  %s", err)
 409 | 	}
 410 | 	
 411 | 	log.Printf("Asset Config Transaction: %s confirmed in Round %d\n", txid, confirmedTxn.ConfirmedRound)
 412 | 	```
 413 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/asa/main.go#L104-L144)
 414 |     <!-- ===GOSDK_ASSET_CONFIG=== -->
 415 | 
 416 | === "goal"
 417 |     <!-- ===GOAL_ASSET_CONFIG=== -->
 418 | 	``` goal  
 419 |     goal asset config  --manager <address> --new-reserve <address> --assetid <asset-id> -d data 
 420 |     ```
 421 |     <!-- ===GOAL_ASSET_CONFIG=== -->
 422 | 
 423 | 
 424 | **See also**
 425 | 
 426 | - [Anatomy of an Asset Reconfiguration Transaction](../transactions#reconfigure-an-asset)
 427 | 
 428 | 
 429 | ## Receiving an asset
 430 | 
 431 | **Authorized by**: The account opting in
 432 | 
 433 | Before an account can receive a specific asset it must opt-in to receive it. An opt-in transaction places an asset holding of 0 into the account and increases its minimum balance by 100,000 microAlgos. An opt-in transaction is simply an asset transfer with an amount of 0, both to and from the account opting in. The following code illustrates this transaction.
 434 | 
 435 | === "JavaScript"
 436 |     <!-- ===JSSDK_ASSET_OPTIN=== -->
 437 | 	```javascript
 438 | 	
 439 | 	// opt-in is simply a 0 amount transfer of the asset to oneself
 440 | 	const optInTxn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({
 441 | 	  from: receiver.addr,
 442 | 	  to: receiver.addr,
 443 | 	  suggestedParams,
 444 | 	  assetIndex,
 445 | 	  amount: 0,
 446 | 	});
 447 | 	
 448 | 	const signedOptInTxn = optInTxn.signTxn(receiver.privateKey);
 449 | 	await algodClient.sendRawTransaction(signedOptInTxn).do();
 450 | 	await algosdk.waitForConfirmation(algodClient, optInTxn.txID().toString(), 3);
 451 | 	```
 452 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/asa.ts#L86-L99)
 453 |     <!-- ===JSSDK_ASSET_OPTIN=== -->
 454 | 
 455 | === "Python"
 456 |     <!-- ===PYSDK_ASSET_OPTIN=== -->
 457 | 	```python
 458 | 	sp = algod_client.suggested_params()
 459 | 	# Create opt-in transaction
 460 | 	# asset transfer from me to me for asset id we want to opt-in to with amt==0
 461 | 	optin_txn = transaction.AssetOptInTxn(
 462 | 	    sender=acct2.address, sp=sp, index=created_asset
 463 | 	)
 464 | 	signed_optin_txn = optin_txn.sign(acct2.private_key)
 465 | 	txid = algod_client.send_transaction(signed_optin_txn)
 466 | 	print(f"Sent opt in transaction with txid: {txid}")
 467 | 	
 468 | 	# Wait for the transaction to be confirmed
 469 | 	results = transaction.wait_for_confirmation(algod_client, txid, 4)
 470 | 	print(f"Result confirmed in round: {results['confirmed-round']}")
 471 | 	```
 472 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/asa.py#L79-L92)
 473 |     <!-- ===PYSDK_ASSET_OPTIN=== -->
 474 | 
 475 | === "Java"
 476 |     <!-- ===JAVASDK_ASSET_OPTIN=== -->
 477 | 	```java
 478 | 	Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
 479 | 	TransactionParametersResponse sp = rsp.body();
 480 | 	// Under the covers, this is an AssetTransfer from me to me for amount 0
 481 | 	// with asset id set to the asset we wish to start accepting
 482 | 	Transaction optInTxn = Transaction.AssetAcceptTransactionBuilder().suggestedParams(sp)
 483 | 	        .sender(acct.getAddress())
 484 | 	        .assetIndex(asaId)
 485 | 	        .build();
 486 | 	
 487 | 	```
 488 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/ASAExamples.java#L103-L112)
 489 |     <!-- ===JAVASDK_ASSET_OPTIN=== -->
 490 | 
 491 | === "Go"
 492 |     <!-- ===GOSDK_ASSET_OPTIN=== -->
 493 | 	```go
 494 | 	userAddr := user.Address.String()
 495 | 	
 496 | 	sp, err := algodClient.SuggestedParams().Do(context.Background())
 497 | 	if err != nil {
 498 | 		log.Fatalf("error getting suggested tx params: %s", err)
 499 | 	}
 500 | 	
 501 | 	txn, err := transaction.MakeAssetAcceptanceTxn(userAddr, nil, sp, assetID)
 502 | 	if err != nil {
 503 | 		log.Fatalf("failed to make txn: %s", err)
 504 | 	}
 505 | 	// sign the transaction
 506 | 	txid, stx, err := crypto.SignTransaction(user.PrivateKey, txn)
 507 | 	if err != nil {
 508 | 		log.Fatalf("failed to sign transaction: %s", err)
 509 | 	}
 510 | 	
 511 | 	// Broadcast the transaction to the network
 512 | 	_, err = algodClient.SendRawTransaction(stx).Do(context.Background())
 513 | 	if err != nil {
 514 | 		log.Fatalf("failed to send transaction: %s", err)
 515 | 	}
 516 | 	
 517 | 	// Wait for confirmation
 518 | 	confirmedTxn, err := transaction.WaitForConfirmation(algodClient, txid, 4, context.Background())
 519 | 	if err != nil {
 520 | 		log.Fatalf("error waiting for confirmation:  %s", err)
 521 | 	}
 522 | 	
 523 | 	log.Printf("OptIn Transaction: %s confirmed in Round %d\n", txid, confirmedTxn.ConfirmedRound)
 524 | 	```
 525 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/asa/main.go#L149-L179)
 526 |     <!-- ===GOSDK_ASSET_OPTIN=== -->
 527 | 
 528 | === "goal"
 529 |     <!-- ===GOAL_ASSET_OPTIN=== -->
 530 | 	``` goal  
 531 |     goal asset send -a 0 --asset <asset-name>  -f <opt-in-account> -t <opt-in-account> --creator <asset-creator>  -d data
 532 |     ```
 533 |     <!-- ===GOAL_ASSET_OPTIN=== -->
 534 | 
 535 | **See also**
 536 | 
 537 | - [Structure of an Asset Opt-In Transaction](../transactions#opt-in-to-an-asset)
 538 | 
 539 | ## Transferring an asset
 540 | 
 541 | **Authorized by**: The account that holds the asset to be transferred.
 542 | 
 543 | Assets can be transferred between accounts that have opted-in to receiving the asset. These are analogous to standard payment transactions but for Algorand Standard Assets. 
 544 | 
 545 | === "JavaScript"
 546 |     <!-- ===JSSDK_ASSET_XFER=== -->
 547 | 	```javascript
 548 | 	const xferTxn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({
 549 | 	  from: creator.addr,
 550 | 	  to: receiver.addr,
 551 | 	  suggestedParams,
 552 | 	  assetIndex,
 553 | 	  amount: 1,
 554 | 	});
 555 | 	
 556 | 	const signedXferTxn = xferTxn.signTxn(creator.privateKey);
 557 | 	await algodClient.sendRawTransaction(signedXferTxn).do();
 558 | 	await algosdk.waitForConfirmation(algodClient, xferTxn.txID().toString(), 3);
 559 | 	```
 560 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/asa.ts#L102-L113)
 561 |     <!-- ===JSSDK_ASSET_XFER=== -->
 562 | 
 563 | === "Python"
 564 |     <!-- ===PYSDK_ASSET_XFER=== -->
 565 | 	```python
 566 | 	sp = algod_client.suggested_params()
 567 | 	# Create transfer transaction
 568 | 	xfer_txn = transaction.AssetTransferTxn(
 569 | 	    sender=acct1.address,
 570 | 	    sp=sp,
 571 | 	    receiver=acct2.address,
 572 | 	    amt=1,
 573 | 	    index=created_asset,
 574 | 	)
 575 | 	signed_xfer_txn = xfer_txn.sign(acct1.private_key)
 576 | 	txid = algod_client.send_transaction(signed_xfer_txn)
 577 | 	print(f"Sent transfer transaction with txid: {txid}")
 578 | 	
 579 | 	results = transaction.wait_for_confirmation(algod_client, txid, 4)
 580 | 	print(f"Result confirmed in round: {results['confirmed-round']}")
 581 | 	```
 582 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/asa.py#L105-L120)
 583 |     <!-- ===PYSDK_ASSET_XFER=== -->
 584 | 
 585 | === "Java"
 586 |     <!-- ===JAVASDK_ASSET_XFER=== -->
 587 | 	```java
 588 | 	Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
 589 | 	TransactionParametersResponse sp = rsp.body();
 590 | 	// Under the covers, this is an AssetTransfer from me to me for amount 0
 591 | 	// with asset id set to the asset we wish to start accepting
 592 | 	Transaction xferTxn = Transaction.AssetTransferTransactionBuilder().suggestedParams(sp)
 593 | 	        .sender(sender.getAddress())
 594 | 	        .assetReceiver(receiver.getAddress())
 595 | 	        .assetIndex(asaId)
 596 | 	        .assetAmount(1)
 597 | 	        .build();
 598 | 	
 599 | 	```
 600 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/ASAExamples.java#L120-L131)
 601 |     <!-- ===JAVASDK_ASSET_XFER=== -->
 602 | 
 603 | === "Go"
 604 |     <!-- ===GOSDK_ASSET_XFER=== -->
 605 | 	```go
 606 | 	var (
 607 | 		creatorAddr = creator.Address.String()
 608 | 		userAddr    = user.Address.String()
 609 | 	)
 610 | 	
 611 | 	sp, err := algodClient.SuggestedParams().Do(context.Background())
 612 | 	if err != nil {
 613 | 		log.Fatalf("error getting suggested tx params: %s", err)
 614 | 	}
 615 | 	
 616 | 	txn, err := transaction.MakeAssetTransferTxn(creatorAddr, userAddr, 1, nil, sp, "", assetID)
 617 | 	if err != nil {
 618 | 		log.Fatalf("failed to make asset txn: %s", err)
 619 | 	}
 620 | 	// sign the transaction
 621 | 	txid, stx, err := crypto.SignTransaction(creator.PrivateKey, txn)
 622 | 	if err != nil {
 623 | 		log.Fatalf("failed to sign transaction: %s", err)
 624 | 	}
 625 | 	
 626 | 	// Broadcast the transaction to the network
 627 | 	_, err = algodClient.SendRawTransaction(stx).Do(context.Background())
 628 | 	if err != nil {
 629 | 		log.Fatalf("failed to send transaction: %s", err)
 630 | 	}
 631 | 	
 632 | 	// Wait for confirmation
 633 | 	confirmedTxn, err := transaction.WaitForConfirmation(algodClient, txid, 4, context.Background())
 634 | 	if err != nil {
 635 | 		log.Fatalf("error waiting for confirmation:  %s", err)
 636 | 	}
 637 | 	
 638 | 	log.Printf("Asset Transfer Transaction: %s confirmed in Round %d\n", txid, confirmedTxn.ConfirmedRound)
 639 | 	```
 640 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/asa/main.go#L219-L252)
 641 |     <!-- ===GOSDK_ASSET_XFER=== -->
 642 | 
 643 | === "goal"
 644 |     <!-- ===GOAL_ASSET_XFER=== -->
 645 | 	``` goal  
 646 |     goal asset send -a <asset-amount> --asset <asset-name> -f <asset-sender> -t <asset-receiver> --creator <asset-creator> -d data
 647 |     ```
 648 |     <!-- ===GOAL_ASSET_XFER=== -->
 649 | 
 650 | [See complete code...](https://github.com/algorand/docs/tree/master/examples/assets/v2)
 651 | 
 652 | **See also**
 653 | 
 654 | - [Anatomy of an Asset Transfer Transaction](../transactions#transfer-an-asset)
 655 | 
 656 | ## Freezing an asset
 657 | 
 658 | **Authorized by**: [Asset Freeze Address](../transactions/transactions#freezeaddr)
 659 | 
 660 | Freezing or unfreezing an asset for an account requires a transaction that is signed by the freeze account. The code below illustrates the freeze transaction.
 661 | 
 662 | === "JavaScript"
 663 |     <!-- ===JSSDK_ASSET_FREEZE=== -->
 664 | 	```javascript
 665 | 	const freezeTxn = algosdk.makeAssetFreezeTxnWithSuggestedParamsFromObject({
 666 | 	  from: manager.addr,
 667 | 	  suggestedParams,
 668 | 	  assetIndex,
 669 | 	  // freezeState: false would unfreeze the account's asset holding
 670 | 	  freezeState: true,
 671 | 	  // freezeTarget is the account that is being frozen or unfrozen
 672 | 	  freezeTarget: receiver.addr,
 673 | 	});
 674 | 	
 675 | 	const signedFreezeTxn = freezeTxn.signTxn(manager.privateKey);
 676 | 	await algodClient.sendRawTransaction(signedFreezeTxn).do();
 677 | 	await algosdk.waitForConfirmation(
 678 | 	  algodClient,
 679 | 	  freezeTxn.txID().toString(),
 680 | 	  3
 681 | 	);
 682 | 	```
 683 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/asa.ts#L116-L133)
 684 |     <!-- ===JSSDK_ASSET_FREEZE=== -->
 685 | 
 686 | === "Python"
 687 |     <!-- ===PYSDK_ASSET_FREEZE=== -->
 688 | 	```python
 689 | 	sp = algod_client.suggested_params()
 690 | 	# Create freeze transaction to freeze the asset in acct2 balance
 691 | 	freeze_txn = transaction.AssetFreezeTxn(
 692 | 	    sender=acct1.address,
 693 | 	    sp=sp,
 694 | 	    index=created_asset,
 695 | 	    target=acct2.address,
 696 | 	    new_freeze_state=True,
 697 | 	)
 698 | 	signed_freeze_txn = freeze_txn.sign(acct1.private_key)
 699 | 	txid = algod_client.send_transaction(signed_freeze_txn)
 700 | 	print(f"Sent freeze transaction with txid: {txid}")
 701 | 	
 702 | 	results = transaction.wait_for_confirmation(algod_client, txid, 4)
 703 | 	print(f"Result confirmed in round: {results['confirmed-round']}")
 704 | 	```
 705 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/asa.py#L131-L146)
 706 |     <!-- ===PYSDK_ASSET_FREEZE=== -->
 707 | 
 708 | === "Java"
 709 |     <!-- ===JAVASDK_ASSET_FREEZE=== -->
 710 | 	```java
 711 | 	Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
 712 | 	TransactionParametersResponse sp = rsp.body();
 713 | 	// Set the freeze state on the account, only the account that is set to the
 714 | 	// freeze role
 715 | 	// on the asset may issue this transaction
 716 | 	Transaction freezeTxn = Transaction.AssetFreezeTransactionBuilder().suggestedParams(sp)
 717 | 	        .sender(sender.getAddress())
 718 | 	        .freezeTarget(receiver.getAddress())
 719 | 	        .freezeState(true)
 720 | 	        .assetIndex(asaId)
 721 | 	        .build();
 722 | 	
 723 | 	```
 724 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/ASAExamples.java#L139-L151)
 725 |     <!-- ===JAVASDK_ASSET_FREEZE=== -->
 726 | 
 727 | === "Go"
 728 |     <!-- ===GOSDK_ASSET_FREEZE=== -->
 729 | 	```go
 730 | 	var (
 731 | 		creatorAddr = creator.Address.String()
 732 | 		userAddr    = user.Address.String()
 733 | 	)
 734 | 	
 735 | 	sp, err := algodClient.SuggestedParams().Do(context.Background())
 736 | 	if err != nil {
 737 | 		log.Fatalf("error getting suggested tx params: %s", err)
 738 | 	}
 739 | 	
 740 | 	// Create a freeze asset transaction with the target of the user address
 741 | 	// and the new freeze setting of `true`
 742 | 	txn, err := transaction.MakeAssetFreezeTxn(creatorAddr, nil, sp, assetID, userAddr, true)
 743 | 	if err != nil {
 744 | 		log.Fatalf("failed to make txn: %s", err)
 745 | 	}
 746 | 	// sign the transaction
 747 | 	txid, stx, err := crypto.SignTransaction(creator.PrivateKey, txn)
 748 | 	if err != nil {
 749 | 		log.Fatalf("failed to sign transaction: %s", err)
 750 | 	}
 751 | 	
 752 | 	// Broadcast the transaction to the network
 753 | 	_, err = algodClient.SendRawTransaction(stx).Do(context.Background())
 754 | 	if err != nil {
 755 | 		log.Fatalf("failed to send transaction: %s", err)
 756 | 	}
 757 | 	
 758 | 	// Wait for confirmation
 759 | 	confirmedTxn, err := transaction.WaitForConfirmation(algodClient, txid, 4, context.Background())
 760 | 	if err != nil {
 761 | 		log.Fatalf("error waiting for confirmation:  %s", err)
 762 | 	}
 763 | 	
 764 | 	log.Printf("Freeze Transaction: %s confirmed in Round %d\n", txid, confirmedTxn.ConfirmedRound)
 765 | 	```
 766 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/asa/main.go#L257-L292)
 767 |     <!-- ===GOSDK_ASSET_FREEZE=== -->
 768 | 
 769 | === "goal"
 770 |     <!-- ===GOAL_ASSET_FREEZE=== -->
 771 | 	``` goal  
 772 |     goal asset freeze --freezer <asset-freeze-account> --freeze=true --account <account-to-freeze> --creator <asset-creator> --asset <asset-name> -d data
 773 |     ```
 774 |     <!-- ===GOAL_ASSET_FREEZE=== -->
 775 | 
 776 | **See also**
 777 | 
 778 | - [Anatomy of an Asset Freeze Transaction](../transactions#freeze-an-asset)
 779 | 
 780 | ## Revoking an asset
 781 | 
 782 | **Authorized by**: [Asset Clawback Address](../transactions/transactions#clawbackaddr)
 783 | 
 784 | Revoking an asset for an account removes a specific number of the asset from the revoke target account. Revoking an asset from an account requires specifying an asset sender (the revoke target account) and an asset receiver (the account to transfer the funds back to). The code below illustrates the clawback transaction.
 785 | 
 786 | === "JavaScript"
 787 |     <!-- ===JSSDK_ASSET_CLAWBACK=== -->
 788 | 	```javascript
 789 | 	const clawbackTxn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject(
 790 | 	  {
 791 | 	    from: manager.addr,
 792 | 	    to: creator.addr,
 793 | 	    // revocationTarget is the account that is being clawed back from
 794 | 	    revocationTarget: receiver.addr,
 795 | 	    suggestedParams,
 796 | 	    assetIndex,
 797 | 	    amount: 1,
 798 | 	  }
 799 | 	);
 800 | 	
 801 | 	const signedClawbackTxn = clawbackTxn.signTxn(manager.privateKey);
 802 | 	await algodClient.sendRawTransaction(signedClawbackTxn).do();
 803 | 	await algosdk.waitForConfirmation(
 804 | 	  algodClient,
 805 | 	  clawbackTxn.txID().toString(),
 806 | 	  3
 807 | 	);
 808 | 	```
 809 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/asa.ts#L136-L155)
 810 |     <!-- ===JSSDK_ASSET_CLAWBACK=== -->
 811 | 
 812 | === "Python"
 813 |     <!-- ===PYSDK_ASSET_CLAWBACK=== -->
 814 | 	```python
 815 | 	sp = algod_client.suggested_params()
 816 | 	# Create clawback transaction to freeze the asset in acct2 balance
 817 | 	clawback_txn = transaction.AssetTransferTxn(
 818 | 	    sender=acct1.address,
 819 | 	    sp=sp,
 820 | 	    receiver=acct1.address,
 821 | 	    amt=1,
 822 | 	    index=created_asset,
 823 | 	    revocation_target=acct2.address,
 824 | 	)
 825 | 	signed_clawback_txn = clawback_txn.sign(acct1.private_key)
 826 | 	txid = algod_client.send_transaction(signed_clawback_txn)
 827 | 	print(f"Sent clawback transaction with txid: {txid}")
 828 | 	
 829 | 	results = transaction.wait_for_confirmation(algod_client, txid, 4)
 830 | 	print(f"Result confirmed in round: {results['confirmed-round']}")
 831 | 	```
 832 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/asa.py#L157-L173)
 833 |     <!-- ===PYSDK_ASSET_CLAWBACK=== -->
 834 | 
 835 | === "Java"
 836 |     <!-- ===JAVASDK_ASSET_CLAWBACK=== -->
 837 | 	```java
 838 | 	Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
 839 | 	TransactionParametersResponse sp = rsp.body();
 840 | 	// revoke an asset from an account, only the account that is set to the clawback
 841 | 	// role
 842 | 	// on the asset may issue this transaction
 843 | 	Transaction clawbackTxn = Transaction.AssetClawbackTransactionBuilder().suggestedParams(sp)
 844 | 	        .sender(sender.getAddress())
 845 | 	        .assetClawbackFrom(receiver.getAddress())
 846 | 	        .assetReceiver(sender.getAddress())
 847 | 	        .assetIndex(asaId)
 848 | 	        .assetAmount(1)
 849 | 	        .build();
 850 | 	
 851 | 	```
 852 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/ASAExamples.java#L177-L190)
 853 |     <!-- ===JAVASDK_ASSET_CLAWBACK=== -->
 854 | 
 855 | === "Go"
 856 |     <!-- ===GOSDK_ASSET_CLAWBACK=== -->
 857 | 	```go
 858 | 	var (
 859 | 		creatorAddr = creator.Address.String()
 860 | 		userAddr    = user.Address.String()
 861 | 	)
 862 | 	
 863 | 	sp, err := algodClient.SuggestedParams().Do(context.Background())
 864 | 	if err != nil {
 865 | 		log.Fatalf("error getting suggested tx params: %s", err)
 866 | 	}
 867 | 	
 868 | 	// Create a new clawback transaction with the target of the user address and the recipient as the creator
 869 | 	// address, being sent from the address marked as `clawback` on the asset, in this case the same as creator
 870 | 	txn, err := transaction.MakeAssetRevocationTxn(creatorAddr, userAddr, 1, creatorAddr, nil, sp, assetID)
 871 | 	if err != nil {
 872 | 		log.Fatalf("failed to make txn: %s", err)
 873 | 	}
 874 | 	// sign the transaction
 875 | 	txid, stx, err := crypto.SignTransaction(creator.PrivateKey, txn)
 876 | 	if err != nil {
 877 | 		log.Fatalf("failed to sign transaction: %s", err)
 878 | 	}
 879 | 	
 880 | 	// Broadcast the transaction to the network
 881 | 	_, err = algodClient.SendRawTransaction(stx).Do(context.Background())
 882 | 	if err != nil {
 883 | 		log.Fatalf("failed to send transaction: %s", err)
 884 | 	}
 885 | 	
 886 | 	// Wait for confirmation
 887 | 	confirmedTxn, err := transaction.WaitForConfirmation(algodClient, txid, 4, context.Background())
 888 | 	if err != nil {
 889 | 		log.Fatalf("error waiting for confirmation:  %s", err)
 890 | 	}
 891 | 	
 892 | 	log.Printf("Clawback Transaction: %s confirmed in Round %d\n", txid, confirmedTxn.ConfirmedRound)
 893 | 	```
 894 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/asa/main.go#L297-L332)
 895 |     <!-- ===GOSDK_ASSET_CLAWBACK=== -->
 896 | 
 897 | === "goal"
 898 |     <!-- ===GOAL_ASSET_CLAWBACK=== -->
 899 | 	``` goal  
 900 |     goal asset send -a <amount-to-revoke> --asset <asset-name> -f <address-of-revoke-target> -t <address-to-send-assets-to> --clawback <clawback-address> --creator <creator-address> -d data
 901 |     ```
 902 |     <!-- ===GOAL_ASSET_CLAWBACK=== -->
 903 | 
 904 | **See also**
 905 | 
 906 | - [Anatomy of an Asset Clawback Transaction](../transactions#revoke-an-asset)
 907 | 
 908 | ## Opting Out of an Asset
 909 | 
 910 | **Authorized by**: The account opting out 
 911 | 
 912 | An account can opt out of an asset at any time. This means that the account will no longer hold the asset, and the account will no longer be able to receive the asset. The account also recovers the Minimum Balance Requirement for the asset (0.1A).
 913 | 
 914 | === "JavaScript"
 915 | 	<!-- ===JSSDK_ASSET_OPT_OUT=== -->
 916 | 	```javascript
 917 | 	
 918 | 	// opt-out is an amount transfer with the `closeRemainderTo` field set to
 919 | 	// any account that can receive the asset.
 920 | 	// note that closing to the asset creator will always succeed
 921 | 	const optOutTxn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({
 922 | 	  from: receiver.addr,
 923 | 	  to: creator.addr,
 924 | 	  closeRemainderTo: creator.addr,
 925 | 	  suggestedParams,
 926 | 	  assetIndex,
 927 | 	  amount: 0,
 928 | 	});
 929 | 	
 930 | 	const signedOptOutTxn = optOutTxn.signTxn(receiver.privateKey);
 931 | 	await algodClient.sendRawTransaction(signedOptOutTxn).do();
 932 | 	await algosdk.waitForConfirmation(
 933 | 	  algodClient,
 934 | 	  optOutTxn.txID().toString(),
 935 | 	  3
 936 | 	);
 937 | 	```
 938 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/asa.ts#L158-L178)
 939 | 	<!-- ===JSSDK_ASSET_OPT_OUT=== -->
 940 | 
 941 | === "Python"
 942 | 	<!-- ===PYSDK_ASSET_OPT_OUT=== -->
 943 | 	```python
 944 | 	sp = algod_client.suggested_params()
 945 | 	opt_out_txn = transaction.AssetTransferTxn(
 946 | 	    sender=acct2.address,
 947 | 	    sp=sp,
 948 | 	    index=created_asset,
 949 | 	    receiver=acct1.address,
 950 | 	    # an opt out transaction sets its close_asset_to parameter
 951 | 	    # it is always possible to close an asset to the creator
 952 | 	    close_assets_to=acct1.address,
 953 | 	    amt=0,
 954 | 	)
 955 | 	signed_opt_out = opt_out_txn.sign(acct2.private_key)
 956 | 	txid = algod_client.send_transaction(signed_opt_out)
 957 | 	print(f"Sent opt out transaction with txid: {txid}")
 958 | 	
 959 | 	results = transaction.wait_for_confirmation(algod_client, txid, 4)
 960 | 	print(f"Result confirmed in round: {results['confirmed-round']}")
 961 | 	```
 962 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/asa.py#L185-L202)
 963 | 	<!-- ===PYSDK_ASSET_OPT_OUT=== -->
 964 | 
 965 | === "Go"
 966 | 	<!-- ===GOSDK_ASSET_OPT_OUT=== -->
 967 | 	```go
 968 | 	userAddr := user.Address.String()
 969 | 	
 970 | 	sp, err := algodClient.SuggestedParams().Do(context.Background())
 971 | 	if err != nil {
 972 | 		log.Fatalf("error getting suggested tx params: %s", err)
 973 | 	}
 974 | 	
 975 | 	txn, err := transaction.MakeAssetTransferTxn(userAddr, creator.Address.String(), 0, nil, sp, creator.Address.String(), assetID)
 976 | 	if err != nil {
 977 | 		log.Fatalf("failed to make txn: %s", err)
 978 | 	}
 979 | 	// sign the transaction
 980 | 	txid, stx, err := crypto.SignTransaction(user.PrivateKey, txn)
 981 | 	if err != nil {
 982 | 		log.Fatalf("failed to sign transaction: %s", err)
 983 | 	}
 984 | 	
 985 | 	// Broadcast the transaction to the network
 986 | 	_, err = algodClient.SendRawTransaction(stx).Do(context.Background())
 987 | 	if err != nil {
 988 | 		log.Fatalf("failed to send transaction: %s", err)
 989 | 	}
 990 | 	
 991 | 	// Wait for confirmation
 992 | 	confirmedTxn, err := transaction.WaitForConfirmation(algodClient, txid, 4, context.Background())
 993 | 	if err != nil {
 994 | 		log.Fatalf("error waiting for confirmation:  %s", err)
 995 | 	}
 996 | 	
 997 | 	log.Printf("OptOut Transaction: %s confirmed in Round %d\n", txid, confirmedTxn.ConfirmedRound)
 998 | 	```
 999 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/asa/main.go#L184-L214)
1000 | 	<!-- ===GOSDK_ASSET_OPT_OUT=== -->
1001 | 
1002 | === "Java"
1003 | 	<!-- ===JAVASDK_ASSET_OPT_OUT=== -->
1004 | 	```java
1005 | 	Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
1006 | 	TransactionParametersResponse sp = rsp.body();
1007 | 	// Opt out of the asset by setting the assetCloseTo parameter
1008 | 	Transaction optOutTxn = Transaction.AssetTransferTransactionBuilder().suggestedParams(sp)
1009 | 	        .sender(sender.getAddress())
1010 | 	        .assetReceiver(creator.getAddress())
1011 | 	        .assetCloseTo(creator.getAddress())
1012 | 	        .assetIndex(asaId)
1013 | 	        .assetAmount(0)
1014 | 	        .build();
1015 | 	```
1016 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/ASAExamples.java#L159-L169)
1017 | 	<!-- ===JAVASDK_ASSET_OPT_OUT=== -->
1018 | 
1019 | 
1020 | ## Destroying an asset
1021 | 
1022 | **Authorized by**: [Asset Manager](../transactions/transactions#manageraddr)
1023 | 
1024 | Created assets can be destroyed only by the asset manager account. All of the assets must be owned by the creator of the asset before the asset can be deleted. 
1025 | 
1026 | === "JavaScript"
1027 |     <!-- ===JSSDK_ASSET_DELETE=== -->
1028 | 	```javascript
1029 | 	const deleteTxn = algosdk.makeAssetDestroyTxnWithSuggestedParamsFromObject({
1030 | 	  from: manager.addr,
1031 | 	  suggestedParams,
1032 | 	  assetIndex,
1033 | 	});
1034 | 	
1035 | 	const signedDeleteTxn = deleteTxn.signTxn(manager.privateKey);
1036 | 	await algodClient.sendRawTransaction(signedDeleteTxn).do();
1037 | 	await algosdk.waitForConfirmation(
1038 | 	  algodClient,
1039 | 	  deleteTxn.txID().toString(),
1040 | 	  3
1041 | 	);
1042 | 	```
1043 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/asa.ts#L181-L194)
1044 |     <!-- ===JSSDK_ASSET_DELETE=== -->
1045 | 
1046 | === "Python"
1047 |     <!-- ===PYSDK_ASSET_DELETE=== -->
1048 | 	```python
1049 | 	sp = algod_client.suggested_params()
1050 | 	# Create asset destroy transaction to destroy the asset
1051 | 	destroy_txn = transaction.AssetDestroyTxn(
1052 | 	    sender=acct1.address,
1053 | 	    sp=sp,
1054 | 	    index=created_asset,
1055 | 	)
1056 | 	signed_destroy_txn = destroy_txn.sign(acct1.private_key)
1057 | 	txid = algod_client.send_transaction(signed_destroy_txn)
1058 | 	print(f"Sent destroy transaction with txid: {txid}")
1059 | 	
1060 | 	results = transaction.wait_for_confirmation(algod_client, txid, 4)
1061 | 	print(f"Result confirmed in round: {results['confirmed-round']}")
1062 | 	
1063 | 	# now, trying to fetch the asset info should result in an error
1064 | 	try:
1065 | 	    info = algod_client.asset_info(created_asset)
1066 | 	except Exception as e:
1067 | 	    print("Expected Error:", e)
1068 | 	```
1069 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/asa.py#L206-L225)
1070 |     <!-- ===PYSDK_ASSET_DELETE=== -->
1071 | 
1072 | === "Java"
1073 |     <!-- ===JAVASDK_ASSET_DELETE=== -->
1074 | 	```java
1075 | 	Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
1076 | 	TransactionParametersResponse sp = rsp.body();
1077 | 	// Under the covers, an AssetDestroyTransaction is an AssetConfig with all of
1078 | 	// its
1079 | 	// configurable fields set to empty
1080 | 	// All units of the asset _must_ be owned by the creator account and this
1081 | 	// transaction _must_
1082 | 	// be issued by the account set to the manager role on the asset
1083 | 	Transaction destroyTxn = Transaction.AssetDestroyTransactionBuilder().suggestedParams(sp)
1084 | 	        .sender(acct.getAddress())
1085 | 	        .assetIndex(asaId)
1086 | 	        .build();
1087 | 	
1088 | 	```
1089 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/ASAExamples.java#L197-L210)
1090 |     <!-- ===JAVASDK_ASSET_DELETE=== -->
1091 | 
1092 | === "Go"
1093 |     <!-- ===GOSDK_ASSET_DELETE=== -->
1094 | 	```go
1095 | 	var (
1096 | 		creatorAddr = creator.Address.String()
1097 | 	)
1098 | 	
1099 | 	sp, err := algodClient.SuggestedParams().Do(context.Background())
1100 | 	if err != nil {
1101 | 		log.Fatalf("error getting suggested tx params: %s", err)
1102 | 	}
1103 | 	
1104 | 	// Create a new clawback transaction with the target of the user address and the recipient as the creator
1105 | 	// address, being sent from the address marked as `clawback` on the asset, in this case the same as creator
1106 | 	txn, err := transaction.MakeAssetDestroyTxn(creatorAddr, nil, sp, assetID)
1107 | 	if err != nil {
1108 | 		log.Fatalf("failed to make txn: %s", err)
1109 | 	}
1110 | 	// sign the transaction
1111 | 	txid, stx, err := crypto.SignTransaction(creator.PrivateKey, txn)
1112 | 	if err != nil {
1113 | 		log.Fatalf("failed to sign transaction: %s", err)
1114 | 	}
1115 | 	
1116 | 	// Broadcast the transaction to the network
1117 | 	_, err = algodClient.SendRawTransaction(stx).Do(context.Background())
1118 | 	if err != nil {
1119 | 		log.Fatalf("failed to send transaction: %s", err)
1120 | 	}
1121 | 	
1122 | 	// Wait for confirmation
1123 | 	confirmedTxn, err := transaction.WaitForConfirmation(algodClient, txid, 4, context.Background())
1124 | 	if err != nil {
1125 | 		log.Fatalf("error waiting for confirmation:  %s", err)
1126 | 	}
1127 | 	
1128 | 	log.Printf("Destroy Transaction: %s confirmed in Round %d\n", txid, confirmedTxn.ConfirmedRound)
1129 | 	```
1130 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/asa/main.go#L337-L371)
1131 |     <!-- ===GOSDK_ASSET_DELETE=== -->
1132 | 
1133 | === "goal"
1134 |     <!-- ===GOAL_ASSET_DELETE=== -->
1135 | 	``` goal  
1136 |     goal asset destroy --creator <creator-address> --manager <asset-manager-address> --asset <asset-name> -d data 
1137 |     ```
1138 |     <!-- ===GOAL_ASSET_DELETE=== -->
1139 | 
1140 | 
1141 | **See also**
1142 | 
1143 | - [Anatomy of the Asset Destroy Transaction](../transactions#destroy-an-asset)
1144 | 
1145 | # Retrieve asset information
1146 | Retrieve an asset's configuration information from the network using the SDKs or `goal`. Additional details are also added to the accounts that own the specific asset and can be listed with standard account information calls.
1147 | 
1148 | !!! info
1149 |     The code below illustrates getting asset information without the Indexer. If you have the Indexer installed use the Indexer API to [search for asset](../../rest-apis/indexer/#search-assets) information.
1150 | 
1151 | === "JavaScript"
1152 |     <!-- ===JSSDK_ASSET_INFO=== -->
1153 | 	```javascript
1154 | 	const assetInfo = await algodClient.getAssetByID(assetIndex).do();
1155 | 	console.log(`Asset Name: ${assetInfo.params.name}`);
1156 | 	console.log(`Asset Params: ${assetInfo.params}`);
1157 | 	```
1158 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/asa.ts#L46-L49)
1159 |     <!-- ===JSSDK_ASSET_INFO=== -->
1160 | 
1161 | === "Python"
1162 |     <!-- ===PYSDK_ASSET_INFO=== -->
1163 | 	```python
1164 | 	# Retrieve the asset info of the newly created asset
1165 | 	asset_info = algod_client.asset_info(created_asset)
1166 | 	asset_params: Dict[str, Any] = asset_info["params"]
1167 | 	print(f"Asset Name: {asset_params['name']}")
1168 | 	print(f"Asset params: {list(asset_params.keys())}")
1169 | 	```
1170 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/asa.py#L70-L75)
1171 |     <!-- ===PYSDK_ASSET_INFO=== -->
1172 | 
1173 | === "Java"
1174 |     <!-- ===JAVASDK_ASSET_INFO=== -->
1175 | 	```java
1176 | 	// Retrieve the asset info of the newly created asset
1177 | 	Response<Asset> assetResp = algodClient.GetAssetByID(asaId).execute();
1178 | 	Asset assetInfo = assetResp.body();
1179 | 	System.out.printf("Asset Name: %s\n", assetInfo.params.name);
1180 | 	```
1181 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/ASAExamples.java#L38-L42)
1182 |     <!-- ===JAVASDK_ASSET_INFO=== -->
1183 | 
1184 | === "Go"
1185 |     <!-- ===GOSDK_ASSET_INFO=== -->
1186 | 	```go
1187 | 	info, err := algodClient.GetAssetByID(assetID).Do(context.Background())
1188 | 	if err != nil {
1189 | 		log.Fatalf("failed to get asset info: %s", err)
1190 | 	}
1191 | 	log.Printf("Asset info for %d: %+v", assetID, info)
1192 | 	```
1193 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/asa/main.go#L25-L30)
1194 |     <!-- ===GOSDK_ASSET_INFO=== -->
1195 | 
1196 | === "goal"
1197 |     <!-- ===GOAL_ASSET_INFO=== -->
1198 | 	``` goal  
1199 |     goal asset info --creator <creator-address> --asset unitname  -d ~/node/data -w testwall
1200 |     Asset ID:         <created-asset-id>
1201 |     Creator:          <creator-address>
1202 |     Asset name:       testtoken
1203 |     Unit name:        unitname
1204 |     Maximum issue:    12 unitname
1205 |     Reserve amount:   12 unitname
1206 |     Issued:           0 unitname
1207 |     Decimals:         0
1208 |     Default frozen:   false
1209 |     Manager address:  <creator-address>
1210 |     Reserve address:  <reserve-address>
1211 |     Freeze address:   <freeze-address>
1212 |     Clawback address: <clawback-address>
1213 |     ```
1214 |     <!-- ===GOAL_ASSET_INFO=== -->
```
Page 65/93FirstPrevNextLast