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

# Directory Structure

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

# Files

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

```markdown
  1 | # Algorand Account Management with Python
  2 | 
  3 | This guide covers various aspects of account management in Algorand using Python, including creating accounts, funding them, managing keys and signatures, working with multisignature accounts, and account rekeying.
  4 | 
  5 | ## Creating Accounts
  6 | 
  7 | There are several ways to create or access Algorand accounts:
  8 | 
  9 | ```python
 10 | from algokit_utils import AlgorandClient
 11 | 
 12 | # Initialize client for LocalNet
 13 | algorand_client = AlgorandClient.default_localnet()
 14 | 
 15 | # Create a random account
 16 | random_account = algorand_client.account.random()
 17 | 
 18 | # Get or create an account from KMD
 19 | kmd_account = algorand_client.account.from_kmd(name="ACCOUNT_NAME")
 20 | 
 21 | # Get or create an account from environment variables
 22 | env_account = algorand_client.account.from_environment(
 23 |     name="MY_ACCOUNT",
 24 |     fund_with=AlgoAmount(algo=10)
 25 | )
 26 | 
 27 | # Create an account from mnemonic
 28 | mnemonic_account = algorand_client.account.from_mnemonic(mnemonic="MNEMONIC_PHRASE")
 29 | ```
 30 | 
 31 | ### KMD Wallet Operations
 32 | 
 33 | ```python
 34 | # Create a new wallet
 35 | algorand_client.client.kmd.create_wallet(name="ACCOUNT_NAME", pswd="password")
 36 | 
 37 | # Rename a wallet
 38 | algorand_client.client.kmd.rename_wallet(
 39 |     id="WALLET_ID",
 40 |     password="new_password",
 41 |     new_name="NEW_ACCOUNT_NAME"
 42 | )
 43 | ```
 44 | 
 45 | ## Funding Accounts
 46 | 
 47 | ### LocalNet Funding
 48 | 
 49 | ```python
 50 | # Get LocalNet dispenser account
 51 | localnet_dispenser = algorand_client.account.localnet_dispenser()
 52 | 
 53 | # Get dispenser account from environment
 54 | dispenser = algorand_client.account.dispenser_from_environment()
 55 | 
 56 | # Send payment from dispenser
 57 | algorand_client.send.payment(
 58 |     PaymentParams(
 59 |         sender=localnet_dispenser.address,
 60 |         receiver=random_account.address,
 61 |         amount=AlgoAmount(algo=10)
 62 |     )
 63 | )
 64 | 
 65 | # Ensure account has minimum balance
 66 | algorand_client.account.ensure_funded(
 67 |     account_to_fund=random_account.address,
 68 |     dispenser_account=localnet_dispenser.address,
 69 |     min_spending_balance=AlgoAmount(algo=10)
 70 | )
 71 | ```
 72 | 
 73 | ### TestNet Funding
 74 | 
 75 | ```python
 76 | # Get TestNet dispenser
 77 | testnet_dispenser = algorand_client.client.get_testnet_dispenser()
 78 | 
 79 | # Fund using TestNet dispenser API
 80 | algorand_client.account.ensure_funded_from_testnet_dispenser_api(
 81 |     account_to_fund=random_account.address,
 82 |     dispenser_client=testnet_dispenser,
 83 |     min_spending_balance=AlgoAmount(algo=10)
 84 | )
 85 | 
 86 | # Direct funding using TestNet dispenser
 87 | testnet_dispenser.fund(address=random_account.address, amount=10, asset_id=0)
 88 | ```
 89 | 
 90 | ## Keys and Signing
 91 | 
 92 | ### Managing Transaction Signers
 93 | 
 94 | ```python
 95 | # Set default signer
 96 | algorand_client.account.set_default_signer(account_a.signer)
 97 | 
 98 | # Register multiple signers
 99 | algorand_client.account.set_signer_from_account(account_a)
100 | algorand_client.account.set_signer_from_account(account_b)
101 | algorand_client.account.set_signer_from_account(account_c)
102 | 
103 | # Get signer for an address
104 | signer = algorand_client.account.get_signer(account_a.address)
105 | ```
106 | 
107 | ### Manual Transaction Signing
108 | 
109 | ```python
110 | # Create unsigned transaction
111 | payment_txn = algorand_client.create_transaction.payment(
112 |     PaymentParams(
113 |         sender=account_a.address,
114 |         receiver=account_b.address,
115 |         amount=AlgoAmount(algo=1),
116 |         note=b"Payment from A to B"
117 |     )
118 | )
119 | 
120 | # Send with custom signer
121 | algorand_client.new_group().add_transaction(
122 |     transaction=payment_txn,
123 |     signer=account_a_signer
124 | ).send()
125 | ```
126 | 
127 | ## Multisignature Accounts
128 | 
129 | Create and use multisig accounts that require multiple signatures:
130 | 
131 | ```python
132 | # Create 2-of-3 multisig account
133 | multisig_account = algorand_client.account.multisig(
134 |     metadata=MultisigMetadata(
135 |         version=1,
136 |         threshold=2,
137 |         addresses=[
138 |             account_a.address,
139 |             account_b.address,
140 |             account_c.address
141 |         ]
142 |     ),
143 |     signing_accounts=[account_a, account_b, account_c]
144 | )
145 | 
146 | # Send from multisig account
147 | algorand_client.send.payment(
148 |     PaymentParams(
149 |         sender=multisig_account.address,
150 |         receiver=account_a.address,
151 |         amount=AlgoAmount(algo=1)
152 |     )
153 | )
154 | ```
155 | 
156 | ## Account Rekeying
157 | 
158 | Rekey an account to use a different address for signing:
159 | 
160 | ```python
161 | # Rekey account_a to be controlled by account_b's private key
162 | algorand_client.account.rekey_account(
163 |     account=account_a.address,
164 |     rekey_to=account_b
165 | )
166 | 
167 | # Send transaction using new signing key
168 | payment_txn = algorand_client.create_transaction.payment(
169 |     PaymentParams(
170 |         sender=account_a.address,
171 |         receiver=account_b.address,
172 |         amount=AlgoAmount(algo=1),
173 |         signer=account_b.signer
174 |     )
175 | )
176 | 
177 | algorand_client.new_group().add_transaction(
178 |     transaction=payment_txn,
179 |     signer=account_b.signer
180 | ).send()
181 | ```
182 | 
183 | ## Best Practices
184 | 
185 | 1. **Account Creation**:
186 |    - Use environment variables for sensitive information
187 |    - Store mnemonics securely
188 |    - Use KMD for development and testing
189 | 
190 | 2. **Account Funding**:
191 |    - Always ensure accounts have sufficient minimum balance
192 |    - Use appropriate funding methods for different networks (LocalNet, TestNet)
193 |    - Handle funding errors gracefully
194 | 
195 | 3. **Transaction Signing**:
196 |    - Set up default signers for convenience
197 |    - Use explicit signers for critical operations
198 |    - Verify transaction parameters before signing
199 | 
200 | 4. **Multisig Accounts**:
201 |    - Choose appropriate threshold values
202 |    - Keep track of all signing accounts
203 |    - Test multisig operations thoroughly
204 | 
205 | 5. **Account Rekeying**:
206 |    - Document rekeying operations
207 |    - Maintain secure backup of original keys
208 |    - Verify rekeying success before proceeding
209 | 
210 | 6. **Security**:
211 |    - Never expose private keys or mnemonics
212 |    - Use secure methods for key storage
213 |    - Implement proper access controls
214 | 
215 | This guide provides a comprehensive overview of account management in Algorand using Python. The examples demonstrate the flexibility and security features available through the Algorand Python SDK and AlgoKit utilities.
216 | 
```

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

```markdown
  1 | ---
  2 | arc: 10
  3 | title: Algorand Wallet Reach Minimum Requirements
  4 | description: Minimum requirements for Reach to function with a given wallet.
  5 | author: DanBurton (@DanBurton)
  6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/52
  7 | status: Deprecated
  8 | type: Standards Track
  9 | category: Interface
 10 | created: 2021-08-09
 11 | ---
 12 | 
 13 | # Algorand Wallet Reach Minimum Requirements
 14 | 
 15 | ## Abstract
 16 | 
 17 | An amalgamation of APIs which comprise the minimum requirements for Reach to be able to function correctly with a given wallet.
 18 | 
 19 | ## Specification
 20 | 
 21 | A group of related functions:
 22 | 
 23 | * `enable` (**REQUIRED**)
 24 | * `enableNetwork` (**OPTIONAL**)
 25 | * `enableAccounts` (**OPTIONAL**)
 26 | * `signAndPostTxns` (**REQUIRED**)
 27 | * `getAlgodv2Client` (**REQUIRED**)
 28 | * `getIndexerClient` (**REQUIRED**)
 29 | * `signTxns` (**OPTIONAL**)
 30 | * `postTxns` (**OPTIONAL**)
 31 | 
 32 | * `enable`: as specified in [ARC-0006](./arc-0006.md#interface-enablefunction).
 33 | * `signAndPostTxns`: as specified in [ARC-0008](./arc-0008.md#interface-signandposttxnsfunction).
 34 | * `getAlgodv2Client` and `getIndexerClient`: as specified in [ARC-0009](./arc-0009.md#specification).
 35 | * `signTxns`: as specified in [ARC-0005](./arc-0005.md#interface-signtxnsfunction) / [ARC-0001](./arc-0001.md#interface-signtxnsfunction).
 36 | * `postTxns`: as specified in [ARC-0007](./arc-0007.md#interface-posttxnsfunction).
 37 | 
 38 | There are additional semantics for using these functions together.
 39 | 
 40 | ### Semantic Requirements
 41 | 
 42 | * `enable` **SHOULD** be called before calling the other functions and upon refresh of the dApp.
 43 | * Calling `enableNetwork` and then `enableAccounts` **MUST** be equivalent to calling `enable`.
 44 | * If used instead of `enable`: `enableNetwork` **SHOULD** be called before `enableAccounts` and `getIndexerClient`. Both `enableNetwork` and `enableAccounts` **SHOULD** be called before the other functions.
 45 | * If `signAndPostTxns`, `getAlgodv2Client`, `getIndexerClient`, `signTxns`, or `postTxns` are called before `enable` (or `enableAccounts`), they **SHOULD** throw an error object with property `code=4202`. (See Error Standards in [ARC-0001](arc-0001.md#error-standards)).
 46 | * `getAlgodv2Client` and `getIndexerClient` **MUST** return connections to the network indicated by the `network` result of `enable`.
 47 | * `signAndPostTxns` **MUST** post transactions to the network indicated by the `network` result of `enable`
 48 | * The result of `getAlgodv2Client` **SHOULD** only be used to query the network. `postTxns` (if available) and `signAndPostTxns` **SHOULD** be used to send transactions to the network. The `Algodv2Client` object **MAY** be modified to throw exceptions if the caller tries to use it to post transactions.
 49 | * `signTxns` and `postTxns` **MAY** or **MAY NOT** be provided. When one is provided, they both **MUST** be provided. In addition, `signTxns` **MAY** display a warning that the transactions are returned to the dApp rather than posted directly to the blockchain.
 50 | 
 51 | ### Additional requirements regarding LogicSigs
 52 | 
 53 | `signAndPostTxns` must also be able to handle logic sigs, and more generally transactions signed by the DApp itself.
 54 | In case of logic sigs, callers are expected to sign the logic sig by themselves, rather than expecting the wallet to do so on their behalf.
 55 | To handle these cases, we adopt and extend the [ARC-0001](./arc-0001.md#interface-wallettransaction) format for `WalletTransaction`s that do not need to be signed:
 56 | 
 57 | ```json
 58 | {
 59 |   "txn": "...",
 60 |   "signers": [],
 61 |   "stxn": "..."
 62 | }
 63 | ```
 64 | 
 65 | * `stxn` is a `SignedTxnStr`, as specified in [ARC-0007](./arc-0007.md#string-specification-signedtxnstr).
 66 | * For production wallets, `stxn` **MUST** be checked to match `txn`, as specified in [ARC-0001](./arc-0001.md#semantic-and-security-requirements).
 67 | 
 68 | `signAndPostTxns` **MAY** reject when none of the transactions need to be signed by the user.
 69 | 
 70 | ## Rationale
 71 | 
 72 | In order for a wallet to be useable by a DApp, it must support features for account discovery, signing and posting transactions, and querying the network.
 73 | 
 74 | To whatever extent possible, the end users of a DApp should be empowered to select their own wallet, accounts, and network to be used with the DApp.
 75 | Furthermore, said users should be able to use their preferred network node connection, without exposing their connection details and secrets (such as endpoint URLs and API tokens) to the DApp.
 76 | 
 77 | The APIs presented in this document and related documents are sufficient to cover the needed functionality, while protecting user choice and remaining compatible with best security practices.
 78 | Most DApps indeed always need to post transactions immediately after signing.
 79 | `signAndPostTxns` allows this goal without revealing the signed transactions to the DApp, which prevents surprises to the user: there is no risk the DApp keeps in memory the transactions and post it later without the user knowing it (either to achieve a malicious goal such as forcing double spending, or just because the DApp has a bug).
 80 | However, there are cases where `signTxns` and `postTxns` need to be used: for example when multiple users need to coordinate to sign an atomic transfer.
 81 | 
 82 | ## Reference Implementation
 83 | 
 84 | ```js
 85 | async function main(wallet) {
 86 | 
 87 |   // Account discovery
 88 |   const enabled = await wallet.enable({genesisID: 'testnet-v1.0'});
 89 |   const from = enabled.accounts[0];
 90 | 
 91 |   // Querying
 92 |   const algodv2 = new algosdk.Algodv2(await wallet.getAlgodv2Client());
 93 |   const suggestedParams = await algodv2.getTransactionParams().do();
 94 |   const txns = makeTxns(from, suggestedParams);
 95 | 
 96 |   // Sign and post
 97 |   const res = await wallet.signAndPost(txns);
 98 |   console.log(res);
 99 | 
100 | };
101 | ```
102 | 
103 | Where `makeTxns` is comparable to what is seen in [ARC-0001](./arc-0001.md#reference-implementation)'s sample code.
104 | 
105 | ## Security Considerations
106 | 
107 | None.
108 | 
109 | ## Copyright
110 | 
111 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
112 | 
```

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

```markdown
  1 | # Box Storage in Algorand Smart Contracts
  2 | 
  3 | Box storage is a feature in Algorand that allows smart contracts to store and manage data in separate "boxes" outside of the application's global and local state. This guide demonstrates how to use box storage in Algorand Python smart contracts.
  4 | 
  5 | ## Box Storage Types
  6 | 
  7 | ```python
  8 | from algopy import (
  9 |     ARC4Contract,
 10 |     Box,
 11 |     BoxMap,
 12 |     BoxRef,
 13 |     Bytes,
 14 |     String,
 15 |     UInt64,
 16 |     arc4,
 17 | )
 18 | 
 19 | # Example of a struct that can be stored in a box
 20 | class UserStruct(arc4.Struct):
 21 |     name: arc4.String
 22 |     id: arc4.UInt64
 23 |     asset: arc4.UInt64
 24 | ```
 25 | 
 26 | ### Initializing Box Storage
 27 | 
 28 | ```python
 29 | class BoxStorage(ARC4Contract):
 30 |     def __init__(self) -> None:
 31 |         # Basic box types
 32 |         self.box_int = Box(UInt64)
 33 |         self.box_dynamic_bytes = Box[arc4.DynamicBytes](arc4.DynamicBytes, key="b")
 34 |         self.box_string = Box(arc4.String, key=b"BOX_C")
 35 |         self.box_bytes = Box(Bytes)
 36 |         
 37 |         # Box map with uint as key and string as value
 38 |         self.box_map = BoxMap(UInt64, String, key_prefix="")
 39 |         
 40 |         # Box reference for direct manipulation
 41 |         self.box_ref = BoxRef()
 42 |         
 43 |         # Box map for storing structs
 44 |         self.box_map_struct = BoxMap(arc4.UInt64, UserStruct, key_prefix="users")
 45 | ```
 46 | 
 47 | ## Basic Box Operations
 48 | 
 49 | ### Getting Values
 50 | 
 51 | ```python
 52 | @arc4.abimethod
 53 | def get_box_example(self) -> tuple[UInt64, Bytes, arc4.String]:
 54 |     return (
 55 |         self.box_int.value,                      # Get integer value
 56 |         self.box_dynamic_bytes.value.native,     # Get bytes value
 57 |         self.box_string.value,                   # Get string value
 58 |     )
 59 | 
 60 | @arc4.abimethod
 61 | def get_box_map_example(self) -> bool:
 62 |     key_1 = UInt64(1)
 63 |     # Get value with default if not found
 64 |     value = self.box_map.get(key_1, default=String("default"))
 65 |     return True
 66 | ```
 67 | 
 68 | ### Setting Values
 69 | 
 70 | ```python
 71 | @arc4.abimethod
 72 | def set_box_example(
 73 |     self,
 74 |     value_int: UInt64,
 75 |     value_dbytes: arc4.DynamicBytes,
 76 |     value_string: arc4.String,
 77 | ) -> None:
 78 |     # Set values in different box types
 79 |     self.box_int.value = value_int
 80 |     self.box_dynamic_bytes.value = value_dbytes.copy()
 81 |     self.box_string.value = value_string
 82 |     self.box_bytes.value = value_dbytes.native
 83 | 
 84 |     # Increment value
 85 |     self.box_int.value += 3
 86 | 
 87 | @arc4.abimethod
 88 | def set_box_map_struct(self, key: arc4.UInt64, value: UserStruct) -> bool:
 89 |     # Store struct in box map
 90 |     self.box_map_struct[key] = value.copy()
 91 |     return True
 92 | ```
 93 | 
 94 | ### Deleting Values
 95 | 
 96 | ```python
 97 | @arc4.abimethod
 98 | def delete_box(self) -> None:
 99 |     # Delete values from boxes
100 |     del self.box_int.value
101 |     del self.box_dynamic_bytes.value
102 |     del self.box_string.value
103 | 
104 |     # Verify deletion by checking default values
105 |     assert self.box_int.get(default=UInt64(42)) == 42
106 |     assert self.box_dynamic_bytes.get(default=arc4.DynamicBytes(b"42")).native == b"42"
107 |     assert self.box_string.get(default=arc4.String("42")) == "42"
108 | 
109 | @arc4.abimethod
110 | def delete_box_map(self, key: UInt64) -> None:
111 |     # Delete value from box map
112 |     del self.box_map[key]
113 | ```
114 | 
115 | ## Advanced Box Operations
116 | 
117 | ### Maybe Operations (Safe Access)
118 | 
119 | ```python
120 | @arc4.abimethod
121 | def maybe_box(self) -> tuple[UInt64, bool]:
122 |     # Get value and existence flag
123 |     box_int_value, box_int_exists = self.box_int.maybe()
124 |     return box_int_value, box_int_exists
125 | 
126 | @arc4.abimethod
127 | def maybe_box_map(self) -> tuple[String, bool]:
128 |     key_1 = UInt64(1)
129 |     # Get value and existence flag from map
130 |     value, exists = self.box_map.maybe(key_1)
131 |     if not exists:
132 |         value = String("")
133 |     return value, exists
134 | ```
135 | 
136 | ### Box References
137 | 
138 | ```python
139 | @arc4.abimethod
140 | def manipulate_box_ref(self) -> None:
141 |     box_ref = BoxRef(key=String("blob"))
142 |     assert box_ref.create(size=32)
143 | 
144 |     # Manipulate data
145 |     sender_bytes = Txn.sender.bytes
146 |     app_address = Global.current_application_address.bytes
147 |     value_3 = Bytes(b"hello")
148 |     
149 |     # Replace and splice operations
150 |     box_ref.replace(0, sender_bytes)
151 |     box_ref.splice(0, 0, app_address)
152 |     box_ref.replace(64, value_3)
153 |     
154 |     # Extract data
155 |     prefix = box_ref.extract(0, 32 * 2 + value_3.length)
156 |     
157 |     # Delete and recreate
158 |     box_ref.delete()
159 |     box_ref.put(sender_bytes + app_address)
160 | ```
161 | 
162 | ### Length Operations
163 | 
164 | ```python
165 | @arc4.abimethod
166 | def box_map_length(self) -> UInt64:
167 |     key_0 = UInt64(0)
168 |     if key_0 not in self.box_map:
169 |         return UInt64(0)
170 |     return self.box_map.length(key_0)
171 | 
172 | @arc4.abimethod
173 | def length_box_ref(self) -> UInt64:
174 |     box_ref = BoxRef(key=String("blob"))
175 |     assert box_ref.create(size=32)
176 |     return box_ref.length
177 | ```
178 | 
179 | ## Best Practices
180 | 
181 | 1. **Memory Management**:
182 |    - Use appropriate box sizes to minimize storage costs
183 |    - Delete unused boxes to free up space
184 |    - Consider using box references for large data manipulations
185 | 
186 | 2. **Data Safety**:
187 |    - Use `maybe()` operations when accessing potentially non-existent values
188 |    - Provide default values when getting box contents
189 |    - Verify box existence before operations
190 | 
191 | 3. **Struct Storage**:
192 |    - Use `copy()` when storing struct values to ensure data integrity
193 |    - Verify struct storage with assertions
194 |    - Use appropriate key prefixes for organization
195 | 
196 | 4. **Box References**:
197 |    - Create boxes with appropriate sizes
198 |    - Use extract and splice operations carefully
199 |    - Clean up unused box references
200 | 
201 | 5. **Performance**:
202 |    - Minimize box operations to reduce costs
203 |    - Use appropriate data types for storage
204 |    - Consider using box maps for related data
205 | 
206 | 6. **Error Handling**:
207 |    - Include assertions for critical operations
208 |    - Handle non-existent boxes gracefully
209 |    - Verify operation success
210 | 
211 | This guide demonstrates the various capabilities of box storage in Algorand smart contracts using Python. Box storage provides a flexible way to manage contract data while maintaining efficiency and organization.
212 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:dapps:smart-contracts:index.md:
--------------------------------------------------------------------------------

```markdown
 1 | title: Introduction
 2 | 
 3 | Algorand Smart Contracts (ASC1) are small programs that serve various functions on the blockchain and operate on layer-1. Smart contracts are separated into two main categories, smart contracts, and smart signatures. These types are also referred to as stateful and stateless contracts respectively. The type of contract that is written will determine when and how the logic of the program is evaluated. See the following sections to understand how each type of contract is used on the Algorand blockchain. Both types of contracts are written in the [Transaction Execution Approval Language (TEAL)](../avm/teal), which is an assembly-like language that is interpreted by the [Algorand Virtual Machine (AVM)](../avm) running within an Algorand node. TEAL programs can be written by hand or by using the Python language with the PyTEAL compiler. 
 4 | 
 5 | 
 6 | !!! warning
 7 |     When writing smart contracts, make sure to follow [TEAL guidelines](../avm/teal/guidelines). This is very important in order to prevent smart contracts from being compromised.
 8 | 
 9 | # Quick start videos
10 | 
11 | If you prefer videos, take a look at this 6 minute guide to learn about Smart Contracts Overview.
12 | 
13 | <iframe width="100%" style="aspect-ratio:16/9" src="https://www.youtube-nocookie.com/embed/_8vLEeJDjlc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
14 | 
15 | # Smart contracts
16 | Smart contracts are contracts that, once deployed, are remotely callable from any node in the Algorand blockchain. Once deployed, the on-chain instantiation of the contract is referred to as an Application and assigned an Application Id. These applications are triggered by a specific type of transaction called an Application Call transaction.  These on-chain applications handle the primary decentralized logic of a dApp. 
17 | 
18 | - Applications can [modify state](./apps/#modifying-state-in-smart-contract) associated with the application (global state) or a per application+account (local state) basis. 
19 | - Applications can [access](./apps/#using-assets-in-smart-contracts) on-chain values, such as account balances, asset configuration parameters, or the latest block time.
20 | - Applications can [execute transactions](./apps/#inner-transactions) as part of the execution of the logic. One type of transaction they can perform, as of AVM 1.1, is an Application Call transaction which allows one application to call another.  This ability to call other applications enables composability between applications. 
21 | - Applications have an associated [Application Account](./apps/#using-a-smart-contract-as-an-escrow) that can hold Algos or ASAs balances and can be used as on-chain escrow accounts. 
22 | 
23 | To provide a standard method for exposing an API and encoding/decoding data types from application call transactions, the [ABI](/docs/get-details/dapps/smart-contracts/ABI/) should be used. 
24 | 
25 | For more information on smart contracts, see the [smart contract documentation](./apps). For more information on building smart contracts in PyTeal see the [build with python documentation](/docs/get-details/dapps/writing-contracts/pyteal).
26 | For more information on using smart contracts with the SDKs see the [Interacting with smart contracts documentation](./frontend/smartsigs.md).
27 | For more information on debugging a smart contract, see the [debugging](./debugging.md) page.
28 | 
29 | # Smart signatures
30 | Smart signatures contain logic that is used to sign transactions, primarily for signature delegation. The logic of the smart signature is submitted with a transaction. While the logic in the smart signature is stored on the chain as part of resolving the transaction, the logic is not remotely callable. Any new transaction that relies on the same smart signature would resubmit the logic. When the logic is submitted to a node the AVM evaluates the logic, where it either fails or succeeds. If a smart signature’s logic fails when executed by the AVM, the associated transaction will not be executed. 
31 | 
32 | Smart signatures can be used in two different modes. When compiled smart signatures produce an Algorand account that functions similar to any other account on the blockchain. These accounts can hold Algos or assets. These funds are only allowed to leave the account if a transaction occurs from the account that successfully executes the logic within the smart signature. This is similar in functionality to a smart contract escrow, but the logic must be submitted for every transaction from the account. Smart signatures can also also be used to delegate some portion of authority to another account. In this case, an account can sign the smart signature which can then be used at a later time to sign a transaction from the original signer’s account. This is referred to as account delegation. See the [modes of use documentation](./smartsigs/modes.md) for more details on these two types of smart signatures.   
33 | 
34 | Once a transaction that is signed with a smart signature, is submitted it is evaluated by an Algorand node using the Algorand Virtual Machine. These contracts only have access to a few global variables, some temporary scratch space, and the properties of the transaction(s) they are submitted with. 
35 | 
36 | For more information on smart signatures, see the [smart signature documentation](./smartsigs). For more information on building contracts in PyTeal see the [build with Python documentation](/docs/get-details/dapps/writing-contracts/pyteal).
37 | For more information on using smart signatures with the SDKs see the [Interacting with smart signature documentation](./frontend/smartsigs).
38 | For more information on debugging a smart contract, see the [debugging](./debugging.md) page.
39 | 
40 | 
41 | For more information on the [AVM](../avm) or the [TEAL language](../avm/teal) see the developer documentation.
42 | 
```

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

```markdown
  1 | [@algorandfoundation/algokit-utils](../README.md) / types/app-factory
  2 | 
  3 | # Module: types/app-factory
  4 | 
  5 | ## Table of contents
  6 | 
  7 | ### Classes
  8 | 
  9 | - [AppFactory](../classes/types_app_factory.AppFactory.md)
 10 | 
 11 | ### Interfaces
 12 | 
 13 | - [AppFactoryParams](../interfaces/types_app_factory.AppFactoryParams.md)
 14 | 
 15 | ### Type Aliases
 16 | 
 17 | - [AppFactoryAppClientParams](types_app_factory.md#appfactoryappclientparams)
 18 | - [AppFactoryCreateMethodCallParams](types_app_factory.md#appfactorycreatemethodcallparams)
 19 | - [AppFactoryCreateParams](types_app_factory.md#appfactorycreateparams)
 20 | - [AppFactoryDeployParams](types_app_factory.md#appfactorydeployparams)
 21 | - [AppFactoryResolveAppClientByCreatorAndNameParams](types_app_factory.md#appfactoryresolveappclientbycreatorandnameparams)
 22 | - [CreateOnComplete](types_app_factory.md#createoncomplete)
 23 | - [CreateSchema](types_app_factory.md#createschema)
 24 | 
 25 | ## Type Aliases
 26 | 
 27 | ### AppFactoryAppClientParams
 28 | 
 29 | Ƭ **AppFactoryAppClientParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppClientParams`](../interfaces/types_app_client.AppClientParams.md), ``"algorand"`` \| ``"appSpec"``\>\>
 30 | 
 31 | Params to get an app client by ID from an app factory.
 32 | 
 33 | #### Defined in
 34 | 
 35 | [src/types/app-factory.ts:134](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-factory.ts#L134)
 36 | 
 37 | ___
 38 | 
 39 | ### AppFactoryCreateMethodCallParams
 40 | 
 41 | Ƭ **AppFactoryCreateMethodCallParams**: [`Expand`](types_expand.md#expand)\<[`AppClientMethodCallParams`](types_app_client.md#appclientmethodcallparams) & [`AppClientCompilationParams`](../interfaces/types_app_client.AppClientCompilationParams.md) & [`CreateOnComplete`](types_app_factory.md#createoncomplete) & [`CreateSchema`](types_app_factory.md#createschema)\>
 42 | 
 43 | Params to specify a create method call for an app
 44 | 
 45 | #### Defined in
 46 | 
 47 | [src/types/app-factory.ts:129](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-factory.ts#L129)
 48 | 
 49 | ___
 50 | 
 51 | ### AppFactoryCreateParams
 52 | 
 53 | Ƭ **AppFactoryCreateParams**: [`Expand`](types_expand.md#expand)\<[`AppClientBareCallParams`](types_app_client.md#appclientbarecallparams) & [`AppClientCompilationParams`](../interfaces/types_app_client.AppClientCompilationParams.md) & [`CreateOnComplete`](types_app_factory.md#createoncomplete) & [`CreateSchema`](types_app_factory.md#createschema)\>
 54 | 
 55 | Params to specify a bare (raw) create call for an app
 56 | 
 57 | #### Defined in
 58 | 
 59 | [src/types/app-factory.ts:126](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-factory.ts#L126)
 60 | 
 61 | ___
 62 | 
 63 | ### AppFactoryDeployParams
 64 | 
 65 | Ƭ **AppFactoryDeployParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`AppDeployParams`](types_app_deployer.md#appdeployparams), ``"createParams"`` \| ``"updateParams"`` \| ``"deleteParams"`` \| ``"metadata"``\> & \{ `appName?`: `string` ; `createParams?`: [`Expand`](types_expand.md#expand)\<[`AppClientMethodCallParams`](types_app_client.md#appclientmethodcallparams) & [`CreateOnComplete`](types_app_factory.md#createoncomplete) & [`CreateSchema`](types_app_factory.md#createschema)\> \| [`Expand`](types_expand.md#expand)\<[`AppClientBareCallParams`](types_app_client.md#appclientbarecallparams) & [`CreateOnComplete`](types_app_factory.md#createoncomplete) & [`CreateSchema`](types_app_factory.md#createschema)\> ; `deletable?`: `boolean` ; `deleteParams?`: [`AppClientMethodCallParams`](types_app_client.md#appclientmethodcallparams) \| [`AppClientBareCallParams`](types_app_client.md#appclientbarecallparams) ; `updatable?`: `boolean` ; `updateParams?`: [`AppClientMethodCallParams`](types_app_client.md#appclientmethodcallparams) \| [`AppClientBareCallParams`](types_app_client.md#appclientbarecallparams)  }\>
 66 | 
 67 | Parameters to define a deployment for an `AppFactory`
 68 | 
 69 | #### Defined in
 70 | 
 71 | [src/types/app-factory.ts:140](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-factory.ts#L140)
 72 | 
 73 | ___
 74 | 
 75 | ### AppFactoryResolveAppClientByCreatorAndNameParams
 76 | 
 77 | Ƭ **AppFactoryResolveAppClientByCreatorAndNameParams**: [`Expand`](types_expand.md#expand)\<`Omit`\<[`ResolveAppClientByCreatorAndName`](types_app_client.md#resolveappclientbycreatorandname), ``"algorand"`` \| ``"appSpec"``\>\>
 78 | 
 79 | Params to get an app client by creator address and name from an app factory.
 80 | 
 81 | #### Defined in
 82 | 
 83 | [src/types/app-factory.ts:137](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-factory.ts#L137)
 84 | 
 85 | ___
 86 | 
 87 | ### CreateOnComplete
 88 | 
 89 | Ƭ **CreateOnComplete**: `Object`
 90 | 
 91 | onComplete parameter for a create app call
 92 | 
 93 | #### Type declaration
 94 | 
 95 | | Name | Type |
 96 | | :------ | :------ |
 97 | | `onComplete?` | `Exclude`\<`OnApplicationComplete`, `OnApplicationComplete.ClearStateOC`\> |
 98 | 
 99 | #### Defined in
100 | 
101 | [src/types/app-factory.ts:102](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-factory.ts#L102)
102 | 
103 | ___
104 | 
105 | ### CreateSchema
106 | 
107 | Ƭ **CreateSchema**: `Object`
108 | 
109 | Specifies a schema used for creating an app
110 | 
111 | #### Type declaration
112 | 
113 | | Name | Type | Description |
114 | | :------ | :------ | :------ |
115 | | `extraProgramPages?` | `number` | Number of extra pages required for the programs. Defaults to the number needed for the programs in this call if not specified. This is immutable once the app is created. |
116 | | `schema?` | \{ `globalByteSlices`: `number` ; `globalInts`: `number` ; `localByteSlices`: `number` ; `localInts`: `number`  } | The state schema for the app. This is immutable once the app is created. By default uses the ARC32/ARC-56 spec. |
117 | | `schema.globalByteSlices` | `number` | The number of byte slices saved in global state. |
118 | | `schema.globalInts` | `number` | The number of integers saved in global state. |
119 | | `schema.localByteSlices` | `number` | The number of byte slices saved in local state. |
120 | | `schema.localInts` | `number` | The number of integers saved in local state. |
121 | 
122 | #### Defined in
123 | 
124 | [src/types/app-factory.ts:107](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app-factory.ts#L107)
125 | 
```

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

```markdown
  1 | title: Algorand Developer Docs
  2 | 
  3 | <div class="docs-homepage__challenge-box">
  4 |     <div class="challenge-overview-icon"></div>
  5 |     <div>
  6 |         <p class="button--large docs-homepage__challenge-box__title">Complete Challenges and Earn Badges</p>
  7 |         <p class="typography--regular-body docs-homepage__challenge-box__description">Become a master Algorand Developer by completing coding challenges and getting rewarded with on-chain Badges along the way!</p>
  8 |     </div>
  9 |     <a href="/challenges/" class="button--small button--primary docs-homepage__challenge-box__link">View Challenges</a>
 10 | </div>
 11 | 
 12 | # Top-level sections
 13 | <ul class="docs-homepage__card-list">
 14 |     <li class="docs-homepage__card-list-item">
 15 |         <a class="docs-homepage__card" href="./get-started/basics/what_is_blockchain/">
 16 |             <div class="docs-homepage__card__icon-container docs-homepage__card__icon-container--purple">
 17 |                 <span class="create-smart-contract-overview-icon"></span>
 18 |             </div>
 19 |             <p class="docs-homepage__card__title text-gray--main typography--large-button">Get started</p>
 20 |             <p class="typography--regular-body docs-homepage__card__description">Start here to learn the basics</p>
 21 |         </a>
 22 |     </li>
 23 |     <li class="docs-homepage__card-list-item">
 24 |         <a class="docs-homepage__card" href="./get-details/">
 25 |             <div class="docs-homepage__card__icon-container docs-homepage__card__icon-container--purple">
 26 |                 <span class="stateless-smart-contracts-icon"></span>
 27 |             </div>
 28 |             <p class="docs-homepage__card__title text-gray--main typography--large-button">Get details</p>
 29 |             <p class="typography--regular-body docs-homepage__card__description">In-depth guides and explanations of all features</p>
 30 |         </a>
 31 |     </li>
 32 |     <li class="docs-homepage__card-list-item">
 33 |         <a class="docs-homepage__card" href="./run-a-node/setup/types/">
 34 |             <div class="docs-homepage__card__icon-container docs-homepage__card__icon-container--purple">
 35 |                 <span class="stateful-smart-contracts-icon"></span>
 36 |             </div>
 37 |             <p class="docs-homepage__card__title text-gray--main typography--large-button">Run a node</p>
 38 |             <p class="typography--regular-body docs-homepage__card__description">Setup a node and participate in consensus</p>
 39 |         </a>
 40 |     </li>
 41 | </ul>
 42 | 
 43 | # Spotlight
 44 | 
 45 | <ul class="docs-homepage__card-list">
 46 |     <li class="docs-homepage__card-list-item">
 47 |         <a class="docs-homepage__card" href="./get-details/dapps/avm/">
 48 |             <div class="docs-homepage__card__icon-container docs-homepage__card__icon-container--turquoise">
 49 |                 <span class="payment-with-algos-icon"></span>
 50 |             </div>
 51 |             <p class="docs-homepage__card__title text-gray--main typography--large-button">The AVM</p>
 52 |             <p class="typography--regular-body docs-homepage__card__description">The Algorand Virtual Machine</p>
 53 |         </a>
 54 |     </li>
 55 |     <li class="docs-homepage__card-list-item">
 56 |         <a class="docs-homepage__card" href="./get-started/algokit/">
 57 |             <div class="docs-homepage__card__icon-container docs-homepage__card__icon-container--turquoise">
 58 |                 <span class="payment-with-algos-icon"></span>
 59 |             </div>
 60 |             <p class="docs-homepage__card__title text-gray--main typography--large-button">AlgoKit</p>
 61 |             <p class="typography--regular-body docs-homepage__card__description">Spin up a dev environment and start writing contracts quickly </p>
 62 |         </a>
 63 |     </li>
 64 |     <li class="docs-homepage__card-list-item">
 65 |         <a class="docs-homepage__card" href="./get-details/dapps/writing-contracts/beaker/">
 66 |             <div class="docs-homepage__card__icon-container docs-homepage__card__icon-container--turquoise">
 67 |                 <span class="payment-with-algos-icon"></span>
 68 |             </div>
 69 |             <p class="docs-homepage__card__title text-gray--main typography--large-button">Beaker</p>
 70 |             <p class="typography--regular-body docs-homepage__card__description">Write smart contracts with the Beaker framework</p>
 71 |         </a>
 72 |     </li>
 73 |         <li class="docs-homepage__card-list-item">
 74 |         <a class="docs-homepage__card" href="./get-details/accounts/rekey/">
 75 |             <div class="docs-homepage__card__icon-container docs-homepage__card__icon-container--turquoise">
 76 |                 <span class="payment-with-algos-icon"></span>
 77 |             </div>
 78 |             <p class="docs-homepage__card__title text-gray--main typography--large-button">Rekeying</p>
 79 |             <p class="typography--regular-body docs-homepage__card__description">Change the spending key for any account</p>
 80 |         </a>
 81 |     </li>
 82 |     <li class="docs-homepage__card-list-item">
 83 |         <a class="docs-homepage__card" href="./get-details/asa">
 84 |             <div class="docs-homepage__card__icon-container docs-homepage__card__icon-container--turquoise">
 85 |                 <span class="payment-with-algos-icon"></span>
 86 |             </div>
 87 |             <p class="docs-homepage__card__title text-gray--main typography--large-button">ASAs</p>
 88 |             <p class="typography--regular-body docs-homepage__card__description">Tokenize FTs, NFTs, and more with a built-in standard</p>
 89 |         </a>
 90 |     </li>
 91 |     <li class="docs-homepage__card-list-item">
 92 |         <a class="docs-homepage__card" href="./get-details/atomic_transfers/">
 93 |             <div class="docs-homepage__card__icon-container docs-homepage__card__icon-container--turquoise">
 94 |                 <span class="payment-with-algos-icon"></span>
 95 |             </div>
 96 |             <p class="docs-homepage__card__title text-gray--main typography--large-button">Atomic Transfers</p>
 97 |             <p class="typography--regular-body docs-homepage__card__description">Group up to 16 transactions that will either all succeed or all fail</p>
 98 |         </a>
 99 |     </li>
100 | </ul>
101 | 
```

--------------------------------------------------------------------------------
/packages/client/src/LocalWallet.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import algosdk, { Transaction } from 'algosdk';
  2 | 
  3 | export class LocalWallet {
  4 |   private fsPromises: typeof import('fs/promises') | null = null;
  5 |   private path: typeof import('path') | null = null;
  6 |   private connectedAddress: string | null = null;
  7 |   private isBrowser: boolean;
  8 | 
  9 |   constructor() {
 10 |     this.isBrowser = typeof window !== 'undefined';
 11 |   }
 12 | 
 13 |   private async initNodeModules(): Promise<void> {
 14 |     if (!this.isBrowser && !this.fsPromises) {
 15 |       this.fsPromises = await import('fs/promises');
 16 |       this.path = await import('path');
 17 |     }
 18 |   }
 19 | 
 20 |   private async listStoredAccounts(): Promise<string[]> {
 21 |     if (this.isBrowser) {
 22 |       try {
 23 |         const creds = await navigator.credentials.get({
 24 |           password: true,
 25 |           mediation: 'optional'
 26 |         } as CredentialRequestOptions) as { id: string; password: string }[] | null;
 27 |         
 28 |         return creds ? creds.map(cred => cred.id) : [];
 29 |       } catch {
 30 |         return [];
 31 |       }
 32 |     } else {
 33 |       try {
 34 |         await this.initNodeModules();
 35 |         const mnemonicPath = this.path!.join(process.cwd(), '.mnemonic');
 36 |         const files = await this.fsPromises!.readdir(mnemonicPath);
 37 |         return files.map((file: string) => file.replace('.mnemonic', ''));
 38 |       } catch {
 39 |         return [];
 40 |       }
 41 |     }
 42 |   }
 43 | 
 44 |   private async storeMnemonic(address: string, mnemonic: string): Promise<void> {
 45 |     if (this.isBrowser) {
 46 |       // Store mnemonic using PasswordCredential
 47 |       const credInit = {
 48 |         id: address,
 49 |         name: `Algorand Account ${address}`,
 50 |         origin: window.location.origin,
 51 |         password: mnemonic
 52 |       };
 53 |       await navigator.credentials.create({
 54 |         password: credInit
 55 |       } as CredentialCreationOptions);
 56 |     } else {
 57 |       // Use filesystem in non-browser environment
 58 |       await this.initNodeModules();
 59 |       const mnemonicPath = this.path!.join(process.cwd(), '.mnemonic');
 60 |       await this.fsPromises!.mkdir(mnemonicPath, { recursive: true });
 61 |       await this.fsPromises!.writeFile(
 62 |         this.path!.join(mnemonicPath, `${address}.mnemonic`),
 63 |         mnemonic,
 64 |         { mode: 0o600 }
 65 |       );
 66 |     }
 67 |   }
 68 | 
 69 |   private async retrieveMnemonic(address: string): Promise<string | null> {
 70 |     if (this.isBrowser) {
 71 |       try {
 72 |         // Retrieve mnemonic using PasswordCredential
 73 |         const cred = await navigator.credentials.get({
 74 |           password: true
 75 |         } as CredentialRequestOptions) as { id: string; password: string } | null;
 76 |         
 77 |         if (cred && cred.id === address) {
 78 |           return cred.password;
 79 |         }
 80 |         return null;
 81 |       } catch {
 82 |         return null;
 83 |       }
 84 |     } else {
 85 |       try {
 86 |         await this.initNodeModules();
 87 |         const mnemonicPath = this.path!.join(process.cwd(), '.mnemonic', `${address}.mnemonic`);
 88 |         const mnemonic = await this.fsPromises!.readFile(mnemonicPath, 'utf8');
 89 |         return mnemonic;
 90 |       } catch {
 91 |         return null;
 92 |       }
 93 |     }
 94 |   }
 95 | 
 96 |   async connect(): Promise<string[]> {
 97 |     try {
 98 |       // Check for existing accounts first
 99 |       const existingAccounts = await this.listStoredAccounts();
100 |       if (existingAccounts.length > 0) {
101 |         this.connectedAddress = existingAccounts[0];
102 |         return [this.connectedAddress];
103 |       }
104 | 
105 |       // Create new account if none exists
106 |       const account = algosdk.generateAccount();
107 |       const mnemonic = algosdk.secretKeyToMnemonic(account.sk);
108 |       
109 |       await this.storeMnemonic(account.addr, mnemonic);
110 |       this.connectedAddress = account.addr;
111 |       return [account.addr];
112 |     } catch (error) {
113 |       throw new Error(`Failed to connect to LocalWallet: ${error instanceof Error ? error.message : String(error)}`);
114 |     }
115 |   }
116 | 
117 |   async reconnectSession(): Promise<string[]> {
118 |     try {
119 |       const accounts = await this.listStoredAccounts();
120 |       if (accounts.length === 0) {
121 |         throw new Error('No local accounts found. Call connect() first.');
122 |       }
123 |       this.connectedAddress = accounts[0];
124 |       return [this.connectedAddress];
125 |     } catch (error) {
126 |       throw new Error(`Failed to reconnect session: ${error instanceof Error ? error.message : String(error)}`);
127 |     }
128 |   }
129 | 
130 |   async disconnect(): Promise<void> {
131 |     this.connectedAddress = null;
132 |   }
133 | 
134 |   async makeTransactionSigner(): Promise<(txnGroup: Transaction[], indexesToSign: number[]) => Promise<Uint8Array[]>> {
135 |     if (!this.connectedAddress) {
136 |       throw new Error('No local account exists. Call connect() first.');
137 |     }
138 | 
139 |     try {
140 |       const mnemonic = await this.retrieveMnemonic(this.connectedAddress);
141 |       if (!mnemonic) {
142 |         throw new Error('Failed to retrieve account mnemonic');
143 |       }
144 | 
145 |       const account = algosdk.mnemonicToSecretKey(mnemonic);
146 |       return algosdk.makeBasicAccountTransactionSigner(account);
147 |     } catch (error) {
148 |       throw new Error(`Failed to create transaction signer: ${error instanceof Error ? error.message : String(error)}`);
149 |     }
150 |   }
151 | 
152 |   async signTransactions(
153 |     transactions: { txn: Transaction; message?: string }[][]
154 |   ): Promise<Uint8Array[][]> {
155 |     if (!this.connectedAddress) {
156 |       throw new Error('No local account exists. Call connect() first.');
157 |     }
158 | 
159 |     try {
160 |       const mnemonic = await this.retrieveMnemonic(this.connectedAddress);
161 |       if (!mnemonic) {
162 |         throw new Error('Failed to retrieve account mnemonic');
163 |       }
164 | 
165 |       const account = algosdk.mnemonicToSecretKey(mnemonic);
166 |       
167 |       return Promise.all(transactions.map(async (group) => {
168 |         return group.map(({ txn }) => {
169 |           const signedTxn = algosdk.signTransaction(txn, account.sk);
170 |           return signedTxn.blob;
171 |         });
172 |       }));
173 |     } catch (error) {
174 |       throw new Error(`Failed to sign transactions: ${error instanceof Error ? error.message : String(error)}`);
175 |     }
176 |   }
177 | 
178 |   // Backward compatibility
179 |   async signTransaction(
180 |     transactions: { txn: Transaction; message?: string }[]
181 |   ): Promise<Uint8Array[]> {
182 |     const results = await this.signTransactions([transactions]);
183 |     return results[0];
184 |   }
185 | }
186 | 
```

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

```markdown
  1 | # AlgoKit Project Bootstrap
  2 | 
  3 | The AlgoKit Project Bootstrap feature allows you to bootstrap different project dependencies by looking up specific files in your current directory and immediate sub directories by convention.
  4 | 
  5 | This is useful to allow for expedited initial setup for each developer e.g. when they clone a repository for the first time. It's also useful to provide a quick getting started experience when initialising a new project via [AlgoKit Init](./init.md) and meeting our goal of "nothing to debugging code in 5 minutes".
  6 | 
  7 | It can bootstrap one or all of the following (with other options potentially being added in the future):
  8 | 
  9 | - Python Poetry projects - Installs Poetry via pipx if its not present and then runs `poetry install`
 10 | - Node.js project - Checks if npm is installed and runs `npm install`
 11 | - dotenv (.env) file - Checks for `.env.template` files, copies them to `.env` (which should be in `.gitignore` so developers can safely make local specific changes) and prompts for any blank values (so the developer has an easy chance to fill in their initial values where there isn't a clear default).
 12 | 
 13 | > **Note**: Invoking bootstrap from `algokit bootstrap` is not recommended. Please prefer using `algokit project bootstrap` instead.
 14 | 
 15 | ## Usage
 16 | 
 17 | Available commands and possible usage as follows:
 18 | 
 19 | ```
 20 | $ ~ algokit project bootstrap
 21 | Usage: algokit project bootstrap [OPTIONS] COMMAND [ARGS]...
 22 | 
 23 | Options:
 24 |   -h, --help  Show this message and exit.
 25 | 
 26 | Commands:
 27 |   all     Bootstrap all aspects of the current directory and immediate sub directories by convention.
 28 |   env     Bootstrap .env file in the current working directory.
 29 |   npm     Bootstrap Node.js project in the current working directory.
 30 |   poetry  Bootstrap Python Poetry and install in the current working directory.
 31 | ```
 32 | 
 33 | ## Functionality
 34 | 
 35 | ### Bootstrap .env file
 36 | 
 37 | The command `algokit project bootstrap env` runs two main tasks in the current directory:
 38 | 
 39 | - Searching for `.env.template` file in the current directory and use it as template to create a new `.env` file in the same directory.
 40 | - Prompting the user to enter a value for any empty token values in the `env.` including printing the comments above that empty token
 41 | 
 42 | For instance, a sample `.env.template` file as follows:
 43 | 
 44 | ```
 45 | SERVER_URL=https://myserver.com
 46 | # This is a mandatory field to run the server, please enter a value
 47 | # For example: 5000
 48 | SERVER_PORT=
 49 | ```
 50 | 
 51 | Running the `algokit project bootstrap env` command while the above `.env.template` file in the current directory will result in the following:
 52 | 
 53 | ```
 54 | $ ~ algokit project bootstrap env
 55 | Copying /Users/me/my-project/.env.template to /Users/me/my-project/.env and prompting for empty values
 56 | # This is a mandatory field to run the server, please enter a value value
 57 | # For example: 5000
 58 | 
 59 | ? Please provide a value for SERVER_PORT:
 60 | ```
 61 | 
 62 | And when the user enters a value for `SERVER_PORT`, a new `.env` file will be created as follows (e.g. if they entered `4000` as the value):
 63 | 
 64 | ```
 65 | SERVER_URL=https://myserver.com
 66 | # This is a mandatory field to run the server, please enter a value
 67 | # For example: 5000
 68 | SERVER_PORT=4000
 69 | ```
 70 | 
 71 | ### Bootstrap Node.js project
 72 | 
 73 | The command `algokit project bootstrap npm` installs Node.js project dependencies if there is a `package.json` file in the current directory by running `npm install` command to install all node modules specified in that file. If you don't have npm available it will show a clear error message and resolution instructions.
 74 | 
 75 | Here is an example outcome of running `algokit project bootstrap npm` command:
 76 | 
 77 | ```
 78 | $ ~ algokit project bootstrap npm
 79 | Installing npm dependencies
 80 | npm:
 81 | npm: added 17 packages, and audited 18 packages in 3s
 82 | npm:
 83 | npm: 2 packages are looking for funding
 84 | npm: run `npm fund` for details
 85 | npm:
 86 | npm: found 0 vulnerabilities
 87 | ```
 88 | 
 89 | ### Bootstrap Python poetry project
 90 | 
 91 | The command `algokit project bootstrap poetry` does two main actions:
 92 | 
 93 | - Checking for Poetry version by running `poetry --version` and upgrades it if required
 94 | - Installing Python dependencies and setting up Python virtual environment via Poetry in the current directory by running `poetry install`.
 95 | 
 96 | Here is an example of running `algokit project bootstrap poetry` command:
 97 | 
 98 | ```
 99 | $ ~ algokit project bootstrap poetry
100 | Installing Python dependencies and setting up Python virtual environment via Poetry
101 | poetry:
102 | poetry: Installing dependencies from lock file
103 | poetry:
104 | poetry: Package operations: 1 installs, 1 update, 0 removals
105 | poetry:
106 | poetry: • Installing pytz (2022.7)
107 | poetry: • Updating copier (7.0.1 -> 7.1.0a0)
108 | poetry:
109 | poetry: Installing the current project: algokit (0.1.0)
110 | ```
111 | 
112 | ### Bootstrap all
113 | 
114 | Execute `algokit project bootstrap all` to initiate `algokit project bootstrap env`, `algokit project bootstrap npm`, and `algokit project bootstrap poetry` commands within the current directory and all its immediate sub-directories. This comprehensive command is automatically triggered following the initialization of a new project through the [AlgoKit Init](./init.md) command.
115 | 
116 | #### Filtering Options
117 | 
118 | The `algokit project bootstrap all` command includes flags for more granular control over the bootstrapping process within [AlgoKit workspaces](../init.md#workspaces):
119 | 
120 | - `--project-name`: This flag allows you to specify one or more project names to bootstrap. Only projects matching the provided names will be bootstrapped. This is particularly useful in monorepos or when working with multiple projects in the same directory structure.
121 | 
122 | - `--type`: Use this flag to limit the bootstrapping process to projects of a specific type (e.g., `frontend`, `backend`, `contract`). This option streamlines the setup process by focusing on relevant project types, reducing the overall bootstrapping time.
123 | 
124 | These new flags enhance the flexibility and efficiency of the bootstrapping process, enabling developers to tailor the setup according to project-specific needs.
125 | 
126 | ## Further Reading
127 | 
128 | To learn more about the `algokit project bootstrap` command, please refer to [bootstrap](../../cli/index.md#bootstrap) in the AlgoKit CLI reference documentation.
129 | 
```

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

```markdown
 1 | ---
 2 | arc: 48
 3 | title: Targeted DeFi Rewards
 4 | description: Targeted DeFi Rewards, Terms and Conditions
 5 | author: Stéphane BARROSO (@SudoWeezy)
 6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/227
 7 | status: Deprecated
 8 | type: Informational
 9 | created: 2023-07-19
10 | ---
11 | 
12 | ## Abstract
13 | The Targeted DeFi Rewards is a temporary incentive program that distributes Algo to be deployed in targeted activities to attract new DeFi users from within and outside the ecosystem.
14 | The goal is to give DeFi projects more flexibility in how these rewards are structured and distributed among their user base, targeting rapid growth, deeper DEX liquidity, and incentives for users who come to Algorand in the middle of a governance period.
15 | 
16 | ## Specification
17 | 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" target=_blank>RFC-2119</a>.
18 | 
19 | ### Eligibility Criteria
20 | 
21 | To be eligible to apply to this program, projects must abide by the <a href="https://www.algorand.foundation/disclaimers">Disclaimers</a> (in particular the “Excluded Jurisdictions” section) and be willing to enter into a binding contract in the form of the template provided by the Algorand Foundation.
22 | 
23 | > The Algorand Foundation is temporarily allowing US-based entities to apply for this program. Approved projects will have their rewards swapped to USDCa on the day of the payment. This exception will be reviewed periodically.
24 | 
25 | Projects must have at least 500K Algo equivalent in TVL of white-listed assets, at the time of the quarterly snapshot block, which happens on the 15th day of the last month of each calendar quarter. All related wallet addresses will be provided in advance for peer scrutiny.
26 | 
27 | The DeFi Advisory Committee will review applications to verify each TVL claim, thus ensuring that claims are valid prior to application approval.
28 | 
29 | For AMMs we will leverage the Eligible Liquidity Pool list that is currently adopted to allow the governors commitment of LP tokens in the DeFi Rewards program, with extension to the assets defined below.
30 | 
31 | For Lending/Borrowing protocols, each project will provide a list of their assets and their holding wallet address(es).
32 | 
33 | For Bridges, each project will provide a list of the bridged assets and their holding wallet address(es).
34 | 
35 | ### Assets Selection
36 | 
37 | The metrics used to select eligible assets to be used for Eligibility TVL Calculation (as per Eligibility Criteria above) were chosen to ensure that the selected tokens have a strong reputation, are difficult to manipulate, and are valuable to the ecosystem. This reputation is built on a combination of factors, including Total Value Locked (TVL), Market Cap, and listings.
38 | 
39 | >Assets are expected to meet at least two of the three criteria below to be included in the white-list.
40 | 
41 | |Criteria||
42 | |:-|-:|
43 | |TVL|The total value locked in different Algorand protocols plays a key role. It's a good indicator of the token's popularity. Minimum TVL requirement: $100K across all the protocols.|
44 | |Market Cap|Market cap is a measure of a crypto token’s total circulating supply multiplied by its current market price. This parameter can be used to consider the positioning of the tokens on the entire crypto market. Minimum Market Cap requirement: USD 1MM.|
45 | |Listing|Tokens listed on multiple stable and respected exchanges are often seen as more established and trustworthy. This can also contribute to increased demand for the token and further the growth of its reputation within the ecosystem.|
46 | 
47 | The following assets are qualified and meet the above criteria:
48 | - ALGO
49 | - gALGO - ASA ID 793124631
50 | - USDC - ASA ID 31566704
51 | - USDT - ASA ID 312769
52 | - goBTC - ASA ID 386192725
53 | - goETH - ASA ID 386195940
54 | - PLANETS - ASA ID 27165954
55 | - OPUL - ASA ID 287867876
56 | - VESTIGE - ASA ID 700965019
57 | - CHIPS - ASA ID 388592191
58 | - DEFLY - ASA ID 470842789
59 | - goUSD - ASA 672913181
60 | - WBTC - ASA 1058926737
61 | - WETH - ASA 887406851
62 | - GOLD$ - ASA 246516580
63 | - SILVER$ - ASA 246519683
64 | - PEPE - ASA 1096015467
65 | - COOP - ASA 796425061
66 | - GORA - ASA 1138500612
67 | 
68 | > Applications for the above list can be submitted at any time <a href="https://forms.gle/kpEpZ8sih69M5xa39">using this form</a>. Cut off for the applications review is the 7th day of the last month of each calendar quarter, or one week before the quarterly snapshot date.
69 | 
70 | ### Rewards Distribution
71 | 
72 | Projects will receive 11250 Algo for each 500K Algo TVL as defined above, rounded down. In the event that the available Algo are not sufficient for all the projects, Algo rewards will be distributed to each protocol based on their weighted contribution of TVL to Algorand DeFi.
73 | 
74 | Rewards per project are capped at 25% of the total rewards distributed under this program for that period.  In the event of partial distribution of the allocated 7.5MM, the remaining funds will be distributed as regular DeFi governance rewards. For Governance Period 8, the AMM TVL count has doubled, when compared to lending/borrow and bridge projects, in recognition of their strategic role in providing liquidity for the ecosystem. This modification was approved by the DeFi Committee.
75 | 
76 | Rewards under this program will be distributed to projects within 4 weeks of the scheduled start date of the new governance period and the project(s). The usage of these rewards will be made public, and they will be entirely dedicated to protocol provision, user rewards, and user engagement. The use of rewards and methodology for payment must be made public and approved by the Algorand DeFi advisory committee prior to distribution.
77 | 
78 | ## Rationale
79 | This document was versioned using google doc, it made more sense to move it on github.
80 | 
81 | ## Security Considerations
82 | Disclaimer: This document may be revised until the day before the voting session opens, as we are still collecting community feedback.
83 | 
84 | ## Copyright
85 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
86 | 
```

--------------------------------------------------------------------------------
/packages/server/src/tools/apiManager/vestige/swaps.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { Tool, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
  2 | import { ResponseProcessor } from '../../../utils/responseProcessor.js';
  3 | import { env } from '../../../env.js';
  4 | 
  5 | export const swapTools: Tool[] = [
  6 |   {
  7 |     name: 'api_vestige_view_swaps',
  8 |     description: 'Get swaps',
  9 |     inputSchema: {
 10 |       type: 'object',
 11 |       properties: {
 12 |         network_id: {
 13 |           type: 'integer',
 14 |           description: 'Network ID'
 15 |         },
 16 |         start: {
 17 |           type: 'integer',
 18 |           description: 'Start timestamp'
 19 |         },
 20 |         end: {
 21 |           type: 'integer',
 22 |           description: 'Optional end timestamp'
 23 |         },
 24 |         protocol_id: {
 25 |           type: 'integer',
 26 |           description: 'Optional protocol ID filter'
 27 |         },
 28 |         asset_id: {
 29 |           type: 'integer',
 30 |           description: 'Optional asset ID filter'
 31 |         },
 32 |         address: {
 33 |           type: 'string',
 34 |           description: 'Optional address filter'
 35 |         },
 36 |         executor: {
 37 |           type: 'string',
 38 |           description: 'Optional executor filter'
 39 |         },
 40 |         next: {
 41 |           type: 'string',
 42 |           description: 'Optional next token for pagination'
 43 |         },
 44 |         denominating_asset_id: {
 45 |           type: 'integer',
 46 |           description: 'Optional denominating asset ID',
 47 |           default: 0
 48 |         },
 49 |         limit: {
 50 |           type: 'integer',
 51 |           description: 'Maximum number of results',
 52 |           default: 50,
 53 |           maximum: 250,
 54 |           minimum: 1
 55 |         },
 56 |         order_dir: {
 57 |           type: 'string',
 58 |           description: 'Order direction (asc/desc)',
 59 |           default: 'desc',
 60 |           pattern: '^(asc|desc)$'
 61 |         }
 62 |       },
 63 |       required: ['network_id', 'start']
 64 |     }
 65 |   },
 66 |   {
 67 |     name: 'api_vestige_get_best_v4_swap_data',
 68 |     description: 'Get best V4 swap data',
 69 |     inputSchema: {
 70 |       type: 'object',
 71 |       properties: {
 72 |         from_asa: {
 73 |           type: 'integer',
 74 |           description: 'Source ASA ID'
 75 |         },
 76 |         to_asa: {
 77 |           type: 'integer',
 78 |           description: 'Target ASA ID'
 79 |         },
 80 |         amount: {
 81 |           type: 'integer',
 82 |           description: 'Amount to swap'
 83 |         },
 84 |         mode: {
 85 |           type: 'string',
 86 |           description: 'Swap mode (sef/sfe)',
 87 |           pattern: '^(sef|sfe)$'
 88 |         },
 89 |         denominating_asset_id: {
 90 |           type: 'integer',
 91 |           description: 'Optional denominating asset ID',
 92 |           default: 0
 93 |         },
 94 |         enabled_providers: {
 95 |           type: 'string',
 96 |           description: 'Optional comma-separated list of enabled providers'
 97 |         },
 98 |         disabled_providers: {
 99 |           type: 'string',
100 |           description: 'Optional comma-separated list of disabled providers'
101 |         }
102 |       },
103 |       required: ['from_asa', 'to_asa', 'amount', 'mode']
104 |     }
105 |   },
106 |   {
107 |     name: 'api_vestige_get_v4_swap_discount',
108 |     description: 'Get V4 swap discount',
109 |     inputSchema: {
110 |       type: 'object',
111 |       properties: {
112 |         address: {
113 |           type: 'string',
114 |           description: 'Account address'
115 |         }
116 |       },
117 |       required: ['address']
118 |     }
119 |   },
120 |   {
121 |     name: 'api_vestige_get_v4_swap_data_transactions',
122 |     description: 'Get V4 swap data transactions',
123 |     inputSchema: {
124 |       type: 'object',
125 |       properties: {
126 |         sender: {
127 |           type: 'string',
128 |           description: 'Sender address'
129 |         },
130 |         slippage: {
131 |           type: 'number',
132 |           description: 'Slippage tolerance'
133 |         },
134 |         random_signer: {
135 |           type: 'string',
136 |           description: 'Optional random signer address'
137 |         },
138 |         swap_data: {
139 |           type: 'object',
140 |           description: 'V4 swap data from get_best_v4_swap_data'
141 |         }
142 |       },
143 |       required: ['sender', 'slippage', 'swap_data']
144 |     }
145 |   },
146 |   {
147 |     name: 'api_vestige_get_aggregator_stats',
148 |     description: 'Get aggregator stats',
149 |     inputSchema: {
150 |       type: 'object',
151 |       properties: {
152 |         denominating_asset_id: {
153 |           type: 'integer',
154 |           description: 'Optional denominating asset ID',
155 |           default: 0
156 |         }
157 |       }
158 |     }
159 |   }
160 | ];
161 | 
162 | export const handleSwapTools = ResponseProcessor.wrapResourceHandler(async function handleSwapTools(args: any): Promise<any> {
163 |   const name = args.name;
164 |   const baseUrl = env.vestige_api_url;
165 |   let endpoint = '';
166 |   let method = 'GET';
167 | 
168 |   switch (name) {
169 |     case 'api_vestige_view_swaps':
170 |       endpoint = '/swaps';
171 |       break;
172 |     case 'api_vestige_get_best_v4_swap_data':
173 |       endpoint = '/swap/v4';
174 |       break;
175 |     case 'api_vestige_get_v4_swap_discount':
176 |       endpoint = '/swap/v4/fee';
177 |       break;
178 |     case 'api_vestige_get_v4_swap_data_transactions':
179 |       endpoint = '/swap/v4/transactions';
180 |       method = 'POST';
181 |       break;
182 |     case 'api_vestige_get_aggregator_stats':
183 |       endpoint = '/swap/v4/stats';
184 |       break;
185 |     default:
186 |       throw new McpError(
187 |         ErrorCode.MethodNotFound,
188 |         `Unknown tool: ${name}`
189 |       );
190 |   }
191 | 
192 |   try {
193 |     // Add query parameters if they exist
194 |     const queryParams = new URLSearchParams();
195 |     for (const [key, value] of Object.entries(args)) {
196 |       if (value !== undefined && key !== 'swap_data') {
197 |         queryParams.append(key, String(value));
198 |       }
199 |     }
200 |     const url = `${baseUrl}${endpoint}${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
201 | 
202 |     const options: RequestInit = {
203 |       method
204 |     };
205 | 
206 |     // Add body for POST requests
207 |     if (method === 'POST' && args.swap_data) {
208 |       options.body = JSON.stringify(args.swap_data);
209 |       options.headers = {
210 |         'Content-Type': 'application/json'
211 |       };
212 |     }
213 | 
214 |     const response = await fetch(url, options);
215 |     if (!response.ok) {
216 |       throw new McpError(
217 |         ErrorCode.InternalError,
218 |         `Vestige API error: ${response.status} ${response.statusText}`
219 |       );
220 |     }
221 |     const data = await response.json();
222 |     return data;
223 |   } catch (error) {
224 |     if (error instanceof McpError) {
225 |       throw error;
226 |     }
227 |     throw new McpError(
228 |       ErrorCode.InternalError,
229 |       `Failed to fetch swap data: ${error instanceof Error ? error.message : String(error)}`
230 |     );
231 |   }
232 | });
233 | 
```

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

```markdown
 1 | title: Overview
 2 | 
 3 | This section covers the procedure for registering an account to participate in the Algorand Consensus Protocol. It begins with a description of important concepts and best practices before getting started. 
 4 | 
 5 | !!! tldr
 6 | 	- Accounts participate in the Algorand consensus protocol by generating a valid participation key and then registering that key online with a special online registration transaction.
 7 | 	- Accounts mark themselves online by submitting an [online key registration transaction](../../get-details/transactions#register-account-online) for a valid participation key.
 8 | 	- Accounts mark themselves offline by submitting an [offline key registration transaction](../../get-details/transactions#register-account-offline). 
 9 | 	- It is important to mark your account offline if it is not participating. Not doing so is bad network behavior and will decrease the honest/dishonest user ratio that underpins the liveness of the agreement protocol.
10 | 	- It is important to ensure that only the latest update of the participation key ever exists at any time.
11 | 	- In the event of node migration, hardware swap, or other similar events, it is preferable to have your participation key offline for a few rounds than to have it present on multiple nodes at the same time.
12 | 
13 | # Important Concepts
14 | 
15 | ## Online Participation
16 | In the context of this section, participation means participation in the Algorand consensus protocol. An account that participates in the Algorand consensus protocol is eligible and available to be selected to propose and vote on new blocks in the Algorand blockchain. Note that the likelihood that this account will be selected to propose and vote on blocks is proportional to its amount of stake. Read more about voting and block proposals in the [Algorand Consensus Protocol overview](../../get-details/algorand_consensus#the-algorand-consensus-protocol).
17 | 
18 | !!! info
19 |     Participation in consensus currently does not affect the proportion of participation rewards an account receives. Participation rewards are [based on the amount](https://algorand.foundation/rewards-faq) of stake an account has, irrespective of whether the account is marked online or offline. Furthermore, currently there are no participation rewards on MainNet.
20 | 
21 | ## Online/Offline Status
22 | In order for an account to participate in consensus, it must first mark itself online. Marking an account online requires the account to have a valid participation key, which has been registered with the network by way of an [online key registration transaction](../../get-details/transactions#register-account-online), authorized by the participating account. Marking an account offline requires an [offline key registration transaction](../../get-details/transactions#register-account-offline) also authorized by the private key of the participating account.
23 | 
24 | # Guidelines for a Healthy Network
25 | 
26 | ## Ensure that Online Accounts are Participating
27 | If an account registers itself online, it is important that its participation key is online. _A participation key is online if there is a single fully-synchronized node on the Algorand network that has that key in its ledger directory._ You should always mark an account offline if it is not actually available to participate, since the network uses the online/offline status of an account to calculate block vote thresholds. If you are marked online but you are not participating, you would be considered a dishonest user and will negatively impact the voting threshold. Furthermore, if your node experiences issues you are not able to solve promptly, it is recommended that you register the account offline as soon as possible.
28 | 
29 | !!! tip
30 | 	If you keep your private keys in cold storage, it is recommended that you generate and sign enough offline transactions to be able to take the account offline in case of emergencies. Learn more about generating transactions for future rounds in the [Transactions guide](../../get-details/transactions#). Learn how to create and authorize transactions offline in the [Authorizing Transactions Offline](../../get-details/transactions/offline_transactions) guide.
31 | 
32 | ## Renew participation keys before they expire
33 | Participation keys are valid for a specific round range. Make sure to renew participation keys or mark the account offline before the current participation key expires. Your account will _not_ automatically be marked offline.
34 | 
35 | _Visit the [Renew Participation Keys section](./renew.md) for detailed instructions._
36 | 
37 | ## Ensure that Participation Nodes are working properly
38 | 
39 | Monitor your participation node to ensure high performance and consistent access to your registered participation key. 
40 | The following should be monitored:
41 | 
42 | * last committed block (`goal node status` or API) matches a third-party API service
43 | * CPU / RAM / disk use are within thresholds
44 | * clock is accurate (blocks are timestamped using the clock time from the block proposer's node, so keep your node clock accurate and on time)
45 | * the participation node is sending votes and proposing blocks at the expected frequency.
46 | 
47 | ## Securely Store Participation Keys
48 | 
49 | Registered participation keys that are in operation are regularly updated through the protocol so that they cannot be used to vote on earlier rounds. Essentially, the set of keys corresponding to earlier rounds are deleted after the round passes to ensure that the compromise of a participation key by a bad actor does not give the bad actor the potential to rewrite history. Because of this, it is important that there only exists a single instance of the participation key (files ending in `*.partkey`) at any time in the system. 
50 | 
51 | !!! warning
52 | 	Because of this, holding backups of participation keys is highly discouraged, unless appropriate procedures are setup to purge those backups on a regular basis.
53 | 
54 | # Technical Procedure
55 | 
56 | The rest of this section will describe how to [generate a participation key](./generate_keys.md) for an account, [mark or register the account online](./online.md) (with the generated participation key), [mark or register an account offline](./offline.md), and [renew a participation key](./renew.md) for an account.
57 | 
```

--------------------------------------------------------------------------------
/packages/client/src/index.ts:
--------------------------------------------------------------------------------

```typescript
  1 | import { PeraWalletConnect } from '@perawallet/connect';
  2 | import { DeflyWalletConnect } from '@blockshake/defly-connect';
  3 | import { DaffiWalletConnect } from '@daffiwallet/connect';
  4 | import algosdk, { Transaction } from 'algosdk';
  5 | import { LocalWallet } from './LocalWallet.js';
  6 | 
  7 | export type WalletType = 'pera' | 'defly' | 'daffi' | 'local';
  8 | 
  9 | export interface WalletConnectOptions {
 10 |   network: 'mainnet' | 'testnet';
 11 | }
 12 | 
 13 | interface WalletProvider {
 14 |   connect(): Promise<string[]>;
 15 |   reconnectSession(): Promise<string[]>;
 16 |   disconnect(): Promise<void>;
 17 |   signTransactions(transactions: { txn: Transaction; message?: string }[][]): Promise<Uint8Array[][]>;
 18 | }
 19 | 
 20 | export class AlgorandMcpClient {
 21 |   private peraWallet: PeraWalletConnect;
 22 |   private deflyWallet: DeflyWalletConnect;
 23 |   private daffiWallet: DaffiWalletConnect;
 24 |   private activeWallet: WalletProvider | null = null;
 25 |   private localWallet: LocalWallet;
 26 |   private connectedAccounts: string[] = [];
 27 |   private activeWalletType: WalletType | null = null;
 28 | 
 29 |   constructor(options: WalletConnectOptions) {
 30 |     this.localWallet = new LocalWallet();
 31 |     this.peraWallet = new PeraWalletConnect({
 32 |       chainId: options.network === 'mainnet' ? 416001 : 416002
 33 |     });
 34 |     this.deflyWallet = new DeflyWalletConnect({
 35 |       chainId: options.network === 'mainnet' ? 416001 : 416002
 36 |     });
 37 |     this.daffiWallet = new DaffiWalletConnect({
 38 |       chainId: options.network === 'mainnet' ? 416001 : 416002
 39 |     });
 40 |   }
 41 | 
 42 |   async connect(walletType: WalletType): Promise<string[]> {
 43 |     try {
 44 |       let accounts: string[] = [];
 45 |       
 46 |       switch (walletType) {
 47 |         case 'local':
 48 |           accounts = await this.localWallet.connect();
 49 |           this.activeWallet = this.localWallet;
 50 |           break;
 51 |         case 'pera':
 52 |           accounts = await this.peraWallet.connect();
 53 |           this.activeWallet = this.peraWallet as unknown as WalletProvider;
 54 |           break;
 55 |         case 'defly':
 56 |           accounts = await this.deflyWallet.connect();
 57 |           this.activeWallet = this.deflyWallet as unknown as WalletProvider;
 58 |           break;
 59 |         case 'daffi':
 60 |           accounts = await this.daffiWallet.connect();
 61 |           this.activeWallet = this.daffiWallet as unknown as WalletProvider;
 62 |           break;
 63 |         default:
 64 |           throw new Error('Unsupported wallet type');
 65 |       }
 66 | 
 67 |       this.connectedAccounts = accounts;
 68 |       this.activeWalletType = walletType;
 69 |       return accounts;
 70 |     } catch (error: unknown) {
 71 |       throw new Error(`Failed to connect wallet: ${error instanceof Error ? error.message : String(error)}`);
 72 |     }
 73 |   }
 74 | 
 75 |   makeTransactionSigner = async (txnGroup: Uint8Array[], indexesToSign: number[]) => {
 76 |     if (!this.activeWallet || !this.activeWalletType) {
 77 |       throw new Error('No active wallet');
 78 |     }
 79 | 
 80 |     if (this.activeWalletType === 'local') {
 81 |       const signer = await this.localWallet.makeTransactionSigner();
 82 |       const decodedTxns = txnGroup.map(txn => algosdk.decodeUnsignedTransaction(txn));
 83 |       return () => signer(decodedTxns, indexesToSign);
 84 |     }
 85 | 
 86 |     return async () => {
 87 |       if (!this.activeWallet) {
 88 |         throw new Error('Wallet not connected');
 89 |       }
 90 | 
 91 |       try {
 92 |         // Decode transactions from Uint8Array
 93 |         const decodedTxns = txnGroup.map(txn => algosdk.decodeUnsignedTransaction(txn));
 94 |         
 95 |         // Format transactions for signing
 96 |         const txnsToSign = decodedTxns.map(txn => ({
 97 |           txn: txn,
 98 |           message: 'Please sign the transaction'
 99 |         }));
100 | 
101 |         const result = await this.activeWallet.signTransactions([txnsToSign]);
102 |         return result[0];
103 |       } catch (error: any) {
104 |         // Handle specific error cases
105 |         if (error?.data?.type === "SIGN_MODAL_CLOSED") {
106 |           console.error('Transaction signing cancelled');
107 |           return new Array(indexesToSign.length).fill(null);
108 |         }
109 |         
110 |         const msg = error?.message || "Failed to sign transaction";
111 |         console.error(`Wallet signer error: ${msg}`);
112 |         return new Array(indexesToSign.length).fill(null);
113 |       }
114 |     };
115 |   }
116 | 
117 |   getAccounts(): string[] {
118 |     return this.connectedAccounts;
119 |   }
120 | 
121 |   async signTransactions(transactions: { txn: Transaction; message?: string }[][]): Promise<Uint8Array[][]> {
122 |     if (!this.activeWallet) {
123 |       throw new Error('No active wallet connection. Call connect() first.');
124 |     }
125 | 
126 |     try {
127 |       return await this.activeWallet.signTransactions(transactions);
128 |     } catch (error: unknown) {
129 |       throw new Error(`Failed to sign transactions: ${error instanceof Error ? error.message : String(error)}`);
130 |     }
131 |   }
132 | 
133 |   // Backward compatibility
134 |   async signTransaction(txn: Transaction): Promise<Uint8Array> {
135 |     const result = await this.signTransactions([[{ txn, message: 'Transaction to sign' }]]);
136 |     return result[0][0];
137 |   }
138 | 
139 |   async disconnect(): Promise<void> {
140 |     if (this.activeWallet) {
141 |       await this.activeWallet.disconnect();
142 |       this.activeWallet = null;
143 |       this.connectedAccounts = [];
144 |     }
145 |   }
146 | 
147 |   async reconnectSession(walletType: WalletType): Promise<string[]> {
148 |     try {
149 |       let accounts: string[] = [];
150 |       
151 |       switch (walletType) {
152 |         case 'local':
153 |           accounts = await this.localWallet.reconnectSession();
154 |           this.activeWallet = this.localWallet;
155 |           break;
156 |         case 'pera':
157 |           accounts = await this.peraWallet.reconnectSession();
158 |           this.activeWallet = this.peraWallet as unknown as WalletProvider;
159 |           break;
160 |         case 'defly':
161 |           accounts = await this.deflyWallet.reconnectSession();
162 |           this.activeWallet = this.deflyWallet as unknown as WalletProvider;
163 |           break;
164 |         case 'daffi':
165 |           accounts = await this.daffiWallet.reconnectSession();
166 |           this.activeWallet = this.daffiWallet as unknown as WalletProvider;
167 |           break;
168 |         default:
169 |           throw new Error('Unsupported wallet type');
170 |       }
171 | 
172 |       this.connectedAccounts = accounts;
173 |       this.activeWalletType = walletType;
174 |       return accounts;
175 |     } catch (error: unknown) {
176 |       throw new Error(`Failed to reconnect session: ${error instanceof Error ? error.message : String(error)}`);
177 |     }
178 |   }
179 | }
180 | 
```

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

```markdown
  1 | # AlgoKit goal
  2 | 
  3 | AlgoKit goal command provides the user with a mechanism to run [goal cli](https://developer.algorand.org/docs/clis/goal/goal/) commands against the current [AlgoKit LocalNet](./localnet.md).
  4 | 
  5 | You can explore all possible goal commands by running `algokit goal` e.g.:
  6 | 
  7 | ```
  8 | $ ~ algokit goal
  9 |  GOAL is the CLI for interacting Algorand software instance. The binary 'goal' is installed alongside the algod binary and is considered an integral part of the complete installation. The binaries should be used in tandem - you should not try to use a version of goal with a different version of algod.
 10 | 
 11 |  Usage:
 12 |  goal [flags]
 13 |  goal [command]
 14 | 
 15 |  Available Commands:
 16 |  account     Control and manage Algorand accounts
 17 |  app         Manage applications
 18 |  asset       Manage assets
 19 |  clerk       Provides the tools to control transactions
 20 |  completion  Shell completion helper
 21 |  help        Help about any command
 22 |  kmd         Interact with kmd, the key management daemon
 23 |  ledger      Access ledger-related details
 24 |  license     Display license information
 25 |  logging     Control and manage Algorand logging
 26 |  network     Create and manage private, multi-node, locally-hosted networks
 27 |  node        Manage a specified algorand node
 28 |  protocols
 29 |  report
 30 |  version     The current version of the Algorand daemon (algod)
 31 |  wallet      Manage wallets: encrypted collections of Algorand account keys
 32 | 
 33 |  Flags:
 34 |  -d, --datadir stringArray   Data directory for the node
 35 |  -h, --help                  help for goal
 36 |  -k, --kmddir string         Data directory for kmd
 37 |  -v, --version               Display and write current build version and exit
 38 | 
 39 |  Use "goal [command] --help" for more information about a command.
 40 | ```
 41 | 
 42 | For instance, running `algokit goal report` would result in output like:
 43 | 
 44 | ```
 45 | $ ~ algokit goal report
 46 |  12885688322
 47 |  3.12.2.dev [rel/stable] (commit #181490e3)
 48 |  go-algorand is licensed with AGPLv3.0
 49 |  source code available at https://github.com/algorand/go-algorand
 50 | 
 51 |  Linux ff7828f2da17 5.15.49-linuxkit #1 SMP PREEMPT Tue Sep 13 07:51:32 UTC 2022 aarch64 GNU/Linux
 52 | 
 53 |  Genesis ID from genesis.json: sandnet-v1
 54 | 
 55 |  Last committed block: 0
 56 |  Time since last block: 0.0s
 57 |  Sync Time: 0.0s
 58 |  Last consensus protocol: future
 59 |  Next consensus protocol: future
 60 |  Round for next consensus protocol: 1
 61 |  Next consensus protocol supported: true
 62 |  Last Catchpoint:
 63 |  Genesis ID: sandnet-v1
 64 |  Genesis hash: vEg1NCh6SSXwS6O5HAfjYCCNAs4ug328s3RYMr9syBg=
 65 | ```
 66 | 
 67 | If the AlgoKit Sandbox `algod` docker container is not present or not running, the command will fail with a clear error, e.g.:
 68 | 
 69 | ```
 70 | $ ~ algokit goal
 71 |  Error: No such container: algokit_algod
 72 |  Error: Error executing goal; ensure the Sandbox is started by executing `algokit sandbox status`
 73 | ```
 74 | 
 75 | ```
 76 | $ ~ algokit goal
 77 |  Error response from daemon: Container 5a73961536e2c98e371465739053d174066c40d00647c8742f2bb39eb793ed7e is not running
 78 |  Error: Error executing goal; ensure the Sandbox is started by executing `algokit sandbox status`
 79 | ```
 80 | 
 81 | ## Working with Files in the Container
 82 | 
 83 | When interacting with the container, especially if you're using tools like goal, you might need to reference files or directories. Here's how to efficiently deal with files and directories:
 84 | 
 85 | ### Automatic File Mounting
 86 | 
 87 | When you specify a file or directory path in your `goal` command, the system will automatically mount that path from your local filesystem into the container. This way, you don't need to copy files manually each time.
 88 | 
 89 | For instance, if you want to compile a `teal` file:
 90 | 
 91 | ```
 92 | algokit goal clerk compile /Path/to/inputfile/approval.teal -o /Path/to/outputfile/approval.compiled
 93 | ```
 94 | 
 95 | Here, `/Path/to/inputfile/approval.teal` and `/Path/to/outputfile/approval.compiled` are paths on your local file system, and they will be automatically accessible to the `goal` command inside the container.
 96 | 
 97 | ### Manual Copying of Files
 98 | 
 99 | In case you want to manually copy files into the container, you can do so using `docker cp`:
100 | 
101 | ```
102 | docker cp foo.txt algokit_algod:/root
103 | ```
104 | 
105 | This command copies the `foo.txt` from your local system into the root directory of the `algokit_algod` container.
106 | 
107 | Note: Manual copying is optional and generally only necessary if you have specific reasons for doing so since the system will auto-mount paths specified in commands.
108 | 
109 | ## Running multiple commands
110 | 
111 | If you want to run multiple commands or interact with the filesystem you can execute `algokit goal --console`. This will open a [Bash](https://www.gnu.org/software/bash/) shell session on the `algod` Docker container and from there you can execute goal directly, e.g.:
112 | 
113 | ```bash
114 | $ algokit goal --console
115 | Opening Bash console on the algod node; execute `exit` to return to original console
116 | root@82d41336608a:~# goal account list
117 | [online]        C62QEFC7MJBPHAUDMGVXGZ7WRWFAF3XYPBU3KZKOFHYVUYDGU5GNWS4NWU      C62QEFC7MJBPHAUDMGVXGZ7WRWFAF3XYPBU3KZKOFHYVUYDGU5GNWS4NWU      4000000000000000 microAlgos
118 | [online]        DVPJVKODAVEKWQHB4G7N6QA3EP7HKAHTLTZNWMV4IVERJQPNGKADGURU7Y      DVPJVKODAVEKWQHB4G7N6QA3EP7HKAHTLTZNWMV4IVERJQPNGKADGURU7Y      4000000000000000 microAlgos
119 | [online]        4BH5IKMDDHEJEOZ7T5LLT4I7EVIH5XCOTX3TPVQB3HY5TUBVT4MYXJOZVA      4BH5IKMDDHEJEOZ7T5LLT4I7EVIH5XCOTX3TPVQB3HY5TUBVT4MYXJOZVA      2000000000000000 microAlgos
120 | ```
121 | 
122 | ## Interactive Mode
123 | 
124 | Some `goal` commands require interactive input from the user. By default, AlgoKit will attempt to run commands in non-interactive mode first, and automatically switch to interactive mode if needed. You can force a command to run in interactive mode by using the `--interactive` flag:
125 | 
126 | ```bash
127 | $ algokit goal --interactive wallet new algodev
128 | Please choose a password for wallet 'algodev':
129 | Please confirm the password:
130 | Creating wallet...
131 | Created wallet 'algodev'
132 | Your new wallet has a backup phrase that can be used for recovery.
133 | Keeping this backup phrase safe is extremely important.
134 | Would you like to see it now? (Y/n): n
135 | ```
136 | 
137 | This is particularly useful when you know a command will require user input, such as creating new accounts, importing keys, or signing transactions.
138 | 
139 | For more details about the `AlgoKit goal` command, please refer to the [AlgoKit CLI reference documentation](../cli/index.md#goal).
140 | 
```

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

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / SimulationTransactionExecTrace
  2 | 
  3 | # Class: SimulationTransactionExecTrace
  4 | 
  5 | [modelsv2](../modules/modelsv2.md).SimulationTransactionExecTrace
  6 | 
  7 | The execution trace of calling an app or a logic sig, containing the inner app
  8 | call trace in a recursive way.
  9 | 
 10 | ## Hierarchy
 11 | 
 12 | - `default`
 13 | 
 14 |   ↳ **`SimulationTransactionExecTrace`**
 15 | 
 16 | ## Table of contents
 17 | 
 18 | ### Constructors
 19 | 
 20 | - [constructor](modelsv2.SimulationTransactionExecTrace.md#constructor)
 21 | 
 22 | ### Properties
 23 | 
 24 | - [approvalProgramHash](modelsv2.SimulationTransactionExecTrace.md#approvalprogramhash)
 25 | - [approvalProgramTrace](modelsv2.SimulationTransactionExecTrace.md#approvalprogramtrace)
 26 | - [attribute\_map](modelsv2.SimulationTransactionExecTrace.md#attribute_map)
 27 | - [clearStateProgramHash](modelsv2.SimulationTransactionExecTrace.md#clearstateprogramhash)
 28 | - [clearStateProgramTrace](modelsv2.SimulationTransactionExecTrace.md#clearstateprogramtrace)
 29 | - [clearStateRollback](modelsv2.SimulationTransactionExecTrace.md#clearstaterollback)
 30 | - [clearStateRollbackError](modelsv2.SimulationTransactionExecTrace.md#clearstaterollbackerror)
 31 | - [innerTrace](modelsv2.SimulationTransactionExecTrace.md#innertrace)
 32 | - [logicSigHash](modelsv2.SimulationTransactionExecTrace.md#logicsighash)
 33 | - [logicSigTrace](modelsv2.SimulationTransactionExecTrace.md#logicsigtrace)
 34 | 
 35 | ### Methods
 36 | 
 37 | - [get\_obj\_for\_encoding](modelsv2.SimulationTransactionExecTrace.md#get_obj_for_encoding)
 38 | - [from\_obj\_for\_encoding](modelsv2.SimulationTransactionExecTrace.md#from_obj_for_encoding)
 39 | 
 40 | ## Constructors
 41 | 
 42 | ### constructor
 43 | 
 44 | • **new SimulationTransactionExecTrace**(`«destructured»`)
 45 | 
 46 | Creates a new `SimulationTransactionExecTrace` object.
 47 | 
 48 | #### Parameters
 49 | 
 50 | | Name | Type |
 51 | | :------ | :------ |
 52 | | `«destructured»` | `Object` |
 53 | | › `approvalProgramHash?` | `string` \| `Uint8Array` |
 54 | | › `approvalProgramTrace?` | [`SimulationOpcodeTraceUnit`](modelsv2.SimulationOpcodeTraceUnit.md)[] |
 55 | | › `clearStateProgramHash?` | `string` \| `Uint8Array` |
 56 | | › `clearStateProgramTrace?` | [`SimulationOpcodeTraceUnit`](modelsv2.SimulationOpcodeTraceUnit.md)[] |
 57 | | › `clearStateRollback?` | `boolean` |
 58 | | › `clearStateRollbackError?` | `string` |
 59 | | › `innerTrace?` | [`SimulationTransactionExecTrace`](modelsv2.SimulationTransactionExecTrace.md)[] |
 60 | | › `logicSigHash?` | `string` \| `Uint8Array` |
 61 | | › `logicSigTrace?` | [`SimulationOpcodeTraceUnit`](modelsv2.SimulationOpcodeTraceUnit.md)[] |
 62 | 
 63 | #### Overrides
 64 | 
 65 | BaseModel.constructor
 66 | 
 67 | #### Defined in
 68 | 
 69 | client/v2/algod/models/types.ts:5288
 70 | 
 71 | ## Properties
 72 | 
 73 | ### approvalProgramHash
 74 | 
 75 | • `Optional` **approvalProgramHash**: `Uint8Array`
 76 | 
 77 | SHA512_256 hash digest of the approval program executed in transaction.
 78 | 
 79 | #### Defined in
 80 | 
 81 | client/v2/algod/models/types.ts:5226
 82 | 
 83 | ___
 84 | 
 85 | ### approvalProgramTrace
 86 | 
 87 | • `Optional` **approvalProgramTrace**: [`SimulationOpcodeTraceUnit`](modelsv2.SimulationOpcodeTraceUnit.md)[]
 88 | 
 89 | Program trace that contains a trace of opcode effects in an approval program.
 90 | 
 91 | #### Defined in
 92 | 
 93 | client/v2/algod/models/types.ts:5231
 94 | 
 95 | ___
 96 | 
 97 | ### attribute\_map
 98 | 
 99 | • **attribute\_map**: `Record`\<`string`, `string`\>
100 | 
101 | #### Inherited from
102 | 
103 | BaseModel.attribute\_map
104 | 
105 | #### Defined in
106 | 
107 | client/v2/basemodel.ts:56
108 | 
109 | ___
110 | 
111 | ### clearStateProgramHash
112 | 
113 | • `Optional` **clearStateProgramHash**: `Uint8Array`
114 | 
115 | SHA512_256 hash digest of the clear state program executed in transaction.
116 | 
117 | #### Defined in
118 | 
119 | client/v2/algod/models/types.ts:5236
120 | 
121 | ___
122 | 
123 | ### clearStateProgramTrace
124 | 
125 | • `Optional` **clearStateProgramTrace**: [`SimulationOpcodeTraceUnit`](modelsv2.SimulationOpcodeTraceUnit.md)[]
126 | 
127 | Program trace that contains a trace of opcode effects in a clear state program.
128 | 
129 | #### Defined in
130 | 
131 | client/v2/algod/models/types.ts:5241
132 | 
133 | ___
134 | 
135 | ### clearStateRollback
136 | 
137 | • `Optional` **clearStateRollback**: `boolean`
138 | 
139 | If true, indicates that the clear state program failed and any persistent state
140 | changes it produced should be reverted once the program exits.
141 | 
142 | #### Defined in
143 | 
144 | client/v2/algod/models/types.ts:5247
145 | 
146 | ___
147 | 
148 | ### clearStateRollbackError
149 | 
150 | • `Optional` **clearStateRollbackError**: `string`
151 | 
152 | The error message explaining why the clear state program failed. This field will
153 | only be populated if clear-state-rollback is true and the failure was due to an
154 | execution error.
155 | 
156 | #### Defined in
157 | 
158 | client/v2/algod/models/types.ts:5254
159 | 
160 | ___
161 | 
162 | ### innerTrace
163 | 
164 | • `Optional` **innerTrace**: [`SimulationTransactionExecTrace`](modelsv2.SimulationTransactionExecTrace.md)[]
165 | 
166 | An array of SimulationTransactionExecTrace representing the execution trace of
167 | any inner transactions executed.
168 | 
169 | #### Defined in
170 | 
171 | client/v2/algod/models/types.ts:5260
172 | 
173 | ___
174 | 
175 | ### logicSigHash
176 | 
177 | • `Optional` **logicSigHash**: `Uint8Array`
178 | 
179 | SHA512_256 hash digest of the logic sig executed in transaction.
180 | 
181 | #### Defined in
182 | 
183 | client/v2/algod/models/types.ts:5265
184 | 
185 | ___
186 | 
187 | ### logicSigTrace
188 | 
189 | • `Optional` **logicSigTrace**: [`SimulationOpcodeTraceUnit`](modelsv2.SimulationOpcodeTraceUnit.md)[]
190 | 
191 | Program trace that contains a trace of opcode effects in a logic sig.
192 | 
193 | #### Defined in
194 | 
195 | client/v2/algod/models/types.ts:5270
196 | 
197 | ## Methods
198 | 
199 | ### get\_obj\_for\_encoding
200 | 
201 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
202 | 
203 | Get an object ready for encoding to either JSON or msgpack.
204 | 
205 | #### Parameters
206 | 
207 | | Name | Type | Default value | Description |
208 | | :------ | :------ | :------ | :------ |
209 | | `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. |
210 | 
211 | #### Returns
212 | 
213 | `Record`\<`string`, `any`\>
214 | 
215 | #### Inherited from
216 | 
217 | BaseModel.get\_obj\_for\_encoding
218 | 
219 | #### Defined in
220 | 
221 | client/v2/basemodel.ts:65
222 | 
223 | ___
224 | 
225 | ### from\_obj\_for\_encoding
226 | 
227 | ▸ `Static` **from_obj_for_encoding**(`data`): [`SimulationTransactionExecTrace`](modelsv2.SimulationTransactionExecTrace.md)
228 | 
229 | #### Parameters
230 | 
231 | | Name | Type |
232 | | :------ | :------ |
233 | | `data` | `Record`\<`string`, `any`\> |
234 | 
235 | #### Returns
236 | 
237 | [`SimulationTransactionExecTrace`](modelsv2.SimulationTransactionExecTrace.md)
238 | 
239 | #### Defined in
240 | 
241 | client/v2/algod/models/types.ts:5343
242 | 
```
Page 23/93FirstPrevNextLast