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

# Directory Structure

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

# Files

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:LogicSig.md:
--------------------------------------------------------------------------------

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / LogicSig
  2 | 
  3 | # Class: LogicSig
  4 | 
  5 | LogicSig implementation
  6 | 
  7 | LogicSig cannot sign transactions in all cases.  Instead, use LogicSigAccount as a safe, general purpose signing mechanism.  Since LogicSig does not track the provided signature's public key, LogicSig cannot sign transactions when delegated to a non-multisig account _and_ the sender is not the delegating account.
  8 | 
  9 | ## Implements
 10 | 
 11 | - `LogicSigStorageStructure`
 12 | 
 13 | ## Table of contents
 14 | 
 15 | ### Constructors
 16 | 
 17 | - [constructor](LogicSig.md#constructor)
 18 | 
 19 | ### Properties
 20 | 
 21 | - [args](LogicSig.md#args)
 22 | - [logic](LogicSig.md#logic)
 23 | - [msig](LogicSig.md#msig)
 24 | - [sig](LogicSig.md#sig)
 25 | - [tag](LogicSig.md#tag)
 26 | 
 27 | ### Methods
 28 | 
 29 | - [address](LogicSig.md#address)
 30 | - [appendToMultisig](LogicSig.md#appendtomultisig)
 31 | - [get\_obj\_for\_encoding](LogicSig.md#get_obj_for_encoding)
 32 | - [sign](LogicSig.md#sign)
 33 | - [signProgram](LogicSig.md#signprogram)
 34 | - [singleSignMultisig](LogicSig.md#singlesignmultisig)
 35 | - [toByte](LogicSig.md#tobyte)
 36 | - [verify](LogicSig.md#verify)
 37 | - [fromByte](LogicSig.md#frombyte)
 38 | - [from\_obj\_for\_encoding](LogicSig.md#from_obj_for_encoding)
 39 | 
 40 | ## Constructors
 41 | 
 42 | ### constructor
 43 | 
 44 | • **new LogicSig**(`program`, `programArgs?`)
 45 | 
 46 | #### Parameters
 47 | 
 48 | | Name | Type |
 49 | | :------ | :------ |
 50 | | `program` | `Uint8Array` |
 51 | | `programArgs?` | (`Uint8Array` \| `Buffer`)[] |
 52 | 
 53 | #### Defined in
 54 | 
 55 | logicsig.ts:69
 56 | 
 57 | ## Properties
 58 | 
 59 | ### args
 60 | 
 61 | • **args**: `Uint8Array`[]
 62 | 
 63 | #### Implementation of
 64 | 
 65 | LogicSigStorageStructure.args
 66 | 
 67 | #### Defined in
 68 | 
 69 | logicsig.ts:65
 70 | 
 71 | ___
 72 | 
 73 | ### logic
 74 | 
 75 | • **logic**: `Uint8Array`
 76 | 
 77 | #### Implementation of
 78 | 
 79 | LogicSigStorageStructure.logic
 80 | 
 81 | #### Defined in
 82 | 
 83 | logicsig.ts:64
 84 | 
 85 | ___
 86 | 
 87 | ### msig
 88 | 
 89 | • `Optional` **msig**: [`EncodedMultisig`](../interfaces/EncodedMultisig.md)
 90 | 
 91 | #### Implementation of
 92 | 
 93 | LogicSigStorageStructure.msig
 94 | 
 95 | #### Defined in
 96 | 
 97 | logicsig.ts:67
 98 | 
 99 | ___
100 | 
101 | ### sig
102 | 
103 | • `Optional` **sig**: `Uint8Array`
104 | 
105 | #### Implementation of
106 | 
107 | LogicSigStorageStructure.sig
108 | 
109 | #### Defined in
110 | 
111 | logicsig.ts:66
112 | 
113 | ___
114 | 
115 | ### tag
116 | 
117 | • **tag**: `Buffer`
118 | 
119 | #### Defined in
120 | 
121 | logicsig.ts:62
122 | 
123 | ## Methods
124 | 
125 | ### address
126 | 
127 | ▸ **address**(): `string`
128 | 
129 | Compute hash of the logic sig program (that is the same as escrow account address) as string address
130 | 
131 | #### Returns
132 | 
133 | `string`
134 | 
135 | String representation of the address
136 | 
137 | #### Defined in
138 | 
139 | logicsig.ts:152
140 | 
141 | ___
142 | 
143 | ### appendToMultisig
144 | 
145 | ▸ **appendToMultisig**(`secretKey`): `void`
146 | 
147 | Appends a signature to multi signature
148 | 
149 | #### Parameters
150 | 
151 | | Name | Type | Description |
152 | | :------ | :------ | :------ |
153 | | `secretKey` | `Uint8Array` | Secret key to sign with |
154 | 
155 | #### Returns
156 | 
157 | `void`
158 | 
159 | #### Defined in
160 | 
161 | logicsig.ts:186
162 | 
163 | ___
164 | 
165 | ### get\_obj\_for\_encoding
166 | 
167 | ▸ **get_obj_for_encoding**(): [`EncodedLogicSig`](../interfaces/EncodedLogicSig.md)
168 | 
169 | #### Returns
170 | 
171 | [`EncodedLogicSig`](../interfaces/EncodedLogicSig.md)
172 | 
173 | #### Defined in
174 | 
175 | logicsig.ts:96
176 | 
177 | ___
178 | 
179 | ### sign
180 | 
181 | ▸ **sign**(`secretKey`, `msig?`): `void`
182 | 
183 | Creates signature (if no msig provided) or multi signature otherwise
184 | 
185 | #### Parameters
186 | 
187 | | Name | Type | Description |
188 | | :------ | :------ | :------ |
189 | | `secretKey` | `Uint8Array` | Secret key to sign with |
190 | | `msig?` | [`MultisigMetadata`](../interfaces/MultisigMetadata.md) | Multisig account as {version, threshold, addrs} |
191 | 
192 | #### Returns
193 | 
194 | `void`
195 | 
196 | #### Defined in
197 | 
198 | logicsig.ts:163
199 | 
200 | ___
201 | 
202 | ### signProgram
203 | 
204 | ▸ **signProgram**(`secretKey`): `Uint8Array`
205 | 
206 | #### Parameters
207 | 
208 | | Name | Type |
209 | | :------ | :------ |
210 | | `secretKey` | `Uint8Array` |
211 | 
212 | #### Returns
213 | 
214 | `Uint8Array`
215 | 
216 | #### Defined in
217 | 
218 | logicsig.ts:194
219 | 
220 | ___
221 | 
222 | ### singleSignMultisig
223 | 
224 | ▸ **singleSignMultisig**(`secretKey`, `msig`): [sig: Uint8Array, index: number]
225 | 
226 | #### Parameters
227 | 
228 | | Name | Type |
229 | | :------ | :------ |
230 | | `secretKey` | `Uint8Array` |
231 | | `msig` | [`EncodedMultisig`](../interfaces/EncodedMultisig.md) |
232 | 
233 | #### Returns
234 | 
235 | [sig: Uint8Array, index: number]
236 | 
237 | #### Defined in
238 | 
239 | logicsig.ts:200
240 | 
241 | ___
242 | 
243 | ### toByte
244 | 
245 | ▸ **toByte**(): `Uint8Array`
246 | 
247 | #### Returns
248 | 
249 | `Uint8Array`
250 | 
251 | #### Defined in
252 | 
253 | logicsig.ts:220
254 | 
255 | ___
256 | 
257 | ### verify
258 | 
259 | ▸ **verify**(`publicKey`): `boolean`
260 | 
261 | Performs signature verification
262 | 
263 | #### Parameters
264 | 
265 | | Name | Type | Description |
266 | | :------ | :------ | :------ |
267 | | `publicKey` | `Uint8Array` | Verification key (derived from sender address or escrow address) |
268 | 
269 | #### Returns
270 | 
271 | `boolean`
272 | 
273 | #### Defined in
274 | 
275 | logicsig.ts:123
276 | 
277 | ___
278 | 
279 | ### fromByte
280 | 
281 | ▸ `Static` **fromByte**(`encoded`): [`LogicSig`](LogicSig.md)
282 | 
283 | #### Parameters
284 | 
285 | | Name | Type |
286 | | :------ | :------ |
287 | | `encoded` | `ArrayLike`\<`any`\> |
288 | 
289 | #### Returns
290 | 
291 | [`LogicSig`](LogicSig.md)
292 | 
293 | #### Defined in
294 | 
295 | logicsig.ts:224
296 | 
297 | ___
298 | 
299 | ### from\_obj\_for\_encoding
300 | 
301 | ▸ `Static` **from_obj_for_encoding**(`encoded`): [`LogicSig`](LogicSig.md)
302 | 
303 | #### Parameters
304 | 
305 | | Name | Type |
306 | | :------ | :------ |
307 | | `encoded` | [`EncodedLogicSig`](../interfaces/EncodedLogicSig.md) |
308 | 
309 | #### Returns
310 | 
311 | [`LogicSig`](LogicSig.md)
312 | 
313 | #### Defined in
314 | 
315 | logicsig.ts:112
316 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:modules:modelsv2.md:
--------------------------------------------------------------------------------

```markdown
 1 | [algosdk](../README.md) / [Exports](../modules.md) / modelsv2
 2 | 
 3 | # Namespace: modelsv2
 4 | 
 5 | ## Table of contents
 6 | 
 7 | ### Classes
 8 | 
 9 | - [Account](../classes/modelsv2.Account.md)
10 | - [AccountApplicationResponse](../classes/modelsv2.AccountApplicationResponse.md)
11 | - [AccountAssetHolding](../classes/modelsv2.AccountAssetHolding.md)
12 | - [AccountAssetResponse](../classes/modelsv2.AccountAssetResponse.md)
13 | - [AccountAssetsInformationResponse](../classes/modelsv2.AccountAssetsInformationResponse.md)
14 | - [AccountParticipation](../classes/modelsv2.AccountParticipation.md)
15 | - [AccountStateDelta](../classes/modelsv2.AccountStateDelta.md)
16 | - [AppCallLogs](../classes/modelsv2.AppCallLogs.md)
17 | - [Application](../classes/modelsv2.Application.md)
18 | - [ApplicationInitialStates](../classes/modelsv2.ApplicationInitialStates.md)
19 | - [ApplicationKVStorage](../classes/modelsv2.ApplicationKVStorage.md)
20 | - [ApplicationLocalReference](../classes/modelsv2.ApplicationLocalReference.md)
21 | - [ApplicationLocalState](../classes/modelsv2.ApplicationLocalState.md)
22 | - [ApplicationParams](../classes/modelsv2.ApplicationParams.md)
23 | - [ApplicationStateOperation](../classes/modelsv2.ApplicationStateOperation.md)
24 | - [ApplicationStateSchema](../classes/modelsv2.ApplicationStateSchema.md)
25 | - [Asset](../classes/modelsv2.Asset.md)
26 | - [AssetHolding](../classes/modelsv2.AssetHolding.md)
27 | - [AssetHoldingReference](../classes/modelsv2.AssetHoldingReference.md)
28 | - [AssetParams](../classes/modelsv2.AssetParams.md)
29 | - [AvmKeyValue](../classes/modelsv2.AvmKeyValue.md)
30 | - [AvmValue](../classes/modelsv2.AvmValue.md)
31 | - [BlockHashResponse](../classes/modelsv2.BlockHashResponse.md)
32 | - [BlockLogsResponse](../classes/modelsv2.BlockLogsResponse.md)
33 | - [BlockResponse](../classes/modelsv2.BlockResponse.md)
34 | - [BlockTxidsResponse](../classes/modelsv2.BlockTxidsResponse.md)
35 | - [Box](../classes/modelsv2.Box.md)
36 | - [BoxDescriptor](../classes/modelsv2.BoxDescriptor.md)
37 | - [BoxReference](../classes/modelsv2.BoxReference.md)
38 | - [BoxesResponse](../classes/modelsv2.BoxesResponse.md)
39 | - [BuildVersion](../classes/modelsv2.BuildVersion.md)
40 | - [CompileResponse](../classes/modelsv2.CompileResponse.md)
41 | - [DisassembleResponse](../classes/modelsv2.DisassembleResponse.md)
42 | - [DryrunRequest](../classes/modelsv2.DryrunRequest.md)
43 | - [DryrunResponse](../classes/modelsv2.DryrunResponse.md)
44 | - [DryrunSource](../classes/modelsv2.DryrunSource.md)
45 | - [DryrunState](../classes/modelsv2.DryrunState.md)
46 | - [DryrunTxnResult](../classes/modelsv2.DryrunTxnResult.md)
47 | - [ErrorResponse](../classes/modelsv2.ErrorResponse.md)
48 | - [EvalDelta](../classes/modelsv2.EvalDelta.md)
49 | - [EvalDeltaKeyValue](../classes/modelsv2.EvalDeltaKeyValue.md)
50 | - [GetBlockTimeStampOffsetResponse](../classes/modelsv2.GetBlockTimeStampOffsetResponse.md)
51 | - [GetSyncRoundResponse](../classes/modelsv2.GetSyncRoundResponse.md)
52 | - [KvDelta](../classes/modelsv2.KvDelta.md)
53 | - [LedgerStateDeltaForTransactionGroup](../classes/modelsv2.LedgerStateDeltaForTransactionGroup.md)
54 | - [LightBlockHeaderProof](../classes/modelsv2.LightBlockHeaderProof.md)
55 | - [NodeStatusResponse](../classes/modelsv2.NodeStatusResponse.md)
56 | - [PendingTransactionResponse](../classes/modelsv2.PendingTransactionResponse.md)
57 | - [PendingTransactionsResponse](../classes/modelsv2.PendingTransactionsResponse.md)
58 | - [PostTransactionsResponse](../classes/modelsv2.PostTransactionsResponse.md)
59 | - [ScratchChange](../classes/modelsv2.ScratchChange.md)
60 | - [SimulateInitialStates](../classes/modelsv2.SimulateInitialStates.md)
61 | - [SimulateRequest](../classes/modelsv2.SimulateRequest.md)
62 | - [SimulateRequestTransactionGroup](../classes/modelsv2.SimulateRequestTransactionGroup.md)
63 | - [SimulateResponse](../classes/modelsv2.SimulateResponse.md)
64 | - [SimulateTraceConfig](../classes/modelsv2.SimulateTraceConfig.md)
65 | - [SimulateTransactionGroupResult](../classes/modelsv2.SimulateTransactionGroupResult.md)
66 | - [SimulateTransactionResult](../classes/modelsv2.SimulateTransactionResult.md)
67 | - [SimulateUnnamedResourcesAccessed](../classes/modelsv2.SimulateUnnamedResourcesAccessed.md)
68 | - [SimulationEvalOverrides](../classes/modelsv2.SimulationEvalOverrides.md)
69 | - [SimulationOpcodeTraceUnit](../classes/modelsv2.SimulationOpcodeTraceUnit.md)
70 | - [SimulationTransactionExecTrace](../classes/modelsv2.SimulationTransactionExecTrace.md)
71 | - [StateProof](../classes/modelsv2.StateProof.md)
72 | - [StateProofMessage](../classes/modelsv2.StateProofMessage.md)
73 | - [SupplyResponse](../classes/modelsv2.SupplyResponse.md)
74 | - [TealKeyValue](../classes/modelsv2.TealKeyValue.md)
75 | - [TealValue](../classes/modelsv2.TealValue.md)
76 | - [TransactionGroupLedgerStateDeltasForRoundResponse](../classes/modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md)
77 | - [TransactionParametersResponse](../classes/modelsv2.TransactionParametersResponse.md)
78 | - [TransactionProofResponse](../classes/modelsv2.TransactionProofResponse.md)
79 | - [Version](../classes/modelsv2.Version.md)
80 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:control_flow.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Control Flow in Algorand Smart Contracts
  2 | 
  3 | This guide demonstrates the various control flow structures available in Algorand Python smart contracts, including conditional statements, loops, and pattern matching.
  4 | 
  5 | ## Conditional Statements (If-Else)
  6 | 
  7 | ```python
  8 | from algopy import ARC4Contract, String, UInt64, arc4
  9 | 
 10 | class IfElseExample(ARC4Contract):
 11 |     @arc4.abimethod
 12 |     def is_rich(self, account_balance: UInt64) -> String:
 13 |         if account_balance > 1000:
 14 |             return String("This account is rich!")
 15 |         elif account_balance > 100:
 16 |             return String("This account is doing well.")
 17 |         else:
 18 |             return String("This account is poor :(")
 19 | 
 20 |     @arc4.abimethod
 21 |     def is_even(self, number: UInt64) -> String:
 22 |         # Ternary operator example
 23 |         return String("Even") if number % 2 == 0 else String("Odd")
 24 | ```
 25 | 
 26 | ### Key Points about Conditionals
 27 | - Standard if-elif-else structure is supported
 28 | - Conditions must evaluate to boolean values
 29 | - Ternary operator (`value_if_true if condition else value_if_false`) is supported
 30 | - Type safety is enforced for return values
 31 | 
 32 | ## For Loops
 33 | 
 34 | ```python
 35 | import typing as t
 36 | from algopy import ARC4Contract, UInt64, arc4, uenumerate, urange
 37 | 
 38 | # Define a static array type
 39 | FourArray: t.TypeAlias = arc4.StaticArray[arc4.UInt8, t.Literal[4]]
 40 | 
 41 | class ForLoopsExample(ARC4Contract):
 42 |     @arc4.abimethod
 43 |     def for_loop(self) -> FourArray:
 44 |         array = FourArray(arc4.UInt8(0), arc4.UInt8(0), arc4.UInt8(0), arc4.UInt8(0))
 45 | 
 46 |         # Enumerate with reversed range
 47 |         for index, item in uenumerate(reversed(urange(4))):  # [3, 2, 1, 0]
 48 |             array[index] = arc4.UInt8(item)
 49 | 
 50 |         # Simple range iteration
 51 |         x = UInt64(0)
 52 |         for item in urange(1, 5):  # [1, 2, 3, 4]
 53 |             x += item
 54 | 
 55 |         assert x == 10
 56 |         return array
 57 | ```
 58 | 
 59 | ### Key Points about For Loops
 60 | - Uses `urange` for unsigned integer ranges
 61 | - `uenumerate` provides index and value pairs
 62 | - Supports iteration over static arrays
 63 | - Can use `reversed` with `urange`
 64 | - Loop variables must be properly typed
 65 | 
 66 | ## Match Statements (Pattern Matching)
 67 | 
 68 | ```python
 69 | class MatchStatements(ARC4Contract):
 70 |     @arc4.abimethod
 71 |     def get_day(self, date: UInt64) -> String:
 72 |         match date:
 73 |             case UInt64(0):
 74 |                 return String("Monday")
 75 |             case UInt64(1):
 76 |                 return String("Tuesday")
 77 |             case UInt64(2):
 78 |                 return String("Wednesday")
 79 |             case UInt64(3):
 80 |                 return String("Thursday")
 81 |             case UInt64(4):
 82 |                 return String("Friday")
 83 |             case UInt64(5):
 84 |                 return String("Saturday")
 85 |             case UInt64(6):
 86 |                 return String("Sunday")
 87 |             case _:
 88 |                 return String("Invalid day")
 89 | ```
 90 | 
 91 | ### Key Points about Match Statements
 92 | - Similar to switch statements in other languages
 93 | - Cases must be exhaustive
 94 | - Wildcard pattern (`_`) catches all unmatched cases
 95 | - Values in cases must match the type being matched
 96 | - Each case must return consistent types
 97 | 
 98 | ## While Loops
 99 | 
100 | ```python
101 | class WhileLoopExample(ARC4Contract):
102 |     @arc4.abimethod
103 |     def loop(self) -> UInt64:
104 |         num = UInt64(10)
105 |         loop_count = UInt64(0)
106 | 
107 |         while num > 0:
108 |             if num > 5:
109 |                 num -= 1
110 |                 loop_count += 1
111 |                 continue
112 | 
113 |             num -= 2
114 |             loop_count += 1
115 | 
116 |             if num == 1:
117 |                 break
118 | 
119 |         return loop_count
120 | ```
121 | 
122 | ### Key Points about While Loops
123 | - Condition must evaluate to a boolean
124 | - Supports `break` to exit the loop
125 | - Supports `continue` to skip to next iteration
126 | - Variables modified in loop must be properly typed
127 | - Be careful with infinite loops (they will fail)
128 | 
129 | ## Best Practices
130 | 
131 | 1. **Type Safety**:
132 |    - Always use proper types for variables and return values
133 |    - Be explicit with type conversions
134 |    - Use type aliases for complex types
135 | 
136 | 2. **Loop Control**:
137 |    - Use appropriate loop structure for the task
138 |    - Avoid infinite loops
139 |    - Consider using `break` and `continue` for control flow
140 |    - Initialize counters and accumulators properly
141 | 
142 | 3. **Pattern Matching**:
143 |    - Make match statements exhaustive
144 |    - Use wildcard pattern (`_`) as last case
145 |    - Keep cases simple and readable
146 | 
147 | 4. **Conditionals**:
148 |    - Use clear, simple conditions
149 |    - Consider using ternary operator for simple if-else
150 |    - Ensure all branches return consistent types
151 | 
152 | 5. **Performance**:
153 |    - Keep loops efficient
154 |    - Avoid unnecessary iterations
155 |    - Use appropriate data structures
156 | 
157 | 6. **Code Organization**:
158 |    - Group related control structures
159 |    - Use meaningful variable names
160 |    - Add comments for complex logic
161 | 
162 | This guide demonstrates the various control flow structures available in Algorand Python smart contracts. Understanding and properly using these structures is essential for writing efficient and maintainable smart contracts.
163 | 
```

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

```markdown
  1 | ---
  2 | arc: 65
  3 | title: AVM Run Time Errors In Program
  4 | description: Informative AVM run time errors based on program bytecode
  5 | author: Cosimo Bassi (@cusma), Tasos Bitsios (@tasosbit), Steve Ferrigno (@nullun)
  6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/315
  7 | status: Final
  8 | type: Standards Track
  9 | category: ARC
 10 | created: 2024-10-09
 11 | ---
 12 | 
 13 | ## Abstract
 14 | 
 15 | This document introduces a convention for rising informative run time errors on
 16 | the Algorand Virtual Machine (AVM) directly from the program bytecode.
 17 | 
 18 | ## Motivation
 19 | 
 20 | The AVM does not offer native opcodes to catch and raise run time errors.
 21 | 
 22 | The lack of native error handling semantics could lead to fragmentation of tooling
 23 | and frictions for AVM clients, who are unable to retrieve informative and useful
 24 | hints about the occurred run time failures.
 25 | 
 26 | This ARC formalizes a convention to rise AVM run time errors based just on the program
 27 | bytecode.
 28 | 
 29 | ## Specification
 30 | 
 31 | The keywords "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**",
 32 | "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**"
 33 | in this document are to be interpreted as described in <a href="https://datatracker.ietf.org/doc/html/rfc2119">RFC 2119</a>.
 34 | 
 35 | > Notes like this are non-normative.
 36 | 
 37 | ### Error format
 38 | 
 39 | > The AVM programs bytecode have limited sized. In this convention, the errors are
 40 | > part of the bytecode, therefore it is good to mind errors' formatting and sizing.
 41 | 
 42 | > Errors consist of a _code_ and an optional _short message_.
 43 | 
 44 | Errors **MUST** be prefixed either with:
 45 | 
 46 | - `ERR:` for custom errors;
 47 | - `AER:` reserved for future ARC standard errors.
 48 | 
 49 | Errors **MUST** use `:` as domain separator.
 50 | 
 51 | It is **RECOMMENDED** to use `UTF-8` for the error bytes string encoding.
 52 | 
 53 | It is **RECOMMENDED** to use _short_ error messages.
 54 | 
 55 | It is **RECOMMENDED** to use <a href="https://en.wikipedia.org/wiki/Camel_case/">camel case</a>
 56 | for alphanumeric error codes.
 57 | 
 58 | It is **RECOMMENDED** to avoid error byte strings of _exactly_ 8 or 32 bytes.
 59 | 
 60 | ### In Program Errors
 61 | 
 62 | When a program wants to emit informative run time errors, directly from the bytecode,
 63 | it **MUST**:
 64 | 
 65 | 1. Push to the stack the bytes string containing the error;
 66 | 1. Execute the `log` opcode to use the bytes from the top of the stack;
 67 | 1. Execute the `err` opcode to immediately terminate the program.
 68 | 
 69 | Upon a program run time failure, the Algod API response contains both the failed
 70 | _program counter_ (`pc`) and the `logs` array with the _errors_.
 71 | 
 72 | The program **MAY** return multiple errors in the same failed execution.
 73 | 
 74 | The errors **MUST** be retrieved by:
 75 | 
 76 | 1. Decoding the `base64` elements of the `logs` array;
 77 | 1. Validating the decoded elements against the error regexp.
 78 | 
 79 | ### Error examples
 80 | 
 81 | > Error conforming this specification are always prefixed with `ERR:`.
 82 | 
 83 | Error with a _numeric code_: `ERR:042`.
 84 | 
 85 | Error with an _alphanumeric code_: `ERR:BadRequest`.
 86 | 
 87 | Error with a _numeric code_ and _short message_: `ERR:042:AFunnyError`.
 88 | 
 89 | ### Program example
 90 | 
 91 | The following program example raises the error `ERR:001:Invalid Method` for any
 92 | application call to methods different from `m1()void`.
 93 | 
 94 | ```teal
 95 | #pragma version 10
 96 | 
 97 | txn ApplicationID
 98 | bz end
 99 | 
100 | method "m1()void"
101 | txn ApplicationArgs 0
102 | match method1
103 | byte "ERR:001:Invalid Method"
104 | log
105 | err
106 | 
107 | method1:
108 | b end
109 | 
110 | end:
111 | int 1
112 | ```
113 | 
114 | Full Algod API response of a failed execution:
115 | 
116 | ```json
117 | {
118 |     "data": {
119 |         "app-index":1004,
120 |         "eval-states": [
121 |             {
122 |                 "logs": ["RVJSOjAwMTpJbnZhbGlkIE1ldGhvZA=="]
123 |             }
124 |         ],
125 |         "group-index":0,
126 |         "pc":41
127 |     },
128 |     "message":"TransactionPool.Remember: transaction ESI4GHAZY46MCUCLPBSB5HBRZPGO6V7DDUM5XKMNVPIRJK6DDAGQ: logic eval error: err opcode executed. Details: app=1004, pc=41"
129 | }
130 | ```
131 | 
132 | The `logs` array contains the `base64` encoded error `ERR:001:Invalid Method`.
133 | 
134 | The `logs` array **MAY** contain elements that are not errors (as specified by the
135 | regexp).
136 | 
137 | It is **NOT RECOMMENDED** to use the `message` field to retrieve errors.
138 | 
139 | ### AVM Compilers
140 | 
141 | AVM compilers (and related tools) **SHOULD** provide two error compiling options:
142 | 
143 | 1. The one specified in this ARC as **default**;
144 | 1. The one specified in [ARC-56](./arc-0056.md) as fallback, if compiled bytecode
145 | size exceeds the AVM limits.
146 | 
147 | > Compilers **MAY** optimize for program bytecode size by storing the error prefixes
148 | in the `bytecblock` and concatenating the error message at the cost of some extra
149 | opcodes.
150 | 
151 | ## Rationale
152 | 
153 | This convention for AVM run time errors presents the following PROS and CONS.
154 | 
155 | **PROS:**
156 | - No additional artifacts required to return informative run time errors;
157 | - Errors are directly returned in the Algod API response, which can be filtered
158 | with the specified error regexp.
159 | 
160 | **CONS:**
161 | - Errors consume program bytecode size.
162 | 
163 | ## Security Considerations
164 | 
165 | > Not applicable.
166 | 
167 | ## Copyright
168 | 
169 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
170 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:python:testing:docs:faq.md:
--------------------------------------------------------------------------------

```markdown
 1 | # FAQ
 2 | 
 3 | ## What is a Test Context?
 4 | 
 5 | A Test Context is a context manager that provides a simulated Algorand environment for testing Python smart contracts. It allows developers to create and manipulate a virtual Algorand ecosystem for testing purposes. For more details, see the [Test Context section](testing-guide/concepts.md#test-context) in our documentation.
 6 | 
 7 | ## What is the Algorand Virtual Machine (AVM)?
 8 | 
 9 | The Algorand Virtual Machine (AVM) is the runtime environment for Algorand smart contracts. It executes the compiled code of smart contracts on the Algorand blockchain. To learn more about the AVM, visit the [official Algorand documentation](https://developer.algorand.org/docs/get-details/dapps/avm/).
10 | 
11 | ## What are Operational Codes in Algorand?
12 | 
13 | Operational Codes, or opcodes, are AVM instructions that are executed directly by the AVM. In the context of Algorand Python testing, these opcodes are provided by `algopy` stubs and are either emulated, implemented, or mocked by `algorand-python-testing`. For a comprehensive list of opcodes, refer to the [Algorand Developer Documentation](https://developer.algorand.org/docs/get-details/dapps/avm/teal/opcodes/?from_query=OPcodes#template-modal-overlay).
14 | 
15 | ## What are Value Generators?
16 | 
17 | Value Generators are helper methods that generate randomized values for testing when the specific value of the tested type is not important. In the context of Algorand Python testing, these are represented by property on the context manager, accessed via `any.*` (or `any.arc4.*`, `any.txn.*`. in the case of ARC 4 types). To understand how to use Value Generators effectively, check out our [Value Generators section](testing-guide/concepts.md#value-generators) in the documentation.
18 | 
19 | ## What are the limitations of the Algorand Python Testing framework?
20 | 
21 | The Algorand Python Testing framework emulates the Algorand Virtual Machine (AVM) for unit testing Algorand Python smart contracts without interacting with the real Algorand Network. However, it has some limitations due to its scope and purpose:
22 | 
23 | 1. Simplified balance tracking and transaction validation
24 | 2. No consensus mechanism or AVM network operations simulation
25 | 3. Absence of a strict opcode budget system
26 | 4. Certain cryptographic operations are mocked or simplified
27 | 5. No state proof generation or verification
28 | 
29 | For scenarios where these limitations are crucial, it's recommended to pair this framework with integration testing. If you have a solid reason to justify introducing new emulated behaviour, please open an issue or contribute to the project on [Github](https://github.com/algorandfoundation/algorand-python-testing).
30 | 
31 | ## How does balance tracking work in the testing framework?
32 | 
33 | The framework uses simplified balance tracking and transaction validation. For scenarios where precise balance or fee verification is important, it's recommended to complement unit tests with integration testing.
34 | 
35 | ## Does the framework simulate the entire AVM network?
36 | 
37 | No, the framework does not simulate the entire AVM network or consensus mechanism. It focuses on emulating the parts of the AVM relevant to unit testing smart contracts.
38 | 
39 | ## How does the framework handle opcode budgets?
40 | 
41 | The framework does not implement a strict opcode budget system. For scenarios where validating opcode budget is crucial, it's recommended to use integration testing alongside this framework.
42 | 
43 | ## Are all cryptographic operations fully implemented?
44 | 
45 | Some cryptographic operations are mocked or simplified in the framework. For a detailed list of which operations are mocked, refer to the _mockable_ types under the [coverage](./coverage.md) section.
46 | 
47 | ## Can I use this framework for security-critical validations?
48 | 
49 | While this framework is useful for unit testing and local development, it should not be the only tool used for security-critical validations or performance benchmarking. It's designed to approximate AVM behavior for common scenarios. Always complement your testing with additional integration testing options available in `algokit`, where you can test against real localnet or testnet environments.
50 | 
51 | ## Is there an example of how to use this framework alongside integration tests?
52 | 
53 | Yes, the `algokit-python-template`, accessible via `algokit init`, provides a working example of how to structure `algorand-python-testing` along with regular integration tests against localnet.
54 | 
55 | ```{hint}
56 | An `algokit-python-template` accessible via `algokit init -t python`, provides a comprehensive and customizable working example of how to structure `algorand-python-testing` along with regular integration tests against localnet.
57 | ```
58 | 
59 | ## Is it compatible with `pytest`?
60 | 
61 | Yes, it is compatible with `pytest` and _any_ other python testing framework as its agnostic of the testing framework as long as its python. If you spot incompatibility with a certain tool, please open an issue or contribute to the project on [Github](https://github.com/algorandfoundation/algorand-python-testing).
62 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:get-started:basics:what_is_blockchain.md:
--------------------------------------------------------------------------------

```markdown
 1 | title: What is a blockchain? 
 2 | 
 3 | <center>
 4 | ![Blockchain versus traditional database](../../imgs/basics-blockchain-vs-traditional.png){: style="width:500px" align=center }
 5 | </center>
 6 | 
 7 | A blockchain is a public ledger (or file) of transactional data, distributed across multiple computers (“nodes”) in a network. All of these nodes work together, using the same set of software and rules, to verify transactions to add to the finalized ledger. 
 8 | 
 9 | <center>
10 | ![Woman bids on blockchain](../../imgs/basics-woman-bid-blockchain.png){: style="width:500px" align=center }
11 | <figcaption style="font-size:12px">A woman places a bid on a house using software built on top of a decentralized blockchain.</figcaption>
12 | </center>
13 | 
14 | Compare this to a traditional ledger of transactional data that may live in a single database on a few computers that only certain people have access to.
15 | 
16 | <center>
17 | ![Woman bids in traditional world](../../imgs/basics-woman-bid-traditional.png){: width='500px' }
18 | <figcaption style="font-size:12px">A woman places a bid on a house using a private agency.</figcaption>
19 | </center>
20 | 
21 | The “block” part of “blockchain” refers to a set of transactions that are proposed and verified by the other nodes and eventually added to the ledger. The “chain” part, refers to the fact that each block of transactions also contains proof (a cryptographic hash) of what was in the previous block. This pattern of capturing the previous block’s data in the current block continues all the way back to the start of the network (the genesis block) creating a publicly verifiable and tamperproof record of all transactions, ever. 
22 | 
23 | <center>
24 | ![Blockchain diagram](../../imgs/blockchain-diagram.png){: width='500px' }
25 | </center>
26 | 
27 | Practically, this means that if you try to change even a single record, anywhere in the history of a blockchain, it will be evident and rejected by the network nodes. 
28 | 
29 | <center>
30 | ![Man attempts to change blockchain record, unsuccessfully](../../imgs/basics-immutable.png){: width='500px' }
31 | <figcaption style="font-size:12px">A malicious user attempts to change a past blockchain record, unsuccessfully.</figcaption>
32 | </center>
33 | 
34 | Compare this to a traditional ledger where a change in a database is entrusted to a limited group and can easily be manipulated either through malicious intent or simply error. 
35 | 
36 | <center>
37 | ![Traditional bid error](../../imgs/basics-traditional-error.png){: width='500px' }
38 | <figcaption style="font-size:12px">Example of how a centralized system could unintentionally disqualify user participation.</figcaption>
39 | </center>
40 | 
41 | 
42 | 
43 | But how do blocks get added to the chain in the first place? Each node runs software that instructs them how to verify transactions and add new blocks to the chain. These instructions are collectively referred to as the “consensus protocol”.  The nature of these instructions are one of the main distinguishing factors of different blockchains. We will learn more about Algorand’s consensus protocol and how it differs from others’ later in this guide. 
44 | 
45 | # How will blockchain benefit my application?
46 | 
47 | _Blockchain, at its core, is a technology that innovates on how we transfer value._ So, if your application exchanges value in some way, blockchain may be a candidate technology to bring your application to the next level. 
48 | 
49 | But before jumping in, it is important to understand specifically how it might benefit your application so that you can design a system that targets those benefits and doesn’t add unnecessary complexity to other parts of your application. This usually maps to thinking about which components to put “on-chain” versus “off-chain”.
50 | 
51 | Below are some of the characteristics of blockchains that make them attractive technologies for value-based applications. 
52 | 
53 | 
54 | <center>
55 | ![Blockchain properties](../../imgs/blockchain-properties.png)
56 | </center>
57 | 
58 | Not all of these may be important to your application or some may be more important than others, so a good first question to ask is: 
59 | 
60 | > “Which of these characteristics is an important property for my use case?” 
61 | 
62 | If you choose at least one, then ask:
63 |  
64 | > “Is that property lacking or insufficient in my current application design?” 
65 | 
66 | If the answer to the second question is “yes” to any or all of the properties you chose, then you’re in the right place.
67 | 
68 | For example, sending a payment across borders through a bank often takes days and is expensive since there are many intermediaries who are involved to ensure that the value is transferred securely. High **costs** and overall poor **efficiency** are the characteristics that stand out in this scenario and that blockchain could improve. That’s not to say that the other characteristics aren’t important. For example, we don’t want lower costs at the expense of security, but if security mattered alone we might say that the current process is good enough (assuming you trust the bank who is making the transfer). In this scenario, blockchain improves deficiencies in the system without making a tradeoff elsewhere.
69 | 
70 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.SimulateRequest.md:
--------------------------------------------------------------------------------

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / SimulateRequest
  2 | 
  3 | # Class: SimulateRequest
  4 | 
  5 | [modelsv2](../modules/modelsv2.md).SimulateRequest
  6 | 
  7 | Request type for simulation endpoint.
  8 | 
  9 | ## Hierarchy
 10 | 
 11 | - `default`
 12 | 
 13 |   ↳ **`SimulateRequest`**
 14 | 
 15 | ## Table of contents
 16 | 
 17 | ### Constructors
 18 | 
 19 | - [constructor](modelsv2.SimulateRequest.md#constructor)
 20 | 
 21 | ### Properties
 22 | 
 23 | - [allowEmptySignatures](modelsv2.SimulateRequest.md#allowemptysignatures)
 24 | - [allowMoreLogging](modelsv2.SimulateRequest.md#allowmorelogging)
 25 | - [allowUnnamedResources](modelsv2.SimulateRequest.md#allowunnamedresources)
 26 | - [attribute\_map](modelsv2.SimulateRequest.md#attribute_map)
 27 | - [execTraceConfig](modelsv2.SimulateRequest.md#exectraceconfig)
 28 | - [extraOpcodeBudget](modelsv2.SimulateRequest.md#extraopcodebudget)
 29 | - [fixSigners](modelsv2.SimulateRequest.md#fixsigners)
 30 | - [round](modelsv2.SimulateRequest.md#round)
 31 | - [txnGroups](modelsv2.SimulateRequest.md#txngroups)
 32 | 
 33 | ### Methods
 34 | 
 35 | - [get\_obj\_for\_encoding](modelsv2.SimulateRequest.md#get_obj_for_encoding)
 36 | - [from\_obj\_for\_encoding](modelsv2.SimulateRequest.md#from_obj_for_encoding)
 37 | 
 38 | ## Constructors
 39 | 
 40 | ### constructor
 41 | 
 42 | • **new SimulateRequest**(`«destructured»`)
 43 | 
 44 | Creates a new `SimulateRequest` object.
 45 | 
 46 | #### Parameters
 47 | 
 48 | | Name | Type |
 49 | | :------ | :------ |
 50 | | `«destructured»` | `Object` |
 51 | | › `allowEmptySignatures?` | `boolean` |
 52 | | › `allowMoreLogging?` | `boolean` |
 53 | | › `allowUnnamedResources?` | `boolean` |
 54 | | › `execTraceConfig?` | [`SimulateTraceConfig`](modelsv2.SimulateTraceConfig.md) |
 55 | | › `extraOpcodeBudget?` | `number` \| `bigint` |
 56 | | › `fixSigners?` | `boolean` |
 57 | | › `round?` | `number` \| `bigint` |
 58 | | › `txnGroups` | [`SimulateRequestTransactionGroup`](modelsv2.SimulateRequestTransactionGroup.md)[] |
 59 | 
 60 | #### Overrides
 61 | 
 62 | BaseModel.constructor
 63 | 
 64 | #### Defined in
 65 | 
 66 | client/v2/algod/models/types.ts:4317
 67 | 
 68 | ## Properties
 69 | 
 70 | ### allowEmptySignatures
 71 | 
 72 | • `Optional` **allowEmptySignatures**: `boolean`
 73 | 
 74 | Allows transactions without signatures to be simulated as if they had correct
 75 | signatures.
 76 | 
 77 | #### Defined in
 78 | 
 79 | client/v2/algod/models/types.ts:4265
 80 | 
 81 | ___
 82 | 
 83 | ### allowMoreLogging
 84 | 
 85 | • `Optional` **allowMoreLogging**: `boolean`
 86 | 
 87 | Lifts limits on log opcode usage during simulation.
 88 | 
 89 | #### Defined in
 90 | 
 91 | client/v2/algod/models/types.ts:4270
 92 | 
 93 | ___
 94 | 
 95 | ### allowUnnamedResources
 96 | 
 97 | • `Optional` **allowUnnamedResources**: `boolean`
 98 | 
 99 | Allows access to unnamed resources during simulation.
100 | 
101 | #### Defined in
102 | 
103 | client/v2/algod/models/types.ts:4275
104 | 
105 | ___
106 | 
107 | ### attribute\_map
108 | 
109 | • **attribute\_map**: `Record`\<`string`, `string`\>
110 | 
111 | #### Inherited from
112 | 
113 | BaseModel.attribute\_map
114 | 
115 | #### Defined in
116 | 
117 | client/v2/basemodel.ts:56
118 | 
119 | ___
120 | 
121 | ### execTraceConfig
122 | 
123 | • `Optional` **execTraceConfig**: [`SimulateTraceConfig`](modelsv2.SimulateTraceConfig.md)
124 | 
125 | An object that configures simulation execution trace.
126 | 
127 | #### Defined in
128 | 
129 | client/v2/algod/models/types.ts:4280
130 | 
131 | ___
132 | 
133 | ### extraOpcodeBudget
134 | 
135 | • `Optional` **extraOpcodeBudget**: `number` \| `bigint`
136 | 
137 | Applies extra opcode budget during simulation for each transaction group.
138 | 
139 | #### Defined in
140 | 
141 | client/v2/algod/models/types.ts:4285
142 | 
143 | ___
144 | 
145 | ### fixSigners
146 | 
147 | • `Optional` **fixSigners**: `boolean`
148 | 
149 | If true, signers for transactions that are missing signatures will be fixed
150 | during evaluation.
151 | 
152 | #### Defined in
153 | 
154 | client/v2/algod/models/types.ts:4291
155 | 
156 | ___
157 | 
158 | ### round
159 | 
160 | • `Optional` **round**: `number` \| `bigint`
161 | 
162 | If provided, specifies the round preceding the simulation. State changes through
163 | this round will be used to run this simulation. Usually only the 4 most recent
164 | rounds will be available (controlled by the node config value MaxAcctLookback).
165 | If not specified, defaults to the latest available round.
166 | 
167 | #### Defined in
168 | 
169 | client/v2/algod/models/types.ts:4299
170 | 
171 | ___
172 | 
173 | ### txnGroups
174 | 
175 | • **txnGroups**: [`SimulateRequestTransactionGroup`](modelsv2.SimulateRequestTransactionGroup.md)[]
176 | 
177 | The transaction groups to simulate.
178 | 
179 | #### Defined in
180 | 
181 | client/v2/algod/models/types.ts:4259
182 | 
183 | ## Methods
184 | 
185 | ### get\_obj\_for\_encoding
186 | 
187 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
188 | 
189 | Get an object ready for encoding to either JSON or msgpack.
190 | 
191 | #### Parameters
192 | 
193 | | Name | Type | Default value | Description |
194 | | :------ | :------ | :------ | :------ |
195 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
196 | 
197 | #### Returns
198 | 
199 | `Record`\<`string`, `any`\>
200 | 
201 | #### Inherited from
202 | 
203 | BaseModel.get\_obj\_for\_encoding
204 | 
205 | #### Defined in
206 | 
207 | client/v2/basemodel.ts:65
208 | 
209 | ___
210 | 
211 | ### from\_obj\_for\_encoding
212 | 
213 | ▸ `Static` **from_obj_for_encoding**(`data`): [`SimulateRequest`](modelsv2.SimulateRequest.md)
214 | 
215 | #### Parameters
216 | 
217 | | Name | Type |
218 | | :------ | :------ |
219 | | `data` | `Record`\<`string`, `any`\> |
220 | 
221 | #### Returns
222 | 
223 | [`SimulateRequest`](modelsv2.SimulateRequest.md)
224 | 
225 | #### Defined in
226 | 
227 | client/v2/algod/models/types.ts:4359
228 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/apiManager/algod/application.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
  2 | import { algodClient } from '../../../algorand-client.js';
  3 | import type { 
  4 |   Application,
  5 |   Box,
  6 |   BoxesResponse
  7 | } from 'algosdk/dist/types/client/v2/algod/models/types';
  8 | import algosdk from 'algosdk';
  9 | 
 10 | export const applicationTools = [
 11 |   {
 12 |     name: 'api_algod_get_application_by_id',
 13 |     description: 'Get application information',
 14 |     inputSchema: {
 15 |       type: 'object',
 16 |       properties: {
 17 |         appId: {
 18 |           type: 'integer',
 19 |           description: 'Application ID'
 20 |         }
 21 |       },
 22 |       required: ['appId']
 23 |     }
 24 |   },
 25 |   {
 26 |     name: 'api_algod_get_application_box',
 27 |     description: 'Get application box by name',
 28 |     inputSchema: {
 29 |       type: 'object',
 30 |       properties: {
 31 |         appId: {
 32 |           type: 'integer',
 33 |           description: 'Application ID'
 34 |         },
 35 |         boxName: {
 36 |           type: 'string',
 37 |           description: 'Box name. '
 38 |         }
 39 |       },
 40 |       required: ['appId', 'boxName']
 41 |     }
 42 |   },
 43 |   {
 44 |     name: 'api_algod_get_application_boxes',
 45 |     description: 'Get all application boxes',
 46 |     inputSchema: {
 47 |       type: 'object',
 48 |       properties: {
 49 |         appId: {
 50 |           type: 'integer',
 51 |           description: 'Application ID'
 52 |         },
 53 |         maxBoxes: {
 54 |           type: 'integer',
 55 |           description: 'Maximum number of boxes to return'
 56 |         }
 57 |       },
 58 |       required: ['appId']
 59 |     }
 60 |   }
 61 | ];
 62 | 
 63 | export async function getApplicationByID(appId: number): Promise<any> {
 64 |   try {
 65 |     console.log(`Fetching application info for ID ${appId}`);
 66 |     const response = await algodClient.getApplicationByID(appId).do() as any;
 67 |     console.log('Application response:', JSON.stringify(response, null, 2));
 68 |     return response;
 69 |   } catch (error) {
 70 |     console.error('Application fetch error:', error);
 71 |     if (error instanceof McpError) {
 72 |       throw error;
 73 |     }
 74 |     throw new McpError(
 75 |       ErrorCode.InternalError,
 76 |       `Failed to get application info: ${error instanceof Error ? error.message : String(error)}`
 77 |     );
 78 |   }
 79 | }
 80 | 
 81 | export async function getApplicationBoxByName(appId: number, boxName: string): Promise<Box> {
 82 |   try {
 83 |     let boxNameBytes: Buffer;
 84 | 
 85 |     // Check if string is a valid number
 86 |     if (!isNaN(Number(boxName))) {
 87 |       boxNameBytes = Buffer.from(boxName);
 88 |     }
 89 |     // Check if string is a valid Algorand address
 90 |     else if (algosdk.isValidAddress(boxName)) {
 91 |       boxNameBytes = Buffer.from(boxName);
 92 |     }
 93 |     // Try to decode as base64, if it fails then treat as regular string
 94 |     else {
 95 |       try {
 96 |         // Test if the string is valid base64
 97 |         Buffer.from(boxName, 'base64').toString('base64');
 98 |         // If we get here, it's valid base64
 99 |         boxNameBytes = Buffer.from(boxName, 'base64');
100 |       } catch {
101 |         // If base64 decoding fails, treat as regular string
102 |         boxNameBytes = Buffer.from(boxName);
103 |       }
104 |     }
105 | 
106 |     console.log('Box name bytes:', boxNameBytes);
107 |     const response = await algodClient.getApplicationBoxByName(appId, boxNameBytes).do() as Box;
108 |     console.log('Box response:', JSON.stringify(response, null, 2));
109 |     return response;
110 |   } catch (error) {
111 |     console.error('Box fetch error:', error);
112 |     console.error('Box name in error:', boxName);
113 |     if (error instanceof McpError) {
114 |       throw error;
115 |     }
116 |     throw new McpError(
117 |       ErrorCode.InternalError,
118 |       `Failed to get application box: ${error instanceof Error ? error.message : String(error)}`
119 |     );
120 |   }
121 | }
122 | 
123 | export async function getApplicationBoxes(appId: number, maxBoxes?: number): Promise<any> {
124 |   try {
125 |     console.log(`Fetching boxes for application ${appId}`);
126 |     let search = algodClient.getApplicationBoxes(appId);
127 |     if (maxBoxes !== undefined) {
128 |       search = search.max(maxBoxes);
129 |     }
130 |     const response = await search.do() as BoxesResponse;
131 |     console.log('Boxes response:', JSON.stringify(response, null, 2));
132 |     // Ensure the response has the correct structure with boxes array
133 |     return {
134 |       boxes: response.boxes || []
135 |     };
136 |   } catch (error) {
137 |     console.error('Boxes fetch error:', error);
138 |     if (error instanceof McpError) {
139 |       throw error;
140 |     }
141 |     throw new McpError(
142 |       ErrorCode.InternalError,
143 |       `Failed to get application boxes: ${error instanceof Error ? error.message : String(error)}`
144 |     );
145 |   }
146 | }
147 | 
148 | export async function handleApplicationTools(name: string, args: any): Promise<any> {
149 |   switch (name) {
150 |     case 'api_algod_get_application_by_id': {
151 |       const { appId } = args;
152 |       const info = await getApplicationByID(appId);
153 |       return info;
154 |     }
155 |     case 'api_algod_get_application_box': {
156 |       const { appId, boxName } = args;
157 |       const box = await getApplicationBoxByName(appId, boxName);
158 |       return box;
159 |     }
160 |     case 'api_algod_get_application_boxes': {
161 |       const { appId, maxBoxes } = args;
162 |       const boxes = await getApplicationBoxes(appId, maxBoxes);
163 |       return boxes;
164 |     }
165 |     default:
166 |       throw new McpError(
167 |         ErrorCode.MethodNotFound,
168 |         `Unknown tool: ${name}`
169 |       );
170 |   }
171 | }
172 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:classes:types_amount.AlgoAmount.md:
--------------------------------------------------------------------------------

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/amount](../modules/types_amount.md) / AlgoAmount
  2 | 
  3 | # Class: AlgoAmount
  4 | 
  5 | [types/amount](../modules/types_amount.md).AlgoAmount
  6 | 
  7 | Wrapper class to ensure safe, explicit conversion between µAlgo, Algo and numbers
  8 | 
  9 | ## Table of contents
 10 | 
 11 | ### Constructors
 12 | 
 13 | - [constructor](types_amount.AlgoAmount.md#constructor)
 14 | 
 15 | ### Properties
 16 | 
 17 | - [amountInMicroAlgo](types_amount.AlgoAmount.md#amountinmicroalgo)
 18 | 
 19 | ### Accessors
 20 | 
 21 | - [algo](types_amount.AlgoAmount.md#algo)
 22 | - [algos](types_amount.AlgoAmount.md#algos)
 23 | - [microAlgo](types_amount.AlgoAmount.md#microalgo)
 24 | - [microAlgos](types_amount.AlgoAmount.md#microalgos)
 25 | 
 26 | ### Methods
 27 | 
 28 | - [toString](types_amount.AlgoAmount.md#tostring)
 29 | - [valueOf](types_amount.AlgoAmount.md#valueof)
 30 | - [Algo](types_amount.AlgoAmount.md#algo-1)
 31 | - [Algos](types_amount.AlgoAmount.md#algos-1)
 32 | - [MicroAlgo](types_amount.AlgoAmount.md#microalgo-1)
 33 | - [MicroAlgos](types_amount.AlgoAmount.md#microalgos-1)
 34 | 
 35 | ## Constructors
 36 | 
 37 | ### constructor
 38 | 
 39 | • **new AlgoAmount**(`amount`): [`AlgoAmount`](types_amount.AlgoAmount.md)
 40 | 
 41 | #### Parameters
 42 | 
 43 | | Name | Type |
 44 | | :------ | :------ |
 45 | | `amount` | \{ `algos`: `number` \| `bigint`  } \| \{ `algo`: `number` \| `bigint`  } \| \{ `microAlgos`: `number` \| `bigint`  } \| \{ `microAlgo`: `number` \| `bigint`  } |
 46 | 
 47 | #### Returns
 48 | 
 49 | [`AlgoAmount`](types_amount.AlgoAmount.md)
 50 | 
 51 | #### Defined in
 52 | 
 53 | [src/types/amount.ts:27](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L27)
 54 | 
 55 | ## Properties
 56 | 
 57 | ### amountInMicroAlgo
 58 | 
 59 | • `Private` **amountInMicroAlgo**: `bigint`
 60 | 
 61 | #### Defined in
 62 | 
 63 | [src/types/amount.ts:5](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L5)
 64 | 
 65 | ## Accessors
 66 | 
 67 | ### algo
 68 | 
 69 | • `get` **algo**(): `number`
 70 | 
 71 | Return the amount as a number in Algo
 72 | 
 73 | #### Returns
 74 | 
 75 | `number`
 76 | 
 77 | #### Defined in
 78 | 
 79 | [src/types/amount.ts:23](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L23)
 80 | 
 81 | ___
 82 | 
 83 | ### algos
 84 | 
 85 | • `get` **algos**(): `number`
 86 | 
 87 | Return the amount as a number in Algo
 88 | 
 89 | #### Returns
 90 | 
 91 | `number`
 92 | 
 93 | #### Defined in
 94 | 
 95 | [src/types/amount.ts:18](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L18)
 96 | 
 97 | ___
 98 | 
 99 | ### microAlgo
100 | 
101 | • `get` **microAlgo**(): `bigint`
102 | 
103 | Return the amount as a number in µAlgo
104 | 
105 | #### Returns
106 | 
107 | `bigint`
108 | 
109 | #### Defined in
110 | 
111 | [src/types/amount.ts:13](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L13)
112 | 
113 | ___
114 | 
115 | ### microAlgos
116 | 
117 | • `get` **microAlgos**(): `bigint`
118 | 
119 | Return the amount as a number in µAlgo
120 | 
121 | #### Returns
122 | 
123 | `bigint`
124 | 
125 | #### Defined in
126 | 
127 | [src/types/amount.ts:8](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L8)
128 | 
129 | ## Methods
130 | 
131 | ### toString
132 | 
133 | ▸ **toString**(): `string`
134 | 
135 | #### Returns
136 | 
137 | `string`
138 | 
139 | #### Defined in
140 | 
141 | [src/types/amount.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L40)
142 | 
143 | ___
144 | 
145 | ### valueOf
146 | 
147 | ▸ **valueOf**(): `number`
148 | 
149 | valueOf allows you to use `AlgoAmount` in comparison operations such as `<` and `>=` etc.,
150 | but it's not recommended to use this to convert to a number, it's much safer to explicitly call
151 | the algos or microAlgos properties
152 | 
153 | #### Returns
154 | 
155 | `number`
156 | 
157 | #### Defined in
158 | 
159 | [src/types/amount.ts:48](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L48)
160 | 
161 | ___
162 | 
163 | ### Algo
164 | 
165 | ▸ **Algo**(`amount`): [`AlgoAmount`](types_amount.AlgoAmount.md)
166 | 
167 | Create a `AlgoAmount` object representing the given number of Algo
168 | 
169 | #### Parameters
170 | 
171 | | Name | Type |
172 | | :------ | :------ |
173 | | `amount` | `number` \| `bigint` |
174 | 
175 | #### Returns
176 | 
177 | [`AlgoAmount`](types_amount.AlgoAmount.md)
178 | 
179 | #### Defined in
180 | 
181 | [src/types/amount.ts:58](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L58)
182 | 
183 | ___
184 | 
185 | ### Algos
186 | 
187 | ▸ **Algos**(`amount`): [`AlgoAmount`](types_amount.AlgoAmount.md)
188 | 
189 | Create a `AlgoAmount` object representing the given number of Algo
190 | 
191 | #### Parameters
192 | 
193 | | Name | Type |
194 | | :------ | :------ |
195 | | `amount` | `number` \| `bigint` |
196 | 
197 | #### Returns
198 | 
199 | [`AlgoAmount`](types_amount.AlgoAmount.md)
200 | 
201 | #### Defined in
202 | 
203 | [src/types/amount.ts:53](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L53)
204 | 
205 | ___
206 | 
207 | ### MicroAlgo
208 | 
209 | ▸ **MicroAlgo**(`amount`): [`AlgoAmount`](types_amount.AlgoAmount.md)
210 | 
211 | Create a `AlgoAmount` object representing the given number of µAlgo
212 | 
213 | #### Parameters
214 | 
215 | | Name | Type |
216 | | :------ | :------ |
217 | | `amount` | `number` \| `bigint` |
218 | 
219 | #### Returns
220 | 
221 | [`AlgoAmount`](types_amount.AlgoAmount.md)
222 | 
223 | #### Defined in
224 | 
225 | [src/types/amount.ts:68](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L68)
226 | 
227 | ___
228 | 
229 | ### MicroAlgos
230 | 
231 | ▸ **MicroAlgos**(`amount`): [`AlgoAmount`](types_amount.AlgoAmount.md)
232 | 
233 | Create a `AlgoAmount` object representing the given number of µAlgo
234 | 
235 | #### Parameters
236 | 
237 | | Name | Type |
238 | | :------ | :------ |
239 | | `amount` | `number` \| `bigint` |
240 | 
241 | #### Returns
242 | 
243 | [`AlgoAmount`](types_amount.AlgoAmount.md)
244 | 
245 | #### Defined in
246 | 
247 | [src/types/amount.ts:63](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/amount.ts#L63)
248 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:python:markdown:capabilities:transfer.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Algo transfers
 2 | 
 3 | Algo transfers is a higher-order use case capability provided by AlgoKit Utils allows you to easily initiate algo transfers between accounts, including dispenser management and
 4 | idempotent account funding.
 5 | 
 6 | To see some usage examples check out the [automated tests](https://github.com/algorandfoundation/algokit-utils-py/blob/main/tests/test_transfer.py).
 7 | 
 8 | ## Transferring Algos
 9 | 
10 | The key function to facilitate Algo transfers is `algokit.transfer(algod_client, transfer_parameters)`, which returns the underlying `EnsureFundedResponse` and takes a `TransferParameters`
11 | 
12 | The following fields on `TransferParameters` are required to transfer ALGOs:
13 | 
14 | - `from_account`: The account or signer that will send the ALGOs
15 | - `to_address`: The address of the account that will receive the ALGOs
16 | - `micro_algos`: The amount of micro ALGOs to send
17 | 
18 | ## Ensuring minimum Algos
19 | 
20 | The ability to automatically fund an account to have a minimum amount of disposable ALGOs to spend is incredibly useful for automation and deployment scripts.
21 | The function to facilitate this is `ensure_funded(client, parameters)`, which takes an `EnsureBalanceParameters` instance and returns the underlying `EnsureFundedResponse` if a payment was made, a string if the dispenser API was used, or None otherwise.
22 | 
23 | The following fields on `EnsureBalanceParameters` are required to ensure minimum ALGOs:
24 | 
25 | - `account_to_fund`: The account address that will receive the ALGOs. This can be an `Account` instance, an `AccountTransactionSigner` instance, or a string.
26 | - `min_spending_balance_micro_algos`: The minimum balance of micro ALGOs that the account should have available to spend (i.e. on top of minimum balance requirement).
27 | - `min_funding_increment_micro_algos`: When issuing a funding amount, the minimum amount to transfer (avoids many small transfers if this gets called often on an active account). Default is 0.
28 | - `funding_source`: The account (with private key) or signer that will send the ALGOs. If not set, it will use `get_dispenser_account`. This can be an `Account` instance, an `AccountTransactionSigner` instance, [`TestNetDispenserApiClient`](https://github.com/algorandfoundation/algokit-utils-py/blob/main/docs/source/capabilities/dispenser-client.md) instance, or None.
29 | - `suggested_params`: (optional) Transaction parameters, an instance of `SuggestedParams`.
30 | - `note`: (optional) The transaction note, default is “Funding account to meet minimum requirement”.
31 | - `fee_micro_algos`: (optional) The flat fee you want to pay, useful for covering extra fees in a transaction group or app call.
32 | - `max_fee_micro_algos`: (optional) 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.
33 | 
34 | The function calls Algod to find the current balance and minimum balance requirement, gets the difference between those two numbers and checks to see if it’s more than the `min_spending_balance_micro_algos`. If so, it will send the difference, or the `min_funding_increment_micro_algos` if that is specified. If the account is on TestNet and `use_dispenser_api` is True, the [AlgoKit TestNet Dispenser API](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/dispenser.md) will be used to fund the account.
35 | 
36 | > Please note, if you are attempting to fund via Dispenser API, make sure to set `ALGOKIT_DISPENSER_ACCESS_TOKEN` environment variable prior to invoking `ensure_funded`. To generate the token refer to [AlgoKit CLI documentation](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/dispenser.md#login)
37 | 
38 | ## Transfering Assets
39 | 
40 | The key function to facilitate asset transfers is `transfer_asset(algod_client, transfer_parameters)`, which returns a `AssetTransferTxn` and takes a `TransferAssetParameters`:
41 | 
42 | The following fields on `TransferAssetParameters` are required to transfer assets:
43 | 
44 | - `from_account`: The account or signer that will send the ALGOs
45 | - `to_address`: The address of the account that will receive the ALGOs
46 | - `asset_id`: The asset id that will be transfered
47 | - `amount`: The amount to send as the smallest divisible unit value
48 | 
49 | ## Dispenser
50 | 
51 | If you want to programmatically send funds then you will often need a “dispenser” account that has a store of ALGOs that can be sent and a private key available for that dispenser account.
52 | 
53 | There is a standard AlgoKit Utils function to get access to a [dispenser account](account.md#id1): `get_dispenser_account`. When running against
54 | [LocalNet](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/localnet.md), the dispenser account can be automatically determined using the
55 | [Kmd API](https://developer.algorand.org/docs/rest-apis/kmd). When running against other networks like TestNet or MainNet the mnemonic of the dispenser account can be provided via environment
56 | variable `DISPENSER_MNEMONIC`
57 | 
58 | Please note that this does not refer to the [AlgoKit TestNet Dispenser API](dispenser-client.md) which is a separate abstraction that can be used to fund accounts on TestNet via dedicated API service.
59 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:types_app_deployer.md:
--------------------------------------------------------------------------------

```markdown
 1 | [@algorandfoundation/algokit-utils](../README.md) / types/app-deployer
 2 | 
 3 | # Module: types/app-deployer
 4 | 
 5 | ## Table of contents
 6 | 
 7 | ### Classes
 8 | 
 9 | - [AppDeployer](../classes/types_app_deployer.AppDeployer.md)
10 | 
11 | ### Interfaces
12 | 
13 | - [AppLookup](../interfaces/types_app_deployer.AppLookup.md)
14 | - [AppMetadata](../interfaces/types_app_deployer.AppMetadata.md)
15 | 
16 | ### Type Aliases
17 | 
18 | - [AppDeployParams](types_app_deployer.md#appdeployparams)
19 | - [AppDeployResult](types_app_deployer.md#appdeployresult)
20 | - [DeployAppDeleteMethodCall](types_app_deployer.md#deployappdeletemethodcall)
21 | - [DeployAppDeleteParams](types_app_deployer.md#deployappdeleteparams)
22 | - [DeployAppUpdateMethodCall](types_app_deployer.md#deployappupdatemethodcall)
23 | - [DeployAppUpdateParams](types_app_deployer.md#deployappupdateparams)
24 | 
25 | ## Type Aliases
26 | 
27 | ### AppDeployParams
28 | 
29 | Ƭ **AppDeployParams**: [`Expand`](types_expand.md#expand)\<[`SendParams`](../interfaces/types_transaction.SendParams.md) & \{ `createParams`: [`AppCreateParams`](types_composer.md#appcreateparams) \| [`AppCreateMethodCall`](types_composer.md#appcreatemethodcall) ; `deleteParams`: [`DeployAppDeleteParams`](types_app_deployer.md#deployappdeleteparams) \| [`DeployAppDeleteMethodCall`](types_app_deployer.md#deployappdeletemethodcall) ; `deployTimeParams?`: [`TealTemplateParams`](../interfaces/types_app.TealTemplateParams.md) ; `existingDeployments?`: [`AppLookup`](../interfaces/types_app_deployer.AppLookup.md) ; `ignoreCache?`: `boolean` ; `metadata`: [`AppDeployMetadata`](../interfaces/types_app.AppDeployMetadata.md) ; `onSchemaBreak?`: ``"replace"`` \| ``"fail"`` \| ``"append"`` \| [`OnSchemaBreak`](../enums/types_app.OnSchemaBreak.md) ; `onUpdate?`: ``"update"`` \| ``"replace"`` \| ``"fail"`` \| ``"append"`` \| [`OnUpdate`](../enums/types_app.OnUpdate.md) ; `updateParams`: [`DeployAppUpdateParams`](types_app_deployer.md#deployappupdateparams) \| [`DeployAppUpdateMethodCall`](types_app_deployer.md#deployappupdatemethodcall)  }\>
30 | 
31 | The parameters to idempotently deploy an app
32 | 
33 | #### Defined in
34 | 
35 | [src/types/app-deployer.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-deployer.ts#L38)
36 | 
37 | ___
38 | 
39 | ### AppDeployResult
40 | 
41 | Ƭ **AppDeployResult**: [`Expand`](types_expand.md#expand)\<\{ `operationPerformed`: ``"create"``  } & `Omit`\<[`AppMetadata`](../interfaces/types_app_deployer.AppMetadata.md), ``"appId"`` \| ``"appAddress"``\> & [`SendAppCreateTransactionResult`](types_app.md#sendappcreatetransactionresult)\> \| [`Expand`](types_expand.md#expand)\<\{ `operationPerformed`: ``"update"``  } & [`AppMetadata`](../interfaces/types_app_deployer.AppMetadata.md) & [`SendAppUpdateTransactionResult`](types_app.md#sendappupdatetransactionresult)\> \| [`Expand`](types_expand.md#expand)\<\{ `operationPerformed`: ``"replace"``  } & `Omit`\<[`AppMetadata`](../interfaces/types_app_deployer.AppMetadata.md), ``"appId"`` \| ``"appAddress"``\> & [`SendAppCreateTransactionResult`](types_app.md#sendappcreatetransactionresult) & \{ `deleteResult`: [`ConfirmedTransactionResult`](../interfaces/types_transaction.ConfirmedTransactionResult.md) ; `deleteReturn?`: [`ABIReturn`](types_app.md#abireturn)  }\> \| [`Expand`](types_expand.md#expand)\<\{ `operationPerformed`: ``"nothing"``  } & [`AppMetadata`](../interfaces/types_app_deployer.AppMetadata.md)\>
42 | 
43 | #### Defined in
44 | 
45 | [src/types/app-deployer.ts:98](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-deployer.ts#L98)
46 | 
47 | ___
48 | 
49 | ### DeployAppDeleteMethodCall
50 | 
51 | Ƭ **DeployAppDeleteMethodCall**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppDeleteMethodCall`](types_composer.md#appdeletemethodcall), ``"appId"``\>\>
52 | 
53 | Params to specify a delete method call for an app deployment
54 | 
55 | #### Defined in
56 | 
57 | [src/types/app-deployer.ts:35](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-deployer.ts#L35)
58 | 
59 | ___
60 | 
61 | ### DeployAppDeleteParams
62 | 
63 | Ƭ **DeployAppDeleteParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppDeleteParams`](types_composer.md#appdeleteparams), ``"appId"``\>\>
64 | 
65 | Params to specify a transaction for an app deployment
66 | 
67 | #### Defined in
68 | 
69 | [src/types/app-deployer.ts:33](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-deployer.ts#L33)
70 | 
71 | ___
72 | 
73 | ### DeployAppUpdateMethodCall
74 | 
75 | Ƭ **DeployAppUpdateMethodCall**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppUpdateMethodCall`](types_composer.md#appupdatemethodcall), ``"appId"`` \| ``"approvalProgram"`` \| ``"clearStateProgram"``\>\>
76 | 
77 | Params to specify an update method call for an app deployment
78 | 
79 | #### Defined in
80 | 
81 | [src/types/app-deployer.ts:31](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-deployer.ts#L31)
82 | 
83 | ___
84 | 
85 | ### DeployAppUpdateParams
86 | 
87 | Ƭ **DeployAppUpdateParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppUpdateParams`](types_composer.md#appupdateparams), ``"appId"`` \| ``"approvalProgram"`` \| ``"clearStateProgram"``\>\>
88 | 
89 | Params to specify an update transaction for an app deployment
90 | 
91 | #### Defined in
92 | 
93 | [src/types/app-deployer.ts:29](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-deployer.ts#L29)
94 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:v8-migration.md:
--------------------------------------------------------------------------------

```markdown
  1 | # v8 migration
  2 | 
  3 | Version 8 of AlgoKit Utils adds support for algosdk@3. This algosdk version has a number of major breaking changes and as a result we have also needed to make some breaking changes to support it. All changes between version 7 and 8 have been made to support algosdk@3.
  4 | 
  5 | Depending on the complexity of your project, you may find that first migrating to version 7, then migrating to version 8 is easier and offers a more gradual experience. Either way this migration will heavily reference the [v7 migration guide](./v7-migration.md) as it documents the majority of changes you will likely need to make.
  6 | 
  7 | ## <6.1.0 Migration Guide
  8 | 
  9 | ### Migrating
 10 | 
 11 | #### Step 1 - Learn about the changes between version 7 and 8
 12 | 
 13 | First read the [>=7.0.0 migration guide](#700-migration-guide) below to familiarise yourself with the version 7 to 8 changes. This will give you the context needed to successfully execute the next step.
 14 | 
 15 | #### Step 2 - Migrate using the version 7 migration guide
 16 | 
 17 | Using the context gathered from Step 1, you should have all the information you need to migrate using the [version 7 migration guide](./v7-migration.md#610-migration-guide).
 18 | 
 19 | A simple example of the before and after follows:
 20 | 
 21 | ```typescript
 22 | /**** Before ****/
 23 | import * as algokit from '@algorandfoundation/algokit-utils'
 24 | const algod = algokit.getAlgoClient()
 25 | const account = await algokit.mnemonicAccountFromEnvironment(
 26 |   {
 27 |     name: 'MY_ACCOUNT',
 28 |     fundWith: algokit.algos(2),
 29 |   },
 30 |   algod,
 31 | )
 32 | const payment = await algokit.transferAlgos({
 33 |   from: account.addr,
 34 |   to: 'RECEIVER',
 35 |   amount: algokit.algos(1),
 36 | })
 37 | 
 38 | /**** After ****/
 39 | import { AlgorandClient } from '@algorandfoundation/algokit-utils'
 40 | const algorand = await AlgorandClient.fromEnvironment()
 41 | const account = await algorand.account.fromEnvironment('MY_ACCOUNT', (2).algo())
 42 | const payment = await algorand.send.payment({
 43 |   sender: account, // NOTE: .addr has been removed from the v7 version of this same code
 44 |   receiver: 'RECEIVER',
 45 |   amount: (1).algo(),
 46 | })
 47 | ```
 48 | 
 49 | ## >=6.1.0<7.0.0 Migration Guide
 50 | 
 51 | ### Migrating
 52 | 
 53 | #### Step 1 - Learn about the changes between version 7 and 8
 54 | 
 55 | First read the [>=7.0.0 migration guide](#700-migration-guide) below to familiarise yourself with the version 7 to 8 changes. This will give you the context needed to successfully execute the next step.
 56 | 
 57 | #### Step 2 - Migrate using the version 7 migration guide
 58 | 
 59 | Using the context gathered from Step 1, you should have all the information you need to migrate using the [version 7 migration guide](./v7-migration.md#610-migration-guide-1).
 60 | 
 61 | ## >=7.0.0 Migration Guide
 62 | 
 63 | This migration path assumes you have actioned all the deprecation notices as part of moving to the `>=7.0.0` version and you are using the `AlgorandClient` and it's related abstractions. Given this, all changes you'll need to make are directly related to upgrading from algosdk@2 to algosdk@3.
 64 | 
 65 | While AlgoKit utils now wraps most of the algosdk functionality, it's likely you may have functionality that uses algosdk directly. As as result you may need to refer to the [algosdk v3 migration guide](https://github.com/algorand/js-algorand-sdk/blob/develop/v2_TO_v3_MIGRATION_GUIDE.md.
 66 | 
 67 | ### Migrating
 68 | 
 69 | #### Step 1 - Accommodate usages of addresses
 70 | 
 71 | The biggest change in this release is that addresses are consistently typed using `Address` from algosdk@3. The vast majority of AlgoKit Utils methods that previously took a `string` for an account address now take `string | Address`. The impact of this change should be minimal, as `string` is still accepted.
 72 | 
 73 | Any changes needed here should be related to converting an algosdk `Account` or `Address` type into the type the function expects.
 74 | 
 75 | One scenario that requires a `string` rather than `string | Address` is passing an address as an ABI method arg. This is due to algosdk not supporting this type as an `ABIValue`. When passing an `Address` as an ABI method arg, you'll need to convert to the encoded address representation using `toString()`, like below:
 76 | 
 77 | ```typescript
 78 | const alice = algorand.account.random()
 79 | const bob = algorand.account.random()
 80 | 
 81 | const result = await appClient.send.call({
 82 |   sender: alice,
 83 |   method: 'hello',
 84 |   args: [bob.addr.toString()], // NOTE: the conversion to the encoded string representation
 85 | })
 86 | ```
 87 | 
 88 | It's also worth noting that the account utils (`algorand.account.random()` in this scenario) returns a type which combines `Address`, `Account` and `TransactionSignerAccount`, so that you can simply pass the object (`alice` in this case) returned into a function that accepts an `Address` or `Account`, which allows you to remove `.addr` in a lot of cases.
 89 | 
 90 | #### Step 2 - Remove usages of performAtomicTransactionComposerDryrun
 91 | 
 92 | The dryrun feature has long been deprecated and it isn't compatible with algosdk@3, as a result we had to remove support for it. It's likely you can instead use the simulate feature like below:
 93 | 
 94 | ```typescript
 95 | const payment = await algorand.createTransaction.payment({
 96 |   sender: 'SENDER',
 97 |   receiver: 'RECEIVER',
 98 |   amount: (1).algo(),
 99 | })
100 | 
101 | const result = await algorand.newGroup().addTransaction(payment).simulate()
102 | ```
103 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:python:source:capabilities:transfer.md:
--------------------------------------------------------------------------------

```markdown
 1 | # Algo transfers
 2 | 
 3 | Algo transfers is a higher-order use case capability provided by AlgoKit Utils allows you to easily initiate algo transfers between accounts, including dispenser management and
 4 | idempotent account funding.
 5 | 
 6 | To see some usage examples check out the [automated tests](https://github.com/algorandfoundation/algokit-utils-py/blob/main/tests/test_transfer.py).
 7 | 
 8 | ## Transferring Algos
 9 | 
10 | The key function to facilitate Algo transfers is `algokit.transfer(algod_client, transfer_parameters)`, which returns the underlying `EnsureFundedResponse` and takes a `TransferParameters`
11 | 
12 | The following fields on `TransferParameters` are required to transfer ALGOs:
13 | 
14 | - `from_account`: The account or signer that will send the ALGOs
15 | - `to_address`: The address of the account that will receive the ALGOs
16 | - `micro_algos`: The amount of micro ALGOs to send
17 | 
18 | ## Ensuring minimum Algos
19 | 
20 | The ability to automatically fund an account to have a minimum amount of disposable ALGOs to spend is incredibly useful for automation and deployment scripts.
21 | The function to facilitate this is `ensure_funded(client, parameters)`, which takes an `EnsureBalanceParameters` instance and returns the underlying `EnsureFundedResponse` if a payment was made, a string if the dispenser API was used, or None otherwise.
22 | 
23 | The following fields on `EnsureBalanceParameters` are required to ensure minimum ALGOs:
24 | 
25 | - `account_to_fund`: The account address that will receive the ALGOs. This can be an `Account` instance, an `AccountTransactionSigner` instance, or a string.
26 | - `min_spending_balance_micro_algos`: The minimum balance of micro ALGOs that the account should have available to spend (i.e. on top of minimum balance requirement).
27 | - `min_funding_increment_micro_algos`: When issuing a funding amount, the minimum amount to transfer (avoids many small transfers if this gets called often on an active account). Default is 0.
28 | - `funding_source`: The account (with private key) or signer that will send the ALGOs. If not set, it will use `get_dispenser_account`. This can be an `Account` instance, an `AccountTransactionSigner` instance, [`TestNetDispenserApiClient`](https://github.com/algorandfoundation/algokit-utils-py/blob/main/docs/source/capabilities/dispenser-client.md) instance, or None.
29 | - `suggested_params`: (optional) Transaction parameters, an instance of `SuggestedParams`.
30 | - `note`: (optional) The transaction note, default is "Funding account to meet minimum requirement".
31 | - `fee_micro_algos`: (optional) The flat fee you want to pay, useful for covering extra fees in a transaction group or app call.
32 | - `max_fee_micro_algos`: (optional) 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.
33 | 
34 | The function calls Algod to find the current balance and minimum balance requirement, gets the difference between those two numbers and checks to see if it's more than the `min_spending_balance_micro_algos`. If so, it will send the difference, or the `min_funding_increment_micro_algos` if that is specified. If the account is on TestNet and `use_dispenser_api` is True, the [AlgoKit TestNet Dispenser API](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/dispenser.md) will be used to fund the account.
35 | 
36 | > Please note, if you are attempting to fund via Dispenser API, make sure to set `ALGOKIT_DISPENSER_ACCESS_TOKEN` environment variable prior to invoking `ensure_funded`. To generate the token refer to [AlgoKit CLI documentation](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/dispenser.md#login)
37 | 
38 | ## Transfering Assets
39 | 
40 | The key function to facilitate asset transfers is `transfer_asset(algod_client, transfer_parameters)`, which returns a `AssetTransferTxn` and takes a `TransferAssetParameters`:
41 | 
42 | The following fields on `TransferAssetParameters` are required to transfer assets:
43 | 
44 | - `from_account`: The account or signer that will send the ALGOs
45 | - `to_address`: The address of the account that will receive the ALGOs
46 | - `asset_id`: The asset id that will be transfered
47 | - `amount`: The amount to send as the smallest divisible unit value
48 | 
49 | ## Dispenser
50 | 
51 | If you want to programmatically send funds then you will often need a "dispenser" account that has a store of ALGOs that can be sent and a private key available for that dispenser account.
52 | 
53 | There is a standard AlgoKit Utils function to get access to a [dispenser account](./account.md#account): `get_dispenser_account`. When running against
54 | [LocalNet](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/localnet.md), the dispenser account can be automatically determined using the
55 | [Kmd API](https://developer.algorand.org/docs/rest-apis/kmd). When running against other networks like TestNet or MainNet the mnemonic of the dispenser account can be provided via environment
56 | variable `DISPENSER_MNEMONIC`
57 | 
58 | Please note that this does not refer to the [AlgoKit TestNet Dispenser API](./dispenser-client.md) which is a separate abstraction that can be used to fund accounts on TestNet via dedicated API service.
59 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/apiManager/tinyman/remove_liquidity.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { Tool, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
  2 | import { RemoveLiquidity, poolUtils, SupportedNetwork } from '@tinymanorg/tinyman-js-sdk';
  3 | import { algodClient } from '../../../algorand-client.js';
  4 | import { env } from '../../../env.js';
  5 | 
  6 | async function getAssetDecimals(assetId: number): Promise<number> {
  7 |   try {
  8 |     if (assetId === 0) return 6; // Algo has 6 decimals
  9 |     const assetInfo = await algodClient.getAssetByID(assetId).do();
 10 |     return assetInfo.params.decimals;
 11 |   } catch (error) {
 12 |     console.error(`Failed to get decimals for asset ${assetId}:`, error);
 13 |     return 6; // Default to 6 decimals if we can't get the info
 14 |   }
 15 | }
 16 | 
 17 | export const removeLiquidityTools: Tool[] = [
 18 |   {
 19 |     name: 'api_tinyman_get_remove_liquidity_quote',
 20 |     description: 'Get quote for removing liquidity from a pool',
 21 |     inputSchema: {
 22 |       type: 'object',
 23 |       properties: {
 24 |         asset1Id: {
 25 |           type: 'integer',
 26 |           description: 'ID of the first asset'
 27 |         },
 28 |         asset2Id: {
 29 |           type: 'integer',
 30 |           description: 'ID of the second asset'
 31 |         },
 32 |         poolTokenAmount: {
 33 |           type: 'integer',
 34 |           description: 'Amount of pool tokens to burn'
 35 |         },
 36 |         initiatorAddr: {
 37 |           type: 'string',
 38 |           description: 'Address of the account removing liquidity'
 39 |         },
 40 |         slippage: {
 41 |           type: 'number',
 42 |           description: 'Maximum acceptable slippage (e.g., 0.01 for 1%)',
 43 |           default: 0.01
 44 |         },
 45 |         singleAssetMode: {
 46 |           type: 'boolean',
 47 |           description: 'Whether to remove liquidity in single asset mode (v2 only)',
 48 |           default: false
 49 |         },
 50 |         version: {
 51 |           type: 'string',
 52 |           enum: ['v1_1', 'v2'],
 53 |           description: 'Tinyman protocol version',
 54 |           default: 'v2'
 55 |         }
 56 |       },
 57 |       required: ['asset1Id', 'asset2Id', 'poolTokenAmount', 'initiatorAddr']
 58 |     }
 59 |   }
 60 | ];
 61 | 
 62 | export async function handleRemoveLiquidityTools(args: any): Promise<any> {
 63 |   const { 
 64 |     name, 
 65 |     asset1Id, 
 66 |     asset2Id,
 67 |     poolTokenAmount,
 68 |     initiatorAddr,
 69 |     slippage = 0.01,
 70 |     singleAssetMode = false,
 71 |     version = 'v2'
 72 |   } = args;
 73 | 
 74 |   if (name === 'api_tinyman_get_remove_liquidity_quote') {
 75 |     try {
 76 |       // Get pool information first
 77 |       const poolInfo = await (version === 'v2' 
 78 |         ? poolUtils.v2.getPoolInfo({
 79 |             client: algodClient,
 80 |             network: env.algorand_network as SupportedNetwork,
 81 |             asset1ID: asset1Id,
 82 |             asset2ID: asset2Id
 83 |           })
 84 |         : poolUtils.v1_1.getPoolInfo({
 85 |             client: algodClient,
 86 |             network: env.algorand_network as SupportedNetwork,
 87 |             asset1ID: asset1Id,
 88 |             asset2ID: asset2Id
 89 |           }));
 90 | 
 91 |       // Get pool reserves
 92 |       const reserves = await (version === 'v2'
 93 |         ? poolUtils.v2.getPoolReserves(algodClient, poolInfo)
 94 |         : poolUtils.v1_1.getPoolReserves(algodClient, poolInfo));
 95 | 
 96 |       // Get asset decimals
 97 |       const [asset1Decimals, asset2Decimals] = await Promise.all([
 98 |         getAssetDecimals(asset1Id),
 99 |         getAssetDecimals(asset2Id)
100 |       ]);
101 | 
102 |       let quote;
103 |       if (version === 'v2') {
104 |         if (singleAssetMode) {
105 |           quote = await RemoveLiquidity.v2.generateSingleAssetOutTxns({
106 |             client: algodClient,
107 |             pool: poolInfo,
108 |             outputAssetId: asset1Id,
109 |             poolTokenIn: BigInt(poolTokenAmount),
110 |             initiatorAddr,
111 |             minOutputAssetAmount: BigInt(0), // Will be calculated based on slippage
112 |             slippage
113 |           });
114 |         } else {
115 |           quote = await RemoveLiquidity.v2.generateTxns({
116 |             client: algodClient,
117 |             pool: poolInfo,
118 |             poolTokenIn: BigInt(poolTokenAmount),
119 |             initiatorAddr,
120 |             minAsset1Amount: BigInt(0), // Will be calculated based on slippage
121 |             minAsset2Amount: BigInt(0), // Will be calculated based on slippage
122 |             slippage
123 |           });
124 |         }
125 |       } else {
126 |         // Calculate expected output amounts based on pool reserves and input amount
127 |         const poolShare = poolUtils.getPoolShare(reserves.issuedLiquidity, BigInt(poolTokenAmount));
128 |         const asset1Out = (reserves.asset1 * BigInt(Math.floor(poolShare * 1000))) / BigInt(1000);
129 |         const asset2Out = (reserves.asset2 * BigInt(Math.floor(poolShare * 1000))) / BigInt(1000);
130 | 
131 |         quote = await RemoveLiquidity.v1_1.generateTxns({
132 |           client: algodClient,
133 |           pool: poolInfo,
134 |           poolTokenIn: BigInt(poolTokenAmount),
135 |           asset1Out,
136 |           asset2Out,
137 |           slippage,
138 |           initiatorAddr
139 |         });
140 |       }
141 | 
142 |       return {
143 |         version,
144 |         asset1Id,
145 |         asset2Id,
146 |         poolTokenAmount,
147 |         singleAssetMode,
148 |         quote
149 |       };
150 |     } catch (error) {
151 |       throw new McpError(
152 |         ErrorCode.InternalError,
153 |         `Failed to get remove liquidity quote: ${error instanceof Error ? error.message : String(error)}`
154 |       );
155 |     }
156 |   }
157 | 
158 |   throw new McpError(
159 |     ErrorCode.MethodNotFound,
160 |     `Unknown remove liquidity tool: ${name}`
161 |   );
162 | }
163 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:docs:testnet_api.md:
--------------------------------------------------------------------------------

```markdown
  1 | # AlgoKit TestNet Dispenser API Documentation
  2 | 
  3 | ## Overview
  4 | 
  5 | The AlgoKit TestNet Dispenser API provides functionalities to interact with the Dispenser service. This service enables users to fund and refund assets.
  6 | 
  7 | ## Base URLs
  8 | 
  9 | -   **Production Instance (publicly available):**
 10 |     `https://api.dispenser.algorandfoundation.tools`
 11 | 
 12 | ## Authorization
 13 | 
 14 | All API endpoints require an `Authorization` header containing a valid JWT token.
 15 | 
 16 | > Refer to [algokit dispenser](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/dispenser.md#login) command documentation to learn how to obtain a valid JWT token by executing `algokit dispenser login --ci` command.
 17 | 
 18 | ## Endpoints
 19 | 
 20 | ### 1. `POST /fund/{assetID}`
 21 | 
 22 | Funds a user's wallet with a specified asset.
 23 | 
 24 | **URL Parameters:**
 25 | 
 26 | | Parameter | Description                                                              |
 27 | | --------- | ------------------------------------------------------------------------ |
 28 | | `assetID` | ID of the asset for which the funding limit is sought. Use `0` for ALGO. |
 29 | 
 30 | **Request Body:**
 31 | 
 32 | | Parameter | Description                         |
 33 | | --------- | ----------------------------------- |
 34 | | receiver  | Address of the wallet to be funded. |
 35 | | amount    | Amount of the asset to be funded.   |
 36 | 
 37 | **Response Body:**
 38 | 
 39 | ```json
 40 | {
 41 |     "txID": "string",
 42 |     "amount": "number"
 43 | }
 44 | ```
 45 | 
 46 | | Parameter | Description                                                              |
 47 | | --------- | ------------------------------------------------------------------------ |
 48 | | `txID`    | ID of the fund transaction from the dispenser to the requesting address. |
 49 | | `amount`  | Amount of the asset to be funded.                                        |
 50 | 
 51 | ### 2. `GET /fund/{assetID}/limit`
 52 | 
 53 | Fetches the funding limit for a specified asset.
 54 | 
 55 | **URL Parameters:**
 56 | 
 57 | | Parameter | Description                                                              |
 58 | | --------- | ------------------------------------------------------------------------ |
 59 | | `assetID` | ID of the asset for which the funding limit is sought. Use `0` for ALGO. |
 60 | 
 61 | **Response Body:**
 62 | 
 63 | ```json
 64 | {
 65 |     "amount": "number"
 66 | }
 67 | ```
 68 | 
 69 | | Parameter | Description                                         |
 70 | | --------- | --------------------------------------------------- |
 71 | | `amount`  | Current daily amount limit for the requested asset. |
 72 | 
 73 | ### 3. `POST /refund`
 74 | 
 75 | Allows refunding a transaction. A status code `200` indicates a successful refund.
 76 | 
 77 | **Request Body:**
 78 | 
 79 | ```json
 80 | {
 81 |     "refundTransactionID": "string"
 82 | }
 83 | ```
 84 | 
 85 | | Parameter           | Description                   |
 86 | | ------------------- | ----------------------------- |
 87 | | refundTransactionID | ID of the refund transaction. |
 88 | 
 89 | ---
 90 | 
 91 | ## Error Handling
 92 | 
 93 | If an error occurs, the API returns a specific status and error code.
 94 | 
 95 | **Error Codes Table:**
 96 | 
 97 | | Status Code | Error Code               | Description                       |
 98 | | ----------- | ------------------------ | --------------------------------- |
 99 | | 400         | `dispenser_out_of_funds` | Dispenser is out of funds         |
100 | | 403         | `forbidden`              | Dispenser access is forbidden     |
101 | | 400         | `fund_limit_exceeded`    | Dispenser fund limit exceeded     |
102 | | 400         | `missing_params`         | Missing required input parameters |
103 | | 403         | `authorization_error`    | Authorization error               |
104 | | 400         | `txn_expired`            | Transaction expired               |
105 | | 400         | `txn_invalid`            | Invalid transaction               |
106 | | 400         | `txn_already_processed`  | Transaction already processed     |
107 | | 404         | `txn_not_found`          | Transaction not found             |
108 | | 400         | `invalid_asset`          | Unsupported asset ID              |
109 | | 500         | `unexpected_error`       | Unexpected internal error         |
110 | 
111 | For more detailed error information, please refer to the error code in the response body.
112 | 
113 | ## Common Error Response
114 | 
115 | All error responses have the following common format:
116 | 
117 | ```json
118 | {
119 |     "code": "string",
120 |     "message": "string"
121 | }
122 | ```
123 | 
124 | | Error Parameter | Description                                       |
125 | | --------------- | ------------------------------------------------- |
126 | | `code`          | Error code as described in the error codes table. |
127 | | `message`       | Error message.                                    |
128 | 
129 | ### `missing_params` error response
130 | 
131 | ```json
132 | {
133 |     "code": "missing_params",
134 |     "message": "string",
135 |     "parameters": ["string"]
136 | }
137 | ```
138 | 
139 | | Error Parameter | Description                 |
140 | | --------------- | --------------------------- |
141 | | `parameters`    | List of missing parameters. |
142 | 
143 | ### `fund_limit_exceeded` error response
144 | 
145 | ```json
146 | {
147 |     "code": "dispenser_fund_limit_exceeded",
148 |     "message": "string",
149 |     "limit": "number",
150 |     "resetsAt": "string"
151 | }
152 | ```
153 | 
154 | | Error Parameter | Description                                         |
155 | | --------------- | --------------------------------------------------- |
156 | | `limit`         | Current daily amount limit for the requested asset. |
157 | | `resetsAt`      | Timestamp when the daily limit resets.              |
158 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/index.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
  2 | import fs from 'fs';
  3 | import path from 'path';
  4 | import { fileURLToPath } from 'url';
  5 | 
  6 | const __dirname = path.dirname(fileURLToPath(import.meta.url));
  7 | 
  8 | // Load JSON files
  9 | const loadJson = (filename: string) => 
 10 |   JSON.parse(fs.readFileSync(path.join(__dirname, 'taxonomy-categories', filename), 'utf-8'));
 11 | 
 12 | const arcs = loadJson('arcs.json');
 13 | const sdks = loadJson('sdks.json');
 14 | const algokit = loadJson('algokit.json');
 15 | const algokitUtils = loadJson('algokit-utils.json');
 16 | const tealscript = loadJson('tealscript.json');
 17 | const puya = loadJson('puya.json');
 18 | const liquidAuth = loadJson('liquid-auth.json');
 19 | const python = loadJson('python.json');
 20 | const developers = loadJson('developers.json');
 21 | const clis = loadJson('clis.json');
 22 | const nodes = loadJson('nodes.json');
 23 | const details = loadJson('details.json');
 24 | 
 25 | // Common schema for category resources
 26 | const categorySchema = {
 27 |   type: 'object',
 28 |   properties: {
 29 |     name: { type: 'string' },
 30 |     description: { type: 'string' },
 31 |     subcategories: { type: 'object' },
 32 |     documents: { 
 33 |       type: 'array',
 34 |       items: {
 35 |         type: 'object',
 36 |         properties: {
 37 |           name: { type: 'string' },
 38 |           description: { type: 'string' },
 39 |           path: { type: 'string' }
 40 |         }
 41 |       }
 42 |     }
 43 |   }
 44 | };
 45 | 
 46 | // Resource definitions
 47 | const resourceDefinitions = [
 48 |   {
 49 |     uri: 'algorand://knowledge/taxonomy',
 50 |     name: 'Algorand Knowledge Full Taxonomy',
 51 |     description: 'Markdown-based knowledge taxonomy',
 52 |     schema: {
 53 |       type: 'object',
 54 |       properties: {
 55 |         categories: {
 56 |           type: 'array',
 57 |           items: {
 58 |             type: 'object',
 59 |             properties: {
 60 |               name: { type: 'string' },
 61 |               description: { type: 'string' },
 62 |               content: { type: 'string' }
 63 |             }
 64 |           }
 65 |         }
 66 |       }
 67 |     }
 68 |   },
 69 |   {
 70 |     uri: 'algorand://knowledge/taxonomy/arcs',
 71 |     name: arcs.name,
 72 |     description: arcs.description,
 73 |     schema: categorySchema
 74 |   },
 75 |   {
 76 |     uri: 'algorand://knowledge/taxonomy/sdks',
 77 |     name: sdks.name,
 78 |     description: sdks.description,
 79 |     schema: categorySchema
 80 |   },
 81 |   {
 82 |     uri: 'algorand://knowledge/taxonomy/algokit',
 83 |     name: algokit.name,
 84 |     description: algokit.description,
 85 |     schema: categorySchema
 86 |   },
 87 |   {
 88 |     uri: 'algorand://knowledge/taxonomy/algokit-utils',
 89 |     name: algokitUtils.name,
 90 |     description: algokitUtils.description,
 91 |     schema: categorySchema
 92 |   },
 93 |   {
 94 |     uri: 'algorand://knowledge/taxonomy/tealscript',
 95 |     name: tealscript.name,
 96 |     description: tealscript.description,
 97 |     schema: categorySchema
 98 |   },
 99 |   {
100 |     uri: 'algorand://knowledge/taxonomy/puya',
101 |     name: puya.name,
102 |     description: puya.description,
103 |     schema: categorySchema
104 |   },
105 |   {
106 |     uri: 'algorand://knowledge/taxonomy/liquid-auth',
107 |     name: liquidAuth.name,
108 |     description: liquidAuth.description,
109 |     schema: categorySchema
110 |   },
111 |   {
112 |     uri: 'algorand://knowledge/taxonomy/python',
113 |     name: python.name,
114 |     description: python.description,
115 |     schema: categorySchema
116 |   },
117 |   {
118 |     uri: 'algorand://knowledge/taxonomy/developers',
119 |     name: developers.name,
120 |     description: developers.description,
121 |     schema: categorySchema
122 |   },
123 |   {
124 |     uri: 'algorand://knowledge/taxonomy/clis',
125 |     name: clis.name,
126 |     description: clis.description,
127 |     schema: categorySchema
128 |   },
129 |   {
130 |     uri: 'algorand://knowledge/taxonomy/nodes',
131 |     name: nodes.name,
132 |     description: nodes.description,
133 |     schema: categorySchema
134 |   },
135 |   {
136 |     uri: 'algorand://knowledge/taxonomy/details',
137 |     name: details.name,
138 |     description: details.description,
139 |     schema: categorySchema
140 |   }
141 | ];
142 | 
143 | // Resource module implementation
144 | export const knowledgeResources = {
145 |   canHandle: (uri: string): boolean => {
146 |     return uri.startsWith('algorand://knowledge/');
147 |   },
148 | 
149 |   handle: async (uri: string) => {
150 |     // Category
151 |     const categoryMatch = uri.match(/^algorand:\/\/knowledge\/taxonomy\/([^/]+)$/);
152 |     if (categoryMatch) {
153 |       const category = categoryMatch[1];
154 |       const categoryData = {
155 |         arcs, sdks, algokit, 'algokit-utils': algokitUtils,
156 |         tealscript, puya, 'liquid-auth': liquidAuth, python,
157 |         developers, clis, nodes, details
158 |       }[category];
159 | 
160 |       if (!categoryData) {
161 |         throw new McpError(
162 |           ErrorCode.InvalidRequest,
163 |           `Unknown category: ${category}`
164 |         );
165 |       }
166 | 
167 |       return {
168 |         contents: [{
169 |           uri,
170 |           mimeType: 'application/json',
171 |           text: JSON.stringify(categoryData, null, 2)
172 |         }]
173 |       };
174 |     }
175 | 
176 |     // Full taxonomy
177 |     if (uri === 'algorand://knowledge/taxonomy') {
178 |       return {
179 |         contents: [{
180 |           uri,
181 |           mimeType: 'application/json',
182 |           text: JSON.stringify({
183 |             categories: [
184 |               arcs, sdks, algokit, algokitUtils, tealscript, puya,
185 |               liquidAuth, python, developers, clis, nodes, details
186 |             ]
187 |           }, null, 2)
188 |         }]
189 |       };
190 |     }
191 | 
192 |     throw new McpError(
193 |       ErrorCode.InvalidRequest,
194 |       `Invalid knowledge URI: ${uri}`
195 |     );
196 |   },
197 | 
198 |   getResourceDefinitions: () => resourceDefinitions
199 | };
200 | 
```
Page 20/93FirstPrevNextLast