This is page 27 of 93. Use http://codebase.md/goplausible/algorand-mcp?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── llms-install.md
├── llms.txt
├── package.json
├── packages
│ ├── client
│ │ ├── .env.example
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── src
│ │ │ ├── env.ts
│ │ │ ├── index.ts
│ │ │ └── LocalWallet.ts
│ │ └── tsconfig.json
│ └── server
│ ├── .env.example
│ ├── API specs
│ │ ├── algod_api.json
│ │ ├── indexer_api.json
│ │ ├── mcp.json
│ │ ├── nfd_api.json
│ │ ├── ultrade_api.json
│ │ ├── vestige_api.json
│ │ └── vestige_free_api.json
│ ├── Dockerfile
│ ├── jest.config.js
│ ├── package.json
│ ├── README.md
│ ├── smithery.yaml
│ ├── src
│ │ ├── algorand-client.ts
│ │ ├── env.ts
│ │ ├── index.ts
│ │ ├── resources
│ │ │ ├── index.ts
│ │ │ ├── knowledge
│ │ │ │ ├── ARCs.txt
│ │ │ │ ├── developers-algokit-architecture-decisions.txt
│ │ │ │ ├── developers-algokit-cli.txt
│ │ │ │ ├── developers-algokit-utils-python.txt
│ │ │ │ ├── developers-algokit-utils-typescript.txt
│ │ │ │ ├── developers-clis.txt
│ │ │ │ ├── developers-details.txt
│ │ │ │ ├── developers-liquid-auth.txt
│ │ │ │ ├── developers-nodes.txt
│ │ │ │ ├── developers-puya.txt
│ │ │ │ ├── developers-python.txt
│ │ │ │ ├── developers-sdks-js.txt
│ │ │ │ ├── developers-sdks-python.txt
│ │ │ │ ├── developers-tealscript.txt
│ │ │ │ ├── developers.txt
│ │ │ │ ├── index.ts
│ │ │ │ ├── taxonomy
│ │ │ │ │ ├── algokit-cli:README.md
│ │ │ │ │ ├── algokit:cli:algokit.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-14_sandbox-approach.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-22_beaker-testing-strategy.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_beaker_productionisation_review.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_brew_install.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-12_smart-contract-deployment.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-06-06_frontend-templates.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-07-19_advanced_generate_command.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-13_native_binaries.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-23_init-wizard-v2.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-31_binary_distribution.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-03-06_local_dev_ui_packaging.md
│ │ │ │ │ ├── algokit:cli:articles:output_stability.md
│ │ │ │ │ ├── algokit:cli:cli:index.md
│ │ │ │ │ ├── algokit:cli:features:compile.md
│ │ │ │ │ ├── algokit:cli:features:completions.md
│ │ │ │ │ ├── algokit:cli:features:config.md
│ │ │ │ │ ├── algokit:cli:features:dispenser.md
│ │ │ │ │ ├── algokit:cli:features:doctor.md
│ │ │ │ │ ├── algokit:cli:features:explore.md
│ │ │ │ │ ├── algokit:cli:features:generate.md
│ │ │ │ │ ├── algokit:cli:features:goal.md
│ │ │ │ │ ├── algokit:cli:features:init.md
│ │ │ │ │ ├── algokit:cli:features:localnet.md
│ │ │ │ │ ├── algokit:cli:features:project:bootstrap.md
│ │ │ │ │ ├── algokit:cli:features:project:deploy.md
│ │ │ │ │ ├── algokit:cli:features:project:link.md
│ │ │ │ │ ├── algokit:cli:features:project:list.md
│ │ │ │ │ ├── algokit:cli:features:project:run.md
│ │ │ │ │ ├── algokit:cli:features:project.md
│ │ │ │ │ ├── algokit:cli:features:tasks:analyze.md
│ │ │ │ │ ├── algokit:cli:features:tasks:ipfs.md
│ │ │ │ │ ├── algokit:cli:features:tasks:mint.md
│ │ │ │ │ ├── algokit:cli:features:tasks:nfd.md
│ │ │ │ │ ├── algokit:cli:features:tasks:opt.md
│ │ │ │ │ ├── algokit:cli:features:tasks:send.md
│ │ │ │ │ ├── algokit:cli:features:tasks:sign.md
│ │ │ │ │ ├── algokit:cli:features:tasks:transfer.md
│ │ │ │ │ ├── algokit:cli:features:tasks:vanity_address.md
│ │ │ │ │ ├── algokit:cli:features:tasks:wallet.md
│ │ │ │ │ ├── algokit:cli:features:tasks.md
│ │ │ │ │ ├── algokit:cli:tutorials:algokit-template.md
│ │ │ │ │ ├── algokit:cli:tutorials:intro.md
│ │ │ │ │ ├── algokit:cli:tutorials:smart-contracts.md
│ │ │ │ │ ├── algokit:docs:testnet_api.md
│ │ │ │ │ ├── algokit:lora:README.md
│ │ │ │ │ ├── algokit:README.md
│ │ │ │ │ ├── algokit:utils:python:markdown:apidocs:algokit_utils:algokit_utils.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:debugger.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:python:markdown:index.md
│ │ │ │ │ ├── algokit:utils:python:README.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:debugger.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:python:source:index.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:algorand-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:amount.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:asset.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:debugging.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:event-emitter.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:testing.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction-composer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:typed-app-clients.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TestLogger.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TransactionLogger.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account_manager.AccountManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.MultisigAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.SigningAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client.AlgorandClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_amount.AlgoAmount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_arc56.Arc56Method.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.AppClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.ApplicationClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_deployer.AppDeployer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_factory.AppFactory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_manager.AppManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_asset_manager.AssetManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_async_event_emitter.AsyncEventEmitter.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_client_manager.ClientManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_composer.TransactionComposer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_config.UpdatableConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_dispenser_client.TestNetDispenserApiClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_kmd_account_manager.KmdAccountManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_logic_error.LogicError.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnSchemaBreak.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnUpdate.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.AccountStatus.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.ApplicationOnComplete.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.SignatureType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_lifecycle_events.EventType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account_manager.EnsureFundedResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.AccountConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.TransactionSignerAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_algorand_client_interface.AlgorandClientInterface.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Arc56Contract.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Event.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Method.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.ProgramSourceInfo.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageKey.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageMap.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StructField.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallABIArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallCoreParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCallInterfaceParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCoreParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppSourceMaps.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.FundAppAccountParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppById.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppByIdBase.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.SourceMapExport.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppLookup.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_factory.AppFactoryParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.AppInformation.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValueRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValuesRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSources.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.CallConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.DeclaredSchemaValueSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Hint.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.ReservedSchemaValueSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Schema.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.SchemaSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.StateSchemaSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Struct.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallTransactionResultOfType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCompilationResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeployMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppLookup.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppState.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppStorageSchema.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxName.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValueRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValuesRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CompiledTeal.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CoreAppCallArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CreateAppParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.RawAppCallArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.TealTemplateParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.UpdateAppParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.BulkAssetOptInOutResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetBulkOptInOutParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptInParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.CreateAssetParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.AlgoSdkClients.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppFactory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_composer.BuiltTransactions.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_config.Config.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.AVMTracesEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourceDebugEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourcesDebugEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserFundResponse.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserLimitResponse.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.TestNetDispenserApiClientParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_indexer.LookupAssetHoldingsOptions.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_logic_error.LogicErrorDetails.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoClientConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.NetworkDetails.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgoKitLogCaptureFixture.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixture.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixtureConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandTestAutomationContext.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.GetTestAccountParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.LogSnapshotConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.AtomicTransactionComposerToSend.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendAtomicTransactionComposerResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionGroupToSend.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionToSign.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoRekeyParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedReturnType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:testing.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algo_http_client_with_retry.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_interface.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_creator.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_sender.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transfer_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_arc56.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_deployer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory_and_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_composer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_config.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_debugging.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_expand.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_kmd_account_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_lifecycle_events.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logging.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logic_error.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_network_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_testing.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transaction.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transfer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:README.md
│ │ │ │ │ ├── algokit:utils:typescript:README.md
│ │ │ │ │ ├── algokit:utils:typescript:v7-migration.md
│ │ │ │ │ ├── algokit:utils:typescript:v8-migration.md
│ │ │ │ │ ├── ARCs:ARC-template.md
│ │ │ │ │ ├── ARCs:assets:arc-0012:README.md
│ │ │ │ │ ├── ARCs:assets:arc-0034:TemplateForm.md
│ │ │ │ │ ├── ARCs:assets:arc-0062:README.md
│ │ │ │ │ ├── ARCs:pages:nfts.md
│ │ │ │ │ ├── ARCs:pages:wallets.md
│ │ │ │ │ ├── ARCs:README.md
│ │ │ │ │ ├── ARCs:specs:arc-0000.md
│ │ │ │ │ ├── ARCs:specs:arc-0001.md
│ │ │ │ │ ├── ARCs:specs:arc-0002.md
│ │ │ │ │ ├── ARCs:specs:arc-0003.md
│ │ │ │ │ ├── ARCs:specs:arc-0004.md
│ │ │ │ │ ├── ARCs:specs:arc-0005.md
│ │ │ │ │ ├── ARCs:specs:arc-0006.md
│ │ │ │ │ ├── ARCs:specs:arc-0007.md
│ │ │ │ │ ├── ARCs:specs:arc-0008.md
│ │ │ │ │ ├── ARCs:specs:arc-0009.md
│ │ │ │ │ ├── ARCs:specs:arc-0010.md
│ │ │ │ │ ├── ARCs:specs:arc-0011.md
│ │ │ │ │ ├── ARCs:specs:arc-0012.md
│ │ │ │ │ ├── ARCs:specs:arc-0015.md
│ │ │ │ │ ├── ARCs:specs:arc-0016.md
│ │ │ │ │ ├── ARCs:specs:arc-0018.md
│ │ │ │ │ ├── ARCs:specs:arc-0019.md
│ │ │ │ │ ├── ARCs:specs:arc-0020.md
│ │ │ │ │ ├── ARCs:specs:arc-0021.md
│ │ │ │ │ ├── ARCs:specs:arc-0022.md
│ │ │ │ │ ├── ARCs:specs:arc-0023.md
│ │ │ │ │ ├── ARCs:specs:arc-0025.md
│ │ │ │ │ ├── ARCs:specs:arc-0026.md
│ │ │ │ │ ├── ARCs:specs:arc-0028.md
│ │ │ │ │ ├── ARCs:specs:arc-0032.md
│ │ │ │ │ ├── ARCs:specs:arc-0033.md
│ │ │ │ │ ├── ARCs:specs:arc-0034.md
│ │ │ │ │ ├── ARCs:specs:arc-0035.md
│ │ │ │ │ ├── ARCs:specs:arc-0036.md
│ │ │ │ │ ├── ARCs:specs:arc-0042.md
│ │ │ │ │ ├── ARCs:specs:arc-0047.md
│ │ │ │ │ ├── ARCs:specs:arc-0048.md
│ │ │ │ │ ├── ARCs:specs:arc-0049.md
│ │ │ │ │ ├── ARCs:specs:arc-0054.md
│ │ │ │ │ ├── ARCs:specs:arc-0055.md
│ │ │ │ │ ├── ARCs:specs:arc-0056.md
│ │ │ │ │ ├── ARCs:specs:arc-0059.md
│ │ │ │ │ ├── ARCs:specs:arc-0062.md
│ │ │ │ │ ├── ARCs:specs:arc-0065.md
│ │ │ │ │ ├── ARCs:specs:arc-0069.md
│ │ │ │ │ ├── ARCs:specs:arc-0072.md
│ │ │ │ │ ├── ARCs:specs:arc-0073.md
│ │ │ │ │ ├── ARCs:specs:arc-0074.md
│ │ │ │ │ ├── ARCs:specs:arc-0076.md
│ │ │ │ │ ├── ARCs:specs:arc-0078.md
│ │ │ │ │ ├── ARCs:specs:arc-0079.md
│ │ │ │ │ ├── ARCs:specs:arc-0200.md
│ │ │ │ │ ├── clis_index.md
│ │ │ │ │ ├── developer:docs:about.md
│ │ │ │ │ ├── developer:docs:clis:algokey:algokey.md
│ │ │ │ │ ├── developer:docs:clis:algokey:generate.md
│ │ │ │ │ ├── developer:docs:clis:algokey:import.md
│ │ │ │ │ ├── developer:docs:clis:algokey:multisig:append-auth-addr.md
│ │ │ │ │ ├── developer:docs:clis:algokey:multisig:multisig.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:info.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:part.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:reparent.md
│ │ │ │ │ ├── developer:docs:clis:algokey:sign.md
│ │ │ │ │ ├── developer:docs:clis:conduit:conduit.md
│ │ │ │ │ ├── developer:docs:clis:conduit:init.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:exporters.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:importers.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:list.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:processors.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:diagcfg.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:disable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:enable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:metric.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:status.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:disable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:enable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:endpoint.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:name.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:status.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:telemetry.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:restart.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:start.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:status.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:stop.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:wait.md
│ │ │ │ │ ├── developer:docs:clis:goal:protocols.md
│ │ │ │ │ ├── developer:docs:clis:goal:report.md
│ │ │ │ │ ├── developer:docs:clis:goal:version.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:list.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:new.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:wallet.md
│ │ │ │ │ ├── developer:docs:clis:indexer:api-config.md
│ │ │ │ │ ├── developer:docs:clis:indexer:daemon.md
│ │ │ │ │ ├── developer:docs:clis:indexer:indexer.md
│ │ │ │ │ ├── developer:docs:clis:indexer:util:util.md
│ │ │ │ │ ├── developer:docs:clis:indexer:util:validator.md
│ │ │ │ │ ├── developer:docs:clis:kmd.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:debug.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:remote.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:tealdbg.md
│ │ │ │ │ ├── developer:docs:details:accounts:create.md
│ │ │ │ │ ├── developer:docs:details:accounts:index.md
│ │ │ │ │ ├── developer:docs:details:accounts:rekey.md
│ │ │ │ │ ├── developer:docs:details:algorand_consensus.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:betanet.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:index.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:mainnet.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:testnet.md
│ │ │ │ │ ├── developer:docs:details:asa.md
│ │ │ │ │ ├── developer:docs:details:atc.md
│ │ │ │ │ ├── developer:docs:details:atomic_transfers.md
│ │ │ │ │ ├── developer:docs:details:conduit.md
│ │ │ │ │ ├── developer:docs:details:crust.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:guidelines.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:jsonspec.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v1.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v10.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v2.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v3.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v4.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v5.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v6.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v7.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v8.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v9.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:specification.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:ABI:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:create.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:innertx.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:state.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:txs.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:debugging.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:apps.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:smartsigs.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:guidelines.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:modes.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:walkthrough.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:beaker.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:pyteal.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:python.md
│ │ │ │ │ ├── developer:docs:details:encoding.md
│ │ │ │ │ ├── developer:docs:details:ethereum_to_algorand.md
│ │ │ │ │ ├── developer:docs:details:index.md
│ │ │ │ │ ├── developer:docs:details:indexer.md
│ │ │ │ │ ├── developer:docs:details:parameter_tables.md
│ │ │ │ │ ├── developer:docs:details:stateproofs:index.md
│ │ │ │ │ ├── developer:docs:details:stateproofs:light_client.md
│ │ │ │ │ ├── developer:docs:details:technical_faq.md
│ │ │ │ │ ├── developer:docs:details:transactions:index.md
│ │ │ │ │ ├── developer:docs:details:transactions:offline_transactions.md
│ │ │ │ │ ├── developer:docs:details:transactions:payment_prompts.md
│ │ │ │ │ ├── developer:docs:details:transactions:signatures.md
│ │ │ │ │ ├── developer:docs:details:transactions:transactions.md
│ │ │ │ │ ├── developer:docs:details:useful_resources.md
│ │ │ │ │ ├── developer:docs:get-started:algokit.md
│ │ │ │ │ ├── developer:docs:get-started:basics:what_is_blockchain.md
│ │ │ │ │ ├── developer:docs:get-started:basics:whats_a_dapp.md
│ │ │ │ │ ├── developer:docs:get-started:basics:where_to_start.md
│ │ │ │ │ ├── developer:docs:get-started:basics:why_algorand.md
│ │ │ │ │ ├── developer:docs:get-started:tokenization:ft.md
│ │ │ │ │ ├── developer:docs:get-started:tokenization:nft.md
│ │ │ │ │ ├── developer:docs:index.md
│ │ │ │ │ ├── developer:docs:rest-apis:algod.md
│ │ │ │ │ ├── developer:docs:rest-apis:indexer.md
│ │ │ │ │ ├── developer:docs:rest-apis:kmd.md
│ │ │ │ │ ├── developer:docs:rest-apis:restendpoints.md
│ │ │ │ │ ├── developer:docs:run-a-node:operations:catchup.md
│ │ │ │ │ ├── developer:docs:run-a-node:operations:switch_networks.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:generate_keys.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:index.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:offline.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:online.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:renew.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:artifacts.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:config.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:relay.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:telemetry-config.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:indexer.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:install.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:node-troubleshooting.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:types.md
│ │ │ │ │ ├── developer:docs:sdks:go:index.md
│ │ │ │ │ ├── developer:docs:sdks:index.md
│ │ │ │ │ ├── developer:docs:sdks:java:index.md
│ │ │ │ │ ├── developer:docs:sdks:javascript:index.md
│ │ │ │ │ ├── developer:docs:sdks:python:index.md
│ │ │ │ │ ├── developer:python:code:example:accounts.md
│ │ │ │ │ ├── developer:python:code:example:arc4_types.md
│ │ │ │ │ ├── developer:python:code:example:assets.md
│ │ │ │ │ ├── developer:python:code:example:box_storage.md
│ │ │ │ │ ├── developer:python:code:example:control_flow.md
│ │ │ │ │ ├── developer:python:code:example:crypto:merkle_tree.md
│ │ │ │ │ ├── developer:python:code:example:defi:amm.md
│ │ │ │ │ ├── developer:python:code:example:defi:auction.md
│ │ │ │ │ ├── developer:python:code:example:defi:htlc_logicsig.md
│ │ │ │ │ ├── developer:python:code:example:defi:marketplace.md
│ │ │ │ │ ├── developer:python:code:example:events:arc28_events.md
│ │ │ │ │ ├── developer:python:code:example:global_storage.md
│ │ │ │ │ ├── developer:python:code:example:governance:simple_voting.md
│ │ │ │ │ ├── developer:python:code:example:hello_world.md
│ │ │ │ │ ├── developer:python:code:example:inner_transactions.md
│ │ │ │ │ ├── developer:python:code:example:local_storage.md
│ │ │ │ │ ├── developer:python:code:example:nft:proof_of_attendance.md
│ │ │ │ │ ├── developer:python:code:example:privacy:zk_whitelist.md
│ │ │ │ │ ├── developer:python:code:example:scratch_storage.md
│ │ │ │ │ ├── developer:python:code:example:self_payment.md
│ │ │ │ │ ├── developer:python:code:example:struct_in_box.md
│ │ │ │ │ ├── developer:python:code:example:subsidize_app_call.md
│ │ │ │ │ ├── developer:python:code:example:transactions.md
│ │ │ │ │ ├── developer:python:code:example:utility:calculator.md
│ │ │ │ │ ├── devportal-code-examples:projects:python-contract-examples:README.md
│ │ │ │ │ ├── devportal-code-examples:README.md
│ │ │ │ │ ├── docs:.walletconnect:index.md
│ │ │ │ │ ├── docs:.walletconnect:walletconnect-schema.md
│ │ │ │ │ ├── docs:README.md
│ │ │ │ │ ├── docs:scripts:example_tracker:example_list.md
│ │ │ │ │ ├── docs:scripts:README.md
│ │ │ │ │ ├── index.md
│ │ │ │ │ ├── liquid_auth_index.md
│ │ │ │ │ ├── liquid-auth:ARCHITECTURE.md
│ │ │ │ │ ├── liquid-auth:decisions:1-Service-Authentication.md
│ │ │ │ │ ├── liquid-auth:decisions:2-Bidirectional-Communication.md
│ │ │ │ │ ├── liquid-auth:decisions:3-Peer-to-Peer-Signaling.md
│ │ │ │ │ ├── liquid-auth:decisions:4-Fido-Extension.md
│ │ │ │ │ ├── liquid-auth:decisions:README.md
│ │ │ │ │ ├── liquid-auth:docs:architecture.md
│ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:authenticate.md
│ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:register.md
│ │ │ │ │ ├── liquid-auth:docs:clients:browser:authentication.md
│ │ │ │ │ ├── liquid-auth:docs:clients:browser:example.md
│ │ │ │ │ ├── liquid-auth:docs:introduction.md
│ │ │ │ │ ├── liquid-auth:docs:README.md
│ │ │ │ │ ├── liquid-auth:docs:server:environment-variables.md
│ │ │ │ │ ├── liquid-auth:docs:server:integrations.md
│ │ │ │ │ ├── liquid-auth:docs:server:introduction.md
│ │ │ │ │ ├── liquid-auth:docs:server:running-locally.md
│ │ │ │ │ ├── liquid-auth:README.md
│ │ │ │ │ ├── liquid-auth:SEQUENCE.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md
│ │ │ │ │ ├── liquid-auth:sites:express-dapp:README.md
│ │ │ │ │ ├── liquid-auth:VISION.md
│ │ │ │ │ ├── puya_index.md
│ │ │ │ │ ├── puya:docs:algopy_testing:index.md
│ │ │ │ │ ├── puya:docs:api-algopy.arc4.md
│ │ │ │ │ ├── puya:docs:api-algopy.gtxn.md
│ │ │ │ │ ├── puya:docs:api-algopy.itxn.md
│ │ │ │ │ ├── puya:docs:api-algopy.md
│ │ │ │ │ ├── puya:docs:api-algopy.op.md
│ │ │ │ │ ├── puya:docs:api.md
│ │ │ │ │ ├── puya:docs:compiler.md
│ │ │ │ │ ├── puya:docs:index.md
│ │ │ │ │ ├── puya:docs:language-guide.md
│ │ │ │ │ ├── puya:docs:lg-arc28.md
│ │ │ │ │ ├── puya:docs:lg-arc4.md
│ │ │ │ │ ├── puya:docs:lg-builtins.md
│ │ │ │ │ ├── puya:docs:lg-calling-apps.md
│ │ │ │ │ ├── puya:docs:lg-compile.md
│ │ │ │ │ ├── puya:docs:lg-control.md
│ │ │ │ │ ├── puya:docs:lg-errors.md
│ │ │ │ │ ├── puya:docs:lg-logs.md
│ │ │ │ │ ├── puya:docs:lg-modules.md
│ │ │ │ │ ├── puya:docs:lg-opcode-budget.md
│ │ │ │ │ ├── puya:docs:lg-ops.md
│ │ │ │ │ ├── puya:docs:lg-storage.md
│ │ │ │ │ ├── puya:docs:lg-structure.md
│ │ │ │ │ ├── puya:docs:lg-transactions.md
│ │ │ │ │ ├── puya:docs:lg-types.md
│ │ │ │ │ ├── puya:docs:lg-unsupported-python-features.md
│ │ │ │ │ ├── puya:docs:principles.md
│ │ │ │ │ ├── puya:examples:auction:README.md
│ │ │ │ │ ├── puya:python:testing:docs:algopy.md
│ │ │ │ │ ├── puya:python:testing:docs:api.md
│ │ │ │ │ ├── puya:python:testing:docs:coverage.md
│ │ │ │ │ ├── puya:python:testing:docs:examples.md
│ │ │ │ │ ├── puya:python:testing:docs:faq.md
│ │ │ │ │ ├── puya:python:testing:docs:index.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:arc4-types.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:avm-types.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:concepts.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:contract-testing.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:index.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:opcodes.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:signature-testing.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:state-management.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:subroutines.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:transactions.md
│ │ │ │ │ ├── puya:python:testing:examples:README.md
│ │ │ │ │ ├── puya:python:testing:README.md
│ │ │ │ │ ├── puya:README.md
│ │ │ │ │ ├── puya:src:puya:ARCHITECTURE.md
│ │ │ │ │ ├── puya:src:puyapy:_typeshed:README.md
│ │ │ │ │ ├── puya:src:puyapy:_vendor:mypy:typeshed:stdlib:_typeshed:README.md
│ │ │ │ │ ├── puya:src:puyapy:awst_build:README.md
│ │ │ │ │ ├── puya:stubs:README.md
│ │ │ │ │ ├── puya:tests:test_expected_output:README.md
│ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-bytes-and-strings.md
│ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-integer-types.md
│ │ │ │ │ ├── puya:typescript:docs:README.md
│ │ │ │ │ ├── puya:typescript:packages:algo-ts:readme.md
│ │ │ │ │ ├── puya:typescript:README.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIAddressType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayDynamicType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayStaticType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIBoolType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIByteType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIContract.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIInterface.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIMethod.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIStringType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABITupleType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIUfixedType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIUintType.md
│ │ │ │ │ ├── SDKs:javascript:classes:Algodv2.md
│ │ │ │ │ ├── SDKs:javascript:classes:AtomicTransactionComposer.md
│ │ │ │ │ ├── SDKs:javascript:classes:DryrunResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:Indexer.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Account.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountParticipation.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountStateDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Application.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalState.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalStatesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogData.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Asset.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetBalancesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHoldingsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Block.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockRewards.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeState.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeVote.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Box.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxDescriptor.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ErrorResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDeltaKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HashFactory.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HealthCheck.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.IndexerStateProofMessage.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MerkleArrayProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MiniAssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ParticipationUpdates.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofFields.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofParticipant.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofReveal.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSigSlot.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofTracking.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofVerifier.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Transaction.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionApplication.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetConfig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetFreeze.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetTransfer.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionKeyreg.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionPayment.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureLogicsig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisigSubsignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionStateProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:Kmd.md
│ │ │ │ │ ├── SDKs:javascript:classes:LogicSig.md
│ │ │ │ │ ├── SDKs:javascript:classes:LogicSigAccount.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Account.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountApplicationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetsInformationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountParticipation.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountStateDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AppCallLogs.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Application.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationInitialStates.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationKVStorage.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalState.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateOperation.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Asset.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHoldingReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockHashResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockLogsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockTxidsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Box.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxDescriptor.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BuildVersion.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.CompileResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DisassembleResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunRequest.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunSource.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunState.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunTxnResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ErrorResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDeltaKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetBlockTimeStampOffsetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetSyncRoundResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.KvDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LedgerStateDeltaForTransactionGroup.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LightBlockHeaderProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.NodeStatusResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PostTransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ScratchChange.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateInitialStates.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequest.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequestTransactionGroup.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTraceConfig.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionGroupResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationEvalOverrides.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationOpcodeTraceUnit.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationTransactionExecTrace.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProofMessage.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SupplyResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionParametersResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionProofResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Version.md
│ │ │ │ │ ├── SDKs:javascript:classes:SourceMap.md
│ │ │ │ │ ├── SDKs:javascript:classes:Transaction.md
│ │ │ │ │ ├── SDKs:javascript:enums:ABIReferenceType.md
│ │ │ │ │ ├── SDKs:javascript:enums:ABITransactionType.md
│ │ │ │ │ ├── SDKs:javascript:enums:AtomicTransactionComposerStatus.md
│ │ │ │ │ ├── SDKs:javascript:enums:IntDecoding.md
│ │ │ │ │ ├── SDKs:javascript:enums:OnApplicationComplete.md
│ │ │ │ │ ├── SDKs:javascript:enums:TransactionType.md
│ │ │ │ │ ├── SDKs:javascript:examples:README.md
│ │ │ │ │ ├── SDKs:javascript:FAQ.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworkInfo.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworks.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIInterfaceParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodArgParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodReturnParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIResult.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:Account.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:Address.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:AlgodTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClient.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientError.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientResponse.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BoxReference.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:CustomTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedAssetParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedBoxReference.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedGlobalStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLocalStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSigAccount.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedMultisig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSignedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSubsig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:IndexerTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:KMDTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:MultisigMetadata.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:SignedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:SuggestedParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionWithSigner.md
│ │ │ │ │ ├── SDKs:javascript:modules:indexerModels.md
│ │ │ │ │ ├── SDKs:javascript:modules:modelsv2.md
│ │ │ │ │ ├── SDKs:javascript:modules.md
│ │ │ │ │ ├── SDKs:javascript:README.md
│ │ │ │ │ ├── SDKs:python:algosdk:v2client:harness:README.md
│ │ │ │ │ ├── SDKs:python:examples:README.md
│ │ │ │ │ ├── SDKs:python:README.md
│ │ │ │ │ ├── tealscript:examples_amm_README.md
│ │ │ │ │ ├── tealscript:examples_auction_README.md
│ │ │ │ │ ├── tealscript:examples_big_box_README.md
│ │ │ │ │ ├── tealscript:examples_itxns_README.md
│ │ │ │ │ ├── tealscript:examples_lsig_with_app_README.md
│ │ │ │ │ ├── tealscript:examples_reti_README.md
│ │ │ │ │ ├── tealscript:FEATURES.md
│ │ │ │ │ ├── tealscript:guides_atomic_txn.md
│ │ │ │ │ ├── tealscript:guides_features.md
│ │ │ │ │ ├── tealscript:guides_getting_started.md
│ │ │ │ │ ├── tealscript:guides_inner_transactions.md
│ │ │ │ │ ├── tealscript:guides_lifecycle.md
│ │ │ │ │ ├── tealscript:guides_math.md
│ │ │ │ │ ├── tealscript:guides_methods.md
│ │ │ │ │ ├── tealscript:guides_multiple_contracts.md
│ │ │ │ │ ├── tealscript:guides_pyteal.md
│ │ │ │ │ ├── tealscript:guides_storage.md
│ │ │ │ │ ├── tealscript:guides_Supported Types_arrays.md
│ │ │ │ │ ├── tealscript:guides_Supported Types_numbers.md
│ │ │ │ │ ├── TEALScript:README.md
│ │ │ │ │ ├── tealscript:tests_test_package_README.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0001-intro.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0002-init.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0003-contract.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0004-artifacts.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0005-hello.md
│ │ │ │ │ └── tealscript:tutorials_Hello World_0006-test.md
│ │ │ │ └── taxonomy-categories
│ │ │ │ ├── algokit-utils.json
│ │ │ │ ├── algokit.json
│ │ │ │ ├── arcs.json
│ │ │ │ ├── clis.json
│ │ │ │ ├── details.json
│ │ │ │ ├── developers.json
│ │ │ │ ├── liquid-auth.json
│ │ │ │ ├── nodes.json
│ │ │ │ ├── puya.json
│ │ │ │ ├── python.json
│ │ │ │ ├── sdks.json
│ │ │ │ └── tealscript.json
│ │ │ └── wallet
│ │ │ └── index.ts
│ │ ├── tools
│ │ │ ├── accountManager.ts
│ │ │ ├── algodManager.ts
│ │ │ ├── apiManager
│ │ │ │ ├── algod
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── asset.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── transaction.ts
│ │ │ │ ├── example
│ │ │ │ │ ├── get-balance.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── indexer
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── asset.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── transaction.ts
│ │ │ │ ├── nfd
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tinyman
│ │ │ │ │ ├── analytics.ts
│ │ │ │ │ ├── bootstrap.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── liquidity.ts
│ │ │ │ │ ├── opt_in.ts
│ │ │ │ │ ├── pool.ts
│ │ │ │ │ ├── remove_liquidity.ts
│ │ │ │ │ └── swap.ts
│ │ │ │ ├── ultrade
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── market.ts
│ │ │ │ │ ├── system.ts
│ │ │ │ │ └── wallet.ts
│ │ │ │ └── vestige
│ │ │ │ ├── assets.ts
│ │ │ │ ├── balances.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── networks.ts
│ │ │ │ ├── notes.ts
│ │ │ │ ├── pools.ts
│ │ │ │ ├── protocols.ts
│ │ │ │ ├── swaps.ts
│ │ │ │ └── vaults.ts
│ │ │ ├── arc26Manager.ts
│ │ │ ├── index.ts
│ │ │ ├── knowledgeManager.ts
│ │ │ ├── transactionManager
│ │ │ │ ├── accountTransactions.ts
│ │ │ │ ├── appTransactions
│ │ │ │ │ ├── callTxn.ts
│ │ │ │ │ ├── clearTxn.ts
│ │ │ │ │ ├── closeOutTxn.ts
│ │ │ │ │ ├── createTxn.ts
│ │ │ │ │ ├── deleteTxn.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── optInTxn.ts
│ │ │ │ │ ├── test
│ │ │ │ │ │ ├── counter_approval.teal
│ │ │ │ │ │ ├── counter_clear.teal
│ │ │ │ │ │ ├── storage_test_approval_v2.teal
│ │ │ │ │ │ ├── storage_test_approval.teal
│ │ │ │ │ │ └── storage_test_clear.teal
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── updateTxn.ts
│ │ │ │ ├── assetTransactions.ts
│ │ │ │ ├── generalTransaction.ts
│ │ │ │ └── index.ts
│ │ │ └── utilityManager.ts
│ │ ├── types.ts
│ │ └── utils
│ │ └── responseProcessor.ts
│ ├── tests
│ │ ├── resources
│ │ │ ├── algod
│ │ │ │ ├── account.test.ts
│ │ │ │ ├── application.test.ts
│ │ │ │ ├── asset.test.ts
│ │ │ │ └── transaction.test.ts
│ │ │ └── indexer
│ │ │ ├── account.test.ts
│ │ │ ├── application.test.ts
│ │ │ ├── asset.test.ts
│ │ │ └── transaction.test.ts
│ │ └── tools
│ │ ├── accountManager.test.ts
│ │ ├── algodManager.test.ts
│ │ ├── apiManager
│ │ │ └── example
│ │ │ └── get-balance.test.ts
│ │ ├── transactionManager
│ │ │ ├── accountTransactionManager.test.ts
│ │ │ ├── appTransactionManager.test.ts
│ │ │ ├── assetTransactionManager.test.ts
│ │ │ ├── generalTransactionManager.test.ts
│ │ │ └── transactionManager.test.ts
│ │ └── utilityManager.test.ts
│ └── tsconfig.json
├── README.md
├── rename_files.sh
└── tsconfig.json
```
# Files
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:indexerModels.TransactionApplication.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / TransactionApplication
2 |
3 | # Class: TransactionApplication
4 |
5 | [indexerModels](../modules/indexerModels.md).TransactionApplication
6 |
7 | Fields for application transactions.
8 | Definition:
9 | data/transactions/application.go : ApplicationCallTxnFields
10 |
11 | ## Hierarchy
12 |
13 | - `default`
14 |
15 | ↳ **`TransactionApplication`**
16 |
17 | ## Table of contents
18 |
19 | ### Constructors
20 |
21 | - [constructor](indexerModels.TransactionApplication.md#constructor)
22 |
23 | ### Properties
24 |
25 | - [accounts](indexerModels.TransactionApplication.md#accounts)
26 | - [applicationArgs](indexerModels.TransactionApplication.md#applicationargs)
27 | - [applicationId](indexerModels.TransactionApplication.md#applicationid)
28 | - [approvalProgram](indexerModels.TransactionApplication.md#approvalprogram)
29 | - [attribute\_map](indexerModels.TransactionApplication.md#attribute_map)
30 | - [clearStateProgram](indexerModels.TransactionApplication.md#clearstateprogram)
31 | - [extraProgramPages](indexerModels.TransactionApplication.md#extraprogrampages)
32 | - [foreignApps](indexerModels.TransactionApplication.md#foreignapps)
33 | - [foreignAssets](indexerModels.TransactionApplication.md#foreignassets)
34 | - [globalStateSchema](indexerModels.TransactionApplication.md#globalstateschema)
35 | - [localStateSchema](indexerModels.TransactionApplication.md#localstateschema)
36 | - [onCompletion](indexerModels.TransactionApplication.md#oncompletion)
37 |
38 | ### Methods
39 |
40 | - [get\_obj\_for\_encoding](indexerModels.TransactionApplication.md#get_obj_for_encoding)
41 | - [from\_obj\_for\_encoding](indexerModels.TransactionApplication.md#from_obj_for_encoding)
42 |
43 | ## Constructors
44 |
45 | ### constructor
46 |
47 | • **new TransactionApplication**(`«destructured»`)
48 |
49 | Creates a new `TransactionApplication` object.
50 |
51 | #### Parameters
52 |
53 | | Name | Type |
54 | | :------ | :------ |
55 | | `«destructured»` | `Object` |
56 | | › `accounts?` | `string`[] |
57 | | › `applicationArgs?` | `Uint8Array`[] |
58 | | › `applicationId` | `number` \| `bigint` |
59 | | › `approvalProgram?` | `string` \| `Uint8Array` |
60 | | › `clearStateProgram?` | `string` \| `Uint8Array` |
61 | | › `extraProgramPages?` | `number` \| `bigint` |
62 | | › `foreignApps?` | (`number` \| `bigint`)[] |
63 | | › `foreignAssets?` | (`number` \| `bigint`)[] |
64 | | › `globalStateSchema?` | [`StateSchema`](indexerModels.StateSchema.md) |
65 | | › `localStateSchema?` | [`StateSchema`](indexerModels.StateSchema.md) |
66 | | › `onCompletion?` | `string` |
67 |
68 | #### Overrides
69 |
70 | BaseModel.constructor
71 |
72 | #### Defined in
73 |
74 | client/v2/indexer/models/types.ts:4763
75 |
76 | ## Properties
77 |
78 | ### accounts
79 |
80 | • `Optional` **accounts**: `string`[]
81 |
82 | (apat) List of accounts in addition to the sender that may be accessed from the
83 | application's approval-program and clear-state-program.
84 |
85 | #### Defined in
86 |
87 | client/v2/indexer/models/types.ts:4653
88 |
89 | ___
90 |
91 | ### applicationArgs
92 |
93 | • `Optional` **applicationArgs**: `Uint8Array`[]
94 |
95 | (apaa) transaction specific arguments accessed from the application's
96 | approval-program and clear-state-program.
97 |
98 | #### Defined in
99 |
100 | client/v2/indexer/models/types.ts:4659
101 |
102 | ___
103 |
104 | ### applicationId
105 |
106 | • **applicationId**: `number` \| `bigint`
107 |
108 | (apid) ID of the application being configured or empty if creating.
109 |
110 | #### Defined in
111 |
112 | client/v2/indexer/models/types.ts:4647
113 |
114 | ___
115 |
116 | ### approvalProgram
117 |
118 | • `Optional` **approvalProgram**: `Uint8Array`
119 |
120 | (apap) Logic executed for every application transaction, except when
121 | on-completion is set to "clear". It can read and write global state for the
122 | application, as well as account-specific local state. Approval programs may
123 | reject the transaction.
124 |
125 | #### Defined in
126 |
127 | client/v2/indexer/models/types.ts:4667
128 |
129 | ___
130 |
131 | ### attribute\_map
132 |
133 | • **attribute\_map**: `Record`\<`string`, `string`\>
134 |
135 | #### Inherited from
136 |
137 | BaseModel.attribute\_map
138 |
139 | #### Defined in
140 |
141 | client/v2/basemodel.ts:56
142 |
143 | ___
144 |
145 | ### clearStateProgram
146 |
147 | • `Optional` **clearStateProgram**: `Uint8Array`
148 |
149 | (apsu) Logic executed for application transactions with on-completion set to
150 | "clear". It can read and write global state for the application, as well as
151 | account-specific local state. Clear state programs cannot reject the
152 | transaction.
153 |
154 | #### Defined in
155 |
156 | client/v2/indexer/models/types.ts:4675
157 |
158 | ___
159 |
160 | ### extraProgramPages
161 |
162 | • `Optional` **extraProgramPages**: `number` \| `bigint`
163 |
164 | (epp) specifies the additional app program len requested in pages.
165 |
166 | #### Defined in
167 |
168 | client/v2/indexer/models/types.ts:4680
169 |
170 | ___
171 |
172 | ### foreignApps
173 |
174 | • `Optional` **foreignApps**: (`number` \| `bigint`)[]
175 |
176 | (apfa) Lists the applications in addition to the application-id whose global
177 | states may be accessed by this application's approval-program and
178 | clear-state-program. The access is read-only.
179 |
180 | #### Defined in
181 |
182 | client/v2/indexer/models/types.ts:4687
183 |
184 | ___
185 |
186 | ### foreignAssets
187 |
188 | • `Optional` **foreignAssets**: (`number` \| `bigint`)[]
189 |
190 | (apas) lists the assets whose parameters may be accessed by this application's
191 | ApprovalProgram and ClearStateProgram. The access is read-only.
192 |
193 | #### Defined in
194 |
195 | client/v2/indexer/models/types.ts:4693
196 |
197 | ___
198 |
199 | ### globalStateSchema
200 |
201 | • `Optional` **globalStateSchema**: [`StateSchema`](indexerModels.StateSchema.md)
202 |
203 | Represents a (apls) local-state or (apgs) global-state schema. These schemas
204 | determine how much storage may be used in a local-state or global-state for an
205 | application. The more space used, the larger minimum balance must be maintained
206 | in the account holding the data.
207 |
208 | #### Defined in
209 |
210 | client/v2/indexer/models/types.ts:4701
211 |
212 | ___
213 |
214 | ### localStateSchema
215 |
216 | • `Optional` **localStateSchema**: [`StateSchema`](indexerModels.StateSchema.md)
217 |
218 | Represents a (apls) local-state or (apgs) global-state schema. These schemas
219 | determine how much storage may be used in a local-state or global-state for an
220 | application. The more space used, the larger minimum balance must be maintained
221 | in the account holding the data.
222 |
223 | #### Defined in
224 |
225 | client/v2/indexer/models/types.ts:4709
226 |
227 | ___
228 |
229 | ### onCompletion
230 |
231 | • `Optional` **onCompletion**: `string`
232 |
233 | (apan) defines the what additional actions occur with the transaction.
234 | Valid types:
235 | * noop
236 | * optin
237 | * closeout
238 | * clear
239 | * update
240 | * update
241 | * delete
242 |
243 | #### Defined in
244 |
245 | client/v2/indexer/models/types.ts:4722
246 |
247 | ## Methods
248 |
249 | ### get\_obj\_for\_encoding
250 |
251 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
252 |
253 | Get an object ready for encoding to either JSON or msgpack.
254 |
255 | #### Parameters
256 |
257 | | Name | Type | Default value | Description |
258 | | :------ | :------ | :------ | :------ |
259 | | `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. |
260 |
261 | #### Returns
262 |
263 | `Record`\<`string`, `any`\>
264 |
265 | #### Inherited from
266 |
267 | BaseModel.get\_obj\_for\_encoding
268 |
269 | #### Defined in
270 |
271 | client/v2/basemodel.ts:65
272 |
273 | ___
274 |
275 | ### from\_obj\_for\_encoding
276 |
277 | ▸ `Static` **from_obj_for_encoding**(`data`): [`TransactionApplication`](indexerModels.TransactionApplication.md)
278 |
279 | #### Parameters
280 |
281 | | Name | Type |
282 | | :------ | :------ |
283 | | `data` | `Record`\<`string`, `any`\> |
284 |
285 | #### Returns
286 |
287 | [`TransactionApplication`](indexerModels.TransactionApplication.md)
288 |
289 | #### Defined in
290 |
291 | client/v2/indexer/models/types.ts:4823
292 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/transfer](../modules/types_transfer.md) / AlgoTransferParams
2 |
3 | # Interface: AlgoTransferParams
4 |
5 | [types/transfer](../modules/types_transfer.md).AlgoTransferParams
6 |
7 | **`Deprecated`**
8 |
9 | Parameters for `transferAlgos` call.
10 |
11 | ## Hierarchy
12 |
13 | - [`SendTransactionParams`](types_transaction.SendTransactionParams.md)
14 |
15 | ↳ **`AlgoTransferParams`**
16 |
17 | ## Table of contents
18 |
19 | ### Properties
20 |
21 | - [amount](types_transfer.AlgoTransferParams.md#amount)
22 | - [atc](types_transfer.AlgoTransferParams.md#atc)
23 | - [fee](types_transfer.AlgoTransferParams.md#fee)
24 | - [from](types_transfer.AlgoTransferParams.md#from)
25 | - [lease](types_transfer.AlgoTransferParams.md#lease)
26 | - [maxFee](types_transfer.AlgoTransferParams.md#maxfee)
27 | - [maxRoundsToWaitForConfirmation](types_transfer.AlgoTransferParams.md#maxroundstowaitforconfirmation)
28 | - [note](types_transfer.AlgoTransferParams.md#note)
29 | - [populateAppCallResources](types_transfer.AlgoTransferParams.md#populateappcallresources)
30 | - [skipSending](types_transfer.AlgoTransferParams.md#skipsending)
31 | - [skipWaiting](types_transfer.AlgoTransferParams.md#skipwaiting)
32 | - [suppressLog](types_transfer.AlgoTransferParams.md#suppresslog)
33 | - [to](types_transfer.AlgoTransferParams.md#to)
34 | - [transactionParams](types_transfer.AlgoTransferParams.md#transactionparams)
35 |
36 | ## Properties
37 |
38 | ### amount
39 |
40 | • **amount**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
41 |
42 | The amount to send
43 |
44 | #### Defined in
45 |
46 | [src/types/transfer.ts:14](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L14)
47 |
48 | ___
49 |
50 | ### atc
51 |
52 | • `Optional` **atc**: `AtomicTransactionComposer`
53 |
54 | An optional `AtomicTransactionComposer` to add the transaction to, if specified then `skipSending: undefined` has the same effect as `skipSending: true`
55 |
56 | #### Inherited from
57 |
58 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[atc](types_transaction.SendTransactionParams.md#atc)
59 |
60 | #### Defined in
61 |
62 | [src/types/transaction.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L36)
63 |
64 | ___
65 |
66 | ### fee
67 |
68 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
69 |
70 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
71 |
72 | #### Inherited from
73 |
74 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[fee](types_transaction.SendTransactionParams.md#fee)
75 |
76 | #### Defined in
77 |
78 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
79 |
80 | ___
81 |
82 | ### from
83 |
84 | • **from**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
85 |
86 | The account that will send the Algo
87 |
88 | #### Defined in
89 |
90 | [src/types/transfer.ts:10](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L10)
91 |
92 | ___
93 |
94 | ### lease
95 |
96 | • `Optional` **lease**: `string` \| `Uint8Array`
97 |
98 | An (optional) [transaction lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) to apply
99 |
100 | #### Defined in
101 |
102 | [src/types/transfer.ts:20](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L20)
103 |
104 | ___
105 |
106 | ### maxFee
107 |
108 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
109 |
110 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
111 |
112 | #### Inherited from
113 |
114 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxFee](types_transaction.SendTransactionParams.md#maxfee)
115 |
116 | #### Defined in
117 |
118 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
119 |
120 | ___
121 |
122 | ### maxRoundsToWaitForConfirmation
123 |
124 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
125 |
126 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
127 |
128 | #### Inherited from
129 |
130 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxRoundsToWaitForConfirmation](types_transaction.SendTransactionParams.md#maxroundstowaitforconfirmation)
131 |
132 | #### Defined in
133 |
134 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
135 |
136 | ___
137 |
138 | ### note
139 |
140 | • `Optional` **note**: [`TransactionNote`](../modules/types_transaction.md#transactionnote)
141 |
142 | The (optional) transaction note
143 |
144 | #### Defined in
145 |
146 | [src/types/transfer.ts:18](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L18)
147 |
148 | ___
149 |
150 | ### populateAppCallResources
151 |
152 | • `Optional` **populateAppCallResources**: `boolean`
153 |
154 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
155 |
156 | #### Inherited from
157 |
158 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[populateAppCallResources](types_transaction.SendTransactionParams.md#populateappcallresources)
159 |
160 | #### Defined in
161 |
162 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
163 |
164 | ___
165 |
166 | ### skipSending
167 |
168 | • `Optional` **skipSending**: `boolean`
169 |
170 | Whether to skip signing and sending the transaction to the chain (default: transaction signed and sent to chain, unless `atc` specified)
171 | and instead just return the raw transaction, e.g. so you can add it to a group of transactions
172 |
173 | #### Inherited from
174 |
175 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipSending](types_transaction.SendTransactionParams.md#skipsending)
176 |
177 | #### Defined in
178 |
179 | [src/types/transaction.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L32)
180 |
181 | ___
182 |
183 | ### skipWaiting
184 |
185 | • `Optional` **skipWaiting**: `boolean`
186 |
187 | Whether to skip waiting for the submitted transaction (only relevant if `skipSending` is `false` or unset)
188 |
189 | #### Inherited from
190 |
191 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipWaiting](types_transaction.SendTransactionParams.md#skipwaiting)
192 |
193 | #### Defined in
194 |
195 | [src/types/transaction.ts:34](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L34)
196 |
197 | ___
198 |
199 | ### suppressLog
200 |
201 | • `Optional` **suppressLog**: `boolean`
202 |
203 | Whether to suppress log messages from transaction send, default: do not suppress
204 |
205 | #### Inherited from
206 |
207 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[suppressLog](types_transaction.SendTransactionParams.md#suppresslog)
208 |
209 | #### Defined in
210 |
211 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
212 |
213 | ___
214 |
215 | ### to
216 |
217 | • **to**: `string` \| [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
218 |
219 | The account / account address that will receive the Algo
220 |
221 | #### Defined in
222 |
223 | [src/types/transfer.ts:12](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L12)
224 |
225 | ___
226 |
227 | ### transactionParams
228 |
229 | • `Optional` **transactionParams**: `SuggestedParams`
230 |
231 | Optional transaction parameters
232 |
233 | #### Defined in
234 |
235 | [src/types/transfer.ts:16](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L16)
236 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / PendingTransactionResponse
2 |
3 | # Class: PendingTransactionResponse
4 |
5 | [modelsv2](../modules/modelsv2.md).PendingTransactionResponse
6 |
7 | Details about a pending transaction. If the transaction was recently confirmed,
8 | includes confirmation details like the round and reward details.
9 |
10 | ## Hierarchy
11 |
12 | - `default`
13 |
14 | ↳ **`PendingTransactionResponse`**
15 |
16 | ## Table of contents
17 |
18 | ### Constructors
19 |
20 | - [constructor](modelsv2.PendingTransactionResponse.md#constructor)
21 |
22 | ### Properties
23 |
24 | - [applicationIndex](modelsv2.PendingTransactionResponse.md#applicationindex)
25 | - [assetClosingAmount](modelsv2.PendingTransactionResponse.md#assetclosingamount)
26 | - [assetIndex](modelsv2.PendingTransactionResponse.md#assetindex)
27 | - [attribute\_map](modelsv2.PendingTransactionResponse.md#attribute_map)
28 | - [closeRewards](modelsv2.PendingTransactionResponse.md#closerewards)
29 | - [closingAmount](modelsv2.PendingTransactionResponse.md#closingamount)
30 | - [confirmedRound](modelsv2.PendingTransactionResponse.md#confirmedround)
31 | - [globalStateDelta](modelsv2.PendingTransactionResponse.md#globalstatedelta)
32 | - [innerTxns](modelsv2.PendingTransactionResponse.md#innertxns)
33 | - [localStateDelta](modelsv2.PendingTransactionResponse.md#localstatedelta)
34 | - [logs](modelsv2.PendingTransactionResponse.md#logs)
35 | - [poolError](modelsv2.PendingTransactionResponse.md#poolerror)
36 | - [receiverRewards](modelsv2.PendingTransactionResponse.md#receiverrewards)
37 | - [senderRewards](modelsv2.PendingTransactionResponse.md#senderrewards)
38 | - [txn](modelsv2.PendingTransactionResponse.md#txn)
39 |
40 | ### Methods
41 |
42 | - [get\_obj\_for\_encoding](modelsv2.PendingTransactionResponse.md#get_obj_for_encoding)
43 | - [from\_obj\_for\_encoding](modelsv2.PendingTransactionResponse.md#from_obj_for_encoding)
44 |
45 | ## Constructors
46 |
47 | ### constructor
48 |
49 | • **new PendingTransactionResponse**(`«destructured»`)
50 |
51 | Creates a new `PendingTransactionResponse` object.
52 |
53 | #### Parameters
54 |
55 | | Name | Type |
56 | | :------ | :------ |
57 | | `«destructured»` | `Object` |
58 | | › `applicationIndex?` | `number` \| `bigint` |
59 | | › `assetClosingAmount?` | `number` \| `bigint` |
60 | | › `assetIndex?` | `number` \| `bigint` |
61 | | › `closeRewards?` | `number` \| `bigint` |
62 | | › `closingAmount?` | `number` \| `bigint` |
63 | | › `confirmedRound?` | `number` \| `bigint` |
64 | | › `globalStateDelta?` | [`EvalDeltaKeyValue`](modelsv2.EvalDeltaKeyValue.md)[] |
65 | | › `innerTxns?` | [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md)[] |
66 | | › `localStateDelta?` | [`AccountStateDelta`](modelsv2.AccountStateDelta.md)[] |
67 | | › `logs?` | `Uint8Array`[] |
68 | | › `poolError` | `string` |
69 | | › `receiverRewards?` | `number` \| `bigint` |
70 | | › `senderRewards?` | `number` \| `bigint` |
71 | | › `txn` | [`EncodedSignedTransaction`](../interfaces/EncodedSignedTransaction.md) |
72 |
73 | #### Overrides
74 |
75 | BaseModel.constructor
76 |
77 | #### Defined in
78 |
79 | client/v2/algod/models/types.ts:3948
80 |
81 | ## Properties
82 |
83 | ### applicationIndex
84 |
85 | • `Optional` **applicationIndex**: `number` \| `bigint`
86 |
87 | The application index if the transaction was found and it created an
88 | application.
89 |
90 | #### Defined in
91 |
92 | client/v2/algod/models/types.ts:3867
93 |
94 | ___
95 |
96 | ### assetClosingAmount
97 |
98 | • `Optional` **assetClosingAmount**: `number` \| `bigint`
99 |
100 | The number of the asset's unit that were transferred to the close-to address.
101 |
102 | #### Defined in
103 |
104 | client/v2/algod/models/types.ts:3872
105 |
106 | ___
107 |
108 | ### assetIndex
109 |
110 | • `Optional` **assetIndex**: `number` \| `bigint`
111 |
112 | The asset index if the transaction was found and it created an asset.
113 |
114 | #### Defined in
115 |
116 | client/v2/algod/models/types.ts:3877
117 |
118 | ___
119 |
120 | ### attribute\_map
121 |
122 | • **attribute\_map**: `Record`\<`string`, `string`\>
123 |
124 | #### Inherited from
125 |
126 | BaseModel.attribute\_map
127 |
128 | #### Defined in
129 |
130 | client/v2/basemodel.ts:56
131 |
132 | ___
133 |
134 | ### closeRewards
135 |
136 | • `Optional` **closeRewards**: `number` \| `bigint`
137 |
138 | Rewards in microalgos applied to the close remainder to account.
139 |
140 | #### Defined in
141 |
142 | client/v2/algod/models/types.ts:3882
143 |
144 | ___
145 |
146 | ### closingAmount
147 |
148 | • `Optional` **closingAmount**: `number` \| `bigint`
149 |
150 | Closing amount for the transaction.
151 |
152 | #### Defined in
153 |
154 | client/v2/algod/models/types.ts:3887
155 |
156 | ___
157 |
158 | ### confirmedRound
159 |
160 | • `Optional` **confirmedRound**: `number` \| `bigint`
161 |
162 | The round where this transaction was confirmed, if present.
163 |
164 | #### Defined in
165 |
166 | client/v2/algod/models/types.ts:3892
167 |
168 | ___
169 |
170 | ### globalStateDelta
171 |
172 | • `Optional` **globalStateDelta**: [`EvalDeltaKeyValue`](modelsv2.EvalDeltaKeyValue.md)[]
173 |
174 | Global state key/value changes for the application being executed by this
175 | transaction.
176 |
177 | #### Defined in
178 |
179 | client/v2/algod/models/types.ts:3898
180 |
181 | ___
182 |
183 | ### innerTxns
184 |
185 | • `Optional` **innerTxns**: [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md)[]
186 |
187 | Inner transactions produced by application execution.
188 |
189 | #### Defined in
190 |
191 | client/v2/algod/models/types.ts:3903
192 |
193 | ___
194 |
195 | ### localStateDelta
196 |
197 | • `Optional` **localStateDelta**: [`AccountStateDelta`](modelsv2.AccountStateDelta.md)[]
198 |
199 | Local state key/value changes for the application being executed by this
200 | transaction.
201 |
202 | #### Defined in
203 |
204 | client/v2/algod/models/types.ts:3909
205 |
206 | ___
207 |
208 | ### logs
209 |
210 | • `Optional` **logs**: `Uint8Array`[]
211 |
212 | Logs for the application being executed by this transaction.
213 |
214 | #### Defined in
215 |
216 | client/v2/algod/models/types.ts:3914
217 |
218 | ___
219 |
220 | ### poolError
221 |
222 | • **poolError**: `string`
223 |
224 | Indicates that the transaction was kicked out of this node's transaction pool
225 | (and specifies why that happened). An empty string indicates the transaction
226 | wasn't kicked out of this node's txpool due to an error.
227 |
228 | #### Defined in
229 |
230 | client/v2/algod/models/types.ts:3856
231 |
232 | ___
233 |
234 | ### receiverRewards
235 |
236 | • `Optional` **receiverRewards**: `number` \| `bigint`
237 |
238 | Rewards in microalgos applied to the receiver account.
239 |
240 | #### Defined in
241 |
242 | client/v2/algod/models/types.ts:3919
243 |
244 | ___
245 |
246 | ### senderRewards
247 |
248 | • `Optional` **senderRewards**: `number` \| `bigint`
249 |
250 | Rewards in microalgos applied to the sender account.
251 |
252 | #### Defined in
253 |
254 | client/v2/algod/models/types.ts:3924
255 |
256 | ___
257 |
258 | ### txn
259 |
260 | • **txn**: [`EncodedSignedTransaction`](../interfaces/EncodedSignedTransaction.md)
261 |
262 | The raw signed transaction.
263 |
264 | #### Defined in
265 |
266 | client/v2/algod/models/types.ts:3861
267 |
268 | ## Methods
269 |
270 | ### get\_obj\_for\_encoding
271 |
272 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
273 |
274 | Get an object ready for encoding to either JSON or msgpack.
275 |
276 | #### Parameters
277 |
278 | | Name | Type | Default value | Description |
279 | | :------ | :------ | :------ | :------ |
280 | | `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. |
281 |
282 | #### Returns
283 |
284 | `Record`\<`string`, `any`\>
285 |
286 | #### Inherited from
287 |
288 | BaseModel.get\_obj\_for\_encoding
289 |
290 | #### Defined in
291 |
292 | client/v2/basemodel.ts:65
293 |
294 | ___
295 |
296 | ### from\_obj\_for\_encoding
297 |
298 | ▸ `Static` **from_obj_for_encoding**(`data`): [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md)
299 |
300 | #### Parameters
301 |
302 | | Name | Type |
303 | | :------ | :------ |
304 | | `data` | `Record`\<`string`, `any`\> |
305 |
306 | #### Returns
307 |
308 | [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md)
309 |
310 | #### Defined in
311 |
312 | client/v2/algod/models/types.ts:4014
313 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/wallet/index.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { env } from '../../env.js';
2 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
3 | import algosdk from 'algosdk';
4 |
5 | // Get account from mnemonic
6 | const getAccountFromMnemonic = () => {
7 | if (!env.algorand_agent_wallet) {
8 | throw new McpError(
9 | ErrorCode.InvalidRequest,
10 | 'No active wallet mnemonic configured'
11 | );
12 | }
13 | return algosdk.mnemonicToSecretKey(env.algorand_agent_wallet);
14 | };
15 |
16 | // Resource definitions
17 | const resourceDefinitions = [
18 | {
19 | uri: 'algorand://wallet/secretkey',
20 | name: 'Wallet Secret Key',
21 | description: 'Secret key of the wallet in hex format',
22 | schema: {
23 | type: 'object',
24 | properties: {
25 | secretKey: { type: 'string' }
26 | }
27 | }
28 | },
29 | {
30 | uri: 'algorand://wallet/publickey',
31 | name: 'Wallet Public Key',
32 | description: 'Public key of the wallet in hex format',
33 | schema: {
34 | type: 'object',
35 | properties: {
36 | publicKey: { type: 'string' }
37 | }
38 | }
39 | },
40 | {
41 | uri: 'algorand://wallet/mnemonic',
42 | name: 'Wallet Mnemonic',
43 | description: 'Mnemonic phrase of the wallet',
44 | schema: {
45 | type: 'object',
46 | properties: {
47 | mnemonic: { type: 'string' }
48 | }
49 | }
50 | },
51 | {
52 | uri: 'algorand://wallet/address',
53 | name: 'Wallet Address',
54 | description: 'Algorand address of the wallet',
55 | schema: {
56 | type: 'object',
57 | properties: {
58 | address: { type: 'string' }
59 | }
60 | }
61 | },
62 | {
63 | uri: 'algorand://wallet/account',
64 | name: 'Wallet Account',
65 | description: 'Algorand account balance and asset holdings',
66 | schema: {
67 | type: 'object',
68 | properties: {
69 | accounts: {
70 | type: 'array',
71 | items: {
72 | type: 'object',
73 | properties: {
74 | address: { type: 'string' },
75 | amount: { type: 'number' },
76 | assets: { type: 'array' }
77 | }
78 | }
79 | }
80 | }
81 | }
82 | },
83 | {
84 | uri: 'algorand://wallet/assets',
85 | name: 'Wallet Account Assets',
86 | description: 'Asset holdings for Wallet account',
87 | schema: {
88 | type: 'object',
89 | properties: {
90 | assets: {
91 | type: 'array',
92 | items: {
93 | type: 'object',
94 | properties: {
95 | id: { type: 'number' },
96 | amount: { type: 'number' },
97 | frozen: { type: 'boolean' }
98 | }
99 | }
100 | }
101 | }
102 | }
103 | }
104 | ];
105 |
106 | // Resource module implementation
107 | export const walletResources = {
108 | canHandle: (uri: string): boolean => {
109 | return uri.startsWith('algorand://wallet/');
110 | },
111 |
112 | handle: async (uri: string) => {
113 | if (!env.algorand_agent_wallet) {
114 | throw new McpError(
115 | ErrorCode.InvalidRequest,
116 | 'Wallet resources are not available - no active wallet configured'
117 | );
118 | }
119 |
120 | switch (uri) {
121 | case 'algorand://wallet/account':
122 | try {
123 | const account = getAccountFromMnemonic();
124 |
125 | // Get account info from algod
126 | const algodClient = new algosdk.Algodv2(
127 | env.algorand_token,
128 | env.algorand_algod,
129 | env.algorand_algod_port
130 | );
131 |
132 | const accountInfo = await algodClient.accountInformation(account.addr).do();
133 |
134 | return {
135 | contents: [{
136 | uri,
137 | mimeType: 'application/json',
138 | text: JSON.stringify({
139 | accounts: [{
140 | address: account.addr,
141 | amount: accountInfo.amount,
142 | assets: accountInfo.assets || []
143 | }]
144 | }, null, 2)
145 | }]
146 | };
147 | } catch (error) {
148 | throw new McpError(
149 | ErrorCode.InternalError,
150 | `Failed to get account info: ${error instanceof Error ? error.message : String(error)}`
151 | );
152 | }
153 |
154 | case 'algorand://wallet/assets':
155 | try {
156 | const account = getAccountFromMnemonic();
157 |
158 | // Get account info from algod
159 | const algodClient = new algosdk.Algodv2(
160 | env.algorand_token,
161 | env.algorand_algod,
162 | env.algorand_algod_port
163 | );
164 |
165 | const accountInfo = await algodClient.accountInformation(account.addr).do();
166 |
167 | return {
168 | contents: [{
169 | uri,
170 | mimeType: 'application/json',
171 | text: JSON.stringify({
172 | assets: accountInfo.assets || []
173 | }, null, 2)
174 | }]
175 | };
176 | } catch (error) {
177 | throw new McpError(
178 | ErrorCode.InternalError,
179 | `Failed to get asset info: ${error instanceof Error ? error.message : String(error)}`
180 | );
181 | }
182 |
183 | case 'algorand://wallet/secretkey':
184 | try {
185 | const account = getAccountFromMnemonic();
186 | return {
187 | contents: [{
188 | uri,
189 | mimeType: 'application/json',
190 | text: JSON.stringify({
191 | secretKey: Buffer.from(account.sk).toString('hex')
192 | }, null, 2)
193 | }]
194 | };
195 | } catch (error) {
196 | throw new McpError(
197 | ErrorCode.InternalError,
198 | `Failed to get secret key: ${error instanceof Error ? error.message : String(error)}`
199 | );
200 | }
201 |
202 | case 'algorand://wallet/publickey':
203 | try {
204 | const account = getAccountFromMnemonic();
205 | return {
206 | contents: [{
207 | uri,
208 | mimeType: 'application/json',
209 | text: JSON.stringify({
210 | publicKey: Buffer.from(account.sk.slice(32)).toString('hex')
211 | }, null, 2)
212 | }]
213 | };
214 | } catch (error) {
215 | throw new McpError(
216 | ErrorCode.InternalError,
217 | `Failed to get public key: ${error instanceof Error ? error.message : String(error)}`
218 | );
219 | }
220 |
221 | case 'algorand://wallet/mnemonic':
222 | try {
223 | return {
224 | contents: [{
225 | uri,
226 | mimeType: 'application/json',
227 | text: JSON.stringify({
228 | mnemonic: env.algorand_agent_wallet
229 | }, null, 2)
230 | }]
231 | };
232 | } catch (error) {
233 | throw new McpError(
234 | ErrorCode.InternalError,
235 | `Failed to get mnemonic: ${error instanceof Error ? error.message : String(error)}`
236 | );
237 | }
238 |
239 | case 'algorand://wallet/address':
240 | try {
241 | const account = getAccountFromMnemonic();
242 | return {
243 | contents: [{
244 | uri,
245 | mimeType: 'application/json',
246 | text: JSON.stringify({
247 | address: account.addr
248 | }, null, 2)
249 | }]
250 | };
251 | } catch (error) {
252 | throw new McpError(
253 | ErrorCode.InternalError,
254 | `Failed to get address: ${error instanceof Error ? error.message : String(error)}`
255 | );
256 | }
257 |
258 | default:
259 | throw new McpError(
260 | ErrorCode.InvalidRequest,
261 | `Unknown wallet resource: ${uri}`
262 | );
263 | }
264 | },
265 |
266 | getResourceDefinitions: () => {
267 | if (!env.algorand_agent_wallet) {
268 | return [];
269 | }
270 | return resourceDefinitions;
271 | }
272 | };
273 |
```
--------------------------------------------------------------------------------
/packages/server/src/index.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2 | import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3 | import {
4 | CallToolRequestSchema,
5 | ErrorCode,
6 | ListResourcesRequestSchema,
7 | ListToolsRequestSchema,
8 | McpError,
9 | ReadResourceRequestSchema,
10 | PingRequestSchema,
11 | } from '@modelcontextprotocol/sdk/types.js';
12 | import {
13 | AccountManager,
14 | UtilityManager,
15 | TransactionManager,
16 | AlgodManager,
17 | transactionTools,
18 | apiManager,
19 | handleApiManager,
20 | arc26Manager,
21 | KnowledgeManager
22 | } from './tools/index.js';
23 | import { ResourceManager } from './resources/index.js';
24 |
25 |
26 | class AlgorandMcpServer {
27 | private server: Server;
28 | private name: string;
29 |
30 | constructor(name = 'algorand-mcp-server', version = '2.7.5') {
31 | this.name = name;
32 | this.server = new Server(
33 | {
34 | name,
35 | version,
36 | heartbeatInterval: 15000, // 15 seconds heartbeat interval
37 | requestTimeout: 60000, // 60 seconds request timeout
38 | },
39 | {
40 | capabilities: {
41 | resources: {
42 | schemas: ResourceManager.schemas
43 | },
44 | tools: {
45 | schemas: {
46 | // Account Management Tools
47 | ...AccountManager.accountTools.reduce((acc, tool) => ({
48 | ...acc,
49 | [tool.name]: tool.inputSchema
50 | }), {}),
51 | // Utility Tools
52 | ...UtilityManager.utilityTools.reduce((acc, tool) => ({
53 | ...acc,
54 | [tool.name]: tool.inputSchema
55 | }), {}),
56 | // Algod Tools
57 | ...AlgodManager.algodTools.reduce((acc, tool) => ({
58 | ...acc,
59 | [tool.name]: tool.inputSchema
60 | }), {}),
61 | // Transaction Tools
62 | ...transactionTools.reduce((acc, tool) => ({
63 | ...acc,
64 | [tool.name]: tool.inputSchema
65 | }), {}),
66 | // API Tools
67 | ...apiManager.reduce((acc, tool) => ({
68 | ...acc,
69 | [tool.name]: tool.inputSchema
70 | }), {}),
71 | // ARC-26 Tools
72 | ...arc26Manager.arc26Tools.reduce((acc, tool) => ({
73 | ...acc,
74 | [tool.name]: tool.inputSchema
75 | }), {}),
76 | // Knowledge Tools
77 | ...KnowledgeManager.knowledgeTools.reduce((acc, tool) => ({
78 | ...acc,
79 | [tool.name]: tool.inputSchema
80 | }), {})
81 | }
82 | },
83 | },
84 | }
85 | );
86 |
87 | this.setupResourceHandlers();
88 | this.setupToolHandlers();
89 | this.setupPingHandler();
90 |
91 | // Error handling
92 | this.server.onerror = (error) => console.error('[MCP Error]', error);
93 | process.on('SIGINT', async () => {
94 | await this.server.close();
95 | process.exit(0);
96 | });
97 | }
98 |
99 | private setupResourceHandlers() {
100 | // Implement resources/list method
101 | this.server.setRequestHandler(ListResourcesRequestSchema, async () => {
102 | return {
103 | resources: ResourceManager.resources.map(resource => ({
104 | uri: resource.uri,
105 | name: resource.name,
106 | description: resource.description,
107 | mimeType: 'application/json',
108 | schema: ResourceManager.schemas[resource.uri]
109 | }))
110 | };
111 | });
112 |
113 | // Handle resource reads
114 | this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
115 | if (!request.params?.uri) {
116 | throw new McpError(ErrorCode.InvalidRequest, 'URI parameter is required');
117 | }
118 | return await ResourceManager.handleResource(request.params.uri);
119 | });
120 | }
121 |
122 | private setupPingHandler() {
123 | // Handle ping requests
124 | this.server.setRequestHandler(PingRequestSchema, async (request) => {
125 | try {
126 | console.error('[MCP Debug] Received ping request:', request);
127 | const response = {};
128 | console.error('[MCP Debug] Sending ping response:', response);
129 | return response;
130 | } catch (error) {
131 | console.error('[MCP Error] Ping handler error:', error);
132 | throw new McpError(
133 | ErrorCode.InternalError,
134 | `Ping failed: ${error instanceof Error ? error.message : 'Unknown error'}`
135 | );
136 | }
137 | });
138 | }
139 |
140 | private setupToolHandlers() {
141 | // List available tools
142 | this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
143 | tools: [
144 | // Account Management Tools
145 | ...AccountManager.accountTools,
146 | // Utility Tools
147 | ...UtilityManager.utilityTools,
148 | // Algod Tools
149 | ...AlgodManager.algodTools,
150 | // Transaction Tools
151 | ...transactionTools,
152 | // API Tools
153 | ...apiManager,
154 | // ARC-26 Tools
155 | ...arc26Manager.arc26Tools,
156 | // Knowledge Tools
157 | ...KnowledgeManager.knowledgeTools,
158 | ],
159 | }));
160 |
161 | // Handle tool calls
162 | this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
163 | const { name, arguments: args = {} } = request.params;
164 |
165 | // Handle account tools
166 | if (
167 | name.startsWith('create_account') ||
168 | name.startsWith('rekey_account') ||
169 | name.startsWith('mnemonic_') ||
170 | name.startsWith('mdk_') ||
171 | name.startsWith('seed_') ||
172 | name.startsWith('secret_key_')
173 | ) {
174 | return AccountManager.handleTool(name, args);
175 | }
176 |
177 | // Handle utility tools
178 | if (
179 | name === 'ping' ||
180 | name.startsWith('validate_address') ||
181 | name.startsWith('encode_address') ||
182 | name.startsWith('decode_address') ||
183 | name.startsWith('get_application_address') ||
184 | name.startsWith('bytes_to_bigint') ||
185 | name.startsWith('bigint_to_bytes') ||
186 | name.startsWith('encode_uint64') ||
187 | name.startsWith('decode_uint64') ||
188 | name.startsWith('verify_bytes') ||
189 | name.startsWith('sign_bytes') ||
190 | name.startsWith('encode_obj') ||
191 | name.startsWith('decode_obj')
192 |
193 | ) {
194 | return UtilityManager.handleTool(name, args);
195 | }
196 |
197 | // Handle algod tools
198 | if (
199 | name.startsWith('compile_') ||
200 | name.startsWith('disassemble_') ||
201 | name.startsWith('send_raw_') ||
202 | name.startsWith('simulate_')
203 | ) {
204 | return AlgodManager.handleTool(name, args);
205 | }
206 |
207 | // Handle transaction tools
208 | if (
209 | name.startsWith('make_') ||
210 | name === 'assign_group_id' ||
211 | name === 'sign_transaction'
212 |
213 | ) {
214 | return TransactionManager.handleTool(name, args);
215 | }
216 |
217 | // Handle API tools
218 | if (name.startsWith('api_')) {
219 | return handleApiManager(name, args);
220 | }
221 |
222 | // Handle ARC-26 tools
223 | if (name === 'generate_algorand_uri') {
224 | return arc26Manager.handleTool(name, args);
225 | }
226 |
227 | // Handle knowledge tools
228 | if (name.startsWith('get_knowledge_')) {
229 | return KnowledgeManager.handleTool(name, args);
230 | }
231 |
232 | throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
233 | });
234 | }
235 |
236 | async run() {
237 | const transport = new StdioServerTransport();
238 | await this.server.connect(transport);
239 | console.error(`${this.name} running on stdio`);
240 | }
241 | }
242 | const server = new AlgorandMcpServer();
243 | server.run().catch(console.error);
244 |
```
--------------------------------------------------------------------------------
/packages/server/src/tools/apiManager/algod/transaction.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
2 | import { algodClient } from '../../../algorand-client.js';
3 | import type {
4 | PendingTransactionResponse,
5 | NodeStatusResponse,
6 | PendingTransactionsResponse
7 | } from 'algosdk/dist/types/client/v2/algod/models/types';
8 | import type { SuggestedParamsWithMinFee } from 'algosdk/dist/types/types/transactions/base';
9 |
10 | export const transactionTools = [
11 | {
12 | name: 'api_algod_get_pending_transaction',
13 | description: 'Get pending transaction information',
14 | inputSchema: {
15 | type: 'object',
16 | properties: {
17 | txId: {
18 | type: 'string',
19 | description: 'Transaction ID'
20 | }
21 | },
22 | required: ['txId']
23 | }
24 | },
25 | {
26 | name: 'api_algod_get_pending_transactions_by_address',
27 | description: 'Get pending transactions for an address',
28 | inputSchema: {
29 | type: 'object',
30 | properties: {
31 | address: {
32 | type: 'string',
33 | description: 'Account address'
34 | }
35 | },
36 | required: ['address']
37 | }
38 | },
39 | {
40 | name: 'api_algod_get_pending_transactions',
41 | description: 'Get all pending transactions',
42 | inputSchema: {
43 | type: 'object',
44 | properties: {
45 | maxTxns: {
46 | type: 'integer',
47 | description: 'Maximum number of transactions to return'
48 | }
49 | }
50 | }
51 | },
52 | {
53 | name: 'api_algod_get_transaction_params',
54 | description: 'Get suggested transaction parameters',
55 | inputSchema: {
56 | type: 'object',
57 | properties: {}
58 | }
59 | },
60 | {
61 | name: 'api_algod_get_node_status',
62 | description: 'Get current node status',
63 | inputSchema: {
64 | type: 'object',
65 | properties: {}
66 | }
67 | },
68 | {
69 | name: 'api_algod_get_node_status_after_block',
70 | description: 'Get node status after a specific round',
71 | inputSchema: {
72 | type: 'object',
73 | properties: {
74 | round: {
75 | type: 'integer',
76 | description: 'Round number'
77 | }
78 | },
79 | required: ['round']
80 | }
81 | }
82 | ];
83 |
84 | export async function getPendingTransaction(txId: string): Promise<PendingTransactionResponse> {
85 | try {
86 | console.log(`Fetching pending transaction info for ID ${txId}`);
87 | const response = await algodClient.pendingTransactionInformation(txId).do() as PendingTransactionResponse;
88 | console.log('Pending transaction response:', JSON.stringify(response, null, 2));
89 | return response;
90 | } catch (error) {
91 | console.error('Pending transaction fetch error:', error);
92 | if (error instanceof McpError) {
93 | throw error;
94 | }
95 | throw new McpError(
96 | ErrorCode.InternalError,
97 | `Failed to get pending transaction: ${error instanceof Error ? error.message : String(error)}`
98 | );
99 | }
100 | }
101 |
102 | export async function getPendingTransactionsByAddress(address: string): Promise<PendingTransactionsResponse> {
103 | try {
104 | console.log(`Fetching pending transactions for address ${address}`);
105 | const response = await algodClient.pendingTransactionByAddress(address).do() as PendingTransactionsResponse;
106 | console.log('Pending transactions response:', JSON.stringify(response, null, 2));
107 | return response;
108 | } catch (error) {
109 | console.error('Pending transactions fetch error:', error);
110 | if (error instanceof McpError) {
111 | throw error;
112 | }
113 | throw new McpError(
114 | ErrorCode.InternalError,
115 | `Failed to get pending transactions by address: ${error instanceof Error ? error.message : String(error)}`
116 | );
117 | }
118 | }
119 |
120 | export async function getPendingTransactions(maxTxns?: number): Promise<PendingTransactionsResponse> {
121 | try {
122 | console.log('Fetching all pending transactions');
123 | let search = algodClient.pendingTransactionsInformation();
124 | if (maxTxns !== undefined) {
125 | search = search.max(maxTxns);
126 | }
127 | const response = await search.do() as PendingTransactionsResponse;
128 | console.log('Pending transactions response:', JSON.stringify(response, null, 2));
129 | return response;
130 | } catch (error) {
131 | console.error('Pending transactions fetch error:', error);
132 | if (error instanceof McpError) {
133 | throw error;
134 | }
135 | throw new McpError(
136 | ErrorCode.InternalError,
137 | `Failed to get pending transactions: ${error instanceof Error ? error.message : String(error)}`
138 | );
139 | }
140 | }
141 |
142 | export async function getTransactionParams(): Promise<SuggestedParamsWithMinFee> {
143 | try {
144 | console.log('Fetching transaction parameters');
145 | const response = await algodClient.getTransactionParams().do();
146 | console.log('Transaction parameters response:', JSON.stringify(response, null, 2));
147 | return response;
148 | } catch (error) {
149 | console.error('Transaction parameters fetch error:', error);
150 | if (error instanceof McpError) {
151 | throw error;
152 | }
153 | throw new McpError(
154 | ErrorCode.InternalError,
155 | `Failed to get transaction params: ${error instanceof Error ? error.message : String(error)}`
156 | );
157 | }
158 | }
159 |
160 | export async function getNodeStatus(): Promise<NodeStatusResponse> {
161 | try {
162 | console.log('Fetching node status');
163 | const response = await algodClient.status().do() as NodeStatusResponse;
164 | console.log('Node status response:', JSON.stringify(response, null, 2));
165 | return response;
166 | } catch (error) {
167 | console.error('Node status fetch error:', error);
168 | if (error instanceof McpError) {
169 | throw error;
170 | }
171 | throw new McpError(
172 | ErrorCode.InternalError,
173 | `Failed to get status: ${error instanceof Error ? error.message : String(error)}`
174 | );
175 | }
176 | }
177 |
178 | export async function getNodeStatusAfterBlock(round: number): Promise<NodeStatusResponse> {
179 | try {
180 | console.log(`Fetching node status after round ${round}`);
181 | const response = await algodClient.statusAfterBlock(round).do() as NodeStatusResponse;
182 | console.log('Node status response:', JSON.stringify(response, null, 2));
183 | return response;
184 | } catch (error) {
185 | console.error('Node status fetch error:', error);
186 | if (error instanceof McpError) {
187 | throw error;
188 | }
189 | throw new McpError(
190 | ErrorCode.InternalError,
191 | `Failed to get status after block: ${error instanceof Error ? error.message : String(error)}`
192 | );
193 | }
194 | }
195 |
196 | export async function handleTransactionTools(name: string, args: any): Promise<any> {
197 | switch (name) {
198 | case 'api_algod_get_pending_transaction': {
199 | const { txId } = args;
200 | const info = await getPendingTransaction(txId);
201 | return info;
202 | }
203 | case 'api_algod_get_pending_transactions_by_address': {
204 | const { address } = args;
205 | const info = await getPendingTransactionsByAddress(address);
206 | return info;
207 | }
208 | case 'api_algod_get_pending_transactions': {
209 | const { maxTxns } = args;
210 | const info = await getPendingTransactions(maxTxns);
211 | return info;
212 | }
213 | case 'api_algod_get_transaction_params': {
214 | const params = await getTransactionParams();
215 | return params;
216 | }
217 | case 'api_algod_get_node_status': {
218 | const nodeStatus = await getNodeStatus();
219 | return nodeStatus;
220 | }
221 | case 'api_algod_get_node_status_after_block': {
222 | const { round } = args;
223 | const nodeStatus = await getNodeStatusAfterBlock(round);
224 | return nodeStatus;
225 | }
226 | default:
227 | throw new McpError(
228 | ErrorCode.MethodNotFound,
229 | `Unknown tool: ${name}`
230 | );
231 | }
232 | }
233 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:parameter_tables.md:
--------------------------------------------------------------------------------
```markdown
1 | title: Algorand parameter tables
2 | [comment]: <> (generated from: https://docs.google.com/spreadsheets/d/12E_B6AYBfhrOoylO8NZysqKns4rHKklV8I0fejiwMXE)
3 |
4 | ## Minimum balance
5 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
6 | |-|-|-|-|-|
7 | |Default|0.1 Algos|[reference](./accounts/index.md#minimum-balance)|MinBalance||
8 | |Opt-in ASA|+ 0.1 Algos|[reference](./asa.md#assets-overview)|MinBalance||
9 | |Created ASA|+ 0.1 Algos|[reference](./asa.md#assets-overview)|MinBalance|creator of ASA does not need to opt in|
10 | |Opt-in Application|(see below)|||creator of application only needs to opt in if they use local state|
11 | |Created Application|(see below)||||
12 |
13 | ## Minimum balance for smart contract
14 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
15 | |-|-|-|-|-|
16 | |Per page application creation fee|0.1 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|AppFlatParamsMinBalance||
17 | |Flat for application opt-in|0.1 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|AppFlatOptInMinBalance||
18 | |Per state entry|0.025 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|SchemaMinBalancePerEntry||
19 | |Addition per integer entry|0.0035 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|SchemaUintMinBalance||
20 | |Addition per byte slice entry|0.025 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|SchemaBytesMinBalance||
21 | |Per Box created|0.0025 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|BoxFlatMinBalance||
22 | |Per byte in box created|0.0004 Algos|[reference](./dapps/smart-contracts/apps/index.md#minimum-balance-requirement-for-a-smart-contract)|BoxByteMinBalance|Includes the length of the key|
23 |
24 | ## Transaction fee
25 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
26 | |-|-|-|-|-|
27 | |Minimum transaction fee, in all cases|0.001 Algos|[reference](./transactions/index.md#fees)|MinTxnFee||
28 | |Additional minimum constraint if congestion|additional fee per byte|[reference](./transactions/index.md#fees)|-||
29 |
30 | ## Others
31 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
32 | |-|-|-|-|-|
33 | |Max number transactions in a group / atomic transfer|16|[reference](./atomic_transfers.md)|MaxTxGroupSize||
34 | |Max number of inner transactions|256|[reference](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/#inner-transactions)|MaxInnerTransactions|Whilst the actual value is 16, inner transaction pooling multiplies this value by MaxTxGroupSize.|
35 | |Maximum size of a block|5000000 bytes|-|MaxTxnBytesPerBlock||
36 | |Maximum size of note|1024 bytes|-|MaxTxnNoteBytes||
37 | |Maximum transaction life|1000 rounds|[reference](./transactions/index.md#setting-first-and-last-valid)|MaxTxnLife||
38 |
39 | ## ASA constraints
40 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
41 | |-|-|-|-|-|
42 | |Max number of ASAs (create and opt-in)|Unlimited|[reference](./asa.md)|MaxAssetsPerAccount||
43 | |Max asset name size|32 bytes|[reference](./asa.md)|MaxAssetNameBytes||
44 | |Max unit name size|8 bytes|[reference](./asa.md)|MaxAssetUnitNameBytes||
45 | |Max URL size|96 bytes|[reference](./asa.md)|MaxAssetURLBytes||
46 | |Metadata hash|32 bytes|[reference](./asa.md)||padded with zeros|
47 |
48 | ## Smart signature constraints
49 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
50 | |-|-|-|-|-|
51 | |Max size of compiled TEAL code combined with arguments|1000 bytes|[reference](../dapps/avm/teal/specification#execution-environment-for-logicsigs)|LogicSigMaxSize||
52 | |Max cost of TEAL code|20000|[reference](../dapps/avm/teal/specification#execution-environment-for-logicsigs)|LogicSigMaxCost||
53 |
54 | ## Smart contract constraints
55 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
56 | |-|-|-|-|-|
57 | |Page size of compiled approval + clear TEAL code|2048 bytes|[reference](./dapps/avm/teal/index.md#dynamic-operational-cost-of-teal-opcodes)|MaxAppProgramLen|by default, each application has a single page|
58 | |Max extra app pages |3|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxExtraAppProgramPages|an application can "pay" for additional pages via minimum balance|
59 | |Max cost of approval TEAL code|700|[reference](./dapps/avm/teal/index.md#dynamic-operational-cost-of-teal-opcodes)|MaxAppProgramCost||
60 | |Max cost of clear TEAL code|700|[reference](./dapps/avm/teal/index.md#dynamic-operational-cost-of-teal-opcodes)|MaxAppProgramCost||
61 | |Max number of scratch variables|256|[reference](../dapps/avm/teal/specification/#scratch-space)|||
62 | |Max depth of stack|1000|[reference](../dapps/avm/teal/specification/#the-stack)|MaxStackDepth||
63 | |Max number of arguments|16|[reference](./dapps/smart-contracts/apps/index.md#passing-arguments-to-stateful-smart-contracts)|MaxAppArgs||
64 | |Max combined size of arguments|2048 bytes|[reference](./dapps/smart-contracts/apps/index.md#passing-arguments-to-stateful-smart-contracts)|MaxAppTotalArgLen||
65 | |Max number of global state keys|64|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxGlobalSchemaEntries||
66 | |Max number of local state keys|16|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxLocalSchemaEntries||
67 | |Max number of log messages|32|[reference](../dapps/avm/teal/opcodes/#log)|MaxLogCalls||
68 | |Max size of log messages|1024|[reference](../dapps/avm/teal/opcodes/#log)|MaxLogSize||
69 | |Max key size|64 bytes|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxAppKeyLen||
70 | |Max []byte value size|128 bytes|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxAppBytesValueLen||
71 | |Max key + value size|128 bytes|[reference](./dapps/smart-contracts/apps/index.md#creating-the-smart-contract)|MaxAppSumKeyValueLens||
72 | |Max number of foreign accounts|4|[reference](./dapps/smart-contracts/apps/index.md#stateful-contract-arrays)|MaxAppTxnAccounts||
73 | |Max number of foreign ASAs|8|[reference](./dapps/smart-contracts/apps/index.md#stateful-contract-arrays)|MaxAppTxnForeignAssets||
74 | |Max number of foreign applications|8|[reference](./dapps/smart-contracts/apps/index.md#stateful-contract-arrays)|MaxAppTxnForeignApps||
75 | |Max number of foreign accounts + ASAs + applications + box storage|8|[reference](./dapps/smart-contracts/apps/index.md#stateful-contract-arrays)|MaxAppTotalTxnReferences||
76 | |Max number of created applications|Unlimited|[reference](./dapps/smart-contracts/apps/index.md#opt-into-the-smart-contract)|MaxAppsCreated||
77 | |Max number of opt-in applications|Unlimited|[reference](./dapps/smart-contracts/apps/index.md#opt-into-the-smart-contract)|MaxAppsOptedIn||
78 |
79 | ## Box Constraints
80 | |Name|Current value|Developer doc|Consensus parameter name in (.go)|Note|
81 | |-|-|-|-|-|
82 | |Max size of box | 32768 |[reference](./dapps/smart-contracts/apps/index.md#box-storage)|MaxBoxSize|Does not include name/key length. That is capped by MaxAppKeyLen|
83 | |Max box references | 8 |[reference](./dapps/smart-contracts/apps/index.md#smart-contract-arrays)|MaxAppBoxReferences||
84 | |Bytes per Box reference | 1024 |[reference](./dapps/smart-contracts/apps/index.md#smart-contract-arrays)|BytesPerBoxReference||
85 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:python:testing:docs:index.md:
--------------------------------------------------------------------------------
```markdown
1 | # Algorand Python Testing
2 |
3 | [](https://github.com/algorandfoundation/algorand-python-testing/)
4 | [](https://developer.algorand.org/algokit/)
5 | [](https://github.com/algorandfoundation/algorand-python-testing)
6 | [](https://developer.algorand.org/algokit/)
7 |
8 | `algorand-python-testing` is a companion package to [Algorand Python](https://github.com/algorandfoundation/puya) that enables efficient unit testing of Algorand Python smart contracts in an offline environment. This package emulates key AVM behaviors without requiring a network connection, offering fast and reliable testing capabilities with a familiar Pythonic interface.
9 |
10 | The `algorand-python-testing` package provides:
11 |
12 | - A simple interface for fast and reliable unit testing
13 | - An offline testing environment that simulates core AVM functionality
14 | - A familiar Pythonic experience, compatible with testing frameworks like [pytest](https://docs.pytest.org/en/latest/), [unittest](https://docs.python.org/3/library/unittest.html), and [hypothesis](https://hypothesis.readthedocs.io/en/latest/)
15 |
16 | ## Quick Start
17 |
18 | `algopy` is a prerequisite for `algorand-python-testing`, providing stubs and type annotations for Algorand Python syntax. It enhances code completion and type checking when writing smart contracts. Note that this code isn't directly executable in standard Python interpreters; it's compiled by `puya` into TEAL for Algorand Network deployment.
19 |
20 | Traditionally, testing Algorand smart contracts involved deployment on sandboxed networks and interacting with live instances. While robust, this approach can be inefficient and lacks versatility for testing Algorand Python code.
21 |
22 | Enter `algorand-python-testing`: it leverages Python's rich testing ecosystem for unit testing without network deployment. This enables rapid iteration and granular logic testing.
23 |
24 | > **NOTE**: While `algorand-python-testing` offers valuable unit testing capabilities, it's not a replacement for comprehensive testing. Use it alongside other test types, particularly those running against the actual Algorand Network, for thorough contract validation.
25 |
26 | ### Prerequisites
27 |
28 | - Python 3.12 or later
29 | - [Algorand Python](https://github.com/algorandfoundation/puya)
30 |
31 | ### Installation
32 |
33 | `algorand-python-testing` is distributed via [PyPI](https://pypi.org/project/algorand-python-testing/). Install the package using `pip`:
34 |
35 | ```bash
36 | pip install algorand-python-testing
37 | ```
38 |
39 | or using `poetry`:
40 |
41 | ```bash
42 | poetry add algorand-python-testing
43 | ```
44 |
45 | ### Testing your first contract
46 |
47 | Let's write a simple contract and test it using the `algorand-python-testing` framework.
48 |
49 | #### Contract Definition
50 |
51 | ```{testcode}
52 | import algopy
53 | from algopy import arc4
54 |
55 | class VotingContract(algopy.ARC4Contract):
56 | def __init__(self) -> None:
57 | self.topic = algopy.GlobalState(algopy.Bytes(b"default_topic"), key="topic", description="Voting topic")
58 | self.votes = algopy.GlobalState(
59 | algopy.UInt64(0),
60 | key="votes",
61 | description="Votes for the option",
62 | )
63 | self.voted = algopy.LocalState(algopy.UInt64, key="voted", description="Tracks if an account has voted")
64 |
65 | @arc4.abimethod
66 | def set_topic(self, topic: arc4.String) -> None:
67 | self.topic.value = topic.bytes
68 |
69 | @arc4.abimethod
70 | def vote(self, pay: algopy.gtxn.PaymentTransaction) -> arc4.Bool:
71 | assert algopy.op.Global.group_size == algopy.UInt64(2), "Expected 2 transactions"
72 | assert pay.amount == algopy.UInt64(10_000), "Incorrect payment amount"
73 | assert pay.sender == algopy.Txn.sender, "Payment sender must match transaction sender"
74 |
75 | _value, exists = self.voted.maybe(algopy.Txn.sender)
76 | if exists:
77 | return arc4.Bool(False) # Already voted
78 | self.votes.value += algopy.UInt64(1)
79 | self.voted[algopy.Txn.sender] = algopy.UInt64(1)
80 | return arc4.Bool(True)
81 |
82 | @arc4.abimethod(readonly=True)
83 | def get_votes(self) -> arc4.UInt64:
84 | return arc4.UInt64(self.votes.value)
85 |
86 | def clear_state_program(self) -> bool:
87 | return True
88 | ```
89 |
90 | #### Test Definition
91 |
92 | ```{testcode}
93 | from collections.abc import Generator
94 | import pytest
95 | from algopy_testing import AlgopyTestContext, algopy_testing_context
96 | from algopy import arc4
97 |
98 | # Create a test context
99 | with algopy_testing_context() as context:
100 |
101 | # Initialize the contract
102 | contract = VotingContract()
103 |
104 | # Test vote function
105 | voter = context.default_sender
106 | payment = context.any.txn.payment(
107 | sender=voter,
108 | amount=algopy.UInt64(10_000),
109 | )
110 |
111 | result = contract.vote(payment)
112 | print(f"Vote result: {result.native}")
113 | print(f"Total votes: {contract.votes.value}")
114 | print(f"Voter {voter} voted: {contract.voted[voter]}")
115 |
116 | # Test set_topic function
117 | new_topic = context.any.arc4.string(10)
118 | contract.set_topic(new_topic)
119 | print(f"New topic: {new_topic.native}")
120 | print(f"Contract topic: {contract.topic.value}")
121 |
122 | # Test get_votes function
123 | contract.votes.value = algopy.UInt64(5)
124 | votes = contract.get_votes()
125 | print(f"Current votes: {votes.native}")
126 | ```
127 |
128 | ```{testoutput}
129 | :hide:
130 |
131 | Vote result: True
132 | Total votes: 1
133 | Voter ... voted: 1
134 | New topic: ...
135 | Contract topic: ...
136 | Current votes: 5
137 | ```
138 |
139 | This example demonstrates key aspects of testing with `algorand-python-testing` for ARC4-based contracts:
140 |
141 | 1. ARC4 Contract Features:
142 |
143 | - Use of `algopy.ARC4Contract` as the base class for the contract.
144 | - ABI methods defined using the `@arc4.abimethod` decorator.
145 | - Use of ARC4-specific types like `arc4.String`, `arc4.Bool`, and `arc4.UInt64`.
146 | - Readonly method annotation with `@arc4.abimethod(readonly=True)`.
147 |
148 | 2. Testing ARC4 Contracts:
149 |
150 | - Creation of an `ARC4Contract` instance within the test context.
151 | - Use of `context.any.arc4` for generating ARC4-specific random test data.
152 | - Direct invocation of ABI methods on the contract instance.
153 |
154 | 3. Transaction Handling:
155 |
156 | - Use of `context.any.txn` to create test transactions.
157 | - Passing transaction objects as parameters to contract methods.
158 |
159 | 4. State Verification:
160 | - Checking global and local state changes after method execution.
161 | - Verifying return values from ABI methods using ARC4-specific types.
162 |
163 | > **NOTE**: Thorough testing is crucial in smart contract development due to their immutable nature post-deployment. Comprehensive unit and integration tests ensure contract validity and reliability. Optimizing for efficiency can significantly improve user experience by reducing transaction fees and simplifying interactions. Investing in robust testing and optimization practices is crucial and offers many benefits in the long run.
164 |
165 | ### Next steps
166 |
167 | To dig deeper into the capabilities of `algorand-python-testing`, continue with the following sections.
168 |
169 | ```{toctree}
170 | ---
171 | maxdepth: 2
172 | caption: Contents
173 | hidden: true
174 | ---
175 |
176 | testing-guide/index
177 | examples
178 | coverage
179 | faq
180 | api
181 | algopy
182 | ```
183 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/asset-manager](../modules/types_asset_manager.md) / AssetInformation
2 |
3 | # Interface: AssetInformation
4 |
5 | [types/asset-manager](../modules/types_asset_manager.md).AssetInformation
6 |
7 | Information about an asset.
8 |
9 | ## Table of contents
10 |
11 | ### Properties
12 |
13 | - [assetId](types_asset_manager.AssetInformation.md#assetid)
14 | - [assetName](types_asset_manager.AssetInformation.md#assetname)
15 | - [assetNameAsBytes](types_asset_manager.AssetInformation.md#assetnameasbytes)
16 | - [clawback](types_asset_manager.AssetInformation.md#clawback)
17 | - [creator](types_asset_manager.AssetInformation.md#creator)
18 | - [decimals](types_asset_manager.AssetInformation.md#decimals)
19 | - [defaultFrozen](types_asset_manager.AssetInformation.md#defaultfrozen)
20 | - [freeze](types_asset_manager.AssetInformation.md#freeze)
21 | - [manager](types_asset_manager.AssetInformation.md#manager)
22 | - [metadataHash](types_asset_manager.AssetInformation.md#metadatahash)
23 | - [reserve](types_asset_manager.AssetInformation.md#reserve)
24 | - [total](types_asset_manager.AssetInformation.md#total)
25 | - [unitName](types_asset_manager.AssetInformation.md#unitname)
26 | - [unitNameAsBytes](types_asset_manager.AssetInformation.md#unitnameasbytes)
27 | - [url](types_asset_manager.AssetInformation.md#url)
28 | - [urlAsBytes](types_asset_manager.AssetInformation.md#urlasbytes)
29 |
30 | ## Properties
31 |
32 | ### assetId
33 |
34 | • **assetId**: `bigint`
35 |
36 | The ID of the asset.
37 |
38 | #### Defined in
39 |
40 | [src/types/asset-manager.ts:19](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L19)
41 |
42 | ___
43 |
44 | ### assetName
45 |
46 | • `Optional` **assetName**: `string`
47 |
48 | The optional name of the asset.
49 |
50 | Max size is 32 bytes.
51 |
52 | #### Defined in
53 |
54 | [src/types/asset-manager.ts:110](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L110)
55 |
56 | ___
57 |
58 | ### assetNameAsBytes
59 |
60 | • `Optional` **assetNameAsBytes**: `Uint8Array`
61 |
62 | The optional name of the asset.
63 |
64 | Max size is 32 bytes.
65 |
66 | #### Defined in
67 |
68 | [src/types/asset-manager.ts:116](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L116)
69 |
70 | ___
71 |
72 | ### clawback
73 |
74 | • `Optional` **clawback**: `string`
75 |
76 | The address of the optional account that can clawback holdings of this asset from any account.
77 |
78 | The clawback account has the ability to **unconditionally take assets from any account**.
79 |
80 | If empty, clawback is not permitted.
81 |
82 | If not set the field is permanently empty.
83 |
84 | #### Defined in
85 |
86 | [src/types/asset-manager.ts:92](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L92)
87 |
88 | ___
89 |
90 | ### creator
91 |
92 | • **creator**: `string`
93 |
94 | The address of the account that created the asset.
95 |
96 | This is the address where the parameters for this asset can be found,
97 | and also the address where unwanted asset units can be sent when
98 | closing out an asset position and opting-out of the asset.
99 |
100 | #### Defined in
101 |
102 | [src/types/asset-manager.ts:27](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L27)
103 |
104 | ___
105 |
106 | ### decimals
107 |
108 | • **decimals**: `number`
109 |
110 | The amount of decimal places the asset was created with.
111 |
112 | * If 0, the asset is not divisible;
113 | * If 1, the base unit of the asset is in tenths;
114 | * If 2, the base unit of the asset is in hundredths;
115 | * If 3, the base unit of the asset is in thousandths;
116 | * and so on up to 19 decimal places.
117 |
118 | #### Defined in
119 |
120 | [src/types/asset-manager.ts:43](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L43)
121 |
122 | ___
123 |
124 | ### defaultFrozen
125 |
126 | • `Optional` **defaultFrozen**: `boolean`
127 |
128 | Whether the asset was frozen by default for all accounts.
129 |
130 | If `true` then for anyone apart from the creator to hold the
131 | asset it needs to be unfrozen per account using an asset freeze
132 | transaction from the `freeze` account.
133 |
134 | #### Defined in
135 |
136 | [src/types/asset-manager.ts:51](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L51)
137 |
138 | ___
139 |
140 | ### freeze
141 |
142 | • `Optional` **freeze**: `string`
143 |
144 | The address of the optional account that can be used to freeze or unfreeze holdings of this asset for any account.
145 |
146 | If empty, freezing is not permitted.
147 |
148 | If not set the field is permanently empty.
149 |
150 | #### Defined in
151 |
152 | [src/types/asset-manager.ts:81](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L81)
153 |
154 | ___
155 |
156 | ### manager
157 |
158 | • `Optional` **manager**: `string`
159 |
160 | The address of the optional account that can manage the configuration of the asset and destroy it.
161 |
162 | If not set the asset is permanently immutable.
163 |
164 | #### Defined in
165 |
166 | [src/types/asset-manager.ts:57](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L57)
167 |
168 | ___
169 |
170 | ### metadataHash
171 |
172 | • `Optional` **metadataHash**: `Uint8Array`
173 |
174 | 32-byte hash of some metadata that is relevant to the asset and/or asset holders.
175 |
176 | The format of this metadata is up to the application.
177 |
178 | #### Defined in
179 |
180 | [src/types/asset-manager.ts:134](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L134)
181 |
182 | ___
183 |
184 | ### reserve
185 |
186 | • `Optional` **reserve**: `string`
187 |
188 | The address of the optional account that holds the reserve (uncirculated supply) units of the asset.
189 |
190 | This address has no specific authority in the protocol itself and is informational only.
191 |
192 | Some standards like [ARC-19](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0019.md)
193 | rely on this field to hold meaningful data.
194 |
195 | It can be used in the case where you want to signal to holders of your asset that the uncirculated units
196 | of the asset reside in an account that is different from the default creator account.
197 |
198 | If not set the field is permanently empty.
199 |
200 | #### Defined in
201 |
202 | [src/types/asset-manager.ts:72](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L72)
203 |
204 | ___
205 |
206 | ### total
207 |
208 | • **total**: `bigint`
209 |
210 | The total amount of the smallest divisible (decimal) units that were created of the asset.
211 |
212 | For example, if `decimals` is, say, 2, then for every 100 `total` there is 1 whole unit.
213 |
214 | #### Defined in
215 |
216 | [src/types/asset-manager.ts:33](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L33)
217 |
218 | ___
219 |
220 | ### unitName
221 |
222 | • `Optional` **unitName**: `string`
223 |
224 | The optional name of the unit of this asset (e.g. ticker name).
225 |
226 | Max size is 8 bytes.
227 |
228 | #### Defined in
229 |
230 | [src/types/asset-manager.ts:98](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L98)
231 |
232 | ___
233 |
234 | ### unitNameAsBytes
235 |
236 | • `Optional` **unitNameAsBytes**: `Uint8Array`
237 |
238 | The optional name of the unit of this asset (e.g. ticker name).
239 |
240 | Max size is 8 bytes.
241 |
242 | #### Defined in
243 |
244 | [src/types/asset-manager.ts:104](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L104)
245 |
246 | ___
247 |
248 | ### url
249 |
250 | • `Optional` **url**: `string`
251 |
252 | Optional URL where more information about the asset can be retrieved (e.g. metadata).
253 |
254 | Max size is 96 bytes.
255 |
256 | #### Defined in
257 |
258 | [src/types/asset-manager.ts:122](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L122)
259 |
260 | ___
261 |
262 | ### urlAsBytes
263 |
264 | • `Optional` **urlAsBytes**: `Uint8Array`
265 |
266 | Optional URL where more information about the asset can be retrieved (e.g. metadata).
267 |
268 | Max size is 96 bytes.
269 |
270 | #### Defined in
271 |
272 | [src/types/asset-manager.ts:128](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L128)
273 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/liquid-auth:ARCHITECTURE.md:
--------------------------------------------------------------------------------
```markdown
1 | ## Overview
2 |
3 | ### Components
4 | - Nest.js (Microservices/REST API)
5 | - Redis (Events/WebSockets)
6 | - MongoDB (SessionStore/Users)
7 |
8 | This service uses [FIDO2 REST API]() endpoints for credential creation and assertions.
9 |
10 | ## FIDO2 Endpoints
11 |
12 | Two main components, Assertion and Attestation.
13 | The purposed liquid extension is used to sign the FIDO2 responses with a different key pair and allow remote authentication
14 |
15 | ### Liquid FIDO2 Extension
16 |
17 | ```typescript
18 | // Authenticator Create Response
19 | interface LiquidClientAttestationExtensionResults {
20 | liquid: {
21 | type: string; // Currently only "algorand" supported
22 | address: string; // Wallet Address
23 | signature: string; // Base64URL Encoded Signature
24 | requestId?: string // Optional Request ID , authenticate a remote user simaltaneously
25 | device?: string // Optional Device Name
26 | }
27 | }
28 | // Authenticator Get Response
29 | interface LiquidClientAssertionExtensionResults {
30 | liquid: {
31 | requestId?: string; // Optional Request ID
32 | }
33 | }
34 |
35 | // Selector Options
36 | interface LiquidExtensionOptions {
37 | liquid: boolean;
38 | }
39 | ```
40 |
41 | ### POST /attestation/request
42 |
43 | Returns the credential creation options supported by the service. It accepts
44 | the standard PublicKeyCreateOptions as the `body`. The response can be passed
45 | to an available authenticator which will generate the credentials.
46 |
47 | The request must enable the `liquid` extension in order to sign the response.
48 |
49 | #### BODY
50 |
51 | ```json
52 | {
53 | "username": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
54 | "displayName": "Liquid Auth User",
55 | "authenticatorSelection": {
56 | "userVerification": "required"
57 | },
58 | "extensions": {
59 | "liquid": true
60 | }
61 | }
62 | ```
63 |
64 | #### Example CredentialCreateOptions Response
65 | ```json
66 | {
67 | "challenge": "35JYpoXGnM4s8IICakWSLllcXy3Z_lc3AaLSl872qXM",
68 | "rp": {
69 | "name": "Algorand Foundation FIDO2 Server",
70 | "id": "catfish-pro-wolf.ngrok-free.app"
71 | },
72 | "user": {
73 | "id": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
74 | "name": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
75 | "displayName": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA"
76 | },
77 | "pubKeyCredParams": [
78 | {
79 | "type": "public-key",
80 | "alg": -7
81 | },
82 | {
83 | "type": "public-key",
84 | "alg": -257
85 | }
86 | ],
87 | "timeout": 1800000,
88 | "attestation": "none",
89 | "excludeCredentials": [],
90 | "authenticatorSelection": {
91 | "userVerification": "required"
92 | },
93 | "extensions": {
94 | "liquid": true
95 | }
96 | }
97 | ```
98 | ### POST /attestation/response
99 |
100 | Receives the PublicKeyCredential result from the authenticator and validates the credential signature.
101 | `body` uses base64URL encoding for keys.
102 |
103 | The authenticator must include the `liquid` extension in the response with the signature and address.
104 | This will associate the credential with the wallet address and the credential can be used for future assertions without the need for signing with the wallet keys
105 |
106 | #### BODY
107 | ```json
108 | {
109 | "id": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
110 | "type": "public-key",
111 | "rawId": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
112 | "clientExtensionResults": {
113 | "liquid": {
114 | "type": "algorand",
115 | "requestId": "019097ff-bb8c-7c42-9700-f11b9446fad7",
116 | "address": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
117 | "signature": "QY31mdH8AwpJ9p4pCXBO2iA5WdU-BjG52xEtJNuSJNHJIaJ10uzqk3FdR0fvYVfb_rzXTuWn4k1PFFeg-vpEDw",
118 | "device": "Pixel 8 Pro"
119 | }
120 | },
121 | "response": {
122 | "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiMzVKWXBvWEduTTRzOElJQ2FrV1NMbGxjWHkzWl9sYzNBYUxTbDg3MnFYTSIsIm9yaWdpbiI6ImFuZHJvaWQ6YXBrLWtleS1oYXNoOlI4eE83cmxRV2FXTDRCbEZ5Z3B0V1JiNXFjS1dkZmp6WklhU1JpdDlYVnciLCJhbmRyb2lkUGFja2FnZU5hbWUiOiJmb3VuZGF0aW9uLmFsZ29yYW5kLmRlbW8ifQ",
123 | "attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVjFlpPmT7RcYTDeFJdKhDtiKwzb05n-ojlcqqYw5SomXZBFAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQGDD4tkW4XJ7toEhzjtUzb8wyd_IlNNK65Qqsh_O-FwiBKCKLUXO3lURacdE77ELq4OwQJ18uSp1nSgvC3lrNJNpQECAyYgASFYIB2dcp3wanhReRhgRIpJCUfRSwkCvyE9OdvEL_NlncSJIlggkSIz7h7O5nrAXGJrkCOmeolChSc09eHzniCFLFxaKH0"
124 | },
125 | "device": "Pixel 8 Pro"
126 | }
127 | ```
128 |
129 |
130 | ### POST /assertion/request/:credId
131 |
132 | Request a PublicKeyGetCredentialOptions from the service. This differs slightly from the FIDO2 API conformance in order to limit
133 | allowed credentials.
134 |
135 | #### BODY (Optional)
136 | ```json
137 | {
138 | "authenticatorSelection": {
139 | "userVerification": "required"
140 | },
141 | "extensions": {
142 | "liquid": true
143 | }
144 | }
145 | ```
146 |
147 | #### Example Response
148 | ```json
149 | {
150 | "challenge": "0TXu4G4iu3sbAQopheoPe_CpnLJOB-QlIUvwFBC317Q",
151 | "allowCredentials": [
152 | {
153 | "id": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
154 | "type": "public-key"
155 | }
156 | ],
157 | "timeout": 1800000,
158 | "userVerification": "required",
159 | "rpId": "catfish-pro-wolf.ngrok-free.app",
160 | "extensions": {
161 | "liquid": true
162 | }
163 | }
164 | ```
165 |
166 | ### POST /assertion/response
167 |
168 | Base64URL encoded response from the authenticator.
169 | Optionally add a `requestId` to also authenticate a remote session
170 |
171 | #### BODY
172 | ```json
173 | {
174 | "id": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
175 | "type": "public-key",
176 | "rawId": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
177 | "clientExtensionResults": {
178 | "liquid": {
179 | "requestId": "019097ff-bb8d-75d8-b950-33de977c2d3f"
180 | }
181 | },
182 | "response": {
183 | "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiMFRYdTRHNGl1M3NiQVFvcGhlb1BlX0NwbkxKT0ItUWxJVXZ3RkJDMzE3USIsIm9yaWdpbiI6ImFuZHJvaWQ6YXBrLWtleS1oYXNoOlI4eE83cmxRV2FXTDRCbEZ5Z3B0V1JiNXFjS1dkZmp6WklhU1JpdDlYVnciLCJhbmRyb2lkUGFja2FnZU5hbWUiOiJmb3VuZGF0aW9uLmFsZ29yYW5kLmRlbW8ifQ",
184 | "authenticatorData": "lpPmT7RcYTDeFJdKhDtiKwzb05n-ojlcqqYw5SomXZAFAAAAAQ",
185 | "signature": "MEUCIQDcV2y6ub3Qh8pyTCCLdWKRH_cmR2xlFuNy1Fn1QsSUygIgTZh9b6mB77C-aQrBj7Evb8u3S4j3vjlnSPAKcR7Kld4"
186 | }
187 | }
188 | ```
189 |
190 | #### Example Response
191 | ```json
192 | {
193 | "id": "M6RT4iT5FkNDM2i57MXzBhLDt9zl2CrLt2p4Ar03t2Q",
194 | "wallet": "2SPDE6XLJNXFTOO7OIGNRNKSEDOHJWVD3HBSEAPHONZQ4IQEYOGYTP6LXA",
195 | "credentials": [
196 | {
197 | "device": "Pixel 8 Pro",
198 | "publicKey": "pQECAyYgASFYIB2dcp3wanhReRhgRIpJCUfRSwkCvyE9OdvEL_NlncSJIlggkSIz7h7O5nrAXGJrkCOmeolChSc09eHzniCFLFxaKH0",
199 | "credId": "AYMPi2Rbhcnu2gSHOO1TNvzDJ38iU00rrlCqyH874XCIEoIotRc7eVRFpx0TvsQurg7BAnXy5KnWdKC8LeWs0k0",
200 | "prevCounter": 0
201 | }
202 | ]
203 | }
204 | ```
205 | ## Signaling Service
206 |
207 | The signaling service is used to establish a WebRTC connection between the wallet and the website.
208 |
209 | ### Events
210 |
211 | #### microservice:auth
212 |
213 | Emits to the event bus when a client attests or asserts a credential with a requestId.
214 |
215 | #### wss:link
216 |
217 | Submit a request to link the current client to a remote wallet.
218 | The server will acknowledge the request when the `microservice:auth` event is received.
219 |
220 | ```typescript
221 | const response: LinkMessage = await client.link(requestId)
222 | ```
223 |
224 | #### wss:offer-description | wss:answer-description
225 |
226 | Wait for the server to emit an offer or answer description to the client.
227 |
228 | ```typescript
229 | const response: string = await client.signal('offer' | 'answer')
230 | ```
231 |
232 | #### wss:offer-candidate | wss:answer-candidate
233 |
234 | Emits the offer or answer ICE Candidates to connected clients.
235 |
236 | ```typescript
237 | client.peerClient.onicecandidate=(event)=>{
238 | client.socket.emit('offer-candidate', event.candidate.toJSON())
239 | }
240 |
241 | ```
242 |
```