This is page 25 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/tests/tools/transactionManager/transactionManager.test.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
2 | import { TransactionManager, transactionTools } from '../../../src/tools/transactionManager/index.js';
3 | import { AccountTransactionManager } from '../../../src/tools/transactionManager/accountTransactions.js';
4 | import { AssetTransactionManager } from '../../../src/tools/transactionManager/assetTransactions.js';
5 | import { AppTransactionManager } from '../../../src/tools/transactionManager/appTransactions.js';
6 | import { GeneralTransactionManager } from '../../../src/tools/transactionManager/generalTransaction.js';
7 |
8 | // Mock all transaction managers
9 | jest.mock('../../../src/tools/transactionManager/accountTransactions.js', () => ({
10 | AccountTransactionManager: {
11 | handleTool: jest.fn(),
12 | },
13 | accountTransactionTools: [
14 | { name: 'make_payment_txn' },
15 | { name: 'make_keyreg_txn' }
16 | ]
17 | }));
18 |
19 | jest.mock('../../../src/tools/transactionManager/assetTransactions.js', () => ({
20 | AssetTransactionManager: {
21 | handleTool: jest.fn(),
22 | },
23 | assetTransactionTools: [
24 | { name: 'make_asset_create_txn' },
25 | { name: 'make_asset_config_txn' },
26 | { name: 'make_asset_destroy_txn' },
27 | { name: 'make_asset_freeze_txn' },
28 | { name: 'make_asset_transfer_txn' }
29 | ]
30 | }));
31 |
32 | jest.mock('../../../src/tools/transactionManager/appTransactions.js', () => ({
33 | AppTransactionManager: {
34 | handleTool: jest.fn(),
35 | },
36 | appTransactionTools: [
37 | { name: 'make_app_create_txn' },
38 | { name: 'make_app_update_txn' },
39 | { name: 'make_app_delete_txn' },
40 | { name: 'make_app_optin_txn' },
41 | { name: 'make_app_closeout_txn' },
42 | { name: 'make_app_clear_txn' },
43 | { name: 'make_app_call_txn' }
44 | ]
45 | }));
46 |
47 | jest.mock('../../../src/tools/transactionManager/generalTransaction.js', () => ({
48 | GeneralTransactionManager: {
49 | handleTool: jest.fn(),
50 | },
51 | generalTransactionTools: [
52 | { name: 'assign_group_id' }
53 | ]
54 | }));
55 |
56 | describe('TransactionManager', () => {
57 | beforeEach(() => {
58 | jest.clearAllMocks();
59 | });
60 |
61 | describe('Tool Routing', () => {
62 | const mockArgs = { test: 'args' };
63 | const mockResponse = { content: [{ type: 'text', text: 'test' }] };
64 |
65 | beforeEach(() => {
66 | (AccountTransactionManager.handleTool as jest.Mock).mockResolvedValue(mockResponse);
67 | (AssetTransactionManager.handleTool as jest.Mock).mockResolvedValue(mockResponse);
68 | (AppTransactionManager.handleTool as jest.Mock).mockResolvedValue(mockResponse);
69 | (GeneralTransactionManager.handleTool as jest.Mock).mockResolvedValue(mockResponse);
70 | });
71 |
72 | it('should route payment transaction tools to AccountTransactionManager', async () => {
73 | const result = await TransactionManager.handleTool('make_payment_txn', mockArgs);
74 |
75 | expect(result).toBe(mockResponse);
76 | expect(AccountTransactionManager.handleTool).toHaveBeenCalledWith('make_payment_txn', mockArgs);
77 | });
78 |
79 | it('should route keyreg transaction tools to AccountTransactionManager', async () => {
80 | const result = await TransactionManager.handleTool('make_keyreg_txn', mockArgs);
81 |
82 | expect(result).toBe(mockResponse);
83 | expect(AccountTransactionManager.handleTool).toHaveBeenCalledWith('make_keyreg_txn', mockArgs);
84 | });
85 |
86 | it('should route asset transaction tools to AssetTransactionManager', async () => {
87 | const result = await TransactionManager.handleTool('make_asset_create_txn', mockArgs);
88 |
89 | expect(result).toBe(mockResponse);
90 | expect(AssetTransactionManager.handleTool).toHaveBeenCalledWith('make_asset_create_txn', mockArgs);
91 | });
92 |
93 | it('should route application transaction tools to AppTransactionManager', async () => {
94 | const result = await TransactionManager.handleTool('make_app_create_txn', mockArgs);
95 |
96 | expect(result).toBe(mockResponse);
97 | expect(AppTransactionManager.handleTool).toHaveBeenCalledWith('make_app_create_txn', mockArgs);
98 | });
99 |
100 | it('should route general transaction tools to GeneralTransactionManager', async () => {
101 | const result = await TransactionManager.handleTool('assign_group_id', mockArgs);
102 |
103 | expect(result).toBe(mockResponse);
104 | expect(GeneralTransactionManager.handleTool).toHaveBeenCalledWith('assign_group_id', mockArgs);
105 | });
106 |
107 | it('should throw error for unknown tool', async () => {
108 | await expect(TransactionManager.handleTool('unknown_tool', mockArgs))
109 | .rejects
110 | .toThrow(new McpError(ErrorCode.MethodNotFound, 'Unknown transaction tool: unknown_tool'));
111 | });
112 | });
113 |
114 | describe('Tool Registration', () => {
115 | it('should combine all transaction tools', () => {
116 | const allTools = [
117 | 'make_payment_txn',
118 | 'make_keyreg_txn',
119 | 'make_asset_create_txn',
120 | 'make_asset_config_txn',
121 | 'make_asset_destroy_txn',
122 | 'make_asset_freeze_txn',
123 | 'make_asset_transfer_txn',
124 | 'make_app_create_txn',
125 | 'make_app_update_txn',
126 | 'make_app_delete_txn',
127 | 'make_app_optin_txn',
128 | 'make_app_closeout_txn',
129 | 'make_app_clear_txn',
130 | 'make_app_call_txn',
131 | 'assign_group_id'
132 | ];
133 |
134 | expect(transactionTools.map((t: { name: string }) => t.name)).toEqual(allTools);
135 | });
136 | });
137 |
138 | describe('Error Handling', () => {
139 | it('should propagate errors from AccountTransactionManager', async () => {
140 | const error = new McpError(ErrorCode.InvalidParams, 'Test error');
141 | (AccountTransactionManager.handleTool as jest.Mock).mockRejectedValue(error);
142 |
143 | await expect(TransactionManager.handleTool('make_payment_txn', {}))
144 | .rejects
145 | .toThrow(error);
146 | });
147 |
148 | it('should propagate errors from AssetTransactionManager', async () => {
149 | const error = new McpError(ErrorCode.InvalidParams, 'Test error');
150 | (AssetTransactionManager.handleTool as jest.Mock).mockRejectedValue(error);
151 |
152 | await expect(TransactionManager.handleTool('make_asset_create_txn', {}))
153 | .rejects
154 | .toThrow(error);
155 | });
156 |
157 | it('should propagate errors from AppTransactionManager', async () => {
158 | const error = new McpError(ErrorCode.InvalidParams, 'Test error');
159 | (AppTransactionManager.handleTool as jest.Mock).mockRejectedValue(error);
160 |
161 | await expect(TransactionManager.handleTool('make_app_create_txn', {}))
162 | .rejects
163 | .toThrow(error);
164 | });
165 |
166 | it('should propagate errors from GeneralTransactionManager', async () => {
167 | const error = new McpError(ErrorCode.InvalidParams, 'Test error');
168 | (GeneralTransactionManager.handleTool as jest.Mock).mockRejectedValue(error);
169 |
170 | await expect(TransactionManager.handleTool('assign_group_id', {}))
171 | .rejects
172 | .toThrow(error);
173 | });
174 | });
175 | });
176 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:inner_transactions.md:
--------------------------------------------------------------------------------
```markdown
1 | # Inner Transactions in Algorand Smart Contracts
2 |
3 | Inner transactions allow smart contracts to create and submit transactions from within the contract. This guide demonstrates various types of inner transactions in Algorand Python smart contracts.
4 |
5 | ## Payment Transactions
6 |
7 | ```python
8 | from algopy import (
9 | Account,
10 | Application,
11 | ARC4Contract,
12 | Asset,
13 | Global,
14 | String,
15 | Txn,
16 | UInt64,
17 | arc4,
18 | itxn,
19 | )
20 |
21 | class InnerTransactions(ARC4Contract):
22 | @abimethod()
23 | def payment(self) -> UInt64:
24 | # Send payment from contract to transaction sender
25 | result = itxn.Payment(
26 | amount=5000,
27 | receiver=Txn.sender,
28 | fee=0 # fee is 0 by default, shown here for demonstration
29 | ).submit()
30 | return result.amount
31 | ```
32 |
33 | Note: The sender for inner transactions is implicitly `Global.current_application_address()`.
34 |
35 | ## Asset Operations
36 |
37 | ### Creating Assets
38 |
39 | ```python
40 | @abimethod
41 | def fungible_asset_create(self) -> UInt64:
42 | # Create a fungible token
43 | itxn_result = itxn.AssetConfig(
44 | total=100_000_000_000,
45 | decimals=2,
46 | unit_name="RP",
47 | asset_name="Royalty Points",
48 | ).submit()
49 | return itxn_result.created_asset.id
50 |
51 | @abimethod
52 | def non_fungible_asset_create(self) -> UInt64:
53 | # Create an NFT following ARC3 standard
54 | itxn_result = itxn.AssetConfig(
55 | total=100,
56 | decimals=2,
57 | unit_name="ML",
58 | asset_name="Mona Lisa",
59 | url="https://link_to_ipfs/Mona_Lisa",
60 | manager=Global.current_application_address,
61 | reserve=Global.current_application_address,
62 | freeze=Global.current_application_address,
63 | clawback=Global.current_application_address,
64 | ).submit()
65 | return itxn_result.created_asset.id
66 | ```
67 |
68 | ### Asset Opt-In and Transfer
69 |
70 | ```python
71 | @abimethod
72 | def asset_opt_in(self, asset: Asset) -> None:
73 | # Opt-in to an asset
74 | itxn.AssetTransfer(
75 | asset_receiver=Global.current_application_address,
76 | xfer_asset=asset,
77 | asset_amount=0,
78 | fee=0,
79 | ).submit()
80 |
81 | @abimethod
82 | def asset_transfer(self, asset: Asset, receiver: Account, amount: UInt64) -> None:
83 | # Transfer assets
84 | itxn.AssetTransfer(
85 | asset_receiver=receiver,
86 | xfer_asset=asset,
87 | asset_amount=amount,
88 | fee=0,
89 | ).submit()
90 | ```
91 |
92 | ### Asset Management
93 |
94 | ```python
95 | @abimethod
96 | def asset_freeze(self, acct_to_be_frozen: Account, asset: Asset) -> None:
97 | # Freeze an account's asset holdings
98 | itxn.AssetFreeze(
99 | freeze_account=acct_to_be_frozen,
100 | freeze_asset=asset,
101 | frozen=True,
102 | fee=0,
103 | ).submit()
104 |
105 | @abimethod
106 | def asset_revoke(
107 | self, asset: Asset, account_to_be_revoked: Account, amount: UInt64
108 | ) -> None:
109 | # Revoke (clawback) assets from an account
110 | itxn.AssetTransfer(
111 | asset_receiver=Global.current_application_address,
112 | xfer_asset=asset,
113 | asset_sender=account_to_be_revoked,
114 | asset_amount=amount,
115 | fee=0,
116 | ).submit()
117 |
118 | @abimethod
119 | def asset_config(self, asset: Asset) -> None:
120 | # Reconfigure asset parameters
121 | itxn.AssetConfig(
122 | config_asset=asset,
123 | manager=Global.current_application_address,
124 | reserve=Global.current_application_address,
125 | freeze=Txn.sender,
126 | clawback=Txn.sender,
127 | fee=0,
128 | ).submit()
129 |
130 | @abimethod
131 | def asset_delete(self, asset: Asset) -> None:
132 | # Delete an asset
133 | itxn.AssetConfig(
134 | config_asset=asset,
135 | fee=0,
136 | ).submit()
137 | ```
138 |
139 | ## Application Operations
140 |
141 | ### Grouped Inner Transactions
142 |
143 | ```python
144 | @abimethod
145 | def multi_inner_txns(self, app_id: Application) -> tuple[UInt64, arc4.String]:
146 | # Create payment transaction
147 | payment_params = itxn.Payment(amount=5000, receiver=Txn.sender, fee=0)
148 |
149 | # Create application call transaction
150 | app_call_params = itxn.ApplicationCall(
151 | app_id=app_id,
152 | app_args=(arc4.arc4_signature("hello(string)string"), arc4.String("World")),
153 | fee=0,
154 | )
155 |
156 | # Submit both transactions atomically
157 | pay_txn, app_call_txn = itxn.submit_txns(payment_params, app_call_params)
158 |
159 | # Process results
160 | hello_world_result = arc4.String.from_log(app_call_txn.last_log)
161 | return pay_txn.amount, hello_world_result
162 | ```
163 |
164 | ### Deploying Applications
165 |
166 | ```python
167 | @abimethod
168 | def deploy_app(self) -> UInt64:
169 | # Compile and deploy a contract
170 | compiled_contract = compile_contract(HelloWorld)
171 |
172 | app_txn = itxn.ApplicationCall(
173 | approval_program=compiled_contract.approval_program,
174 | clear_state_program=compiled_contract.clear_state_program,
175 | fee=0,
176 | ).submit()
177 |
178 | return app_txn.created_app.id
179 |
180 | @abimethod
181 | def arc4_deploy_app(self) -> UInt64:
182 | # Deploy using ARC4
183 | app_txn = arc4.arc4_create(HelloWorld)
184 | return app_txn.created_app.id
185 | ```
186 |
187 | ### Application Calls
188 |
189 | ```python
190 | @abimethod
191 | def noop_app_call(self, app_id: Application) -> tuple[arc4.String, String]:
192 | # Method 1: Manual ABI encoding
193 | call_txn = itxn.ApplicationCall(
194 | app_id=app_id,
195 | app_args=(arc4.arc4_signature("hello(string)string"), arc4.String("World")),
196 | ).submit()
197 | first_result = arc4.String.from_log(call_txn.last_log)
198 |
199 | # Method 2: Automatic ARC4 encoding
200 | second_result, call_txn = arc4.abi_call(
201 | HelloWorld.hello, # method signature
202 | "again", # arguments
203 | app_id=app_id,
204 | )
205 |
206 | return first_result, second_result
207 | ```
208 |
209 | ## Best Practices
210 |
211 | 1. **Transaction Management**:
212 | - Use appropriate fee settings
213 | - Handle transaction failures gracefully
214 | - Group related transactions when needed
215 | - Verify transaction results
216 |
217 | 2. **Asset Operations**:
218 | - Verify asset configuration before operations
219 | - Handle opt-in requirements
220 | - Manage asset permissions carefully
221 | - Validate asset amounts and balances
222 |
223 | 3. **Application Deployment**:
224 | - Use appropriate deployment method
225 | - Verify contract compilation
226 | - Handle deployment failures
227 | - Test deployed applications
228 |
229 | 4. **Security**:
230 | - Validate transaction parameters
231 | - Check permissions and authorizations
232 | - Handle edge cases and errors
233 | - Implement proper access controls
234 |
235 | 5. **Performance**:
236 | - Minimize number of inner transactions
237 | - Group transactions when possible
238 | - Consider fee implications
239 | - Optimize transaction parameters
240 |
241 | 6. **Error Handling**:
242 | - Check transaction success
243 | - Handle failed transactions
244 | - Provide meaningful error messages
245 | - Implement proper rollback mechanisms
246 |
247 | This guide demonstrates the various capabilities of inner transactions in Algorand smart contracts using Python. Understanding these concepts is crucial for developing complex smart contract interactions.
248 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0028.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 28
3 | title: Algorand Event Log Spec
4 | description: A methodology for structured logging by Algorand dapps.
5 | author: Dan Burton (@DanBurton)
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/144
7 | status: Final
8 | type: Standards Track
9 | category: ARC
10 | sub-category: Application
11 | created: 2022-07-18
12 | requires: 4
13 | ---
14 |
15 | # Algorand Event Log Spec
16 |
17 | ## Abstract
18 |
19 | Algorand dapps can use the <a href="https://developer.algorand.org/docs/get-details/dapps/avm/teal/opcodes/#log">`log`</a> primitive to attach information about an application call. This ARC proposes the concept of Events, which are merely a way in which data contained in these logs may be categorized and structured.
20 |
21 | In short: to emit an Event, a dapp calls `log` with ABI formatting of the log data, and a 4-byte prefix to indicate which Event it is.
22 |
23 | ## Specification
24 |
25 | Each kind of Event emitted by a given dapp has a unique 4-byte identifier. This identifier is derived from its name and the structure of its contents, like so:
26 |
27 | ### Event Signature
28 |
29 | An Event Signature is a utf8 string, comprised of: the name of the event, followed by an open paren, followed by the comma-separated names of the data types contained in the event (Types supported are the same as in [ARC-4](./arc-0004.md#types)), followed by a close paren. This follows naming conventions similar to ABI signatures, but does not include the return type.
30 |
31 | ### Deriving the 4-byte prefix from the Event Signature
32 |
33 | To derive the 4-byte prefix from the Event Signature, perform the `sha512/256` hash algorithm on the signature, and select the first 4 bytes of the result.
34 |
35 | This is the same process that is used by the [ABI Method Selector ](./arc-0004.md#method-selector) as specified in ARC-4.
36 |
37 | ### Argument Encoding
38 |
39 | The arguments to a tuple **MUST** be encoded as if they were a single [ARC-4](./arc-0004.md) tuple (opposed to concatenating the encoded values together). For example, an event signature `foo(string,string)` would contain the 4-byte prefix and a `(string,string)` encoded byteslice.
40 |
41 | ### ARC-4 Extension
42 |
43 | #### Event
44 |
45 | An event is represented as follow:
46 |
47 | ```typescript
48 | interface Event {
49 | /** The name of the event */
50 | name: string;
51 | /** Optional, user-friendly description for the event */
52 | desc?: string;
53 | /** The arguments of the event, in order */
54 | args: Array<{
55 | /** The type of the argument */
56 | type: string;
57 | /** Optional, user-friendly name for the argument */
58 | name?: string;
59 | /** Optional, user-friendly description for the argument */
60 | desc?: string;
61 | }>;
62 | }
63 | ```
64 |
65 | #### Method
66 |
67 | This ARC extends ARC-4 by adding an array events of type `Event[]` to the `Method` interface. Concretely, this give the following extended Method interface:
68 |
69 | ```typescript
70 | interface Method {
71 | /** The name of the method */
72 | name: string;
73 | /** Optional, user-friendly description for the method */
74 | desc?: string;
75 | /** The arguments of the method, in order */
76 | args: Array<{
77 | /** The type of the argument */
78 | type: string;
79 | /** Optional, user-friendly name for the argument */
80 | name?: string;
81 | /** Optional, user-friendly description for the argument */
82 | desc?: string;
83 | }>;
84 | /** All of the events that the method use */
85 | events: Event[];
86 | /** Information about the method's return value */
87 | returns: {
88 | /** The type of the return value, or "void" to indicate no return value. */
89 | type: string;
90 | /** Optional, user-friendly description for the return value */
91 | desc?: string;
92 | };
93 | }
94 | ```
95 |
96 | #### Contract
97 | > Even if events are already inside `Method`, the contract **MUST** provide an array of `Events` to improve readability.
98 |
99 | ```typescript
100 | interface Contract {
101 | /** A user-friendly name for the contract */
102 | name: string;
103 | /** Optional, user-friendly description for the interface */
104 | desc?: string;
105 | /**
106 | * Optional object listing the contract instances across different networks
107 | */
108 | networks?: {
109 | /**
110 | * The key is the base64 genesis hash of the network, and the value contains
111 | * information about the deployed contract in the network indicated by the
112 | * key
113 | */
114 | [network: string]: {
115 | /** The app ID of the deployed contract in this network */
116 | appID: number;
117 | }
118 | }
119 | /** All of the methods that the contract implements */
120 | methods: Method[];
121 | /** All of the events that the contract contains */
122 | events: Event[];
123 | }
124 | ```
125 |
126 | ## Rationale
127 |
128 | Event logging allows a dapp to convey useful information about the things it is doing. Well-designed Event logs allow observers to more easily interpret the history of interactions with the dapp. A structured approach to Event logging could also allow for indexers to more efficiently store and serve queryable data exposed by the dapp about its history.
129 |
130 | ## Reference Implementation
131 |
132 | ### Sample interpretation of Event log data
133 |
134 | An exchange dapp might emit a `Swapped` event with two `uint64` values representing quantities of currency swapped. The event signature would be: `Swapped(uint64,uint64)`.
135 |
136 | Suppose that dapp emits the following log data (seen here as base64 encoded): `HMvZJQAAAAAAAAAqAAAAAAAAAGQ=`.
137 |
138 | Suppose also that the dapp developers have declared that it follows this spec for Events, and have published the signature `Swapped(uint64,uint64)`.
139 |
140 | We can attempt to parse this log data to see if it is one of these events, as follows. (This example is written in JavaScript.)
141 |
142 | First, we can determine the expected 4-byte prefix by following the spec above:
143 |
144 | ```js
145 | > { sha512_256 } = require('js-sha512')
146 | > sig = 'Swapped(uint64,uint64)'
147 | 'Swapped(uint64,uint64)'
148 | > hash = sha512_256(sig)
149 | '1ccbd9254b9f2e1caf190c6530a8d435fc788b69954078ab937db9b5540d9567'
150 | > prefix = hash.slice(0,8) // 8 nibbles = 4 bytes
151 | '1ccbd925'
152 | ```
153 |
154 | Next, we can inspect the data to see if it matches the expected format:
155 | 4 bytes for the prefix, 8 bytes for the first uint64, and 8 bytes for the next.
156 |
157 | ```js
158 | > b = Buffer.from('HMvZJQAAAAAAAAAqAAAAAAAAAGQ=', 'base64')
159 | <Buffer 1c cb d9 25 00 00 00 00 00 00 00 2a 00 00 00 00 00 00 00 64>
160 | > b.slice(0,4).toString('hex')
161 | '1ccbd925'
162 | > b.slice(4, 12)
163 | <Buffer 00 00 00 00 00 00 00 2a>
164 | > b.slice(12,20)
165 | <Buffer 00 00 00 00 00 00 00 64>
166 | ```
167 |
168 | We see that the 4-byte prefix matches the signature for `Swapped(uint64,uint64)`, and that the rest of the data can be interpreted using the types declared for that signature. We interpret the above Event data to be: `Swapped(0x2a,0x64)`, meaning `Swapped(42,100)`.
169 |
170 | ## Security Considerations
171 |
172 | As specify in ARC-4, methods which have a `return` value MUST NOT emit an event after they log their `return` value.
173 |
174 | ## Copyright
175 |
176 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
177 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0033.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 33
3 | title: xGov Pilot - Becoming an xGov
4 | description: Explanation on how to become Expert Governors.
5 | author: Stéphane Barroso (@SudoWeezy), Adriana Belotti, Massimo Morini, Michel Treccani, John Woods, Shai Halevi
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/
7 | status: Deprecated
8 | type: Meta
9 | created: 2022-11-22
10 | ---
11 |
12 | ## Abstract
13 | This ARC proposes a standard for achieving xGov status in the Algorand governance process. xGov status grants the right to vote on [ARC-34](./arc-0034.md) proposals raised by the community, specifically spending a previously specified amount of Algo in a given Term on particular initiatives.
14 |
15 |
16 | ## Specification
17 | The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in <a href="https://www.ietf.org/rfc/rfc2119.txt">RFC-2119</a>.
18 |
19 | <table>
20 | <thead>
21 | <tr>
22 | <th colspan="2">Algorand xGovernor Summary</th>
23 | </tr>
24 | </thead>
25 | <tbody>
26 | <tr>
27 | <td>Enrolment</td>
28 | <td colspan="2">At the start of each governance period</td>
29 | </tr>
30 | <tr>
31 | <td>How to <br>become eligible</td>
32 | <td>Having completed participation in the previous governance period through official or approved decentralized finance governance.</td>
33 | </tr> <tr>
34 | <td>Requisite</td>
35 | <td colspan="2">Commit of governance reward for one year</td>
36 | </tr>
37 | <tr>
38 | <td>Duration</td>
39 | <td colspan="2">1 Year</td>
40 | </tr>
41 | <tr>
42 | <td>Voting Power</td>
43 | <td colspan="2">1 Algo committed = 1 Vote, as per REWARDS DEPOSIT</td>
44 | </tr>
45 | <tr>
46 | <td>Duty</td>
47 | <td colspan="2">Spend all available votes each time a voting period occurs. (In case there is no proposal that aligns with an xGov's preference, a mock proposal can be used as an alternative.)</td>
48 | </tr>
49 | <tr>
50 | <td rowspan="1">Disqualification</td>
51 | <td colspan="2">Forfeit rewards pledged</td>
52 | </tr>
53 | </tbody>
54 | </table>
55 |
56 | ### What is an xGov?
57 | xGovs, or Expert Governors, are a **self-selected** group of decentralized decision makers who demonstrate an enduring commitment to the Algorand community, possess a deep understanding of the blockchain’s inner workings and realities of the Algorand community, and whose interests are aligned with the good of the Algorand blockchain. These individuals have the ability to participate in the designation **and** approval of proposals, and play an instrumental role in shaping the future of the Algorand ecosystem.
58 |
59 | ### Requirement to become an xGov
60 | To become an xGov, or Expert Governor, an account:
61 | - **MUST** first be deemed eligible by having fully participated in the previous governance period, either through official or approved decentralized finance governance.
62 | - At the start of each governance period, eligible participants will have the option to enrol in the xGov program
63 | - To gain voting power as an xGov, the eligible **governor rewards for the period of the enrolment** **MUST** be committed to the xGov Term Pool and locked for a period of 12 months.
64 | > Only the GP rewards are deposited to the xGov Term Pool. The principal algo committed remains in the gov wallet (or DeFi protocol) and can be used in subsequent Governance Periods.
65 |
66 | Rewards deposited to the xGov Term Pool will be call **REWARDS DEPOSIT**.
67 |
68 | ### Voting Power
69 | Voting power in the xGov process is determined by the amount of Algo an eligible participant commits. Voting power is 1 Algo = 1 Vote, as per REWARDS DEPOSIT, and it renews at the start of every quarter - provided the xGov remain eligible.
70 | This ensures that the weight of each vote is directly proportional to the level of investment and commitment to the Algorand ecosystem.
71 |
72 | ### Duty of an xGov
73 | As an xGov, you **MUST** actively participate in the governance process by using all available votes amongst proposals each time a voting period occurs. If you don't do it, you will be disqualified.
74 | > eg. For 100 Algo as per REWARDS DEPOSIT, 100 votes available, they can be spent like this:
75 | > - 50 on proposal A
76 | > - 20 on proposal B
77 | > - 30 on proposal C
78 | > - 0 on every other proposal
79 |
80 | > In case no proposal aligns with an xGov's preference, a mock proposal can be used as an alternative.
81 |
82 | ### Disqualification
83 | As an xGov, it is important to understand the importance of your role in the governance process and the responsibilities that come with it. Failure to do so will result in disqualification. The consequences of disqualification are significant, as the xGov will lose the rewards that were committed when they entered the xGov process. It is important to take your role as an xGov seriously and fulfill your responsibilities to ensure the success of the governance process.
84 |
85 | > The rewards will remain in the xGov reward pools & will be distributed among remaining xGovs
86 |
87 | ## Rationale
88 | This proposal provides a clear and simple method for participation in xGov process, while also providing incentives for long-term commitment to the network. Separate pools for xGov and Gov allow for a more diverse range of participation, with the xGov pool providing an additional incentive for longer-term commitment. The requirement to spend 100% of your vote on proposals will ensure that participants are actively engaged in the decision-making process.
89 |
90 | After weeks of engagement with the community, it has been decided:
91 | - That the xGov process will not utilize token or NFT.
92 | - There will be no minimum or maximum amount of Algo required to participate in the xGov process
93 | - In the future, the possibility of node operation being considered as a form of participation eligibility is being explored
94 | This approach aims to make the xGov process accessible and inclusive for all members of the community.
95 |
96 | We encourage the community to continue to provide input on this topic through the submission of questions and ideas in this ARC document.
97 |
98 | > **Important**: The xGov program is still a work in progress, and changes are expected to happen over the next few years with community input and design consultation. Criteria to ENTER the program will only be applied forward, which means Term Pools already in place will not be affected by new any NEW ENTRY criteria. However, other ELIGIBILITY criteria could be added and be applied to all pools. For example, if the majority of the community deems necessary to have more than 1 voting session per quarter, this type of change could be applied to all Term pools, given ample notice and time for preparation.
99 |
100 | ## Security Considerations
101 | No funds need to leave the user's wallet in order to become an xGov.
102 |
103 | ## Copyright
104 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
105 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:cli:features:project.md:
--------------------------------------------------------------------------------
```markdown
1 | # AlgoKit Project
2 |
3 | `algokit project` is a collection of commands and command groups useful for managing algokit compliant [project workspaces](./init.md#workspaces).
4 |
5 | ## Overview
6 |
7 | The `algokit project` command group is designed to simplify the management of AlgoKit projects. It provides a suite of tools to initialize, deploy, link, list, and run various components within a project workspace. This command group ensures that developers can efficiently handle the lifecycle of their projects, from bootstrapping to deployment and beyond.
8 |
9 | ### What is a Project?
10 |
11 | In the context of AlgoKit, a "project" refers to a structured standalone or monorepo workspace that includes all the necessary components for developing, testing, and deploying Algorand applications. This may include smart contracts, frontend applications, and any associated configurations. In the context of the CLI, the `algokit project` commands help manage these components cohesively.
12 |
13 | The orchestration between workspaces, standalone projects, and custom commands is designed to provide a seamless development experience. Below is a high-level overview of how these components interact within the AlgoKit ecosystem.
14 |
15 | ```mermaid
16 | graph TD;
17 | A[`algokit project` command group] --> B["Workspace (.algokit.toml)"];
18 | A --> C["Standalone Project (.algokit.toml)"];
19 | B --> D["Sub-Project 1 (.algokit.toml)"];
20 | B --> E["Sub-Project 2 (.algokit.toml)"];
21 | C --> F["Custom Commands defined in .algokit.toml"];
22 | D --> F;
23 | E --> F;
24 | ```
25 |
26 | - **AlgoKit Project**: The root command that encompasses all project-related functionalities.
27 | - **Workspace**: A root folder that is managing multiple related sub-projects.
28 | - **Standalone Project**: An isolated project structure for simpler applications.
29 | - **Custom Commands**: Commands defined by the user in the `.algokit.toml` and automatically injected into the `algokit project run` command group.
30 |
31 | ### Workspaces vs Standalone Projects
32 |
33 | As mentioned, AlgoKit supports two distinct project structures: Workspaces and Standalone Projects. This flexibility allows developers to choose the most suitable approach for their project's needs.
34 |
35 | ### Workspaces
36 |
37 | Workspaces are designed for managing multiple related projects under a single root directory. This approach is beneficial for complex applications that consist of multiple sub-projects, such as a smart contract and a corresponding frontend application. Workspaces help in organizing these sub-projects in a structured manner, making it easier to manage dependencies and shared configurations.
38 |
39 | To initialize a project within a workspace, use the `--workspace` flag. If a workspace does not already exist, AlgoKit will create one for you by default (unless you disable it via `--no-workspace` flag). Once established, new projects can be added to this workspace, allowing for centralized management.
40 |
41 | To mark your project as `workspace` fill in the following in your `.algokit.toml` file:
42 |
43 | ```toml
44 | [project]
45 | type = 'workspace' # type specifying if the project is a workspace or standalone
46 | projects_root_path = 'projects' # path to the root folder containing all sub-projects in the workspace
47 | ```
48 |
49 | #### VSCode optimizations
50 |
51 | AlgoKit has a set of minor optimizations for VSCode users that are useful to be aware of:
52 |
53 | - Templates created with the `--workspace` flag automatically include a VSCode code-workspace file. New projects added to an AlgoKit workspace are also integrated into an existing VSCode workspace.
54 | - Using the `--ide` flag with `init` triggers automatic prompts to open the project and, if available, the code workspace in VSCode.
55 |
56 | #### Handling of the `.github` Folder
57 |
58 | A key aspect of using the `--workspace` flag is how the `.github` folder is managed. This folder, which contains GitHub-specific configurations such as workflows and issue templates, is moved from the project directory to the root of the workspace. This move is necessary because GitHub does not recognize workflows located in subdirectories.
59 |
60 | Here's a simplified overview of what happens:
61 |
62 | 1. If a `.github` folder is found in your project, its contents are transferred to the workspace's root `.github` folder.
63 | 2. Files with matching names in the destination are not overwritten; they're skipped.
64 | 3. The original `.github` folder is removed if it's left empty after the move.
65 | 4. A notification is displayed, advising you to review the moved `.github` contents to ensure everything is in order.
66 |
67 | This process ensures that your GitHub configurations are properly recognized at the workspace level, allowing you to utilize GitHub Actions and other features seamlessly across your projects.
68 |
69 | ### Standalone Projects
70 |
71 | Standalone projects are suitable for simpler applications or when working on a single component. This structure is straightforward, with each project residing in its own directory, independent of others. Standalone projects are ideal for developers who prefer simplicity or are focusing on a single aspect of their application and are sure that they will not need to add more sub-projects in the future.
72 |
73 | To create a standalone project, use the `--no-workspace` flag during initialization. This instructs AlgoKit to bypass the workspace structure and set up the project as an isolated entity.
74 |
75 | Both workspaces and standalone projects are fully supported by AlgoKit's suite of tools, ensuring developers can choose the structure that best fits their workflow without compromising on functionality.
76 |
77 | To mark your project as a standalone project fill in the following in your `.algokit.toml` file:
78 |
79 | ```toml
80 | [project]
81 | type = {'backend' | 'contract' | 'frontend'} # currently support 3 generic categories for standalone projects
82 | name = 'my-project' # unique name for the project inside workspace
83 | ```
84 |
85 | > We recommend using workspaces for most projects (hence enabled by default), as it provides a more organized and scalable approach to managing multiple sub-projects. However, standalone projects are a great choice for simple applications or when you are certain that you will not need to add more sub-projects in the future, for such cases simply append `--no-workspace` when using `algokit init` command. For more details on init command please refer to [init](./init.md) command docs.
86 |
87 | ## Features
88 |
89 | Dive into the features of the `algokit project` command group:
90 |
91 | - [bootstrap](./project/bootstrap.md) - Bootstrap your project with AlgoKit.
92 | - [deploy](./project/deploy.md) - Deploy your smart contracts effortlessly to various networks.
93 | - [link](./project/link.md) - Powerful feature designed to streamline the integration between `frontend` and `contract` projects
94 | - [list](./project/list.md) - Enumerate all projects within an AlgoKit workspace.
95 | - [run](./project/run.md) - Define custom commands and manage their execution via `algokit` cli.
96 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:classes:types_dispenser_client.TestNetDispenserApiClient.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/dispenser-client](../modules/types_dispenser_client.md) / TestNetDispenserApiClient
2 |
3 | # Class: TestNetDispenserApiClient
4 |
5 | [types/dispenser-client](../modules/types_dispenser_client.md).TestNetDispenserApiClient
6 |
7 | `TestNetDispenserApiClient` is a class that provides methods to interact with the [Algorand TestNet Dispenser API](https://github.com/algorandfoundation/algokit/blob/main/docs/testnet_api.md).
8 | It allows you to fund an address with Algo, refund a transaction, and get the funding limit for the Algo asset.
9 |
10 | The class requires an authentication token and a request timeout to be initialized. The authentication token can be provided
11 | either directly as a parameter or through an `ALGOKIT_DISPENSER_ACCESS_TOKEN` environment variable. If neither is provided, an error is thrown.
12 |
13 | The request timeout can be provided as a parameter. If not provided, a default value is used.
14 |
15 | **`Method`**
16 |
17 | fund - Sends a funding request to the dispenser API to fund the specified address with the given amount of Algo.
18 |
19 | **`Method`**
20 |
21 | refund - Sends a refund request to the dispenser API for the specified refundTxnId.
22 |
23 | **`Method`**
24 |
25 | limit - Sends a request to the dispenser API to get the funding limit for the Algo asset.
26 |
27 | **`Example`**
28 |
29 | ```typescript
30 | const client = new TestNetDispenserApiClient({ authToken: 'your_auth_token', requestTimeout: 30 });
31 | const fundResponse = await client.fund('your_address', 100);
32 | const limitResponse = await client.getLimit();
33 | await client.refund('your_transaction_id');
34 | ```
35 |
36 | **`Throws`**
37 |
38 | If neither the environment variable 'ALGOKIT_DISPENSER_ACCESS_TOKEN' nor the authToken parameter were provided.
39 |
40 | ## Table of contents
41 |
42 | ### Constructors
43 |
44 | - [constructor](types_dispenser_client.TestNetDispenserApiClient.md#constructor)
45 |
46 | ### Properties
47 |
48 | - [\_authToken](types_dispenser_client.TestNetDispenserApiClient.md#_authtoken)
49 | - [\_requestTimeout](types_dispenser_client.TestNetDispenserApiClient.md#_requesttimeout)
50 |
51 | ### Accessors
52 |
53 | - [authToken](types_dispenser_client.TestNetDispenserApiClient.md#authtoken)
54 | - [requestTimeout](types_dispenser_client.TestNetDispenserApiClient.md#requesttimeout)
55 |
56 | ### Methods
57 |
58 | - [fund](types_dispenser_client.TestNetDispenserApiClient.md#fund)
59 | - [getLimit](types_dispenser_client.TestNetDispenserApiClient.md#getlimit)
60 | - [processDispenserRequest](types_dispenser_client.TestNetDispenserApiClient.md#processdispenserrequest)
61 | - [refund](types_dispenser_client.TestNetDispenserApiClient.md#refund)
62 |
63 | ## Constructors
64 |
65 | ### constructor
66 |
67 | • **new TestNetDispenserApiClient**(`params?`): [`TestNetDispenserApiClient`](types_dispenser_client.TestNetDispenserApiClient.md)
68 |
69 | #### Parameters
70 |
71 | | Name | Type |
72 | | :------ | :------ |
73 | | `params?` | [`TestNetDispenserApiClientParams`](../interfaces/types_dispenser_client.TestNetDispenserApiClientParams.md) |
74 |
75 | #### Returns
76 |
77 | [`TestNetDispenserApiClient`](types_dispenser_client.TestNetDispenserApiClient.md)
78 |
79 | #### Defined in
80 |
81 | [src/types/dispenser-client.ts:76](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/dispenser-client.ts#L76)
82 |
83 | ## Properties
84 |
85 | ### \_authToken
86 |
87 | • `Private` **\_authToken**: `string`
88 |
89 | #### Defined in
90 |
91 | [src/types/dispenser-client.ts:73](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/dispenser-client.ts#L73)
92 |
93 | ___
94 |
95 | ### \_requestTimeout
96 |
97 | • `Private` **\_requestTimeout**: `number`
98 |
99 | #### Defined in
100 |
101 | [src/types/dispenser-client.ts:74](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/dispenser-client.ts#L74)
102 |
103 | ## Accessors
104 |
105 | ### authToken
106 |
107 | • `get` **authToken**(): `string`
108 |
109 | The authentication token used for API requests.
110 |
111 | #### Returns
112 |
113 | `string`
114 |
115 | #### Defined in
116 |
117 | [src/types/dispenser-client.ts:92](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/dispenser-client.ts#L92)
118 |
119 | ___
120 |
121 | ### requestTimeout
122 |
123 | • `get` **requestTimeout**(): `number`
124 |
125 | The timeout for API requests, in seconds.
126 |
127 | #### Returns
128 |
129 | `number`
130 |
131 | #### Defined in
132 |
133 | [src/types/dispenser-client.ts:96](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/dispenser-client.ts#L96)
134 |
135 | ## Methods
136 |
137 | ### fund
138 |
139 | ▸ **fund**(`address`, `amount`): `Promise`\<[`DispenserFundResponse`](../interfaces/types_dispenser_client.DispenserFundResponse.md)\>
140 |
141 | Sends a funding request to the dispenser API to fund the specified address with the given amount of Algo.
142 |
143 | #### Parameters
144 |
145 | | Name | Type | Description |
146 | | :------ | :------ | :------ |
147 | | `address` | `string` \| `Address` | The address to fund. |
148 | | `amount` | `number` \| `bigint` | The amount of µAlgo to fund. |
149 |
150 | #### Returns
151 |
152 | `Promise`\<[`DispenserFundResponse`](../interfaces/types_dispenser_client.DispenserFundResponse.md)\>
153 |
154 | DispenserFundResponse: An object containing the transaction ID and funded amount.
155 |
156 | #### Defined in
157 |
158 | [src/types/dispenser-client.ts:158](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/dispenser-client.ts#L158)
159 |
160 | ___
161 |
162 | ### getLimit
163 |
164 | ▸ **getLimit**(): `Promise`\<[`DispenserLimitResponse`](../interfaces/types_dispenser_client.DispenserLimitResponse.md)\>
165 |
166 | Sends a request to the dispenser API to get the funding limit for the Algo asset.
167 |
168 | #### Returns
169 |
170 | `Promise`\<[`DispenserLimitResponse`](../interfaces/types_dispenser_client.DispenserLimitResponse.md)\>
171 |
172 | DispenserLimitResponse: An object containing the funding limit amount.
173 |
174 | #### Defined in
175 |
176 | [src/types/dispenser-client.ts:188](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/dispenser-client.ts#L188)
177 |
178 | ___
179 |
180 | ### processDispenserRequest
181 |
182 | ▸ **processDispenserRequest**(`authToken`, `urlSuffix`, `body?`, `method?`): `Promise`\<`Response`\>
183 |
184 | Processes a dispenser API request.
185 |
186 | #### Parameters
187 |
188 | | Name | Type | Default value | Description |
189 | | :------ | :------ | :------ | :------ |
190 | | `authToken` | `string` | `undefined` | The authentication token. |
191 | | `urlSuffix` | `string` | `undefined` | The URL suffix for the API request. |
192 | | `body` | ``null`` \| `Record`\<`string`, `string` \| `number`\> | `null` | The request body. |
193 | | `method` | `string` | `'POST'` | The HTTP method. |
194 |
195 | #### Returns
196 |
197 | `Promise`\<`Response`\>
198 |
199 | The API response.
200 |
201 | #### Defined in
202 |
203 | [src/types/dispenser-client.ts:110](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/dispenser-client.ts#L110)
204 |
205 | ___
206 |
207 | ### refund
208 |
209 | ▸ **refund**(`refundTxnId`): `Promise`\<`void`\>
210 |
211 | Sends a refund request to the dispenser API for the specified refundTxnId.
212 |
213 | #### Parameters
214 |
215 | | Name | Type | Description |
216 | | :------ | :------ | :------ |
217 | | `refundTxnId` | `string` | The transaction ID to refund. |
218 |
219 | #### Returns
220 |
221 | `Promise`\<`void`\>
222 |
223 | #### Defined in
224 |
225 | [src/types/dispenser-client.ts:179](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/dispenser-client.ts#L179)
226 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0047.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 47
3 | title: Logic Signature Templates
4 | description: Defining templated logic signatures so wallets can safely sign them.
5 | author: Joe Polny (@joe-p)
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/226
7 | status: Final
8 | type: Standards Track
9 | category: ARC
10 | sub-category: Wallet
11 | created: 2023-07-17
12 | ---
13 |
14 | ## Abstract
15 | This standard allows wallets to sign known logic signatures and clearly tell the user what they are signing.
16 |
17 | ## Motivation
18 | Currently, most Algorand wallets do not enable the signing of logic signature programs for the purpose of delegation. The rationale is to prevent users from signing malicious programs, but this limitation also prevents non-malicious delegated logic signatures from being used in the Algorand ecosystem. As such, there needs to be a way to provide a safe way for wallets to sign logic signatures without putting users at risk.
19 |
20 | ## Specification
21 |
22 | A logic signature **MUST** be described via the following JSON interface(s):
23 |
24 | ### Interface
25 |
26 | ```typescript
27 | interface LogicSignatureDescription {
28 | name: string,
29 | description: string,
30 | program: string,
31 | variables: {
32 | variable: string,
33 | name: string,
34 | type: string,
35 | description: string
36 | }[]
37 | }
38 | ```
39 |
40 | | Key | Description |
41 | | --- | ----------- |
42 | | `name` | The name of the logic signature. **SHOULD** be short and descriptive |
43 | | `description` | A description of what the logic signature does |
44 | | `program` | base64 encoding of the TEAL program source
45 | | `variables` | An array of variables in the program |
46 | | `variables.variable` | The name of the variable in the templated program. |
47 | | `variables.name` | Human-friendly name for the variable. **SHOULD** be short and descriptive |
48 | | `variables.type` | **MUST** be a type defined below in the `type` section |
49 | | `variables.description` | A description of how this variable is used in the program |
50 |
51 | ### Variables
52 |
53 | A variable in the program **MUST** be start with `TMPL_`
54 |
55 | #### Types
56 |
57 | All non-reference ABI types **MUST** be supported by the client. ABI values **MUST** be encoded in base16 (with the leading `0x`) with the following exceptions:
58 |
59 | | Type | Description |
60 | | ---- | ----------- |
61 | | `address` | 58-character base32 Algorand public address. Typically to be used as an argument to the `addr` opcode. Front-ends **SHOULD** provide a link to the address on an explorer
62 | | `application` | Application ID. Alias for `uint64`. Front-ends **SHOULD** provide a link to the app on an explorer |
63 | | `asset` | Asset ID. Alias for `uint64`. Front-ends **SHOULD** provide a link to the asset on an explorer |
64 | | `string` | UTF-8 string. Typically used as an argument to `byte`, `method`, or a branching opcode.
65 | | `hex` | base16 encoding of binary data. Typically used as an argument to `byte`. **MUST** be prefixed with `0x` |
66 |
67 | For all other value, front-ends **MUST** decode the ABI value to display the human-readable value to the user.
68 |
69 | ### Input Validation
70 |
71 | All ABI values **MUST** be encoded as base16 and prefixed with `0x`, with the exception of `uint64` which should be provided as an integer.
72 |
73 | String values **MUST NOT** include any unescaped `"` to ensure there is no TEAL injection.
74 |
75 | All values **MUST** be validated to ensure they are encoded properly. This includes the following checks:
76 |
77 | * An `address` value must be a valid Algorand address
78 | * A `uint64`, `application`, or `asset` value must be a valid unsigned 64-bit integer
79 |
80 | ### Unique Identification
81 |
82 | To enable unique identification of a description, clients **MUST** calculate the SHA256 hash of the JSON description canonicalized in accordance with <a href="https://www.rfc-editor.org/rfc/rfc8785">RFC 8785</a>.
83 |
84 | ### WalletConnect Method
85 |
86 | For wallets to support this ARC, they need to support the a `algo_templatedLsig` method.
87 |
88 | The method expects three parameters described by the interface below
89 |
90 | ```ts
91 | interface TemplatedLsigParams {
92 | /** The canoncalized ARC47 templated lsig JSON as described in this ARC */
93 | arc47: string
94 | /** The values of the templated variables, if there are any */
95 | values?: {[variable: string]: string | number}
96 | /** The hash of the expected program. Wallets should compile the lsig with the given values to verify the program hash matches */
97 | hash: string
98 | }
99 | ```
100 |
101 | ## Rationale
102 |
103 | This provides a way for frontends to clearly display to the user what is being signed when signing a logic signature.
104 |
105 | Template variables must be immediate arguments. Otherwise a string variable could specify the opcode in the program, which could have unintended and unclear consequences.
106 |
107 | `TMPL_` prefix is used to align with existing template variable tooling.
108 |
109 | Hashing canonicalized JSON is useful for ensuring clients, such as wallets, can create a allowlist of templated logic signatures.
110 |
111 | ## Backwards Compatibility
112 | N/A
113 |
114 | ## Test Cases
115 | N/A
116 |
117 | ## Reference Implementation
118 |
119 | A reference implementation can be found in the`../assets/arc-0047` folder.
120 |
121 | [lsig.teal](../assets/arc-0047/lsig.teal) contains the templated TEAL code for a logic signature that allows payments of a specific amount every 25,000 blocks.
122 |
123 | [dapp.ts](../assets/arc-0047/dapp.ts) contains a TypeScript script showcasing how a dapp would form a wallet connect request for a templated logic signature.
124 |
125 | [wallet.ts](../assets/arc-0047/wallet.ts) contains a TypeScript script showcasing how a wallet would handle a request for signing a templated logic signature.
126 |
127 | [validate.ts](../assets/arc-0047/validate.ts) contains a TypeScript script showcasing how one could validate templated TEAL and variable values.
128 |
129 | ### String Variables
130 |
131 |
132 | #### Invalid: Partial Argument
133 | ```
134 | #pragma version 9
135 | byte "Hello, TMPL_NAME"
136 | ```
137 |
138 | This is not valid because `TMPL_NAME` is not the full immediate argument.
139 |
140 | #### Invalid: Not An Argument
141 | ```
142 | #pragma version 9
143 | TMPL_PUSH_HELLO_NAME
144 | ```
145 |
146 | This is not valid because `TMPL_PUSH_HELLO_NAME` is not an immediate argument to an opcode.
147 |
148 | #### Valid
149 | ```
150 | #pragma version 9
151 | byte TMPL_HELLO_NAME
152 | ```
153 |
154 | This is valid as `TMPL_HELLO_NAME` is the entire immediate argument of the `byte` opcode. A possible value could be `Hello, AlgoDev`
155 |
156 | ### Hex Variables
157 |
158 | #### Valid
159 | ```
160 | #pragma version 9
161 | byte TMPL_DEAD_BEEF
162 | ```
163 |
164 | This is valid as `TMPL_DEAD_BEEF` is the full immediate argument to the `byte` opcode. A possible value could be `0xdeadbeef`.
165 |
166 |
167 | ## Security Considerations
168 | It should be made clear that this standard alone does not define how frontends, particularly wallets, should deem a logic signature to be safe. This is a decision made solely by the front-ends as to which logic signatures they allow to be signed. It is **RECOMMENDED** to only support the signing of audited or otherwise trusted logic signatures.
169 |
170 | ## Copyright
171 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
172 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.AssetParams.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / AssetParams
2 |
3 | # Class: AssetParams
4 |
5 | [modelsv2](../modules/modelsv2.md).AssetParams
6 |
7 | AssetParams specifies the parameters for an asset.
8 | (apar) when part of an AssetConfig transaction.
9 | Definition:
10 | data/transactions/asset.go : AssetParams
11 |
12 | ## Hierarchy
13 |
14 | - `default`
15 |
16 | ↳ **`AssetParams`**
17 |
18 | ## Table of contents
19 |
20 | ### Constructors
21 |
22 | - [constructor](modelsv2.AssetParams.md#constructor)
23 |
24 | ### Properties
25 |
26 | - [attribute\_map](modelsv2.AssetParams.md#attribute_map)
27 | - [clawback](modelsv2.AssetParams.md#clawback)
28 | - [creator](modelsv2.AssetParams.md#creator)
29 | - [decimals](modelsv2.AssetParams.md#decimals)
30 | - [defaultFrozen](modelsv2.AssetParams.md#defaultfrozen)
31 | - [freeze](modelsv2.AssetParams.md#freeze)
32 | - [manager](modelsv2.AssetParams.md#manager)
33 | - [metadataHash](modelsv2.AssetParams.md#metadatahash)
34 | - [name](modelsv2.AssetParams.md#name)
35 | - [nameB64](modelsv2.AssetParams.md#nameb64)
36 | - [reserve](modelsv2.AssetParams.md#reserve)
37 | - [total](modelsv2.AssetParams.md#total)
38 | - [unitName](modelsv2.AssetParams.md#unitname)
39 | - [unitNameB64](modelsv2.AssetParams.md#unitnameb64)
40 | - [url](modelsv2.AssetParams.md#url)
41 | - [urlB64](modelsv2.AssetParams.md#urlb64)
42 |
43 | ### Methods
44 |
45 | - [get\_obj\_for\_encoding](modelsv2.AssetParams.md#get_obj_for_encoding)
46 | - [from\_obj\_for\_encoding](modelsv2.AssetParams.md#from_obj_for_encoding)
47 |
48 | ## Constructors
49 |
50 | ### constructor
51 |
52 | • **new AssetParams**(`«destructured»`)
53 |
54 | Creates a new `AssetParams` object.
55 |
56 | #### Parameters
57 |
58 | | Name | Type |
59 | | :------ | :------ |
60 | | `«destructured»` | `Object` |
61 | | › `clawback?` | `string` |
62 | | › `creator` | `string` |
63 | | › `decimals` | `number` \| `bigint` |
64 | | › `defaultFrozen?` | `boolean` |
65 | | › `freeze?` | `string` |
66 | | › `manager?` | `string` |
67 | | › `metadataHash?` | `string` \| `Uint8Array` |
68 | | › `name?` | `string` |
69 | | › `nameB64?` | `string` \| `Uint8Array` |
70 | | › `reserve?` | `string` |
71 | | › `total` | `number` \| `bigint` |
72 | | › `unitName?` | `string` |
73 | | › `unitNameB64?` | `string` \| `Uint8Array` |
74 | | › `url?` | `string` |
75 | | › `urlB64?` | `string` \| `Uint8Array` |
76 |
77 | #### Overrides
78 |
79 | BaseModel.constructor
80 |
81 | #### Defined in
82 |
83 | client/v2/algod/models/types.ts:1846
84 |
85 | ## Properties
86 |
87 | ### attribute\_map
88 |
89 | • **attribute\_map**: `Record`\<`string`, `string`\>
90 |
91 | #### Inherited from
92 |
93 | BaseModel.attribute\_map
94 |
95 | #### Defined in
96 |
97 | client/v2/basemodel.ts:56
98 |
99 | ___
100 |
101 | ### clawback
102 |
103 | • `Optional` **clawback**: `string`
104 |
105 | (c) Address of account used to clawback holdings of this asset. If empty,
106 | clawback is not permitted.
107 |
108 | #### Defined in
109 |
110 | client/v2/algod/models/types.ts:1755
111 |
112 | ___
113 |
114 | ### creator
115 |
116 | • **creator**: `string`
117 |
118 | The address that created this asset. This is the address where the parameters
119 | for this asset can be found, and also the address where unwanted asset units can
120 | be sent in the worst case.
121 |
122 | #### Defined in
123 |
124 | client/v2/algod/models/types.ts:1736
125 |
126 | ___
127 |
128 | ### decimals
129 |
130 | • **decimals**: `number` \| `bigint`
131 |
132 | (dc) The number of digits to use after the decimal point when displaying this
133 | asset. If 0, the asset is not divisible. If 1, the base unit of the asset is in
134 | tenths. If 2, the base unit of the asset is in hundredths, and so on. This value
135 | must be between 0 and 19 (inclusive).
136 |
137 | #### Defined in
138 |
139 | client/v2/algod/models/types.ts:1744
140 |
141 | ___
142 |
143 | ### defaultFrozen
144 |
145 | • `Optional` **defaultFrozen**: `boolean`
146 |
147 | (df) Whether holdings of this asset are frozen by default.
148 |
149 | #### Defined in
150 |
151 | client/v2/algod/models/types.ts:1760
152 |
153 | ___
154 |
155 | ### freeze
156 |
157 | • `Optional` **freeze**: `string`
158 |
159 | (f) Address of account used to freeze holdings of this asset. If empty, freezing
160 | is not permitted.
161 |
162 | #### Defined in
163 |
164 | client/v2/algod/models/types.ts:1766
165 |
166 | ___
167 |
168 | ### manager
169 |
170 | • `Optional` **manager**: `string`
171 |
172 | (m) Address of account used to manage the keys of this asset and to destroy it.
173 |
174 | #### Defined in
175 |
176 | client/v2/algod/models/types.ts:1771
177 |
178 | ___
179 |
180 | ### metadataHash
181 |
182 | • `Optional` **metadataHash**: `Uint8Array`
183 |
184 | (am) A commitment to some unspecified asset metadata. The format of this
185 | metadata is up to the application.
186 |
187 | #### Defined in
188 |
189 | client/v2/algod/models/types.ts:1777
190 |
191 | ___
192 |
193 | ### name
194 |
195 | • `Optional` **name**: `string`
196 |
197 | (an) Name of this asset, as supplied by the creator. Included only when the
198 | asset name is composed of printable utf-8 characters.
199 |
200 | #### Defined in
201 |
202 | client/v2/algod/models/types.ts:1783
203 |
204 | ___
205 |
206 | ### nameB64
207 |
208 | • `Optional` **nameB64**: `Uint8Array`
209 |
210 | Base64 encoded name of this asset, as supplied by the creator.
211 |
212 | #### Defined in
213 |
214 | client/v2/algod/models/types.ts:1788
215 |
216 | ___
217 |
218 | ### reserve
219 |
220 | • `Optional` **reserve**: `string`
221 |
222 | (r) Address of account holding reserve (non-minted) units of this asset.
223 |
224 | #### Defined in
225 |
226 | client/v2/algod/models/types.ts:1793
227 |
228 | ___
229 |
230 | ### total
231 |
232 | • **total**: `number` \| `bigint`
233 |
234 | (t) The total number of units of this asset.
235 |
236 | #### Defined in
237 |
238 | client/v2/algod/models/types.ts:1749
239 |
240 | ___
241 |
242 | ### unitName
243 |
244 | • `Optional` **unitName**: `string`
245 |
246 | (un) Name of a unit of this asset, as supplied by the creator. Included only
247 | when the name of a unit of this asset is composed of printable utf-8 characters.
248 |
249 | #### Defined in
250 |
251 | client/v2/algod/models/types.ts:1799
252 |
253 | ___
254 |
255 | ### unitNameB64
256 |
257 | • `Optional` **unitNameB64**: `Uint8Array`
258 |
259 | Base64 encoded name of a unit of this asset, as supplied by the creator.
260 |
261 | #### Defined in
262 |
263 | client/v2/algod/models/types.ts:1804
264 |
265 | ___
266 |
267 | ### url
268 |
269 | • `Optional` **url**: `string`
270 |
271 | (au) URL where more information about the asset can be retrieved. Included only
272 | when the URL is composed of printable utf-8 characters.
273 |
274 | #### Defined in
275 |
276 | client/v2/algod/models/types.ts:1810
277 |
278 | ___
279 |
280 | ### urlB64
281 |
282 | • `Optional` **urlB64**: `Uint8Array`
283 |
284 | Base64 encoded URL where more information about the asset can be retrieved.
285 |
286 | #### Defined in
287 |
288 | client/v2/algod/models/types.ts:1815
289 |
290 | ## Methods
291 |
292 | ### get\_obj\_for\_encoding
293 |
294 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
295 |
296 | Get an object ready for encoding to either JSON or msgpack.
297 |
298 | #### Parameters
299 |
300 | | Name | Type | Default value | Description |
301 | | :------ | :------ | :------ | :------ |
302 | | `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. |
303 |
304 | #### Returns
305 |
306 | `Record`\<`string`, `any`\>
307 |
308 | #### Inherited from
309 |
310 | BaseModel.get\_obj\_for\_encoding
311 |
312 | #### Defined in
313 |
314 | client/v2/basemodel.ts:65
315 |
316 | ___
317 |
318 | ### from\_obj\_for\_encoding
319 |
320 | ▸ `Static` **from_obj_for_encoding**(`data`): [`AssetParams`](modelsv2.AssetParams.md)
321 |
322 | #### Parameters
323 |
324 | | Name | Type |
325 | | :------ | :------ |
326 | | `data` | `Record`\<`string`, `any`\> |
327 |
328 | #### Returns
329 |
330 | [`AssetParams`](modelsv2.AssetParams.md)
331 |
332 | #### Defined in
333 |
334 | client/v2/algod/models/types.ts:1928
335 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_asset.AssetOptInParams.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/asset](../modules/types_asset.md) / AssetOptInParams
2 |
3 | # Interface: AssetOptInParams
4 |
5 | [types/asset](../modules/types_asset.md).AssetOptInParams
6 |
7 | **`Deprecated`**
8 |
9 | Parameters for `assetOptIn` call.
10 |
11 | ## Hierarchy
12 |
13 | - [`SendTransactionParams`](types_transaction.SendTransactionParams.md)
14 |
15 | ↳ **`AssetOptInParams`**
16 |
17 | ↳↳ [`AssetOptOutParams`](types_asset.AssetOptOutParams.md)
18 |
19 | ## Table of contents
20 |
21 | ### Properties
22 |
23 | - [account](types_asset.AssetOptInParams.md#account)
24 | - [assetId](types_asset.AssetOptInParams.md#assetid)
25 | - [atc](types_asset.AssetOptInParams.md#atc)
26 | - [fee](types_asset.AssetOptInParams.md#fee)
27 | - [lease](types_asset.AssetOptInParams.md#lease)
28 | - [maxFee](types_asset.AssetOptInParams.md#maxfee)
29 | - [maxRoundsToWaitForConfirmation](types_asset.AssetOptInParams.md#maxroundstowaitforconfirmation)
30 | - [note](types_asset.AssetOptInParams.md#note)
31 | - [populateAppCallResources](types_asset.AssetOptInParams.md#populateappcallresources)
32 | - [skipSending](types_asset.AssetOptInParams.md#skipsending)
33 | - [skipWaiting](types_asset.AssetOptInParams.md#skipwaiting)
34 | - [suppressLog](types_asset.AssetOptInParams.md#suppresslog)
35 | - [transactionParams](types_asset.AssetOptInParams.md#transactionparams)
36 |
37 | ## Properties
38 |
39 | ### account
40 |
41 | • **account**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
42 |
43 | The account to opt in/out for
44 |
45 | #### Defined in
46 |
47 | [src/types/asset.ts:72](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L72)
48 |
49 | ___
50 |
51 | ### assetId
52 |
53 | • **assetId**: `number`
54 |
55 | The ID of the assets to opt in for / out of
56 |
57 | #### Defined in
58 |
59 | [src/types/asset.ts:74](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L74)
60 |
61 | ___
62 |
63 | ### atc
64 |
65 | • `Optional` **atc**: `AtomicTransactionComposer`
66 |
67 | An optional `AtomicTransactionComposer` to add the transaction to, if specified then `skipSending: undefined` has the same effect as `skipSending: true`
68 |
69 | #### Inherited from
70 |
71 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[atc](types_transaction.SendTransactionParams.md#atc)
72 |
73 | #### Defined in
74 |
75 | [src/types/transaction.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L36)
76 |
77 | ___
78 |
79 | ### fee
80 |
81 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
82 |
83 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
84 |
85 | #### Inherited from
86 |
87 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[fee](types_transaction.SendTransactionParams.md#fee)
88 |
89 | #### Defined in
90 |
91 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
92 |
93 | ___
94 |
95 | ### lease
96 |
97 | • `Optional` **lease**: `string` \| `Uint8Array`
98 |
99 | An (optional) [transaction lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) to apply
100 |
101 | #### Defined in
102 |
103 | [src/types/asset.ts:80](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L80)
104 |
105 | ___
106 |
107 | ### maxFee
108 |
109 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
110 |
111 | 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
112 |
113 | #### Inherited from
114 |
115 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxFee](types_transaction.SendTransactionParams.md#maxfee)
116 |
117 | #### Defined in
118 |
119 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
120 |
121 | ___
122 |
123 | ### maxRoundsToWaitForConfirmation
124 |
125 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
126 |
127 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
128 |
129 | #### Inherited from
130 |
131 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxRoundsToWaitForConfirmation](types_transaction.SendTransactionParams.md#maxroundstowaitforconfirmation)
132 |
133 | #### Defined in
134 |
135 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
136 |
137 | ___
138 |
139 | ### note
140 |
141 | • `Optional` **note**: [`TransactionNote`](../modules/types_transaction.md#transactionnote)
142 |
143 | The (optional) transaction note
144 |
145 | #### Defined in
146 |
147 | [src/types/asset.ts:78](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L78)
148 |
149 | ___
150 |
151 | ### populateAppCallResources
152 |
153 | • `Optional` **populateAppCallResources**: `boolean`
154 |
155 | 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.
156 |
157 | #### Inherited from
158 |
159 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[populateAppCallResources](types_transaction.SendTransactionParams.md#populateappcallresources)
160 |
161 | #### Defined in
162 |
163 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
164 |
165 | ___
166 |
167 | ### skipSending
168 |
169 | • `Optional` **skipSending**: `boolean`
170 |
171 | Whether to skip signing and sending the transaction to the chain (default: transaction signed and sent to chain, unless `atc` specified)
172 | and instead just return the raw transaction, e.g. so you can add it to a group of transactions
173 |
174 | #### Inherited from
175 |
176 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipSending](types_transaction.SendTransactionParams.md#skipsending)
177 |
178 | #### Defined in
179 |
180 | [src/types/transaction.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L32)
181 |
182 | ___
183 |
184 | ### skipWaiting
185 |
186 | • `Optional` **skipWaiting**: `boolean`
187 |
188 | Whether to skip waiting for the submitted transaction (only relevant if `skipSending` is `false` or unset)
189 |
190 | #### Inherited from
191 |
192 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipWaiting](types_transaction.SendTransactionParams.md#skipwaiting)
193 |
194 | #### Defined in
195 |
196 | [src/types/transaction.ts:34](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L34)
197 |
198 | ___
199 |
200 | ### suppressLog
201 |
202 | • `Optional` **suppressLog**: `boolean`
203 |
204 | Whether to suppress log messages from transaction send, default: do not suppress
205 |
206 | #### Inherited from
207 |
208 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[suppressLog](types_transaction.SendTransactionParams.md#suppresslog)
209 |
210 | #### Defined in
211 |
212 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
213 |
214 | ___
215 |
216 | ### transactionParams
217 |
218 | • `Optional` **transactionParams**: `SuggestedParams`
219 |
220 | Optional transaction parameters
221 |
222 | #### Defined in
223 |
224 | [src/types/asset.ts:76](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L76)
225 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:classes:types_asset_manager.AssetManager.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/asset-manager](../modules/types_asset_manager.md) / AssetManager
2 |
3 | # Class: AssetManager
4 |
5 | [types/asset-manager](../modules/types_asset_manager.md).AssetManager
6 |
7 | Allows management of asset information.
8 |
9 | ## Table of contents
10 |
11 | ### Constructors
12 |
13 | - [constructor](types_asset_manager.AssetManager.md#constructor)
14 |
15 | ### Properties
16 |
17 | - [\_algod](types_asset_manager.AssetManager.md#_algod)
18 | - [\_newGroup](types_asset_manager.AssetManager.md#_newgroup)
19 |
20 | ### Methods
21 |
22 | - [bulkOptIn](types_asset_manager.AssetManager.md#bulkoptin)
23 | - [bulkOptOut](types_asset_manager.AssetManager.md#bulkoptout)
24 | - [getAccountInformation](types_asset_manager.AssetManager.md#getaccountinformation)
25 | - [getById](types_asset_manager.AssetManager.md#getbyid)
26 |
27 | ## Constructors
28 |
29 | ### constructor
30 |
31 | • **new AssetManager**(`algod`, `newGroup`): [`AssetManager`](types_asset_manager.AssetManager.md)
32 |
33 | Create a new asset manager.
34 |
35 | #### Parameters
36 |
37 | | Name | Type | Description |
38 | | :------ | :------ | :------ |
39 | | `algod` | `AlgodClient` | An algod client |
40 | | `newGroup` | () => [`TransactionComposer`](types_composer.TransactionComposer.md) | A function that creates a new `TransactionComposer` transaction group |
41 |
42 | #### Returns
43 |
44 | [`AssetManager`](types_asset_manager.AssetManager.md)
45 |
46 | **`Example`**
47 |
48 | ```typescript
49 | const assetManager = new AssetManager(algod, () => new TransactionComposer({algod, () => signer, () => suggestedParams}))
50 | ```
51 |
52 | #### Defined in
53 |
54 | [src/types/asset-manager.ts:151](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L151)
55 |
56 | ## Properties
57 |
58 | ### \_algod
59 |
60 | • `Private` **\_algod**: `AlgodClient`
61 |
62 | #### Defined in
63 |
64 | [src/types/asset-manager.ts:139](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L139)
65 |
66 | ___
67 |
68 | ### \_newGroup
69 |
70 | • `Private` **\_newGroup**: () => [`TransactionComposer`](types_composer.TransactionComposer.md)
71 |
72 | #### Type declaration
73 |
74 | ▸ (): [`TransactionComposer`](types_composer.TransactionComposer.md)
75 |
76 | ##### Returns
77 |
78 | [`TransactionComposer`](types_composer.TransactionComposer.md)
79 |
80 | #### Defined in
81 |
82 | [src/types/asset-manager.ts:140](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L140)
83 |
84 | ## Methods
85 |
86 | ### bulkOptIn
87 |
88 | ▸ **bulkOptIn**(`account`, `assetIds`, `options?`): `Promise`\<[`BulkAssetOptInOutResult`](../interfaces/types_asset_manager.BulkAssetOptInOutResult.md)[]\>
89 |
90 | Opt an account in to a list of Algorand Standard Assets.
91 |
92 | Transactions will be sent in batches of 16 as transaction groups.
93 |
94 | #### Parameters
95 |
96 | | Name | Type | Description |
97 | | :------ | :------ | :------ |
98 | | `account` | `string` \| `Address` | The account to opt-in |
99 | | `assetIds` | `bigint`[] | The list of asset IDs to opt-in to |
100 | | `options?` | `Omit`\<[`CommonTransactionParams`](../modules/types_composer.md#commontransactionparams), ``"sender"``\> & [`SendParams`](../interfaces/types_transaction.SendParams.md) | Any parameters to control the transaction or execution of the transaction |
101 |
102 | #### Returns
103 |
104 | `Promise`\<[`BulkAssetOptInOutResult`](../interfaces/types_asset_manager.BulkAssetOptInOutResult.md)[]\>
105 |
106 | An array of records matching asset ID to transaction ID of the opt in
107 |
108 | **`Example`**
109 |
110 | ```typescript
111 | // Basic example
112 | algorand.asset.bulkOptIn("ACCOUNTADDRESS", [12345n, 67890n])
113 | // With configuration
114 | algorand.asset.bulkOptIn("ACCOUNTADDRESS", [12345n, 67890n], { maxFee: (1000).microAlgo(), suppressLog: true })
115 | ```
116 |
117 | #### Defined in
118 |
119 | [src/types/asset-manager.ts:233](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L233)
120 |
121 | ___
122 |
123 | ### bulkOptOut
124 |
125 | ▸ **bulkOptOut**(`account`, `assetIds`, `options?`): `Promise`\<[`BulkAssetOptInOutResult`](../interfaces/types_asset_manager.BulkAssetOptInOutResult.md)[]\>
126 |
127 | Opt an account out of a list of Algorand Standard Assets.
128 |
129 | Transactions will be sent in batches of 16 as transaction groups.
130 |
131 | #### Parameters
132 |
133 | | Name | Type | Description |
134 | | :------ | :------ | :------ |
135 | | `account` | `string` \| `Address` | The account to opt-in |
136 | | `assetIds` | `bigint`[] | The list of asset IDs to opt-out of |
137 | | `options?` | `Omit`\<[`CommonTransactionParams`](../modules/types_composer.md#commontransactionparams), ``"sender"``\> & [`SendParams`](../interfaces/types_transaction.SendParams.md) & \{ `ensureZeroBalance?`: `boolean` } | Any parameters to control the transaction or execution of the transaction |
138 |
139 | #### Returns
140 |
141 | `Promise`\<[`BulkAssetOptInOutResult`](../interfaces/types_asset_manager.BulkAssetOptInOutResult.md)[]\>
142 |
143 | An array of records matching asset ID to transaction ID of the opt in
144 |
145 | **`Example`**
146 |
147 | ```typescript
148 | // Basic example
149 | algorand.asset.bulkOptOut("ACCOUNTADDRESS", [12345n, 67890n])
150 | // With configuration
151 | algorand.asset.bulkOptOut("ACCOUNTADDRESS", [12345n, 67890n], { ensureZeroBalance: true, maxFee: (1000).microAlgo(), suppressLog: true })
152 | ```
153 |
154 | #### Defined in
155 |
156 | [src/types/asset-manager.ts:283](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L283)
157 |
158 | ___
159 |
160 | ### getAccountInformation
161 |
162 | ▸ **getAccountInformation**(`sender`, `assetId`): `Promise`\<[`AccountAssetInformation`](../modules/types_account.md#accountassetinformation)\>
163 |
164 | Returns the given sender account's asset holding for a given asset.
165 |
166 | #### Parameters
167 |
168 | | Name | Type | Description |
169 | | :------ | :------ | :------ |
170 | | `sender` | `string` \| `Address` | The address of the sender/account to look up |
171 | | `assetId` | `bigint` | The ID of the asset to return a holding for |
172 |
173 | #### Returns
174 |
175 | `Promise`\<[`AccountAssetInformation`](../modules/types_account.md#accountassetinformation)\>
176 |
177 | The account asset holding information
178 |
179 | **`Example`**
180 |
181 | ```typescript
182 | const address = "XBYLS2E6YI6XXL5BWCAMOA4GTWHXWENZMX5UHXMRNWWUQ7BXCY5WC5TEPA";
183 | const assetId = 123345n;
184 | const accountInfo = await algorand.asset.getAccountInformation(address, assetId);
185 | ```
186 |
187 | [Response data schema details](https://developer.algorand.org/docs/rest-apis/algod/#get-v2accountsaddressassetsasset-id)
188 |
189 | #### Defined in
190 |
191 | [src/types/asset-manager.ts:205](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L205)
192 |
193 | ___
194 |
195 | ### getById
196 |
197 | ▸ **getById**(`assetId`): `Promise`\<[`AssetInformation`](../interfaces/types_asset_manager.AssetInformation.md)\>
198 |
199 | Returns the current asset information for the asset with the given ID.
200 |
201 | #### Parameters
202 |
203 | | Name | Type | Description |
204 | | :------ | :------ | :------ |
205 | | `assetId` | `bigint` | The ID of the asset |
206 |
207 | #### Returns
208 |
209 | `Promise`\<[`AssetInformation`](../interfaces/types_asset_manager.AssetInformation.md)\>
210 |
211 | The asset information
212 |
213 | **`Example`**
214 |
215 | ```typescript
216 | const assetInfo = await assetManager.getById(12353n);
217 | ```
218 |
219 | #### Defined in
220 |
221 | [src/types/asset-manager.ts:167](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset-manager.ts#L167)
222 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:indexerModels.AssetParams.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / AssetParams
2 |
3 | # Class: AssetParams
4 |
5 | [indexerModels](../modules/indexerModels.md).AssetParams
6 |
7 | AssetParams specifies the parameters for an asset.
8 | (apar) when part of an AssetConfig transaction.
9 | Definition:
10 | data/transactions/asset.go : AssetParams
11 |
12 | ## Hierarchy
13 |
14 | - `default`
15 |
16 | ↳ **`AssetParams`**
17 |
18 | ## Table of contents
19 |
20 | ### Constructors
21 |
22 | - [constructor](indexerModels.AssetParams.md#constructor)
23 |
24 | ### Properties
25 |
26 | - [attribute\_map](indexerModels.AssetParams.md#attribute_map)
27 | - [clawback](indexerModels.AssetParams.md#clawback)
28 | - [creator](indexerModels.AssetParams.md#creator)
29 | - [decimals](indexerModels.AssetParams.md#decimals)
30 | - [defaultFrozen](indexerModels.AssetParams.md#defaultfrozen)
31 | - [freeze](indexerModels.AssetParams.md#freeze)
32 | - [manager](indexerModels.AssetParams.md#manager)
33 | - [metadataHash](indexerModels.AssetParams.md#metadatahash)
34 | - [name](indexerModels.AssetParams.md#name)
35 | - [nameB64](indexerModels.AssetParams.md#nameb64)
36 | - [reserve](indexerModels.AssetParams.md#reserve)
37 | - [total](indexerModels.AssetParams.md#total)
38 | - [unitName](indexerModels.AssetParams.md#unitname)
39 | - [unitNameB64](indexerModels.AssetParams.md#unitnameb64)
40 | - [url](indexerModels.AssetParams.md#url)
41 | - [urlB64](indexerModels.AssetParams.md#urlb64)
42 |
43 | ### Methods
44 |
45 | - [get\_obj\_for\_encoding](indexerModels.AssetParams.md#get_obj_for_encoding)
46 | - [from\_obj\_for\_encoding](indexerModels.AssetParams.md#from_obj_for_encoding)
47 |
48 | ## Constructors
49 |
50 | ### constructor
51 |
52 | • **new AssetParams**(`«destructured»`)
53 |
54 | Creates a new `AssetParams` object.
55 |
56 | #### Parameters
57 |
58 | | Name | Type |
59 | | :------ | :------ |
60 | | `«destructured»` | `Object` |
61 | | › `clawback?` | `string` |
62 | | › `creator` | `string` |
63 | | › `decimals` | `number` \| `bigint` |
64 | | › `defaultFrozen?` | `boolean` |
65 | | › `freeze?` | `string` |
66 | | › `manager?` | `string` |
67 | | › `metadataHash?` | `string` \| `Uint8Array` |
68 | | › `name?` | `string` |
69 | | › `nameB64?` | `string` \| `Uint8Array` |
70 | | › `reserve?` | `string` |
71 | | › `total` | `number` \| `bigint` |
72 | | › `unitName?` | `string` |
73 | | › `unitNameB64?` | `string` \| `Uint8Array` |
74 | | › `url?` | `string` |
75 | | › `urlB64?` | `string` \| `Uint8Array` |
76 |
77 | #### Overrides
78 |
79 | BaseModel.constructor
80 |
81 | #### Defined in
82 |
83 | client/v2/indexer/models/types.ts:1916
84 |
85 | ## Properties
86 |
87 | ### attribute\_map
88 |
89 | • **attribute\_map**: `Record`\<`string`, `string`\>
90 |
91 | #### Inherited from
92 |
93 | BaseModel.attribute\_map
94 |
95 | #### Defined in
96 |
97 | client/v2/basemodel.ts:56
98 |
99 | ___
100 |
101 | ### clawback
102 |
103 | • `Optional` **clawback**: `string`
104 |
105 | Address of account used to clawback holdings of this asset. If empty, clawback
106 | is not permitted.
107 |
108 | #### Defined in
109 |
110 | client/v2/indexer/models/types.ts:1825
111 |
112 | ___
113 |
114 | ### creator
115 |
116 | • **creator**: `string`
117 |
118 | The address that created this asset. This is the address where the parameters
119 | for this asset can be found, and also the address where unwanted asset units can
120 | be sent in the worst case.
121 |
122 | #### Defined in
123 |
124 | client/v2/indexer/models/types.ts:1806
125 |
126 | ___
127 |
128 | ### decimals
129 |
130 | • **decimals**: `number` \| `bigint`
131 |
132 | The number of digits to use after the decimal point when displaying this asset.
133 | If 0, the asset is not divisible. If 1, the base unit of the asset is in tenths.
134 | If 2, the base unit of the asset is in hundredths, and so on. This value must be
135 | between 0 and 19 (inclusive).
136 |
137 | #### Defined in
138 |
139 | client/v2/indexer/models/types.ts:1814
140 |
141 | ___
142 |
143 | ### defaultFrozen
144 |
145 | • `Optional` **defaultFrozen**: `boolean`
146 |
147 | Whether holdings of this asset are frozen by default.
148 |
149 | #### Defined in
150 |
151 | client/v2/indexer/models/types.ts:1830
152 |
153 | ___
154 |
155 | ### freeze
156 |
157 | • `Optional` **freeze**: `string`
158 |
159 | Address of account used to freeze holdings of this asset. If empty, freezing is
160 | not permitted.
161 |
162 | #### Defined in
163 |
164 | client/v2/indexer/models/types.ts:1836
165 |
166 | ___
167 |
168 | ### manager
169 |
170 | • `Optional` **manager**: `string`
171 |
172 | Address of account used to manage the keys of this asset and to destroy it.
173 |
174 | #### Defined in
175 |
176 | client/v2/indexer/models/types.ts:1841
177 |
178 | ___
179 |
180 | ### metadataHash
181 |
182 | • `Optional` **metadataHash**: `Uint8Array`
183 |
184 | A commitment to some unspecified asset metadata. The format of this metadata is
185 | up to the application.
186 |
187 | #### Defined in
188 |
189 | client/v2/indexer/models/types.ts:1847
190 |
191 | ___
192 |
193 | ### name
194 |
195 | • `Optional` **name**: `string`
196 |
197 | Name of this asset, as supplied by the creator. Included only when the asset
198 | name is composed of printable utf-8 characters.
199 |
200 | #### Defined in
201 |
202 | client/v2/indexer/models/types.ts:1853
203 |
204 | ___
205 |
206 | ### nameB64
207 |
208 | • `Optional` **nameB64**: `Uint8Array`
209 |
210 | Base64 encoded name of this asset, as supplied by the creator.
211 |
212 | #### Defined in
213 |
214 | client/v2/indexer/models/types.ts:1858
215 |
216 | ___
217 |
218 | ### reserve
219 |
220 | • `Optional` **reserve**: `string`
221 |
222 | Address of account holding reserve (non-minted) units of this asset.
223 |
224 | #### Defined in
225 |
226 | client/v2/indexer/models/types.ts:1863
227 |
228 | ___
229 |
230 | ### total
231 |
232 | • **total**: `number` \| `bigint`
233 |
234 | The total number of units of this asset.
235 |
236 | #### Defined in
237 |
238 | client/v2/indexer/models/types.ts:1819
239 |
240 | ___
241 |
242 | ### unitName
243 |
244 | • `Optional` **unitName**: `string`
245 |
246 | Name of a unit of this asset, as supplied by the creator. Included only when the
247 | name of a unit of this asset is composed of printable utf-8 characters.
248 |
249 | #### Defined in
250 |
251 | client/v2/indexer/models/types.ts:1869
252 |
253 | ___
254 |
255 | ### unitNameB64
256 |
257 | • `Optional` **unitNameB64**: `Uint8Array`
258 |
259 | Base64 encoded name of a unit of this asset, as supplied by the creator.
260 |
261 | #### Defined in
262 |
263 | client/v2/indexer/models/types.ts:1874
264 |
265 | ___
266 |
267 | ### url
268 |
269 | • `Optional` **url**: `string`
270 |
271 | URL where more information about the asset can be retrieved. Included only when
272 | the URL is composed of printable utf-8 characters.
273 |
274 | #### Defined in
275 |
276 | client/v2/indexer/models/types.ts:1880
277 |
278 | ___
279 |
280 | ### urlB64
281 |
282 | • `Optional` **urlB64**: `Uint8Array`
283 |
284 | Base64 encoded URL where more information about the asset can be retrieved.
285 |
286 | #### Defined in
287 |
288 | client/v2/indexer/models/types.ts:1885
289 |
290 | ## Methods
291 |
292 | ### get\_obj\_for\_encoding
293 |
294 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
295 |
296 | Get an object ready for encoding to either JSON or msgpack.
297 |
298 | #### Parameters
299 |
300 | | Name | Type | Default value | Description |
301 | | :------ | :------ | :------ | :------ |
302 | | `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. |
303 |
304 | #### Returns
305 |
306 | `Record`\<`string`, `any`\>
307 |
308 | #### Inherited from
309 |
310 | BaseModel.get\_obj\_for\_encoding
311 |
312 | #### Defined in
313 |
314 | client/v2/basemodel.ts:65
315 |
316 | ___
317 |
318 | ### from\_obj\_for\_encoding
319 |
320 | ▸ `Static` **from_obj_for_encoding**(`data`): [`AssetParams`](indexerModels.AssetParams.md)
321 |
322 | #### Parameters
323 |
324 | | Name | Type |
325 | | :------ | :------ |
326 | | `data` | `Record`\<`string`, `any`\> |
327 |
328 | #### Returns
329 |
330 | [`AssetParams`](indexerModels.AssetParams.md)
331 |
332 | #### Defined in
333 |
334 | client/v2/indexer/models/types.ts:1998
335 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:cli:features:project:run.md:
--------------------------------------------------------------------------------
```markdown
1 | # AlgoKit Project Run
2 |
3 | The `algokit project run` command allows defining custom commands to execute at standalone project level or being orchestrated from a workspace containing multiple standalone projects.
4 |
5 | ## Usage
6 |
7 | ```sh
8 | $ algokit project run [OPTIONS] COMMAND [ARGS]
9 | ```
10 |
11 | This command executes a custom command defined in the `.algokit.toml` file of the current project or workspace.
12 |
13 | ### Options
14 |
15 | - `-l, --list`: List all projects associated with the workspace command. (Optional)
16 | - `-p, --project-name`: Execute the command on specified projects. Defaults to all projects in the current directory. (Optional)
17 | - `-t, --type`: Limit execution to specific project types if executing from workspace. (Optional)
18 | - `-s, --sequential`: Execute workspace commands sequentially, for cases where you do not have a preference on the execution order, but want to disable concurrency. (Optional, defaults to concurrent)
19 | - `[ARGS]...`: Additional arguments to pass to the custom command. These will be appended to the end of the command specified in the `.algokit.toml` file.
20 |
21 | To get detailed help on the above options, execute:
22 |
23 | ```bash
24 | algokit project run {name_of_your_command} --help
25 | ```
26 |
27 | ### Workspace vs Standalone Projects
28 |
29 | AlgoKit supports two main types of project structures: Workspaces and Standalone Projects. This flexibility caters to the diverse needs of developers, whether managing multiple related projects or focusing on a single application.
30 |
31 | - **Workspaces**: Ideal for complex applications comprising multiple sub-projects. Workspaces facilitate organized management of these sub-projects under a single root directory, streamlining dependency management and shared configurations.
32 |
33 | - **Standalone Projects**: Suited for simpler applications or when working on a single component. This structure offers straightforward project management, with each project residing in its own directory, independent of others.
34 |
35 | > Please note, instantiating a workspace inside a workspace (aka 'workspace nesting') is not supported and not recommended. When you want to add a new project into existing workspace make sure to run `algokit init` **from the root of the workspace**
36 |
37 | ### Custom Command Injection
38 |
39 | AlgoKit enhances project automation by allowing the injection of custom commands into the `.algokit.toml` configuration file. This feature enables developers to tailor the project setup to their specific needs, automating tasks such as deploying to different network environments or integrating with CI/CD pipelines.
40 |
41 | ## How It Works
42 |
43 | The orchestration between workspaces, standalone projects, and custom commands is designed to provide a seamless development experience. Below is a high-level overview of how these components interact within the AlgoKit ecosystem.
44 |
45 | ```mermaid
46 | graph TD;
47 | A[AlgoKit Project] --> B["Workspace (.algokit.toml)"];
48 | A --> C["Standalone Project (.algokit.toml)"];
49 | B --> D["Sub-Project 1 (.algokit.toml)"];
50 | B --> E["Sub-Project 2 (.algokit.toml)"];
51 | C --> F["Custom Commands defined in .algokit.toml"];
52 | D --> F;
53 | E --> F;
54 | ```
55 |
56 | - **AlgoKit Project**: The root command that encompasses all project-related functionalities.
57 | - **Workspace**: A root folder that is managing multiple related sub-projects.
58 | - **Standalone Project**: An isolated project structure for simpler applications.
59 | - **Custom Commands**: Commands defined by the user in the `.algokit.toml` and automatically injected into the `algokit project run` command group.
60 |
61 | ### Workspace cli options
62 |
63 | Below is only visible and available when running from a workspace root.
64 |
65 | - `-l, --list`: List all projects associated with the workspace command. (Optional)
66 | - `-p, --project-name`: Execute the command on specified projects. Defaults to all projects in the current directory. (Optional)
67 | - `-t, --type`: Limit execution to specific project types if executing from workspace. (Optional)
68 | To get a detailed help on the above commands execute:
69 |
70 | ```bash
71 | algokit project run {name_of_your_command} --help
72 | ```
73 |
74 | ## Examples
75 |
76 | Assume you have a default workspace with the following structure:
77 |
78 | ```bash
79 | my_workspace
80 | ├── .algokit.toml
81 | ├── projects
82 | │ ├── project1
83 | │ │ └── .algokit.toml
84 | │ └── project2
85 | │ └── .algokit.toml
86 | ```
87 |
88 | The workspace configuration file is defined as follows:
89 |
90 | ```toml
91 | # ... other non [project.run] related metadata
92 | [project]
93 | type = 'workspace'
94 | projects_root_path = 'projects'
95 | # ... other non [project.run] related metadata
96 | ```
97 |
98 | Standalone configuration files are defined as follows:
99 |
100 | ```toml
101 | # ... other non [project.run] related metadata
102 |
103 | [project]
104 | type = 'contract'
105 | name = 'project_a'
106 |
107 | [project.run]
108 | hello = { commands = ['echo hello'], description = 'Prints hello' }
109 |
110 | # ... other non [project.run] related metadata
111 | ```
112 |
113 | ```toml
114 | # ... other non [project.run] related metadata
115 |
116 | [project]
117 | type = 'frontend'
118 | name = 'project_b'
119 |
120 | [project.run]
121 | hello = { commands = ['echo hello'], description = 'Prints hello' }
122 |
123 | # ... other non [project.run] related metadata
124 | ```
125 |
126 | Executing `algokit project run hello` from the root of the workspace will concurrently execute `echo hello` in both `project_a` and `project_b` directories.
127 |
128 | Executing `algokit project run hello` from the root of `project_(a|b)` will execute `echo hello` in the `project_(a|b)` directory.
129 |
130 | ### Controlling Execution Order
131 |
132 | Customize the execution order of commands in workspaces for precise control:
133 |
134 | 1. Define order in `.algokit.toml`:
135 |
136 | ```yaml
137 | [project]
138 | type = 'workspace'
139 | projects_root_path = 'projects'
140 |
141 | [project.run]
142 | hello = ['project_a', 'project_b']
143 | ```
144 |
145 | 2. Execution behavior:
146 | - Projects are executed in the specified order
147 | - Invalid project names are skipped
148 | - Partial project lists: Specified projects run first, others follow
149 |
150 | > Note: Explicit order always triggers sequential execution.
151 |
152 | ### Controlling Concurrency
153 |
154 | You can control whether commands are executed concurrently or sequentially:
155 |
156 | 1. Use command-line options:
157 |
158 | ```sh
159 | $ algokit project run hello -s # or --sequential
160 | $ algokit project run hello -c # or --concurrent
161 | ```
162 |
163 | 2. Behavior:
164 | - Default: Concurrent execution
165 | - Sequential: Use `-s` or `--sequential` flag
166 | - Concurrent: Use `-c` or `--concurrent` flag or omit the flag (defaults to concurrent)
167 |
168 | > Note: When an explicit order is specified in `.algokit.toml`, execution is always sequential regardless of these flags.
169 |
170 | ### Passing Extra Arguments
171 |
172 | You can pass additional arguments to the custom command. These extra arguments will be appended to the end of the command specified in your `.algokit.toml` file.
173 |
174 | Example:
175 |
176 | ```sh
177 | $ algokit project run hello -- world
178 | ```
179 |
180 | In this example, if the `hello` command in `.algokit.toml` is defined as `echo "Hello"`, the actual command executed will be `echo "Hello" world`.
181 |
182 | ## Further Reading
183 |
184 | To learn more about the `algokit project run` command, please refer to [run](../../cli/index.md#run) in the AlgoKit CLI reference documentation.
185 |
```