This is page 35 of 93. Use http://codebase.md/goplausible/algorand-mcp?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── llms-install.md
├── llms.txt
├── package.json
├── packages
│ ├── client
│ │ ├── .env.example
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── src
│ │ │ ├── env.ts
│ │ │ ├── index.ts
│ │ │ └── LocalWallet.ts
│ │ └── tsconfig.json
│ └── server
│ ├── .env.example
│ ├── API specs
│ │ ├── algod_api.json
│ │ ├── indexer_api.json
│ │ ├── mcp.json
│ │ ├── nfd_api.json
│ │ ├── ultrade_api.json
│ │ ├── vestige_api.json
│ │ └── vestige_free_api.json
│ ├── Dockerfile
│ ├── jest.config.js
│ ├── package.json
│ ├── README.md
│ ├── smithery.yaml
│ ├── src
│ │ ├── algorand-client.ts
│ │ ├── env.ts
│ │ ├── index.ts
│ │ ├── resources
│ │ │ ├── index.ts
│ │ │ ├── knowledge
│ │ │ │ ├── ARCs.txt
│ │ │ │ ├── developers-algokit-architecture-decisions.txt
│ │ │ │ ├── developers-algokit-cli.txt
│ │ │ │ ├── developers-algokit-utils-python.txt
│ │ │ │ ├── developers-algokit-utils-typescript.txt
│ │ │ │ ├── developers-clis.txt
│ │ │ │ ├── developers-details.txt
│ │ │ │ ├── developers-liquid-auth.txt
│ │ │ │ ├── developers-nodes.txt
│ │ │ │ ├── developers-puya.txt
│ │ │ │ ├── developers-python.txt
│ │ │ │ ├── developers-sdks-js.txt
│ │ │ │ ├── developers-sdks-python.txt
│ │ │ │ ├── developers-tealscript.txt
│ │ │ │ ├── developers.txt
│ │ │ │ ├── index.ts
│ │ │ │ ├── taxonomy
│ │ │ │ │ ├── algokit-cli:README.md
│ │ │ │ │ ├── algokit:cli:algokit.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-14_sandbox-approach.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-22_beaker-testing-strategy.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_beaker_productionisation_review.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_brew_install.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-12_smart-contract-deployment.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-06-06_frontend-templates.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-07-19_advanced_generate_command.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-13_native_binaries.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-23_init-wizard-v2.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-31_binary_distribution.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-03-06_local_dev_ui_packaging.md
│ │ │ │ │ ├── algokit:cli:articles:output_stability.md
│ │ │ │ │ ├── algokit:cli:cli:index.md
│ │ │ │ │ ├── algokit:cli:features:compile.md
│ │ │ │ │ ├── algokit:cli:features:completions.md
│ │ │ │ │ ├── algokit:cli:features:config.md
│ │ │ │ │ ├── algokit:cli:features:dispenser.md
│ │ │ │ │ ├── algokit:cli:features:doctor.md
│ │ │ │ │ ├── algokit:cli:features:explore.md
│ │ │ │ │ ├── algokit:cli:features:generate.md
│ │ │ │ │ ├── algokit:cli:features:goal.md
│ │ │ │ │ ├── algokit:cli:features:init.md
│ │ │ │ │ ├── algokit:cli:features:localnet.md
│ │ │ │ │ ├── algokit:cli:features:project:bootstrap.md
│ │ │ │ │ ├── algokit:cli:features:project:deploy.md
│ │ │ │ │ ├── algokit:cli:features:project:link.md
│ │ │ │ │ ├── algokit:cli:features:project:list.md
│ │ │ │ │ ├── algokit:cli:features:project:run.md
│ │ │ │ │ ├── algokit:cli:features:project.md
│ │ │ │ │ ├── algokit:cli:features:tasks:analyze.md
│ │ │ │ │ ├── algokit:cli:features:tasks:ipfs.md
│ │ │ │ │ ├── algokit:cli:features:tasks:mint.md
│ │ │ │ │ ├── algokit:cli:features:tasks:nfd.md
│ │ │ │ │ ├── algokit:cli:features:tasks:opt.md
│ │ │ │ │ ├── algokit:cli:features:tasks:send.md
│ │ │ │ │ ├── algokit:cli:features:tasks:sign.md
│ │ │ │ │ ├── algokit:cli:features:tasks:transfer.md
│ │ │ │ │ ├── algokit:cli:features:tasks:vanity_address.md
│ │ │ │ │ ├── algokit:cli:features:tasks:wallet.md
│ │ │ │ │ ├── algokit:cli:features:tasks.md
│ │ │ │ │ ├── algokit:cli:tutorials:algokit-template.md
│ │ │ │ │ ├── algokit:cli:tutorials:intro.md
│ │ │ │ │ ├── algokit:cli:tutorials:smart-contracts.md
│ │ │ │ │ ├── algokit:docs:testnet_api.md
│ │ │ │ │ ├── algokit:lora:README.md
│ │ │ │ │ ├── algokit:README.md
│ │ │ │ │ ├── algokit:utils:python:markdown:apidocs:algokit_utils:algokit_utils.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:debugger.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:python:markdown:index.md
│ │ │ │ │ ├── algokit:utils:python:README.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:debugger.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:python:source:index.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:algorand-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:amount.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:asset.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:debugging.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:event-emitter.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:testing.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction-composer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:typed-app-clients.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TestLogger.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TransactionLogger.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account_manager.AccountManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.MultisigAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.SigningAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client.AlgorandClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_amount.AlgoAmount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_arc56.Arc56Method.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.AppClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.ApplicationClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_deployer.AppDeployer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_factory.AppFactory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_manager.AppManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_asset_manager.AssetManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_async_event_emitter.AsyncEventEmitter.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_client_manager.ClientManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_composer.TransactionComposer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_config.UpdatableConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_dispenser_client.TestNetDispenserApiClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_kmd_account_manager.KmdAccountManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_logic_error.LogicError.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnSchemaBreak.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnUpdate.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.AccountStatus.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.ApplicationOnComplete.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.SignatureType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_lifecycle_events.EventType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account_manager.EnsureFundedResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.AccountConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.TransactionSignerAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_algorand_client_interface.AlgorandClientInterface.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Arc56Contract.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Event.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Method.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.ProgramSourceInfo.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageKey.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageMap.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StructField.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallABIArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallCoreParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCallInterfaceParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCoreParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppSourceMaps.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.FundAppAccountParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppById.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppByIdBase.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.SourceMapExport.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppLookup.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_factory.AppFactoryParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.AppInformation.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValueRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValuesRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSources.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.CallConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.DeclaredSchemaValueSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Hint.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.ReservedSchemaValueSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Schema.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.SchemaSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.StateSchemaSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Struct.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallTransactionResultOfType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCompilationResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeployMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppLookup.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppState.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppStorageSchema.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxName.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValueRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValuesRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CompiledTeal.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CoreAppCallArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CreateAppParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.RawAppCallArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.TealTemplateParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.UpdateAppParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.BulkAssetOptInOutResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetBulkOptInOutParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptInParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.CreateAssetParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.AlgoSdkClients.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppFactory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_composer.BuiltTransactions.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_config.Config.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.AVMTracesEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourceDebugEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourcesDebugEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserFundResponse.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserLimitResponse.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.TestNetDispenserApiClientParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_indexer.LookupAssetHoldingsOptions.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_logic_error.LogicErrorDetails.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoClientConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.NetworkDetails.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgoKitLogCaptureFixture.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixture.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixtureConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandTestAutomationContext.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.GetTestAccountParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.LogSnapshotConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.AtomicTransactionComposerToSend.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendAtomicTransactionComposerResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionGroupToSend.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionToSign.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoRekeyParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedReturnType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:testing.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algo_http_client_with_retry.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_interface.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_creator.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_sender.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transfer_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_arc56.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_deployer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory_and_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_composer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_config.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_debugging.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_expand.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_kmd_account_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_lifecycle_events.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logging.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logic_error.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_network_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_testing.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transaction.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transfer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:README.md
│ │ │ │ │ ├── algokit:utils:typescript:README.md
│ │ │ │ │ ├── algokit:utils:typescript:v7-migration.md
│ │ │ │ │ ├── algokit:utils:typescript:v8-migration.md
│ │ │ │ │ ├── ARCs:ARC-template.md
│ │ │ │ │ ├── ARCs:assets:arc-0012:README.md
│ │ │ │ │ ├── ARCs:assets:arc-0034:TemplateForm.md
│ │ │ │ │ ├── ARCs:assets:arc-0062:README.md
│ │ │ │ │ ├── ARCs:pages:nfts.md
│ │ │ │ │ ├── ARCs:pages:wallets.md
│ │ │ │ │ ├── ARCs:README.md
│ │ │ │ │ ├── ARCs:specs:arc-0000.md
│ │ │ │ │ ├── ARCs:specs:arc-0001.md
│ │ │ │ │ ├── ARCs:specs:arc-0002.md
│ │ │ │ │ ├── ARCs:specs:arc-0003.md
│ │ │ │ │ ├── ARCs:specs:arc-0004.md
│ │ │ │ │ ├── ARCs:specs:arc-0005.md
│ │ │ │ │ ├── ARCs:specs:arc-0006.md
│ │ │ │ │ ├── ARCs:specs:arc-0007.md
│ │ │ │ │ ├── ARCs:specs:arc-0008.md
│ │ │ │ │ ├── ARCs:specs:arc-0009.md
│ │ │ │ │ ├── ARCs:specs:arc-0010.md
│ │ │ │ │ ├── ARCs:specs:arc-0011.md
│ │ │ │ │ ├── ARCs:specs:arc-0012.md
│ │ │ │ │ ├── ARCs:specs:arc-0015.md
│ │ │ │ │ ├── ARCs:specs:arc-0016.md
│ │ │ │ │ ├── ARCs:specs:arc-0018.md
│ │ │ │ │ ├── ARCs:specs:arc-0019.md
│ │ │ │ │ ├── ARCs:specs:arc-0020.md
│ │ │ │ │ ├── ARCs:specs:arc-0021.md
│ │ │ │ │ ├── ARCs:specs:arc-0022.md
│ │ │ │ │ ├── ARCs:specs:arc-0023.md
│ │ │ │ │ ├── ARCs:specs:arc-0025.md
│ │ │ │ │ ├── ARCs:specs:arc-0026.md
│ │ │ │ │ ├── ARCs:specs:arc-0028.md
│ │ │ │ │ ├── ARCs:specs:arc-0032.md
│ │ │ │ │ ├── ARCs:specs:arc-0033.md
│ │ │ │ │ ├── ARCs:specs:arc-0034.md
│ │ │ │ │ ├── ARCs:specs:arc-0035.md
│ │ │ │ │ ├── ARCs:specs:arc-0036.md
│ │ │ │ │ ├── ARCs:specs:arc-0042.md
│ │ │ │ │ ├── ARCs:specs:arc-0047.md
│ │ │ │ │ ├── ARCs:specs:arc-0048.md
│ │ │ │ │ ├── ARCs:specs:arc-0049.md
│ │ │ │ │ ├── ARCs:specs:arc-0054.md
│ │ │ │ │ ├── ARCs:specs:arc-0055.md
│ │ │ │ │ ├── ARCs:specs:arc-0056.md
│ │ │ │ │ ├── ARCs:specs:arc-0059.md
│ │ │ │ │ ├── ARCs:specs:arc-0062.md
│ │ │ │ │ ├── ARCs:specs:arc-0065.md
│ │ │ │ │ ├── ARCs:specs:arc-0069.md
│ │ │ │ │ ├── ARCs:specs:arc-0072.md
│ │ │ │ │ ├── ARCs:specs:arc-0073.md
│ │ │ │ │ ├── ARCs:specs:arc-0074.md
│ │ │ │ │ ├── ARCs:specs:arc-0076.md
│ │ │ │ │ ├── ARCs:specs:arc-0078.md
│ │ │ │ │ ├── ARCs:specs:arc-0079.md
│ │ │ │ │ ├── ARCs:specs:arc-0200.md
│ │ │ │ │ ├── clis_index.md
│ │ │ │ │ ├── developer:docs:about.md
│ │ │ │ │ ├── developer:docs:clis:algokey:algokey.md
│ │ │ │ │ ├── developer:docs:clis:algokey:generate.md
│ │ │ │ │ ├── developer:docs:clis:algokey:import.md
│ │ │ │ │ ├── developer:docs:clis:algokey:multisig:append-auth-addr.md
│ │ │ │ │ ├── developer:docs:clis:algokey:multisig:multisig.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:info.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:part.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:reparent.md
│ │ │ │ │ ├── developer:docs:clis:algokey:sign.md
│ │ │ │ │ ├── developer:docs:clis:conduit:conduit.md
│ │ │ │ │ ├── developer:docs:clis:conduit:init.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:exporters.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:importers.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:list.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:processors.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:diagcfg.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:disable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:enable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:metric.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:status.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:disable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:enable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:endpoint.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:name.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:status.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:telemetry.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:restart.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:start.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:status.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:stop.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:wait.md
│ │ │ │ │ ├── developer:docs:clis:goal:protocols.md
│ │ │ │ │ ├── developer:docs:clis:goal:report.md
│ │ │ │ │ ├── developer:docs:clis:goal:version.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:list.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:new.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:wallet.md
│ │ │ │ │ ├── developer:docs:clis:indexer:api-config.md
│ │ │ │ │ ├── developer:docs:clis:indexer:daemon.md
│ │ │ │ │ ├── developer:docs:clis:indexer:indexer.md
│ │ │ │ │ ├── developer:docs:clis:indexer:util:util.md
│ │ │ │ │ ├── developer:docs:clis:indexer:util:validator.md
│ │ │ │ │ ├── developer:docs:clis:kmd.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:debug.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:remote.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:tealdbg.md
│ │ │ │ │ ├── developer:docs:details:accounts:create.md
│ │ │ │ │ ├── developer:docs:details:accounts:index.md
│ │ │ │ │ ├── developer:docs:details:accounts:rekey.md
│ │ │ │ │ ├── developer:docs:details:algorand_consensus.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:betanet.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:index.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:mainnet.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:testnet.md
│ │ │ │ │ ├── developer:docs:details:asa.md
│ │ │ │ │ ├── developer:docs:details:atc.md
│ │ │ │ │ ├── developer:docs:details:atomic_transfers.md
│ │ │ │ │ ├── developer:docs:details:conduit.md
│ │ │ │ │ ├── developer:docs:details:crust.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:guidelines.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:jsonspec.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v1.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v10.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v2.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v3.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v4.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v5.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v6.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v7.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v8.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v9.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:specification.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:ABI:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:create.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:innertx.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:state.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:txs.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:debugging.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:apps.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:smartsigs.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:guidelines.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:modes.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:walkthrough.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:beaker.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:pyteal.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:python.md
│ │ │ │ │ ├── developer:docs:details:encoding.md
│ │ │ │ │ ├── developer:docs:details:ethereum_to_algorand.md
│ │ │ │ │ ├── developer:docs:details:index.md
│ │ │ │ │ ├── developer:docs:details:indexer.md
│ │ │ │ │ ├── developer:docs:details:parameter_tables.md
│ │ │ │ │ ├── developer:docs:details:stateproofs:index.md
│ │ │ │ │ ├── developer:docs:details:stateproofs:light_client.md
│ │ │ │ │ ├── developer:docs:details:technical_faq.md
│ │ │ │ │ ├── developer:docs:details:transactions:index.md
│ │ │ │ │ ├── developer:docs:details:transactions:offline_transactions.md
│ │ │ │ │ ├── developer:docs:details:transactions:payment_prompts.md
│ │ │ │ │ ├── developer:docs:details:transactions:signatures.md
│ │ │ │ │ ├── developer:docs:details:transactions:transactions.md
│ │ │ │ │ ├── developer:docs:details:useful_resources.md
│ │ │ │ │ ├── developer:docs:get-started:algokit.md
│ │ │ │ │ ├── developer:docs:get-started:basics:what_is_blockchain.md
│ │ │ │ │ ├── developer:docs:get-started:basics:whats_a_dapp.md
│ │ │ │ │ ├── developer:docs:get-started:basics:where_to_start.md
│ │ │ │ │ ├── developer:docs:get-started:basics:why_algorand.md
│ │ │ │ │ ├── developer:docs:get-started:tokenization:ft.md
│ │ │ │ │ ├── developer:docs:get-started:tokenization:nft.md
│ │ │ │ │ ├── developer:docs:index.md
│ │ │ │ │ ├── developer:docs:rest-apis:algod.md
│ │ │ │ │ ├── developer:docs:rest-apis:indexer.md
│ │ │ │ │ ├── developer:docs:rest-apis:kmd.md
│ │ │ │ │ ├── developer:docs:rest-apis:restendpoints.md
│ │ │ │ │ ├── developer:docs:run-a-node:operations:catchup.md
│ │ │ │ │ ├── developer:docs:run-a-node:operations:switch_networks.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:generate_keys.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:index.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:offline.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:online.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:renew.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:artifacts.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:config.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:relay.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:telemetry-config.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:indexer.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:install.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:node-troubleshooting.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:types.md
│ │ │ │ │ ├── developer:docs:sdks:go:index.md
│ │ │ │ │ ├── developer:docs:sdks:index.md
│ │ │ │ │ ├── developer:docs:sdks:java:index.md
│ │ │ │ │ ├── developer:docs:sdks:javascript:index.md
│ │ │ │ │ ├── developer:docs:sdks:python:index.md
│ │ │ │ │ ├── developer:python:code:example:accounts.md
│ │ │ │ │ ├── developer:python:code:example:arc4_types.md
│ │ │ │ │ ├── developer:python:code:example:assets.md
│ │ │ │ │ ├── developer:python:code:example:box_storage.md
│ │ │ │ │ ├── developer:python:code:example:control_flow.md
│ │ │ │ │ ├── developer:python:code:example:crypto:merkle_tree.md
│ │ │ │ │ ├── developer:python:code:example:defi:amm.md
│ │ │ │ │ ├── developer:python:code:example:defi:auction.md
│ │ │ │ │ ├── developer:python:code:example:defi:htlc_logicsig.md
│ │ │ │ │ ├── developer:python:code:example:defi:marketplace.md
│ │ │ │ │ ├── developer:python:code:example:events:arc28_events.md
│ │ │ │ │ ├── developer:python:code:example:global_storage.md
│ │ │ │ │ ├── developer:python:code:example:governance:simple_voting.md
│ │ │ │ │ ├── developer:python:code:example:hello_world.md
│ │ │ │ │ ├── developer:python:code:example:inner_transactions.md
│ │ │ │ │ ├── developer:python:code:example:local_storage.md
│ │ │ │ │ ├── developer:python:code:example:nft:proof_of_attendance.md
│ │ │ │ │ ├── developer:python:code:example:privacy:zk_whitelist.md
│ │ │ │ │ ├── developer:python:code:example:scratch_storage.md
│ │ │ │ │ ├── developer:python:code:example:self_payment.md
│ │ │ │ │ ├── developer:python:code:example:struct_in_box.md
│ │ │ │ │ ├── developer:python:code:example:subsidize_app_call.md
│ │ │ │ │ ├── developer:python:code:example:transactions.md
│ │ │ │ │ ├── developer:python:code:example:utility:calculator.md
│ │ │ │ │ ├── devportal-code-examples:projects:python-contract-examples:README.md
│ │ │ │ │ ├── devportal-code-examples:README.md
│ │ │ │ │ ├── docs:.walletconnect:index.md
│ │ │ │ │ ├── docs:.walletconnect:walletconnect-schema.md
│ │ │ │ │ ├── docs:README.md
│ │ │ │ │ ├── docs:scripts:example_tracker:example_list.md
│ │ │ │ │ ├── docs:scripts:README.md
│ │ │ │ │ ├── index.md
│ │ │ │ │ ├── liquid_auth_index.md
│ │ │ │ │ ├── liquid-auth:ARCHITECTURE.md
│ │ │ │ │ ├── liquid-auth:decisions:1-Service-Authentication.md
│ │ │ │ │ ├── liquid-auth:decisions:2-Bidirectional-Communication.md
│ │ │ │ │ ├── liquid-auth:decisions:3-Peer-to-Peer-Signaling.md
│ │ │ │ │ ├── liquid-auth:decisions:4-Fido-Extension.md
│ │ │ │ │ ├── liquid-auth:decisions:README.md
│ │ │ │ │ ├── liquid-auth:docs:architecture.md
│ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:authenticate.md
│ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:register.md
│ │ │ │ │ ├── liquid-auth:docs:clients:browser:authentication.md
│ │ │ │ │ ├── liquid-auth:docs:clients:browser:example.md
│ │ │ │ │ ├── liquid-auth:docs:introduction.md
│ │ │ │ │ ├── liquid-auth:docs:README.md
│ │ │ │ │ ├── liquid-auth:docs:server:environment-variables.md
│ │ │ │ │ ├── liquid-auth:docs:server:integrations.md
│ │ │ │ │ ├── liquid-auth:docs:server:introduction.md
│ │ │ │ │ ├── liquid-auth:docs:server:running-locally.md
│ │ │ │ │ ├── liquid-auth:README.md
│ │ │ │ │ ├── liquid-auth:SEQUENCE.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md
│ │ │ │ │ ├── liquid-auth:sites:express-dapp:README.md
│ │ │ │ │ ├── liquid-auth:VISION.md
│ │ │ │ │ ├── puya_index.md
│ │ │ │ │ ├── puya:docs:algopy_testing:index.md
│ │ │ │ │ ├── puya:docs:api-algopy.arc4.md
│ │ │ │ │ ├── puya:docs:api-algopy.gtxn.md
│ │ │ │ │ ├── puya:docs:api-algopy.itxn.md
│ │ │ │ │ ├── puya:docs:api-algopy.md
│ │ │ │ │ ├── puya:docs:api-algopy.op.md
│ │ │ │ │ ├── puya:docs:api.md
│ │ │ │ │ ├── puya:docs:compiler.md
│ │ │ │ │ ├── puya:docs:index.md
│ │ │ │ │ ├── puya:docs:language-guide.md
│ │ │ │ │ ├── puya:docs:lg-arc28.md
│ │ │ │ │ ├── puya:docs:lg-arc4.md
│ │ │ │ │ ├── puya:docs:lg-builtins.md
│ │ │ │ │ ├── puya:docs:lg-calling-apps.md
│ │ │ │ │ ├── puya:docs:lg-compile.md
│ │ │ │ │ ├── puya:docs:lg-control.md
│ │ │ │ │ ├── puya:docs:lg-errors.md
│ │ │ │ │ ├── puya:docs:lg-logs.md
│ │ │ │ │ ├── puya:docs:lg-modules.md
│ │ │ │ │ ├── puya:docs:lg-opcode-budget.md
│ │ │ │ │ ├── puya:docs:lg-ops.md
│ │ │ │ │ ├── puya:docs:lg-storage.md
│ │ │ │ │ ├── puya:docs:lg-structure.md
│ │ │ │ │ ├── puya:docs:lg-transactions.md
│ │ │ │ │ ├── puya:docs:lg-types.md
│ │ │ │ │ ├── puya:docs:lg-unsupported-python-features.md
│ │ │ │ │ ├── puya:docs:principles.md
│ │ │ │ │ ├── puya:examples:auction:README.md
│ │ │ │ │ ├── puya:python:testing:docs:algopy.md
│ │ │ │ │ ├── puya:python:testing:docs:api.md
│ │ │ │ │ ├── puya:python:testing:docs:coverage.md
│ │ │ │ │ ├── puya:python:testing:docs:examples.md
│ │ │ │ │ ├── puya:python:testing:docs:faq.md
│ │ │ │ │ ├── puya:python:testing:docs:index.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:arc4-types.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:avm-types.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:concepts.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:contract-testing.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:index.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:opcodes.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:signature-testing.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:state-management.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:subroutines.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:transactions.md
│ │ │ │ │ ├── puya:python:testing:examples:README.md
│ │ │ │ │ ├── puya:python:testing:README.md
│ │ │ │ │ ├── puya:README.md
│ │ │ │ │ ├── puya:src:puya:ARCHITECTURE.md
│ │ │ │ │ ├── puya:src:puyapy:_typeshed:README.md
│ │ │ │ │ ├── puya:src:puyapy:_vendor:mypy:typeshed:stdlib:_typeshed:README.md
│ │ │ │ │ ├── puya:src:puyapy:awst_build:README.md
│ │ │ │ │ ├── puya:stubs:README.md
│ │ │ │ │ ├── puya:tests:test_expected_output:README.md
│ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-bytes-and-strings.md
│ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-integer-types.md
│ │ │ │ │ ├── puya:typescript:docs:README.md
│ │ │ │ │ ├── puya:typescript:packages:algo-ts:readme.md
│ │ │ │ │ ├── puya:typescript:README.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIAddressType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayDynamicType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayStaticType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIBoolType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIByteType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIContract.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIInterface.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIMethod.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIStringType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABITupleType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIUfixedType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIUintType.md
│ │ │ │ │ ├── SDKs:javascript:classes:Algodv2.md
│ │ │ │ │ ├── SDKs:javascript:classes:AtomicTransactionComposer.md
│ │ │ │ │ ├── SDKs:javascript:classes:DryrunResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:Indexer.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Account.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountParticipation.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountStateDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Application.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalState.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalStatesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogData.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Asset.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetBalancesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHoldingsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Block.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockRewards.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeState.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeVote.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Box.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxDescriptor.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ErrorResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDeltaKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HashFactory.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HealthCheck.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.IndexerStateProofMessage.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MerkleArrayProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MiniAssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ParticipationUpdates.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofFields.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofParticipant.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofReveal.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSigSlot.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofTracking.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofVerifier.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Transaction.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionApplication.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetConfig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetFreeze.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetTransfer.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionKeyreg.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionPayment.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureLogicsig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisigSubsignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionStateProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:Kmd.md
│ │ │ │ │ ├── SDKs:javascript:classes:LogicSig.md
│ │ │ │ │ ├── SDKs:javascript:classes:LogicSigAccount.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Account.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountApplicationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetsInformationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountParticipation.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountStateDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AppCallLogs.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Application.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationInitialStates.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationKVStorage.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalState.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateOperation.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Asset.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHoldingReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockHashResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockLogsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockTxidsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Box.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxDescriptor.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BuildVersion.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.CompileResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DisassembleResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunRequest.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunSource.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunState.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunTxnResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ErrorResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDeltaKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetBlockTimeStampOffsetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetSyncRoundResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.KvDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LedgerStateDeltaForTransactionGroup.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LightBlockHeaderProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.NodeStatusResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PostTransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ScratchChange.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateInitialStates.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequest.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequestTransactionGroup.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTraceConfig.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionGroupResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationEvalOverrides.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationOpcodeTraceUnit.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationTransactionExecTrace.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProofMessage.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SupplyResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionParametersResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionProofResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Version.md
│ │ │ │ │ ├── SDKs:javascript:classes:SourceMap.md
│ │ │ │ │ ├── SDKs:javascript:classes:Transaction.md
│ │ │ │ │ ├── SDKs:javascript:enums:ABIReferenceType.md
│ │ │ │ │ ├── SDKs:javascript:enums:ABITransactionType.md
│ │ │ │ │ ├── SDKs:javascript:enums:AtomicTransactionComposerStatus.md
│ │ │ │ │ ├── SDKs:javascript:enums:IntDecoding.md
│ │ │ │ │ ├── SDKs:javascript:enums:OnApplicationComplete.md
│ │ │ │ │ ├── SDKs:javascript:enums:TransactionType.md
│ │ │ │ │ ├── SDKs:javascript:examples:README.md
│ │ │ │ │ ├── SDKs:javascript:FAQ.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworkInfo.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworks.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIInterfaceParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodArgParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodReturnParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIResult.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:Account.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:Address.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:AlgodTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClient.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientError.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientResponse.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BoxReference.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:CustomTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedAssetParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedBoxReference.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedGlobalStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLocalStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSigAccount.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedMultisig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSignedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSubsig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:IndexerTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:KMDTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:MultisigMetadata.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:SignedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:SuggestedParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionWithSigner.md
│ │ │ │ │ ├── SDKs:javascript:modules:indexerModels.md
│ │ │ │ │ ├── SDKs:javascript:modules:modelsv2.md
│ │ │ │ │ ├── SDKs:javascript:modules.md
│ │ │ │ │ ├── SDKs:javascript:README.md
│ │ │ │ │ ├── SDKs:python:algosdk:v2client:harness:README.md
│ │ │ │ │ ├── SDKs:python:examples:README.md
│ │ │ │ │ ├── SDKs:python:README.md
│ │ │ │ │ ├── tealscript:examples_amm_README.md
│ │ │ │ │ ├── tealscript:examples_auction_README.md
│ │ │ │ │ ├── tealscript:examples_big_box_README.md
│ │ │ │ │ ├── tealscript:examples_itxns_README.md
│ │ │ │ │ ├── tealscript:examples_lsig_with_app_README.md
│ │ │ │ │ ├── tealscript:examples_reti_README.md
│ │ │ │ │ ├── tealscript:FEATURES.md
│ │ │ │ │ ├── tealscript:guides_atomic_txn.md
│ │ │ │ │ ├── tealscript:guides_features.md
│ │ │ │ │ ├── tealscript:guides_getting_started.md
│ │ │ │ │ ├── tealscript:guides_inner_transactions.md
│ │ │ │ │ ├── tealscript:guides_lifecycle.md
│ │ │ │ │ ├── tealscript:guides_math.md
│ │ │ │ │ ├── tealscript:guides_methods.md
│ │ │ │ │ ├── tealscript:guides_multiple_contracts.md
│ │ │ │ │ ├── tealscript:guides_pyteal.md
│ │ │ │ │ ├── tealscript:guides_storage.md
│ │ │ │ │ ├── tealscript:guides_Supported Types_arrays.md
│ │ │ │ │ ├── tealscript:guides_Supported Types_numbers.md
│ │ │ │ │ ├── TEALScript:README.md
│ │ │ │ │ ├── tealscript:tests_test_package_README.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0001-intro.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0002-init.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0003-contract.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0004-artifacts.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0005-hello.md
│ │ │ │ │ └── tealscript:tutorials_Hello World_0006-test.md
│ │ │ │ └── taxonomy-categories
│ │ │ │ ├── algokit-utils.json
│ │ │ │ ├── algokit.json
│ │ │ │ ├── arcs.json
│ │ │ │ ├── clis.json
│ │ │ │ ├── details.json
│ │ │ │ ├── developers.json
│ │ │ │ ├── liquid-auth.json
│ │ │ │ ├── nodes.json
│ │ │ │ ├── puya.json
│ │ │ │ ├── python.json
│ │ │ │ ├── sdks.json
│ │ │ │ └── tealscript.json
│ │ │ └── wallet
│ │ │ └── index.ts
│ │ ├── tools
│ │ │ ├── accountManager.ts
│ │ │ ├── algodManager.ts
│ │ │ ├── apiManager
│ │ │ │ ├── algod
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── asset.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── transaction.ts
│ │ │ │ ├── example
│ │ │ │ │ ├── get-balance.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── indexer
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── asset.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── transaction.ts
│ │ │ │ ├── nfd
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tinyman
│ │ │ │ │ ├── analytics.ts
│ │ │ │ │ ├── bootstrap.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── liquidity.ts
│ │ │ │ │ ├── opt_in.ts
│ │ │ │ │ ├── pool.ts
│ │ │ │ │ ├── remove_liquidity.ts
│ │ │ │ │ └── swap.ts
│ │ │ │ ├── ultrade
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── market.ts
│ │ │ │ │ ├── system.ts
│ │ │ │ │ └── wallet.ts
│ │ │ │ └── vestige
│ │ │ │ ├── assets.ts
│ │ │ │ ├── balances.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── networks.ts
│ │ │ │ ├── notes.ts
│ │ │ │ ├── pools.ts
│ │ │ │ ├── protocols.ts
│ │ │ │ ├── swaps.ts
│ │ │ │ └── vaults.ts
│ │ │ ├── arc26Manager.ts
│ │ │ ├── index.ts
│ │ │ ├── knowledgeManager.ts
│ │ │ ├── transactionManager
│ │ │ │ ├── accountTransactions.ts
│ │ │ │ ├── appTransactions
│ │ │ │ │ ├── callTxn.ts
│ │ │ │ │ ├── clearTxn.ts
│ │ │ │ │ ├── closeOutTxn.ts
│ │ │ │ │ ├── createTxn.ts
│ │ │ │ │ ├── deleteTxn.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── optInTxn.ts
│ │ │ │ │ ├── test
│ │ │ │ │ │ ├── counter_approval.teal
│ │ │ │ │ │ ├── counter_clear.teal
│ │ │ │ │ │ ├── storage_test_approval_v2.teal
│ │ │ │ │ │ ├── storage_test_approval.teal
│ │ │ │ │ │ └── storage_test_clear.teal
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── updateTxn.ts
│ │ │ │ ├── assetTransactions.ts
│ │ │ │ ├── generalTransaction.ts
│ │ │ │ └── index.ts
│ │ │ └── utilityManager.ts
│ │ ├── types.ts
│ │ └── utils
│ │ └── responseProcessor.ts
│ ├── tests
│ │ ├── resources
│ │ │ ├── algod
│ │ │ │ ├── account.test.ts
│ │ │ │ ├── application.test.ts
│ │ │ │ ├── asset.test.ts
│ │ │ │ └── transaction.test.ts
│ │ │ └── indexer
│ │ │ ├── account.test.ts
│ │ │ ├── application.test.ts
│ │ │ ├── asset.test.ts
│ │ │ └── transaction.test.ts
│ │ └── tools
│ │ ├── accountManager.test.ts
│ │ ├── algodManager.test.ts
│ │ ├── apiManager
│ │ │ └── example
│ │ │ └── get-balance.test.ts
│ │ ├── transactionManager
│ │ │ ├── accountTransactionManager.test.ts
│ │ │ ├── appTransactionManager.test.ts
│ │ │ ├── assetTransactionManager.test.ts
│ │ │ ├── generalTransactionManager.test.ts
│ │ │ └── transactionManager.test.ts
│ │ └── utilityManager.test.ts
│ └── tsconfig.json
├── README.md
├── rename_files.sh
└── tsconfig.json
```
# Files
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/developers-sdks-js.txt:
--------------------------------------------------------------------------------
```
1 | SDKs:javascript:FAQ.md
2 | SDKs:javascript:classes:Kmd.md
3 | SDKs:javascript:classes:modelsv2.SimulateTraceConfig.md
4 | SDKs:javascript:classes:indexerModels.Block.md
5 | SDKs:javascript:classes:modelsv2.ApplicationInitialStates.md
6 | SDKs:javascript:classes:Indexer.md
7 | SDKs:javascript:classes:indexerModels.EvalDelta.md
8 | SDKs:javascript:classes:indexerModels.StateProofSigSlot.md
9 | SDKs:javascript:classes:indexerModels.AssetParams.md
10 | SDKs:javascript:classes:indexerModels.TealValue.md
11 | SDKs:javascript:classes:indexerModels.ParticipationUpdates.md
12 | SDKs:javascript:classes:modelsv2.DisassembleResponse.md
13 | SDKs:javascript:classes:indexerModels.StateProofVerifier.md
14 | SDKs:javascript:classes:indexerModels.ApplicationsResponse.md
15 | SDKs:javascript:classes:modelsv2.AssetHolding.md
16 | SDKs:javascript:classes:modelsv2.BlockLogsResponse.md
17 | SDKs:javascript:classes:indexerModels.StateProofSignature.md
18 | SDKs:javascript:classes:LogicSig.md
19 | SDKs:javascript:classes:ABIBoolType.md
20 | SDKs:javascript:classes:indexerModels.AccountResponse.md
21 | SDKs:javascript:classes:indexerModels.AssetsResponse.md
22 | SDKs:javascript:classes:modelsv2.SupplyResponse.md
23 | SDKs:javascript:classes:modelsv2.DryrunTxnResult.md
24 | SDKs:javascript:classes:modelsv2.Application.md
25 | SDKs:javascript:classes:ABIArrayDynamicType.md
26 | SDKs:javascript:classes:indexerModels.BoxDescriptor.md
27 | SDKs:javascript:classes:modelsv2.BuildVersion.md
28 | SDKs:javascript:classes:DryrunResult.md
29 | SDKs:javascript:classes:modelsv2.StateProof.md
30 | SDKs:javascript:classes:modelsv2.SimulationTransactionExecTrace.md
31 | SDKs:javascript:classes:indexerModels.TransactionSignature.md
32 | SDKs:javascript:classes:modelsv2.SimulateTransactionGroupResult.md
33 | SDKs:javascript:classes:modelsv2.AssetHoldingReference.md
34 | SDKs:javascript:classes:modelsv2.TealKeyValue.md
35 | SDKs:javascript:classes:indexerModels.StateProofTracking.md
36 | SDKs:javascript:classes:indexerModels.ApplicationLogData.md
37 | SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md
38 | SDKs:javascript:classes:ABIType.md
39 | SDKs:javascript:classes:indexerModels.TransactionSignatureMultisig.md
40 | SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md
41 | SDKs:javascript:classes:indexerModels.ApplicationParams.md
42 | SDKs:javascript:classes:modelsv2.StateProofMessage.md
43 | SDKs:javascript:classes:indexerModels.ErrorResponse.md
44 | SDKs:javascript:classes:SourceMap.md
45 | SDKs:javascript:classes:modelsv2.BlockHashResponse.md
46 | SDKs:javascript:classes:modelsv2.SimulateRequest.md
47 | SDKs:javascript:classes:ABIInterface.md
48 | SDKs:javascript:classes:indexerModels.EvalDeltaKeyValue.md
49 | SDKs:javascript:classes:indexerModels.AccountParticipation.md
50 | SDKs:javascript:classes:Algodv2.md
51 | SDKs:javascript:classes:indexerModels.TransactionsResponse.md
52 | SDKs:javascript:classes:indexerModels.BoxesResponse.md
53 | SDKs:javascript:classes:modelsv2.PostTransactionsResponse.md
54 | SDKs:javascript:classes:indexerModels.TransactionAssetConfig.md
55 | SDKs:javascript:classes:indexerModels.Transaction.md
56 | SDKs:javascript:classes:indexerModels.ApplicationLocalState.md
57 | SDKs:javascript:classes:modelsv2.AccountStateDelta.md
58 | SDKs:javascript:classes:indexerModels.AssetResponse.md
59 | SDKs:javascript:classes:modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md
60 | SDKs:javascript:classes:modelsv2.SimulateInitialStates.md
61 | SDKs:javascript:classes:indexerModels.StateProofReveal.md
62 | SDKs:javascript:classes:modelsv2.Box.md
63 | SDKs:javascript:classes:indexerModels.HealthCheck.md
64 | SDKs:javascript:classes:ABIMethod.md
65 | SDKs:javascript:classes:indexerModels.ApplicationResponse.md
66 | SDKs:javascript:classes:indexerModels.Account.md
67 | SDKs:javascript:classes:indexerModels.TransactionPayment.md
68 | SDKs:javascript:classes:modelsv2.Version.md
69 | SDKs:javascript:classes:modelsv2.GetBlockTimeStampOffsetResponse.md
70 | SDKs:javascript:classes:modelsv2.LightBlockHeaderProof.md
71 | SDKs:javascript:classes:modelsv2.DryrunRequest.md
72 | SDKs:javascript:classes:modelsv2.AvmKeyValue.md
73 | SDKs:javascript:classes:ABIAddressType.md
74 | SDKs:javascript:classes:modelsv2.AccountAssetsInformationResponse.md
75 | SDKs:javascript:classes:modelsv2.DryrunSource.md
76 | SDKs:javascript:classes:modelsv2.AssetParams.md
77 | SDKs:javascript:classes:modelsv2.DryrunState.md
78 | SDKs:javascript:classes:modelsv2.EvalDeltaKeyValue.md
79 | SDKs:javascript:classes:indexerModels.TealKeyValue.md
80 | SDKs:javascript:classes:modelsv2.AccountParticipation.md
81 | SDKs:javascript:classes:modelsv2.SimulateRequestTransactionGroup.md
82 | SDKs:javascript:classes:indexerModels.Application.md
83 | SDKs:javascript:classes:modelsv2.SimulationOpcodeTraceUnit.md
84 | SDKs:javascript:classes:ABITupleType.md
85 | SDKs:javascript:classes:indexerModels.ApplicationLogsResponse.md
86 | SDKs:javascript:classes:modelsv2.AvmValue.md
87 | SDKs:javascript:classes:modelsv2.ApplicationParams.md
88 | SDKs:javascript:classes:modelsv2.BlockTxidsResponse.md
89 | SDKs:javascript:classes:indexerModels.TransactionStateProof.md
90 | SDKs:javascript:classes:indexerModels.BlockUpgradeVote.md
91 | SDKs:javascript:classes:indexerModels.StateSchema.md
92 | SDKs:javascript:classes:modelsv2.BoxDescriptor.md
93 | SDKs:javascript:classes:modelsv2.LedgerStateDeltaForTransactionGroup.md
94 | SDKs:javascript:classes:AtomicTransactionComposer.md
95 | SDKs:javascript:classes:modelsv2.SimulateResponse.md
96 | SDKs:javascript:classes:indexerModels.AccountsResponse.md
97 | SDKs:javascript:classes:indexerModels.AssetHolding.md
98 | SDKs:javascript:classes:modelsv2.ApplicationKVStorage.md
99 | SDKs:javascript:classes:ABIArrayStaticType.md
100 | SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md
101 | SDKs:javascript:classes:modelsv2.Account.md
102 | SDKs:javascript:classes:modelsv2.AccountApplicationResponse.md
103 | SDKs:javascript:classes:indexerModels.AssetHoldingsResponse.md
104 | SDKs:javascript:classes:modelsv2.DryrunResponse.md
105 | SDKs:javascript:classes:modelsv2.AccountAssetResponse.md
106 | SDKs:javascript:classes:modelsv2.NodeStatusResponse.md
107 | SDKs:javascript:classes:modelsv2.CompileResponse.md
108 | SDKs:javascript:classes:indexerModels.MerkleArrayProof.md
109 | SDKs:javascript:classes:indexerModels.Box.md
110 | SDKs:javascript:classes:indexerModels.BlockRewards.md
111 | SDKs:javascript:classes:modelsv2.ScratchChange.md
112 | SDKs:javascript:classes:modelsv2.AccountAssetHolding.md
113 | SDKs:javascript:classes:indexerModels.AssetBalancesResponse.md
114 | SDKs:javascript:classes:indexerModels.AccountStateDelta.md
115 | SDKs:javascript:classes:modelsv2.ApplicationStateOperation.md
116 | SDKs:javascript:classes:indexerModels.TransactionSignatureLogicsig.md
117 | SDKs:javascript:classes:indexerModels.TransactionSignatureMultisigSubsignature.md
118 | SDKs:javascript:classes:indexerModels.TransactionAssetTransfer.md
119 | SDKs:javascript:classes:indexerModels.TransactionAssetFreeze.md
120 | SDKs:javascript:classes:modelsv2.TransactionProofResponse.md
121 | SDKs:javascript:classes:modelsv2.ApplicationLocalState.md
122 | SDKs:javascript:classes:modelsv2.BoxReference.md
123 | SDKs:javascript:classes:ABIUintType.md
124 | SDKs:javascript:classes:modelsv2.ErrorResponse.md
125 | SDKs:javascript:classes:ABIUfixedType.md
126 | SDKs:javascript:classes:modelsv2.TransactionParametersResponse.md
127 | SDKs:javascript:classes:ABIStringType.md
128 | SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md
129 | SDKs:javascript:classes:modelsv2.BoxesResponse.md
130 | SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md
131 | SDKs:javascript:classes:indexerModels.IndexerStateProofMessage.md
132 | SDKs:javascript:classes:indexerModels.BlockUpgradeState.md
133 | SDKs:javascript:classes:Transaction.md
134 | SDKs:javascript:classes:indexerModels.StateProofFields.md
135 | SDKs:javascript:classes:LogicSigAccount.md
136 | SDKs:javascript:classes:modelsv2.Asset.md
137 | SDKs:javascript:classes:indexerModels.TransactionKeyreg.md
138 | SDKs:javascript:classes:modelsv2.TealValue.md
139 | SDKs:javascript:classes:indexerModels.ApplicationLocalStatesResponse.md
140 | SDKs:javascript:classes:modelsv2.BlockResponse.md
141 | SDKs:javascript:classes:indexerModels.Asset.md
142 | SDKs:javascript:classes:modelsv2.SimulationEvalOverrides.md
143 | SDKs:javascript:classes:modelsv2.EvalDelta.md
144 | SDKs:javascript:classes:indexerModels.StateProofParticipant.md
145 | SDKs:javascript:classes:ABIByteType.md
146 | SDKs:javascript:classes:indexerModels.MiniAssetHolding.md
147 | SDKs:javascript:classes:indexerModels.TransactionResponse.md
148 | SDKs:javascript:classes:modelsv2.GetSyncRoundResponse.md
149 | SDKs:javascript:classes:modelsv2.KvDelta.md
150 | SDKs:javascript:classes:indexerModels.TransactionApplication.md
151 | SDKs:javascript:classes:indexerModels.HashFactory.md
152 | SDKs:javascript:classes:modelsv2.AppCallLogs.md
153 | SDKs:javascript:classes:modelsv2.PendingTransactionsResponse.md
154 | SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md
155 | SDKs:javascript:classes:ABIContract.md
156 | SDKs:javascript:enums:IntDecoding.md
157 | SDKs:javascript:enums:ABITransactionType.md
158 | SDKs:javascript:enums:OnApplicationComplete.md
159 | SDKs:javascript:enums:AtomicTransactionComposerStatus.md
160 | SDKs:javascript:enums:TransactionType.md
161 | SDKs:javascript:enums:ABIReferenceType.md
162 | SDKs:javascript:modules.md
163 | SDKs:javascript:README.md
164 | SDKs:javascript:modules:indexerModels.md
165 | SDKs:javascript:modules:modelsv2.md
166 | SDKs:javascript:interfaces:EncodedSignedTransaction.md
167 | SDKs:javascript:interfaces:ABIContractParams.md
168 | SDKs:javascript:interfaces:ABIMethodArgParams.md
169 | SDKs:javascript:interfaces:BoxReference.md
170 | SDKs:javascript:interfaces:EncodedLogicSig.md
171 | SDKs:javascript:interfaces:BaseHTTPClientResponse.md
172 | SDKs:javascript:interfaces:TransactionWithSigner.md
173 | SDKs:javascript:interfaces:BaseHTTPClient.md
174 | SDKs:javascript:interfaces:EncodedBoxReference.md
175 | SDKs:javascript:interfaces:ABIResult.md
176 | SDKs:javascript:interfaces:TransactionParams.md
177 | SDKs:javascript:interfaces:Account.md
178 | SDKs:javascript:interfaces:SignedTransaction.md
179 | SDKs:javascript:interfaces:MultisigMetadata.md
180 | SDKs:javascript:interfaces:EncodedGlobalStateSchema.md
181 | SDKs:javascript:interfaces:EncodedLogicSigAccount.md
182 | SDKs:javascript:interfaces:SuggestedParams.md
183 | SDKs:javascript:interfaces:EncodedLocalStateSchema.md
184 | SDKs:javascript:interfaces:ABIContractNetworkInfo.md
185 | SDKs:javascript:interfaces:ABIContractNetworks.md
186 | SDKs:javascript:interfaces:EncodedSubsig.md
187 | SDKs:javascript:interfaces:ABIMethodParams.md
188 | SDKs:javascript:interfaces:Address.md
189 | SDKs:javascript:interfaces:EncodedTransaction.md
190 | SDKs:javascript:interfaces:BaseHTTPClientError.md
191 | SDKs:javascript:interfaces:ABIMethodReturnParams.md
192 | SDKs:javascript:interfaces:AlgodTokenHeader.md
193 | SDKs:javascript:interfaces:ABIInterfaceParams.md
194 | SDKs:javascript:interfaces:EncodedMultisig.md
195 | SDKs:javascript:interfaces:IndexerTokenHeader.md
196 | SDKs:javascript:interfaces:KMDTokenHeader.md
197 | SDKs:javascript:interfaces:CustomTokenHeader.md
198 | SDKs:javascript:interfaces:EncodedAssetParams.md
199 | SDKs:javascript:README.md
200 | SDKs:javascript:examples:README.md
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.NodeStatusResponse.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / NodeStatusResponse
2 |
3 | # Class: NodeStatusResponse
4 |
5 | [modelsv2](../modules/modelsv2.md).NodeStatusResponse
6 |
7 | ## Hierarchy
8 |
9 | - `default`
10 |
11 | ↳ **`NodeStatusResponse`**
12 |
13 | ## Table of contents
14 |
15 | ### Constructors
16 |
17 | - [constructor](modelsv2.NodeStatusResponse.md#constructor)
18 |
19 | ### Properties
20 |
21 | - [attribute\_map](modelsv2.NodeStatusResponse.md#attribute_map)
22 | - [catchpoint](modelsv2.NodeStatusResponse.md#catchpoint)
23 | - [catchpointAcquiredBlocks](modelsv2.NodeStatusResponse.md#catchpointacquiredblocks)
24 | - [catchpointProcessedAccounts](modelsv2.NodeStatusResponse.md#catchpointprocessedaccounts)
25 | - [catchpointProcessedKvs](modelsv2.NodeStatusResponse.md#catchpointprocessedkvs)
26 | - [catchpointTotalAccounts](modelsv2.NodeStatusResponse.md#catchpointtotalaccounts)
27 | - [catchpointTotalBlocks](modelsv2.NodeStatusResponse.md#catchpointtotalblocks)
28 | - [catchpointTotalKvs](modelsv2.NodeStatusResponse.md#catchpointtotalkvs)
29 | - [catchpointVerifiedAccounts](modelsv2.NodeStatusResponse.md#catchpointverifiedaccounts)
30 | - [catchpointVerifiedKvs](modelsv2.NodeStatusResponse.md#catchpointverifiedkvs)
31 | - [catchupTime](modelsv2.NodeStatusResponse.md#catchuptime)
32 | - [lastCatchpoint](modelsv2.NodeStatusResponse.md#lastcatchpoint)
33 | - [lastRound](modelsv2.NodeStatusResponse.md#lastround)
34 | - [lastVersion](modelsv2.NodeStatusResponse.md#lastversion)
35 | - [nextVersion](modelsv2.NodeStatusResponse.md#nextversion)
36 | - [nextVersionRound](modelsv2.NodeStatusResponse.md#nextversionround)
37 | - [nextVersionSupported](modelsv2.NodeStatusResponse.md#nextversionsupported)
38 | - [stoppedAtUnsupportedRound](modelsv2.NodeStatusResponse.md#stoppedatunsupportedround)
39 | - [timeSinceLastRound](modelsv2.NodeStatusResponse.md#timesincelastround)
40 | - [upgradeDelay](modelsv2.NodeStatusResponse.md#upgradedelay)
41 | - [upgradeNextProtocolVoteBefore](modelsv2.NodeStatusResponse.md#upgradenextprotocolvotebefore)
42 | - [upgradeNoVotes](modelsv2.NodeStatusResponse.md#upgradenovotes)
43 | - [upgradeNodeVote](modelsv2.NodeStatusResponse.md#upgradenodevote)
44 | - [upgradeVoteRounds](modelsv2.NodeStatusResponse.md#upgradevoterounds)
45 | - [upgradeVotes](modelsv2.NodeStatusResponse.md#upgradevotes)
46 | - [upgradeVotesRequired](modelsv2.NodeStatusResponse.md#upgradevotesrequired)
47 | - [upgradeYesVotes](modelsv2.NodeStatusResponse.md#upgradeyesvotes)
48 |
49 | ### Methods
50 |
51 | - [get\_obj\_for\_encoding](modelsv2.NodeStatusResponse.md#get_obj_for_encoding)
52 | - [from\_obj\_for\_encoding](modelsv2.NodeStatusResponse.md#from_obj_for_encoding)
53 |
54 | ## Constructors
55 |
56 | ### constructor
57 |
58 | • **new NodeStatusResponse**(`«destructured»`)
59 |
60 | Creates a new `NodeStatusResponse` object.
61 |
62 | #### Parameters
63 |
64 | | Name | Type |
65 | | :------ | :------ |
66 | | `«destructured»` | `Object` |
67 | | › `catchpoint?` | `string` |
68 | | › `catchpointAcquiredBlocks?` | `number` \| `bigint` |
69 | | › `catchpointProcessedAccounts?` | `number` \| `bigint` |
70 | | › `catchpointProcessedKvs?` | `number` \| `bigint` |
71 | | › `catchpointTotalAccounts?` | `number` \| `bigint` |
72 | | › `catchpointTotalBlocks?` | `number` \| `bigint` |
73 | | › `catchpointTotalKvs?` | `number` \| `bigint` |
74 | | › `catchpointVerifiedAccounts?` | `number` \| `bigint` |
75 | | › `catchpointVerifiedKvs?` | `number` \| `bigint` |
76 | | › `catchupTime` | `number` \| `bigint` |
77 | | › `lastCatchpoint?` | `string` |
78 | | › `lastRound` | `number` \| `bigint` |
79 | | › `lastVersion` | `string` |
80 | | › `nextVersion` | `string` |
81 | | › `nextVersionRound` | `number` \| `bigint` |
82 | | › `nextVersionSupported` | `boolean` |
83 | | › `stoppedAtUnsupportedRound` | `boolean` |
84 | | › `timeSinceLastRound` | `number` \| `bigint` |
85 | | › `upgradeDelay?` | `number` \| `bigint` |
86 | | › `upgradeNextProtocolVoteBefore?` | `number` \| `bigint` |
87 | | › `upgradeNoVotes?` | `number` \| `bigint` |
88 | | › `upgradeNodeVote?` | `boolean` |
89 | | › `upgradeVoteRounds?` | `number` \| `bigint` |
90 | | › `upgradeVotes?` | `number` \| `bigint` |
91 | | › `upgradeVotesRequired?` | `number` \| `bigint` |
92 | | › `upgradeYesVotes?` | `number` \| `bigint` |
93 |
94 | #### Overrides
95 |
96 | BaseModel.constructor
97 |
98 | #### Defined in
99 |
100 | client/v2/algod/models/types.ts:3666
101 |
102 | ## Properties
103 |
104 | ### attribute\_map
105 |
106 | • **attribute\_map**: `Record`\<`string`, `string`\>
107 |
108 | #### Inherited from
109 |
110 | BaseModel.attribute\_map
111 |
112 | #### Defined in
113 |
114 | client/v2/basemodel.ts:56
115 |
116 | ___
117 |
118 | ### catchpoint
119 |
120 | • `Optional` **catchpoint**: `string`
121 |
122 | The current catchpoint that is being caught up to
123 |
124 | #### Defined in
125 |
126 | client/v2/algod/models/types.ts:3536
127 |
128 | ___
129 |
130 | ### catchpointAcquiredBlocks
131 |
132 | • `Optional` **catchpointAcquiredBlocks**: `number` \| `bigint`
133 |
134 | The number of blocks that have already been obtained by the node as part of the
135 | catchup
136 |
137 | #### Defined in
138 |
139 | client/v2/algod/models/types.ts:3542
140 |
141 | ___
142 |
143 | ### catchpointProcessedAccounts
144 |
145 | • `Optional` **catchpointProcessedAccounts**: `number` \| `bigint`
146 |
147 | The number of accounts from the current catchpoint that have been processed so
148 | far as part of the catchup
149 |
150 | #### Defined in
151 |
152 | client/v2/algod/models/types.ts:3548
153 |
154 | ___
155 |
156 | ### catchpointProcessedKvs
157 |
158 | • `Optional` **catchpointProcessedKvs**: `number` \| `bigint`
159 |
160 | The number of key-values (KVs) from the current catchpoint that have been
161 | processed so far as part of the catchup
162 |
163 | #### Defined in
164 |
165 | client/v2/algod/models/types.ts:3554
166 |
167 | ___
168 |
169 | ### catchpointTotalAccounts
170 |
171 | • `Optional` **catchpointTotalAccounts**: `number` \| `bigint`
172 |
173 | The total number of accounts included in the current catchpoint
174 |
175 | #### Defined in
176 |
177 | client/v2/algod/models/types.ts:3559
178 |
179 | ___
180 |
181 | ### catchpointTotalBlocks
182 |
183 | • `Optional` **catchpointTotalBlocks**: `number` \| `bigint`
184 |
185 | The total number of blocks that are required to complete the current catchpoint
186 | catchup
187 |
188 | #### Defined in
189 |
190 | client/v2/algod/models/types.ts:3565
191 |
192 | ___
193 |
194 | ### catchpointTotalKvs
195 |
196 | • `Optional` **catchpointTotalKvs**: `number` \| `bigint`
197 |
198 | The total number of key-values (KVs) included in the current catchpoint
199 |
200 | #### Defined in
201 |
202 | client/v2/algod/models/types.ts:3570
203 |
204 | ___
205 |
206 | ### catchpointVerifiedAccounts
207 |
208 | • `Optional` **catchpointVerifiedAccounts**: `number` \| `bigint`
209 |
210 | The number of accounts from the current catchpoint that have been verified so
211 | far as part of the catchup
212 |
213 | #### Defined in
214 |
215 | client/v2/algod/models/types.ts:3576
216 |
217 | ___
218 |
219 | ### catchpointVerifiedKvs
220 |
221 | • `Optional` **catchpointVerifiedKvs**: `number` \| `bigint`
222 |
223 | The number of key-values (KVs) from the current catchpoint that have been
224 | verified so far as part of the catchup
225 |
226 | #### Defined in
227 |
228 | client/v2/algod/models/types.ts:3582
229 |
230 | ___
231 |
232 | ### catchupTime
233 |
234 | • **catchupTime**: `number` \| `bigint`
235 |
236 | CatchupTime in nanoseconds
237 |
238 | #### Defined in
239 |
240 | client/v2/algod/models/types.ts:3494
241 |
242 | ___
243 |
244 | ### lastCatchpoint
245 |
246 | • `Optional` **lastCatchpoint**: `string`
247 |
248 | The last catchpoint seen by the node
249 |
250 | #### Defined in
251 |
252 | client/v2/algod/models/types.ts:3587
253 |
254 | ___
255 |
256 | ### lastRound
257 |
258 | • **lastRound**: `number` \| `bigint`
259 |
260 | LastRound indicates the last round seen
261 |
262 | #### Defined in
263 |
264 | client/v2/algod/models/types.ts:3499
265 |
266 | ___
267 |
268 | ### lastVersion
269 |
270 | • **lastVersion**: `string`
271 |
272 | LastVersion indicates the last consensus version supported
273 |
274 | #### Defined in
275 |
276 | client/v2/algod/models/types.ts:3504
277 |
278 | ___
279 |
280 | ### nextVersion
281 |
282 | • **nextVersion**: `string`
283 |
284 | NextVersion of consensus protocol to use
285 |
286 | #### Defined in
287 |
288 | client/v2/algod/models/types.ts:3509
289 |
290 | ___
291 |
292 | ### nextVersionRound
293 |
294 | • **nextVersionRound**: `number` \| `bigint`
295 |
296 | NextVersionRound is the round at which the next consensus version will apply
297 |
298 | #### Defined in
299 |
300 | client/v2/algod/models/types.ts:3514
301 |
302 | ___
303 |
304 | ### nextVersionSupported
305 |
306 | • **nextVersionSupported**: `boolean`
307 |
308 | NextVersionSupported indicates whether the next consensus version is supported
309 | by this node
310 |
311 | #### Defined in
312 |
313 | client/v2/algod/models/types.ts:3520
314 |
315 | ___
316 |
317 | ### stoppedAtUnsupportedRound
318 |
319 | • **stoppedAtUnsupportedRound**: `boolean`
320 |
321 | StoppedAtUnsupportedRound indicates that the node does not support the new
322 | rounds and has stopped making progress
323 |
324 | #### Defined in
325 |
326 | client/v2/algod/models/types.ts:3526
327 |
328 | ___
329 |
330 | ### timeSinceLastRound
331 |
332 | • **timeSinceLastRound**: `number` \| `bigint`
333 |
334 | TimeSinceLastRound in nanoseconds
335 |
336 | #### Defined in
337 |
338 | client/v2/algod/models/types.ts:3531
339 |
340 | ___
341 |
342 | ### upgradeDelay
343 |
344 | • `Optional` **upgradeDelay**: `number` \| `bigint`
345 |
346 | Upgrade delay
347 |
348 | #### Defined in
349 |
350 | client/v2/algod/models/types.ts:3592
351 |
352 | ___
353 |
354 | ### upgradeNextProtocolVoteBefore
355 |
356 | • `Optional` **upgradeNextProtocolVoteBefore**: `number` \| `bigint`
357 |
358 | Next protocol round
359 |
360 | #### Defined in
361 |
362 | client/v2/algod/models/types.ts:3597
363 |
364 | ___
365 |
366 | ### upgradeNoVotes
367 |
368 | • `Optional` **upgradeNoVotes**: `number` \| `bigint`
369 |
370 | No votes cast for consensus upgrade
371 |
372 | #### Defined in
373 |
374 | client/v2/algod/models/types.ts:3602
375 |
376 | ___
377 |
378 | ### upgradeNodeVote
379 |
380 | • `Optional` **upgradeNodeVote**: `boolean`
381 |
382 | This node's upgrade vote
383 |
384 | #### Defined in
385 |
386 | client/v2/algod/models/types.ts:3607
387 |
388 | ___
389 |
390 | ### upgradeVoteRounds
391 |
392 | • `Optional` **upgradeVoteRounds**: `number` \| `bigint`
393 |
394 | Total voting rounds for current upgrade
395 |
396 | #### Defined in
397 |
398 | client/v2/algod/models/types.ts:3612
399 |
400 | ___
401 |
402 | ### upgradeVotes
403 |
404 | • `Optional` **upgradeVotes**: `number` \| `bigint`
405 |
406 | Total votes cast for consensus upgrade
407 |
408 | #### Defined in
409 |
410 | client/v2/algod/models/types.ts:3617
411 |
412 | ___
413 |
414 | ### upgradeVotesRequired
415 |
416 | • `Optional` **upgradeVotesRequired**: `number` \| `bigint`
417 |
418 | Yes votes required for consensus upgrade
419 |
420 | #### Defined in
421 |
422 | client/v2/algod/models/types.ts:3622
423 |
424 | ___
425 |
426 | ### upgradeYesVotes
427 |
428 | • `Optional` **upgradeYesVotes**: `number` \| `bigint`
429 |
430 | Yes votes cast for consensus upgrade
431 |
432 | #### Defined in
433 |
434 | client/v2/algod/models/types.ts:3627
435 |
436 | ## Methods
437 |
438 | ### get\_obj\_for\_encoding
439 |
440 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
441 |
442 | Get an object ready for encoding to either JSON or msgpack.
443 |
444 | #### Parameters
445 |
446 | | Name | Type | Default value | Description |
447 | | :------ | :------ | :------ | :------ |
448 | | `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. |
449 |
450 | #### Returns
451 |
452 | `Record`\<`string`, `any`\>
453 |
454 | #### Inherited from
455 |
456 | BaseModel.get\_obj\_for\_encoding
457 |
458 | #### Defined in
459 |
460 | client/v2/basemodel.ts:65
461 |
462 | ___
463 |
464 | ### from\_obj\_for\_encoding
465 |
466 | ▸ `Static` **from_obj_for_encoding**(`data`): [`NodeStatusResponse`](modelsv2.NodeStatusResponse.md)
467 |
468 | #### Parameters
469 |
470 | | Name | Type |
471 | | :------ | :------ |
472 | | `data` | `Record`\<`string`, `any`\> |
473 |
474 | #### Returns
475 |
476 | [`NodeStatusResponse`](modelsv2.NodeStatusResponse.md)
477 |
478 | #### Defined in
479 |
480 | client/v2/algod/models/types.ts:3780
481 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:docs:lg-arc4.md:
--------------------------------------------------------------------------------
```markdown
1 | # ARC-4: Application Binary Interface
2 |
3 | [ARC4](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0004.md) defines a set of encodings and behaviors for authoring and interacting with an Algorand Smart Contract. It is not the only way to author a smart contract, but adhering to it will make it easier for other clients and users to interop with your contract.
4 |
5 | To author an arc4 contract you should extend the `ARC4Contract` base class.
6 |
7 | ```python
8 | from algopy import ARC4Contract
9 |
10 | class HelloWorldContract(ARC4Contract):
11 | ...
12 | ```
13 |
14 | ## ARC-32 and ARC-56
15 |
16 | [ARC32](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0032.md) extends the concepts in ARC4 to include an Application Specification which more holistically describes a smart contract and its associated state.
17 |
18 | ARC-32/ARC-56 Application Specification files are automatically generated by the compiler for ARC4
19 | contracts as `<ContractName>.arc32.json` or `<ContractName>.arc56.json`
20 |
21 | ## Methods
22 |
23 | Individual methods on a smart contract should be annotated with an `abimethod` decorator. This decorator is used to indicate a method which should be externally callable. The decorator itself includes properties to restrict when the method should be callable, for instance only when the application is being created or only when the OnComplete action is OptIn.
24 |
25 | A method that should not be externally available should be annotated with a `subroutine` decorator.
26 |
27 | Method docstrings will be used when outputting ARC-32 or ARC-56 application specifications, the following docstrings styles are supported ReST, Google, Numpydoc-style and Epydoc.
28 |
29 | ```python
30 | from algopy import ARC4Contract, subroutine, arc4
31 |
32 |
33 | class HelloWorldContract(ARC4Contract):
34 | @arc4.abimethod(create=False, allow_actions=["NoOp", "OptIn"], name="external_name")
35 | def hello(self, name: arc4.String) -> arc4.String:
36 | return self.internal_method() + name
37 |
38 | @subroutine
39 | def internal_method(self) -> arc4.String:
40 | return arc4.String("Hello, ")
41 | ```
42 |
43 | ## Router
44 |
45 | Algorand Smart Contracts only have two possible programs that are invoked when making an ApplicationCall Transaction (`appl`). The "clear state" program which is called when using an OnComplete action of `ClearState` or the "approval" program which is called for all other OnComplete actions.
46 |
47 | Routing is required to dispatch calls handled by the approval program to the relevant ABI methods. When extending `ARC4Contract`, the routing code is automatically generated for you by the PuyaPy compiler.
48 |
49 | ## Types
50 |
51 | ARC4 defines a number of [data types](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0004.md#types) which can be used in an ARC4 compatible contract and details how these types should be encoded in binary.
52 |
53 | Algorand Python exposes these through a number of types which can be imported from the `algopy.arc4` module. These types represent binary encoded values following the rules prescribed in the ARC which can mean operations performed directly on these types are not as efficient as ones performed on natively supported types (such as `algopy.UInt64` or `algopy.Bytes`)
54 |
55 | Where supported, the native equivalent of an ARC4 type can be obtained via the `.native` property. It is possible to use native types in an ABI method and the router will automatically encode and decode these types to their ARC4 equivalent.
56 |
57 | ### Booleans
58 |
59 | **Type:** `algopy.arc4.Bool`
60 | **Encoding:** A single byte where the most significant bit is `1` for `True` and `0` for `False`
61 | **Native equivalent:** `builtins.bool`
62 |
63 | ### Unsigned ints
64 |
65 | **Types:** `algopy.arc4.UIntN` (<= 64 bits) `algopy.arc4.BigUIntN` (> 64 bits)
66 | **Encoding:** A big endian byte array of N bits
67 | **Native equivalent:** `algopy.UInt64` or `puya.py.BigUInt`
68 |
69 | Common bit sizes have also been aliased under `algopy.arc4.UInt8`, `algopy.arc4.UInt16` etc. A uint of any size between 8 and 512 bits (in intervals of 8bits) can be created using a generic parameter. It can be helpful to define your own alias for this type.
70 |
71 | ```python
72 | import typing as t
73 | from algopy import arc4
74 |
75 | UInt40: t.TypeAlias = arc4.UIntN[t.Literal[40]]
76 | ```
77 |
78 | ### Unsigned fixed point decimals
79 |
80 | **Types:** `algopy.arc4.UFixedNxM` (<= 64 bits) `algopy.arc4.BigUFixedNxM` (> 64 bits)
81 | **Encoding:** A big endian byte array of N bits where `encoded_value = value / (10^M)`
82 | **Native equivalent:** _none_
83 |
84 | ```python
85 | import typing as t
86 | from algopy import arc4
87 |
88 | Decimal: t.TypeAlias = arc4.UFixedNxM[t.Literal[64], t.Literal[10]]
89 | ```
90 |
91 | ### Bytes and strings
92 |
93 | **Types:** `algopy.arc4.DynamicBytes` and `algopy.arc4.String`
94 | **Encoding:** A variable length byte array prefixed with a 16-bit big endian header indicating the length of the data
95 | **Native equivalent:** `algopy.Bytes` and `algopy.String`
96 |
97 | Strings are assumed to be utf-8 encoded and the length of a string is the total number of bytes, _not the total number of characters_.
98 |
99 | ### Static arrays
100 |
101 | **Type:** `algopy.arc4.StaticArray`
102 | **Encoding:** See [ARC4 Container Packing](#ARC4-Container-Packing)
103 | **Native equivalent:** _none_
104 |
105 | An ARC4 StaticArray is an array of a fixed size. The item type is specified by the first generic parameter and the size is specified by the second.
106 |
107 | ```python
108 | import typing as t
109 | from algopy import arc4
110 |
111 | FourBytes: t.TypeAlias = arc4.StaticArray[arc4.Byte, t.Literal[4]]
112 | ```
113 |
114 |
115 | ### Address
116 | **Type:** `algopy.arc4.Address`
117 | **Encoding:** A byte array 32 bytes long
118 | **Native equivalent:** [`algopy.Account`](#algopy.Account)
119 |
120 | Address represents an Algorand address's public key, and can be used instead of `algopy.Account` when needing to
121 | reference an address in an ARC4 struct, tuple or return type. It is a subclass of `arc4.StaticArray[arc4.Byte, typing.Literal[32]]`
122 |
123 | ### Dynamic arrays
124 |
125 | **Type:** `algopy.arc4.DynamicArray`
126 | **Encoding:** See [ARC4 Container Packing](#ARC4-Container-Packing)
127 | **Native equivalent:** _none_
128 |
129 | An ARC4 DynamicArray is an array of a variable size. The item type is specified by the first generic parameter. Items can be added and removed via `.pop`, `.append`, and `.extend`.
130 |
131 | The current length of the array is encoded in a 16-bit prefix similar to the `arc4.DynamicBytes` and `arc4.String` types
132 |
133 | ```python
134 | import typing as t
135 | from algopy import arc4
136 |
137 | UInt64Array: t.TypeAlias = arc4.DynamicArray[arc4.UInt64]
138 | ```
139 |
140 | ### Tuples
141 |
142 | **Type:** `algopy.arc4.Tuple`
143 | **Encoding:** See [ARC4 Container Packing](#ARC4-Container-Packing)
144 | **Native equivalent:** `builtins.tuple`
145 |
146 | ARC4 Tuples are immutable statically sized arrays of mixed item types. Item types can be specified via generic parameters or inferred from constructor parameters.
147 |
148 | ### Structs
149 |
150 | **Type:** `algopy.arc4.Struct`
151 | **Encoding:** See [ARC4 Container Packing](#ARC4-Container-Packing)
152 | **Native equivalent:** `typing.NamedTuple`
153 |
154 | ARC4 Structs are named tuples. The class keyword `frozen` can be used to indicate if a struct can be mutated.
155 | Items can be accessed and mutated via names instead of indexes. Structs do not have a `.native` property,
156 | but a NamedTuple can be used in ABI methods are will be encoded/decode to an ARC4 struct automatically.
157 |
158 | ```python
159 | import typing
160 |
161 | from algopy import arc4
162 |
163 | Decimal: typing.TypeAlias = arc4.UFixedNxM[typing.Literal[64], typing.Literal[9]]
164 |
165 | class Vector(arc4.Struct, kw_only=True, frozen=True):
166 | x: Decimal
167 | y: Decimal
168 | ```
169 |
170 | ### ARC4 Container Packing
171 |
172 | ARC4 encoding rules are detailed explicitly in the [ARC](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0004.md#encoding-rules). A summary is included here.
173 |
174 | Containers are composed of a head and tail portion.
175 | - For dynamic arrays, the head is prefixed with the length of the array encoded as a 16-bit number. This prefix is not included in offset calculation
176 | - For fixed sized items (eg. Bool, UIntN, or a StaticArray of UIntN), the item is included in the head
177 | - Consecutive Bool items are compressed into the minimum number of whole bytes possible by using a single bit to represent each Bool
178 | - For variable sized items (eg. DynamicArray, String etc), a pointer is included to the head and the data is added to the tail. This pointer represents the offset from the start of the head to the start of the item data in the tail.
179 |
180 |
181 | ### Reference types
182 |
183 | **Types:** `algopy.Account`, `algopy.Application`, `algopy.Asset`, `algopy.gtxn.PaymentTransaction`, `algopy.gtxn.KeyRegistrationTransaction`, `algopy.gtxn.AssetConfigTransaction`, `algopy.gtxn.AssetTransferTransaction`, `algopy.gtxn.AssetFreezeTransaction`, `algopy.gtxn.ApplicationCallTransaction`
184 |
185 | The ARC4 specification allows for using a number of [reference types](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0004.md#reference-types) in an ABI method signature where this reference type refers to...
186 | - another transaction in the group
187 | - an account in the accounts array (`apat` property of the transaction)
188 | - an asset in the foreign assets array (`apas` property of the transaction)
189 | - an application in the foreign apps array (`apfa` property of the transaction)
190 |
191 | These types can only be used as parameters, and not as return types.
192 |
193 | ```python
194 | from algopy import (
195 | Account,
196 | Application,
197 | ARC4Contract,
198 | Asset,
199 | arc4,
200 | gtxn,
201 | )
202 |
203 | class Reference(ARC4Contract):
204 | @arc4.abimethod
205 | def with_transactions(
206 | self,
207 | asset: Asset,
208 | pay: gtxn.PaymentTransaction,
209 | account: Account,
210 | app: Application,
211 | axfr: gtxn.AssetTransferTransaction
212 | ) -> None:
213 | ...
214 |
215 | ```
216 | ### Mutability
217 |
218 | To ensure semantic compatability the compiler will also check for any usages of mutable ARC4 types (arrays and structs) and ensure that any additional references are copied using the `.copy()` method.
219 |
220 | Python values are passed by reference, and when an object (eg. an array or struct) is mutated in one place, all references to that object see the mutated version. In Python this is managed via the heap.
221 | In Algorand Python these mutable values are instead stored on the stack, so when an additional reference is made (i.e. by assigning to another variable) a copy is added to the stack.
222 | Which means if one reference is mutated, the other references would not see the change.
223 | In order to keep the semantics the same, the compiler forces the addition of `.copy()` each time a new reference to the same object to match what will happen on the AVM.
224 |
225 | Struct types can be indicated as `frozen` which will eliminate the need for a `.copy()` as long as the struct also contains no mutable fields (such as arrays or another mutable struct)
226 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:cli:features:project:deploy.md:
--------------------------------------------------------------------------------
```markdown
1 | # AlgoKit Project Deploy
2 |
3 | Deploy your smart contracts effortlessly to various networks with the algokit project deploy feature. This feature is essential for automation in CI/CD pipelines and for seamless deployment to various Algorand network environments.
4 |
5 | > **Note**: Invoking deploy from `algokit deploy` is not recommended. Please prefer using `algokit project deploy` instead.
6 |
7 | ## Usage
8 |
9 | ```sh
10 | $ algokit project deploy [OPTIONS] [ENVIRONMENT_NAME] [EXTRA_ARGS]
11 | ```
12 |
13 | This command deploys smart contracts from an AlgoKit compliant repository to the specified network.
14 |
15 | ### Options
16 |
17 | - `--command, -C TEXT`: Specifies a custom deploy command. If this option is not provided, the deploy command will be loaded from the `.algokit.toml` file.
18 | - `--interactive / --non-interactive, --ci`: Enables or disables the interactive prompt for mnemonics. When the CI environment variable is set, it defaults to non-interactive.
19 | - `--path, -P DIRECTORY`: Specifies the project directory. If not provided, the current working directory will be used.
20 | - `--deployer`: Specifies the deployer alias. If not provided and if the deployer is specified in `.algokit.toml` file its mnemonic will be prompted.
21 | - `--dispenser`: Specifies the dispenser alias. If not provided and if the dispenser is specified in `.algokit.toml` file its mnemonic will be prompted.
22 | - `-p, --project-name`: (Optional) Projects to execute the command on. Defaults to all projects found in
23 | the current directory. Option is mutually exclusive with `--command`.
24 | - `-h, --help`: Show this message and exit.
25 | - `[EXTRA_ARGS]...`: Additional arguments to pass to the deploy command. For instance, `algokit project deploy -- {custom args}`. This will ensure that the extra arguments are passed to the deploy command specified in the `.algokit.toml` file or directly via `--command` option.
26 |
27 | ## Environment files
28 |
29 | AlgoKit `deploy` employs both a general and network-specific environment file strategy. This allows you to set environment variables that are applicable across all networks and others that are specific to a given network.
30 |
31 | The general environment file (`.env`) should be placed at the root of your project. This file will be used to load environment variables that are common across deployments to all networks.
32 |
33 | For each network you're deploying to, you can optionally have a corresponding `.env.[network_name]` file. This file should contain environment variables specific to that network. Network-specific environment variables take precedence over general environment variables.
34 |
35 | The directory layout would look like this:
36 |
37 | ```md
38 | .
39 | ├── ... (your project files and directories)
40 | ├── .algokit.toml # Configuration file for AlgoKit
41 | ├── .env # (OPTIONAL) General environment variables common across all deployments
42 | └── .env.[{mainnet|testnet|localnet|betanet|custom}] # (OPTIONAL) Environment variables specific to deployments to a network
43 | ```
44 |
45 | > ⚠️ Please note that creating `.env` and `.env.[network_name]` files is only necessary if you're deploying to a custom network or if you want to override the default network configurations provided by AlgoKit. AlgoKit comes with predefined configurations for popular networks like `TestNet`, `MainNet`, `BetaNet`, or AlgoKit's `LocalNet`.
46 |
47 | The logic for loading environment variables is as follows:
48 |
49 | - If a `.env` file exists, the environment variables contained in it are loaded first.
50 | - If a `.env.[network_name]` file exists, the environment variables in it are loaded, overriding any previously loaded values from the `.env` file for the same variables.
51 |
52 | ### Default Network Configurations
53 |
54 | The `deploy` command assumes default configurations for `mainnet`, `localnet`, and `testnet` environments. If you're deploying to one of these networks and haven't provided specific environment variables, AlgoKit will use these default values:
55 |
56 | - **Localnet**:
57 |
58 | - `ALGOD_TOKEN`: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
59 | - `ALGOD_SERVER`: "http://localhost"
60 | - `ALGOD_PORT`: "4001"
61 | - `INDEXER_TOKEN`: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
62 | - `INDEXER_SERVER`: "http://localhost"
63 | - `INDEXER_PORT`: "8980"
64 |
65 | - **Mainnet**:
66 |
67 | - `ALGOD_SERVER`: "https://mainnet-api.algonode.cloud"
68 | - `INDEXER_SERVER`: "https://mainnet-idx.algonode.cloud"
69 |
70 | - **Testnet**:
71 | - `ALGOD_SERVER`: "https://testnet-api.algonode.cloud"
72 | - `INDEXER_SERVER`: "https://testnet-idx.algonode.cloud"
73 |
74 | These default values are used when no specific `.env.[network_name]` file is present and the corresponding environment variables are not set. This feature simplifies the deployment process for these common networks, reducing the need for manual configuration in many cases.
75 |
76 | If you need to override these defaults or add additional configuration for these networks, you can still do so by creating the appropriate `.env.[network_name]` file or setting the environment variables explicitly or via generic `.env` file.
77 |
78 | ## AlgoKit Configuration File
79 |
80 | AlgoKit uses a configuration file called `.algokit.toml` in the root of your project. The configuration file can be created using the `algokit init` command. This file will define the deployment commands for the various network environments that you want to target.
81 |
82 | Here's an example of what the `.algokit.toml` file might look like. When deploying it will prompt for the `DEPLOYER_MNEMONIC` secret unless it is already defined as an environment variable or is deploying to localnet.
83 |
84 | ```toml
85 | [algokit]
86 | min_version = "v{lastest_version}"
87 |
88 | [project]
89 |
90 | ... # project configuration and custom commands
91 |
92 | [project.deploy]
93 | command = "poetry run python -m smart_contracts deploy"
94 | environment_secrets = [
95 | "DEPLOYER_MNEMONIC",
96 | ]
97 |
98 | [project.deploy.localnet]
99 | environment_secrets = []
100 | ```
101 |
102 | The `command` key under each `[project.deploy.{network_name}]` section should contain a string that represents the deployment command for that particular network. If a `command` key is not provided in a network-specific section, the command from the general `[project.deploy]` section will be used.
103 |
104 | The `environment_secrets` key should contain a list of names of environment variables that should be treated as secrets. This can be defined in the general `[project.deploy]` section, as well as in the network-specific sections. The environment-specific secrets will be added to the general secrets during deployment.
105 |
106 | The `[algokit]` section with the `min_version` key allows you to specify the minimum version of AlgoKit that the project requires.
107 |
108 | This way, you can define common deployment logic and environment secrets in the `[project.deploy]` section, and provide overrides or additions for specific environments in the `[project.deploy.{environment_name}]` sections.
109 |
110 | ## Deploying to a Specific Network
111 |
112 | The command requires a `ENVIRONMENT` argument, which specifies the network environment to which the smart contracts will be deployed. Please note, the `environment` argument is case-sensitive.
113 |
114 | Example:
115 |
116 | ```sh
117 | $ algokit project deploy testnet
118 | ```
119 |
120 | This command deploys the smart contracts to the testnet.
121 |
122 | ## Deploying to a Specific Network from a workspace with project name filter
123 |
124 | The command requires a `ENVIRONMENT` argument, which specifies the network environment to which the smart contracts will be deployed. Please note, the `environment` argument is case-sensitive.
125 |
126 | Example:
127 |
128 | Root `.algokit.toml`:
129 |
130 | ```toml
131 | [project]
132 | type = "workspace"
133 | projects_root_dir = 'projects'
134 | ```
135 |
136 | Contract project `.algokit.toml`:
137 |
138 | ```toml
139 | [project]
140 | type = "contract"
141 | name = "myproject"
142 |
143 | [project.deploy]
144 | command = "{custom_deploy_command}"
145 | ```
146 |
147 | ```bash
148 | $ algokit project deploy testnet --project-name myproject
149 | ```
150 |
151 | This command deploys the smart contracts to TestNet from a sub project named 'myproject', which is available within the current workspace. All `.env` loading logic described in [Environment files](#environment-files) is applicable, execution from the workspace root orchestrates invoking the deploy command from the working directory of each applicable sub project.
152 |
153 | ## Custom Project Directory
154 |
155 | By default, the deploy command looks for the `.algokit.toml` file in the current working directory. You can specify a custom project directory using the `--project-dir` option.
156 |
157 | Example:
158 |
159 | ```sh
160 | $ algokit project deploy testnet --project-dir="path/to/project"
161 | ```
162 |
163 | ## Custom Deploy Command
164 |
165 | You can provide a custom deploy command using the `--custom-deploy-command` option. If this option is not provided, the deploy command will be loaded from the `.algokit.toml` file.
166 |
167 | Example:
168 |
169 | ```sh
170 | $ algokit project deploy testnet --custom-deploy-command="your-custom-command"
171 | ```
172 |
173 | > ⚠️ Please note, chaining multiple commands with `&&` is **not** currently supported. If you need to run multiple commands, you can defer to a custom script. Refer to [run](../project/run.md#custom-command-injection) for scenarios where multiple sub-command invocations are required.
174 |
175 | ## CI Mode
176 |
177 | By using the `--ci` or `--non-interactive` flag, you can skip the interactive prompt for mnemonics.
178 |
179 | This is useful in CI/CD environments where user interaction is not possible. When using this flag, you need to make sure that the mnemonics are set as environment variables.
180 |
181 | Example:
182 |
183 | ```sh
184 | $ algokit project deploy testnet --ci
185 | ```
186 |
187 | ## Passing Extra Arguments
188 |
189 | You can pass additional arguments to the deploy command. These extra arguments will be appended to the end of the deploy command specified in your `.algokit.toml` file or to the command specified directly via `--command` option.
190 |
191 | To pass extra arguments, use `--` after the AlgoKit command and options to mark the distinction between arguments used by the CLI and arguments to be passed as extras to the deploy command/script.
192 |
193 | Example:
194 |
195 | ```sh
196 | $ algokit project deploy testnet -- my_contract_name --some_contract_related_param
197 | ```
198 |
199 | In this example, `my_contract_name` and `--some_contract_related_param` are extra arguments that can be utilized by the custom deploy command invocation, for instance, to filter the deployment to a specific contract or modify deployment behavior.
200 |
201 | ## Example of a Full Deployment
202 |
203 | ```sh
204 | $ algokit project deploy testnet --custom-deploy-command="your-custom-command"
205 | ```
206 |
207 | This example shows how to deploy smart contracts to the testnet using a custom deploy command. This also assumes that .algokit.toml file is present in the current working directory, and .env.testnet file is present in the current working directory and contains the required environment variables for deploying to TestNet environment.
208 |
209 | ## Further Reading
210 |
211 | For in-depth details, visit the [deploy](../../cli/index.md#deploy) section in the AlgoKit CLI reference documentation.
212 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0006.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 6
3 | title: Algorand Wallet Address Discovery API
4 | description: API function, enable, which allows the discovery of accounts
5 | author: DanBurton (@DanBurton)
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/52
7 | status: Deprecated
8 | type: Standards Track
9 | category: Interface
10 | created: 2021-08-09
11 | ---
12 |
13 | # Algorand Wallet Address Discovery API
14 |
15 | ## Abstract
16 |
17 | A function, `enable`, which allows the discovery of accounts.
18 | Optional functions, `enableNetwork` and `enableAccounts`, which handle the multiple capabilities of `enable` separately.
19 | This document requires nothing else, but further semantic meaning is prescribed to these functions in [ARC-0010](arc-0010.md#semantic-requirements) which builds off of this one and a few others.
20 | The caller of this function is usually a dApp.
21 |
22 | ## Specification
23 |
24 | 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>.
25 |
26 | > Comments like this are non-normative.
27 |
28 | ### Interface `EnableFunction`
29 |
30 | ```ts
31 | export type AlgorandAddress = string;
32 | export type GenesisHash = string;
33 |
34 | export type EnableNetworkFunction = (
35 | opts?: EnableNetworkOpts
36 | ) => Promise<EnableNetworkResult>;
37 |
38 | export type EnableAccountsFunction = (
39 | opts?: EnableAccountsOpts
40 | ) => Promise<EnableAccountsResult>;
41 |
42 | export type EnableFunction = (
43 | opts?: EnableOpts
44 | ) => Promise<EnableResult>;
45 |
46 | export type EnableOpts = (
47 | EnableNetworkOpts & EnableAccountsOpts
48 | );
49 |
50 | export interface EnableNetworkOpts {
51 | genesisID?: string;
52 | genesisHash?: GenesisHash;
53 | };
54 |
55 | export interface EnableAccountsOpts {
56 | accounts?: AlgorandAddress[];
57 | };
58 |
59 |
60 | export type EnableResult = (
61 | EnableNetworkResult & EnableAccountsResult
62 | );
63 |
64 | export interface EnableNetworkResult {
65 | genesisID: string;
66 | genesisHash: GenesisHash;
67 | }
68 |
69 | export interface EnableAccountsResult {
70 | accounts: AlgorandAddress[];
71 | }
72 |
73 | export interface EnableError extends Error {
74 | code: number;
75 | data?: any;
76 | }
77 | ```
78 |
79 | An `EnableFunction` with optional input argument `opts:EnableOpts` **MUST** return a value `ret:EnableResult` or **MUST** throw an exception object of type `EnableError`.
80 |
81 | #### String specification: `GenesisID` and `GenesisHash`
82 |
83 | A `GenesisID` is an ascii string
84 |
85 | A `GenesisHash` is base64 string representing a 32-byte genesis hash.
86 |
87 | #### String specification: `AlgorandAddress`
88 |
89 | Defined as in [ARC-0001](./arc-0001.md#interface-algorandaddress):
90 |
91 | > An Algorand address is represented by a 58-character base32 string. It includes includes the checksum.
92 |
93 | #### Error Standards
94 |
95 | `EnableError` follows the same rules as `SignTxnsError` from [ARC-0001](./arc-0001.md#error-interface-signtxnserror) and uses the same status error codes.
96 |
97 | ### Interface `WalletAccountManager`
98 | ```ts
99 | export interface WalletAccountManager {
100 | switchAccount: (addr: AlgorandAddress) => Promise<void>
101 | switchNetwork: (genesisID: string) => Promise<void>
102 | onAccountSwitch: (hook: (addr: AlgorandAddress) => void)
103 | onNetworkSwitch: (hook: (genesisID: string, genesisHash: GenesisHash) => void)
104 | }
105 | ```
106 |
107 | Wallets SHOULD expose `switchAccount` function to allow an app to switch an account to another one managed by the wallet. The `switchAccount` function should return a promise which will be fulfilled when the wallet will effectively switch an account.
108 | The function must thrown an `Error` exception when the wallet can't execute the switch (for example, the provided address is not managed by the wallet or when the address is not a valid Algorand address).
109 |
110 | Similarly, wallets SHOULD expose `switchNetwork` function to instrument a wallet to switch to another network.
111 | The function must thrown an `Error` exception when the wallet can't execute the switch (for example, when the provided genesis ID is not recognized by the wallet).
112 |
113 | Very often, webapp have their own state with information about the user (provided by the account address) and a network. For example, a webapp can list all compatible Smart Contracts for a given network.
114 | For descent integration with a wallet, we must be able to react in a webapp on the account and network switch from the wallet interface. For that we define 2 functions which MUST be exposed by wallets: `onAccountSwitch` and `onNetworkSwitch`. These function will register a hook and will call it whenever a user switches respectively an account or network from the wallet interface.
115 |
116 | ### Semantic requirements
117 |
118 | This ARC uses interchangeably the terms "throw an error" and "reject a promise with an error".
119 |
120 | #### First call to `enable`
121 |
122 | Regarding a first call by a caller to `enable(opts)` or `enable()` (where `opts` is `undefined`), with potential promised return value `ret`:
123 |
124 | When `genesisID` and/or `genesisHash` is specified in `opts`:
125 |
126 | - The call `enable(opts)` **MUST** either throw an error or return an object `ret` where `ret.genesisID` and `ret.genesisHash` match `opts.genesisID` and `opts.genesisHash` (i.e., `ret.genesisID` is identical to `opts.genesisID` if `opts.genesisID` is specified, and `ret.genesisHash` is identical to `opts.genesisHash` if `opts.genesisHash` is specified).
127 | - The user **SHOULD** be prompted for permission to acknowledge control of accounts on that specific network (defined by `ret.genesisID` and `ret.genesisHash`).
128 | - In the case only `opts.genesisID` is provided, several networks may match this ID and the user **SHOULD** be prompted to select the network they wish to use.
129 |
130 | When neither `genesisID` nor `genesisHash` is specified in `opts`:
131 |
132 | - The user **SHOULD** be prompted to select the network they wish to use.
133 | - The call `enable(opts)` **MUST** either throw an error or return an object `ret` where `ret.genesisID` and `ret.genesisHash` **SHOULD** represent the user's selection of network.
134 | - The function **MAY** throw an error if it does not support user selection of network.
135 |
136 | When `accounts` is specified in `opts`:
137 |
138 | - The call `enable(opts)` **MUST** either throw an error or return an object `ret` where `ret.accounts` is an array that starts with all the same elements as `opts.accounts`, in the same order.
139 | - The user **SHOULD** be prompted for permission to acknowledge their control of the specified accounts. The wallet **MAY** allow the user to provide more accounts than those listed. The wallet **MAY** allow the user to select fewer accounts than those listed, in which the wallet **MUST** return an error which **SHOULD** be a user rejected error and contain the rejected accounts in `data.accounts`.
140 |
141 | When `accounts` is not specified in `opts`:
142 |
143 | - The user **SHOULD** be prompted to select the accounts they wish to reveal on the selected network.
144 | - The call `enable(opts)` **MUST** either throw an error or return an object `ret` where `ret.accounts` is a empty or non-empty array.
145 | - If `ret.accounts` is not empty, the caller **MAY** assume that `ret.accounts[0]` is the user's "currently-selected" or "default" account, for DApps that only require access to one account.
146 |
147 | > Empty `ret.accounts` array are used to allow a DApp to get access to an Algorand node but not to signing capabilities.
148 |
149 | #### Network
150 |
151 | In addition to the above rules, in all cases, if `ret.genesisID` is one of the official network `mainnet-v1.0`, `testnet-v1.0`, or `betanet-v1.0`, `ret.genesisHash` **MUST** match the genesis hash of those networks
152 |
153 | | Genesis ID | Genesis Hash |
154 | | -------------- | ---------------------------------------------- |
155 | | `mainnet-v1.0` | `wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=` |
156 | | `testnet-v1.0` | `SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=` |
157 | | `betanet-v1.0` | `mFgazF+2uRS1tMiL9dsj01hJGySEmPN28B/TjjvpVW0=` |
158 |
159 | When using a genesis ID that is not one of the above, the caller **SHOULD** always provide a `genesisHash`.
160 | This is because a `genesisID` does not uniquely define a network in that case.
161 | If a caller does not provide a `genesisHash`, multiple calls to `enable` may return a different network with the same `genesisID` but a different `genesisHash`.
162 |
163 | #### Identification of the caller
164 |
165 | The `enable` function **MAY** remember the choices of the user made by a specific caller and use them everytime the same caller calls the function.
166 | The function **MUST** ensure that the caller can be securely identified.
167 | In particular, by default, the function **MUST NOT** allow webapps on the http protocol to call it, as such webapps can easily be modified by a man-in-the-middle attacker.
168 | In the case of callers that are https websites, the caller **SHOULD** be identified by its fully qualified domain name.
169 |
170 | The function **MAY** offer the user some "developer mode" or "advanced" options to allow calls from insecure dApps.
171 | In that case, the fact that the caller is insecure and/or the fact that the wallet in "developer mode" **MUST** be clearly displayed by the wallet.
172 |
173 | #### Multiple calls to `enable`
174 |
175 | The same caller **MAY** call multiple time the `enable` function.
176 | When the caller is a dApp, every time a dApp is refreshed, it actually **SHOULD** call the `enable()` function.
177 |
178 | The `enable` function **MAY NOT** return the same value every time it is called, even when called with the exact same argument `opts`.
179 | The caller **MUST NOT** assume that the `enable` function will always return the same value, and **MUST** properly handle changes of available accounts and/or changes of network.
180 |
181 | For example, a user may want to change network or accounts for a dApp.
182 | That is why, upon refresh, the dApp **SHOULD** automatically switch network and perform all required changes.
183 | Examples of required changes include but are not limited to change of the list of accounts, change of statuses of the account (e.g., opted in or not), change of the balances of the accounts.
184 |
185 | ### `enableNetwork` and `enableAccounts`
186 |
187 | It may be desirable for a dapp to perform network queries prior to requesting that the user enable an account for use with the dapp. Wallets may provide the functionality of `enable` in two parts: `enableNetwork` for network discovery, and `enableAccounts` for account discovery, which together are the equivalent of calling `enable`.
188 |
189 | ## Rationale
190 |
191 | This API puts power in the user's hands to choose a preferred network and account to use when interacting with a dApp.
192 |
193 | It also allows dApp developers to suggest a specific network, or specific accounts, as appropriate.
194 | The user still maintains the ability to reject the dApp's suggestions, which corresponds to rejecting the promise returned by `enable()`.
195 |
196 | ## Security Considerations
197 |
198 | None.
199 |
200 | ## Copyright
201 |
202 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
203 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:cli:tutorials:intro.md:
--------------------------------------------------------------------------------
```markdown
1 | # AlgoKit Quick Start Tutorial
2 |
3 | AlgoKit is the primary tool used by the Algorand community to develop smart contracts on the Algorand blockchain. It provides the capabilities to develop, test and deploy Algorand smart contracts within minutes! This guide is intended to help you setup AlgoKit and to start developing your application.
4 |
5 | ## Quick start videos 📹
6 |
7 | If you prefer videos, take a look at this 10 minute guide to getting started.
8 |
9 | [](https://www.youtube.com/embed/dow6U8DxOGc)
10 |
11 | Detailed video guides for both [Windows](https://www.youtube.com/embed/22RvINnZsRo) and [Mac](https://www.youtube.com/embed/zsurtpCGmgE) are also available.
12 |
13 | > Please note, the videos above are to be refreshed to cover v2.0 features. For now, its best to follow the instructions below to get started.
14 |
15 | ## Prequisites ✅
16 |
17 | This guide presents installing AlgoKit using an OS agnostic procedure. For OS specific instructions take a look that the [AlgoKit install](https://github.com/algorandfoundation/algokit-cli/blob/main/README.md#install) guide.
18 |
19 | Before proceeding, ensure you have the following components installed:
20 |
21 | - [Python 3.10](https://www.python.org/downloads/) or higher
22 | - [pipx](https://pypa.github.io/pipx/#on-linux-install-via-pip-requires-pip-190-or-later)
23 | - [git](https://github.com/git-guides/install-git#install-git)
24 | - [Docker](https://docs.docker.com/desktop/install/mac-install/) (or [Podman](https://podman.io/getting-started/installation/), see [details](../features/localnet.md#podman-support))
25 | - [VSCode](https://code.visualstudio.com/download)
26 |
27 | ## Install AlgoKit 🛠
28 |
29 | To install AlgoKit, run the following command from a terminal.
30 |
31 | ```shell
32 | pipx install algokit
33 | ```
34 |
35 | After the installation completes, **restart the terminal**.
36 |
37 | For more detailed installation documentation, see the [official installation guide](https://github.com/algorandfoundation/algokit-cli#install).
38 |
39 | > Please note, `pipx` is only one of the supported installation methods. You can also install AlgoKit via `brew` and _soon_ `winget` and `snap` as pre-build binaries. Refer to the official installation guide.
40 |
41 | ## Verify the Installation ✔
42 |
43 | To verify AlgoKit Installed correctly run the following.
44 |
45 | ```shell
46 | algokit --version
47 | ```
48 |
49 | Output similar to the following should be displayed:
50 |
51 | ```shell
52 | algokit, version 2.0.3 # or higher
53 | ```
54 |
55 | ## Start a LocalNet 🌐
56 |
57 | AlgoKit supports using a [local version of the Algorand blockchain](../features/localnet.md). To start an instance of this LocalNet run the following command from the terminal:
58 |
59 | ```shell
60 | algokit localnet start
61 | ```
62 |
63 | This should start an instance of the LocalNet within docker. If you open the Docker Desktop application you should see something similar to the following:
64 |
65 | 
66 |
67 | ## Create an AlgoKit project 🆕
68 |
69 | Now that AlgoKit is installed, you can rapidly create a new project to get started quickly. This can be done by running:
70 |
71 | ```shell
72 | algokit init
73 | ```
74 |
75 | This will launch a guided menu system to create a specific project tailored to your needs. The templates are basic starter applications for various Algorand development scenarios. To read more about templates checkout AlgoKit detailed documentation.
76 |
77 | For now we'll use the `python` template, which is a lightweight starting point for learning Algorand smart contract development using Algorand Python. You can initialize a project using this template by running:
78 |
79 | ```shell
80 | algokit init -t python -a preset_name "starter"
81 | ```
82 |
83 | Next, you will be prompted for the name of your project. Finally, select the default value for the rest of the prompts (enter).
84 |
85 | Once finished, (if you have it installed) VS Code should automatically be opened with the initialised project and you will be prompted to install appropriate VS Code extensions. This starter app will contain one smart contract (built using the [Algorand Python](https://algorandfoundation.github.io/puya/) language) named `contract.py`, in the `smart_contracts/hello_world` folder, with one method (`hello`) that takes a `String` and returns a `String`. Notice that within the contract folder, there is a `deploy_config.py` which defines the parameters for deployment of your smart contract to the target chain (Algorand TestNet, Algorand MainNet, Algorand LocalNet or else).
86 |
87 | 
88 |
89 | ## AlgoKit Project structure 🏗
90 |
91 | The structure of your fresh algokit project instance will look similar to below:
92 |
93 | ```bash
94 | .
95 | ├── .algokit.toml # Configuration for AlgoKit projects in the workspace.
96 | ├── README.md # Quick start guide for the AlgoKit Workspace.
97 | ├── {your_workspace|project_name}.code-workspace
98 | └── projects
99 | └── {your_project_name} # Root directory for the smart contract project. To add more projects into your algokit workspace run 'algokit init' from the root of your workspace repository.
100 | ├── README.md # Quick start on Algorand Python smart contract template based project.
101 | ├── .algokit # Hidden folder for AlgoKit AVM debugger and custom generators.
102 | ├── .algokit.toml # Project-specific commands and custom generator references.
103 | ├── poetry.lock
104 | ├── poetry.toml # Dependency definitions for {your_project_name}.
105 | ├── pyproject.toml # Project definitions for {your_project_name}.
106 | └── smart_contracts
107 | ├── README.md # Guide for adding new smart contracts.
108 | ├── ...
109 | ├── hello_world # Contract logic for 'hello_world'.
110 | │ ├── contract.py # Contract logic.
111 | │ └── deploy_config.py # Deployment logic for 'hello_world'.
112 | └── helpers # Helper functions for contract build and deployment.
113 | ```
114 |
115 | Additionally, each official smart contract template includes an interactive codespace walkthrough powered by [CodeTour](https://marketplace.visualstudio.com/items?itemName=vsls-contrib.codetour).
116 |
117 | To start the interactive walkthrough, install the extension and click on the green play button in the left bottom corner of the `Explorer` pane as demonstrated on the screenshot below (See `Getting Started with Your AlgoKit Project`).
118 |
119 | 
120 |
121 | Upon execution, the walkthrough will guide you through the key components of your fresh AlgoKit project, which is an important prerequisite to learn before running and deploying your first smart contract. Certainly, not because its hard to learn, but because it will save you a lot of time and effort having the correct foundations.
122 |
123 | ## Run the Demo Application 🏃♂️
124 |
125 | Once the `Algorand Python` based project is created, you can get started by building and deploying your first smart contract. There are a few possible ways to do so as demonstrated on the following video.
126 |
127 | [](https://ipfs.algonode.xyz/ipfs/Qma6gNqxsSFc9Jbh8kBTZyVLv5gqFj1xnrsjoeT6MAAwCw/)
128 |
129 | The App ID of the deployed contract and its Algorand address is displayed, followed by the message returned from the smart contract call (`Hello, Python`).
130 |
131 | 1. Start LocalNet
132 | 2. Build the smart contract. Notice how a folder named `artifacts` is created with the [AVM (Algorand Virtual Machine)](https://developer.algorand.org/docs/get-details/dapps/avm/) related artifacts for deploying your smart contract.
133 | 3. Deploy and call the `HelloWorld` smart contract (from `contract.py` file).
134 |
135 | After execution, the `App ID` of the deployed contract and its Algorand address are displayed, followed by the message returned from the smart contract call (`Hello, world`).
136 |
137 | At this point you have deployed a simple contract to a LocalNet Algorand network (running in your Docker environment) and called it successfully!
138 |
139 | Additionally, you can find the native AVM related artifacts and the appropriate smart contract manifest JSON files have been output to the `artifacts` folder. Note that in this example, AVM bytecode is compiled using the `PuyaPy` compiler, which is what `Algorand Python` relies on to compile your Python smart contract code to TEAL ([Transaction Execution Approval Language](https://developer.algorand.org/docs/get-details/dapps/avm/teal/)).
140 |
141 | ### Using AlgoKit CLI to build and deploy contracts 🛠️
142 |
143 | When using official AlgoKit templates via `algokit init`, you can manage your projects using the AlgoKit CLI at the convenience of your terminal.
144 |
145 | For example, to achieve the same results as in the demo earlier, build and deploy the `HelloWorld` contract from the `contract.py` file by running the following command from the terminal:
146 |
147 | ```shell
148 | algokit project run build
149 | ```
150 |
151 | This command will recompile your python contracts from `contract.py` and produce the necessary artefacts for deploying your contract.
152 |
153 | ```shell
154 | algokit project deploy localnet
155 | ```
156 |
157 | This will then deploy to your LocalNet instance and display the same output as in the earlier demo.
158 |
159 | > Please note, as highlighted in the [structure](#algokit-project-structure) section above, the `project run ...` commands are defined in the respective `.algokit.toml` file under `[project]` sections.
160 |
161 | ## Next steps 🚶♂️
162 |
163 | We have only covered a tiny fraction of the capabilities of the AlgoKit CLI and its related ecosystem of templates and utilities for an efficient developer experience.
164 |
165 | - To get the most out of `AlgoKit`, we recommend to get started with learning more about AlgoKit and what you can do with it by checking out our extensive [AlgoKit CLI documentation](../algokit.md).
166 | - Explore the `README.md` files at the root of any project created via `algokit init`. All official AlgoKit templates include detailed quick started guides, an interactive code tour and various presets which can be customized to your needs.
167 | - To learn more about `Algorand Python`, take a look at the [documentation](https://algorandfoundation.github.io/puya/).
168 | - To learn more about the commands demonstrated in this tutorial, refer to [`init`](../features/init.md) and [`project`](../features/project.md) to get a comprehensive understanding of their further capabilities.
169 | - If you'd like to learn more on structuring your `AlgoKit Project` as a monorepo, refer to `workspace` mode as described in [`init`](../features/init.md#workspaces-vs-standalone-projects). You can also pass the `--no-workspace` flag to setup a standalone algokit project, if preferred.
170 | - If you'd like to **create your own** `AlgoKit` template, refer to the [template tutorial](./algokit-template.md).
171 | - More information on Algorand smart contracts is also available in the [smart contract documentation](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/).
172 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:docs:lg-structure.md:
--------------------------------------------------------------------------------
```markdown
1 | # Program structure
2 |
3 | An Algorand Python smart contract is defined within a single class. You can extend other
4 | contracts (through inheritance), and also define standalone functions and reference them. This also
5 | works across different Python packages - in other words, you can have a Python library with common
6 | functions and re-use that library across multiple projects!
7 |
8 | ## Modules
9 |
10 | Algorand Python modules are files that end in `.py`, as with standard Python. Sub-modules are
11 | supported as well, so you're free to organise your Algorand Python code however you see fit.
12 | The standard python import rules apply, including
13 | [relative vs absolute import](https://docs.python.org/3/reference/import.html#package-relative-imports)
14 | requirements.
15 |
16 | A given module can contain zero, one, or many smart contracts and/or logic signatures.
17 |
18 | A module can contain [contracts](#contract-classes), [subroutines](#subroutines),
19 | [logic signatures](#logic-signatures), and [compile-time constant code and values](lg-modules.md).
20 |
21 | ## Typing
22 |
23 | Algorand Python code must be fully typed with
24 | [type annotations](https://docs.python.org/3/library/typing.html).
25 |
26 | In practice, this mostly means annotating the arguments and return types of all functions.
27 |
28 | ## Subroutines
29 |
30 | Subroutines are "internal" or "private" methods to a contract. They can exist as part of a contract
31 | class, or at the module level so they can be used by multiple classes or even across multiple
32 | projects.
33 |
34 | You can pass parameters to subroutines and define local variables, both of which automatically get
35 | managed for you with semantics that match Python semantics.
36 |
37 | All subroutines must be decorated with `algopy.subroutine`, like so:
38 |
39 | ```python
40 | def foo() -> None: # compiler error: not decorated with subroutine
41 | ...
42 |
43 | @algopy.subroutine
44 | def bar() -> None:
45 | ...
46 | ```
47 |
48 | ```{note}
49 | Requiring this decorator serves two key purposes:
50 |
51 | 1. You get an understandable error message if you try and use a third party package that wasn't
52 | built for Algorand Python
53 | 1. It provides for the ability to modify the functions on the fly when running in Python itself, in
54 | a future testing framework.
55 | ```
56 |
57 | Argument and return types to a subroutine can be any Algorand Python variable type (except for
58 | [some inner transaction types](lg-transactions.md#inner-transaction-objects-cannot-be-passed-to-or-returned-from-subroutines)
59 | ).
60 |
61 | Returning multiple values is allowed, this is annotated in the standard Python way with `tuple`:
62 |
63 | ```python
64 | @algopy.subroutine
65 | def return_two_things() -> tuple[algopy.UInt64, algopy.String]:
66 | ...
67 | ```
68 |
69 | Keyword only and positional only argument list modifiers are supported:
70 |
71 | ```python
72 | @algopy.subroutine
73 | def my_method(a: algopy.UInt64, /, b: algopy.UInt64, *, c: algopy.UInt64) -> None:
74 | ...
75 | ```
76 |
77 | In this example, `a` can only be passed positionally, `b` can be passed either by position or by
78 | name, and `c` can only be passed by name.
79 |
80 | The following argument/return types are not currently supported:
81 |
82 | - Type unions
83 | - Variadic args like `*args`, `**kwargs`
84 | - Python types such as `int`
85 | - Default values are not supported
86 |
87 | ## Contract classes
88 |
89 | An [Algorand smart contract](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/apps/)
90 | consists of two distinct "programs"; an approval program, and a
91 | clear-state program. These are tied together in Algorand Python as a single class.
92 |
93 | All contracts must inherit from the base class `algopy.Contract` - either directly or indirectly,
94 | which can include inheriting from `algopy.ARC4Contract`.
95 |
96 | The life-cycle of a smart contract matches the semantics of Python classes when you consider
97 | deploying a smart contract as "instantiating" the class. Any calls to that smart contract are made
98 | to that instance of the smart contract, and any state assigned to `self.` will persist across
99 | different invocations (provided the transaction it was a part of succeeds, of course). You can
100 | deploy the same contract class multiple times, each will become a distinct and isolated instance.
101 |
102 | Contract classes can optionally implement an `__init__` method, which will be executed exactly
103 | once, on first deployment. This method takes no arguments, but can contain arbitrary code,
104 | including reading directly from the transaction arguments via [`Txn`](#algopy.op.Txn). This makes
105 | it a good place to put common initialisation code, particularly in ARC-4 contracts with multiple
106 | methods that allow for creation.
107 |
108 | The contract class body should not contain any logic or variable initialisations, only method
109 | definitions. Forward type declarations are allowed.
110 |
111 | Example:
112 |
113 | ```python
114 | class MyContract(algopy.Contract):
115 | foo: algopy.UInt64 # okay
116 | bar = algopy.UInt64(1) # not allowed
117 |
118 | if True: # also not allowed
119 | bar = algopy.UInt64(2)
120 | ```
121 |
122 | Only concrete (ie non-abstract) classes produce output artifacts for deployment. To mark a class
123 | as explicitly abstract, inherit from [`abc.ABC`](https://docs.python.org/3/library/abc.html#abc.ABC).
124 |
125 | ```{note}
126 | The compiler will produce a warning if a Contract class is implicitly abstract, i.e. if any
127 | abstract methods are unimplemented.
128 | ```
129 |
130 | For more about inheritance and it's role in code reuse, see the section
131 | in [Code reuse](lg-code-reuse.md#inheritance)
132 |
133 | ### Contract class configuration
134 |
135 | When defining a contract subclass you can pass configuration options to the `algopy.Contract`
136 | base class [per the API documentation](./api-algopy.md#algopy.Contract).
137 |
138 | Namely you can pass in:
139 |
140 | - `name` - Which will affect the output TEAL file name if there are multiple non-abstract contracts
141 | in the same file and will also be used as the contract name in the ARC-32 application.json instead of the class name.
142 | - `scratch_slots` - Which allows you to mark a slot ID or range of slot IDs as "off limits" to Puya
143 | so you can manually use them.
144 | - `state_totals` - Which allows defining what values should be used for global and local uint and bytes storage values
145 | when creating a contract and will appear in ARC-32 app spec.
146 |
147 | Full example:
148 |
149 | ```python
150 | GLOBAL_UINTS = 3
151 |
152 | class MyContract(
153 | algopy.Contract,
154 | name="CustomName",
155 | scratch_slots=[5, 25, algopy.urange(110, 115)],
156 | state_totals=algopy.StateTotals(local_bytes=1, local_uints=2, global_bytes=4, global_uints=GLOBAL_UINTS),
157 | ):
158 | ...
159 | ```
160 |
161 | ### Example: Simplest possible `algopy.Contract` implementation
162 |
163 | For a non-ARC4 contract, the contract class must implement an `approval_program` and
164 | a `clear_state_program` method.
165 |
166 | As an example, this is a valid contract that always approves:
167 |
168 | ```python
169 | class Contract(algopy.Contract):
170 | def approval_program(self) -> bool:
171 | return True
172 |
173 | def clear_state_program(self) -> bool:
174 | return True
175 | ```
176 |
177 | The return value of these methods can be either a `bool` that indicates whether the transaction
178 | should approve or not, or a `algopy.UInt64` value, where `UInt64(0)` indicates that the transaction
179 | should be rejected and any other value indicates that it should be approved.
180 |
181 | ### Example: Simple call counter
182 |
183 | Here is a very simple example contract that maintains a counter of how many times it has
184 | been called (including on create).
185 |
186 | ```python
187 | class Counter(algopy.Contract):
188 | def __init__(self) -> None:
189 | self.counter = algopy.UInt64(0)
190 |
191 | def approval_program(self) -> bool:
192 | match algopy.Txn.on_completion:
193 | case algopy.OnCompleteAction.NoOp:
194 | self.increment_counter()
195 | return True
196 | case _:
197 | # reject all OnCompletionAction's other than NoOp
198 | return False
199 |
200 | def clear_state_program(self) -> bool:
201 | return True
202 |
203 | @algopy.subroutine
204 | def increment_counter(self) -> None:
205 | self.counter += 1
206 | ```
207 |
208 | Some things to note:
209 |
210 | - `self.counter` will be stored in the application's [Global State](lg-storage.md#global-state).
211 | - The return type of `__init__` must be `None`, per standard typed Python.
212 | - Any methods other than `__init__`, `approval_program` or `clear_state_program` must be decorated
213 | with `@subroutine`.
214 |
215 | ### Example: Simplest possible `algopy.ARC4Contract` implementation
216 |
217 | And here is a valid ARC4 contract:
218 |
219 | ```python
220 | class ABIContract(algopy.ARC4Contract):
221 | pass
222 | ```
223 |
224 | A default `@algopy.arc4.baremethod` that allows contract creation is automatically inserted if no
225 | other public method allows execution on create.
226 |
227 | The approval program is always automatically generated, and consists of a router which delegates
228 | based on the transaction application args to the correct public method.
229 |
230 | A default `clear_state_program` is implemented which always approves, but this can be overridden.
231 |
232 | ### Example: An ARC4 call counter
233 |
234 | ```python
235 | import algopy
236 |
237 | class ARC4Counter(algopy.ARC4Contract):
238 | def __init__(self) -> None:
239 | self.counter = algopy.UInt64(0)
240 |
241 | @algopy.arc4.abimethod(create="allow")
242 | def invoke(self) -> algopy.arc4.UInt64:
243 | self.increment_counter()
244 | return algopy.arc4.UInt64(self.counter)
245 |
246 | @algopy.subroutine
247 | def increment_counter(self) -> None:
248 | self.counter += 1
249 | ```
250 |
251 | This functions very similarly to the [simple example](#example-simple-call-counter).
252 |
253 | Things to note here:
254 |
255 | - Since the `invoke` method has `create="allow"`, it can be called both as the method to create the
256 | app and also to invoke it after creation. This also means that no default bare-method create will
257 | be generated, so the only way to create the contract is through this method.
258 | - The default options for `abimethod` is to only allow `NoOp` as an on-completion-action, so we
259 | don't need to check this manually.
260 | - The current call count is returned from the `invoke` method.
261 | - Every method in an `AR4Contract` except for the optional `__init__` and `clear_state_program`
262 | methods must be decorated with one of `algopy.arc4.abimethod`, `alogpy.arc4.baremethod`, or
263 | `algopy.subroutine`. `subroutines` won't be directly callable through the default router.
264 |
265 | See the [ARC-4 section](lg-arc4.md) of this language guide for more info on the above.
266 |
267 | ## Logic signatures
268 |
269 | [Logic signatures on Algorand](https://developer.algorand.org/docs/get-details/dapps/smart-contracts/smartsigs/)
270 | are stateless, and consist of a single program. As such, they are implemented as functions in Algorand Python
271 | rather than classes.
272 |
273 | ```python
274 | @algopy.logicsig
275 | def my_log_sig() -> bool:
276 | ...
277 | ```
278 |
279 | Similar to `approval_program` or `clear_state_program` methods, the function must take no
280 | arguments, and return either `bool` or `algopy.UInt64`. The meaning is the same: a `True`
281 | value or non-zero `UInt64` value indicates success, `False` or `UInt64(0)` indicates failure.
282 |
283 | Logic signatures can make use of subroutines that are not nested in contract classes.
284 |
```