#
tokens: 48431/50000 10/942 files (page 29/93)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 29 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/tests/resources/algod/application.test.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
  2 | import { 
  3 |   applicationResources,
  4 |   applicationResourceSchemas,
  5 |   getApplicationByID,
  6 |   getApplicationBoxByName,
  7 |   getApplicationBoxes,
  8 |   handleApplicationResources
  9 | } from '../../../src/resources/algod/application.js';
 10 | import { algodClient } from '../../../src/algorand-client.js';
 11 | 
 12 | // Mock algosdk client
 13 | jest.mock('../../../src/algorand-client.js', () => ({
 14 |   algodClient: {
 15 |     getApplicationByID: jest.fn(),
 16 |     getApplicationBoxByName: jest.fn(),
 17 |     getApplicationBoxes: jest.fn()
 18 |   },
 19 |   API_URIS: {
 20 |     APPLICATION_INFO: 'algorand://app/{app-id}',
 21 |     APPLICATION_BOX: 'algorand://app/{app-id}/box/{name}',
 22 |     APPLICATION_BOXES: 'algorand://app/{app-id}/boxes'
 23 |   }
 24 | }));
 25 | 
 26 | describe('Algod Application Resources', () => {
 27 |   beforeEach(() => {
 28 |     jest.clearAllMocks();
 29 |   });
 30 | 
 31 |   describe('Resource Definitions', () => {
 32 |     it('should define application resources', () => {
 33 |       expect(applicationResources).toHaveLength(3);
 34 |       expect(applicationResources.map(r => r.name)).toEqual([
 35 |         'Application Info',
 36 |         'Application Box',
 37 |         'Application Boxes'
 38 |       ]);
 39 |     });
 40 | 
 41 |     it('should define resource schemas', () => {
 42 |       expect(Object.keys(applicationResourceSchemas)).toHaveLength(3);
 43 |       expect(applicationResourceSchemas).toHaveProperty('algorand://app/{app-id}');
 44 |       expect(applicationResourceSchemas).toHaveProperty('algorand://app/{app-id}/box/{name}');
 45 |       expect(applicationResourceSchemas).toHaveProperty('algorand://app/{app-id}/boxes');
 46 |     });
 47 |   });
 48 | 
 49 |   describe('Application Information', () => {
 50 |     const mockAppId = 123;
 51 |     const mockResponse = {
 52 |       id: mockAppId,
 53 |       params: {
 54 |         creator: 'MOCK_ADDRESS',
 55 |         approvalProgram: 'base64...',
 56 |         clearStateProgram: 'base64...'
 57 |       },
 58 |       createdAtRound: 1234
 59 |     };
 60 | 
 61 |     beforeEach(() => {
 62 |       (algodClient.getApplicationByID as jest.Mock).mockReturnValue({
 63 |         do: jest.fn().mockResolvedValue(mockResponse)
 64 |       });
 65 |     });
 66 | 
 67 |     it('should fetch application information', async () => {
 68 |       const result = await getApplicationByID(mockAppId);
 69 |       expect(result).toEqual(mockResponse);
 70 |       expect(algodClient.getApplicationByID).toHaveBeenCalledWith(mockAppId);
 71 |     });
 72 | 
 73 |     it('should handle errors', async () => {
 74 |       const error = new Error('Network error');
 75 |       (algodClient.getApplicationByID as jest.Mock).mockReturnValue({
 76 |         do: jest.fn().mockRejectedValue(error)
 77 |       });
 78 | 
 79 |       await expect(getApplicationByID(mockAppId))
 80 |         .rejects
 81 |         .toThrow('Failed to get application info: Network error');
 82 |     });
 83 |   });
 84 | 
 85 |   describe('Application Box', () => {
 86 |     const mockAppId = 123;
 87 |     const mockBoxName = new TextEncoder().encode('test-box');
 88 |     const mockResponse = {
 89 |       name: mockBoxName,
 90 |       value: new Uint8Array([1, 2, 3])
 91 |     };
 92 | 
 93 |     beforeEach(() => {
 94 |       (algodClient.getApplicationBoxByName as jest.Mock).mockReturnValue({
 95 |         do: jest.fn().mockResolvedValue(mockResponse)
 96 |       });
 97 |     });
 98 | 
 99 |     it('should fetch box by name', async () => {
100 |       const result = await getApplicationBoxByName(mockAppId, mockBoxName);
101 |       expect(result).toEqual(mockResponse);
102 |       expect(algodClient.getApplicationBoxByName).toHaveBeenCalledWith(mockAppId, mockBoxName);
103 |     });
104 | 
105 |     it('should handle errors', async () => {
106 |       const error = new Error('Network error');
107 |       (algodClient.getApplicationBoxByName as jest.Mock).mockReturnValue({
108 |         do: jest.fn().mockRejectedValue(error)
109 |       });
110 | 
111 |       await expect(getApplicationBoxByName(mockAppId, mockBoxName))
112 |         .rejects
113 |         .toThrow('Failed to get application box: Network error');
114 |     });
115 |   });
116 | 
117 |   describe('Application Boxes', () => {
118 |     const mockAppId = 123;
119 |     const mockResponse = {
120 |       boxes: [
121 |         { name: new Uint8Array([1]), value: new Uint8Array([1]) },
122 |         { name: new Uint8Array([2]), value: new Uint8Array([2]) }
123 |       ]
124 |     };
125 | 
126 |     beforeEach(() => {
127 |       (algodClient.getApplicationBoxes as jest.Mock).mockReturnValue({
128 |         max: jest.fn().mockReturnThis(),
129 |         do: jest.fn().mockResolvedValue(mockResponse)
130 |       });
131 |     });
132 | 
133 |     it('should fetch all boxes', async () => {
134 |       const result = await getApplicationBoxes(mockAppId);
135 |       expect(result).toEqual(mockResponse);
136 |       expect(algodClient.getApplicationBoxes).toHaveBeenCalledWith(mockAppId);
137 |     });
138 | 
139 |     it('should handle max boxes parameter', async () => {
140 |       const maxBoxes = 10;
141 |       await getApplicationBoxes(mockAppId, maxBoxes);
142 |       const mockMax = (algodClient.getApplicationBoxes as jest.Mock).mock.results[0].value.max;
143 |       expect(mockMax).toHaveBeenCalledWith(maxBoxes);
144 |     });
145 | 
146 |     it('should handle errors', async () => {
147 |       const error = new Error('Network error');
148 |       (algodClient.getApplicationBoxes as jest.Mock).mockReturnValue({
149 |         max: jest.fn().mockReturnThis(),
150 |         do: jest.fn().mockRejectedValue(error)
151 |       });
152 | 
153 |       await expect(getApplicationBoxes(mockAppId))
154 |         .rejects
155 |         .toThrow('Failed to get application boxes: Network error');
156 |     });
157 |   });
158 | 
159 |   describe('Resource Handler', () => {
160 |     const mockAppId = 123;
161 |     const mockResponse = {
162 |       id: mockAppId,
163 |       params: {
164 |         creator: 'MOCK_ADDRESS'
165 |       },
166 |       createdAtRound: 1234
167 |     };
168 | 
169 |     beforeEach(() => {
170 |       (algodClient.getApplicationByID as jest.Mock).mockReturnValue({
171 |         do: jest.fn().mockResolvedValue(mockResponse)
172 |       });
173 |     });
174 | 
175 |     it('should handle application info URI', async () => {
176 |       const uri = `algorand://app/${mockAppId}`;
177 |       const result = await handleApplicationResources(uri);
178 |       expect(result).toHaveLength(1);
179 |       expect(JSON.parse(result[0].text)).toEqual(mockResponse);
180 |     });
181 | 
182 |     it('should return empty array for unknown URI', async () => {
183 |       const uri = 'algorand://unknown';
184 |       const result = await handleApplicationResources(uri);
185 |       expect(result).toHaveLength(0);
186 |     });
187 | 
188 |     it('should handle errors with McpError', async () => {
189 |       const error = new Error('Network error');
190 |       (algodClient.getApplicationByID as jest.Mock).mockReturnValue({
191 |         do: jest.fn().mockRejectedValue(error)
192 |       });
193 | 
194 |       const uri = `algorand://app/${mockAppId}`;
195 |       await expect(handleApplicationResources(uri))
196 |         .rejects
197 |         .toThrow(new McpError(ErrorCode.InternalError, 'Network error'));
198 |     });
199 | 
200 |     it('should handle box URI', async () => {
201 |       const uri = `algorand://app/${mockAppId}/box/test-box`;
202 |       const mockBoxResponse = {
203 |         name: new TextEncoder().encode('test-box'),
204 |         value: new Uint8Array([1, 2, 3])
205 |       };
206 | 
207 |       (algodClient.getApplicationBoxByName as jest.Mock).mockReturnValue({
208 |         do: jest.fn().mockResolvedValue(mockBoxResponse)
209 |       });
210 | 
211 |       const result = await handleApplicationResources(uri);
212 |       expect(result).toHaveLength(1);
213 |       expect(JSON.parse(result[0].text)).toEqual({
214 |         box: {
215 |           name: Array.from(mockBoxResponse.name),
216 |           value: Array.from(mockBoxResponse.value)
217 |         },
218 |         currentRound: 0
219 |       });
220 |     });
221 | 
222 |     it('should handle boxes URI', async () => {
223 |       const uri = `algorand://app/${mockAppId}/boxes`;
224 |       const mockBoxesResponse = {
225 |         boxes: [
226 |           { name: new Uint8Array([1]), value: new Uint8Array([1]) }
227 |         ]
228 |       };
229 | 
230 |       (algodClient.getApplicationBoxes as jest.Mock).mockReturnValue({
231 |         max: jest.fn().mockReturnThis(),
232 |         do: jest.fn().mockResolvedValue(mockBoxesResponse)
233 |       });
234 | 
235 |       const result = await handleApplicationResources(uri);
236 |       expect(result).toHaveLength(1);
237 |       expect(JSON.parse(result[0].text)).toEqual({
238 |         boxes: mockBoxesResponse.boxes.map(box => ({
239 |           name: Array.from(box.name)
240 |         })),
241 |         currentRound: 0
242 |       });
243 |     });
244 |   });
245 | });
246 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md:
--------------------------------------------------------------------------------

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/asset](../modules/types_asset.md) / AssetOptOutParams
  2 | 
  3 | # Interface: AssetOptOutParams
  4 | 
  5 | [types/asset](../modules/types_asset.md).AssetOptOutParams
  6 | 
  7 | **`Deprecated`**
  8 | 
  9 | Parameters for `assetOptOut` call.
 10 | 
 11 | ## Hierarchy
 12 | 
 13 | - [`AssetOptInParams`](types_asset.AssetOptInParams.md)
 14 | 
 15 |   ↳ **`AssetOptOutParams`**
 16 | 
 17 | ## Table of contents
 18 | 
 19 | ### Properties
 20 | 
 21 | - [account](types_asset.AssetOptOutParams.md#account)
 22 | - [assetCreatorAddress](types_asset.AssetOptOutParams.md#assetcreatoraddress)
 23 | - [assetId](types_asset.AssetOptOutParams.md#assetid)
 24 | - [atc](types_asset.AssetOptOutParams.md#atc)
 25 | - [ensureZeroBalance](types_asset.AssetOptOutParams.md#ensurezerobalance)
 26 | - [fee](types_asset.AssetOptOutParams.md#fee)
 27 | - [lease](types_asset.AssetOptOutParams.md#lease)
 28 | - [maxFee](types_asset.AssetOptOutParams.md#maxfee)
 29 | - [maxRoundsToWaitForConfirmation](types_asset.AssetOptOutParams.md#maxroundstowaitforconfirmation)
 30 | - [note](types_asset.AssetOptOutParams.md#note)
 31 | - [populateAppCallResources](types_asset.AssetOptOutParams.md#populateappcallresources)
 32 | - [skipSending](types_asset.AssetOptOutParams.md#skipsending)
 33 | - [skipWaiting](types_asset.AssetOptOutParams.md#skipwaiting)
 34 | - [suppressLog](types_asset.AssetOptOutParams.md#suppresslog)
 35 | - [transactionParams](types_asset.AssetOptOutParams.md#transactionparams)
 36 | 
 37 | ## Properties
 38 | 
 39 | ### account
 40 | 
 41 | • **account**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
 42 | 
 43 | The account to opt in/out for
 44 | 
 45 | #### Inherited from
 46 | 
 47 | [AssetOptInParams](types_asset.AssetOptInParams.md).[account](types_asset.AssetOptInParams.md#account)
 48 | 
 49 | #### Defined in
 50 | 
 51 | [src/types/asset.ts:72](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L72)
 52 | 
 53 | ___
 54 | 
 55 | ### assetCreatorAddress
 56 | 
 57 | • `Optional` **assetCreatorAddress**: `string`
 58 | 
 59 | The address of the creator account for the asset; if unspecified then it looks it up using algod
 60 | 
 61 | #### Defined in
 62 | 
 63 | [src/types/asset.ts:86](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L86)
 64 | 
 65 | ___
 66 | 
 67 | ### assetId
 68 | 
 69 | • **assetId**: `number`
 70 | 
 71 | The ID of the assets to opt in for / out of
 72 | 
 73 | #### Inherited from
 74 | 
 75 | [AssetOptInParams](types_asset.AssetOptInParams.md).[assetId](types_asset.AssetOptInParams.md#assetid)
 76 | 
 77 | #### Defined in
 78 | 
 79 | [src/types/asset.ts:74](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L74)
 80 | 
 81 | ___
 82 | 
 83 | ### atc
 84 | 
 85 | • `Optional` **atc**: `AtomicTransactionComposer`
 86 | 
 87 | An optional `AtomicTransactionComposer` to add the transaction to, if specified then `skipSending: undefined` has the same effect as `skipSending: true`
 88 | 
 89 | #### Inherited from
 90 | 
 91 | [AssetOptInParams](types_asset.AssetOptInParams.md).[atc](types_asset.AssetOptInParams.md#atc)
 92 | 
 93 | #### Defined in
 94 | 
 95 | [src/types/transaction.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L36)
 96 | 
 97 | ___
 98 | 
 99 | ### ensureZeroBalance
100 | 
101 | • `Optional` **ensureZeroBalance**: `boolean`
102 | 
103 | Whether or not to validate the account has a zero-balance before issuing the opt-out; default = true
104 | 
105 | #### Defined in
106 | 
107 | [src/types/asset.ts:88](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L88)
108 | 
109 | ___
110 | 
111 | ### fee
112 | 
113 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
114 | 
115 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
116 | 
117 | #### Inherited from
118 | 
119 | [AssetOptInParams](types_asset.AssetOptInParams.md).[fee](types_asset.AssetOptInParams.md#fee)
120 | 
121 | #### Defined in
122 | 
123 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
124 | 
125 | ___
126 | 
127 | ### lease
128 | 
129 | • `Optional` **lease**: `string` \| `Uint8Array`
130 | 
131 | An (optional) [transaction lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) to apply
132 | 
133 | #### Inherited from
134 | 
135 | [AssetOptInParams](types_asset.AssetOptInParams.md).[lease](types_asset.AssetOptInParams.md#lease)
136 | 
137 | #### Defined in
138 | 
139 | [src/types/asset.ts:80](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L80)
140 | 
141 | ___
142 | 
143 | ### maxFee
144 | 
145 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
146 | 
147 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
148 | 
149 | #### Inherited from
150 | 
151 | [AssetOptInParams](types_asset.AssetOptInParams.md).[maxFee](types_asset.AssetOptInParams.md#maxfee)
152 | 
153 | #### Defined in
154 | 
155 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
156 | 
157 | ___
158 | 
159 | ### maxRoundsToWaitForConfirmation
160 | 
161 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
162 | 
163 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
164 | 
165 | #### Inherited from
166 | 
167 | [AssetOptInParams](types_asset.AssetOptInParams.md).[maxRoundsToWaitForConfirmation](types_asset.AssetOptInParams.md#maxroundstowaitforconfirmation)
168 | 
169 | #### Defined in
170 | 
171 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
172 | 
173 | ___
174 | 
175 | ### note
176 | 
177 | • `Optional` **note**: [`TransactionNote`](../modules/types_transaction.md#transactionnote)
178 | 
179 | The (optional) transaction note
180 | 
181 | #### Inherited from
182 | 
183 | [AssetOptInParams](types_asset.AssetOptInParams.md).[note](types_asset.AssetOptInParams.md#note)
184 | 
185 | #### Defined in
186 | 
187 | [src/types/asset.ts:78](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L78)
188 | 
189 | ___
190 | 
191 | ### populateAppCallResources
192 | 
193 | • `Optional` **populateAppCallResources**: `boolean`
194 | 
195 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
196 | 
197 | #### Inherited from
198 | 
199 | [AssetOptInParams](types_asset.AssetOptInParams.md).[populateAppCallResources](types_asset.AssetOptInParams.md#populateappcallresources)
200 | 
201 | #### Defined in
202 | 
203 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
204 | 
205 | ___
206 | 
207 | ### skipSending
208 | 
209 | • `Optional` **skipSending**: `boolean`
210 | 
211 | Whether to skip signing and sending the transaction to the chain (default: transaction signed and sent to chain, unless `atc` specified)
212 | and instead just return the raw transaction, e.g. so you can add it to a group of transactions
213 | 
214 | #### Inherited from
215 | 
216 | [AssetOptInParams](types_asset.AssetOptInParams.md).[skipSending](types_asset.AssetOptInParams.md#skipsending)
217 | 
218 | #### Defined in
219 | 
220 | [src/types/transaction.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L32)
221 | 
222 | ___
223 | 
224 | ### skipWaiting
225 | 
226 | • `Optional` **skipWaiting**: `boolean`
227 | 
228 | Whether to skip waiting for the submitted transaction (only relevant if `skipSending` is `false` or unset)
229 | 
230 | #### Inherited from
231 | 
232 | [AssetOptInParams](types_asset.AssetOptInParams.md).[skipWaiting](types_asset.AssetOptInParams.md#skipwaiting)
233 | 
234 | #### Defined in
235 | 
236 | [src/types/transaction.ts:34](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L34)
237 | 
238 | ___
239 | 
240 | ### suppressLog
241 | 
242 | • `Optional` **suppressLog**: `boolean`
243 | 
244 | Whether to suppress log messages from transaction send, default: do not suppress
245 | 
246 | #### Inherited from
247 | 
248 | [AssetOptInParams](types_asset.AssetOptInParams.md).[suppressLog](types_asset.AssetOptInParams.md#suppresslog)
249 | 
250 | #### Defined in
251 | 
252 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
253 | 
254 | ___
255 | 
256 | ### transactionParams
257 | 
258 | • `Optional` **transactionParams**: `SuggestedParams`
259 | 
260 | Optional transaction parameters
261 | 
262 | #### Inherited from
263 | 
264 | [AssetOptInParams](types_asset.AssetOptInParams.md).[transactionParams](types_asset.AssetOptInParams.md#transactionparams)
265 | 
266 | #### Defined in
267 | 
268 | [src/types/asset.ts:76](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L76)
269 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0012.md:
--------------------------------------------------------------------------------

```markdown
  1 | ---
  2 | arc: 12
  3 | title: Claimable ASA from vault application
  4 | description: A smart signature contract account that can receive & disburse claimable Algorand Smart Assets (ASA) to an intended recipient account.
  5 | author: Brian Whippo (@silentrhetoric), Joe Polny (@joe-p)
  6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/131
  7 | status: Withdrawn
  8 | type: Standards Track
  9 | category: ARC
 10 | created: 2022-09-05
 11 | withdrawal-reason: Not used, will be replaced by ARC-59
 12 | ---
 13 | 
 14 | # Claimable Algorand Standard Assets (ASAs) from vault application
 15 | 
 16 | ## Abstract
 17 | 
 18 | The goal of this standard is to establish a standard in the Algorand ecosytem by which ASAs can be sent to an intended receiver even if their account is not opted in to the ASA.
 19 | 
 20 | A on-chain application, called a vault, will be used to custody assets on behalf of a given user, with only that user being able to withdraw assets. A master application will use box storage to keep track of the vault for any given Algorand account.
 21 | 
 22 | If integrated into ecosystem technologies including wallets, epxlorers, and dApps, this standard can provide enhanced capabilities around ASAs which are otherwise strictly bound at the protocol level to require opting in to be received. This also enables the ability to "burn" ASAs by sending them to the vault associated with the global Zero Address.
 23 | 
 24 | ## Motivation
 25 | 
 26 | Algorand requires accounts to opt in to receive any ASA, a fact which simultaneously:
 27 | 
 28 | 1. Grants account holders fine-grained control over their holdings by allowing them to select which assets to allow and preventing receipt of unwanted tokens.
 29 | 2. Frustrates users and developers when accounting for this requirement especially since other blockchains do not have this requirement.
 30 | 
 31 | This ARC lays out a new way to navigate the ASA opt in requirement.
 32 | 
 33 | ### Contemplated Use Cases
 34 | 
 35 | The following use cases help explain how this capability can enhance the possibilities within the Algorand ecosystem.
 36 | 
 37 | #### Airdrops
 38 | 
 39 | An ASA creator who wants to send their asset to a set of accounts faces the challenge of needing their intended receivers to opt in to the ASA ahead of time, which requires non-trivial communication efforts and precludes the possibility of completing the airdrop as a surprise.  This claimable ASA standard creates the ability to send an airdrop out to individual addresses so that the receivers can opt in and claim the asset at their convenience--or not, if they so choose.
 40 | 
 41 | #### Reducing New User On-boarding Friction
 42 | 
 43 | An application operator who wants to on-board users to their game or business may want to reduce the friction of getting people started by decoupling their application on-boarding process from the process of funding a non-custodial Algorand wallet, if users are wholly new to the Algorand ecosystem.  As long as the receiver's address is known, an ASA can be sent to them ahead of them having ALGOs in their wallet to cover the minimum balance requirement and opt in to the asset.
 44 | 
 45 | #### Token Burning
 46 | 
 47 | Similarly to any regular account, the global Zero Address also has a corresponding vault to which one can send a quantity of any ASA to effectively "burn" it, rendering it lost forever.  No one controls the Zero Address, so while it cannot opt into any ASA to receive it directly, it also cannot make any claims from its corresponding vault, which thus functions as an UN-claimable ASAs purgatory account.  By utilizing this approach, anyone can verifiably and irreversibly take a quantity of any ASA out of circulation forever.
 48 | 
 49 | ## Specification
 50 | 
 51 | The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in <a href="https://www.ietf.org/rfc/rfc2119.txt">RFC-2119</a>.
 52 | 
 53 | 
 54 | > Comments like this are non-normative.
 55 | 
 56 | ### Definitions
 57 | 
 58 | - **Claimable ASA**: An Algorand Standard Asset (ASA) which has been transferred to a vault following the standard set forth in this proposal such that only the intended receiver account can claim it at their convenience.
 59 | - **Vaultt**: An Algorand application used to hold claimable ASAs for a given account.
 60 | - **Master**: An Algorand application used to keep track of all of the vaults created for Algorand accounts.
 61 | - **dApp**: A decentralized application frontend, interpreted here to mean an off-chain frontend (a webapp, native app, etc.) that interacts with applications on the blockchain.
 62 | - **Explorer**: An off-chain application that allows browsing the blockchain, showing details of transactions.
 63 | - **Wallet**: An off-chain application that stores secret keys for on-chain accounts and can display and sign transactions for these accounts.
 64 | - **Mainnet ID**: The ID for the application that should be called upon claiming an asset on mainnet
 65 | - **Testnet ID**: The ID for the application that should be called upoin claiming an asset on testnet
 66 | - **Minimum Balance Requirement (MBR)**: The minimum amount of Algos which must be held by an account on the ledger, which is currently 0.1A + 0.1A per ASA opted into.
 67 | 
 68 | ### TEAL Smart Contracts
 69 | 
 70 | There are two smart contracts being utilized: The [vault](../assets/arc-0012/vault.teal) and the [master](../assets/arc-0012/master.teal).
 71 | 
 72 | #### Vault
 73 | 
 74 | ##### Storage
 75 | 
 76 | | Type   | Key        | Value          | Description                                           |
 77 | | ------ | ---------- | -------------- | ----------------------------------------------------- |
 78 | | Global | “creator”  | Account        | The account that funded the creation of the vault     |
 79 | | Global | “master”   | Application ID | The application ID that created the vault             |
 80 | | Global | “receiver” | Account        | The account that can claim/reject ASAs from the vault |
 81 | | Box    | Asset ID   | Account        | The account that funded the MBR for the given ASA     |
 82 | 
 83 | ##### Methods
 84 | 
 85 | ###### Opt-In
 86 | * Opts vault into ASA
 87 | * Creates box: ASA -> “funder”
 88 |   * “funder” being the account that initiates the opt-in
 89 |   * “funder” is the one covering the ASA MBR
 90 | 
 91 | ###### Claim
 92 | * Transfers ASA from vault to “receiver”
 93 | * Deletes box: ASA -> “funder”
 94 | * Returns ASA and box MBR to “funder”
 95 | 
 96 | ###### Reject
 97 | * Sends ASA to ASA creator
 98 | * Refunds rejector all fees incurred (thus rejecting is free)
 99 | * Deletes box: ASA -> “funder”
100 | * Remaining balance sent to fee sink
101 | 
102 | #### Master
103 | 
104 | ##### Storage
105 | 
106 | | Type | Key     | Value          | Description                     |
107 | | ---- | ------- | -------------- | ------------------------------- |
108 | | Box  | Account | Application ID | The vault for the given account |
109 | 
110 | ##### Methods
111 | 
112 | ###### Create Vault
113 | * Creates a vault for a given account (“receiver”)
114 | * Creates box: “receiver” -> vault ID
115 | * App/box MBR funded by vault creator
116 | 
117 | ###### Delete Vault
118 | * Deletes vault app
119 | * Deletes box: “receiver” -> vault ID
120 | * App.box MBR returned to vault creator
121 | 
122 | ###### Verify Axfer
123 | * Verifies asset is going to correct vault for “receiver”
124 | 
125 | ###### getVaultID
126 | * Returns vault ID for “receiver”
127 | * Fails if “receiver” does not have vault
128 | 
129 | ###### getVaultAddr
130 | * Returns vault address for “receiver”
131 | * Fails if “receiver” does not have vault
132 | 
133 | ###### hasVault
134 | * Determines if “receiver” has a vault
135 | 
136 | ## Rationale
137 | 
138 | This design was created to offer a standard mechanism by which wallets, explorers, and dapps could enable users to send, receive, and find claimable ASAs without requiring any changes to the core protocol.
139 | 
140 | ## Backwards Compatibility
141 | 
142 | This ARC makes no changes to the consensus protocol and creates no backwards compatibility issues.
143 | 
144 | ## Reference Implementation
145 | 
146 | ### Source code
147 | 
148 | * <a href="https://github.com/algorandfoundation/ARCs/tree/main/assets/arc-0012/contracts">Contracts</a>
149 | * <a href="https://github.com/algorandfoundation/ARCs/tree/main/assets/arc-0012/arc12-sdk">TypeScript SDK</a>
150 | 
151 | 
152 | ## Security Considerations
153 | 
154 | Both applications (The vault and the master have not been audited)
155 | 
156 | ## Copyright
157 | 
158 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
159 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md:
--------------------------------------------------------------------------------

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/transfer](../modules/types_transfer.md) / TransferAssetParams
  2 | 
  3 | # Interface: TransferAssetParams
  4 | 
  5 | [types/transfer](../modules/types_transfer.md).TransferAssetParams
  6 | 
  7 | **`Deprecated`**
  8 | 
  9 | Parameters for `transferAsset` call.
 10 | 
 11 | ## Hierarchy
 12 | 
 13 | - [`SendTransactionParams`](types_transaction.SendTransactionParams.md)
 14 | 
 15 |   ↳ **`TransferAssetParams`**
 16 | 
 17 | ## Table of contents
 18 | 
 19 | ### Properties
 20 | 
 21 | - [amount](types_transfer.TransferAssetParams.md#amount)
 22 | - [assetId](types_transfer.TransferAssetParams.md#assetid)
 23 | - [atc](types_transfer.TransferAssetParams.md#atc)
 24 | - [clawbackFrom](types_transfer.TransferAssetParams.md#clawbackfrom)
 25 | - [fee](types_transfer.TransferAssetParams.md#fee)
 26 | - [from](types_transfer.TransferAssetParams.md#from)
 27 | - [lease](types_transfer.TransferAssetParams.md#lease)
 28 | - [maxFee](types_transfer.TransferAssetParams.md#maxfee)
 29 | - [maxRoundsToWaitForConfirmation](types_transfer.TransferAssetParams.md#maxroundstowaitforconfirmation)
 30 | - [note](types_transfer.TransferAssetParams.md#note)
 31 | - [populateAppCallResources](types_transfer.TransferAssetParams.md#populateappcallresources)
 32 | - [skipSending](types_transfer.TransferAssetParams.md#skipsending)
 33 | - [skipWaiting](types_transfer.TransferAssetParams.md#skipwaiting)
 34 | - [suppressLog](types_transfer.TransferAssetParams.md#suppresslog)
 35 | - [to](types_transfer.TransferAssetParams.md#to)
 36 | - [transactionParams](types_transfer.TransferAssetParams.md#transactionparams)
 37 | 
 38 | ## Properties
 39 | 
 40 | ### amount
 41 | 
 42 | • **amount**: `number` \| `bigint`
 43 | 
 44 | The amount to send as the smallest divisible unit value
 45 | 
 46 | #### Defined in
 47 | 
 48 | [src/types/transfer.ts:64](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L64)
 49 | 
 50 | ___
 51 | 
 52 | ### assetId
 53 | 
 54 | • **assetId**: `number`
 55 | 
 56 | The asset id that will be transfered
 57 | 
 58 | #### Defined in
 59 | 
 60 | [src/types/transfer.ts:62](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L62)
 61 | 
 62 | ___
 63 | 
 64 | ### atc
 65 | 
 66 | • `Optional` **atc**: `AtomicTransactionComposer`
 67 | 
 68 | An optional `AtomicTransactionComposer` to add the transaction to, if specified then `skipSending: undefined` has the same effect as `skipSending: true`
 69 | 
 70 | #### Inherited from
 71 | 
 72 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[atc](types_transaction.SendTransactionParams.md#atc)
 73 | 
 74 | #### Defined in
 75 | 
 76 | [src/types/transaction.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L36)
 77 | 
 78 | ___
 79 | 
 80 | ### clawbackFrom
 81 | 
 82 | • `Optional` **clawbackFrom**: `string` \| [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
 83 | 
 84 | An address of a target account from which to perform a clawback operation. Please note, in such cases senderAccount must be equal to clawback field on ASA metadata.
 85 | 
 86 | #### Defined in
 87 | 
 88 | [src/types/transfer.ts:68](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L68)
 89 | 
 90 | ___
 91 | 
 92 | ### fee
 93 | 
 94 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
 95 | 
 96 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
 97 | 
 98 | #### Inherited from
 99 | 
100 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[fee](types_transaction.SendTransactionParams.md#fee)
101 | 
102 | #### Defined in
103 | 
104 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
105 | 
106 | ___
107 | 
108 | ### from
109 | 
110 | • **from**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
111 | 
112 | The account that will send the asset
113 | 
114 | #### Defined in
115 | 
116 | [src/types/transfer.ts:58](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L58)
117 | 
118 | ___
119 | 
120 | ### lease
121 | 
122 | • `Optional` **lease**: `string` \| `Uint8Array`
123 | 
124 | An (optional) [transaction lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) to apply
125 | 
126 | #### Defined in
127 | 
128 | [src/types/transfer.ts:72](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L72)
129 | 
130 | ___
131 | 
132 | ### maxFee
133 | 
134 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
135 | 
136 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
137 | 
138 | #### Inherited from
139 | 
140 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxFee](types_transaction.SendTransactionParams.md#maxfee)
141 | 
142 | #### Defined in
143 | 
144 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
145 | 
146 | ___
147 | 
148 | ### maxRoundsToWaitForConfirmation
149 | 
150 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
151 | 
152 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
153 | 
154 | #### Inherited from
155 | 
156 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxRoundsToWaitForConfirmation](types_transaction.SendTransactionParams.md#maxroundstowaitforconfirmation)
157 | 
158 | #### Defined in
159 | 
160 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
161 | 
162 | ___
163 | 
164 | ### note
165 | 
166 | • `Optional` **note**: [`TransactionNote`](../modules/types_transaction.md#transactionnote)
167 | 
168 | The (optional) transaction note
169 | 
170 | #### Defined in
171 | 
172 | [src/types/transfer.ts:70](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L70)
173 | 
174 | ___
175 | 
176 | ### populateAppCallResources
177 | 
178 | • `Optional` **populateAppCallResources**: `boolean`
179 | 
180 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
181 | 
182 | #### Inherited from
183 | 
184 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[populateAppCallResources](types_transaction.SendTransactionParams.md#populateappcallresources)
185 | 
186 | #### Defined in
187 | 
188 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
189 | 
190 | ___
191 | 
192 | ### skipSending
193 | 
194 | • `Optional` **skipSending**: `boolean`
195 | 
196 | Whether to skip signing and sending the transaction to the chain (default: transaction signed and sent to chain, unless `atc` specified)
197 | and instead just return the raw transaction, e.g. so you can add it to a group of transactions
198 | 
199 | #### Inherited from
200 | 
201 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipSending](types_transaction.SendTransactionParams.md#skipsending)
202 | 
203 | #### Defined in
204 | 
205 | [src/types/transaction.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L32)
206 | 
207 | ___
208 | 
209 | ### skipWaiting
210 | 
211 | • `Optional` **skipWaiting**: `boolean`
212 | 
213 | Whether to skip waiting for the submitted transaction (only relevant if `skipSending` is `false` or unset)
214 | 
215 | #### Inherited from
216 | 
217 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipWaiting](types_transaction.SendTransactionParams.md#skipwaiting)
218 | 
219 | #### Defined in
220 | 
221 | [src/types/transaction.ts:34](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L34)
222 | 
223 | ___
224 | 
225 | ### suppressLog
226 | 
227 | • `Optional` **suppressLog**: `boolean`
228 | 
229 | Whether to suppress log messages from transaction send, default: do not suppress
230 | 
231 | #### Inherited from
232 | 
233 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[suppressLog](types_transaction.SendTransactionParams.md#suppresslog)
234 | 
235 | #### Defined in
236 | 
237 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
238 | 
239 | ___
240 | 
241 | ### to
242 | 
243 | • **to**: `string` \| [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
244 | 
245 | The account / account address that will receive the asset
246 | 
247 | #### Defined in
248 | 
249 | [src/types/transfer.ts:60](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L60)
250 | 
251 | ___
252 | 
253 | ### transactionParams
254 | 
255 | • `Optional` **transactionParams**: `SuggestedParams`
256 | 
257 | Optional transaction parameters
258 | 
259 | #### Defined in
260 | 
261 | [src/types/transfer.ts:66](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L66)
262 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:capabilities:client.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Client management
  2 | 
  3 | Client management is one of the core capabilities provided by AlgoKit Utils. It allows you to create (auto-retry) [algod](https://developer.algorand.org/docs/rest-apis/algod), [indexer](https://developer.algorand.org/docs/rest-apis/indexer) and [kmd](https://developer.algorand.org/docs/rest-apis/kmd) clients against various networks resolved from environment or specified configuration.
  4 | 
  5 | Any AlgoKit Utils function that needs one of these clients will take the underlying algosdk classes (`algosdk.Algodv2`, `algosdk.Indexer`, `algosdk.Kmd`) so inline with the [Modularity](../README.md#core-principles) principle you can use existing logic to get instances of these clients without needing to use the Client management capability if you prefer, including use of libraries like [useWallet](https://github.com/TxnLab/use-wallet) that have their own configuration mechanism.
  6 | 
  7 | To see some usage examples check out the [automated tests](../../src/types/client-manager.spec.ts).
  8 | 
  9 | ## `ClientManager`
 10 | 
 11 | The [`ClientManager`](../code/classes/types_client_manager.ClientManager.md) is a class that is used to manage client instances.
 12 | 
 13 | To get an instance of `ClientManager` you can get it from either [`AlgorandClient`](./algorand-client.md) via `algorand.client` or instantiate it directly:
 14 | 
 15 | ```typescript
 16 | import { ClientManager } from '@algorandfoundation/algokit-utils/types/client-manager'
 17 | 
 18 | // Algod client only
 19 | const clientManager = new ClientManager({ algod: algodClient })
 20 | // All clients
 21 | const clientManager = new ClientManager({ algod: algodClient, indexer: indexerClient, kmd: kmdClient })
 22 | // Algod config only
 23 | const clientManager = new ClientManager({ algodConfig })
 24 | // All client configs
 25 | const clientManager = new ClientManager({ algodConfig, indexerConfig, kmdConfig })
 26 | ```
 27 | 
 28 | ## Network configuration
 29 | 
 30 | The network configuration is specified using the [`AlgoClientConfig`](../code/interfaces/types_network_client.AlgoClientConfig.md) interface. This same interface is used to specify the config for [algod](https://algorand.github.io/js-algorand-sdk/classes/Algodv2.html), [indexer](https://algorand.github.io/js-algorand-sdk/classes/Indexer.html) and [kmd](https://algorand.github.io/js-algorand-sdk/classes/Kmd.html) SDK clients.
 31 | 
 32 | There are a number of ways to produce one of these configuration objects:
 33 | 
 34 | - Manually specifying an object that conforms with the interface, e.g.
 35 |   ```typescript
 36 |   {
 37 |     server: 'https://myalgodnode.com'
 38 |   }
 39 |   // Or with the optional values:
 40 |   {
 41 |     server: 'https://myalgodnode.com',
 42 |     port: 443,
 43 |     token: 'SECRET_TOKEN'
 44 |   }
 45 |   ```
 46 | - [`ClientManager.getConfigFromEnvironmentOrLocalNet()`](../code/classes/types_client_manager.ClientManager.md#getconfigfromenvironmentorlocalnet) - Loads the Algod client config, the Indexer client config and the Kmd config from well-known environment variables or if not found then default LocalNet; this is useful to have code that can work across multiple blockchain environments (including LocalNet), without having to change
 47 | - [`ClientManager.getAlgodConfigFromEnvironment()`](../code/classes/types_client_manager.ClientManager.md#getalgodconfigfromenvironment) - Loads an Algod client config from well-known environment variables
 48 | - [`ClientManager.getIndexerConfigFromEnvironment()`](../code/classes/types_client_manager.ClientManager.md#getindexerconfigfromenvironment) - Loads an Indexer client config from well-known environment variables; useful to have code that can work across multiple blockchain environments (including LocalNet), without having to change
 49 | - [`ClientManager.getAlgoNodeConfig(network, config)`](../code/classes/types_client_manager.ClientManager.md#getalgonodeconfig) - Loads an Algod or indexer config against [AlgoNode free tier](https://nodely.io/docs/free/start) to either MainNet or TestNet
 50 | - [`ClientManager.getDefaultLocalNetConfig(configOrPort)`](../code/classes/types_client_manager.ClientManager.md#getdefaultlocalnetconfig) - Loads an Algod, Indexer or Kmd config against [LocalNet](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/localnet.md) using the default configuration
 51 | 
 52 | ## Clients
 53 | 
 54 | ### Creating an SDK client instance
 55 | 
 56 | Once you have the configuration for a client, to get a new client you can use the following functions:
 57 | 
 58 | - [`ClientManager.getAlgoClient(config)`](../code/classes/types_client_manager.ClientManager.md#getalgoclient) - Returns an Algod client for the given configuration; the client automatically retries on transient HTTP errors
 59 | - [`ClientManager.getIndexerClient(config, overrideIntDecoding)`](../code/classes/types_client_manager.ClientManager.md#getindexerclient) - Returns an Indexer client for given configuration
 60 | - [`ClientManager.getKmdClient(config)`](../code/classes/types_client_manager.ClientManager.md#getkmdclient) - Returns a Kmd client for the given configuration
 61 | 
 62 | You can also shortcut needing to write the likes of `ClientManager.getAlgoClient(ClientManager.getAlgodConfigFromEnvironment())` with environment shortcut methods:
 63 | 
 64 | - [`ClientManager.getAlgodClientFromEnvironment(config)`](../code/classes/types_client_manager.ClientManager.md#getalgodclientfromenvironment) - Returns an Algod client by loading the config from environment variables
 65 | - [`ClientManager.getIndexerClientFromEnvironment(config)`](../code/classes/types_client_manager.ClientManager.md#getindexerclientfromenvironment) - Returns an indexer client by loading the config from environment variables
 66 | - [`ClientManager.getKmdClientFromEnvironment(config)`](../code/classes/types_client_manager.ClientManager.md#getkmdclientfromenvironment) - Returns a kmd client by loading the config from environment variables
 67 | 
 68 | ### Accessing SDK clients via ClientManager instance
 69 | 
 70 | Once you have a `ClientManager` instance, you can access the SDK clients for the various Algorand APIs from it (expressed here as `algorand.client` to denote the syntax via an [`AlgorandClient`](./algorand-client.md)):
 71 | 
 72 | ```typescript
 73 | const algorand = AlgorandClient.defaultLocalNet()
 74 | 
 75 | const algodClient = algorand.client.algod
 76 | const indexerClient = algorand.client.indexer
 77 | const kmdClient = algorand.client.kmd
 78 | ```
 79 | 
 80 | If the method to create the `ClientManager` doesn't configure indexer or kmd ([both of which are optional](#client-management)), then accessing those clients will trigger an error to be thrown:
 81 | 
 82 | ```typescript
 83 | const algorand = AlgorandClient.fromClients({ algod })
 84 | 
 85 | const algodClient = algorand.client.algod // OK
 86 | algorand.client.indexer // Throws error
 87 | algorand.client.kmd // Throws error
 88 | ```
 89 | 
 90 | ### Creating an app client instance
 91 | 
 92 | See [how to create app clients via ClientManager via AlgorandClient](./app-client.md#via-algorandclient).
 93 | 
 94 | ### Creating a TestNet dispenser API client instance
 95 | 
 96 | You can also create a [TestNet dispenser API client instance](./dispenser-client.md#creating-a-dispenser-client) from `ClientManager` too.
 97 | 
 98 | ## Automatic retry
 99 | 
100 | When receiving an Algod or Indexer client from AlgoKit Utils, it will be a special wrapper client that handles retrying transient failures. This is done via the [`AlgoHttpClientWithRetry`](../code/classes/types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md) class.
101 | 
102 | ## Network information
103 | 
104 | To get information about the current network you are connected to, you can use the [`network()`](../code/classes/types_client_manager.ClientManager.md#network) method on `ClientManager` or the `is{Network}()` methods (which in turn call `network()`) as shown below (expressed here as `algorand.client` to denote the syntax via an [`AlgorandClient`](./algorand-client.md)):
105 | 
106 | ```typescript
107 | const algorand = AlgorandClient.defaultLocalNet()
108 | 
109 | const { isTestNet, isMainNet, isLocalNet, genesisId, genesisHash } = await algorand.client.network()
110 | const testNet = await algorand.client.isTestNet()
111 | const mainNet = await algorand.client.isMainNet()
112 | const localNet = await algorand.client.isLocalNet()
113 | ```
114 | 
115 | The first time `network()` is called it will make a HTTP call to algod to get the network parameters, but from then on it will be cached within that `ClientManager` instance for subsequent calls.
116 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:run-a-node:participate:online.md:
--------------------------------------------------------------------------------

```markdown
  1 | title: Register online
  2 | 
  3 | This section assumes that you have already [generated a participation key](generate_keys.md) for the account you plan to mark online. 
  4 | 
  5 | Registering an account online requires authorizing a [key registration transaction](../../get-details/transactions/index.md#key-registration-transaction) with details of the participation key that will vote on the account's behalf. Once the transaction is processed by the blockchain, the Verifiable Random Function public key (referred to as the VRF public key) is written into the account’s data and the account will start participating in consensus with that key. This VRF public key is how the account is associated with the specific participation keys.
  6 | 
  7 | !!! info "Important"
  8 | 	The moment a key registration transaction is confirmed by the network it takes 320 rounds for the change to take effect. In other words, if a key registration is confirmed in round 1000, the account will not start participating until round 1320.
  9 | 
 10 | # Create an online key registration transaction
 11 | 
 12 | Create a key registration transaction for the address: `EW64GC6F24M7NDSC5R3ES4YUVE3ZXXNMARJHDCCCLIHZU6TBEOC7XRSBG4` by inserting the following code snippet into the construction portion of the example shown in [Authorizing Transactions Offline](../../get-details/transactions/offline_transactions.md#unsigned-transaction-file-operations). The file produced and displayed with `goal clerk inspect` should look almost exactly the same as the output shown in the [constructing a register online transaction example](../../get-details/transactions/index.md#register-account-online). 
 13 | 
 14 | 
 15 | === "JavaScript"
 16 |     <!-- ===JSSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
 17 | 	```javascript
 18 | 	// get suggested parameters
 19 | 	const params = await algodClient.getTransactionParams().do();
 20 | 	
 21 | 	// Parent addr
 22 | 	const addr = 'MWAPNXBDFFD2V5KWXAHWKBO7FO4JN36VR4CIBDKDDE7WAUAGZIXM3QPJW4';
 23 | 	// VRF public key
 24 | 	const selectionKey = 'LrpLhvzr+QpN/bivh6IPpOaKGbGzTTB5lJtVfixmmgk=';
 25 | 	// Voting pub key
 26 | 	const voteKey = 'G/lqTV6MKspW6J8wH2d8ZliZ5XZVZsruqSBJMwLwlmo=';
 27 | 	// State proof key
 28 | 	const stateProofKey =
 29 | 	  'RpUpNWfZMjZ1zOOjv3MF2tjO714jsBt0GKnNsw0ihJ4HSZwci+d9zvUi3i67LwFUJgjQ5Dz4zZgHgGduElnmSA==';
 30 | 	
 31 | 	// sets up keys for 100000 rounds
 32 | 	const numRounds = 1e5;
 33 | 	
 34 | 	// dilution default is sqrt num rounds
 35 | 	const keyDilution = numRounds ** 0.5;
 36 | 	
 37 | 	// create transaction
 38 | 	const onlineKeyreg = algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject(
 39 | 	  {
 40 | 	    from: addr,
 41 | 	    voteKey,
 42 | 	    selectionKey,
 43 | 	    stateProofKey,
 44 | 	    voteFirst: params.firstRound,
 45 | 	    voteLast: params.firstRound + numRounds,
 46 | 	    voteKeyDilution: keyDilution,
 47 | 	    suggestedParams: params,
 48 | 	  }
 49 | 	);
 50 | 	
 51 | 	console.log(onlineKeyreg.get_obj_for_encoding());
 52 | 	```
 53 | 	[Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/participation.ts#L7-L41)
 54 |     <!-- ===JSSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
 55 | 
 56 | === "Python"
 57 |     <!-- ===PYSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
 58 | 	```python
 59 | 	# get suggested parameters
 60 | 	params = algod_client.suggested_params()
 61 | 	
 62 | 	votekey = "eXq34wzh2UIxCZaI1leALKyAvSz/+XOe0wqdHagM+bw="
 63 | 	selkey = "X84ReKTmp+yfgmMCbbokVqeFFFrKQeFZKEXG89SXwm4="
 64 | 	
 65 | 	num_rounds = int(1e5)  # sets up keys for 100000 rounds
 66 | 	key_dilution = int(num_rounds**0.5)  # dilution default is sqrt num rounds
 67 | 	
 68 | 	# create transaction
 69 | 	online_keyreg = transaction.KeyregTxn(
 70 | 	    sender="EW64GC6F24M7NDSC5R3ES4YUVE3ZXXNMARJHDCCCLIHZU6TBEOC7XRSBG4",
 71 | 	    votekey=votekey,
 72 | 	    selkey=selkey,
 73 | 	    votefst=params.first,
 74 | 	    votelst=params.first + num_rounds,
 75 | 	    votekd=key_dilution,
 76 | 	    sp=params,
 77 | 	)
 78 | 	print(online_keyreg.dictify())
 79 | 	```
 80 | 	[Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/participation.py#L6-L26)
 81 |     <!-- ===PYSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
 82 | 
 83 | === "Java"
 84 |     <!-- ===JAVASDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
 85 | 	```java
 86 | 	// get suggested parameters
 87 | 	Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
 88 | 	TransactionParametersResponse sp = rsp.body();
 89 | 	
 90 | 	String address = "EW64GC6F24M7NDSC5R3ES4YUVE3ZXXNMARJHDCCCLIHZU6TBEOC7XRSBG4";
 91 | 	
 92 | 	String votekey = "eXq34wzh2UIxCZaI1leALKyAvSz/+XOe0wqdHagM+bw=";
 93 | 	String skey = "X84ReKTmp+yfgmMCbbokVqeFFFrKQeFZKEXG89SXwm4=";
 94 | 	
 95 | 	Long numRounds = 100000l; // sets up keys for 100000 rounds
 96 | 	Long keyDilution = (long) Math.sqrt(numRounds); // dilution default is sqrt num rounds
 97 | 	
 98 | 	Transaction keyRegTxn = Transaction.KeyRegistrationTransactionBuilder().suggestedParams(sp)
 99 | 	        .sender(address)
100 | 	        .selectionPublicKeyBase64(skey)
101 | 	        .participationPublicKeyBase64(votekey)
102 | 	        .voteFirst(sp.lastRound)
103 | 	        .voteLast(sp.lastRound + numRounds)
104 | 	        .voteKeyDilution(keyDilution)
105 | 	        .build();
106 | 	// ... sign and send to network
107 | 	```
108 | 	[Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/Participation.java#L13-L34)
109 |     <!-- ===JAVASDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
110 | 
111 | === "Go"
112 |     <!-- ===GOSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
113 | 	```go
114 | 	fromAddr := "MWAPNXBDFFD2V5KWXAHWKBO7FO4JN36VR4CIBDKDDE7WAUAGZIXM3QPJW4"
115 | 	voteKey := "87iBW46PP4BpTDz6+IEGvxY6JqEaOtV0g+VWcJqoqtc="
116 | 	selKey := "1V2BE2lbFvS937H7pJebN0zxkqe1Nrv+aVHDTPbYRlw="
117 | 	sProofKey := "f0CYOA4yXovNBFMFX+1I/tYVBaAl7VN6e0Ki5yZA3H6jGqsU/LYHNaBkMQ/rN4M4F3UmNcpaTmbVbq+GgDsrhQ=="
118 | 	voteFirst := uint64(16532750)
119 | 	voteLast := uint64(19532750)
120 | 	keyDilution := uint64(1732)
121 | 	nonpart := false
122 | 	tx, err := transaction.MakeKeyRegTxnWithStateProofKey(
123 | 		fromAddr,
124 | 		[]byte{},
125 | 		sp,
126 | 		voteKey,
127 | 		selKey,
128 | 		sProofKey,
129 | 		voteFirst,
130 | 		voteLast,
131 | 		keyDilution,
132 | 		nonpart,
133 | 	)
134 | 	```
135 | 	[Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/participation/main.go#L27-L47)
136 |     <!-- ===GOSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
137 | 
138 | === "goal"
139 |     <!-- ===GOAL_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
140 |     ```zsh 
141 |     # WARNING: This command must be run on the node where the partkey lives and the node
142 |     # must only have a single partkey for the account. Otherwise the command will
143 |     # choose one at random.
144 |     $ goal account changeonlinestatus --address=EW64GC6F24M7NDSC5R3ES4YUVE3ZXXNMARJHDCCCLIHZU6TBEOC7XRSBG4 --fee=2000 --firstvalid=6002000 --lastvalid=6003000 --online=true --txfile=online.txn
145 |     ```
146 |     <!-- ===GOAL_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
147 | 
148 | # Authorize and Send the Transaction
149 | Use the appropriate [authorization method](../../../get-details/transactions/signatures) to sign the transaction. 
150 | 
151 | !!! tip
152 |     It is recommended that you authorize the transaction offline to protect the security of your private keys, especially for high-value participating accounts. 
153 | 
154 | [Verify that the participation key is on the node](../generate_keys#check-that-the-key-exists) prior to submitting the signed transaction. Once verified, wait for the network to reach the transaction's first valid round, then [submit](../../../archive/build-apps/hello_world#submit-the-transaction) the transaction and the SDK method "wait for confirmation".
155 | 
156 | # Check that the node is participating
157 | 
158 | At any time, you can validate whether your node is participating by `grep`-ing the `node.log` file in your data directory, looking for a `"VoteBroadcast"` messages where the `"Sender"` is your public key participation address.
159 | 
160 | ```
161 | $ grep 'VoteBroadcast' node.log
162 | ...
163 | {"Context":"Agreement","Hash":"QJADVNJZDXYEQUPHITB6REFDGBY4AHBPPBIPVXLOPOASZA4T3PIA","ObjectPeriod":0,"ObjectRound":896659,"ObjectStep":2,"Period":0,"Round":0,"Sender":"3IE2GDYYSI56U53AQ6UUWRGAIGG5D4RHWLMCXJOPWQJA2ABF2X2A","Step":0,"Type":"VoteBroadcast","Weight":1,"WeightTotal":1,"file":"pseudonode.go","function":"github.com/algorand/go-algorand/agreement.pseudonodeVotesTask.execute","level":"info","line":344,"msg":"vote created for broadcast (weight 1, total weight 1)","time":"2019-05-10T18:38:54.137592-04:00"}
164 | ...
165 | ```
166 | 
167 | **See also**
168 | 
169 | - [Key Registration Transactions](../../../get-details/transactions/#key-registration-transaction)
170 | - [Register account online](../../../get-details/transactions/#register-account-online)
171 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:conduit.md:
--------------------------------------------------------------------------------

```markdown
 1 | title: Conduit
 2 | 
 3 | Conduit is a plugin based framework that functions like a data pipeline. Conduit is primarily intended to allow dApp developers to customize the data the dApp wants to monitor/aggregate/act on from the Algorand Blockchain. 
 4 | 
 5 | Conduit can be used to:
 6 | 
 7 | - Build a notification system for on chain events.
 8 | - Power a next generation block explorer.
 9 | - Select dApp specific data and act on specific dApp transactions.
10 | - Identify and act on dApp specific Token actions/movements.
11 | - Identify and act on specific Algorand transactions based on Address or other transaction properties.
12 | - Build a custom Indexer for a new [ARC](https://github.com/algorandfoundation/ARCs).
13 | - Send blockchain data to another streaming data platform for additional processing (e.g. RabbitMQ, Kafka, ZeroMQ).
14 | - Build an NFT catalog based on different standards.
15 | - Have Searchability on a massively reduced set of transactions, requiring much less disk space. 
16 | 
17 | !!!note
18 | 	Full documentation for the Conduit framework is available in the [Conduit Github repository](https://github.com/algorand/conduit/blob/master/README.md).
19 | 
20 | 
21 | # Installing Conduit
22 | 
23 | Conduit can be installed by downloading the [built binaries](https://github.com/algorand/conduit/releases), using a [docker image](https://hub.docker.com/r/algorand/conduit) on docker hub, or [built from source](https://github.com/algorand/conduit/tree/master#install-from-source). Full instructions for Installation of Conduit are described in the [Conduit Github Repository](https://github.com/algorand/conduit/blob/master/README.md).
24 | 
25 | 
26 | # Conduit Architecture
27 | 
28 | The framework consists of three primary plugin components, _Importers_, _Processors_, and _Exporters_. _Importer_ plugins are designed to source data into the pipeline, _Processors_ manipulate or filter the data, and _Exporter_ plugins act on the processed data. Within a given instance of Conduit, the pipeline supports one _importer_ and one _exporter_, while zero or more _processor_ plugins can be used. 
29 | 
30 | <center>
31 | ![Conduit Architecture](/docs/imgs/conduitarch.png){: style="width:700px" align=center }
32 | </center>
33 | 
34 | Default installations of the conduit binaries include two types of _importers_ ([`algod`](https://github.com/algorand/conduit/tree/master/conduit/plugins/importers/algod) and [`file_reader`](https://github.com/algorand/conduit/tree/master/conduit/plugins/importers/filereader)). The `algod` plugin is used to source data from an [Algorand Follower node](https://github.com/algorand/conduit/blob/master/docs/tutorials/IndexerWriter.md#node-algod-with-follow-mode) or an [Archival node](https://developer.algorand.org/docs/run-a-node/setup/types/#archival-mode). Using a Follower node is the recommended approach as you have access to more data for use in the _processor_ and also have access to the `postgresql` _exporter_. The `file_reader` plugin can be used to source block data from the filesystem. Most dApps will most likely use the `algod` importer. 
35 | 
36 | The default installation provides one _processor_ that filters the data based on transaction properties. This plugin ([`filter_processor`](https://github.com/algorand/conduit/tree/master/conduit/plugins/processors/filterprocessor)) will be described in more detail in a subsequent section. 
37 | 
38 | The default installation provides two _exporters_ ([`postgresql`](https://github.com/algorand/conduit/tree/master/conduit/plugins/exporters/postgresql) and [`file_writer`](https://github.com/algorand/conduit/tree/master/conduit/plugins/exporters/filewriter)). The `file_writer` _exporter_, writes block data to the filesystem. The `postgresql` _exporter_ writes block data to a postgreSQL database. 
39 | 
40 | # Configuring Conduit
41 | 
42 | Conduit is configured by defining all the plugins the pipeline will support in a YAML file called `conduit.yml`. These plugins must be built and part of the binaries that the specific instance of Conduit is using. This file is used to define which _importer_, _processors_, and _exporter_ plugin a particular instance is using. In addition, individual plugin properties are also configured in the YAML file as well.  For more information on creating and configuring the YAML file see the [Conduit documentation](https://github.com/algorand/conduit/blob/master/README.md#create-conduityml-configuration-file). 
43 | 
44 | !!!note
45 | 	Multiple instances of Conduit can be running simultaneously, with different configurations. No two instances can use the same follower node though.
46 | 
47 | # Running Conduit
48 | 
49 | Once Installed and configured, start Conduit with your data directory as an argument:
50 | 
51 | `./conduit -d data`
52 | 
53 | !!!warning 
54 |     This data directory should be unique to conduit. This is not the data directory that algod uses.
55 | 
56 | 
57 | # Customizing Conduit
58 | 
59 | In addition to the default plugins described above, the Conduit framework allows custom plugins to be developed allowing dApp developers total customization of how the data is sourced, processed and stored or acted on. This process is described in detail with several tutorials available in the [Conduit Github repository](https://github.com/algorand/conduit/blob/master/docs/PluginDevelopment.md). The Conduit team also hosts a known list of [externally developed plugins](https://github.com/algorand/conduit/blob/master/docs/ExternalPlugins.md). 
60 | 
61 | !!!note
62 | 	The Conduit team is actively looking for sample plugins that illustrate interesting use cases. If you build a plugin and want to share your work, please file a PR on the Conduit repository to add it to that page. 
63 | 
64 | # Using the Indexer API with an Instance of Conduit
65 | 
66 | When using Conduit, some dApps may wish to continue to use the Indexer API that Algorand provides. If your application will require this API, you will need to setup the Conduit pipeline as described in the [Conduit documentation](https://github.com/algorand/conduit/blob/master/docs/tutorials/IndexerWriter.md). 
67 | 
68 | !!!note
69 | 	The 2.X versions of Indexer used all the blockchain data since its inception. With Conduit, you can decide how much data you really want to store and search with the Indexer API.
70 | 
71 | # Filtering Block Data
72 | 
73 | One of the primary use cases of Conduit is to filter data that a specific dApp is interested in examining or acting on. To accommodate this, the default installation of Conduit provides the `filter_processor`. This filter is configured similarly to the following in `config.yml`.
74 | 
75 | ```sh
76 | name: filter_processor
77 | config:
78 |     # Whether the expression searches inner transactions for matches.
79 |     search-inner: true
80 | 
81 |     # Whether to include the entire transaction group when the filter
82 |     # conditions are met.
83 |     omit-group-transactions: true
84 | 
85 |     # The list of filter expressions to use when matching transactions.
86 |     filters:
87 |       - any:
88 |           - tag: "txn.rcv"
89 |             expression-type: "equal"
90 |             expression: "ADDRESS"
91 | ```
92 | 
93 | After specifying the proper name and two basic parameters, one or more filters can be added to the YAML file to specify particular transactions your dApp is interested in. In the above example, Conduit will only store/act on transactions where a specific address is the receiver of a transaction. Developers can set any number of filters, specifying different tags, expression-types and expressions.  The `tag` property has access to all transaction properties defined in the [Developer documentation](https://developer.algorand.org/docs/get-details/transactions/transactions/). In addition, if your instance of Conduit is attached to a Follower node, the filter can also tag specific data in the `ApplyData` set. `ApplyData` contains data that needs to be applied to the ledger, based on the results of a transaction(s). This includes properties like changes to Closing Amount , Application State, etc. The full list of available properties in the `ApplyData` set is available in the [Conduit Documentation](https://github.com/algorand/conduit/blob/master/conduit/plugins/processors/filterprocessor/Filter_tags.md). For more information and examples of other filters see the [Conduit filter examples](https://github.com/algorand/conduit/tree/master/conduit/plugins/processors/filterprocessor#examples).
94 | 
95 | 
96 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md:
--------------------------------------------------------------------------------

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/transfer](../modules/types_transfer.md) / EnsureFundedParams
  2 | 
  3 | # Interface: EnsureFundedParams
  4 | 
  5 | [types/transfer](../modules/types_transfer.md).EnsureFundedParams
  6 | 
  7 | **`Deprecated`**
  8 | 
  9 | Parameters for `ensureFunded` call.
 10 | 
 11 | ## Hierarchy
 12 | 
 13 | - [`SendTransactionParams`](types_transaction.SendTransactionParams.md)
 14 | 
 15 |   ↳ **`EnsureFundedParams`**
 16 | 
 17 | ## Table of contents
 18 | 
 19 | ### Properties
 20 | 
 21 | - [accountToFund](types_transfer.EnsureFundedParams.md#accounttofund)
 22 | - [atc](types_transfer.EnsureFundedParams.md#atc)
 23 | - [fee](types_transfer.EnsureFundedParams.md#fee)
 24 | - [fundingSource](types_transfer.EnsureFundedParams.md#fundingsource)
 25 | - [lease](types_transfer.EnsureFundedParams.md#lease)
 26 | - [maxFee](types_transfer.EnsureFundedParams.md#maxfee)
 27 | - [maxRoundsToWaitForConfirmation](types_transfer.EnsureFundedParams.md#maxroundstowaitforconfirmation)
 28 | - [minFundingIncrement](types_transfer.EnsureFundedParams.md#minfundingincrement)
 29 | - [minSpendingBalance](types_transfer.EnsureFundedParams.md#minspendingbalance)
 30 | - [note](types_transfer.EnsureFundedParams.md#note)
 31 | - [populateAppCallResources](types_transfer.EnsureFundedParams.md#populateappcallresources)
 32 | - [skipSending](types_transfer.EnsureFundedParams.md#skipsending)
 33 | - [skipWaiting](types_transfer.EnsureFundedParams.md#skipwaiting)
 34 | - [suppressLog](types_transfer.EnsureFundedParams.md#suppresslog)
 35 | - [transactionParams](types_transfer.EnsureFundedParams.md#transactionparams)
 36 | 
 37 | ## Properties
 38 | 
 39 | ### accountToFund
 40 | 
 41 | • **accountToFund**: `string` \| [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
 42 | 
 43 | The account to fund
 44 | 
 45 | #### Defined in
 46 | 
 47 | [src/types/transfer.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L40)
 48 | 
 49 | ___
 50 | 
 51 | ### atc
 52 | 
 53 | • `Optional` **atc**: `AtomicTransactionComposer`
 54 | 
 55 | An optional `AtomicTransactionComposer` to add the transaction to, if specified then `skipSending: undefined` has the same effect as `skipSending: true`
 56 | 
 57 | #### Inherited from
 58 | 
 59 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[atc](types_transaction.SendTransactionParams.md#atc)
 60 | 
 61 | #### Defined in
 62 | 
 63 | [src/types/transaction.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L36)
 64 | 
 65 | ___
 66 | 
 67 | ### fee
 68 | 
 69 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
 70 | 
 71 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
 72 | 
 73 | #### Inherited from
 74 | 
 75 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[fee](types_transaction.SendTransactionParams.md#fee)
 76 | 
 77 | #### Defined in
 78 | 
 79 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
 80 | 
 81 | ___
 82 | 
 83 | ### fundingSource
 84 | 
 85 | • `Optional` **fundingSource**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom) \| [`TestNetDispenserApiClient`](../classes/types_dispenser_client.TestNetDispenserApiClient.md)
 86 | 
 87 | The account to use as a funding source, will default to using the dispenser account returned by `algokit.getDispenserAccount`
 88 | 
 89 | #### Defined in
 90 | 
 91 | [src/types/transfer.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L42)
 92 | 
 93 | ___
 94 | 
 95 | ### lease
 96 | 
 97 | • `Optional` **lease**: `string` \| `Uint8Array`
 98 | 
 99 | An (optional) [transaction lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) to apply
100 | 
101 | #### Defined in
102 | 
103 | [src/types/transfer.ts:52](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L52)
104 | 
105 | ___
106 | 
107 | ### maxFee
108 | 
109 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
110 | 
111 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
112 | 
113 | #### Inherited from
114 | 
115 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxFee](types_transaction.SendTransactionParams.md#maxfee)
116 | 
117 | #### Defined in
118 | 
119 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
120 | 
121 | ___
122 | 
123 | ### maxRoundsToWaitForConfirmation
124 | 
125 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
126 | 
127 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
128 | 
129 | #### Inherited from
130 | 
131 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxRoundsToWaitForConfirmation](types_transaction.SendTransactionParams.md#maxroundstowaitforconfirmation)
132 | 
133 | #### Defined in
134 | 
135 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
136 | 
137 | ___
138 | 
139 | ### minFundingIncrement
140 | 
141 | • `Optional` **minFundingIncrement**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
142 | 
143 | When issuing a funding amount, the minimum amount to transfer (avoids many small transfers if this gets called often on an active account)
144 | 
145 | #### Defined in
146 | 
147 | [src/types/transfer.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L46)
148 | 
149 | ___
150 | 
151 | ### minSpendingBalance
152 | 
153 | • **minSpendingBalance**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
154 | 
155 | The minimum balance of Algo that the account should have available to spend (i.e. on top of minimum balance requirement)
156 | 
157 | #### Defined in
158 | 
159 | [src/types/transfer.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L44)
160 | 
161 | ___
162 | 
163 | ### note
164 | 
165 | • `Optional` **note**: [`TransactionNote`](../modules/types_transaction.md#transactionnote)
166 | 
167 | The (optional) transaction note, default: "Funding account to meet minimum requirement"
168 | 
169 | #### Defined in
170 | 
171 | [src/types/transfer.ts:50](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L50)
172 | 
173 | ___
174 | 
175 | ### populateAppCallResources
176 | 
177 | • `Optional` **populateAppCallResources**: `boolean`
178 | 
179 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
180 | 
181 | #### Inherited from
182 | 
183 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[populateAppCallResources](types_transaction.SendTransactionParams.md#populateappcallresources)
184 | 
185 | #### Defined in
186 | 
187 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
188 | 
189 | ___
190 | 
191 | ### skipSending
192 | 
193 | • `Optional` **skipSending**: `boolean`
194 | 
195 | Whether to skip signing and sending the transaction to the chain (default: transaction signed and sent to chain, unless `atc` specified)
196 | and instead just return the raw transaction, e.g. so you can add it to a group of transactions
197 | 
198 | #### Inherited from
199 | 
200 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipSending](types_transaction.SendTransactionParams.md#skipsending)
201 | 
202 | #### Defined in
203 | 
204 | [src/types/transaction.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L32)
205 | 
206 | ___
207 | 
208 | ### skipWaiting
209 | 
210 | • `Optional` **skipWaiting**: `boolean`
211 | 
212 | Whether to skip waiting for the submitted transaction (only relevant if `skipSending` is `false` or unset)
213 | 
214 | #### Inherited from
215 | 
216 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipWaiting](types_transaction.SendTransactionParams.md#skipwaiting)
217 | 
218 | #### Defined in
219 | 
220 | [src/types/transaction.ts:34](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L34)
221 | 
222 | ___
223 | 
224 | ### suppressLog
225 | 
226 | • `Optional` **suppressLog**: `boolean`
227 | 
228 | Whether to suppress log messages from transaction send, default: do not suppress
229 | 
230 | #### Inherited from
231 | 
232 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[suppressLog](types_transaction.SendTransactionParams.md#suppresslog)
233 | 
234 | #### Defined in
235 | 
236 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
237 | 
238 | ___
239 | 
240 | ### transactionParams
241 | 
242 | • `Optional` **transactionParams**: `SuggestedParams`
243 | 
244 | Optional transaction parameters
245 | 
246 | #### Defined in
247 | 
248 | [src/types/transfer.ts:48](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L48)
249 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md:
--------------------------------------------------------------------------------

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/app](../modules/types_app.md) / AppDeploymentParams
  2 | 
  3 | # Interface: AppDeploymentParams
  4 | 
  5 | [types/app](../modules/types_app.md).AppDeploymentParams
  6 | 
  7 | The parameters to deploy an app
  8 | 
  9 | ## Hierarchy
 10 | 
 11 | - `Omit`\<[`CreateAppParams`](types_app.CreateAppParams.md), ``"onCompleteAction"`` \| ``"args"`` \| ``"note"`` \| ``"skipSending"`` \| ``"skipWaiting"`` \| ``"atc"``\>
 12 | 
 13 |   ↳ **`AppDeploymentParams`**
 14 | 
 15 | ## Table of contents
 16 | 
 17 | ### Properties
 18 | 
 19 | - [approvalProgram](types_app.AppDeploymentParams.md#approvalprogram)
 20 | - [clearStateProgram](types_app.AppDeploymentParams.md#clearstateprogram)
 21 | - [createArgs](types_app.AppDeploymentParams.md#createargs)
 22 | - [createOnCompleteAction](types_app.AppDeploymentParams.md#createoncompleteaction)
 23 | - [deleteArgs](types_app.AppDeploymentParams.md#deleteargs)
 24 | - [deployTimeParams](types_app.AppDeploymentParams.md#deploytimeparams)
 25 | - [existingDeployments](types_app.AppDeploymentParams.md#existingdeployments)
 26 | - [fee](types_app.AppDeploymentParams.md#fee)
 27 | - [from](types_app.AppDeploymentParams.md#from)
 28 | - [maxFee](types_app.AppDeploymentParams.md#maxfee)
 29 | - [maxRoundsToWaitForConfirmation](types_app.AppDeploymentParams.md#maxroundstowaitforconfirmation)
 30 | - [metadata](types_app.AppDeploymentParams.md#metadata)
 31 | - [onSchemaBreak](types_app.AppDeploymentParams.md#onschemabreak)
 32 | - [onUpdate](types_app.AppDeploymentParams.md#onupdate)
 33 | - [populateAppCallResources](types_app.AppDeploymentParams.md#populateappcallresources)
 34 | - [schema](types_app.AppDeploymentParams.md#schema)
 35 | - [suppressLog](types_app.AppDeploymentParams.md#suppresslog)
 36 | - [transactionParams](types_app.AppDeploymentParams.md#transactionparams)
 37 | - [updateArgs](types_app.AppDeploymentParams.md#updateargs)
 38 | 
 39 | ## Properties
 40 | 
 41 | ### approvalProgram
 42 | 
 43 | • **approvalProgram**: `string` \| `Uint8Array`
 44 | 
 45 | The approval program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array)
 46 | 
 47 | #### Inherited from
 48 | 
 49 | Omit.approvalProgram
 50 | 
 51 | #### Defined in
 52 | 
 53 | [src/types/app.ts:135](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L135)
 54 | 
 55 | ___
 56 | 
 57 | ### clearStateProgram
 58 | 
 59 | • **clearStateProgram**: `string` \| `Uint8Array`
 60 | 
 61 | The clear state program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array)
 62 | 
 63 | #### Inherited from
 64 | 
 65 | Omit.clearStateProgram
 66 | 
 67 | #### Defined in
 68 | 
 69 | [src/types/app.ts:137](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L137)
 70 | 
 71 | ___
 72 | 
 73 | ### createArgs
 74 | 
 75 | • `Optional` **createArgs**: [`AppCallArgs`](../modules/types_app.md#appcallargs)
 76 | 
 77 | Any args to pass to any create transaction that is issued as part of deployment
 78 | 
 79 | #### Defined in
 80 | 
 81 | [src/types/app.ts:323](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L323)
 82 | 
 83 | ___
 84 | 
 85 | ### createOnCompleteAction
 86 | 
 87 | • `Optional` **createOnCompleteAction**: ``"no_op"`` \| ``"opt_in"`` \| ``"close_out"`` \| ``"update_application"`` \| ``"delete_application"`` \| `NoOpOC` \| `OptInOC` \| `CloseOutOC` \| `UpdateApplicationOC` \| `DeleteApplicationOC`
 88 | 
 89 | Override the on-completion action for the create call; defaults to NoOp
 90 | 
 91 | #### Defined in
 92 | 
 93 | [src/types/app.ts:325](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L325)
 94 | 
 95 | ___
 96 | 
 97 | ### deleteArgs
 98 | 
 99 | • `Optional` **deleteArgs**: [`AppCallArgs`](../modules/types_app.md#appcallargs)
100 | 
101 | Any args to pass to any delete transaction that is issued as part of deployment
102 | 
103 | #### Defined in
104 | 
105 | [src/types/app.ts:329](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L329)
106 | 
107 | ___
108 | 
109 | ### deployTimeParams
110 | 
111 | • `Optional` **deployTimeParams**: [`TealTemplateParams`](types_app.TealTemplateParams.md)
112 | 
113 | Any deploy-time parameters to replace in the TEAL code
114 | 
115 | #### Defined in
116 | 
117 | [src/types/app.ts:315](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L315)
118 | 
119 | ___
120 | 
121 | ### existingDeployments
122 | 
123 | • `Optional` **existingDeployments**: [`AppLookup`](types_app.AppLookup.md)
124 | 
125 | Optional cached value of the existing apps for the given creator
126 | 
127 | #### Defined in
128 | 
129 | [src/types/app.ts:321](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L321)
130 | 
131 | ___
132 | 
133 | ### fee
134 | 
135 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
136 | 
137 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
138 | 
139 | #### Inherited from
140 | 
141 | Omit.fee
142 | 
143 | #### Defined in
144 | 
145 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
146 | 
147 | ___
148 | 
149 | ### from
150 | 
151 | • **from**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
152 | 
153 | The account (with private key loaded) that will send the transaction
154 | 
155 | #### Inherited from
156 | 
157 | Omit.from
158 | 
159 | #### Defined in
160 | 
161 | [src/types/app.ts:133](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L133)
162 | 
163 | ___
164 | 
165 | ### maxFee
166 | 
167 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
168 | 
169 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
170 | 
171 | #### Inherited from
172 | 
173 | Omit.maxFee
174 | 
175 | #### Defined in
176 | 
177 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
178 | 
179 | ___
180 | 
181 | ### maxRoundsToWaitForConfirmation
182 | 
183 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
184 | 
185 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
186 | 
187 | #### Inherited from
188 | 
189 | Omit.maxRoundsToWaitForConfirmation
190 | 
191 | #### Defined in
192 | 
193 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
194 | 
195 | ___
196 | 
197 | ### metadata
198 | 
199 | • **metadata**: [`AppDeployMetadata`](types_app.AppDeployMetadata.md)
200 | 
201 | The deployment metadata
202 | 
203 | #### Defined in
204 | 
205 | [src/types/app.ts:313](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L313)
206 | 
207 | ___
208 | 
209 | ### onSchemaBreak
210 | 
211 | • `Optional` **onSchemaBreak**: [`OnSchemaBreak`](../enums/types_app.OnSchemaBreak.md) \| ``"replace"`` \| ``"fail"`` \| ``"append"``
212 | 
213 | What action to perform if a schema break is detected
214 | 
215 | #### Defined in
216 | 
217 | [src/types/app.ts:317](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L317)
218 | 
219 | ___
220 | 
221 | ### onUpdate
222 | 
223 | • `Optional` **onUpdate**: ``"replace"`` \| ``"fail"`` \| ``"append"`` \| [`OnUpdate`](../enums/types_app.OnUpdate.md) \| ``"update"``
224 | 
225 | What action to perform if a TEAL update is detected
226 | 
227 | #### Defined in
228 | 
229 | [src/types/app.ts:319](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L319)
230 | 
231 | ___
232 | 
233 | ### populateAppCallResources
234 | 
235 | • `Optional` **populateAppCallResources**: `boolean`
236 | 
237 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
238 | 
239 | #### Inherited from
240 | 
241 | Omit.populateAppCallResources
242 | 
243 | #### Defined in
244 | 
245 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
246 | 
247 | ___
248 | 
249 | ### schema
250 | 
251 | • **schema**: [`AppStorageSchema`](types_app.AppStorageSchema.md)
252 | 
253 | The storage schema to request for the created app
254 | 
255 | #### Inherited from
256 | 
257 | Omit.schema
258 | 
259 | #### Defined in
260 | 
261 | [src/types/app.ts:152](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L152)
262 | 
263 | ___
264 | 
265 | ### suppressLog
266 | 
267 | • `Optional` **suppressLog**: `boolean`
268 | 
269 | Whether to suppress log messages from transaction send, default: do not suppress
270 | 
271 | #### Inherited from
272 | 
273 | Omit.suppressLog
274 | 
275 | #### Defined in
276 | 
277 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
278 | 
279 | ___
280 | 
281 | ### transactionParams
282 | 
283 | • `Optional` **transactionParams**: `SuggestedParams`
284 | 
285 | Optional transaction parameters
286 | 
287 | #### Inherited from
288 | 
289 | Omit.transactionParams
290 | 
291 | #### Defined in
292 | 
293 | [src/types/app.ts:139](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L139)
294 | 
295 | ___
296 | 
297 | ### updateArgs
298 | 
299 | • `Optional` **updateArgs**: [`AppCallArgs`](../modules/types_app.md#appcallargs)
300 | 
301 | Any args to pass to any update transaction that is issued as part of deployment
302 | 
303 | #### Defined in
304 | 
305 | [src/types/app.ts:327](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L327)
306 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0200.md:
--------------------------------------------------------------------------------

```markdown
  1 | ---
  2 | arc: 200
  3 | title: Algorand Smart Contract Token Specification
  4 | description: Base specification for tokens implemented as smart contracts
  5 | author: Nicholas Shellabarger (@temptemp3)
  6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/223
  7 | status: Living
  8 | type: Standards Track
  9 | category: Interface
 10 | sub-category: Application
 11 | created: 2023-07-03
 12 | requires: 3, 4, 22, 28
 13 | ---
 14 | 
 15 | # Algorand Smart Contract Token Specification
 16 | 
 17 | ## Abstract
 18 | 
 19 | This ARC (Algorand Request for Comments) specifies an interface for tokens to be implemented on Algorand as smart contracts. The interface defines a minimal interface required for tokens to be held and transferred, with the potential for further augmentation through additional standard interfaces and custom methods.
 20 | 
 21 | ## Motivation
 22 | 
 23 | Currently, most tokens in the Algorand ecosystem are represented by ASAs (Algorand Standard Assets). However, to provide rich extra functionality, it can be desirable to implement tokens as smart contracts instead. To foster an interoperable token ecosystem, it is necessary that the core interfaces for tokens be standardized.
 24 | 
 25 | ## Specification
 26 | 
 27 | The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in <a href="https://www.ietf.org/rfc/rfc2119.txt">RFC-2119</a>.
 28 | 
 29 | ### Core Token specification
 30 | 
 31 | A smart contract token that is compliant with this standard MUST implement the following interface:
 32 | 
 33 | ```json
 34 | {
 35 |   "name": "ARC-200",
 36 |   "desc": "Smart Contract Token Base Interface",
 37 |   "methods": [
 38 |     {
 39 |       "name": "arc200_name",
 40 |       "desc": "Returns the name of the token",
 41 |       "readonly": true,
 42 |       "args": [],
 43 |       "returns": { "type": "byte[32]", "desc": "The name of the token" }
 44 |     },
 45 |     {
 46 |       "name": "arc200_symbol",
 47 |       "desc": "Returns the symbol of the token",
 48 |       "readonly": true,
 49 |       "args": [],
 50 |       "returns": { "type": "byte[8]", "desc": "The symbol of the token" }
 51 |     },
 52 |     {
 53 |       "name": "arc200_decimals",
 54 |       "desc": "Returns the decimals of the token",
 55 |       "readonly": true,
 56 |       "args": [],
 57 |       "returns": { "type": "uint8", "desc": "The decimals of the token" }
 58 |     },
 59 |     {
 60 |       "name": "arc200_totalSupply",
 61 |       "desc": "Returns the total supply of the token",
 62 |       "readonly": true,
 63 |       "args": [],
 64 |       "returns": { "type": "uint256", "desc": "The total supply of the token" }
 65 |     },
 66 |     {
 67 |       "name": "arc200_balanceOf",
 68 |       "desc": "Returns the current balance of the owner of the token",
 69 |       "readonly": true,
 70 |       "args": [
 71 |         {
 72 |           "type": "address",
 73 |           "name": "owner",
 74 |           "desc": "The address of the owner of the token"
 75 |         }
 76 |       ],
 77 |       "returns": {
 78 |         "type": "uint256",
 79 |         "desc": "The current balance of the holder of the token"
 80 |       }
 81 |     },
 82 |     {
 83 |       "name": "arc200_transfer",
 84 |       "desc": "Transfers tokens",
 85 |       "readonly": false,
 86 |       "args": [
 87 |         {
 88 |           "type": "address",
 89 |           "name": "to",
 90 |           "desc": "The destination of the transfer"
 91 |         },
 92 |         {
 93 |           "type": "uint256",
 94 |           "name": "value",
 95 |           "desc": "Amount of tokens to transfer"
 96 |         }
 97 |       ],
 98 |       "returns": { "type": "bool", "desc": "Success" }
 99 |     },
100 |     {
101 |       "name": "arc200_transferFrom",
102 |       "desc": "Transfers tokens from source to destination as approved spender",
103 |       "readonly": false,
104 |       "args": [
105 |         {
106 |           "type": "address",
107 |           "name": "from",
108 |           "desc": "The source  of the transfer"
109 |         },
110 |         {
111 |           "type": "address",
112 |           "name": "to",
113 |           "desc": "The destination of the transfer"
114 |         },
115 |         {
116 |           "type": "uint256",
117 |           "name": "value",
118 |           "desc": "Amount of tokens to transfer"
119 |         }
120 |       ],
121 |       "returns": { "type": "bool", "desc": "Success" }
122 |     },
123 |     {
124 |       "name": "arc200_approve",
125 |       "desc": "Approve spender for a token",
126 |       "readonly": false,
127 |       "args": [
128 |         { "type": "address", "name": "spender" },
129 |         { "type": "uint256", "name": "value" }
130 |       ],
131 |       "returns": { "type": "bool", "desc": "Success" }
132 |     },
133 |     {
134 |       "name": "arc200_allowance",
135 |       "desc": "Returns the current allowance of the spender of the tokens of the owner",
136 |       "readonly": true,
137 |       "args": [
138 |         { "type": "address", "name": "owner" },
139 |         { "type": "address", "name": "spender" }
140 |       ],
141 |       "returns": { "type": "uint256", "desc": "The remaining allowance" }
142 |     }
143 |   ],
144 |   "events": [
145 |     {
146 |       "name": "arc200_Transfer",
147 |       "desc": "Transfer of tokens",
148 |       "args": [
149 |         {
150 |           "type": "address",
151 |           "name": "from",
152 |           "desc": "The source of transfer of tokens"
153 |         },
154 |         {
155 |           "type": "address",
156 |           "name": "to",
157 |           "desc": "The destination of transfer of tokens"
158 |         },
159 |         {
160 |           "type": "uint256",
161 |           "name": "value",
162 |           "desc": "The amount of tokens transferred"
163 |         }
164 |       ]
165 |     },
166 |     {
167 |       "name": "arc200_Approval",
168 |       "desc": "Approval of tokens",
169 |       "args": [
170 |         {
171 |           "type": "address",
172 |           "name": "owner",
173 |           "desc": "The owner of the tokens"
174 |         },
175 |         {
176 |           "type": "address",
177 |           "name": "spender",
178 |           "desc": "The approved spender of tokens"
179 |         },
180 |         {
181 |           "type": "uint256",
182 |           "name": "value",
183 |           "desc": "The amount of tokens approve"
184 |         }
185 |       ]
186 |     }
187 |   ]
188 | }
189 | ```
190 | 
191 | Ownership of a token by a zero address indicates that a token is out of circulation indefinitely, or otherwise burned or destroyed.
192 | 
193 | The methods `arc200_transfer` and `arc200_transferFrom` method MUST error when the balance of `from` is insufficient. In the case of the `arc200_transfer` method, from is implied as the `owner` of the token.
194 | The `arc200_transferFrom` method MUST error unless called by an `spender` approved by an `owner`.
195 | The methods `arc200_transfer` and `arc200_transferFrom` MUST emit a `Transfer` event.
196 | A `arc200_Transfer` event SHOULD be emitted, with `from` being the zero address, when a token is minted.
197 | A `arc200_Transfer` event SHOULD be emitted, with `to` being the zero address, when a token is destroyed.
198 | 
199 | The `arc200_Approval` event MUST be emitted when an `arc200_approve` or `arc200_transferFrom` method is called successfully.
200 | 
201 | A value of zero for the `arc200_approve` method and the `arc200_Approval` event indicates no approval.
202 | The `arc200_transferFrom` method and the `arc200_Approval` event indicates the approval value after it is decremented.
203 | 
204 | The contract MUST allow multiple operators per owner.
205 | 
206 | All methods in this standard that are marked as `readonly` MUST be read-only as defined by [ARC-22](./arc-0022.md).
207 | 
208 | ## Rationale
209 | 
210 | This specification is based on <a href="https://eips.ethereum.org/EIPS/eip-20">ERC-20</a>.
211 | 
212 | ### Core Specification
213 | 
214 | The core specification identical to ERC-20.
215 | 
216 | ## Backwards Compatibility
217 | 
218 | This standard introduces a new kind of token that is incompatible with tokens defined as ASAs.
219 | Applications that want to index, manage, or view tokens on Algorand will need to handle these new smart tokens as well as the already popular ASA implementation of tokens will need to add code to handle both, and existing smart contracts that handle ASA-based tokens will not work with these new smart contract tokens.
220 | 
221 | While this is a severe backward incompatibility, smart contract tokens are necessary to provide richer and more diverse functionality for tokens.
222 | 
223 | ## Security Considerations
224 | 
225 | The fact that anybody can create a new implementation of a smart contract tokens standard opens the door for many of those implementations to contain security bugs.
226 | Additionally, malicious token implementations could contain hidden anti-features unexpected by users.
227 | As with other smart contract domains, it is difficult for users to verify or understand the security properties of smart contract tokens.
228 | This is a tradeoff compared with ASA tokens, which share a smaller set of security properties that are easier to validate to gain the possibility of adding novel features.
229 | 
230 | ## Copyright
231 | 
232 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
233 | 
```
Page 29/93FirstPrevNextLast