#
tokens: 49005/50000 17/942 files (page 19/93)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 19 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-0076.md:
--------------------------------------------------------------------------------

```markdown
  1 | ---
  2 | arc: 76
  3 | title: Password Account
  4 | description: Password account using PBKDF2
  5 | author: Ludovit Scholtz (@scholtz)
  6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/208
  7 | status: Deprecated
  8 | type: Standards Track
  9 | category: Core
 10 | created: 2023-06-12
 11 | ---
 12 | 
 13 | ## Abstract
 14 | This standard specifies a computation for seed bytes for Password Account. For general adoption it is better for people to remember passphrase than mnemonic. With this standard person can hash the passphrase and receive the seed bytes for X25529 algorand account.
 15 | 
 16 | ## Motivation
 17 | By providing a clear and precise computation process, Password Account empowers individuals to effortlessly obtain their seed bytes for algorand account. In the realm of practicality and widespread adoption, the standard highlights the immense advantages of utilizing a passphrase rather than a mnemonic. Remembering a passphrase becomes the key to unlocking a world of possibilities. With this groundbreaking standard, individuals can take control of their X25529 Algorand account by simply hashing their passphrase and effortlessly receiving the corresponding seed bytes. It's time to embrace this new era of accessibility and security, empowering yourself to reach new heights in the world of Password Accounts. Let this standard serve as your guiding light, motivating community to embark on a journey of limitless possibilities and unparalleled success.
 18 | 
 19 | This standard seek the synchronization between wallets which may provide password protected accounts.
 20 | 
 21 | ## Specification
 22 | 
 23 | Seed bytes generation is calculated with algorithm:
 24 | 
 25 | ```
 26 |       const init = `ARC-0076-${password}-{slotId}-PBKDF2-999999`;
 27 |       const salt = `ARC-0076-{slotId}-PBKDF2-999999`;
 28 |       const iterations = 999999;
 29 |       const cryptoKey = await window.crypto.subtle.importKey(
 30 |         "raw",
 31 |         Buffer.from(init, "utf-8"),
 32 |         "PBKDF2",
 33 |         false,
 34 |         ["deriveBits", "deriveKey"]
 35 |       );
 36 |       const masterBits = await window.crypto.subtle.deriveBits(
 37 |         {
 38 |           name: "PBKDF2",
 39 |           hash: "SHA-256",
 40 |           salt: Buffer.from(salt, "utf-8"),
 41 |           iterations: iterations,
 42 |         },
 43 |         cryptoKey,
 44 |         256
 45 |       );
 46 | 
 47 |       const uint8 = new Uint8Array(masterBits);
 48 |       const mnemonic = algosdk.mnemonicFromSeed(uint8);
 49 |       const genAccount = algosdk.mnemonicToSecretKey(mnemonic);
 50 | ```
 51 | 
 52 | Length of the data section SHOULD be at least 16 bytes long.
 53 | 
 54 | Slot ID is account iteration. Default is "0".
 55 | 
 56 | ### Email Password account
 57 | 
 58 | Email Password account is account generated from the original data
 59 | 
 60 | ```
 61 |       const init = `ARC-0076-${email}-${password}-{slotId}-PBKDF2-999999`;
 62 |       const salt = `ARC-0076-${email}-{slotId}-PBKDF2-999999`;
 63 | ```
 64 | 
 65 | The email part can be published to the service provider backend and verified by the service provider. Password MUST NOT be transferred over the network.
 66 | 
 67 | Length of the password SHOULD be at least 16 bytes long.
 68 | 
 69 | ### Sample data
 70 | This sample data may be used for verification of the ```ARC-0076``` implementation.
 71 | 
 72 | ```
 73 | const email = "[email protected]";
 74 | const password = "12345678901234567890123456789012345678901234567890";
 75 | const slotId = "0";
 76 | const init = `ARC-0076-${email}-${password}-{slotId}-PBKDF2-999999`;
 77 | const salt = `ARC-0076-${email}-{slotId}-PBKDF2-999999`;
 78 | ```
 79 | 
 80 | Results in:
 81 | 
 82 | ```
 83 | masterBits = [225,7,139,154,245,210,181,138,188,129,145,53,246,184,243,88,163,163,109,208,77,71,7,235,81,244,129,215,102,168,105,21]
 84 | account.addr = "5AHWQJ5D52K4GRW4JWQ5GMR53F7PDSJEGT4PXVFSBQYE7VXDVG3WSPWSBM"
 85 | ```
 86 | 
 87 | ## Rationale
 88 | This standard was designed to allow the wallets to provide password protected accounts which does not require general population to store the mnemonic. Email extension allows service providers to bind specific account with the email address, and user experience to feel the basic authentication form with email and password they are already used to from web2 usecases.
 89 | 
 90 | ## Backwards Compatibility
 91 | We expect future extensions to be compatible with Password account. The hash mechanism for the future algorighms should be suffixed such as ```-PBKDF2-999999```.
 92 | 
 93 | ## Security Considerations
 94 | This standard moves the security of strength of the account to how user generates the password.
 95 | 
 96 | This standard relies on randomness  and collision resistance of PBKDF2 and 'SHA-256'. User MUST be informed about the risks associated with this type of account.
 97 | 
 98 | ## Copyright
 99 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
100 | 
```

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

```markdown
  1 | ---
  2 | title: On-Chain Storage
  3 | ---
  4 | 
  5 | There are three storage types available for Algorand smart contracts: global, local, and box. To read more about these storage types, you can go to [this page](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/state/) on the developer portal.
  6 | 
  7 | In general, you want to use global storage for small values (< 128 byte) when you have a known amount of key/value pairs and otherwise use box storage. There are exceptions of course when local storage makes sense, but most developers should start with global and box storage.
  8 | 
  9 | For each storage type, there are two classess in TEALScript for interacting with contract state `Key` and `Map`. Classes ending with `Key` point to a single key in storage and `Map` is a mapping of an undefined amount of keys to their respective values.
 10 | 
 11 | ## Key Declaration
 12 | 
 13 | All `Key` functions `GlobalStateKey`, `BoxKey`, `LocalStateKey`) are generic functions with one type argument that corresponds to the type of the value held in the respective value. 
 14 | 
 15 | These functions all take an optional argument `key`. By default, the property name will be used for the on-chain key name. The `key` property, however, can be used to override what value is used as the on-chain key. This is paticularly useful when you want small keys on-chain but longer more-descriptive keys in TEALScript. If you want the key to be a non-string value, use `Map`s
 16 | 
 17 | ### Examples
 18 | 
 19 | #### Key Declaration
 20 | 
 21 | ```ts
 22 | class MyApp extends Contract {
 23 |     someKey = GlobalStateKey<string>()
 24 | 
 25 |     setSomeKey(value: string): void {
 26 |         this.someKey.value = value // On chain: "someKey" now contains value
 27 |     }
 28 | }
 29 | ```
 30 | 
 31 | #### Modified On-Chain Key
 32 | 
 33 | ```ts
 34 | class MyApp extends Contract {
 35 |     someKey = GlobalStateKey<string>({ key: 'sk' })
 36 | 
 37 |     setSomeKey(value: string): void {
 38 |         this.someKey.value = value // On chain: "sk" now contains value
 39 |     }
 40 | }
 41 | ```
 42 | 
 43 | ## Map Declaration
 44 | 
 45 | All `Map` functions (`GlobalStateMap`, `BoxMap`,  `LocalStateMap`) are generic functions with two type arguments that corresponds to the type of the key and the type of the value, respectively. 
 46 | 
 47 | These functions all take an optional argument `prefix`. The value given to `prefix` is a string that will prefix each key accessed via this `Map`. This is useful when you have two different maps that might have the same key type. The compiler will throw an error if two `Map`s of the same storage type have the same key type and no prefix.
 48 | 
 49 | #### Map Declaration
 50 | 
 51 | ```ts
 52 | class MyApp extends Contract {
 53 |     favoriteColor = BoxMap<Address, string>()
 54 | 
 55 |     setColor(color: string): void {
 56 |         this.favoriteColor(this.txn.sender).value = color // on chain: sender's address now points to their favorite color
 57 |     }
 58 | }
 59 | ```
 60 | 
 61 | #### Map Prefix Declaration
 62 | 
 63 | ```ts
 64 | class MyApp extends Contract {
 65 |     favoriteColor = BoxMap<Address, string>({ prefix: 'c' })
 66 |     favoriteNumber = BoxMap<Address, string>({ prefix: 'n' })
 67 | 
 68 |     setColor(color: string): void {
 69 |         this.favoriteColor(this.txn.sender).value = color // on chain: ("c" + sender's address) now points to their favorite color
 70 |     }
 71 | 
 72 |     setNumber(number: uint64): void {
 73 |         this.favoriteNumber(this.txn.sender).value = number // on chain: ("n" + sender's address) now points to their favorite number
 74 |     }
 75 | }
 76 | ```
 77 | 
 78 | #### Incorrect: Overlapping Key Types
 79 | 
 80 | ```ts
 81 | class MyApp extends Contract {
 82 |     favoriteColor = BoxMap<Address, string>() // ERROR: same key type as favoriteNumber and no prefix
 83 |     favoriteNumber = BoxMap<Address, string>() // ERROR: same key type as favoriteColor and no prefix
 84 | }
 85 | ```
 86 | 
 87 | ## Box defaultSize Parameter
 88 | 
 89 | `BoxKey` and `BoxMap` have an additional option that is not applicable to global or local storage.
 90 | 
 91 | `dynamicSize` is an optional parameter that indicates whether TEALScript should call `box_del` before each `box_put`. By default, this value will be false when the value type is static and true when the value type is dynamic. This means in most cases, you shouldn't need to manually set this parameter unless you want to manually manage box resizing via `.delete()`
 92 | 
 93 | ## StateMap maxKeys Parameter
 94 | 
 95 | `GlobalStateMap` and `LocalStateMap` have an additional parameter `maxKeys`.
 96 | 
 97 | `maxKeys` is a required parameter that indicates how many keys should be reserved for this map.
 98 | 
 99 | ```ts
100 | // Reserve 3 keys for this map
101 | class MyApp extends Contract {
102 |   data = GlobalStateMap<bytes, bytes>({ maxKeys: 3 })
103 |   
104 |   createApplication(){
105 |     this.data('name').value = 'MyApp'
106 |     this.data('version').value = '1.0.0'
107 |     this.data('author').value = 'Me'
108 |   }
109 | }
110 | ```
111 | 
```

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

```typescript
  1 | import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
  2 | import { algodClient } from '../../../algorand-client.js';
  3 | import type { 
  4 |   Account,
  5 |   AccountApplicationResponse,
  6 |   AccountAssetResponse
  7 | } from 'algosdk/dist/types/client/v2/algod/models/types';
  8 | import algosdk from 'algosdk';
  9 | 
 10 | export const accountTools = [
 11 |   {
 12 |     name: 'api_algod_get_account_info',
 13 |     description: 'Get current account balance, assets, and auth address from algod',
 14 |     inputSchema: {
 15 |       type: 'object',
 16 |       properties: {
 17 |         address: {
 18 |           type: 'string',
 19 |           description: 'The account public key'
 20 |         }
 21 |       },
 22 |       required: ['address']
 23 |     }
 24 |   },
 25 |   {
 26 |     name: 'api_algod_get_account_application_info',
 27 |     description: 'Get account-specific application information from algod',
 28 |     inputSchema: {
 29 |       type: 'object',
 30 |       properties: {
 31 |         address: {
 32 |           type: 'string',
 33 |           description: 'The account public key'
 34 |         },
 35 |         appId: {
 36 |           type: 'integer',
 37 |           description: 'The application ID'
 38 |         }
 39 |       },
 40 |       required: ['address', 'appId']
 41 |     }
 42 |   },
 43 |   {
 44 |     name: 'api_algod_get_account_asset_info',
 45 |     description: 'Get account-specific asset information from algod',
 46 |     inputSchema: {
 47 |       type: 'object',
 48 |       properties: {
 49 |         address: {
 50 |           type: 'string',
 51 |           description: 'The account public key'
 52 |         },
 53 |         assetId: {
 54 |           type: 'integer',
 55 |           description: 'The asset ID'
 56 |         }
 57 |       },
 58 |       required: ['address', 'assetId']
 59 |     }
 60 |   }
 61 | ];
 62 | 
 63 | export async function getAccountInfo(address: string): Promise<Account> {
 64 |   try {
 65 |     // Validate address format
 66 |     if (!algosdk.isValidAddress(address)) {
 67 |       throw new McpError(
 68 |         ErrorCode.InvalidRequest,
 69 |         'Invalid Algorand address format'
 70 |       );
 71 |     }
 72 | 
 73 |     console.log('Fetching account info from algod for address:', address);
 74 |     // Get account information from algod
 75 |     const response = await algodClient.accountInformation(address).do() as Account;
 76 |     console.log('Algod response:', JSON.stringify(response, null, 2));
 77 |     return response;
 78 |   } catch (error) {
 79 |     console.error('Algod error:', error);
 80 |     if (error instanceof McpError) {
 81 |       throw error;
 82 |     }
 83 |     throw new McpError(
 84 |       ErrorCode.InternalError,
 85 |       `Failed to get account information: ${error instanceof Error ? error.message : String(error)}`
 86 |     );
 87 |   }
 88 | }
 89 | 
 90 | export async function getAccountApplicationInfo(address: string, appId: number): Promise<AccountApplicationResponse> {
 91 |   try {
 92 |     // Validate address format
 93 |     if (!algosdk.isValidAddress(address)) {
 94 |       throw new McpError(
 95 |         ErrorCode.InvalidRequest,
 96 |         'Invalid Algorand address format'
 97 |       );
 98 |     }
 99 | 
100 |     const response = await algodClient.accountApplicationInformation(address, appId).do() as AccountApplicationResponse;
101 |     return response;
102 |   } catch (error) {
103 |     if (error instanceof McpError) {
104 |       throw error;
105 |     }
106 |     throw new McpError(
107 |       ErrorCode.InternalError,
108 |       `Failed to get account application info: ${error instanceof Error ? error.message : String(error)}`
109 |     );
110 |   }
111 | }
112 | 
113 | export async function getAccountAssetInfo(address: string, assetId: number): Promise<AccountAssetResponse> {
114 |   try {
115 |     // Validate address format
116 |     if (!algosdk.isValidAddress(address)) {
117 |       throw new McpError(
118 |         ErrorCode.InvalidRequest,
119 |         'Invalid Algorand address format'
120 |       );
121 |     }
122 | 
123 |     const response = await algodClient.accountAssetInformation(address, assetId).do() as AccountAssetResponse;
124 |     return response;
125 |   } catch (error) {
126 |     if (error instanceof McpError) {
127 |       throw error;
128 |     }
129 |     throw new McpError(
130 |       ErrorCode.InternalError,
131 |       `Failed to get account asset info: ${error instanceof Error ? error.message : String(error)}`
132 |     );
133 |   }
134 | }
135 | 
136 | export async function handleAccountTools(name: string, args: any): Promise<any> {
137 |   switch (name) {
138 |     case 'api_algod_get_account_info': {
139 |       const { address } = args;
140 |       const info = await getAccountInfo(address);
141 |       return info;
142 |     }
143 |     case 'api_algod_get_account_application_info': {
144 |       const { address, appId } = args;
145 |       const info = await getAccountApplicationInfo(address, appId);
146 |       return info;
147 |     }
148 |     case 'api_algod_get_account_asset_info': {
149 |       const { address, assetId } = args;
150 |       const info = await getAccountAssetInfo(address, assetId);
151 |       return info;
152 |     }
153 |     default:
154 |       throw new McpError(
155 |         ErrorCode.MethodNotFound,
156 |         `Unknown tool: ${name}`
157 |       );
158 |   }
159 | }
160 | 
```

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

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / ApplicationParams
  2 | 
  3 | # Class: ApplicationParams
  4 | 
  5 | [indexerModels](../modules/indexerModels.md).ApplicationParams
  6 | 
  7 | Stores the global information associated with an application.
  8 | 
  9 | ## Hierarchy
 10 | 
 11 | - `default`
 12 | 
 13 |   ↳ **`ApplicationParams`**
 14 | 
 15 | ## Table of contents
 16 | 
 17 | ### Constructors
 18 | 
 19 | - [constructor](indexerModels.ApplicationParams.md#constructor)
 20 | 
 21 | ### Properties
 22 | 
 23 | - [approvalProgram](indexerModels.ApplicationParams.md#approvalprogram)
 24 | - [attribute\_map](indexerModels.ApplicationParams.md#attribute_map)
 25 | - [clearStateProgram](indexerModels.ApplicationParams.md#clearstateprogram)
 26 | - [creator](indexerModels.ApplicationParams.md#creator)
 27 | - [extraProgramPages](indexerModels.ApplicationParams.md#extraprogrampages)
 28 | - [globalState](indexerModels.ApplicationParams.md#globalstate)
 29 | - [globalStateSchema](indexerModels.ApplicationParams.md#globalstateschema)
 30 | - [localStateSchema](indexerModels.ApplicationParams.md#localstateschema)
 31 | 
 32 | ### Methods
 33 | 
 34 | - [get\_obj\_for\_encoding](indexerModels.ApplicationParams.md#get_obj_for_encoding)
 35 | - [from\_obj\_for\_encoding](indexerModels.ApplicationParams.md#from_obj_for_encoding)
 36 | 
 37 | ## Constructors
 38 | 
 39 | ### constructor
 40 | 
 41 | • **new ApplicationParams**(`«destructured»`)
 42 | 
 43 | Creates a new `ApplicationParams` object.
 44 | 
 45 | #### Parameters
 46 | 
 47 | | Name | Type |
 48 | | :------ | :------ |
 49 | | `«destructured»` | `Object` |
 50 | | › `approvalProgram` | `string` \| `Uint8Array` |
 51 | | › `clearStateProgram` | `string` \| `Uint8Array` |
 52 | | › `creator?` | `string` |
 53 | | › `extraProgramPages?` | `number` \| `bigint` |
 54 | | › `globalState?` | [`TealKeyValue`](indexerModels.TealKeyValue.md)[] |
 55 | | › `globalStateSchema?` | [`ApplicationStateSchema`](indexerModels.ApplicationStateSchema.md) |
 56 | | › `localStateSchema?` | [`ApplicationStateSchema`](indexerModels.ApplicationStateSchema.md) |
 57 | 
 58 | #### Overrides
 59 | 
 60 | BaseModel.constructor
 61 | 
 62 | #### Defined in
 63 | 
 64 | client/v2/indexer/models/types.ts:1213
 65 | 
 66 | ## Properties
 67 | 
 68 | ### approvalProgram
 69 | 
 70 | • **approvalProgram**: `Uint8Array`
 71 | 
 72 | approval program.
 73 | 
 74 | #### Defined in
 75 | 
 76 | client/v2/indexer/models/types.ts:1169
 77 | 
 78 | ___
 79 | 
 80 | ### attribute\_map
 81 | 
 82 | • **attribute\_map**: `Record`\<`string`, `string`\>
 83 | 
 84 | #### Inherited from
 85 | 
 86 | BaseModel.attribute\_map
 87 | 
 88 | #### Defined in
 89 | 
 90 | client/v2/basemodel.ts:56
 91 | 
 92 | ___
 93 | 
 94 | ### clearStateProgram
 95 | 
 96 | • **clearStateProgram**: `Uint8Array`
 97 | 
 98 | clear state program.
 99 | 
100 | #### Defined in
101 | 
102 | client/v2/indexer/models/types.ts:1174
103 | 
104 | ___
105 | 
106 | ### creator
107 | 
108 | • `Optional` **creator**: `string`
109 | 
110 | The address that created this application. This is the address where the
111 | parameters and global state for this application can be found.
112 | 
113 | #### Defined in
114 | 
115 | client/v2/indexer/models/types.ts:1180
116 | 
117 | ___
118 | 
119 | ### extraProgramPages
120 | 
121 | • `Optional` **extraProgramPages**: `number` \| `bigint`
122 | 
123 | the number of extra program pages available to this app.
124 | 
125 | #### Defined in
126 | 
127 | client/v2/indexer/models/types.ts:1185
128 | 
129 | ___
130 | 
131 | ### globalState
132 | 
133 | • `Optional` **globalState**: [`TealKeyValue`](indexerModels.TealKeyValue.md)[]
134 | 
135 | global state
136 | 
137 | #### Defined in
138 | 
139 | client/v2/indexer/models/types.ts:1190
140 | 
141 | ___
142 | 
143 | ### globalStateSchema
144 | 
145 | • `Optional` **globalStateSchema**: [`ApplicationStateSchema`](indexerModels.ApplicationStateSchema.md)
146 | 
147 | global schema
148 | 
149 | #### Defined in
150 | 
151 | client/v2/indexer/models/types.ts:1195
152 | 
153 | ___
154 | 
155 | ### localStateSchema
156 | 
157 | • `Optional` **localStateSchema**: [`ApplicationStateSchema`](indexerModels.ApplicationStateSchema.md)
158 | 
159 | local schema
160 | 
161 | #### Defined in
162 | 
163 | client/v2/indexer/models/types.ts:1200
164 | 
165 | ## Methods
166 | 
167 | ### get\_obj\_for\_encoding
168 | 
169 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
170 | 
171 | Get an object ready for encoding to either JSON or msgpack.
172 | 
173 | #### Parameters
174 | 
175 | | Name | Type | Default value | Description |
176 | | :------ | :------ | :------ | :------ |
177 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
178 | 
179 | #### Returns
180 | 
181 | `Record`\<`string`, `any`\>
182 | 
183 | #### Inherited from
184 | 
185 | BaseModel.get\_obj\_for\_encoding
186 | 
187 | #### Defined in
188 | 
189 | client/v2/basemodel.ts:65
190 | 
191 | ___
192 | 
193 | ### from\_obj\_for\_encoding
194 | 
195 | ▸ `Static` **from_obj_for_encoding**(`data`): [`ApplicationParams`](indexerModels.ApplicationParams.md)
196 | 
197 | #### Parameters
198 | 
199 | | Name | Type |
200 | | :------ | :------ |
201 | | `data` | `Record`\<`string`, `any`\> |
202 | 
203 | #### Returns
204 | 
205 | [`ApplicationParams`](indexerModels.ApplicationParams.md)
206 | 
207 | #### Defined in
208 | 
209 | client/v2/indexer/models/types.ts:1257
210 | 
```

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

```json
  1 | {
  2 |   "name": "AlgoKit",
  3 |   "description": "Development tools and CLI for Algorand blockchain",
  4 |   "path": "algokit",
  5 |   "documents": [
  6 |     {"name": "README", "path": "algokit:README.md"},
  7 |     {"name": "Overview", "path": "algokit:cli:algokit.md"}
  8 |   ],
  9 |   "subcategories": {
 10 |     "cli": {
 11 |       "name": "Command Line Interface",
 12 |       "description": "AlgoKit CLI documentation",
 13 |       "path": "algokit:cli",
 14 |       "documents": [
 15 |         {"name": "CLI Index", "path": "algokit:cli:cli:index.md"}
 16 |       ],
 17 |       "subcategories": {
 18 |         "features": {
 19 |           "name": "Features",
 20 |           "description": "CLI feature documentation",
 21 |           "path": "algokit:cli:features",
 22 |           "documents": [
 23 |             {"name": "Compile", "path": "algokit:cli:features:compile.md"},
 24 |             {"name": "Completions", "path": "algokit:cli:features:completions.md"},
 25 |             {"name": "Config", "path": "algokit:cli:features:config.md"},
 26 |             {"name": "Dispenser", "path": "algokit:cli:features:dispenser.md"},
 27 |             {"name": "Doctor", "path": "algokit:cli:features:doctor.md"},
 28 |             {"name": "Explore", "path": "algokit:cli:features:explore.md"},
 29 |             {"name": "Generate", "path": "algokit:cli:features:generate.md"},
 30 |             {"name": "Goal", "path": "algokit:cli:features:goal.md"},
 31 |             {"name": "Init", "path": "algokit:cli:features:init.md"},
 32 |             {"name": "Localnet", "path": "algokit:cli:features:localnet.md"},
 33 |             {"name": "Project", "path": "algokit:cli:features:project.md"},
 34 |             {"name": "Tasks", "path": "algokit:cli:features:tasks.md"}
 35 |           ],
 36 |           "subcategories": {
 37 |             "project": {
 38 |               "name": "Project Commands",
 39 |               "description": "Project-related commands",
 40 |               "path": "algokit:cli:features:project",
 41 |               "documents": [
 42 |                 {"name": "Bootstrap", "path": "algokit:cli:features:project:bootstrap.md"},
 43 |                 {"name": "Deploy", "path": "algokit:cli:features:project:deploy.md"},
 44 |                 {"name": "Link", "path": "algokit:cli:features:project:link.md"},
 45 |                 {"name": "List", "path": "algokit:cli:features:project:list.md"},
 46 |                 {"name": "Run", "path": "algokit:cli:features:project:run.md"}
 47 |               ]
 48 |             },
 49 |             "tasks": {
 50 |               "name": "Task Commands",
 51 |               "description": "Task-related commands",
 52 |               "path": "algokit:cli:features:tasks",
 53 |               "documents": [
 54 |                 {"name": "Analyze", "path": "algokit:cli:features:tasks:analyze.md"},
 55 |                 {"name": "IPFS", "path": "algokit:cli:features:tasks:ipfs.md"},
 56 |                 {"name": "Mint", "path": "algokit:cli:features:tasks:mint.md"},
 57 |                 {"name": "NFD", "path": "algokit:cli:features:tasks:nfd.md"},
 58 |                 {"name": "Opt", "path": "algokit:cli:features:tasks:opt.md"},
 59 |                 {"name": "Send", "path": "algokit:cli:features:tasks:send.md"},
 60 |                 {"name": "Sign", "path": "algokit:cli:features:tasks:sign.md"},
 61 |                 {"name": "Transfer", "path": "algokit:cli:features:tasks:transfer.md"},
 62 |                 {"name": "Vanity Address", "path": "algokit:cli:features:tasks:vanity_address.md"},
 63 |                 {"name": "Wallet", "path": "algokit:cli:features:tasks:wallet.md"}
 64 |               ]
 65 |             }
 66 |           }
 67 |         },
 68 |         "tutorials": {
 69 |           "name": "Tutorials",
 70 |           "description": "Getting started tutorials",
 71 |           "path": "algokit:cli:tutorials",
 72 |           "documents": [
 73 |             {"name": "Introduction", "path": "algokit:cli:tutorials:intro.md"},
 74 |             {"name": "Smart Contracts", "path": "algokit:cli:tutorials:smart-contracts.md"},
 75 |             {"name": "AlgoKit Template", "path": "algokit:cli:tutorials:algokit-template.md"}
 76 |           ]
 77 |         },
 78 |         "articles": {
 79 |           "name": "Articles",
 80 |           "description": "Technical articles and guides",
 81 |           "path": "algokit:cli:articles",
 82 |           "documents": [
 83 |             {"name": "Output Stability", "path": "algokit:cli:articles:output_stability.md"}
 84 |           ]
 85 |         }
 86 |       }
 87 |     },
 88 |     "lora": {
 89 |       "name": "Lora",
 90 |       "description": "AlgoKit Lora documentation",
 91 |       "path": "algokit:lora",
 92 |       "documents": [
 93 |         {"name": "README", "path": "algokit:lora:README.md"}
 94 |       ]
 95 |     },
 96 |     "docs": {
 97 |       "name": "Documentation",
 98 |       "description": "Additional AlgoKit documentation",
 99 |       "path": "algokit:docs",
100 |       "documents": [
101 |         {"name": "Testnet API", "path": "algokit:docs:testnet_api.md"}
102 |       ]
103 |     }
104 |   }
105 | }
106 | 
```

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

```markdown
 1 | title: Switch Networks
 2 | By default, an Algorand installation is configured to run on MainNet. For most users, this is the desired outcome. Developers, however, need access to [TestNet or BetaNet networks](../../../archive/build-apps/setup/#choosing-a-network). This guide describes switching between networks.
 3 | 
 4 | 
 5 | # Replacing the Genesis file
 6 | Every Algorand node has a data directory that is used to store the ledger and other configuration information. As part of this configuration, a `genesis.json` file is used. The `genesis.json` file specifies the initial state of the blockchain - its ‘genesis block’. This is a JSON formatted file with the schema for the blockchain. It contains the network name and id, the protocol version and list of allocated addresses to start the chain with. Each address contains a list of things like address status and the amount of Algos owned by the address.
 7 | 
 8 | As part of the installer, a `genesisfiles` directory is created under the node's installed location for binaries. This directory contains additional directories for each of the Algorand networks: BetaNet, TestNet, and MainNet. These directories contain the `genesis.json` file for each of the Algorand networks (eg `~/node/genesisfiles/mainnet/genesis.json`). 
 9 | 
10 | !!! info
11 |     The genesis file for *Debian* and *RPM* installs are stored in the `/var/lib/algorand/genesis/` directory.
12 | 
13 | The network can be switched by either replacing the current genesis file located in the `data` directory with the specific network `genesis.json` or by creating a new `data` directory and copying the specific network `genesis.json` file to the new `data` directory. Replacing the current genesis file will not destroy the current network data, but will prevent running multiple networks on the same node. To run multiple networks at the same time multiple data directories are required.
14 | 
15 | # Using a new Data Directory
16 | To construct a new data directory follow the steps described below that depend on the type of install that was used with the current node.
17 | 
18 | ## Mac OS or Other Linux Distros
19 | Assume the node binaries are currently installed in `~/node` and the data directory is set to `~/node/data`. Create the new data directory for the network that is being switched to. (eg `~/node/testnetdata`). 
20 | 
21 | ```
22 | cd ~/node
23 | ./goal node stop -d data
24 | mkdir testnetdata 
25 | cp ~/node/genesisfiles/testnet/genesis.json ~/node/testnetdata
26 | ```
27 | Startup the new node using the `-d` option to point at the new network.
28 | 
29 | ```
30 | ./goal node start -d ~/node/testnetdata
31 | ```
32 | 
33 | The node will restart and begin communicating with the TestNet network. It will need to sync with the network which will take time. Run the following command to check the current sync status.
34 | 
35 | ```
36 | ./goal node status -d ~/node/testnetdata
37 | ```
38 | 
39 | At this point, the original network can be stared as well using the standard data directory.
40 | 
41 | ## Debian or RPM installs
42 | For *Debian* and *RPM* installs the data directory is set to `/var/lib/algorand`. With these installs, the genesis files are stored in `/var/lib/algorand/genesis/`. Create the new data directory for the network that is being switched to. (eg `/var/lib/algorand_testnet`). 
43 | 
44 | ```
45 | ALGORAND_DATA=/var/lib/algorand_testnet
46 | sudo mkdir -p ${ALGORAND_DATA}
47 | ```
48 | Copy the specific network genesis file to the new directory and set the ownership to the algorand account.
49 | 
50 | ```
51 | sudo cp -p /var/lib/algorand/genesis/testnet/genesis.json ${ALGORAND_DATA}/genesis.json
52 | sudo cp -p /var/lib/algorand/system.json ${ALGORAND_DATA}/system.json
53 | sudo chown -R algorand ${ALGORAND_DATA}
54 | ```
55 | 
56 | Use `systemctl` to enable the process and start it.
57 | 
58 | ```
59 | sudo systemctl enable algorand@$(systemd-escape ${ALGORAND_DATA})
60 | sudo systemctl start algorand@$(systemd-escape ${ALGORAND_DATA})
61 | ```
62 | The process can be disabled or stopped using `systemctl` commands.
63 | 
64 | ```
65 | sudo systemctl stop algorand@$(systemd-escape ${ALGORAND_DATA})
66 | sudo systemctl disable algorand@$(systemd-escape ${ALGORAND_DATA})
67 | ```
68 | 
69 | # DNS Configuration for BetaNet
70 | 
71 | For the BetaNet network, when installing a new node or relay, make the following modification to the `config.json` file located in the node's data directory. 
72 | 
73 | Edit the `config.json` file and replace the line
74 | ``` 
75 | "DNSBootstrapID": "<network>.algorand.network",
76 | ```
77 | with 
78 | ``` 
79 | "DNSBootstrapID": "<network>.algodev.network",
80 | ```
81 | If former line is not present, just add the latter line.
82 | If there is no `config.json` in the Algorand data folder, just create a new one with the following content:
83 | ```json
84 | {
85 |     "DNSBootstrapID": "<network>.algodev.network"
86 | }
87 | ```
88 | 
89 | This modification to the `DNSBootstrapID` is only for the BetaNet network.
90 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:cli:features:compile.md:
--------------------------------------------------------------------------------

```markdown
 1 | # AlgoKit Compile
 2 | 
 3 | The AlgoKit Compile feature enables you to compile smart contracts (apps) and smart signatures (logic signatures) written in a supported high-level language to a format deployable on the Algorand Virtual Machine (AVM).
 4 | 
 5 | When running the compile command, AlgoKit will take care of working out which compiler you need and dynamically resolve it. Additionally, AlgoKit will detect if a matching compiler version is already installed globally on your machine or is included in your project and use that.
 6 | 
 7 | ## Prerequisites
 8 | 
 9 | See [Compile Python - Prerequisites](#prerequisites-1) for details.
10 | 
11 | ## What is Algorand Python & PuyaPy?
12 | 
13 | Algorand Python is a semantically and syntactically compatible, typed Python language that works with standard Python tooling and allows you to express smart contracts (apps) and smart signatures (logic signatures) for deployment on the Algorand Virtual Machine (AVM).
14 | 
15 | Algorand Python can be deployed to Algorand by using the PuyaPy optimising compiler, which takes Algorand Python and outputs [ARC-32](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0032.md) application spec files (among other formats) which, [when deployed](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/generate.md#1-typed-clients), will result in AVM bytecode execution semantics that match the given Python code.
16 | 
17 | If you want to learn more, check out the [PuyaPy docs](https://github.com/algorandfoundation/puya/blob/main/docs/index.md).
18 | 
19 | Below is an example Algorand Python smart contract.
20 | 
21 | ```py
22 | from algopy import ARC4Contract, arc4
23 | 
24 | class HelloWorldContract(ARC4Contract):
25 |     @arc4.abimethod
26 |     def hello(self, name: arc4.String) -> arc4.String:
27 |         return "Hello, " + name
28 | ```
29 | 
30 | For more complex examples, see the [examples](https://github.com/algorandfoundation/puya/tree/main/examples) in the [PuyaPy repo](https://github.com/algorandfoundation/puya).
31 | 
32 | ## Usage
33 | 
34 | Available commands and possible usage are as follows:
35 | 
36 | ```
37 | Usage: algokit compile [OPTIONS] COMMAND [ARGS]...
38 | 
39 |   Compile smart contracts and smart signatures written in a supported high-level language to a format deployable on
40 |   the Algorand Virtual Machine (AVM).
41 | 
42 | Options:
43 |   -v, --version TEXT  The compiler version to pin to, for example, 1.0.0. If no version is specified, AlgoKit checks
44 |                       if the compiler is installed and runs the installed version. If the compiler is not installed,
45 |                       AlgoKit runs the latest version. If a version is specified, AlgoKit checks if an installed
46 |                       version matches and runs the installed version. Otherwise, AlgoKit runs the specified version.
47 |   -h, --help          Show this message and exit.
48 | 
49 | Commands:
50 |   py      Compile Algorand Python contract(s) using the PuyaPy compiler.
51 |   python  Compile Algorand Python contract(s) using the PuyaPy compiler.
52 | ```
53 | 
54 | ### Compile Python
55 | 
56 | The command `algokit compile python` or `algokit compile py` will run the [PuyaPy](https://github.com/algorandfoundation/puya) compiler against the supplied Algorand Python smart contract.
57 | 
58 | All arguments supplied to the command are passed directly to PuyaPy, therefore this command supports all options supported by the PuyaPy compiler.
59 | 
60 | Any errors detected by PuyaPy during the compilation process will be printed to the output.
61 | 
62 | #### Prerequisites
63 | 
64 | PuyaPy requires Python 3.12+, so please ensure your Python version satisfies this requirement.
65 | 
66 | This command will attempt to resolve a matching installed PuyaPy compiler, either globally installed in the system or locally installed in your project (via [Poetry](https://python-poetry.org/)). If no appropriate match is found, the PuyaPy compiler will be dynamically run using [pipx](https://pipx.pypa.io/stable/). In this case pipx is also required.
67 | 
68 | #### Examples
69 | 
70 | To see a list of the supported PuyaPy options, run the following:
71 | 
72 | ```shell
73 | algokit compile python -h
74 | ```
75 | 
76 | To determine the version of the PuyaPy compiler in use, execute the following command:
77 | 
78 | ```shell
79 | algokit compile python --version
80 | ```
81 | 
82 | To compile a single Algorand Python smart contract and write the output to a specific location, run the following:
83 | 
84 | ```shell
85 | algokit compile python hello_world/contract.py --out-dir hello_world/out
86 | ```
87 | 
88 | To compile multiple Algorand Python smart contracts and write the output to a specific location, run the following:
89 | 
90 | ```shell
91 | algokit compile python hello_world/contract.py calculator/contract.py --out-dir my_contracts
92 | ```
93 | 
94 | To compile a directory of Algorand Python smart contracts and write the output to the default location, run the following:
95 | 
96 | ```shell
97 | algokit compile python my_contracts
98 | ```
99 | 
```

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

```markdown
  1 | # AlgoKit Python Utilities
  2 | 
  3 | A set of core Algorand utilities written in Python and released via PyPi that make it easier to build solutions on Algorand.
  4 | This project is part of [AlgoKit](https://github.com/algorandfoundation/algokit-cli).
  5 | 
  6 | The goal of this library is to provide intuitive, productive utility functions that make it easier, quicker and safer to build applications on Algorand.
  7 | Largely these functions wrap the underlying Algorand SDK, but provide a higher level interface with sensible defaults and capabilities for common tasks.
  8 | 
  9 | ```{note}
 10 | If you prefer TypeScript there's an equivalent [TypeScript utility library](https://github.com/algorandfoundation/algokit-utils-ts).
 11 | ```
 12 | 
 13 | [Core principles](#core-principles) | [Installation](#installation) | [Usage](#usage) | [Capabilities](#capabilities) | [Reference docs](#reference-documentation)
 14 | 
 15 | ```{toctree}
 16 | ---
 17 | maxdepth: 2
 18 | caption: Contents
 19 | ---
 20 | 
 21 | capabilities/account
 22 | capabilities/client
 23 | capabilities/app-client
 24 | capabilities/app-deploy
 25 | capabilities/transfer
 26 | capabilities/dispenser-client
 27 | capabilities/debugger
 28 | apidocs/algokit_utils/algokit_utils
 29 | ```
 30 | 
 31 | (core-principles)=
 32 | 
 33 | # Core principles
 34 | 
 35 | This library is designed with the following principles:
 36 | 
 37 | - **Modularity** - This library is a thin wrapper of modular building blocks over the Algorand SDK; the primitives from the underlying Algorand SDK are
 38 |   exposed and used wherever possible so you can opt-in to which parts of this library you want to use without having to use an all or nothing approach.
 39 | - **Type-safety** - This library provides strong TypeScript support with effort put into creating types that provide good type safety and intellisense.
 40 | - **Productivity** - This library is built to make solution developers highly productive; it has a number of mechanisms to make common code easier and terser to write
 41 | 
 42 | (installation)=
 43 | 
 44 | # Installation
 45 | 
 46 | This library can be installed from PyPi using pip or poetry, e.g.:
 47 | 
 48 | ```
 49 | pip install algokit-utils
 50 | poetry add algokit-utils
 51 | ```
 52 | 
 53 | (usage)=
 54 | 
 55 | # Usage
 56 | 
 57 | To use this library simply include the following at the top of your file:
 58 | 
 59 | ```python
 60 | import algokit_utils
 61 | ```
 62 | 
 63 | Then you can use intellisense to auto-complete the various functions and types that are available by typing `algokit_utils.` in your favourite Integrated Development Environment (IDE),
 64 | or you can refer to the [reference documentation](apidocs/algokit_utils/algokit_utils.md).
 65 | 
 66 | ## Types
 67 | 
 68 | The library contains extensive type hinting combined with a tool like MyPy this can help identify issues where incorrect types have been used, or used incorrectly.
 69 | 
 70 | (capabilities)=
 71 | 
 72 | # Capabilities
 73 | 
 74 | The library helps you with the following capabilities:
 75 | 
 76 | - Core capabilities
 77 |   - [**Client management**](capabilities/client.md) - Creation of algod, indexer and kmd clients against various networks resolved from environment or specified configuration
 78 |   - [**Account management**](capabilities/account.md) - Creation and use of accounts including mnemonic, multisig, transaction signer, idempotent KMD accounts and environment variable injected
 79 | - Higher-order use cases
 80 |   - [**ARC-0032 Application Spec client**](capabilities/app-client.md) - Builds on top of the App management and App deployment capabilities to provide a high productivity application client that works with ARC-0032 application spec defined smart contracts (e.g. via Beaker)
 81 |   - [**App deployment**](capabilities/app-deploy.md) - Idempotent (safely retryable) deployment of an app, including deploy-time immutability and permanence control and TEAL template substitution
 82 |   - [**Algo transfers**](capabilities/transfer.md) - Ability to easily initiate algo transfers between accounts, including dispenser management and idempotent account funding
 83 |   - [**Debugger**](capabilities/debugger.md) - Provides a set of debugging tools that can be used to simulate and trace transactions on the Algorand blockchain. These tools and methods are optimized for developers who are building applications on Algorand and need to test and debug their smart contracts via [AVM Debugger extension](https://github.com/algorandfoundation/algokit-avm-vscode-debugger).
 84 | 
 85 | (reference-documentation)=
 86 | 
 87 | # Reference documentation
 88 | 
 89 | We have [auto-generated reference documentation for the code](apidocs/algokit_utils/algokit_utils.md).
 90 | 
 91 | # Roadmap
 92 | 
 93 | This library will naturally evolve with any logical developer experience improvements needed to facilitate the [AlgoKit](https://github.com/algorandfoundation/algokit-cli) roadmap as it evolves.
 94 | 
 95 | Likely future capability additions include:
 96 | 
 97 | - Typed application client
 98 | - Asset management
 99 | - Expanded indexer API wrapper support
100 | 
101 | # Indices and tables
102 | 
103 | - {ref}`genindex`
104 | 
```

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

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / TransactionKeyreg
  2 | 
  3 | # Class: TransactionKeyreg
  4 | 
  5 | [indexerModels](../modules/indexerModels.md).TransactionKeyreg
  6 | 
  7 | Fields for a keyreg transaction.
  8 | Definition:
  9 | data/transactions/keyreg.go : KeyregTxnFields
 10 | 
 11 | ## Hierarchy
 12 | 
 13 | - `default`
 14 | 
 15 |   ↳ **`TransactionKeyreg`**
 16 | 
 17 | ## Table of contents
 18 | 
 19 | ### Constructors
 20 | 
 21 | - [constructor](indexerModels.TransactionKeyreg.md#constructor)
 22 | 
 23 | ### Properties
 24 | 
 25 | - [attribute\_map](indexerModels.TransactionKeyreg.md#attribute_map)
 26 | - [nonParticipation](indexerModels.TransactionKeyreg.md#nonparticipation)
 27 | - [selectionParticipationKey](indexerModels.TransactionKeyreg.md#selectionparticipationkey)
 28 | - [stateProofKey](indexerModels.TransactionKeyreg.md#stateproofkey)
 29 | - [voteFirstValid](indexerModels.TransactionKeyreg.md#votefirstvalid)
 30 | - [voteKeyDilution](indexerModels.TransactionKeyreg.md#votekeydilution)
 31 | - [voteLastValid](indexerModels.TransactionKeyreg.md#votelastvalid)
 32 | - [voteParticipationKey](indexerModels.TransactionKeyreg.md#voteparticipationkey)
 33 | 
 34 | ### Methods
 35 | 
 36 | - [get\_obj\_for\_encoding](indexerModels.TransactionKeyreg.md#get_obj_for_encoding)
 37 | - [from\_obj\_for\_encoding](indexerModels.TransactionKeyreg.md#from_obj_for_encoding)
 38 | 
 39 | ## Constructors
 40 | 
 41 | ### constructor
 42 | 
 43 | • **new TransactionKeyreg**(`«destructured»`)
 44 | 
 45 | Creates a new `TransactionKeyreg` object.
 46 | 
 47 | #### Parameters
 48 | 
 49 | | Name | Type |
 50 | | :------ | :------ |
 51 | | `«destructured»` | `Object` |
 52 | | › `nonParticipation?` | `boolean` |
 53 | | › `selectionParticipationKey?` | `string` \| `Uint8Array` |
 54 | | › `stateProofKey?` | `string` \| `Uint8Array` |
 55 | | › `voteFirstValid?` | `number` \| `bigint` |
 56 | | › `voteKeyDilution?` | `number` \| `bigint` |
 57 | | › `voteLastValid?` | `number` \| `bigint` |
 58 | | › `voteParticipationKey?` | `string` \| `Uint8Array` |
 59 | 
 60 | #### Overrides
 61 | 
 62 | BaseModel.constructor
 63 | 
 64 | #### Defined in
 65 | 
 66 | client/v2/indexer/models/types.ts:5150
 67 | 
 68 | ## Properties
 69 | 
 70 | ### attribute\_map
 71 | 
 72 | • **attribute\_map**: `Record`\<`string`, `string`\>
 73 | 
 74 | #### Inherited from
 75 | 
 76 | BaseModel.attribute\_map
 77 | 
 78 | #### Defined in
 79 | 
 80 | client/v2/basemodel.ts:56
 81 | 
 82 | ___
 83 | 
 84 | ### nonParticipation
 85 | 
 86 | • `Optional` **nonParticipation**: `boolean`
 87 | 
 88 | (nonpart) Mark the account as participating or non-participating.
 89 | 
 90 | #### Defined in
 91 | 
 92 | client/v2/indexer/models/types.ts:5106
 93 | 
 94 | ___
 95 | 
 96 | ### selectionParticipationKey
 97 | 
 98 | • `Optional` **selectionParticipationKey**: `Uint8Array`
 99 | 
100 | (selkey) Public key used with the Verified Random Function (VRF) result during
101 | committee selection.
102 | 
103 | #### Defined in
104 | 
105 | client/v2/indexer/models/types.ts:5112
106 | 
107 | ___
108 | 
109 | ### stateProofKey
110 | 
111 | • `Optional` **stateProofKey**: `Uint8Array`
112 | 
113 | (sprfkey) State proof key used in key registration transactions.
114 | 
115 | #### Defined in
116 | 
117 | client/v2/indexer/models/types.ts:5117
118 | 
119 | ___
120 | 
121 | ### voteFirstValid
122 | 
123 | • `Optional` **voteFirstValid**: `number` \| `bigint`
124 | 
125 | (votefst) First round this participation key is valid.
126 | 
127 | #### Defined in
128 | 
129 | client/v2/indexer/models/types.ts:5122
130 | 
131 | ___
132 | 
133 | ### voteKeyDilution
134 | 
135 | • `Optional` **voteKeyDilution**: `number` \| `bigint`
136 | 
137 | (votekd) Number of subkeys in each batch of participation keys.
138 | 
139 | #### Defined in
140 | 
141 | client/v2/indexer/models/types.ts:5127
142 | 
143 | ___
144 | 
145 | ### voteLastValid
146 | 
147 | • `Optional` **voteLastValid**: `number` \| `bigint`
148 | 
149 | (votelst) Last round this participation key is valid.
150 | 
151 | #### Defined in
152 | 
153 | client/v2/indexer/models/types.ts:5132
154 | 
155 | ___
156 | 
157 | ### voteParticipationKey
158 | 
159 | • `Optional` **voteParticipationKey**: `Uint8Array`
160 | 
161 | (votekey) Participation public key used in key registration transactions.
162 | 
163 | #### Defined in
164 | 
165 | client/v2/indexer/models/types.ts:5137
166 | 
167 | ## Methods
168 | 
169 | ### get\_obj\_for\_encoding
170 | 
171 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
172 | 
173 | Get an object ready for encoding to either JSON or msgpack.
174 | 
175 | #### Parameters
176 | 
177 | | Name | Type | Default value | Description |
178 | | :------ | :------ | :------ | :------ |
179 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
180 | 
181 | #### Returns
182 | 
183 | `Record`\<`string`, `any`\>
184 | 
185 | #### Inherited from
186 | 
187 | BaseModel.get\_obj\_for\_encoding
188 | 
189 | #### Defined in
190 | 
191 | client/v2/basemodel.ts:65
192 | 
193 | ___
194 | 
195 | ### from\_obj\_for\_encoding
196 | 
197 | ▸ `Static` **from_obj_for_encoding**(`data`): [`TransactionKeyreg`](indexerModels.TransactionKeyreg.md)
198 | 
199 | #### Parameters
200 | 
201 | | Name | Type |
202 | | :------ | :------ |
203 | | `data` | `Record`\<`string`, `any`\> |
204 | 
205 | #### Returns
206 | 
207 | [`TransactionKeyreg`](indexerModels.TransactionKeyreg.md)
208 | 
209 | #### Defined in
210 | 
211 | client/v2/indexer/models/types.ts:5197
212 | 
```

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

```typescript
  1 | import { Tool, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
  2 | import { AddLiquidity, poolUtils, SupportedNetwork } from '@tinymanorg/tinyman-js-sdk';
  3 | import { algodClient } from '../../../algorand-client.js';
  4 | import { env } from '../../../env.js';
  5 | 
  6 | async function getAssetDecimals(assetId: number): Promise<number> {
  7 |   try {
  8 |     if (assetId === 0) return 6; // Algo has 6 decimals
  9 |     const assetInfo = await algodClient.getAssetByID(assetId).do();
 10 |     return assetInfo.params.decimals;
 11 |   } catch (error) {
 12 |     console.error(`Failed to get decimals for asset ${assetId}:`, error);
 13 |     return 6; // Default to 6 decimals if we can't get the info
 14 |   }
 15 | }
 16 | 
 17 | export const liquidityTools: Tool[] = [
 18 |   {
 19 |     name: 'api_tinyman_get_liquidity_quote',
 20 |     description: 'Get quote for adding liquidity to a pool',
 21 |     inputSchema: {
 22 |       type: 'object',
 23 |       properties: {
 24 |         asset1Id: {
 25 |           type: 'integer',
 26 |           description: 'ID of the first asset'
 27 |         },
 28 |         asset2Id: {
 29 |           type: 'integer',
 30 |           description: 'ID of the second asset'
 31 |         },
 32 |         asset1Amount: {
 33 |           type: 'integer',
 34 |           description: 'Amount of first asset to add'
 35 |         },
 36 |         asset2Amount: {
 37 |           type: 'integer',
 38 |           description: 'Amount of second asset to add'
 39 |         },
 40 |         mode: {
 41 |           type: 'string',
 42 |           enum: ['initial', 'flexible', 'singleAsset'],
 43 |           description: 'Mode of adding liquidity'
 44 |         },
 45 |         version: {
 46 |           type: 'string',
 47 |           enum: ['v1_1', 'v2'],
 48 |           description: 'Tinyman protocol version',
 49 |           default: 'v2'
 50 |         }
 51 |       },
 52 |       required: ['asset1Id', 'asset2Id', 'mode']
 53 |     }
 54 |   }
 55 | ];
 56 | 
 57 | export async function handleLiquidityTools(args: any): Promise<any> {
 58 |   const { 
 59 |     name, 
 60 |     asset1Id, 
 61 |     asset2Id, 
 62 |     asset1Amount = 0,
 63 |     asset2Amount = 0,
 64 |     mode,
 65 |     version = 'v2'
 66 |   } = args;
 67 | 
 68 |   if (name === 'api_tinyman_get_liquidity_quote') {
 69 |     try {
 70 |       // Get pool information first
 71 |       const poolInfo = await (version === 'v2' 
 72 |         ? poolUtils.v2.getPoolInfo({
 73 |             client: algodClient,
 74 |             network: env.algorand_network as SupportedNetwork,
 75 |             asset1ID: asset1Id,
 76 |             asset2ID: asset2Id
 77 |           })
 78 |         : poolUtils.v1_1.getPoolInfo({
 79 |             client: algodClient,
 80 |             network: env.algorand_network as SupportedNetwork,
 81 |             asset1ID: asset1Id,
 82 |             asset2ID: asset2Id
 83 |           }));
 84 | 
 85 |       let quote;
 86 |       if (version === 'v2') {
 87 |         switch (mode) {
 88 |           case 'initial':
 89 |             quote = AddLiquidity.v2.initial.getQuote({
 90 |               pool: poolInfo,
 91 |               asset1: {
 92 |               amount: BigInt(asset1Amount),
 93 |               decimals: await getAssetDecimals(asset1Id)
 94 |               },
 95 |               asset2: {
 96 |               amount: BigInt(asset2Amount),
 97 |               decimals: await getAssetDecimals(asset2Id)
 98 |               }
 99 |             });
100 |             break;
101 |           case 'flexible':
102 |             quote = AddLiquidity.v2.flexible.getQuote({
103 |               pool: poolInfo,
104 |               asset1: {
105 |               amount: BigInt(asset1Amount),
106 |               decimals: await getAssetDecimals(asset1Id)
107 |               },
108 |               asset2: {
109 |               amount: BigInt(asset2Amount),
110 |               decimals: await getAssetDecimals(asset2Id)
111 |               }
112 |             });
113 |             break;
114 |           case 'singleAsset':
115 |             quote = AddLiquidity.v2.withSingleAsset.getQuote({
116 |               pool: poolInfo,
117 |               assetIn: {
118 |                 id: asset1Id,
119 |                 amount: BigInt(asset1Amount)
120 |               },
121 |               decimals: {
122 |                 asset1: await getAssetDecimals(asset1Id),
123 |                 asset2: await getAssetDecimals(asset2Id)
124 |               }
125 |             });
126 |             break;
127 |           default:
128 |             throw new McpError(
129 |               ErrorCode.InvalidParams,
130 |               `Invalid liquidity mode: ${mode}`
131 |             );
132 |         }
133 |       } else {
134 |         // Get pool reserves for v1.1
135 |         const reserves = await poolUtils.v1_1.getPoolReserves(algodClient, poolInfo);
136 |         quote = AddLiquidity.v1_1.getQuote({
137 |           pool: poolInfo,
138 |           reserves,
139 |           asset1In: BigInt(asset1Amount),
140 |           asset2In: BigInt(asset2Amount)
141 |         });
142 |       }
143 | 
144 |       return quote;
145 |     } catch (error) {
146 |       throw new McpError(
147 |         ErrorCode.InternalError,
148 |         `Failed to get liquidity quote: ${error instanceof Error ? error.message : String(error)}`
149 |       );
150 |     }
151 |   }
152 | 
153 |   throw new McpError(
154 |     ErrorCode.MethodNotFound,
155 |     `Unknown liquidity tool: ${name}`
156 |   );
157 | }
158 | 
```

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

```typescript
  1 | import { Tool, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
  2 | import { Swap, poolUtils, SwapType, SupportedNetwork } from '@tinymanorg/tinyman-js-sdk';
  3 | import { algodClient } from '../../../algorand-client.js';
  4 | import { env } from '../../../env.js';
  5 | 
  6 | async function getAssetDecimals(assetId: number): Promise<number> {
  7 |   try {
  8 |     if (assetId === 0) return 6; // Algo has 6 decimals
  9 |     const assetInfo = await algodClient.getAssetByID(assetId).do();
 10 |     return assetInfo.params.decimals;
 11 |   } catch (error) {
 12 |     console.error(`Failed to get decimals for asset ${assetId}:`, error);
 13 |     return 6; // Default to 6 decimals if we can't get the info
 14 |   }
 15 | }
 16 | 
 17 | export const swapTools: Tool[] = [
 18 |   {
 19 |     name: 'api_tinyman_get_swap_quote',
 20 |     description: 'Get quote for swapping assets',
 21 |     inputSchema: {
 22 |       type: 'object',
 23 |       properties: {
 24 |         assetIn: {
 25 |           type: 'integer',
 26 |           description: 'ID of the input asset'
 27 |         },
 28 |         assetOut: {
 29 |           type: 'integer',
 30 |           description: 'ID of the output asset'
 31 |         },
 32 |         amount: {
 33 |           type: 'integer',
 34 |           description: 'Amount to swap'
 35 |         },
 36 |         mode: {
 37 |           type: 'string',
 38 |           enum: ['fixedInput', 'fixedOutput'],
 39 |           description: 'Mode of swap'
 40 |         },
 41 |         version: {
 42 |           type: 'string',
 43 |           enum: ['v1_1', 'v2'],
 44 |           description: 'Tinyman protocol version',
 45 |           default: 'v2'
 46 |         }
 47 |       },
 48 |       required: ['assetIn', 'assetOut', 'amount', 'mode']
 49 |     }
 50 |   }
 51 | ];
 52 | 
 53 | export async function handleSwapTools(args: any): Promise<any> {
 54 |   const { 
 55 |     name, 
 56 |     assetIn, 
 57 |     assetOut, 
 58 |     amount,
 59 |     mode,
 60 |     version = 'v2'
 61 |   } = args;
 62 | 
 63 |   if (name === 'api_tinyman_get_swap_quote') {
 64 |     try {
 65 |       // Get pool information first
 66 |       const poolInfo = await (version === 'v2' 
 67 |         ? poolUtils.v2.getPoolInfo({
 68 |             client: algodClient,
 69 |             network: env.algorand_network as SupportedNetwork,
 70 |             asset1ID: assetIn,
 71 |             asset2ID: assetOut
 72 |           })
 73 |         : poolUtils.v1_1.getPoolInfo({
 74 |             client: algodClient,
 75 |             network: env.algorand_network as SupportedNetwork,
 76 |             asset1ID: assetIn,
 77 |             asset2ID: assetOut
 78 |           }));
 79 | 
 80 |       // Get asset decimals
 81 |       const [assetInDecimals, assetOutDecimals] = await Promise.all([
 82 |         getAssetDecimals(assetIn),
 83 |         getAssetDecimals(assetOut)
 84 |       ]);
 85 | 
 86 |       let quote;
 87 |       if (version === 'v2') {
 88 |         if (mode === 'fixedInput') {
 89 |           quote = await Swap.v2.getQuote({
 90 |             assetIn: {
 91 |               id: assetIn,
 92 |               decimals: assetInDecimals
 93 |             },
 94 |             assetOut: {
 95 |               id: assetOut,
 96 |               decimals: assetOutDecimals
 97 |             },
 98 |             pool: poolInfo,
 99 |             amount: BigInt(amount),
100 |             type: SwapType.FixedInput,
101 |             network: env.algorand_network as SupportedNetwork,
102 |             slippage: 0.01 // 1% slippage
103 |           });
104 |         } else {
105 |           quote = await Swap.v2.getQuote({
106 |             assetIn: {
107 |               id: assetIn,
108 |               decimals: assetInDecimals
109 |             },
110 |             assetOut: {
111 |               id: assetOut,
112 |               decimals: assetOutDecimals
113 |             },
114 |             pool: poolInfo,
115 |             amount: BigInt(amount),
116 |             type: SwapType.FixedOutput,
117 |             network: env.algorand_network as SupportedNetwork,
118 |             slippage: 0.01
119 |           });
120 |         }
121 |       } else {
122 |         // Get pool reserves for v1.1
123 |         const reserves = await poolUtils.v1_1.getPoolReserves(algodClient, poolInfo);
124 |         if (mode === 'fixedInput') {
125 |           quote = Swap.v1_1.getQuote(
126 |             SwapType.FixedInput,
127 |             poolInfo,
128 |             reserves,
129 |             {
130 |               id: assetIn,
131 |               amount: BigInt(amount)
132 |             },
133 |             {
134 |               assetIn: assetInDecimals,
135 |               assetOut: assetOutDecimals
136 |             }
137 |           );
138 |         } else {
139 |           quote = Swap.v1_1.getQuote(
140 |             SwapType.FixedOutput,
141 |             poolInfo,
142 |             reserves,
143 |             {
144 |               id: assetOut,
145 |               amount: BigInt(amount)
146 |             },
147 |             {
148 |               assetIn: assetInDecimals,
149 |               assetOut: assetOutDecimals
150 |             }
151 |           );
152 |         }
153 |       }
154 | 
155 |       return quote;
156 |     } catch (error) {
157 |       throw new McpError(
158 |         ErrorCode.InternalError,
159 |         `Failed to get swap quote: ${error instanceof Error ? error.message : String(error)}`
160 |       );
161 |     }
162 |   }
163 | 
164 |   throw new McpError(
165 |     ErrorCode.MethodNotFound,
166 |     `Unknown swap tool: ${name}`
167 |   );
168 | }
169 | 
```

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

```markdown
 1 | ---
 2 | arc: 73
 3 | title: Algorand Interface Detection Spec
 4 | description: A specification for smart contracts and indexers to detect interfaces of smart contracts.
 5 | author: William G Hatch (@willghatch)
 6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/165
 7 | status: Final
 8 | type: Standards Track
 9 | category: Interface
10 | sub-category: Application
11 | created: 2023-01-10
12 | requires: 4, 22, 28
13 | ---
14 | 
15 | # Algorand Interface Detection Spec
16 | 
17 | ## Abstract
18 | 
19 | This ARC specifies an interface detection interface based on <a href="https://eips.ethereum.org/EIPS/eip-165">ERC-165</a>.
20 | This interface allows smart contracts and indexers to detect whether a smart contract implements a particular interface based on an interface selector.
21 | 
22 | 
23 | ## Motivation
24 | 
25 | [ARC-4](arc-0004.md) applications have associated Contract or Interface description JSON objects that allow users to call their methods.
26 | However, these JSON objects are communicated outside of the consensus network.
27 | Therefore indexers can not reliably identify contract instances of a particular interface, and smart contracts have no way to detect whether another contract supports a particular interface.
28 | An on-chain method to detect interfaces allows greater composability for smart contracts, and allows indexers to automatically detect implementations of interfaces of interest.
29 | 
30 | 
31 | ## Specification
32 | The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in <a href="https://www.ietf.org/rfc/rfc2119.txt">RFC-2119</a>.
33 | 
34 | 
35 | ### How Interfaces are Identified
36 | 
37 | The specification for interfaces is defined by [ARC-4](./arc-0004.md).
38 | This specification extends ARC-4 to define the concept of an interface selector.
39 | We define the interface selector as the XOR of all selectors in the interface.
40 | Selectors in the interface include selectors for methods, selectors for events as defined by [ARC-28](./arc-0028.md), and selectors for potential future kinds of interface components.
41 | 
42 | As an example, consider an interface that has two methods and one event, `add(uint64,uint64)uint128`, `add3(uint64,uint64,uint64)uint128`, and `alert(uint64)`.
43 | The method selector for the `add` method is the first 4 bytes of the method signature's SHA-512/256 hash.
44 | The SHA-512/256 hash of `add(uint64,uint64)uint128` is `0x8aa3b61f0f1965c3a1cbfa91d46b24e54c67270184ff89dc114e877b1753254a`, so its method selector is `0x8aa3b61f`.
45 | The SHA-512/256 hash of `add3(uint64,uint64,uint64)uint128` is `0xa6fd1477731701dd2126f24facf3492d470cf526e7d4d849fea33d102b45f03d`, so its method selector is `0xa6fd1477`
46 | The SHA-512/256 hash of `alert(uint64)` is `0xc809efe9fd45417226d52b605658b83fff27850a01efeea30f694d1e112d5463`, so its method selector is `0xc809efe9`
47 | The interface selector is defined as the bitwise exclusive or of all method and event selectors, so the interface selector is `0x8aa3b61f XOR 0xa6fd1477 XOR 0xc809efe9`, which is `0xe4574d81`.
48 | 
49 | ### How a Contract will Publish the Interfaces it Implements for Detection
50 | 
51 | In addition to out-of-band JSON contract or interface description data, a contract that is compliant with this specification shall implement the following interface:
52 | 
53 | ```json
54 | {
55 |   "name": "ARC-73",
56 |   "desc": "Interface for interface detection",
57 |   "methods": [
58 |     {
59 |       "name": "supportsInterface",
60 |       "desc": "Detects support for an interface specified by selector.",
61 |       "readonly": true,
62 |       "args": [
63 |         { "type": "byte[4]", "name": "interfaceID", "desc": "The selector of the interface to detect." },
64 |       ],
65 |       "returns": { "type": "bool", "desc": "Whether the contract supports the interface." }
66 |     }
67 |   ]
68 | }
69 | ```
70 | 
71 | The `supportsInterface` method must be `readonly` as specified by [ARC-22](./arc-0022.md).
72 | 
73 | The implementing contract must have a `supportsInterface` method that returns:
74 | 
75 | * `true` when `interfaceID` is `0x4e22a3ba` (the selector for [ARC-73](./arc-0073.md), this interface)
76 | * `false` when `interfaceID` is `0xffffffff`
77 | * `true` for any other `interfaceID` the contract implements
78 | * `false` for any other `interfaceID`
79 | 
80 | 
81 | ## Rationale
82 | 
83 | This specification is nearly identical to the related specification for Ethereum, <a href="https://eips.ethereum.org/EIPS/eip-165">ERC-165</a>, merely adapted to Algorand.
84 | 
85 | 
86 | ## Security Considerations
87 | 
88 | It is possible that a malicious contract may lie about interface support.
89 | This interface makes it easier for all kinds of actors, inclulding malicious ones, to interact with smart contracts that implement it.
90 | 
91 | 
92 | ## Copyright
93 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
94 | 
```

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

```markdown
  1 | ---
  2 | title: Arrays, Tuples, and Objects
  3 | ---
  4 | 
  5 | TEALScript supports various forms of arrays and tuples. In general, it is always recommended to use **static** types in arrays whenever possible and avoid booleans. Dynamic types and booleans are much more expensive to use and have some limitations listed below. 
  6 | 
  7 | ## Pass by Reference
  8 | All arrays and objects are passed by reference even if in contract state, much like TypeScript. TEALScript, however, will not let a function mutate an array that was passed as an argument.
  9 | 
 10 | If you wish to pass by value you can use `clone`.
 11 | 
 12 | ```ts
 13 | const x: uint64[] = [1,2,3];
 14 | const y = x;
 15 | y[0] = 4
 16 | 
 17 | log(y) // [4, 2, 3]
 18 | log(x) // [4, 2, 3]
 19 | 
 20 | const z = clone(x)
 21 | z[1] = 5
 22 | 
 23 | log(x) // [4, 2, 3] note x has NOT changed
 24 | log(z) // [4, 5, 3]
 25 | ```
 26 | 
 27 | ## Instantiation
 28 | 
 29 | When instantiating an array or object, a type **MUST** be defined. For example, `const x: uint64[] = [1, 2, 3]`. If you omit the type, the compiler will throw an error `const x = [1, 2, 3] // ERROR`
 30 | 
 31 | ## Static Arrays
 32 | 
 33 | The most efficient and capable type of arrays are static arrays. To define a static array type in TEALScript you need to use the `StaticArray` generic type. For example, `StaticArray<uint64, 10>` for an array of 10 unsigned 64-bit integers. It should be noted that putting the length in a bracket (ie. `uint64[10]`) is **NOT** valid TypeScript syntax thus not officially supported by TEALScript.
 34 | 
 35 | ### Partial Definition
 36 | 
 37 | If you have a static array but only want to initialize some of the initial values, you can it instantiate with an array less than the defined length. The remaning values will be zero bytes. For example, the following instantiations create the same underlying byte array
 38 | 
 39 | ```ts
 40 | const x: <StaticArray, 3> = [1]
 41 | const y: <StaticArray, 3> = [1, 0, 0]
 42 | ```
 43 | 
 44 | ### forEach iteration
 45 | 
 46 | The most efficient way to iterate over an array is to use `.forEach`. This is currently only supported on static arrays. `.forEach` also works on arrays larger than 4kb stored in boxes. 
 47 | 
 48 | ```ts
 49 |   staticForEach(): uint64 {
 50 |     const a: StaticArray<uint64, 3> = [1, 2, 3];
 51 |     let sum = 0;
 52 | 
 53 |     a.forEach((v) => {
 54 |       sum += v;
 55 |     });
 56 |     return sum; // 6
 57 |   }
 58 | ```
 59 | 
 60 | 
 61 | It should be noted that the second argument (current index) is not currently supported. The iterator function must also be explicitly defined as an arrow function (rather than passing in another function). Both of these features are being considered for future releases.
 62 | 
 63 | ### Supported Methods
 64 | 
 65 | The following array methods are supported on static arrays (note the limitations on `forEach` above)
 66 | 
 67 | * [length](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length)
 68 | * [forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
 69 | 
 70 | ## Dynamic Arrays
 71 | 
 72 | Dynamic arrays are supported in TEALScript but anything beyond dynamic arrays of static types is very inefficient. For example, `uint64[]` is fairly efficient but `uint64[][]` is much less efficient. 
 73 | 
 74 | ### Tecnical Explanation
 75 | 
 76 | Under the hood, TEALScript will chop off the length prefix of dynamic arrays during runtime. This means `uint64[]` is just a bunch of 8-byte slices concatenated together. This makes all operations, whether its reading or writing, much more simple. Nested dynamic types are encoded as dynamic tuples, this requires much more opcodes to read/write the tuple head and tail values. 
 77 | 
 78 | ### Supported Methods
 79 | 
 80 | Dynamic arrays in TEALScript support the following methods and they function just as they do in TypeScript. It should be noted that `splice` is rather heavy in terms of opcode cost so it should be used sparringly.
 81 | 
 82 | * [pop](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop)
 83 | * [push](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push)
 84 | * [splice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)
 85 | * [length](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length)
 86 | 
 87 | ## Objects
 88 | 
 89 | Object can be defined much like in TypeScript. The same efficiencies of static vs dynamic types also applies to objects. 
 90 | 
 91 | Currently no `Object` methods are supported in TEALScript.
 92 | 
 93 | ### Technical Explanation 
 94 | 
 95 | Under the hood, TEALScript objects are just tuples. For example `[uint64, uint8]` is the same byteslice as `{ foo: uint64, bar: uint8 }`. The order of elements in the tuple depends on the order they are defined in the type defintion. For example, the following definitions result in the same byteslice.
 96 | 
 97 | ```ts
 98 | type MyType = { foo: uint64, bar: uint8 }
 99 | 
100 | ...
101 | 
102 | const x: MyType = { foo: 1, bar: 2}
103 | const y: MyType = { bar: 2, foo: 1 }
104 | ```
105 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:lora:README.md:
--------------------------------------------------------------------------------

```markdown
 1 | <div align="center">
 2 | <a href="https://github.com/algorandfoundation/algokit-lora"><img src="https://bafybeigi4s7alfr7fdir5mdi6xzmichoubnwndol4ts6ktz52y3qvd5soe.ipfs.nftstorage.link/" width=60%></a>
 3 | </div>
 4 | 
 5 | <p align="center">
 6 |     <a target="_blank" href="https://github.com/algorandfoundation/algokit-lora/blob/main/README.md"><img src="https://img.shields.io/badge/docs-repository-00dc94?logo=github&style=flat.svg" /></a>
 7 |     <a target="_blank" href="https://developer.algorand.org/algokit/"><img src="https://img.shields.io/badge/learn-AlgoKit-00dc94?logo=algorand&mac=flat.svg" /></a>
 8 |     <a target="_blank" href="https://github.com/algorandfoundation/algokit-lora"><img src="https://img.shields.io/github/stars/algorandfoundation/algokit-lora?color=00dc94&logo=star&style=flat" /></a>
 9 |     <a target="_blank" href="https://developer.algorand.org/algokit/"><img  src="https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fgithub.com%2Falgorandfoundation%2Falgokit-lora&countColor=%2300dc94&style=flat" /></a>
10 | </p>
11 | 
12 | ---
13 | 
14 | Algorand AlgoKit lora is a live on-chain resource analyzer, that enables developers to explore and interact with a configured Algorand network in a visual way.
15 | 
16 | ## What is lora?
17 | 
18 | AlgoKit lora is a powerful visual tool designed to streamline the Algorand local development experience.
19 | It acts as both a network explorer and a tool for building and testing your Algorand applications.
20 | 
21 | You can access lora by visiting [https://lora.algokit.io](https://lora.algokit.io) in your browser or by running `algokit explore` when you have the [AlgoKit CLI](https://github.com/algorandfoundation/algokit-cli) installed.
22 | 
23 | ## Why did we build lora?
24 | 
25 | An explorer is an essential tool for making blockchain data accessible and enables users to inspect and understand on-chain activities. Without these tools, it's difficult to interpret data or gather the information and insights to fully harness the potential of the blockchain. Therefore it makes sense to have a high quality, officially supported and fully open-source tool available to the community.
26 | 
27 | Before developing lora, we evaluated the existing tools in the community, but none fully met our desires.
28 | 
29 | As part of this evaluation we came up with several design goals, which are:
30 | 
31 | - **Developer-Centric User Experience**: Offer a rich user experience tailored for developers, with support for LocalNet, TestNet, and MainNet.
32 | - **Open Source**: Fully open source and actively maintained.
33 | - **Operationally Simple**: Operate using algod and indexer directly, eliminating the need for additional setup, deployment, or maintenance.
34 | - **Visualize Complexity**: Enable Algorand developers to understand complex transactions and transaction groups by visually representing them.
35 | - **Contextual Linking**: Allow users to see live and historical transactions in the context of related accounts, assets, or applications.
36 | - **Performant**: Ensure a fast and seamless experience by minimizing requests to upstream services and utilizing caching to prevent unnecessary data fetching. Whenever possible, ancillary data should be fetched just in time with minimal over-fetching.
37 | - **Support the Learning Journey**: Assist developers in discovering and learning about the Algorand ecosystem.
38 | - **Seamless Integration**: Use and integrate seamlessly with the existing AlgoKit tools and enhance their usefulness.
39 | - **Local Installation**: Allow local installation alongside the AlgoKit CLI and your existing dev tools.
40 | 
41 | ## Key features
42 | 
43 | - Explore blocks, transactions, transaction groups, assets, accounts and applications on LocalNet, TestNet or MainNet.
44 | - Visualise and understand complex transactions and transaction groups with the visual transaction view.
45 | - View blocks in real time as they are produced on the connected network.
46 | - Monitor and inspect real-time transactions related to an asset, account, or application with the live transaction view.
47 | - Review historical transactions related to an asset, account, or application through the historical transaction view.
48 | - Access detailed asset information and metadata when the asset complies with one of the ASA ARCs.
49 | - Connected to your Algorand wallet and perform context specific actions.
50 | - Fund an account in LocalNet or TestNet.
51 | - Visually deploy, populate, simulate and call an app by uploading an ARC-4, ARC-32 or ARC-56 app spec via App lab.
52 | - Craft, simulate and send transaction groups using Transaction wizard.
53 | - Seamless integration into the existing AlgoKit ecosystem.
54 | 
55 | ## Roadmap
56 | 
57 | - Installable app with tighter AlgoKit tooling integration.
58 | 
59 | ## Contributing
60 | 
61 | See the [contributing page](./CONTRIBUTING.md) to learn about making improvements to the CLI tool itself, including developer setup instructions.
62 | 
```

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

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / [types/app-arc56](../modules/types_app_arc56.md) / Arc56Method
  2 | 
  3 | # Class: Arc56Method
  4 | 
  5 | [types/app-arc56](../modules/types_app_arc56.md).Arc56Method
  6 | 
  7 | Wrapper around `algosdk.ABIMethod` that represents an ARC-56 ABI method.
  8 | 
  9 | ## Hierarchy
 10 | 
 11 | - `ABIMethod`
 12 | 
 13 |   ↳ **`Arc56Method`**
 14 | 
 15 | ## Table of contents
 16 | 
 17 | ### Constructors
 18 | 
 19 | - [constructor](types_app_arc56.Arc56Method.md#constructor)
 20 | 
 21 | ### Properties
 22 | 
 23 | - [args](types_app_arc56.Arc56Method.md#args)
 24 | - [description](types_app_arc56.Arc56Method.md#description)
 25 | - [events](types_app_arc56.Arc56Method.md#events)
 26 | - [method](types_app_arc56.Arc56Method.md#method)
 27 | - [name](types_app_arc56.Arc56Method.md#name)
 28 | - [readonly](types_app_arc56.Arc56Method.md#readonly)
 29 | - [returns](types_app_arc56.Arc56Method.md#returns)
 30 | 
 31 | ### Methods
 32 | 
 33 | - [getSelector](types_app_arc56.Arc56Method.md#getselector)
 34 | - [getSignature](types_app_arc56.Arc56Method.md#getsignature)
 35 | - [toJSON](types_app_arc56.Arc56Method.md#tojson)
 36 | - [txnCount](types_app_arc56.Arc56Method.md#txncount)
 37 | - [fromSignature](types_app_arc56.Arc56Method.md#fromsignature)
 38 | 
 39 | ## Constructors
 40 | 
 41 | ### constructor
 42 | 
 43 | • **new Arc56Method**(`method`): [`Arc56Method`](types_app_arc56.Arc56Method.md)
 44 | 
 45 | #### Parameters
 46 | 
 47 | | Name | Type |
 48 | | :------ | :------ |
 49 | | `method` | [`Method`](../interfaces/types_app_arc56.Method.md) |
 50 | 
 51 | #### Returns
 52 | 
 53 | [`Arc56Method`](types_app_arc56.Arc56Method.md)
 54 | 
 55 | #### Overrides
 56 | 
 57 | algosdk.ABIMethod.constructor
 58 | 
 59 | #### Defined in
 60 | 
 61 | [src/types/app-arc56.ts:26](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-arc56.ts#L26)
 62 | 
 63 | ## Properties
 64 | 
 65 | ### args
 66 | 
 67 | • `Readonly` **args**: \{ `defaultValue?`: \{ `data`: `string` ; `source`: ``"method"`` \| ``"box"`` \| ``"global"`` \| ``"local"`` \| ``"literal"`` ; `type?`: `string`  } ; `desc?`: `string` ; `name?`: `string` ; `struct?`: `string` ; `type`: `ABIArgumentType`  }[]
 68 | 
 69 | #### Overrides
 70 | 
 71 | algosdk.ABIMethod.args
 72 | 
 73 | #### Defined in
 74 | 
 75 | [src/types/app-arc56.ts:23](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-arc56.ts#L23)
 76 | 
 77 | ___
 78 | 
 79 | ### description
 80 | 
 81 | • `Optional` `Readonly` **description**: `string`
 82 | 
 83 | #### Inherited from
 84 | 
 85 | algosdk.ABIMethod.description
 86 | 
 87 | #### Defined in
 88 | 
 89 | node_modules/algosdk/dist/types/abi/method.d.ts:28
 90 | 
 91 | ___
 92 | 
 93 | ### events
 94 | 
 95 | • `Optional` `Readonly` **events**: `ARC28Event`[]
 96 | 
 97 | #### Inherited from
 98 | 
 99 | algosdk.ABIMethod.events
100 | 
101 | #### Defined in
102 | 
103 | node_modules/algosdk/dist/types/abi/method.d.ts:38
104 | 
105 | ___
106 | 
107 | ### method
108 | 
109 | • **method**: [`Method`](../interfaces/types_app_arc56.Method.md)
110 | 
111 | #### Defined in
112 | 
113 | [src/types/app-arc56.ts:26](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-arc56.ts#L26)
114 | 
115 | ___
116 | 
117 | ### name
118 | 
119 | • `Readonly` **name**: `string`
120 | 
121 | #### Inherited from
122 | 
123 | algosdk.ABIMethod.name
124 | 
125 | #### Defined in
126 | 
127 | node_modules/algosdk/dist/types/abi/method.d.ts:27
128 | 
129 | ___
130 | 
131 | ### readonly
132 | 
133 | • `Optional` `Readonly` **readonly**: `boolean`
134 | 
135 | #### Inherited from
136 | 
137 | algosdk.ABIMethod.readonly
138 | 
139 | #### Defined in
140 | 
141 | node_modules/algosdk/dist/types/abi/method.d.ts:39
142 | 
143 | ___
144 | 
145 | ### returns
146 | 
147 | • `Readonly` **returns**: `Object`
148 | 
149 | #### Type declaration
150 | 
151 | | Name | Type | Description |
152 | | :------ | :------ | :------ |
153 | | `desc?` | `string` | Optional, user-friendly description for the return value |
154 | | `struct?` | `string` | If the type is a struct, the name of the struct |
155 | | `type` | `ABIReturnType` | - |
156 | 
157 | #### Overrides
158 | 
159 | algosdk.ABIMethod.returns
160 | 
161 | #### Defined in
162 | 
163 | [src/types/app-arc56.ts:24](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-arc56.ts#L24)
164 | 
165 | ## Methods
166 | 
167 | ### getSelector
168 | 
169 | ▸ **getSelector**(): `Uint8Array`
170 | 
171 | #### Returns
172 | 
173 | `Uint8Array`
174 | 
175 | #### Inherited from
176 | 
177 | algosdk.ABIMethod.getSelector
178 | 
179 | #### Defined in
180 | 
181 | node_modules/algosdk/dist/types/abi/method.d.ts:42
182 | 
183 | ___
184 | 
185 | ### getSignature
186 | 
187 | ▸ **getSignature**(): `string`
188 | 
189 | #### Returns
190 | 
191 | `string`
192 | 
193 | #### Inherited from
194 | 
195 | algosdk.ABIMethod.getSignature
196 | 
197 | #### Defined in
198 | 
199 | node_modules/algosdk/dist/types/abi/method.d.ts:41
200 | 
201 | ___
202 | 
203 | ### toJSON
204 | 
205 | ▸ **toJSON**(): [`Method`](../interfaces/types_app_arc56.Method.md)
206 | 
207 | #### Returns
208 | 
209 | [`Method`](../interfaces/types_app_arc56.Method.md)
210 | 
211 | #### Overrides
212 | 
213 | algosdk.ABIMethod.toJSON
214 | 
215 | #### Defined in
216 | 
217 | [src/types/app-arc56.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-arc56.ts#L38)
218 | 
219 | ___
220 | 
221 | ### txnCount
222 | 
223 | ▸ **txnCount**(): `number`
224 | 
225 | #### Returns
226 | 
227 | `number`
228 | 
229 | #### Inherited from
230 | 
231 | algosdk.ABIMethod.txnCount
232 | 
233 | #### Defined in
234 | 
235 | node_modules/algosdk/dist/types/abi/method.d.ts:43
236 | 
237 | ___
238 | 
239 | ### fromSignature
240 | 
241 | ▸ **fromSignature**(`signature`): `ABIMethod`
242 | 
243 | #### Parameters
244 | 
245 | | Name | Type |
246 | | :------ | :------ |
247 | | `signature` | `string` |
248 | 
249 | #### Returns
250 | 
251 | `ABIMethod`
252 | 
253 | #### Inherited from
254 | 
255 | algosdk.ABIMethod.fromSignature
256 | 
257 | #### Defined in
258 | 
259 | node_modules/algosdk/dist/types/abi/method.d.ts:45
260 | 
```

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

```markdown
  1 | ---
  2 | arc: 15
  3 | title: Encrypted Short Messages
  4 | description: Scheme for encryption/decryption that allows for private messages.
  5 | author: Stéphane Barroso (@sudoweezy), Paweł Pierścionek (@urtho)
  6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/*
  7 | status: Deprecated
  8 | type: Standards Track
  9 | category: Interface
 10 | created: 2022-11-21
 11 | requires: 4
 12 | ---
 13 | 
 14 | # Encrypted Short Messages
 15 | 
 16 | ## Abstract
 17 | 
 18 | The goal of this convention is to have a standard way for block explorers, wallets, exchanges, marketplaces, and more generally, client software to send, read & delete short encrypted messages.
 19 | 
 20 | ## Specification
 21 | The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in <a href="https://www.ietf.org/rfc/rfc2119.txt">RFC-2119</a>.
 22 | 
 23 | > Comments like this are non-normative.
 24 | 
 25 | ### Account's message Application
 26 | 
 27 | To receive a message, an Account **MUST** create an application that follows this convention:
 28 | 
 29 | - A Local State named `public_key` **MUST** contain an *NACL Public Key (Curve 25519)* key
 30 | - A Local State named `arc` **MUST** contain the value `arc15-nacl-curve25519`
 31 | 
 32 | 
 33 | - A Box `inbox` where:
 34 |   - Keys is an ABI encoded of the tuple `(address,uint64)` containing the address of the sender and the round when the message is sent
 35 |   - Value is an encoded  **text**
 36 | 
 37 | > With this design, for each round, the sender can only write one message per round.
 38 | > For the same round, an account can receive multiple messages if distinct sender sends them
 39 | 
 40 | ### ABI Interface
 41 | 
 42 | The associated smart contract **MUST** implement the following ABI interface:
 43 | ```json
 44 | {
 45 |   "name": "ARC_0015",
 46 |   "desc": "Interface for an encrypted messages application",
 47 |   "methods": [
 48 |     {
 49 |       "name": "write",
 50 |       "desc": "Write encrypted text to the box inbox",
 51 |       "args": [
 52 |         { "type": "byte[]", "name": "text", "desc": "Encrypted text provided by the sender." }
 53 |       ],
 54 |       "returns": { "type": "void" }
 55 |     },
 56 |     {
 57 |       "name": "authorize",
 58 |       "desc": "Authorize an addresses to send a message",
 59 |       "args": [
 60 |         { "type": "byte[]", "name": "address_to_add", "desc": "Address of a sender" },
 61 |         { "type": "byte[]", "name": "info", "desc": "information about the sender" }
 62 |       ],
 63 |       "returns": { "type": "void" }
 64 |     },
 65 |     {
 66 |       "name": "remove",
 67 |       "desc": "Delete the encrypted text sent by an account on a particular round. Send the MBR used for a box to the Application's owner.",
 68 |       "args": [
 69 |         { "type": "byte[]", "name": "address", "desc": "Address of the sender"},
 70 |         { "type": "uint64", "name": "round", "desc": "Round when the message was sent"}
 71 |       ],
 72 |       "returns": { "type": "void" }
 73 |     },
 74 |     {
 75 |       "name": "set_public_key",
 76 |       "desc": "Register a NACL Public Key (Curve 25519) to the global value public_key",
 77 |       "args": [
 78 |         { "type": "byte[]", "name": "public_key", "desc": "NACL Public Key (Curve 25519)" }
 79 |       ],
 80 |       "returns": { "type": "void" }
 81 |     }
 82 |   ]
 83 | }
 84 | ```
 85 | > Warning: The remove method only removes the box used for a message, but it is still possible to access it by looking at the indexer.
 86 | 
 87 | ## Rationale
 88 | Algorand blockchain unlocks many new use cases - anonymous user login to dApps and classical WEB2.0 solutions being one of them. For many use-cases, anonymous users still require asynchronous event notifications, and email seems to be the only standard option at the time of the creation of this ARC. With wallet adoption of this standard, users will enjoy real-time encrypted A2P (application-to-person) notifications without having to provide their email addresses and without any vendor lock-in.
 89 | 
 90 | There is also a possibility to do a similar version of this ARC with one App which will store every message for every Account.
 91 | 
 92 | Another approach was to use the note field for messages, but with box storage available, it was a more practical and secure design.
 93 | 
 94 | ## Reference Implementation
 95 | 
 96 | The following codes are not audited and are only here for information purposes.
 97 | It **MUST** not be used in production.
 98 | 
 99 | Here is an example of how the code can be run in python :
100 | [main.py](../assets/arc-0015/main.py).
101 | > The delete method is only for test purposes, it is not part of the ABI for an `ARC-15` Application.
102 | 
103 | An example the application created using Beaker can be found here :
104 | [application.py](../assets/arc-0015/application.py).
105 | 
106 | 
107 | ## Security Considerations
108 | Even if the message is encrypted, it will stay on the blockchain.
109 | If the secret key used to decrypt is compromised at one point, every related message IS at risk.
110 | 
111 | ## Copyright
112 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
113 | 
```

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

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / types/client-manager
  2 | 
  3 | # Module: types/client-manager
  4 | 
  5 | ## Table of contents
  6 | 
  7 | ### Classes
  8 | 
  9 | - [ClientManager](../classes/types_client_manager.ClientManager.md)
 10 | 
 11 | ### Interfaces
 12 | 
 13 | - [AlgoSdkClients](../interfaces/types_client_manager.AlgoSdkClients.md)
 14 | - [TypedAppClient](../interfaces/types_client_manager.TypedAppClient.md)
 15 | - [TypedAppFactory](../interfaces/types_client_manager.TypedAppFactory.md)
 16 | 
 17 | ### Type Aliases
 18 | 
 19 | - [ClientAppClientByNetworkParams](types_client_manager.md#clientappclientbynetworkparams)
 20 | - [ClientAppClientParams](types_client_manager.md#clientappclientparams)
 21 | - [ClientAppFactoryParams](types_client_manager.md#clientappfactoryparams)
 22 | - [ClientResolveAppClientByCreatorAndNameParams](types_client_manager.md#clientresolveappclientbycreatorandnameparams)
 23 | - [ClientTypedAppClientByCreatorAndNameParams](types_client_manager.md#clienttypedappclientbycreatorandnameparams)
 24 | - [ClientTypedAppClientByNetworkParams](types_client_manager.md#clienttypedappclientbynetworkparams)
 25 | - [ClientTypedAppClientParams](types_client_manager.md#clienttypedappclientparams)
 26 | - [ClientTypedAppFactoryParams](types_client_manager.md#clienttypedappfactoryparams)
 27 | 
 28 | ## Type Aliases
 29 | 
 30 | ### ClientAppClientByNetworkParams
 31 | 
 32 | Ƭ **ClientAppClientByNetworkParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppClientParams`](../interfaces/types_app_client.AppClientParams.md), ``"algorand"`` \| ``"appId"``\>\>
 33 | 
 34 | Params to get an app client by network from `ClientManager`.
 35 | 
 36 | #### Defined in
 37 | 
 38 | [src/types/client-manager.ts:33](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/client-manager.ts#L33)
 39 | 
 40 | ___
 41 | 
 42 | ### ClientAppClientParams
 43 | 
 44 | Ƭ **ClientAppClientParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppClientParams`](../interfaces/types_app_client.AppClientParams.md), ``"algorand"``\>\>
 45 | 
 46 | Params to get an app client by ID from `ClientManager`.
 47 | 
 48 | #### Defined in
 49 | 
 50 | [src/types/client-manager.ts:30](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/client-manager.ts#L30)
 51 | 
 52 | ___
 53 | 
 54 | ### ClientAppFactoryParams
 55 | 
 56 | Ƭ **ClientAppFactoryParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppFactoryParams`](../interfaces/types_app_factory.AppFactoryParams.md), ``"algorand"``\>\>
 57 | 
 58 | Params to get an app factory from `ClientManager`.
 59 | 
 60 | #### Defined in
 61 | 
 62 | [src/types/client-manager.ts:24](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/client-manager.ts#L24)
 63 | 
 64 | ___
 65 | 
 66 | ### ClientResolveAppClientByCreatorAndNameParams
 67 | 
 68 | Ƭ **ClientResolveAppClientByCreatorAndNameParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`ResolveAppClientByCreatorAndName`](types_app_client.md#resolveappclientbycreatorandname), ``"algorand"``\>\>
 69 | 
 70 | Params to get an app client by creator address and name from `ClientManager`.
 71 | 
 72 | #### Defined in
 73 | 
 74 | [src/types/client-manager.ts:27](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/client-manager.ts#L27)
 75 | 
 76 | ___
 77 | 
 78 | ### ClientTypedAppClientByCreatorAndNameParams
 79 | 
 80 | Ƭ **ClientTypedAppClientByCreatorAndNameParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`ResolveAppClientByCreatorAndName`](types_app_client.md#resolveappclientbycreatorandname), ``"algorand"`` \| ``"appSpec"``\>\>
 81 | 
 82 | Params to get a typed app client by creator address and name from `ClientManager`.
 83 | 
 84 | #### Defined in
 85 | 
 86 | [src/types/client-manager.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/client-manager.ts#L36)
 87 | 
 88 | ___
 89 | 
 90 | ### ClientTypedAppClientByNetworkParams
 91 | 
 92 | Ƭ **ClientTypedAppClientByNetworkParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppClientParams`](../interfaces/types_app_client.AppClientParams.md), ``"algorand"`` \| ``"appSpec"`` \| ``"appId"``\>\>
 93 | 
 94 | Params to get a typed app client by network from `ClientManager`.
 95 | 
 96 | #### Defined in
 97 | 
 98 | [src/types/client-manager.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/client-manager.ts#L42)
 99 | 
100 | ___
101 | 
102 | ### ClientTypedAppClientParams
103 | 
104 | Ƭ **ClientTypedAppClientParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppClientParams`](../interfaces/types_app_client.AppClientParams.md), ``"algorand"`` \| ``"appSpec"``\>\>
105 | 
106 | Params to get a typed app client by ID from `ClientManager`.
107 | 
108 | #### Defined in
109 | 
110 | [src/types/client-manager.ts:39](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/client-manager.ts#L39)
111 | 
112 | ___
113 | 
114 | ### ClientTypedAppFactoryParams
115 | 
116 | Ƭ **ClientTypedAppFactoryParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppFactoryParams`](../interfaces/types_app_factory.AppFactoryParams.md), ``"algorand"`` \| ``"appSpec"``\>\>
117 | 
118 | Params to get a typed app factory from `ClientManager`.
119 | 
120 | #### Defined in
121 | 
122 | [src/types/client-manager.ts:45](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/client-manager.ts#L45)
123 | 
```
Page 19/93FirstPrevNextLast