#
tokens: 47611/50000 8/942 files (page 32/93)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 32 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/ARCs:specs:arc-0078.md:
--------------------------------------------------------------------------------

```markdown
  1 | ---
  2 | arc: 78
  3 | title: URI scheme, keyreg Transactions extension
  4 | description: A specification for encoding Key Registration Transactions in a URI format.
  5 | author: Tasos Bitsios (@tasosbit)
  6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/314
  7 | status: Final
  8 | type: Standards Track
  9 | category: Interface
 10 | sub-category: General
 11 | created: 2024-10-02
 12 | extends: 26
 13 | ---
 14 | 
 15 | ## Abstract
 16 | 
 17 | This URI specification represents an extension to the base Algorand URI encoding standard ([ARC-26](./arc-0026.md)) that specifies encoding of key registration transactions through deeplinks, QR codes, etc.
 18 | 
 19 | ## Specification
 20 | 
 21 | ### General format
 22 | 
 23 | As in [ARC-26](./arc-0026.md), URIs follow the general format for URIs as set forth in <a href="https://www.rfc-editor.org/rfc/rfc3986">RFC 3986</a>. The path component consists of an Algorand address, and the query component provides additional transaction parameters.
 24 | 
 25 | Elements of the query component may contain characters outside the valid range. These are encoded differently depending on their expected character set. The text components (note, xnote) must first be encoded according to UTF-8, and then each octet of the corresponding UTF-8 sequence must be percent-encoded as described in RFC 3986. The binary components (votekey, selkey, etc.) must be encoded with base64url as specified in <a href="https://www.rfc-editor.org/rfc/rfc4648.html#section-5">RFC 4648 section 5</a>.
 26 | 
 27 | ### Scope
 28 | 
 29 | This ARC explicitly supports the two major subtypes of key registration transactions:
 30 | 
 31 | - Online keyreg transcation
 32 |   - Declares intent to participate in consensus and configures required keys
 33 | - Offline keyreg transaction
 34 |   - Declares intent to stop participating in consensus
 35 | 
 36 | The following variants of keyreg transactions are not defined:
 37 | 
 38 | - Non-participating keyreg transcation
 39 |   - This transaction subtype is considered deprecated
 40 | - Heartbeat keyreg transaction
 41 |   - This transaction subtype will be included in the future block incentives protocol. The protocol specifies that this transaction type must be submitted by a node in response to a programmatic "liveness challenge". It is not meant to be signed or submitted by an end user.
 42 | 
 43 | ### ABNF Grammar
 44 | 
 45 | ```
 46 | algorandurn     = "algorand://" algorandaddress [ "?" keyregparams ]
 47 | algorandaddress = *base32
 48 | keyregparams    = keyregparam [ "&" keyregparams ]
 49 | keyregparam     = [ typeparam / votekeyparam / selkeyparam / sprfkeyparam / votefstparam / votelstparam / votekdparam / noteparam / feeparam / otherparam ]
 50 | typeparam       = "type=keyreg"
 51 | votekeyparam    = "votekey=" *qbase64url
 52 | selkeyparam     = "selkey=" *qbase64url
 53 | sprfkeyparam    = "sprfkey=" *qbase64url
 54 | votefstparam    = "votefst=" *qdigit
 55 | votelstparam    = "votelst=" *qdigit
 56 | votekdparam     = "votekdkey=" *qdigit
 57 | noteparam       = (xnote | note)
 58 | xnote           = "xnote=" *qchar
 59 | note            = "note=" *qchar
 60 | fee             = "fee=" *qdigit
 61 | otherparam      = qchar *qchar [ "=" *qchar ]
 62 | ```
 63 | 
 64 | - "qbase64url" corresponds to valid characters of "base64url" encoding, as defined in <a href="https://www.rfc-editor.org/rfc/rfc4648.html#section-5">RFC 4648 section 5</a>
 65 | - "qchar" corresponds to valid characters of an RFC 3986 URI query component, excluding the "=" and "&" characters, which this specification takes as separators.
 66 | 
 67 | As in the base [ARC-26](./arc-0026.md) standard, the scheme component ("algorand:") is case-insensitive, and implementations must accept any combination of uppercase and lowercase letters. The rest of the URI is case-sensitive, including the query parameter keys.
 68 | 
 69 | ### Query Keys
 70 | 
 71 | - address: Algorand address of transaction sender. Required.
 72 | 
 73 | - type: fixed to "keyreg". Used to disambiguate the transaction type from the base [ARC-26](./arc-0026.md) standard and other possible extensions. Required.
 74 | 
 75 | - votekeyparam: The vote key parameter to use in the transaction. Encoded with <a href="https://www.rfc-editor.org/rfc/rfc4648.html#section-5">base64url</a> encoding. Required for keyreg online transactions.
 76 | 
 77 | - selkeyparam: The selection key parameter to use in the transaction. Encoded with <a href="https://www.rfc-editor.org/rfc/rfc4648.html#section-5">base64url</a> encoding. Required for keyreg online transactions.
 78 | 
 79 | - sprfkeyparam: The state proof key parameter to use in the transaction. Encoded with <a href="https://www.rfc-editor.org/rfc/rfc4648.html#section-5">base64url</a> encoding. Required for keyreg online transactions.
 80 | 
 81 | - votefstparam: The first round on which the voting keys will valid. Required for keyreg online transactions.
 82 | 
 83 | - votelstparam: The last round on which the voting keys will be valid. Required for keyreg online transactions.
 84 | 
 85 | - votekdparam: The key dilution key parameter to use. Required for keyreg online transactions.
 86 | 
 87 | - xnote: As in [ARC-26](./arc-0026.md). A URL-encoded notes field value that must not be modifiable by the user when displayed to users. Optional.
 88 | 
 89 | - note: As in [ARC-26](./arc-0026.md). A URL-encoded default notes field value that the the user interface may optionally make editable by the user. Optional.
 90 | 
 91 | - fee: Optional. A static fee to set for the transaction in microAlgos. Useful to signal intent to receive participation incentives (e.g. with a 2,000,000 microAlgo transaction fee.) Optional.
 92 | 
 93 | - (others): optional, for future extensions
 94 | 
 95 | ### Appendix
 96 | 
 97 | This section contains encoding examples. The raw transaction object is presented along with the resulting [ARC-78](./arc-0078.md) URI encoding.
 98 | 
 99 | #### Encoding keyreg online transactioon with minimum fee
100 | 
101 | The following raw keyreg transaction:
102 | 
103 | ```
104 | {
105 |   "txn": {
106 |     "fee": 1000,
107 |     "fv": 1345,
108 |     "gh:b64": "kUt08LxeVAAGHnh4JoAoAMM9ql/hBwSoiFtlnKNeOxA=",
109 |     "lv": 2345,
110 |     "selkey:b64": "+lfw+Y04lTnllJfncgMjXuAePe8i8YyVeoR9c1Xi78c=",
111 |     "snd:b64": "+gJAXOr2rkSCdPQ5DEBDLjn+iIptzLxB3oSMJdWMVyQ=",
112 |     "sprfkey:b64": "3NoXc2sEWlvQZ7XIrwVJjgjM30ndhvwGgcqwKugk1u5W/iy/JITXrykuy0hUvAxbVv0njOgBPtGFsFif3yLJpg==",
113 |     "type": "keyreg",
114 |     "votefst": 1300,
115 |     "votekd": 100,
116 |     "votekey:b64": "UU8zLMrFVfZPnzbnL6ThAArXFsznV3TvFVAun2ONcEI=",
117 |     "votelst": 11300
118 |   }
119 | }
120 | ```
121 | 
122 | Will result in this ARC-78 encoded URI:
123 | 
124 | ```
125 | algorand://7IBEAXHK62XEJATU6Q4QYQCDFY475CEKNXGLYQO6QSGCLVMMK4SLVTYLMY?
126 | type=keyreg
127 | &selkey=-lfw-Y04lTnllJfncgMjXuAePe8i8YyVeoR9c1Xi78c
128 | &sprfkey=3NoXc2sEWlvQZ7XIrwVJjgjM30ndhvwGgcqwKugk1u5W_iy_JITXrykuy0hUvAxbVv0njOgBPtGFsFif3yLJpg
129 | &votefst=1300
130 | &votekd=100
131 | &votekey=UU8zLMrFVfZPnzbnL6ThAArXFsznV3TvFVAun2ONcEI
132 | &votelst=11300
133 | ```
134 | 
135 | Note: newlines added for readability.
136 | 
137 | Note the difference between base64 encoding in the raw object and base64url encoding in the URI parameters. For example, the selection key parameter `selkey` that begins with `+lfw+` in the raw object is encoded in base64url to `-lfw-`.
138 | 
139 | Note: Here, the fee is omitted from the URI (due to being set to the minimum 1,000 microAlgos.) When the fee is omitted, it is left up to the application or wallet to decide. This is for demonstrative purposes - the ARC-78 standard does not require this behavior.
140 | 
141 | #### Encoding keyreg offline transactioon
142 | 
143 | The following raw keyreg transaction:
144 | 
145 | ```
146 | {
147 |   "txn": {
148 |     "fee": 1000,
149 |     "fv": 1776240,
150 |     "gh:b64": "kUt08LxeVAAGHnh4JoAoAMM9ql/hBwSoiFtlnKNeOxA=",
151 |     "lv": 1777240,
152 |     "snd:b64": "+gJAXOr2rkSCdPQ5DEBDLjn+iIptzLxB3oSMJdWMVyQ=",
153 |     "type": "keyreg"
154 |   }
155 | }
156 | ```
157 | 
158 | Will result in this ARC-78 encoded URI:
159 | 
160 | ```
161 | algorand://7IBEAXHK62XEJATU6Q4QYQCDFY475CEKNXGLYQO6QSGCLVMMK4SLVTYLMY?type=keyreg
162 | ```
163 | 
164 | This offline keyreg transaction encoding is the smallest compatible ARC-78 representation.
165 | 
166 | 
167 | #### Encoding keyreg online transactioon with custom fee and note
168 | 
169 | The following raw keyreg transaction:
170 | 
171 | ```
172 | {
173 |   "txn": {
174 |     "fee": 2000000,
175 |     "fv": 1345,
176 |     "gh:b64": "kUt08LxeVAAGHnh4JoAoAMM9ql/hBwSoiFtlnKNeOxA=",
177 |     "lv": 2345,
178 |     "note:b64": "Q29uc2Vuc3VzIHBhcnRpY2lwYXRpb24gZnR3",
179 |     "selkey:b64": "+lfw+Y04lTnllJfncgMjXuAePe8i8YyVeoR9c1Xi78c=",
180 |     "snd:b64": "+gJAXOr2rkSCdPQ5DEBDLjn+iIptzLxB3oSMJdWMVyQ=",
181 |     "sprfkey:b64": "3NoXc2sEWlvQZ7XIrwVJjgjM30ndhvwGgcqwKugk1u5W/iy/JITXrykuy0hUvAxbVv0njOgBPtGFsFif3yLJpg==",
182 |     "type": "keyreg",
183 |     "votefst": 1300,
184 |     "votekd": 100,
185 |     "votekey:b64": "UU8zLMrFVfZPnzbnL6ThAArXFsznV3TvFVAun2ONcEI=",
186 |     "votelst": 11300
187 |   }
188 | }
189 | ```
190 | 
191 | Will result in this ARC-78 encoded URI:
192 | 
193 | ```
194 | algorand://7IBEAXHK62XEJATU6Q4QYQCDFY475CEKNXGLYQO6QSGCLVMMK4SLVTYLMY?
195 | type=keyreg
196 | &selkey=-lfw-Y04lTnllJfncgMjXuAePe8i8YyVeoR9c1Xi78c
197 | &sprfkey=3NoXc2sEWlvQZ7XIrwVJjgjM30ndhvwGgcqwKugk1u5W_iy_JITXrykuy0hUvAxbVv0njOgBPtGFsFif3yLJpg
198 | &votefst=1300
199 | &votekd=100
200 | &votekey=UU8zLMrFVfZPnzbnL6ThAArXFsznV3TvFVAun2ONcEI
201 | &votelst=11300
202 | &fee=2000000
203 | &note=Consensus%2Bparticipation%2Bftw
204 | ```
205 | 
206 | Note: newlines added for readability.
207 | 
208 | ## Rationale
209 | 
210 | The present aims to provide a standardized way to encode key registration transactions in order to enhance the user experience of signing key registration transactions in general, and in particular in the use case of an Algorand node runner that does not have their spending keys resident on their node (as is best practice.)
211 | 
212 | The parameter names were chosen to match the corresponding names in encoded key registration transactions.
213 | 
214 | ## Security Considerations
215 | 
216 | None.
217 | 
218 | ## Copyright
219 | 
220 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
221 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy-categories/details.json:
--------------------------------------------------------------------------------

```json
  1 | {
  2 |   "name": "Developer Details",
  3 |   "description": "Detailed technical documentation for Algorand developers",
  4 |   "path": "developer:docs:details",
  5 |   "documents": [
  6 |     {"name": "Overview", "path": "developer:docs:details:index.md"},
  7 |     {"name": "Algorand Consensus", "path": "developer:docs:details:algorand_consensus.md"},
  8 |     {"name": "Atomic Transaction Composer", "path": "developer:docs:details:atc.md"},
  9 |     {"name": "Atomic Transfers", "path": "developer:docs:details:atomic_transfers.md"},
 10 |     {"name": "ASA", "path": "developer:docs:details:asa.md"},
 11 |     {"name": "Conduit", "path": "developer:docs:details:conduit.md"},
 12 |     {"name": "Crust", "path": "developer:docs:details:crust.md"},
 13 |     {"name": "Encoding", "path": "developer:docs:details:encoding.md"},
 14 |     {"name": "Ethereum to Algorand", "path": "developer:docs:details:ethereum_to_algorand.md"},
 15 |     {"name": "Indexer", "path": "developer:docs:details:indexer.md"},
 16 |     {"name": "Parameter Tables", "path": "developer:docs:details:parameter_tables.md"},
 17 |     {"name": "Technical FAQ", "path": "developer:docs:details:technical_faq.md"},
 18 |     {"name": "Useful Resources", "path": "developer:docs:details:useful_resources.md"}
 19 |   ],
 20 |   "subcategories": {
 21 |     "accounts": {
 22 |       "name": "Accounts",
 23 |       "description": "Account management documentation",
 24 |       "path": "developer:docs:details:accounts",
 25 |       "documents": [
 26 |         {"name": "Overview", "path": "developer:docs:details:accounts:index.md"},
 27 |         {"name": "Create", "path": "developer:docs:details:accounts:create.md"},
 28 |         {"name": "Rekey", "path": "developer:docs:details:accounts:rekey.md"}
 29 |       ]
 30 |     },
 31 |     "algorand-networks": {
 32 |       "name": "Networks",
 33 |       "description": "Algorand network documentation",
 34 |       "path": "developer:docs:details:algorand-networks",
 35 |       "documents": [
 36 |         {"name": "Overview", "path": "developer:docs:details:algorand-networks:index.md"},
 37 |         {"name": "BetaNet", "path": "developer:docs:details:algorand-networks:betanet.md"},
 38 |         {"name": "MainNet", "path": "developer:docs:details:algorand-networks:mainnet.md"},
 39 |         {"name": "TestNet", "path": "developer:docs:details:algorand-networks:testnet.md"}
 40 |       ]
 41 |     },
 42 |     "dapps": {
 43 |       "name": "Decentralized Applications",
 44 |       "description": "dApp development documentation",
 45 |       "path": "developer:docs:details:dapps",
 46 |       "subcategories": {
 47 |         "avm": {
 48 |           "name": "Algorand Virtual Machine",
 49 |           "description": "AVM and TEAL documentation",
 50 |           "path": "developer:docs:details:dapps:avm",
 51 |           "documents": [
 52 |             {"name": "Overview", "path": "developer:docs:details:dapps:avm:index.md"}
 53 |           ],
 54 |           "subcategories": {
 55 |             "teal": {
 56 |               "name": "TEAL",
 57 |               "description": "Transaction Execution Approval Language",
 58 |               "path": "developer:docs:details:dapps:avm:teal",
 59 |               "documents": [
 60 |                 {"name": "Overview", "path": "developer:docs:details:dapps:avm:teal:index.md"},
 61 |                 {"name": "Guidelines", "path": "developer:docs:details:dapps:avm:teal:guidelines.md"},
 62 |                 {"name": "JSON Specification", "path": "developer:docs:details:dapps:avm:teal:jsonspec.md"},
 63 |                 {"name": "Specification", "path": "developer:docs:details:dapps:avm:teal:specification.md"}
 64 |               ],
 65 |               "subcategories": {
 66 |                 "opcodes": {
 67 |                   "name": "Opcodes",
 68 |                   "description": "TEAL opcode documentation by version",
 69 |                   "path": "developer:docs:details:dapps:avm:teal:opcodes",
 70 |                   "documents": [
 71 |                     {"name": "Overview", "path": "developer:docs:details:dapps:avm:teal:opcodes:index.md"},
 72 |                     {"name": "v1", "path": "developer:docs:details:dapps:avm:teal:opcodes:v1.md"},
 73 |                     {"name": "v2", "path": "developer:docs:details:dapps:avm:teal:opcodes:v2.md"},
 74 |                     {"name": "v3", "path": "developer:docs:details:dapps:avm:teal:opcodes:v3.md"},
 75 |                     {"name": "v4", "path": "developer:docs:details:dapps:avm:teal:opcodes:v4.md"},
 76 |                     {"name": "v5", "path": "developer:docs:details:dapps:avm:teal:opcodes:v5.md"},
 77 |                     {"name": "v6", "path": "developer:docs:details:dapps:avm:teal:opcodes:v6.md"},
 78 |                     {"name": "v7", "path": "developer:docs:details:dapps:avm:teal:opcodes:v7.md"},
 79 |                     {"name": "v8", "path": "developer:docs:details:dapps:avm:teal:opcodes:v8.md"},
 80 |                     {"name": "v9", "path": "developer:docs:details:dapps:avm:teal:opcodes:v9.md"},
 81 |                     {"name": "v10", "path": "developer:docs:details:dapps:avm:teal:opcodes:v10.md"}
 82 |                   ]
 83 |                 }
 84 |               }
 85 |             }
 86 |           }
 87 |         },
 88 |         "smart-contracts": {
 89 |           "name": "Smart Contracts",
 90 |           "description": "Smart contract development",
 91 |           "path": "developer:docs:details:dapps:smart-contracts",
 92 |           "documents": [
 93 |             {"name": "Overview", "path": "developer:docs:details:dapps:smart-contracts:index.md"},
 94 |             {"name": "Debugging", "path": "developer:docs:details:dapps:smart-contracts:debugging.md"},
 95 |             {"name": "Guidelines", "path": "developer:docs:details:dapps:smart-contracts:guidelines.md"}
 96 |           ],
 97 |           "subcategories": {
 98 |             "abi": {
 99 |               "name": "ABI",
100 |               "description": "Application Binary Interface",
101 |               "path": "developer:docs:details:dapps:smart-contracts:ABI",
102 |               "documents": [
103 |                 {"name": "Overview", "path": "developer:docs:details:dapps:smart-contracts:ABI:index.md"}
104 |               ]
105 |             },
106 |             "apps": {
107 |               "name": "Applications",
108 |               "description": "Smart contract applications",
109 |               "path": "developer:docs:details:dapps:smart-contracts:apps",
110 |               "documents": [
111 |                 {"name": "Overview", "path": "developer:docs:details:dapps:smart-contracts:apps:index.md"},
112 |                 {"name": "Create", "path": "developer:docs:details:dapps:smart-contracts:apps:create.md"},
113 |                 {"name": "Inner Transactions", "path": "developer:docs:details:dapps:smart-contracts:apps:innertx.md"},
114 |                 {"name": "State", "path": "developer:docs:details:dapps:smart-contracts:apps:state.md"},
115 |                 {"name": "Transactions", "path": "developer:docs:details:dapps:smart-contracts:apps:txs.md"}
116 |               ]
117 |             },
118 |             "frontend": {
119 |               "name": "Frontend Integration",
120 |               "description": "Frontend integration guides",
121 |               "path": "developer:docs:details:dapps:smart-contracts:frontend",
122 |               "documents": [
123 |                 {"name": "Applications", "path": "developer:docs:details:dapps:smart-contracts:frontend:apps.md"},
124 |                 {"name": "Smart Signatures", "path": "developer:docs:details:dapps:smart-contracts:frontend:smartsigs.md"}
125 |               ]
126 |             },
127 |             "smartsigs": {
128 |               "name": "Smart Signatures",
129 |               "description": "Smart signature documentation",
130 |               "path": "developer:docs:details:dapps:smart-contracts:smartsigs",
131 |               "documents": [
132 |                 {"name": "Overview", "path": "developer:docs:details:dapps:smart-contracts:smartsigs:index.md"},
133 |                 {"name": "Modes", "path": "developer:docs:details:dapps:smart-contracts:smartsigs:modes.md"},
134 |                 {"name": "Walkthrough", "path": "developer:docs:details:dapps:smart-contracts:smartsigs:walkthrough.md"}
135 |               ]
136 |             }
137 |           }
138 |         },
139 |         "writing-contracts": {
140 |           "name": "Writing Contracts",
141 |           "description": "Contract development guides",
142 |           "path": "developer:docs:details:dapps:writing-contracts",
143 |           "documents": [
144 |             {"name": "Beaker", "path": "developer:docs:details:dapps:writing-contracts:beaker.md"},
145 |             {"name": "PyTeal", "path": "developer:docs:details:dapps:writing-contracts:pyteal.md"},
146 |             {"name": "Python", "path": "developer:docs:details:dapps:writing-contracts:python.md"}
147 |           ]
148 |         }
149 |       }
150 |     },
151 |     "stateproofs": {
152 |       "name": "State Proofs",
153 |       "description": "State proofs documentation",
154 |       "path": "developer:docs:details:stateproofs",
155 |       "documents": [
156 |         {"name": "Overview", "path": "developer:docs:details:stateproofs:index.md"},
157 |         {"name": "Light Client", "path": "developer:docs:details:stateproofs:light_client.md"}
158 |       ]
159 |     },
160 |     "transactions": {
161 |       "name": "Transactions",
162 |       "description": "Transaction documentation",
163 |       "path": "developer:docs:details:transactions",
164 |       "documents": [
165 |         {"name": "Overview", "path": "developer:docs:details:transactions:index.md"},
166 |         {"name": "Offline Transactions", "path": "developer:docs:details:transactions:offline_transactions.md"},
167 |         {"name": "Payment Prompts", "path": "developer:docs:details:transactions:payment_prompts.md"},
168 |         {"name": "Signatures", "path": "developer:docs:details:transactions:signatures.md"},
169 |         {"name": "Transactions", "path": "developer:docs:details:transactions:transactions.md"}
170 |       ]
171 |     }
172 |   }
173 | }
174 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/apiManager/indexer/transaction.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
  2 | import { indexerClient } from '../../../algorand-client.js';
  3 | import { ResponseProcessor } from '../../../utils/responseProcessor.js';
  4 | import type { 
  5 |   TransactionResponse,
  6 |   TransactionsResponse 
  7 | } from 'algosdk/dist/types/client/v2/indexer/models/types';
  8 | 
  9 | export const transactionTools = [
 10 |   {
 11 |     name: 'api_indexer_lookup_transaction_by_id',
 12 |     description: 'Get transaction information by ID',
 13 |     inputSchema: {
 14 |       type: 'object',
 15 |       properties: {
 16 |         txId: {
 17 |           type: 'string',
 18 |           description: 'Transaction ID'
 19 |         }
 20 |       },
 21 |       required: ['txId']
 22 |     }
 23 |   },
 24 |   {
 25 |     name: 'api_indexer_lookup_account_transactions',
 26 |     description: 'Get account transaction history',
 27 |     inputSchema: {
 28 |       type: 'object',
 29 |       properties: {
 30 |         address: {
 31 |           type: 'string',
 32 |           description: 'Account address'
 33 |         },
 34 |         limit: {
 35 |           type: 'integer',
 36 |           description: 'Maximum number of transactions to return'
 37 |         },
 38 |         beforeTime: {
 39 |           type: 'string',
 40 |           description: 'Only return transactions before this time'
 41 |         },
 42 |         afterTime: {
 43 |           type: 'string',
 44 |           description: 'Only return transactions after this time'
 45 |         },
 46 |         minRound: {
 47 |           type: 'integer',
 48 |           description: 'Only return transactions after this round'
 49 |         },
 50 |         maxRound: {
 51 |           type: 'integer',
 52 |           description: 'Only return transactions before this round'
 53 |         },
 54 |         txType: {
 55 |           type: 'string',
 56 |           description: 'Filter by transaction type'
 57 |         },
 58 |         assetId: {
 59 |           type: 'integer',
 60 |           description: 'Filter by asset ID'
 61 |         }
 62 |       },
 63 |       required: ['address']
 64 |     }
 65 |   },
 66 |   {
 67 |     name: 'api_indexer_search_for_transactions',
 68 |     description: 'Search for transactions with various criteria',
 69 |     inputSchema: {
 70 |       type: 'object',
 71 |       properties: {
 72 |         limit: {
 73 |           type: 'integer',
 74 |           description: 'Maximum number of transactions to return'
 75 |         },
 76 |         beforeTime: {
 77 |           type: 'string',
 78 |           description: 'Only return transactions before this time'
 79 |         },
 80 |         afterTime: {
 81 |           type: 'string',
 82 |           description: 'Only return transactions after this time'
 83 |         },
 84 |         minRound: {
 85 |           type: 'integer',
 86 |           description: 'Only return transactions after this round'
 87 |         },
 88 |         maxRound: {
 89 |           type: 'integer',
 90 |           description: 'Only return transactions before this round'
 91 |         },
 92 |         address: {
 93 |           type: 'string',
 94 |           description: 'Filter by account address'
 95 |         },
 96 |         addressRole: {
 97 |           type: 'string',
 98 |           description: 'Filter by address role (sender or receiver)'
 99 |         },
100 |         txType: {
101 |           type: 'string',
102 |           description: 'Filter by transaction type'
103 |         },
104 |         assetId: {
105 |           type: 'integer',
106 |           description: 'Filter by asset ID'
107 |         },
108 |         applicationId: {
109 |           type: 'integer',
110 |           description: 'Filter by application ID'
111 |         },
112 |         currencyGreaterThan: {
113 |           type: 'integer',
114 |           description: 'Filter by minimum amount'
115 |         },
116 |         currencyLessThan: {
117 |           type: 'integer',
118 |           description: 'Filter by maximum amount'
119 |         },
120 |         round: {
121 |           type: 'integer',
122 |           description: 'Filter by specific round'
123 |         },
124 |         nextToken: {
125 |           type: 'string',
126 |           description: 'Token for retrieving the next page of results'
127 |         }
128 |       }
129 |     }
130 |   }
131 | ];
132 | 
133 | export async function lookupTransactionByID(txId: string): Promise<TransactionResponse> {
134 |   try {
135 |     console.log(`Looking up transaction with ID ${txId}`);
136 |     const response = await indexerClient.lookupTransactionByID(txId).do() as TransactionResponse;
137 |     // Log only metadata instead of full response
138 |     console.log('Transaction response metadata:', {
139 |       currentRound: response.currentRound,
140 |       transaction: response.transaction ? 'present' : 'not found'
141 |     });
142 |     return response;
143 |   } catch (error) {
144 |     console.error('Transaction lookup error:', error);
145 |     if (error instanceof McpError) {
146 |       throw error;
147 |     }
148 |     throw new McpError(
149 |       ErrorCode.InternalError,
150 |       `Failed to get transaction: ${error instanceof Error ? error.message : String(error)}`
151 |     );
152 |   }
153 | }
154 | 
155 | export async function lookupAccountTransactions(address: string, params?: {
156 |   limit?: number;
157 |   beforeTime?: string;
158 |   afterTime?: string;
159 |   minRound?: number;
160 |   maxRound?: number;
161 |   txType?: string;
162 |   assetId?: number;
163 | }): Promise<TransactionsResponse> {
164 |   try {
165 |     console.log(`Looking up transactions for account ${address}`);
166 |     let search = indexerClient.lookupAccountTransactions(address);
167 | 
168 |     if (params?.limit) {
169 |       search = search.limit(params.limit);
170 |     }
171 |     if (params?.beforeTime) {
172 |       search = search.beforeTime(params.beforeTime);
173 |     }
174 |     if (params?.afterTime) {
175 |       search = search.afterTime(params.afterTime);
176 |     }
177 |     if (params?.minRound) {
178 |       search = search.minRound(params.minRound);
179 |     }
180 |     if (params?.maxRound) {
181 |       search = search.maxRound(params.maxRound);
182 |     }
183 |     if (params?.txType) {
184 |       search = search.txType(params.txType);
185 |     }
186 |     if (params?.assetId) {
187 |       search = search.assetID(params.assetId);
188 |     }
189 | 
190 |     const response = await search.do() as TransactionsResponse;
191 |     // Log only metadata instead of full response
192 |     console.log('Account transactions response metadata:', {
193 |       currentRound: response.currentRound,
194 |       nextToken: response.nextToken,
195 |       transactionCount: response.transactions?.length || 0
196 |     });
197 |     return response;
198 |   } catch (error) {
199 |     console.error('Account transactions lookup error:', error);
200 |     if (error instanceof McpError) {
201 |       throw error;
202 |     }
203 |     throw new McpError(
204 |       ErrorCode.InternalError,
205 |       `Failed to get account transactions: ${error instanceof Error ? error.message : String(error)}`
206 |     );
207 |   }
208 | }
209 | 
210 | export async function searchForTransactions(params?: {
211 |   limit?: number;
212 |   beforeTime?: string;
213 |   afterTime?: string;
214 |   minRound?: number;
215 |   maxRound?: number;
216 |   address?: string;
217 |   addressRole?: string;
218 |   txType?: string;
219 |   assetId?: number;
220 |   applicationId?: number;
221 |   currencyGreaterThan?: number;
222 |   currencyLessThan?: number;
223 |   round?: number;
224 |   nextToken?: string;
225 | }): Promise<TransactionsResponse> {
226 |   try {
227 |     console.log('Searching transactions with params:', params);
228 |     let search = indexerClient.searchForTransactions();
229 | 
230 |     if (params?.limit) {
231 |       search = search.limit(params.limit);
232 |     }
233 |     if (params?.beforeTime) {
234 |       search = search.beforeTime(params.beforeTime);
235 |     }
236 |     if (params?.afterTime) {
237 |       search = search.afterTime(params.afterTime);
238 |     }
239 |     if (params?.minRound) {
240 |       search = search.minRound(params.minRound);
241 |     }
242 |     if (params?.maxRound) {
243 |       search = search.maxRound(params.maxRound);
244 |     }
245 |     if (params?.address) {
246 |       search = search.address(params.address);
247 |     }
248 |     if (params?.addressRole) {
249 |       search = search.addressRole(params.addressRole);
250 |     }
251 |     if (params?.txType) {
252 |       search = search.txType(params.txType);
253 |     }
254 |     if (params?.assetId) {
255 |       search = search.assetID(params.assetId);
256 |     }
257 |     if (params?.applicationId) {
258 |       search = search.applicationID(params.applicationId);
259 |     }
260 |     if (params?.currencyGreaterThan) {
261 |       search = search.currencyGreaterThan(params.currencyGreaterThan);
262 |     }
263 |     if (params?.currencyLessThan) {
264 |       search = search.currencyLessThan(params.currencyLessThan);
265 |     }
266 |     if (params?.round) {
267 |       search = search.round(params.round);
268 |     }
269 |     if (params?.nextToken) {
270 |       search = search.nextToken(params.nextToken);
271 |     }
272 | 
273 |     const response = await search.do() as TransactionsResponse;
274 |     // Log only metadata instead of full response
275 |     console.log('Search transactions response metadata:', {
276 |       currentRound: response.currentRound,
277 |       nextToken: response.nextToken,
278 |       transactionCount: response.transactions?.length || 0
279 |     });
280 |     return response;
281 |   } catch (error) {
282 |     console.error('Search transactions error:', error);
283 |     if (error instanceof McpError) {
284 |       throw error;
285 |     }
286 |     throw new McpError(
287 |       ErrorCode.InternalError,
288 |       `Failed to search transactions: ${error instanceof Error ? error.message : String(error)}`
289 |     );
290 |   }
291 | }
292 | 
293 | export const handleTransactionTools = ResponseProcessor.wrapResourceHandler(async function handleTransactionTools(args: any): Promise<any> {
294 |   const name = args.name;
295 |   
296 |   switch (name) {
297 |     case 'api_indexer_lookup_transaction_by_id': {
298 |       const { txId } = args;
299 |       const info = await lookupTransactionByID(txId);
300 |       return info.transaction;
301 |     }
302 |     case 'api_indexer_lookup_account_transactions': {
303 |       const { address, ...params } = args;
304 |       const info = await lookupAccountTransactions(address, params);
305 |       return info.transactions;
306 |     }
307 |     case 'api_indexer_search_for_transactions': {
308 |       const info = await searchForTransactions(args);
309 |       return info.transactions;
310 |     }
311 |     default:
312 |       throw new McpError(
313 |         ErrorCode.MethodNotFound,
314 |         `Unknown tool: ${name}`
315 |       );
316 |   }
317 | });
318 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy-categories/sdks.json:
--------------------------------------------------------------------------------

```json
  1 | {
  2 |   "name": "Software Development Kits",
  3 |   "description": "Documentation for Algorand sdks",
  4 |   "path": "sdks",
  5 |   "subcategories": {
  6 |     "javascript": {
  7 |       "name": "JavaScript SDK",
  8 |       "description": "Documentation for the JavaScript/TypeScript SDK",
  9 |       "path": "sdks:javascript",
 10 |       "documents": [
 11 |         {"name": "README", "path": "sdks:javascript:README.md"},
 12 |         {"name": "FAQ", "path": "sdks:javascript:FAQ.md"},
 13 |         {"name": "Modules", "path": "sdks:javascript:modules.md"}
 14 |       ],
 15 |       "subcategories": {
 16 |         "classes": {
 17 |           "name": "Classes",
 18 |           "description": "JavaScript SDK class documentation",
 19 |           "path": "sdks:javascript:classes",
 20 |           "documents": [
 21 |             {"name": "ABIAddressType", "path": "sdks:javascript:classes:ABIAddressType.md"},
 22 |             {"name": "ABIArrayDynamicType", "path": "sdks:javascript:classes:ABIArrayDynamicType.md"},
 23 |             {"name": "ABIArrayStaticType", "path": "sdks:javascript:classes:ABIArrayStaticType.md"},
 24 |             {"name": "ABIBoolType", "path": "sdks:javascript:classes:ABIBoolType.md"},
 25 |             {"name": "ABIByteType", "path": "sdks:javascript:classes:ABIByteType.md"},
 26 |             {"name": "ABIContract", "path": "sdks:javascript:classes:ABIContract.md"},
 27 |             {"name": "ABIInterface", "path": "sdks:javascript:classes:ABIInterface.md"},
 28 |             {"name": "ABIMethod", "path": "sdks:javascript:classes:ABIMethod.md"},
 29 |             {"name": "ABIStringType", "path": "sdks:javascript:classes:ABIStringType.md"},
 30 |             {"name": "ABITupleType", "path": "sdks:javascript:classes:ABITupleType.md"},
 31 |             {"name": "ABIType", "path": "sdks:javascript:classes:ABIType.md"},
 32 |             {"name": "ABIUfixedType", "path": "sdks:javascript:classes:ABIUfixedType.md"},
 33 |             {"name": "ABIUintType", "path": "sdks:javascript:classes:ABIUintType.md"},
 34 |             {"name": "Algodv2", "path": "sdks:javascript:classes:Algodv2.md"},
 35 |             {"name": "AtomicTransactionComposer", "path": "sdks:javascript:classes:AtomicTransactionComposer.md"},
 36 |             {"name": "DryrunResult", "path": "sdks:javascript:classes:DryrunResult.md"},
 37 |             {"name": "Indexer", "path": "sdks:javascript:classes:Indexer.md"},
 38 |             {"name": "Kmd", "path": "sdks:javascript:classes:Kmd.md"},
 39 |             {"name": "LogicSig", "path": "sdks:javascript:classes:LogicSig.md"},
 40 |             {"name": "LogicSigAccount", "path": "sdks:javascript:classes:LogicSigAccount.md"},
 41 |             {"name": "SourceMap", "path": "sdks:javascript:classes:SourceMap.md"},
 42 |             {"name": "Transaction", "path": "sdks:javascript:classes:Transaction.md"}
 43 |           ]
 44 |         },
 45 |         "enums": {
 46 |           "name": "Enums",
 47 |           "description": "JavaScript SDK enum documentation",
 48 |           "path": "sdks:javascript:enums",
 49 |           "documents": [
 50 |             {"name": "ABIReferenceType", "path": "sdks:javascript:enums:ABIReferenceType.md"},
 51 |             {"name": "ABITransactionType", "path": "sdks:javascript:enums:ABITransactionType.md"},
 52 |             {"name": "AtomicTransactionComposerStatus", "path": "sdks:javascript:enums:AtomicTransactionComposerStatus.md"},
 53 |             {"name": "IntDecoding", "path": "sdks:javascript:enums:IntDecoding.md"},
 54 |             {"name": "OnApplicationComplete", "path": "sdks:javascript:enums:OnApplicationComplete.md"},
 55 |             {"name": "TransactionType", "path": "sdks:javascript:enums:TransactionType.md"}
 56 |           ]
 57 |         },
 58 |         "interfaces": {
 59 |           "name": "Interfaces",
 60 |           "description": "JavaScript SDK interface documentation",
 61 |           "path": "sdks:javascript:interfaces",
 62 |           "documents": [
 63 |             {"name": "ABIContractNetworkInfo", "path": "sdks:javascript:interfaces:ABIContractNetworkInfo.md"},
 64 |             {"name": "ABIContractNetworks", "path": "sdks:javascript:interfaces:ABIContractNetworks.md"},
 65 |             {"name": "ABIContractParams", "path": "sdks:javascript:interfaces:ABIContractParams.md"},
 66 |             {"name": "ABIInterfaceParams", "path": "sdks:javascript:interfaces:ABIInterfaceParams.md"},
 67 |             {"name": "ABIMethodArgParams", "path": "sdks:javascript:interfaces:ABIMethodArgParams.md"},
 68 |             {"name": "ABIMethodParams", "path": "sdks:javascript:interfaces:ABIMethodParams.md"},
 69 |             {"name": "ABIMethodReturnParams", "path": "sdks:javascript:interfaces:ABIMethodReturnParams.md"},
 70 |             {"name": "ABIResult", "path": "sdks:javascript:interfaces:ABIResult.md"},
 71 |             {"name": "Account", "path": "sdks:javascript:interfaces:Account.md"},
 72 |             {"name": "Address", "path": "sdks:javascript:interfaces:Address.md"},
 73 |             {"name": "BaseHTTPClient", "path": "sdks:javascript:interfaces:BaseHTTPClient.md"},
 74 |             {"name": "BaseHTTPClientError", "path": "sdks:javascript:interfaces:BaseHTTPClientError.md"},
 75 |             {"name": "BaseHTTPClientResponse", "path": "sdks:javascript:interfaces:BaseHTTPClientResponse.md"},
 76 |             {"name": "BoxReference", "path": "sdks:javascript:interfaces:BoxReference.md"},
 77 |             {"name": "CustomTokenHeader", "path": "sdks:javascript:interfaces:CustomTokenHeader.md"},
 78 |             {"name": "MultisigMetadata", "path": "sdks:javascript:interfaces:MultisigMetadata.md"},
 79 |             {"name": "SignedTransaction", "path": "sdks:javascript:interfaces:SignedTransaction.md"},
 80 |             {"name": "SuggestedParams", "path": "sdks:javascript:interfaces:SuggestedParams.md"},
 81 |             {"name": "TransactionParams", "path": "sdks:javascript:interfaces:TransactionParams.md"},
 82 |             {"name": "TransactionWithSigner", "path": "sdks:javascript:interfaces:TransactionWithSigner.md"}
 83 |           ]
 84 |         }
 85 |       }
 86 |     },
 87 |     "python": {
 88 |       "name": "Python SDK",
 89 |       "description": "Documentation for the Python SDK",
 90 |       "path": "sdks:python",
 91 |       "documents": [
 92 |         {"name": "README", "path": "sdks:python:README.md"},
 93 |         {"name": "Index", "path": "sdks:python:index.rst"}
 94 |       ],
 95 |       "subcategories": {
 96 |         "algosdk": {
 97 |           "name": "AlgoSDK",
 98 |           "description": "Core Python SDK modules",
 99 |           "path": "sdks:python:algosdk",
100 |           "documents": [
101 |             {"name": "Account", "path": "sdks:python:algosdk:account.rst"},
102 |             {"name": "Atomic Transaction Composer", "path": "sdks:python:algosdk:atomic_transaction_composer.rst"},
103 |             {"name": "Box Reference", "path": "sdks:python:algosdk:box_reference.rst"},
104 |             {"name": "Constants", "path": "sdks:python:algosdk:constants.rst"},
105 |             {"name": "Dryrun Results", "path": "sdks:python:algosdk:dryrun_results.rst"},
106 |             {"name": "Encoding", "path": "sdks:python:algosdk:encoding.rst"},
107 |             {"name": "Error", "path": "sdks:python:algosdk:error.rst"},
108 |             {"name": "KMD", "path": "sdks:python:algosdk:kmd.rst"},
109 |             {"name": "Logic", "path": "sdks:python:algosdk:logic.rst"},
110 |             {"name": "Mnemonic", "path": "sdks:python:algosdk:mnemonic.rst"},
111 |             {"name": "Source Map", "path": "sdks:python:algosdk:source_map.rst"},
112 |             {"name": "Transaction", "path": "sdks:python:algosdk:transaction.rst"},
113 |             {"name": "Wallet", "path": "sdks:python:algosdk:wallet.rst"}
114 |           ],
115 |           "subcategories": {
116 |             "abi": {
117 |               "name": "ABI",
118 |               "description": "Application Binary Interface modules",
119 |               "path": "sdks:python:algosdk:abi",
120 |               "documents": [
121 |                 {"name": "Address Type", "path": "sdks:python:algosdk:abi:address_type.rst"},
122 |                 {"name": "Array Dynamic Type", "path": "sdks:python:algosdk:abi:array_dynamic_type.rst"},
123 |                 {"name": "Array Static Type", "path": "sdks:python:algosdk:abi:array_static_type.rst"},
124 |                 {"name": "Base Type", "path": "sdks:python:algosdk:abi:base_type.rst"},
125 |                 {"name": "Bool Type", "path": "sdks:python:algosdk:abi:bool_type.rst"},
126 |                 {"name": "Byte Type", "path": "sdks:python:algosdk:abi:byte_type.rst"},
127 |                 {"name": "Contract", "path": "sdks:python:algosdk:abi:contract.rst"},
128 |                 {"name": "Interface", "path": "sdks:python:algosdk:abi:interface.rst"},
129 |                 {"name": "Method", "path": "sdks:python:algosdk:abi:method.rst"},
130 |                 {"name": "Reference", "path": "sdks:python:algosdk:abi:reference.rst"},
131 |                 {"name": "String Type", "path": "sdks:python:algosdk:abi:string_type.rst"},
132 |                 {"name": "Transaction", "path": "sdks:python:algosdk:abi:transaction.rst"},
133 |                 {"name": "Tuple Type", "path": "sdks:python:algosdk:abi:tuple_type.rst"},
134 |                 {"name": "UFixed Type", "path": "sdks:python:algosdk:abi:ufixed_type.rst"},
135 |                 {"name": "UInt Type", "path": "sdks:python:algosdk:abi:uint_type.rst"}
136 |               ]
137 |             },
138 |             "v2client": {
139 |               "name": "V2 Client",
140 |               "description": "V2 API client modules",
141 |               "path": "sdks:python:algosdk:v2client",
142 |               "documents": [
143 |                 {"name": "Algod", "path": "sdks:python:algosdk:v2client:algod.rst"},
144 |                 {"name": "Indexer", "path": "sdks:python:algosdk:v2client:indexer.rst"}
145 |               ]
146 |             }
147 |           }
148 |         }
149 |       }
150 |     }
151 |   }
152 | }
153 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:sdks:java:index.md:
--------------------------------------------------------------------------------

```markdown
  1 | title: Java SDK: Your First Transaction
  2 | 
  3 | This section is a quick start guide for interacting with Algorand network using Java. This guide will help to install [Algorand sandbox](https://github.com/algorand/sandbox){target=blank}, which provides a node for testing and development. This guide will also help to install the Java SDK, create an account and submit your first transaction.
  4 | 
  5 | # Install Sandbox
  6 | 
  7 | !!! info
  8 |     This step is only required if you are not using AlgoKit. If you are using AlgoKit, you can spin up a sandbox using the LocalNet, see [AlgoKit getting started guide](/docs/get-started/algokit/#start-a-localnet) for more information. 
  9 | 
 10 | !!! Prerequisites
 11 |     - Docker Compose ([install guide](https://docs.docker.com/compose/install/){target=blank})
 12 |     - Git ([install guide](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git){target=blank})
 13 | 
 14 | Algorand provides a docker instance for setting up a node, which can be used to get started developing. To install and use this instance, follow these instructions.
 15 | 
 16 | ```bash
 17 | git clone https://github.com/algorand/sandbox.git
 18 | cd sandbox
 19 | ./sandbox up dev 
 20 | ```
 21 | 
 22 | This will install and start private network. To read more about Algorand networks see [Algorand Networks](../../get-details/algorand-networks/index.md){target=_blank}. 
 23 | 
 24 | [More Information about the sandbox](https://developer.algorand.org/articles/introducing-sandbox-20/) and [how to use](https://developer.algorand.org/tutorials/exploring-the-algorand-sandbox/) it.
 25 | 
 26 | 
 27 | # Install Java SDK 
 28 | Algorand provides an [SDK for Java](https://github.com/algorand/java-algorand-sdk). The instructions for installing the SDK are as follows. The Java SDK is available in the MVN repository and can be used in your Maven project by including the following dependency.
 29 | 
 30 | !!! Prerequisites
 31 |     Java SDK requires Java 7+ and Android minSdkVersion 16+. Check for the latest version of the Java SDK [here](https://github.com/algorand/java-algorand-sdk#installation){target=blank}.
 32 | 
 33 | ```java
 34 | <dependency>
 35 |     <groupId>com.algorand</groupId>
 36 |     <artifactId>algosdk</artifactId>
 37 |     <version>2.0.0</version>
 38 | </dependency>
 39 | ```
 40 | 
 41 | The [GitHub repository](https://github.com/algorand/js-algorand-sdk){target=_blank} contains additional documentation and examples.
 42 | 
 43 | See the Java SDK [reference documentation](https://algorand.github.io/java-algorand-sdk/){target=blank} for more information on packages and methods.
 44 | 
 45 | The SDK is installed and can now interact with the Sandbox created earlier.
 46 | 
 47 | # Create an Account
 48 | In order to interact with the Algorand blockchain, you must have a funded account. To quickly create a test account use the following code.
 49 | 
 50 | <!-- ===JAVASDK_ACCOUNT_GENERATE=== -->
 51 | ```java
 52 | Account acct = new Account();
 53 | System.out.println("Address: " + acct.getAddress());
 54 | System.out.println("Passphrase: " + acct.toMnemonic());
 55 | ```
 56 | [Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/Overview.java#L76-L79)
 57 | <!-- ===JAVASDK_ACCOUNT_GENERATE=== -->
 58 | 
 59 | [More Information](../../get-details/accounts/create/#standalone){target=blank}
 60 | 
 61 | !!! Warning
 62 |     Never share Mnemonic private keys. Production environments require stringent private key management. For more information on key management in community Wallets, click [here](../../../../ecosystem-projects/#wallets){target=blank}. For the [Algorand open source wallet](https://developer.algorand.org/articles/algorand-wallet-now-open-source/){target=blank}, click [here](https://github.com/algorand/algorand-wallet){target=blank}.
 63 | 
 64 | # Fund the Account
 65 | Before sending transactions to the Algorand network, the account must be funded to cover the minimal transaction fees that exist on Algorand. In this example, we'll be using prefunded accounts available in the Sandbox. To fund an account on Testnet account use the [Algorand faucet](https://dispenser.testnet.aws.algodev.network/){target=_blank}. 
 66 | 
 67 | 
 68 | !!! Info
 69 |     All Algorand accounts require a minimum balance to be registered in the ledger. To read more about Algorand minimums see this [link](../../get-details/accounts/#minimum-balance){target=blank}.
 70 | 
 71 | 
 72 | # Connect Your Client
 73 | An Algod client must be instantiated prior to making calls to the API endpoints. You must provide values for `<algod-address>` and `<algod-token>`. The CLI tools implement the client natively. By default, the `algodToken` for each [sandbox](https://github.com/algorand/sandbox) is set to its `aaa...` value and the `algodAddress` corresponds to `http://localhost:4001`.
 74 | 
 75 | 
 76 | <!-- ===JAVASDK_ALGOD_CREATE_CLIENT=== -->
 77 | ```java
 78 | String algodHost = "http://localhost";
 79 | int algodPort = 4001;
 80 | String algodToken = "a".repeat(64);
 81 | AlgodClient algodClient = new AlgodClient(algodHost, algodPort, algodToken);
 82 | 
 83 | // OR if the API provider requires a specific header key for the token
 84 | String tokenHeader = "X-API-Key";
 85 | AlgodClient otherAlgodClient = new AlgodClient(algodHost, algodPort, algodToken, tokenHeader);
 86 | ```
 87 | [Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/Overview.java#L94-L102)
 88 | <!-- ===JAVASDK_ALGOD_CREATE_CLIENT=== -->
 89 | 
 90 | !!! Info
 91 |     The example code connects to the sandbox Algod client. If you want to connect to a public API client, change the host, port, and token parameters to match the API service. See some service available [here](https://developer.algorand.org/ecosystem-projects/?tags=api-services)
 92 | 
 93 | !!! Info
 94 |     If you are connecting to the Testnet, a dispenser is available [here](https://dispenser.testnet.aws.algodev.network/){target=_blank}
 95 | 
 96 | # Check Your Balance
 97 | Before moving on to the next step, make sure your account has been funded by the faucet.
 98 | 
 99 | <!-- ===JAVASDK_ALGOD_FETCH_ACCOUNT_INFO=== -->
100 | ```java
101 | Response<com.algorand.algosdk.v2.client.model.Account> acctInfoResp = algodClient
102 |         .AccountInformation(acct.getAddress()).execute();
103 | com.algorand.algosdk.v2.client.model.Account acctInfo = acctInfoResp.body();
104 | // print one of the fields in the account info response
105 | System.out.printf("Current balance: %d", acctInfo.amount);
106 | ```
107 | [Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/Overview.java#L84-L89)
108 | <!-- ===JAVASDK_ALGOD_FETCH_ACCOUNT_INFO=== -->
109 | 
110 | 
111 | # Build First Transaction
112 | Transactions are used to interact with the Algorand network. To create a payment transaction use the following code.
113 | ​
114 | <!-- ===JAVASDK_TRANSACTION_PAYMENT_CREATE=== -->
115 | ```java
116 | Response<TransactionParametersResponse> suggestedParams = algodClient.TransactionParams().execute();
117 | Integer amount = 1000000; // 1 Algo
118 | Transaction ptxn = Transaction.PaymentTransactionBuilder()
119 |         .sender(acct.getAddress())
120 |         .amount(amount)
121 |         .receiver(acct2.getAddress())
122 |         .suggestedParams(suggestedParams.body()).build();
123 | ```
124 | [Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/Overview.java#L25-L32)
125 | <!-- ===JAVASDK_TRANSACTION_PAYMENT_CREATE=== -->
126 | ​
127 | !!! Info
128 |     Algorand supports many transaction types. To see what types are supported see [Transactions](../../get-details/transactions/index.md#transaction-types){target=_blank}. 
129 | 
130 | # Sign First Transaction
131 | Before the transaction is considered valid, it must be signed by a private key. Use the following code to sign the transaction.
132 | 
133 | <!-- ===JAVASDK_TRANSACTION_PAYMENT_SIGN=== -->
134 | ```java
135 | SignedTransaction sptxn = acct.signTransaction(ptxn);
136 | ```
137 | [Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/Overview.java#L35-L36)
138 | <!-- ===JAVASDK_TRANSACTION_PAYMENT_SIGN=== -->
139 | 
140 | !!! Info
141 |     Algorand provides additional ways for transactions to be signed, other than by a standalone account. For more information see [Authorization](../../get-details/transactions/signatures){target=blank}.
142 | 
143 | # Submit the Transaction
144 | The signed transaction can now be submitted to the network. The SDK `waitForConfirmation` utility function is called after the transaction is submitted to wait until the transaction is broadcast to the Algorand blockchain and is confirmed. 
145 | 
146 | <!-- ===JAVASDK_TRANSACTION_PAYMENT_SUBMIT=== -->
147 | ```java
148 | // encode the transaction
149 | byte[] encodedTxBytes = Encoder.encodeToMsgPack(sptxn);
150 | // submit the transaction to the algod server
151 | Response<PostTransactionsResponse> resp = algodClient.RawTransaction().rawtxn(encodedTxBytes).execute();
152 | // wait for the transaction to be confirmed
153 | String txid = resp.body().txId;
154 | PendingTransactionResponse result = Utils.waitForConfirmation(algodClient, txid, 4);
155 | System.out.printf("Transaction %s confirmed in round %d\n", txid, result.confirmedRound);
156 | ```
157 | [Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/Overview.java#L39-L47)
158 | <!-- ===JAVASDK_TRANSACTION_PAYMENT_SUBMIT=== -->
159 | 
160 | # Viewing the Transaction
161 | 
162 | To view the transaction we submitted to the sandbox Algod, open [Lora](https://lora.algokit.io/localnet){target=_blank} and choose `LocalNet` configuration option, then search for the transaction ID. 
163 | 
164 | To view a transaction submitted to public network like testnet, open [Lora](https://lora.algokit.io/testnet){target=_blank} or [Pera Explorer](https://testnet.explorer.perawallet.app/){target=blank} and paste the transaction ID into the search bar.
165 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/tealscript:guides_features.md:
--------------------------------------------------------------------------------

```markdown
  1 | ---
  2 | title: Supported AVM Features
  3 | ---
  4 | 
  5 | # Supported AVM Features
  6 | 
  7 | ## ARCS
  8 | | ARC | Name | Description |
  9 | | --- | --- | --- |
 10 | | 4 | Application Binary Interface (ABI)	 | ABI method routing is automatically down for public methods. All ABI types are natively supported. Compiler outputs ARC4 JSON |
 11 | | 22 | Add `read-only` annotation to ABI methods | Decorating a method with `@abi.readonly` will mark it as readonly |
 12 | | 28 | Algorand Event Log Spec | Use `EventLogger` to log ARC28 events |
 13 | | 32 | Application Specification | Compiler generates an arc32 JSON file |
 14 | 
 15 | ## ABI Types
 16 | | ABI Type | TEALScript |
 17 | | --- | --- |
 18 | | `address` | `Address` |
 19 | | `uintN` | `uint64`, `uint32`, `uint16`, `uint8`, `uint128`, `uint256`, or `uint<N>` |
 20 | | `bool` | `boolean` |
 21 | | `ufixedNxM` | `ufixed<N, M>` |
 22 | | `T[]` | `T[]` |
 23 | | `T[N]` | `StaticArray<T, N>`, `bytes32`, or `bytes64` |
 24 | | `[T1, T2, ..., TN]` | `[T1, T2, ..., TN]` or `{keyone: T1, keytwo: T2, ..., keyN: TN}` |
 25 | | `string` | `string` |
 26 | | `application` | `ApplicationReference` |
 27 | | `asset` | `AssetReference` |
 28 | | `account` | `AccountReference` |
 29 | | `txn` | `Txn` |
 30 | | `pay` | `PayTxn` |
 31 | | `keyreg` | `KeyRegTxn` |
 32 | | `acfg` | `AssetConfigTxn` |
 33 | | `axfer` | `AssetTransferTxn` |
 34 | | `afrz` | `AssetFreezeTxn` |
 35 | ## Opcodes
 36 | 
 37 | ### Flow Control
 38 | | Opcode | TEALScript |
 39 | | --- | --- |
 40 | | `err` | `throw Error()` |
 41 | | `bnz` | Used automatically in loops and conditionals |
 42 | | `bz` | Used automatically in loops and conditionals |
 43 | | `b` | Used automatically in loops and conditionals |
 44 | | `return` | Used when the top-level function returns |
 45 | | `assert` | `assert` |
 46 | | `bury` | Stack manipulation is not officially supported |
 47 | | `popn` | Stack manipulation is not officially supported |
 48 | | `dupn` | Stack manipulation is not officially supported |
 49 | | `pop` | Stack manipulation is not officially supported |
 50 | | `dup` | Stack manipulation is not officially supported |
 51 | | `dup2` | Stack manipulation is not officially supported |
 52 | | `dig` | Stack manipulation is not officially supported |
 53 | | `swap` | Stack manipulation is not officially supported |
 54 | | `select` | Not officially supported yet, but could be used to optimize conditionals in the future |
 55 | | `cover` | Stack manipulation is not officially supported |
 56 | | `uncover` | Stack manipulation is not officially supported |
 57 | | `callsub` | Used when calling a function |
 58 | | `retsub` | `return` |
 59 | | `proto` | Used automatically in functions |
 60 | | `frame_dig` | Used automatically in functions |
 61 | | `frame_bury` | Used automatically in functions |
 62 | | `switch` | Not officially supported yet, but could be used to optimize conditionals in the future |
 63 | | `match` | Not officially supported yet, but could be used to optimize conditionals in the future |
 64 | 
 65 | ### Cryptography
 66 | | Opcode | TEALScript |
 67 | | --- | --- |
 68 | | `sha256` | `sha256` |
 69 | | `keccak256` | `keccak256` |
 70 | | `sha512_256` | `sha512_256` |
 71 | | `ed25519verify` | `ed25519Verify` |
 72 | | `ecdsa_verify` | `ecdsaVerify` |
 73 | | `ecdsa_pk_decompress` | `ecdsaPkDecompress` |
 74 | | `ecdsa_pk_recover` | `ecdsaPkRecover` |
 75 | | `ed25519verify_bare` | `ed25519VerifyBare` |
 76 | | `sha3_256` | `sha3_256` |
 77 | | `vrf_verify` | `vrfVerify` |
 78 | | `ec_add` | `ecAdd` |
 79 | | `ec_scalar_mul` | `ecScalarMul` |
 80 | | `ec_pairing_check` | `ecPairingCheck` |
 81 | | `ec_multi_scalar_mul` | `ecMultiScalarMul` |
 82 | | `ec_subgroup_check` | `ecSubgroupCheck` |
 83 | | `ec_map_to` | `ecMapTo` |
 84 | 
 85 | ### Arithmetic
 86 | | Opcode | TEALScript |
 87 | | --- | --- |
 88 | | `+` | Natively supported |
 89 | | `-` | Natively supported |
 90 | | `/` | Natively supported |
 91 | | `*` | Natively supported |
 92 | | `<` | Natively supported |
 93 | | `>` | Natively supported |
 94 | | `<=` | Natively supported |
 95 | | `>=` | Natively supported |
 96 | | `&&` | Natively supported |
 97 | | `\|\|` | Natively supported |
 98 | | `==` | Natively supported |
 99 | | `!=` | Natively supported |
100 | | `!` | Natively supported |
101 | | `itob` | Natively supported |
102 | | `btoi` | Natively supported |
103 | | `%` | Natively supported |
104 | | `\|` | Natively supported |
105 | | `&` | Natively supported |
106 | | `^` | Natively supported |
107 | | `~` | Natively supported |
108 | | `mulw` | `mulw` |
109 | | `addw` | `addw` |
110 | | `divmodw` | `divmodw` |
111 | | `shl` | `<<` |
112 | | `shr` | `>>` |
113 | | `sqrt` | Natively supported |
114 | | `bitlen` | `bitlen` |
115 | | `exp` | `**` |
116 | | `expw` | `expw` |
117 | | `divw` | `divw` |
118 | 
119 | ### Byte Array Manipulation
120 | | Opcode | TEALScript |
121 | | --- | --- |
122 | | `len` | `.length` on bytes |
123 | | `concat` | `concat` or `+` |
124 | | `substring` | `String.substring` or `substring` |
125 | | `substring3` | `String.substring` or `substring` |
126 | | `getbit` | `getbit` |
127 | | `setbit` | `setbit` |
128 | | `getbyte` | `getbyte` |
129 | | `setbyte` | `setbyte` |
130 | | `extract` | `extract3` |
131 | | `extract3` | `extract3` |
132 | | `extract_uint16` | `extractUint16` |
133 | | `extract_uint32` | `extractUint32` |
134 | | `extract_uint64` | `extractUint64` |
135 | | `replace2` | `replace3` |
136 | | `replace3` | `replace3` |
137 | | `base64_decode` | `base64Decode` |
138 | | `json_ref` | `jsonRef` |
139 | 
140 | ### Loading Values
141 | | Opcode | TEALScript |
142 | | --- | --- |
143 | | `intcblock` | Constant block not officially supported |
144 | | `intc` | Constant block not officially supported |
145 | | `intc_0` | Constant block not officially supported |
146 | | `intc_1` | Constant block not officially supported |
147 | | `intc_2` | Constant block not officially supported |
148 | | `intc_3` | Constant block not officially supported |
149 | | `bytecblock` | Constant block not officially supported |
150 | | `bytec` | Constant block not officially supported |
151 | | `bytec_0` | Constant block not officially supported |
152 | | `bytec_1` | Constant block not officially supported |
153 | | `bytec_2` | Constant block not officially supported |
154 | | `bytec_3` | Constant block not officially supported |
155 | | `arg` | `LogicSig.logic` arguments |
156 | | `arg_0` | `LogicSig.logic` arguments |
157 | | `arg_1` | `LogicSig.logic` arguments |
158 | | `arg_2` | `LogicSig.logic` arguments |
159 | | `arg_3` | `LogicSig.logic` arguments |
160 | | `txn` | `this.txn` |
161 | | `global` | `globals` |
162 | | `gtxn` | `this.txnGroup` or transaction argument |
163 | | `load` | `ScratchSlot` |
164 | | `store` | `ScratchSlot` |
165 | | `txna` | `this.txn` |
166 | | `gtxna` | `this.txnGroup` or transaction argument |
167 | | `gtxns` | `this.txnGroup` or transaction argument |
168 | | `gtxnsa` | `this.txnGroup` or transaction argument |
169 | | `gload` | `Txn.load` |
170 | | `gloads` | `Txn.load` |
171 | | `gaid` | `this.txnGroup` or transaction argument |
172 | | `gaids` | `this.txnGroup` or transaction argument |
173 | | `loads` | `ScratchSlot` |
174 | | `stores` | `ScratchSlot` |
175 | | `pushbytes` | Used by `TemplateVar` |
176 | | `pushint` | Used by `TemplateVar` |
177 | | `pushbytess` | Not used yet, but could be used for optimizations in future |
178 | | `pushints` | Not used yet, but could be used for optimizations in future |
179 | | `bzero` | `bzero` |
180 | | `txnas` | `this.txn` |
181 | | `gtxnas` | `this.txnGroup` or transaction argument |
182 | | `gtxnsas` | `this.txnGroup` or transaction argument |
183 | | `args` | `LogicSig.logic` arguments |
184 | | `gloadss` | `Txn.load` |
185 | 
186 | ### State Access
187 | | Opcode | TEALScript |
188 | | --- | --- |
189 | | `balance` | `Address.balance` and `Address.hasBalance` |
190 | | `app_opted_in` | `Address.isOptedInToApp()` |
191 | | `app_local_get` | Method call on LocalStateKey on `LocalStateMap` |
192 | | `app_local_get_ex` | `AppID.local()` |
193 | | `app_global_get` | Method call on `GlobalStateKey` on `GlobalStateMap` |
194 | | `app_global_get_ex` | `AppID.global()` |
195 | | `app_local_put` | Method call on LocalStateKey on `LocalStateMap` |
196 | | `app_global_put` | Method call on `GlobalStateKey` on `GlobalStateMap` |
197 | | `app_local_del` | Method call on LocalStateKey on `LocalStateMap` |
198 | | `app_global_del` | Method call on `GlobalStateKey` on `GlobalStateMap` |
199 | | `asset_holding_get` | `Address.assetBalance` and `Address.isOptedInToAsset` |
200 | | `asset_params_get` | Method calls on `AssetID` |
201 | | `app_params_get` | Method calls on `AppID` |
202 | | `acct_params_get` | Method calls on `Address` |
203 | | `min_balance` | `Address.minBalance` |
204 | | `log` | `log` or `EventEmitter` |
205 | | `block` | `blocks` |
206 | 
207 | ### Byte Array Arithmetic
208 | | Opcode | TEALScript |
209 | | --- | --- |
210 | | `bsqrt` | Natively supported |
211 | | `b+` | Natively supported |
212 | | `b-` | Natively supported |
213 | | `b/` | Natively supported |
214 | | `b*` | Natively supported |
215 | | `b<` | Natively supported |
216 | | `b>` | Natively supported |
217 | | `b<=` | Natively supported |
218 | | `b>=` | Natively supported |
219 | | `b==` | Natively supported |
220 | | `b!=` | Natively supported |
221 | | `b%` | Natively supported |
222 | 
223 | ### Byte Array Logic
224 | | Opcode | TEALScript |
225 | | --- | --- |
226 | | `b\|` | Natively supported |
227 | | `b&` | Natively supported |
228 | | `b^` | Natively supported |
229 | | `b~` | Natively supported |
230 | 
231 | ### Inner Transactions
232 | | Opcode | TEALScript |
233 | | --- | --- |
234 | | `itxn_begin` | `this.pendingGroup.add...` or `send...` |
235 | | `itxn_field` | `this.pendingGroup.add...` or `send...` |
236 | | `itxn_submit` | `this.pendingGroup.execute` or `send...` |
237 | | `itxn` | `this.itxn` |
238 | | `itxna` | `this.itxn` |
239 | | `itxn_next` | `this.pendingGroup.add...` |
240 | | `gitxn` | `this.lastInnerGroup` |
241 | | `gitxna` | `this.lastInnerGroup` |
242 | | `itxnas` | `this.itxn` |
243 | | `gitxnas` | `this.lastInnerGroup` |
244 | 
245 | ### Box Access
246 | | Opcode | TEALScript |
247 | | --- | --- |
248 | | `box_create` | Method call on `BoxKey` or `BoxMap` |
249 | | `box_extract` | Method call on `BoxKey` or `BoxMap` |
250 | | `box_replace` | Method call on `BoxKey` or `BoxMap` |
251 | | `box_del` | Method call on `BoxKey` or `BoxMap` |
252 | | `box_len` | Method call on `BoxKey` or `BoxMap` |
253 | | `box_get` | Method call on `BoxKey` or `BoxMap` |
254 | | `box_put` | Method call on `BoxKey` or `BoxMap` |
255 | | `box_splice` | Method call on `BoxKey` or `BoxMap` |
256 | | `box_resize` | Method call on `BoxKey` or `BoxMap` |
```

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

```typescript
  1 | import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
  2 | import { indexerClient } from '../../../algorand-client.js';
  3 | import { ResponseProcessor } from '../../../utils/responseProcessor.js';
  4 | import type { 
  5 |   ApplicationResponse,
  6 |   ApplicationsResponse,
  7 |   ApplicationLogsResponse,
  8 |   Box
  9 | } from 'algosdk/dist/types/client/v2/indexer/models/types';
 10 | import algosdk from 'algosdk';
 11 | 
 12 | export const applicationTools = [
 13 |   {
 14 |     name: 'api_indexer_lookup_applications',
 15 |     description: 'Get application information from indexer',
 16 |     inputSchema: {
 17 |       type: 'object',
 18 |       properties: {
 19 |         appId: {
 20 |           type: 'integer',
 21 |           description: 'Application ID'
 22 |         }
 23 |       },
 24 |       required: ['appId']
 25 |     }
 26 |   },
 27 |   {
 28 |     name: 'api_indexer_lookup_application_logs',
 29 |     description: 'Get application log messages',
 30 |     inputSchema: {
 31 |       type: 'object',
 32 |       properties: {
 33 |         appId: {
 34 |           type: 'integer',
 35 |           description: 'Application ID'
 36 |         },
 37 |         limit: {
 38 |           type: 'integer',
 39 |           description: 'Maximum number of logs to return'
 40 |         },
 41 |         minRound: {
 42 |           type: 'integer',
 43 |           description: 'Only return logs after this round'
 44 |         },
 45 |         maxRound: {
 46 |           type: 'integer',
 47 |           description: 'Only return logs before this round'
 48 |         },
 49 |         txid: {
 50 |           type: 'string',
 51 |           description: 'Filter by transaction ID'
 52 |         },
 53 |         sender: {
 54 |           type: 'string',
 55 |           description: 'Filter by sender address'
 56 |         },
 57 |         nextToken: {
 58 |           type: 'string',
 59 |           description: 'Token for retrieving the next page of results'
 60 |         }
 61 |       },
 62 |       required: ['appId']
 63 |     }
 64 |   },
 65 |   {
 66 |     name: 'api_indexer_search_for_applications',
 67 |     description: 'Search for applications with various criteria',
 68 |     inputSchema: {
 69 |       type: 'object',
 70 |       properties: {
 71 |         limit: {
 72 |           type: 'integer',
 73 |           description: 'Maximum number of applications to return'
 74 |         },
 75 |         creator: {
 76 |           type: 'string',
 77 |           description: 'Filter by creator address'
 78 |         },
 79 |         nextToken: {
 80 |           type: 'string',
 81 |           description: 'Token for retrieving the next page of results'
 82 |         }
 83 |       }
 84 |     }
 85 |   },
 86 |   {
 87 |     name: 'api_indexer_lookup_application_box',
 88 |     description: 'Get application box by name',
 89 |     inputSchema: {
 90 |       type: 'object',
 91 |       properties: {
 92 |         appId: {
 93 |           type: 'integer',
 94 |           description: 'Application ID'
 95 |         },
 96 |         boxName: {
 97 |           type: 'string',
 98 |           description: 'Box name Buffer'
 99 |         }
100 |       },
101 |       required: ['appId', 'boxName']
102 |     }
103 |   },
104 |   {
105 |     name: 'api_indexer_lookup_application_boxes',
106 |     description: 'Get all application boxes',
107 |     inputSchema: {
108 |       type: 'object',
109 |       properties: {
110 |         appId: {
111 |           type: 'integer',
112 |           description: 'Application ID'
113 |         },
114 |         maxBoxes: {
115 |           type: 'integer',
116 |           description: 'Maximum number of boxes to return'
117 |         }
118 |       },
119 |       required: ['appId']
120 |     }
121 |   }
122 | ];
123 | 
124 | export async function lookupApplications(appId: number): Promise<ApplicationResponse> {
125 |   try {
126 |     console.log(`Looking up application info for ID ${appId}`);
127 |     const response = await indexerClient.lookupApplications(appId).do() as ApplicationResponse;
128 |     console.log('Application response:', JSON.stringify(response, null, 2));
129 |     return response;
130 |   } catch (error) {
131 |     console.error('Application lookup error:', error);
132 |     if (error instanceof McpError) {
133 |       throw error;
134 |     }
135 |     throw new McpError(
136 |       ErrorCode.InternalError,
137 |       `Failed to get application info: ${error instanceof Error ? error.message : String(error)}`
138 |     );
139 |   }
140 | }
141 | 
142 | export async function lookupApplicationLogs(appId: number, params?: {
143 |   limit?: number;
144 |   minRound?: number;
145 |   maxRound?: number;
146 |   txid?: string;
147 |   sender?: string;
148 |   nextToken?: string;
149 | }): Promise<ApplicationLogsResponse> {
150 |   try {
151 |     console.log(`Looking up logs for application ${appId}`);
152 |     let search = indexerClient.lookupApplicationLogs(appId);
153 | 
154 |     if (params?.limit) {
155 |       search = search.limit(params.limit);
156 |     }
157 |     if (params?.minRound) {
158 |       search = search.minRound(params.minRound);
159 |     }
160 |     if (params?.maxRound) {
161 |       search = search.maxRound(params.maxRound);
162 |     }
163 |     if (params?.txid) {
164 |       search = search.txid(params.txid);
165 |     }
166 |     if (params?.sender) {
167 |       search = search.sender(params.sender);
168 |     }
169 |     if (params?.nextToken) {
170 |       search = search.nextToken(params.nextToken);
171 |     }
172 | 
173 |     const response = await search.do() as ApplicationLogsResponse;
174 |     console.log('Application logs response:', JSON.stringify(response, null, 2));
175 |     return response;
176 |   } catch (error) {
177 |     console.error('Application logs lookup error:', error);
178 |     if (error instanceof McpError) {
179 |       throw error;
180 |     }
181 |     throw new McpError(
182 |       ErrorCode.InternalError,
183 |       `Failed to get application logs: ${error instanceof Error ? error.message : String(error)}`
184 |     );
185 |   }
186 | }
187 | 
188 | export async function searchForApplications(params?: {
189 |   limit?: number;
190 |   creator?: string;
191 |   nextToken?: string;
192 | }): Promise<ApplicationsResponse> {
193 |   try {
194 |     console.log('Searching applications with params:', params);
195 |     let search = indexerClient.searchForApplications();
196 | 
197 |     if (params?.limit) {
198 |       search = search.limit(params.limit);
199 |     }
200 |     if (params?.creator) {
201 |       search = search.creator(params.creator);
202 |     }
203 |     if (params?.nextToken) {
204 |       search = search.nextToken(params.nextToken);
205 |     }
206 | 
207 |     const response = await search.do() as ApplicationsResponse;
208 |     console.log('Search applications response:', JSON.stringify(response, null, 2));
209 |     return response;
210 |   } catch (error) {
211 |     console.error('Search applications error:', error);
212 |     if (error instanceof McpError) {
213 |       throw error;
214 |     }
215 |     throw new McpError(
216 |       ErrorCode.InternalError,
217 |       `Failed to search applications: ${error instanceof Error ? error.message : String(error)}`
218 |     );
219 |   }
220 | }
221 | 
222 | export async function lookupApplicationBoxByIDandName(appId: number, boxName: string): Promise<Box> {
223 |   try {
224 |     let boxNameBytes: Buffer;
225 | 
226 |     // Check if string is a valid number
227 |     if (!isNaN(Number(boxName))) {
228 |       boxNameBytes = Buffer.from(boxName);
229 |     }
230 |     // Check if string is a valid Algorand address
231 |     else if (algosdk.isValidAddress(boxName)) {
232 |       boxNameBytes = Buffer.from(boxName);
233 |     }
234 |     // Try to decode as base64, if it fails then treat as regular string
235 |     else {
236 |       try {
237 |         // Test if the string is valid base64
238 |         Buffer.from(boxName, 'base64').toString('base64');
239 |         // If we get here, it's valid base64
240 |         boxNameBytes = Buffer.from(boxName, 'base64');
241 |       } catch {
242 |         // If base64 decoding fails, treat as regular string
243 |         boxNameBytes = Buffer.from(boxName);
244 |       }
245 |     }
246 | 
247 |     console.log('Box name bytes:', boxNameBytes);
248 |     const response = await indexerClient.lookupApplicationBoxByIDandName(appId, boxNameBytes).do() as Box;
249 |     console.log('Box response:', JSON.stringify(response, null, 2));
250 |     return response;
251 |   } catch (error) {
252 |     console.error('Box fetch error:', error);
253 |     if (error instanceof McpError) {
254 |       throw error;
255 |     }
256 |     throw new McpError(
257 |       ErrorCode.InternalError,
258 |       `Failed to get application box: ${error instanceof Error ? error.message : String(error)}`
259 |     );
260 |   }
261 | }
262 | 
263 | export async function searchForApplicationBoxes(appId: number, maxBoxes?: number): Promise<any> {
264 |   try {
265 |     console.log(`Searching boxes for application ${appId}`);
266 |     let search = indexerClient.searchForApplicationBoxes(appId);
267 |     if (maxBoxes !== undefined) {
268 |       search = search.limit(maxBoxes);
269 |     }
270 |     const response = await search.do();
271 |     console.log('Application boxes response:', JSON.stringify(response, null, 2));
272 |     return response;
273 |   } catch (error) {
274 |     console.error('Application boxes fetch error:', error);
275 |     if (error instanceof McpError) {
276 |       throw error;
277 |     }
278 |     throw new McpError(
279 |       ErrorCode.InternalError,
280 |       `Failed to get application boxes: ${error instanceof Error ? error.message : String(error)}`
281 |     );
282 |   }
283 | }
284 | 
285 | export const handleApplicationTools = ResponseProcessor.wrapResourceHandler(async function handleApplicationTools(args: any): Promise<any> {
286 |   const name = args.name;
287 |   
288 |   switch (name) {
289 |     case 'api_indexer_lookup_applications': {
290 |       const { appId } = args;
291 |       const info = await lookupApplications(appId);
292 |       return info.application;
293 |     }
294 |     case 'api_indexer_lookup_application_logs': {
295 |       const { appId, ...params } = args;
296 |       const logs = await lookupApplicationLogs(appId, params);
297 |       return logs;
298 |     }
299 |     case 'api_indexer_search_for_applications': {
300 |       const info = await searchForApplications(args);
301 |       return info.applications;
302 |     }
303 |     case 'api_indexer_lookup_application_box': {
304 |       const { appId, boxName } = args;
305 |       const box = await lookupApplicationBoxByIDandName(appId, boxName);
306 |       return box;
307 |     }
308 |     case 'api_indexer_lookup_application_boxes': {
309 |       const { appId, maxBoxes } = args;
310 |       const boxes = await searchForApplicationBoxes(appId, maxBoxes);
311 |       return boxes.boxes;
312 |     }
313 |     default:
314 |       throw new McpError(
315 |         ErrorCode.MethodNotFound,
316 |         `Unknown tool: ${name}`
317 |       );
318 |   }
319 | });
320 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/tealscript:FEATURES.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Supported AVM Features
  2 | 
  3 | ## ARCS
  4 | | ARC | Name | Description |
  5 | | --- | --- | --- |
  6 | | 4 | Application Binary Interface (ABI)	 | ABI method routing is automatically down for public methods. All ABI types are natively supported. Compiler outputs ARC4 JSON |
  7 | | 22 | Add `read-only` annotation to ABI methods | Decorating a method with `@abi.readonly` will mark it as readonly |
  8 | | 28 | Algorand Event Log Spec | Use `EventLogger` to log ARC28 events |
  9 | | 32 | Application Specification | Compiler generates an arc32 JSON file |
 10 | 
 11 | ## ABI Types
 12 | | ABI Type | TEALScript |
 13 | | --- | --- |
 14 | | `address` | `Address` |
 15 | | `uintN` | `uint64`, `uint32`, `uint16`, `uint8`, `uint128`, `uint256`, or `uint<N>`. `AssetID` and `AppID` are encoded as `uint64` |
 16 | | `bool` | `boolean` |
 17 | | `ufixedNxM` | `ufixed<N, M>` |
 18 | | `T[]` | `T[]` |
 19 | | `T[N]` | `StaticArray<T, N>`. `bytes32`, `bytes64`, or `bytes<N> for static byte arrays` |
 20 | | `[T1, T2, ..., TN]` | `[T1, T2, ..., TN]` or `{keyone: T1, keytwo: T2, ..., keyN: TN}` |
 21 | | `string` | `string` |
 22 | | `application` | `AppReference` |
 23 | | `asset` | `AssetReference` |
 24 | | `account` | `AccountReference` |
 25 | | `txn` | `Txn` |
 26 | | `pay` | `PayTxn` |
 27 | | `keyreg` | `KeyRegTxn` |
 28 | | `acfg` | `AssetConfigTxn` |
 29 | | `axfer` | `AssetTransferTxn` |
 30 | | `afrz` | `AssetFreezeTxn` |
 31 | ## Opcodes
 32 | 
 33 | ### Flow Control
 34 | | Opcode | TEALScript |
 35 | | --- | --- |
 36 | | `err` | `throw Error()` |
 37 | | `bnz` | Used automatically in loops and conditionals |
 38 | | `bz` | Used automatically in loops and conditionals |
 39 | | `b` | Used automatically in loops and conditionals |
 40 | | `return` | Used when the top-level function returns |
 41 | | `assert` | `assert` |
 42 | | `bury` | Stack manipulation is not officially supported |
 43 | | `popn` | Stack manipulation is not officially supported |
 44 | | `dupn` | Stack manipulation is not officially supported |
 45 | | `pop` | Stack manipulation is not officially supported |
 46 | | `dup` | Stack manipulation is not officially supported |
 47 | | `dup2` | Stack manipulation is not officially supported |
 48 | | `dig` | Stack manipulation is not officially supported |
 49 | | `swap` | Stack manipulation is not officially supported |
 50 | | `select` | Not officially supported yet, but could be used to optimize conditionals in the future |
 51 | | `cover` | Stack manipulation is not officially supported |
 52 | | `uncover` | Stack manipulation is not officially supported |
 53 | | `callsub` | Used when calling a function |
 54 | | `retsub` | `return` |
 55 | | `proto` | Used automatically in functions |
 56 | | `frame_dig` | Used automatically in functions |
 57 | | `frame_bury` | Used automatically in functions |
 58 | | `switch` | Not officially supported yet, but could be used to optimize conditionals in the future |
 59 | | `match` | Not officially supported yet, but could be used to optimize conditionals in the future |
 60 | 
 61 | ### Cryptography
 62 | | Opcode | TEALScript |
 63 | | --- | --- |
 64 | | `sha256` | `sha256` |
 65 | | `keccak256` | `keccak256` |
 66 | | `sha512_256` | `sha512_256` |
 67 | | `ed25519verify` | `ed25519Verify` |
 68 | | `ecdsa_verify` | `ecdsaVerify` |
 69 | | `ecdsa_pk_decompress` | `ecdsaPkDecompress` |
 70 | | `ecdsa_pk_recover` | `ecdsaPkRecover` |
 71 | | `ed25519verify_bare` | `ed25519VerifyBare` |
 72 | | `sha3_256` | `sha3_256` |
 73 | | `vrf_verify` | `vrfVerify` |
 74 | | `ec_add` | `ecAdd` |
 75 | | `ec_scalar_mul` | `ecScalarMul` |
 76 | | `ec_pairing_check` | `ecPairingCheck` |
 77 | | `ec_multi_scalar_mul` | `ecMultiScalarMul` |
 78 | | `ec_subgroup_check` | `ecSubgroupCheck` |
 79 | | `ec_map_to` | `ecMapTo` |
 80 | 
 81 | ### Arithmetic
 82 | | Opcode | TEALScript |
 83 | | --- | --- |
 84 | | `+` | Natively supported |
 85 | | `-` | Natively supported |
 86 | | `/` | Natively supported |
 87 | | `*` | Natively supported |
 88 | | `<` | Natively supported |
 89 | | `>` | Natively supported |
 90 | | `<=` | Natively supported |
 91 | | `>=` | Natively supported |
 92 | | `&&` | Natively supported |
 93 | | `\|\|` | Natively supported |
 94 | | `==` | Natively supported |
 95 | | `!=` | Natively supported |
 96 | | `!` | Natively supported |
 97 | | `itob` | Natively supported |
 98 | | `btoi` | Natively supported |
 99 | | `%` | Natively supported |
100 | | `\|` | Natively supported |
101 | | `&` | Natively supported |
102 | | `^` | Natively supported |
103 | | `~` | Natively supported |
104 | | `mulw` | `mulw` |
105 | | `addw` | `addw` |
106 | | `divmodw` | `divmodw` |
107 | | `shl` | `<<` |
108 | | `shr` | `>>` |
109 | | `sqrt` | Natively supported |
110 | | `bitlen` | `bitlen` |
111 | | `exp` | `**` |
112 | | `expw` | `expw` |
113 | | `divw` | `divw` |
114 | 
115 | ### Byte Array Manipulation
116 | | Opcode | TEALScript |
117 | | --- | --- |
118 | | `len` | `.length` on bytes |
119 | | `concat` | `concat` or `+` |
120 | | `substring` | `String.substring` or `substring` |
121 | | `substring3` | `String.substring` or `substring` |
122 | | `getbit` | `getbit` |
123 | | `setbit` | `setbit` |
124 | | `getbyte` | `getbyte` |
125 | | `setbyte` | `setbyte` |
126 | | `extract` | `extract3` |
127 | | `extract3` | `extract3` |
128 | | `extract_uint16` | `extractUint16` |
129 | | `extract_uint32` | `extractUint32` |
130 | | `extract_uint64` | `extractUint64` |
131 | | `replace2` | `replace3` |
132 | | `replace3` | `replace3` |
133 | | `base64_decode` | `base64Decode` |
134 | | `json_ref` | `jsonRef` |
135 | 
136 | ### Loading Values
137 | | Opcode | TEALScript |
138 | | --- | --- |
139 | | `intcblock` | Constant block not officially supported |
140 | | `intc` | Constant block not officially supported |
141 | | `intc_0` | Constant block not officially supported |
142 | | `intc_1` | Constant block not officially supported |
143 | | `intc_2` | Constant block not officially supported |
144 | | `intc_3` | Constant block not officially supported |
145 | | `bytecblock` | Constant block not officially supported |
146 | | `bytec` | Constant block not officially supported |
147 | | `bytec_0` | Constant block not officially supported |
148 | | `bytec_1` | Constant block not officially supported |
149 | | `bytec_2` | Constant block not officially supported |
150 | | `bytec_3` | Constant block not officially supported |
151 | | `arg` | `LogicSig.logic` arguments |
152 | | `arg_0` | `LogicSig.logic` arguments |
153 | | `arg_1` | `LogicSig.logic` arguments |
154 | | `arg_2` | `LogicSig.logic` arguments |
155 | | `arg_3` | `LogicSig.logic` arguments |
156 | | `txn` | `this.txn` |
157 | | `global` | `globals` |
158 | | `gtxn` | `this.txnGroup` or transaction argument |
159 | | `load` | `ScratchSlot` |
160 | | `store` | `ScratchSlot` |
161 | | `txna` | `this.txn` |
162 | | `gtxna` | `this.txnGroup` or transaction argument |
163 | | `gtxns` | `this.txnGroup` or transaction argument |
164 | | `gtxnsa` | `this.txnGroup` or transaction argument |
165 | | `gload` | `Txn.load` |
166 | | `gloads` | `Txn.load` |
167 | | `gaid` | `this.txnGroup` or transaction argument |
168 | | `gaids` | `this.txnGroup` or transaction argument |
169 | | `loads` | `ScratchSlot` |
170 | | `stores` | `ScratchSlot` |
171 | | `pushbytes` | Used by `TemplateVar` |
172 | | `pushint` | Used by `TemplateVar` |
173 | | `pushbytess` | Not used yet, but could be used for optimizations in future |
174 | | `pushints` | Not used yet, but could be used for optimizations in future |
175 | | `bzero` | `bzero` |
176 | | `txnas` | `this.txn` |
177 | | `gtxnas` | `this.txnGroup` or transaction argument |
178 | | `gtxnsas` | `this.txnGroup` or transaction argument |
179 | | `args` | `LogicSig.logic` arguments |
180 | | `gloadss` | `Txn.load` |
181 | 
182 | ### State Access
183 | | Opcode | TEALScript |
184 | | --- | --- |
185 | | `balance` | `Address.balance` and `Address.hasBalance` |
186 | | `app_opted_in` | `Address.isOptedInToApp()` |
187 | | `app_local_get` | Method call on LocalStateKey on `LocalStateMap` |
188 | | `app_local_get_ex` | `Application.local()` |
189 | | `app_global_get` | Method call on `GlobalStateKey` on `GlobalStateMap` |
190 | | `app_global_get_ex` | `Application.global()` |
191 | | `app_local_put` | Method call on LocalStateKey on `LocalStateMap` |
192 | | `app_global_put` | Method call on `GlobalStateKey` on `GlobalStateMap` |
193 | | `app_local_del` | Method call on LocalStateKey on `LocalStateMap` |
194 | | `app_global_del` | Method call on `GlobalStateKey` on `GlobalStateMap` |
195 | | `asset_holding_get` | `Address.assetBalance` and `Address.hasAsset` |
196 | | `asset_params_get` | Method calls on `Asset` |
197 | | `app_params_get` | Method calls on `Application` |
198 | | `acct_params_get` | Method calls on `Address` |
199 | | `min_balance` | `Address.minBalance` |
200 | | `log` | `log` or `EventEmitter` |
201 | | `block` | `blocks` |
202 | 
203 | ### Byte Array Arithmetic
204 | | Opcode | TEALScript |
205 | | --- | --- |
206 | | `bsqrt` | Natively supported |
207 | | `b+` | Natively supported |
208 | | `b-` | Natively supported |
209 | | `b/` | Natively supported |
210 | | `b*` | Natively supported |
211 | | `b<` | Natively supported |
212 | | `b>` | Natively supported |
213 | | `b<=` | Natively supported |
214 | | `b>=` | Natively supported |
215 | | `b==` | Natively supported |
216 | | `b!=` | Natively supported |
217 | | `b%` | Natively supported |
218 | 
219 | ### Byte Array Logic
220 | | Opcode | TEALScript |
221 | | --- | --- |
222 | | `b\|` | Natively supported |
223 | | `b&` | Natively supported |
224 | | `b^` | Natively supported |
225 | | `b~` | Natively supported |
226 | 
227 | ### Inner Transactions
228 | | Opcode | TEALScript |
229 | | --- | --- |
230 | | `itxn_begin` | `this.pendingGroup.add...` or `send...` |
231 | | `itxn_field` | `this.pendingGroup.add...` or `send...` |
232 | | `itxn_submit` | `this.pendingGroup.execute` or `send...` |
233 | | `itxn` | `this.itxn` |
234 | | `itxna` | `this.itxn` |
235 | | `itxn_next` | `this.pendingGroup.add...` |
236 | | `gitxn` | `this.lastInnerGroup` |
237 | | `gitxna` | `this.lastInnerGroup` |
238 | | `itxnas` | `this.itxn` |
239 | | `gitxnas` | `this.lastInnerGroup` |
240 | 
241 | ### Box Access
242 | | Opcode | TEALScript |
243 | | --- | --- |
244 | | `box_create` | Method call on `BoxKey` or `BoxMap` |
245 | | `box_extract` | Method call on `BoxKey` or `BoxMap` |
246 | | `box_replace` | Method call on `BoxKey` or `BoxMap` |
247 | | `box_del` | Method call on `BoxKey` or `BoxMap` |
248 | | `box_len` | Method call on `BoxKey` or `BoxMap` |
249 | | `box_get` | Method call on `BoxKey` or `BoxMap` |
250 | | `box_put` | Method call on `BoxKey` or `BoxMap` |
251 | | `box_splice` | Method call on `BoxKey` or `BoxMap` |
252 | | `box_resize` | Method call on `BoxKey` or `BoxMap` |
```
Page 32/93FirstPrevNextLast