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

# Directory Structure

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

# Files

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:dapps:avm:teal:opcodes:v1.md:
--------------------------------------------------------------------------------

```markdown
  1 | title: v1 Opcodes
  2 | 
  3 | Ops have a 'cost' of 1 unless otherwise specified.
  4 | 
  5 | 
  6 | ## err
  7 | 
  8 | - Bytecode: 0x00
  9 | - Stack: ... → _exits_
 10 | - Fail immediately.
 11 | 
 12 | ## sha256
 13 | 
 14 | - Bytecode: 0x01
 15 | - Stack: ..., A: []byte → ..., [32]byte
 16 | - SHA256 hash of value A, yields [32]byte
 17 | - **Cost**: 7
 18 | 
 19 | ## keccak256
 20 | 
 21 | - Bytecode: 0x02
 22 | - Stack: ..., A: []byte → ..., [32]byte
 23 | - Keccak256 hash of value A, yields [32]byte
 24 | - **Cost**: 26
 25 | 
 26 | ## sha512_256
 27 | 
 28 | - Bytecode: 0x03
 29 | - Stack: ..., A: []byte → ..., [32]byte
 30 | - SHA512_256 hash of value A, yields [32]byte
 31 | - **Cost**: 9
 32 | 
 33 | ## ed25519verify
 34 | 
 35 | - Bytecode: 0x04
 36 | - Stack: ..., A: []byte, B: [64]byte, C: [32]byte → ..., bool
 37 | - for (data A, signature B, pubkey C) verify the signature of ("ProgData" || program_hash || data) against the pubkey => {0 or 1}
 38 | - **Cost**: 1900
 39 | - Mode: Signature
 40 | 
 41 | The 32 byte public key is the last element on the stack, preceded by the 64 byte signature at the second-to-last element on the stack, preceded by the data which was signed at the third-to-last element on the stack.
 42 | 
 43 | ## +
 44 | 
 45 | - Bytecode: 0x08
 46 | - Stack: ..., A: uint64, B: uint64 → ..., uint64
 47 | - A plus B. Fail on overflow.
 48 | 
 49 | Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `addw`.
 50 | 
 51 | ## -
 52 | 
 53 | - Bytecode: 0x09
 54 | - Stack: ..., A: uint64, B: uint64 → ..., uint64
 55 | - A minus B. Fail if B > A.
 56 | 
 57 | ## /
 58 | 
 59 | - Bytecode: 0x0a
 60 | - Stack: ..., A: uint64, B: uint64 → ..., uint64
 61 | - A divided by B (truncated division). Fail if B == 0.
 62 | 
 63 | `divmodw` is available to divide the two-element values produced by `mulw` and `addw`.
 64 | 
 65 | ## *
 66 | 
 67 | - Bytecode: 0x0b
 68 | - Stack: ..., A: uint64, B: uint64 → ..., uint64
 69 | - A times B. Fail on overflow.
 70 | 
 71 | Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `mulw`.
 72 | 
 73 | ## <
 74 | 
 75 | - Bytecode: 0x0c
 76 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., bool
 77 | - A less than B => {0 or 1}
 78 | 
 79 | ## >
 80 | 
 81 | - Bytecode: 0x0d
 82 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., bool
 83 | - A greater than B => {0 or 1}
 84 | 
 85 | ## <=
 86 | 
 87 | - Bytecode: 0x0e
 88 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., bool
 89 | - A less than or equal to B => {0 or 1}
 90 | 
 91 | ## >=
 92 | 
 93 | - Bytecode: 0x0f
 94 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., bool
 95 | - A greater than or equal to B => {0 or 1}
 96 | 
 97 | ## &&
 98 | 
 99 | - Bytecode: 0x10
100 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., bool
101 | - A is not zero and B is not zero => {0 or 1}
102 | 
103 | ## ||
104 | 
105 | - Bytecode: 0x11
106 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., bool
107 | - A is not zero or B is not zero => {0 or 1}
108 | 
109 | ## ==
110 | 
111 | - Bytecode: 0x12
112 | - Stack: ..., A, B &rarr; ..., bool
113 | - A is equal to B => {0 or 1}
114 | 
115 | ## !=
116 | 
117 | - Bytecode: 0x13
118 | - Stack: ..., A, B &rarr; ..., bool
119 | - A is not equal to B => {0 or 1}
120 | 
121 | ## !
122 | 
123 | - Bytecode: 0x14
124 | - Stack: ..., A: uint64 &rarr; ..., uint64
125 | - A == 0 yields 1; else 0
126 | 
127 | ## len
128 | 
129 | - Bytecode: 0x15
130 | - Stack: ..., A: []byte &rarr; ..., uint64
131 | - yields length of byte value A
132 | 
133 | ## itob
134 | 
135 | - Bytecode: 0x16
136 | - Stack: ..., A: uint64 &rarr; ..., [8]byte
137 | - converts uint64 A to big-endian byte array, always of length 8
138 | 
139 | ## btoi
140 | 
141 | - Bytecode: 0x17
142 | - Stack: ..., A: []byte &rarr; ..., uint64
143 | - converts big-endian byte array A to uint64. Fails if len(A) > 8. Padded by leading 0s if len(A) < 8.
144 | 
145 | `btoi` fails if the input is longer than 8 bytes.
146 | 
147 | ## %
148 | 
149 | - Bytecode: 0x18
150 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., uint64
151 | - A modulo B. Fail if B == 0.
152 | 
153 | ## |
154 | 
155 | - Bytecode: 0x19
156 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., uint64
157 | - A bitwise-or B
158 | 
159 | ## &
160 | 
161 | - Bytecode: 0x1a
162 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., uint64
163 | - A bitwise-and B
164 | 
165 | ## ^
166 | 
167 | - Bytecode: 0x1b
168 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., uint64
169 | - A bitwise-xor B
170 | 
171 | ## ~
172 | 
173 | - Bytecode: 0x1c
174 | - Stack: ..., A: uint64 &rarr; ..., uint64
175 | - bitwise invert value A
176 | 
177 | ## mulw
178 | 
179 | - Bytecode: 0x1d
180 | - Stack: ..., A: uint64, B: uint64 &rarr; ..., X: uint64, Y: uint64
181 | - A times B as a 128-bit result in two uint64s. X is the high 64 bits, Y is the low
182 | 
183 | ## intcblock
184 | 
185 | - Syntax: `intcblock UINT ...` where UINT ...: a block of int constant values
186 | - Bytecode: 0x20 {varuint count, [varuint ...]}
187 | - Stack: ... &rarr; ...
188 | - prepare block of uint64 constants for use by intc
189 | 
190 | `intcblock` loads following program bytes into an array of integer constants in the evaluator. These integer constants can be referred to by `intc` and `intc_*` which will push the value onto the stack. Subsequent calls to `intcblock` reset and replace the integer constants available to the script.
191 | 
192 | ## intc
193 | 
194 | - Syntax: `intc I` where I: an index in the intcblock
195 | - Bytecode: 0x21 {uint8}
196 | - Stack: ... &rarr; ..., uint64
197 | - Ith constant from intcblock
198 | 
199 | ## intc_0
200 | 
201 | - Bytecode: 0x22
202 | - Stack: ... &rarr; ..., uint64
203 | - constant 0 from intcblock
204 | 
205 | ## intc_1
206 | 
207 | - Bytecode: 0x23
208 | - Stack: ... &rarr; ..., uint64
209 | - constant 1 from intcblock
210 | 
211 | ## intc_2
212 | 
213 | - Bytecode: 0x24
214 | - Stack: ... &rarr; ..., uint64
215 | - constant 2 from intcblock
216 | 
217 | ## intc_3
218 | 
219 | - Bytecode: 0x25
220 | - Stack: ... &rarr; ..., uint64
221 | - constant 3 from intcblock
222 | 
223 | ## bytecblock
224 | 
225 | - Syntax: `bytecblock BYTES ...` where BYTES ...: a block of byte constant values
226 | - Bytecode: 0x26 {varuint count, [varuint length, bytes ...]}
227 | - Stack: ... &rarr; ...
228 | - prepare block of byte-array constants for use by bytec
229 | 
230 | `bytecblock` loads the following program bytes into an array of byte-array constants in the evaluator. These constants can be referred to by `bytec` and `bytec_*` which will push the value onto the stack. Subsequent calls to `bytecblock` reset and replace the bytes constants available to the script.
231 | 
232 | ## bytec
233 | 
234 | - Syntax: `bytec I` where I: an index in the bytecblock
235 | - Bytecode: 0x27 {uint8}
236 | - Stack: ... &rarr; ..., []byte
237 | - Ith constant from bytecblock
238 | 
239 | ## bytec_0
240 | 
241 | - Bytecode: 0x28
242 | - Stack: ... &rarr; ..., []byte
243 | - constant 0 from bytecblock
244 | 
245 | ## bytec_1
246 | 
247 | - Bytecode: 0x29
248 | - Stack: ... &rarr; ..., []byte
249 | - constant 1 from bytecblock
250 | 
251 | ## bytec_2
252 | 
253 | - Bytecode: 0x2a
254 | - Stack: ... &rarr; ..., []byte
255 | - constant 2 from bytecblock
256 | 
257 | ## bytec_3
258 | 
259 | - Bytecode: 0x2b
260 | - Stack: ... &rarr; ..., []byte
261 | - constant 3 from bytecblock
262 | 
263 | ## arg
264 | 
265 | - Syntax: `arg N` where N: an arg index
266 | - Bytecode: 0x2c {uint8}
267 | - Stack: ... &rarr; ..., []byte
268 | - Nth LogicSig argument
269 | - Mode: Signature
270 | 
271 | ## arg_0
272 | 
273 | - Bytecode: 0x2d
274 | - Stack: ... &rarr; ..., []byte
275 | - LogicSig argument 0
276 | - Mode: Signature
277 | 
278 | ## arg_1
279 | 
280 | - Bytecode: 0x2e
281 | - Stack: ... &rarr; ..., []byte
282 | - LogicSig argument 1
283 | - Mode: Signature
284 | 
285 | ## arg_2
286 | 
287 | - Bytecode: 0x2f
288 | - Stack: ... &rarr; ..., []byte
289 | - LogicSig argument 2
290 | - Mode: Signature
291 | 
292 | ## arg_3
293 | 
294 | - Bytecode: 0x30
295 | - Stack: ... &rarr; ..., []byte
296 | - LogicSig argument 3
297 | - Mode: Signature
298 | 
299 | ## txn
300 | 
301 | - Syntax: `txn F` where F: [txn](#field-group-txn)
302 | - Bytecode: 0x31 {uint8}
303 | - Stack: ... &rarr; ..., any
304 | - field F of current transaction
305 | 
306 | ### txn
307 | 
308 | Fields (see [transaction reference](https://developer.algorand.org/docs/reference/transactions/))
309 | 
310 | | Index | Name | Type | Notes |
311 | | - | ------ | -- | --------- |
312 | | 0 | Sender | address | 32 byte address |
313 | | 1 | Fee | uint64 | microalgos |
314 | | 2 | FirstValid | uint64 | round number |
315 | | 4 | LastValid | uint64 | round number |
316 | | 5 | Note | []byte | Any data up to 1024 bytes |
317 | | 6 | Lease | [32]byte | 32 byte lease value |
318 | | 7 | Receiver | address | 32 byte address |
319 | | 8 | Amount | uint64 | microalgos |
320 | | 9 | CloseRemainderTo | address | 32 byte address |
321 | | 10 | VotePK | [32]byte | 32 byte address |
322 | | 11 | SelectionPK | [32]byte | 32 byte address |
323 | | 12 | VoteFirst | uint64 | The first round that the participation key is valid. |
324 | | 13 | VoteLast | uint64 | The last round that the participation key is valid. |
325 | | 14 | VoteKeyDilution | uint64 | Dilution for the 2-level participation key |
326 | | 15 | Type | []byte | Transaction type as bytes |
327 | | 16 | TypeEnum | uint64 | Transaction type as integer |
328 | | 17 | XferAsset | uint64 | Asset ID |
329 | | 18 | AssetAmount | uint64 | value in Asset's units |
330 | | 19 | AssetSender | address | 32 byte address. Source of assets if Sender is the Asset's Clawback address. |
331 | | 20 | AssetReceiver | address | 32 byte address |
332 | | 21 | AssetCloseTo | address | 32 byte address |
333 | | 22 | GroupIndex | uint64 | Position of this transaction within an atomic transaction group. A stand-alone transaction is implicitly element 0 in a group of 1 |
334 | | 23 | TxID | [32]byte | The computed ID for this transaction. 32 bytes. |
335 | 
336 | 
337 | ## global
338 | 
339 | - Syntax: `global F` where F: [global](#field-group-global)
340 | - Bytecode: 0x32 {uint8}
341 | - Stack: ... &rarr; ..., any
342 | - global field F
343 | 
344 | ### global
345 | 
346 | Fields
347 | 
348 | | Index | Name | Type | Notes |
349 | | - | ------ | -- | --------- |
350 | | 0 | MinTxnFee | uint64 | microalgos |
351 | | 1 | MinBalance | uint64 | microalgos |
352 | | 2 | MaxTxnLife | uint64 | rounds |
353 | | 3 | ZeroAddress | address | 32 byte address of all zero bytes |
354 | | 4 | GroupSize | uint64 | Number of transactions in this atomic transaction group. At least 1 |
355 | 
356 | 
357 | ## gtxn
358 | 
359 | - Syntax: `gtxn T F` where T: transaction group index, F: [txn](#field-group-txn)
360 | - Bytecode: 0x33 {uint8}, {uint8}
361 | - Stack: ... &rarr; ..., any
362 | - field F of the Tth transaction in the current group
363 | 
364 | for notes on transaction fields available, see `txn`. If this transaction is _i_ in the group, `gtxn i field` is equivalent to `txn field`.
365 | 
366 | ## load
367 | 
368 | - Syntax: `load I` where I: position in scratch space to load from
369 | - Bytecode: 0x34 {uint8}
370 | - Stack: ... &rarr; ..., any
371 | - Ith scratch space value. All scratch spaces are 0 at program start.
372 | 
373 | ## store
374 | 
375 | - Syntax: `store I` where I: position in scratch space to store to
376 | - Bytecode: 0x35 {uint8}
377 | - Stack: ..., A &rarr; ...
378 | - store A to the Ith scratch space
379 | 
380 | ## bnz
381 | 
382 | - Syntax: `bnz TARGET` where TARGET: branch offset
383 | - Bytecode: 0x40 {int16 (big-endian)}
384 | - Stack: ..., A: uint64 &rarr; ...
385 | - branch to TARGET if value A is not zero
386 | 
387 | The `bnz` instruction opcode 0x40 is followed by two immediate data bytes which are a high byte first and low byte second which together form a 16 bit offset which the instruction may branch to. For a bnz instruction at `pc`, if the last element of the stack is not zero then branch to instruction at `pc + 3 + N`, else proceed to next instruction at `pc + 3`. Branch targets must be aligned instructions. (e.g. Branching to the second byte of a 2 byte op will be rejected.) Starting at v4, the offset is treated as a signed 16 bit integer allowing for backward branches and looping. In prior version (v1 to v3), branch offsets are limited to forward branches only, 0-0x7fff.
388 | 
389 | At v2 it became allowed to branch to the end of the program exactly after the last instruction: bnz to byte N (with 0-indexing) was illegal for a TEAL program with N bytes before v2, and is legal after it. This change eliminates the need for a last instruction of no-op as a branch target at the end. (Branching beyond the end--in other words, to a byte larger than N--is still illegal and will cause the program to fail.)
390 | 
391 | ## pop
392 | 
393 | - Bytecode: 0x48
394 | - Stack: ..., A &rarr; ...
395 | - discard A
396 | 
397 | ## dup
398 | 
399 | - Bytecode: 0x49
400 | - Stack: ..., A &rarr; ..., A, A
401 | - duplicate A
402 | 
```

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

```markdown
  1 | ---
  2 | arc: 23
  3 | title: Sharing Application Information
  4 | description: Append application information to compiled TEAL applications
  5 | author: Stéphane Barroso (@sudoweezy), Fabrice Benhamouda (@fabrice102)
  6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/80
  7 | status: Final
  8 | type: Standards Track
  9 | category: Interface
 10 | sub-category: Application
 11 | created: 2023-01-11
 12 | ---
 13 | 
 14 | ## Abstract
 15 | 
 16 | The following document introduces a convention for appending information (stored in various files) to the compiled application's bytes.
 17 | The goal of this convention is to standardize the process of verifying and adding this information.
 18 | The encoded information byte string is `arc23` followed by the IPFS CID v1 of a folder containing the files with the information.
 19 | 
 20 | The minimum required file is `contract.json` representing the contract metadata (as described in [ARC-4](arc-0004.md)), and as extended by future potential ARCs).
 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 | ### Files containing Application Information
 29 | 
 30 | Application information are represented by various files in a folder that:
 31 | 
 32 | * **MUST** contain a file  `contract.json` representing the contract metadata (as described in [ARC-4](arc-0004.md)), and as extended by future potential ARCs).
 33 | * **MAY** contain a file with the basename `application` followed by the extension of the high-level language the application is written in (e.g., `application.py` for PyTeal).
 34 |   > To allow the verification of your contract, be sure to write the version used to compile the file after the import eg: `from pyteal import * #pyteal==0.20.1`
 35 | * **MAY** contain the files `approval.teal` and `clear.teal`, that are the compiled versions of approval and clear program in TEAL.
 36 |     * Note that `approval.teal` will not be able to contain the application information as this would create circularity. If `approval.teal` is provided, it is assumed that the *actual* `approval.teal` that is deployed corresponds to `approval.teal` with the proper `bytecblock` (defined below) appended at the end.
 37 | * **MAY** contain other files as defined by other ARCs.
 38 | 
 39 | ### CID, Pinning, and CAR of the Application Information
 40 | 
 41 | The <a href="https://github.com/multiformats/cid">CID</a> allows to access the corresponding application information files using <a href="https://docs.ipfs.tech/">IPFS</a>.
 42 | 
 43 | The CID **MUST**:
 44 | 
 45 | * Represent a folder of files, even if only `contract.json` is present.
 46 |     > You may need to use the option `--wrap-with-directory` of `ipfs add`
 47 | * Be a version V1 CID
 48 |     > E.g., use the option `--cid-version=1` of `ipfs add`
 49 | * Use SHA-256 hash algorithm
 50 |     > E.g., use the option `--hash=sha2-256` of `ipfs add`
 51 | 
 52 | Since the exact CID depends on the options provided when creating it and of the IPFS software version (if default options are used), for any production application, the folder of files **SHOULD** be published and pinned on IPFS.
 53 | 
 54 | > All examples in this ARC assume the use of Kubo IPFS version 0.17.0 with default options apart those explicitly stated.
 55 | 
 56 | If the IPFS is not pinned, any production application **SHOULD** provide a <a href="https://ipld.io/specs/transport/car/carv1">Content Address Archiver (CAR)</a>( file of the folder, obtained using `ipfs dag export`.
 57 | 
 58 | For public networks (e.g., MainNet, TestNet, BetaNet), block explorers and wallets (that support this ARC) **SHOULD** try to recover application information files from IPFS, and if not possible, **SHOULD** allow developers to upload a CAR file.
 59 | If a CAR file is used, these tools **MUST** validate the CAR file matches the CID.
 60 | 
 61 | For development purposes, on private networks, the application information files **MAY** be instead provided as a .zip or .tar.gz containing at the root all the required files.
 62 | Block explorers and wallets for *private* networks **MAY** allow uploading the application information as a .zip or .tar.gz.
 63 | They still **SHOULD** validate the files.
 64 | 
 65 | > The validation of .zip or .tar.gz files will work if the same version of the IPFS software is used with the same option. Since for development purposes, the same machine is normally used to code the dApp and run the block explorer/wallet, this is most likely not an issue.
 66 | > However, for production purposes, we cannot assume the same IPFS software is used and a CAR file is the best solution to ensure that the application information files will always be available and possible to validate.
 67 | 
 68 | > Example: For the example stored in `/asset/arc-0023/application_information`, the CID is `bafybeiavazvdva6uyxqudfsh57jbithx7r7juzvxhrylnhg22aeqau6wte`, which can be obtained with the command:
 69 | >
 70 | > ```
 71 | > ipfs add --cid-version=1 --hash=sha2-256 --recursive --quiet --wrap-with-directory --only-hash application_information
 72 | > ```
 73 | 
 74 | 
 75 | ### Associated Encoded Information Byte String
 76 | 
 77 | The (encoded) information byte string is `arc23` concatenated to the 36 bytes of the binary CID.
 78 | 
 79 | The information byte string is always 41-byte long and always start, in hexadecimal with `0x6172633233` (corresponding to `arc23`).
 80 | 
 81 | > Example: for the above CID `bafybeiavazvdva6uyxqudfsh57jbithx7r7juzvxhrylnhg22aeqau6wte`, the binary CID corresponds to the following hexadecimal value:
 82 | >
 83 | > ```
 84 | > 0x0170122015066a3a83d4c5e1419647efd2144cf7fc7e9a66b73c70b69cdad0090053d699
 85 | > ```
 86 | >
 87 | > and hence the encoded information byte string has the following hexadecimal value:
 88 | >
 89 | > ```
 90 | > 0x61726332330170122015066a3a83d4c5e1419647efd2144cf7fc7e9a66b73c70b69cdad0090053d699
 91 | > ```
 92 | 
 93 | ### Inclusion of the Encoded Information Byte String in Programs
 94 | 
 95 | The encoded information byte string is included in the *approval program* of the application via a <a href="https://developer.algorand.org/docs/get-details/dapps/avm/teal/opcodes/#bytecblock-bytes">`bytecblock`</a> with a unique byte string equal to the encoding information byte string.
 96 | 
 97 | > For the example above, the `bytecblock` is:
 98 | >
 99 | > ```
100 | > bytecblock 0x61726332330170122015066a3a83d4c5e1419647efd2144cf7fc7e9a66b73c70b69cdad0090053d699
101 | > ```
102 | >
103 | > and when compiled this gives the following byte string (at least with TEAL v8 and before):
104 | >
105 | > ```
106 | > 0x26012961726332330170122015066a3a83d4c5e1419647efd2144cf7fc7e9a66b73c70b69cdad0090053d699
107 | > ```
108 | 
109 | The size of the compiled application plus the bytecblock **MUST** be, at most, the maximum size of a compiled application according to the latest consensus parameters supported by the compiler.
110 | 
111 | > At least with TEAL v8 and before, appending the `bytecblock` to the end of the program should add exactly 44 bytes (1 byte for opcode `bytecblock`, 1 byte for 0x01 -the number of byte strings-, 1 byte for 0x29 the length of the encoded information byte string, 41 byte for the encodedin information byte string)
112 | 
113 | The `bytecblock` **MAY** be placed anywhere in the TEAL source code as long as it does not modify the semantic of the TEAL source code.
114 | However, if `approval.teal` is provided as an application information file, the `bytecblock` **SHOULD** be the last opcode of the deployed TEAL program.
115 | 
116 | Developers **MUST** check that, when adding the `bytecblock` to their program, semantic is not changed.
117 | 
118 | > At least with TEAL v8 and before, adding a `bytecblock` opcode at the end of the approval program does not change the semantics of the program, as long as opcodes are correctly aligned, there is no jump after the last position (that would make the program fail without `bytecblock`), and there is enough space left to add the opcode, at least with TEAL v8 and before.
119 | > However, though very unlikely, future versions of TEAL may not satisfy this property.
120 | 
121 | The `bytecblock` **MUST NOT** contain any additional byte string beyond the encoded information byte string.
122 | 
123 | > For example, the following `bytecblock` is **INVALID**:
124 | >
125 | > ```
126 | > bytecblock 0x61726332330170122015066a3a83d4c5e1419647efd2144cf7fc7e9a66b73c70b69cdad0090053d699 0x42
127 | > ```
128 | 
129 | ### Retrieval the Encoded Information Byte String and CID from Compiled TEAL Programs
130 | 
131 | For programs until TEAL v8, a way to find the encoded information byte string is to search for the prefix:
132 | 
133 | ```
134 | 0x2601296172633233
135 | ```
136 | 
137 | which is then followed by the 36 bytes of the binary CID.
138 | 
139 | Indeed, this prefix is composed of:
140 | 
141 | * 0x26, the `bytecblock` opcode
142 | * 0x01, the number of byte strings provided in the `bytecblock`
143 | * 0x29, the length of the encoded information byte string
144 | * 0x6172633233, the hexadecimal of `arc23`
145 | 
146 | Software retrieving the encoded information byte string **SHOULD** check the TEAL version and only perform retrieval for supported TEAL version.
147 | They also **SHOULD** gracefully handle false positives, that is when the above prefix is found multiple times.
148 | One solution is to allow multiple possible CID for a given compiled program.
149 | 
150 | Note that opcode encoding may change with the TEAL version (though this did not happen up to TEAL v8 at least).
151 | If the `bytecblock` opcode encoding changes, software that extract the encoded information byte string from compiled TEAL programs **MUST** be updated.
152 | 
153 | ## Rationale
154 | 
155 | By appending the IPFS CID of the folder containing information about the Application, any user with access to the blockchain could easily verify the Application and the ABI of the Application and interact with it.
156 | 
157 | Using IPFS has several advantages:
158 | 
159 | * Allows automatic retrievel of the application information when pinned.
160 | * Allows easy archival using CAR.
161 | * Allows support of multiple files.
162 | 
163 | ## Reference Implementation
164 | 
165 | The following codes are not audited and are only here for information purposes.
166 | 
167 | Here is an example of a python script that can generate the hash and append it to the compiled application, according this ARC:
168 | [main.py](../assets/arc-0023/main.py).
169 | 
170 | A Folder containing:
171 | - example of the application [application.py](../assets/arc-0023/application_information/application.py).
172 | - example of the contract metadata that follow [ARC-4](arc-0004.md) [contract.json](../assets/arc-0023/application_information/contract.json).
173 | 
174 | Files are accessible through followings IPFS command:
175 | ```console
176 | $ ipfs cat bafybeiavazvdva6uyxqudfsh57jbithx7r7juzvxhrylnhg22aeqau6wte/contract.json
177 | $ ipfs cat bafybeiavazvdva6uyxqudfsh57jbithx7r7juzvxhrylnhg22aeqau6wte/application.py
178 | ```
179 | > If they are not accessible be sure to removed [--only-hash | -n] from your command or check you ipfs node.
180 | 
181 | ## Security Considerations
182 | 
183 | CIDs are unique; however, related files **MUST** be checked to ensure that the application conforms.
184 | An `arc-23` CID added at the end of an application is here to share information, not proof of anything.
185 | In particular, nothing ensures that a provided `approval.teal` matches the actual program on chain.
186 | 
187 | ## Copyright
188 | 
189 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
190 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:get-started:basics:why_algorand.md:
--------------------------------------------------------------------------------

```markdown
  1 | title: Why Algorand?
  2 | 
  3 | So far, we’ve discussed blockchain technology and the benefits it brings to applications that transfer value. But we made some assumptions about the type of blockchain we’re dealing with when we formed these definitions. In reality, not all blockchains are created equal, and not all of them can provide the same degree of benefit.  
  4 | 
  5 | _As a developer, it’s important to do your research and choose a blockchain that you can rely on for all the properties that a blockchain promises._ 
  6 | 
  7 | In this section we will outline some of the main categories to evaluate against when choosing a blockchain and we’ll explain how Algorand fares in each of these categories. We are confident that by the end, you’ll determine that the Algorand blockchain is the best place to build your application!
  8 | 
  9 | # Quick start videos
 10 | 
 11 | If you prefer videos, take a look at this 4 minute video where Algorand's CTO John Woods Introduces Algorand's Latest Developer Video Series and the Pure Proof of Stake Consensus. 
 12 | 
 13 | <iframe width="100%" style="aspect-ratio:16/9" src="https://www.youtube-nocookie.com/embed/DWC2Ocz7NEw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
 14 | 
 15 | # Our founding principles
 16 | 
 17 | Algorand was founded by Silvio Micali, a Turing award winner, co-inventor of zero-knowledge proofs, and a world-renowned leader in the field of cryptography and information security. He founded Algorand with a vision to democratize finance and deliver on the blockchain promise. 
 18 | 
 19 | # The consensus protocol
 20 | 
 21 | The problem with many blockchains is they sacrifice at least one of the key properties of **security**, **scalability**, and **decentralization**, known as the blockchain trilemma. Silvio and his team solved the blockchain trilemma by inventing a new **Pure Proof of Stake (PPoS)** consensus protocol, which is the protocol that the Algorand blockchain uses.
 22 | 
 23 | Algorand’s consensus protocol works by selecting a block proposer and a set of voting committees at each block round, to propose a block and validate the proposal, respectively. The proposer and committees are randomly chosen from the pool of all token holders (the accounts that hold algos), and the likelihood of being chosen is proportional to the account’s stake in the network (i.e. how many algos it has relative to the whole). There are a bunch of really cool cryptographic algorithms that go into this process, with fancy names like “verifiable random functions” and “cryptographic sortition” to ensure that the vote is fair, no one can collude, and that the overall system is highly secure. We won’t get into the details in this guide, but we highly recommend checking out some of these resources:
 24 | 
 25 | * [Silvio explains how Algorand consensus works at a meetup](https://www.youtube.com/watch?v=NykZ-ZSKkxM){: target="_blank" } in Milan (video, simple, longer but worth it).
 26 | * Silvio describes [Algorand’s core technology in a nutshell](https://medium.com/algorand/algorands-core-technology-in-a-nutshell-e2b824e03c77){: target="_blank"} (blog post, simple, worth it).
 27 | * A [simple, introductory video](https://www.youtube.com/watch?v=gACVKaNqxPs){: target="_blank" } on Algorand’s consensus protocol (video, simple, short)
 28 | * [Docs on Algorand consensus](../../get-details/algorand_consensus.md){: target="_blank" } (technical, medium-length, somewhere in between the simple video above and the full whitepaper)
 29 | * [The official Algorand whitepaper](https://algorandcom.cdn.prismic.io/algorandcom%2Fece77f38-75b3-44de-bc7f-805f0e53a8d9_theoretical.pdf){: target="_blank" } (very technical, detailed)
 30 | 
 31 | # Proof-of-stake versus proof-of-work
 32 | 
 33 | Most blockchains these days fall into the general categories of **proof-of-stake** or **proof-of-work**. 
 34 | 
 35 | Simply put, a **proof-of-stake** blockchain gives users who have more stake (who hold more of the underlying currency in the system) more influence in proposing and validating new blocks, usually through some sort of voting mechanism.
 36 | 
 37 | <center>
 38 | ![Proof-of-stake](../../imgs/basics-pos.png){: width='500px' }
 39 | <figcaption style="font-size:12px">Concept drawing of the voting procedure in proof-of-stake protocols.</figcaption>
 40 | </center>
 41 | 
 42 | In **proof-of-work**, nodes race to solve a challenging cryptographic puzzle and serve up their solution alongside a new block proposal (this is referred to as “mining” and these nodes are called “miners”). The winner is rewarded with some of the underlying currency of the system and their block becomes part of the chain. 
 43 | 
 44 | <center>
 45 | ![Proof-of-work](../../imgs/basics-pow.png){: width='500px' }
 46 | <figcaption style="font-size:12px">Concept drawing of block miners in proof-of-work protocols.</figcaption>
 47 | </center>
 48 | 
 49 | Because proof-of-work requires solving a cryptographic puzzle before anyone else, compute power plays a significant part in the strategy to win. This has led to many debates around energy consumption and its effects on the climate. 
 50 | 
 51 | Most proof-of-stake protocols, including Algorand’s, do not require large amounts of energy to produce a block. 
 52 | 
 53 | # The native currency
 54 | 
 55 | Each blockchain has its own native currency that plays a critical role in incentivizing good network behavior. Algorand’s native currency is called the Algo. 
 56 | 
 57 | If you hold Algos, you can register to participate in consensus, which means that you will participate in the process of proposing and voting on new blocks. 
 58 | 
 59 | The Algo also acts as a utility token. When you’re building an application, you need algos to pay transaction fees and to serve as minimum balance deposits if you want to store data on the blockchain. The cost of these fees and minimum balances is very low, fractions of a penny in most cases.
 60 | 
 61 | # Fees
 62 | Fees are calculated based on the size of the transaction and a user can choose to augment a fee to help prioritize acceptance into a block when network traffic is high and blocks are consistently full. There is no concept of gas fees on Algorand. 
 63 | 
 64 | The minimum fee for a transaction is only 1,000 microAlgos or 0.001 Algos. 
 65 | 
 66 | # Openness
 67 | Earlier, we compared a blockchain ledger that is distributed, to a traditional ledger that is owned by a single entity. Technically, a blockchain ledger could be owned and operated by just a few entities, but this wouldn’t be a very good blockchain since such a centralized set of nodes could easily manipulate the state of the blockchain.
 68 | 
 69 | Algorand is completely open and permissionless. Anyone, anywhere in the world, who owns Algos can participate in consensus.
 70 | 
 71 | # Decentralization
 72 | Similarly, if all the people who are running nodes are the same company or set of companies then we find ourselves in a similar situation where we aren’t much better off than just having a central database controlled by a select few. 
 73 | 
 74 | On Algorand, since the protocol is open and permissionless, nodes can and do exist all over the world.
 75 | 
 76 | > See the [Algorand Metrics Dashboard](https://metrics.algorand.org/){: target="_blank" } for a view on node decentralization.
 77 | 
 78 | # Transparency
 79 | 
 80 | How do you know that anything that we are telling you here is true? You can check for yourself. All of the code for the core protocol is open source. Anyone can review it and contribute to it.
 81 | 
 82 | > [The Algorand source code](https://github.com/algorand/go-algorand){: target="_blank" }
 83 | 
 84 | # Forking (or lack of)
 85 | Forking is when a blockchain diverges into two separate paths. Sometimes this forking is intentional, like when a significant part of the community wants to change the fundamentals of the protocol. Other times this forking is accidental and occurs when two miners find a block at almost the same time. Eventually, one of the paths will be abandoned, which means that all transactions that occurred since that fork on the abandoned path (the orphaned chain) will be invalid. This has important implications for transaction finality, which we’ll talk about in a bit. 
 86 | 
 87 | Since Algorand is pure proof-of-stake and uses a voting mechanism to validate blocks, forking is impossible. In a worst case scenario, if the committee is taking longer to reach agreement, the blockchain will slow down or temporarily stall. 
 88 | 
 89 | # Performance
 90 | The speed at which blocks are produced, the amount of transactions that can fit into a block, and when those transactions are considered final are important factors to consider when choosing a blockchain. For Algorand, performance is and will always be a key focus area for the core development team.
 91 | 
 92 | ## Throughput
 93 | You want to choose a blockchain that can scale and handle high throughput so that your users don’t experience long wait times when interacting with your application.
 94 | 
 95 | On Algorand, blocks are produced every 2.85 seconds and can hold up to 25,000 transactions, which results in a throughput of over 10,000 transactions per second (10,000 TPS). 
 96 | 
 97 | ## Finality
 98 | In proof-of-work blockchains, since forking is a possibility, transactions can’t be considered final until a certain amount of time passes and the likelihood of the transaction being on an orphaned chain is practically zero. This means that the actual throughput of this type of blockchain is caveated by a delay in finality. Downstream processes in an application must take this into account to avoid compounding issues if a transaction ends up being invalid.
 99 | 
100 | As we mentioned earlier, Algorand does not have forking so transactions are final as soon as they are confirmed in a block. A throughput of 10,000 TPS then actually means 10,000 _finalized_ transactions per second.
101 | 
102 | # Core features
103 | Algorand makes it easy to tokenize, transfer, and program conditions on any instrument of value. Create fungible and nonfungible tokens with a single transaction (no smart contract code required). Or program sophisticated decentralized applications (dApps) with Algorand smart contracts.
104 | 
105 | # Developer tools
106 | Developers can write smart contracts in Python and can use one of four SDKs (Python, JavaScript, Golang, Java) to connect to on-chain assets or applications.
107 | 
108 | 
109 | # The team & ecosystem
110 | The Algorand protocol is completely open source, so why can’t anyone just go create a copy and create another Algorand-like blockchain? Well they absolutely can, but then they’ll have to convince everyone why the new one is better. As we’ve seen, the technology is a critical component to a blockchain, but so is the ecosystem built around it. 
111 | 
112 | Algorand has some of the best researchers and developers in the world actively developing and improving Algorand’s core protocol. The Algorand Foundation invests heavily in strategy around governance and growth of the ecosystem to promote long-term value for all algo holders. This part is not easy to replicate.
113 | 
114 | # Governance
115 | The Algorand Foundation, a non-profit organization that launched the Algorand MainNet, governs the Algorand network and is committed to continuing to decentralize it and put more decision-making into the hands of the Algorand community at large.
116 | 
117 | > Visit the [Algorand Foundation website](https://algorand.foundation/governance){: target="_blank" } for more information.
118 | 
119 | 
120 | 
```

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

```markdown
  1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / Account
  2 | 
  3 | # Class: Account
  4 | 
  5 | [modelsv2](../modules/modelsv2.md).Account
  6 | 
  7 | Account information at a given round.
  8 | Definition:
  9 | data/basics/userBalance.go : AccountData
 10 | 
 11 | ## Hierarchy
 12 | 
 13 | - `default`
 14 | 
 15 |   ↳ **`Account`**
 16 | 
 17 | ## Table of contents
 18 | 
 19 | ### Constructors
 20 | 
 21 | - [constructor](modelsv2.Account.md#constructor)
 22 | 
 23 | ### Properties
 24 | 
 25 | - [address](modelsv2.Account.md#address)
 26 | - [amount](modelsv2.Account.md#amount)
 27 | - [amountWithoutPendingRewards](modelsv2.Account.md#amountwithoutpendingrewards)
 28 | - [appsLocalState](modelsv2.Account.md#appslocalstate)
 29 | - [appsTotalExtraPages](modelsv2.Account.md#appstotalextrapages)
 30 | - [appsTotalSchema](modelsv2.Account.md#appstotalschema)
 31 | - [assets](modelsv2.Account.md#assets)
 32 | - [attribute\_map](modelsv2.Account.md#attribute_map)
 33 | - [authAddr](modelsv2.Account.md#authaddr)
 34 | - [createdApps](modelsv2.Account.md#createdapps)
 35 | - [createdAssets](modelsv2.Account.md#createdassets)
 36 | - [incentiveEligible](modelsv2.Account.md#incentiveeligible)
 37 | - [lastHeartbeat](modelsv2.Account.md#lastheartbeat)
 38 | - [lastProposed](modelsv2.Account.md#lastproposed)
 39 | - [minBalance](modelsv2.Account.md#minbalance)
 40 | - [participation](modelsv2.Account.md#participation)
 41 | - [pendingRewards](modelsv2.Account.md#pendingrewards)
 42 | - [rewardBase](modelsv2.Account.md#rewardbase)
 43 | - [rewards](modelsv2.Account.md#rewards)
 44 | - [round](modelsv2.Account.md#round)
 45 | - [sigType](modelsv2.Account.md#sigtype)
 46 | - [status](modelsv2.Account.md#status)
 47 | - [totalAppsOptedIn](modelsv2.Account.md#totalappsoptedin)
 48 | - [totalAssetsOptedIn](modelsv2.Account.md#totalassetsoptedin)
 49 | - [totalBoxBytes](modelsv2.Account.md#totalboxbytes)
 50 | - [totalBoxes](modelsv2.Account.md#totalboxes)
 51 | - [totalCreatedApps](modelsv2.Account.md#totalcreatedapps)
 52 | - [totalCreatedAssets](modelsv2.Account.md#totalcreatedassets)
 53 | 
 54 | ### Methods
 55 | 
 56 | - [get\_obj\_for\_encoding](modelsv2.Account.md#get_obj_for_encoding)
 57 | - [from\_obj\_for\_encoding](modelsv2.Account.md#from_obj_for_encoding)
 58 | 
 59 | ## Constructors
 60 | 
 61 | ### constructor
 62 | 
 63 | • **new Account**(`«destructured»`)
 64 | 
 65 | Creates a new `Account` object.
 66 | 
 67 | #### Parameters
 68 | 
 69 | | Name | Type |
 70 | | :------ | :------ |
 71 | | `«destructured»` | `Object` |
 72 | | › `address` | `string` |
 73 | | › `amount` | `number` \| `bigint` |
 74 | | › `amountWithoutPendingRewards` | `number` \| `bigint` |
 75 | | › `appsLocalState?` | [`ApplicationLocalState`](modelsv2.ApplicationLocalState.md)[] |
 76 | | › `appsTotalExtraPages?` | `number` \| `bigint` |
 77 | | › `appsTotalSchema?` | [`ApplicationStateSchema`](modelsv2.ApplicationStateSchema.md) |
 78 | | › `assets?` | [`AssetHolding`](modelsv2.AssetHolding.md)[] |
 79 | | › `authAddr?` | `string` |
 80 | | › `createdApps?` | [`Application`](modelsv2.Application.md)[] |
 81 | | › `createdAssets?` | [`Asset`](modelsv2.Asset.md)[] |
 82 | | › `incentiveEligible?` | `boolean` |
 83 | | › `lastHeartbeat?` | `number` \| `bigint` |
 84 | | › `lastProposed?` | `number` \| `bigint` |
 85 | | › `minBalance` | `number` \| `bigint` |
 86 | | › `participation?` | [`AccountParticipation`](modelsv2.AccountParticipation.md) |
 87 | | › `pendingRewards` | `number` \| `bigint` |
 88 | | › `rewardBase?` | `number` \| `bigint` |
 89 | | › `rewards` | `number` \| `bigint` |
 90 | | › `round` | `number` \| `bigint` |
 91 | | › `sigType?` | `string` |
 92 | | › `status` | `string` |
 93 | | › `totalAppsOptedIn` | `number` \| `bigint` |
 94 | | › `totalAssetsOptedIn` | `number` \| `bigint` |
 95 | | › `totalBoxBytes?` | `number` \| `bigint` |
 96 | | › `totalBoxes?` | `number` \| `bigint` |
 97 | | › `totalCreatedApps` | `number` \| `bigint` |
 98 | | › `totalCreatedAssets` | `number` \| `bigint` |
 99 | 
100 | #### Overrides
101 | 
102 | BaseModel.constructor
103 | 
104 | #### Defined in
105 | 
106 | client/v2/algod/models/types.ts:234
107 | 
108 | ## Properties
109 | 
110 | ### address
111 | 
112 | • **address**: `string`
113 | 
114 | the account public key
115 | 
116 | #### Defined in
117 | 
118 | client/v2/algod/models/types.ts:20
119 | 
120 | ___
121 | 
122 | ### amount
123 | 
124 | • **amount**: `number` \| `bigint`
125 | 
126 | (algo) total number of MicroAlgos in the account
127 | 
128 | #### Defined in
129 | 
130 | client/v2/algod/models/types.ts:25
131 | 
132 | ___
133 | 
134 | ### amountWithoutPendingRewards
135 | 
136 | • **amountWithoutPendingRewards**: `number` \| `bigint`
137 | 
138 | specifies the amount of MicroAlgos in the account, without the pending rewards.
139 | 
140 | #### Defined in
141 | 
142 | client/v2/algod/models/types.ts:30
143 | 
144 | ___
145 | 
146 | ### appsLocalState
147 | 
148 | • `Optional` **appsLocalState**: [`ApplicationLocalState`](modelsv2.ApplicationLocalState.md)[]
149 | 
150 | (appl) applications local data stored in this account.
151 | Note the raw object uses `map[int] -> AppLocalState` for this type.
152 | 
153 | #### Defined in
154 | 
155 | client/v2/algod/models/types.ts:90
156 | 
157 | ___
158 | 
159 | ### appsTotalExtraPages
160 | 
161 | • `Optional` **appsTotalExtraPages**: `number` \| `bigint`
162 | 
163 | (teap) the sum of all extra application program pages for this account.
164 | 
165 | #### Defined in
166 | 
167 | client/v2/algod/models/types.ts:95
168 | 
169 | ___
170 | 
171 | ### appsTotalSchema
172 | 
173 | • `Optional` **appsTotalSchema**: [`ApplicationStateSchema`](modelsv2.ApplicationStateSchema.md)
174 | 
175 | (tsch) stores the sum of all of the local schemas and global schemas in this
176 | account.
177 | Note: the raw account uses `StateSchema` for this type.
178 | 
179 | #### Defined in
180 | 
181 | client/v2/algod/models/types.ts:102
182 | 
183 | ___
184 | 
185 | ### assets
186 | 
187 | • `Optional` **assets**: [`AssetHolding`](modelsv2.AssetHolding.md)[]
188 | 
189 | (asset) assets held by this account.
190 | Note the raw object uses `map[int] -> AssetHolding` for this type.
191 | 
192 | #### Defined in
193 | 
194 | client/v2/algod/models/types.ts:108
195 | 
196 | ___
197 | 
198 | ### attribute\_map
199 | 
200 | • **attribute\_map**: `Record`\<`string`, `string`\>
201 | 
202 | #### Inherited from
203 | 
204 | BaseModel.attribute\_map
205 | 
206 | #### Defined in
207 | 
208 | client/v2/basemodel.ts:56
209 | 
210 | ___
211 | 
212 | ### authAddr
213 | 
214 | • `Optional` **authAddr**: `string`
215 | 
216 | (spend) the address against which signing should be checked. If empty, the
217 | address of the current account is used. This field can be updated in any
218 | transaction by setting the RekeyTo field.
219 | 
220 | #### Defined in
221 | 
222 | client/v2/algod/models/types.ts:115
223 | 
224 | ___
225 | 
226 | ### createdApps
227 | 
228 | • `Optional` **createdApps**: [`Application`](modelsv2.Application.md)[]
229 | 
230 | (appp) parameters of applications created by this account including app global
231 | data.
232 | Note: the raw account uses `map[int] -> AppParams` for this type.
233 | 
234 | #### Defined in
235 | 
236 | client/v2/algod/models/types.ts:122
237 | 
238 | ___
239 | 
240 | ### createdAssets
241 | 
242 | • `Optional` **createdAssets**: [`Asset`](modelsv2.Asset.md)[]
243 | 
244 | (apar) parameters of assets created by this account.
245 | Note: the raw account uses `map[int] -> Asset` for this type.
246 | 
247 | #### Defined in
248 | 
249 | client/v2/algod/models/types.ts:128
250 | 
251 | ___
252 | 
253 | ### incentiveEligible
254 | 
255 | • `Optional` **incentiveEligible**: `boolean`
256 | 
257 | Whether or not the account can receive block incentives if its balance is in
258 | range at proposal time.
259 | 
260 | #### Defined in
261 | 
262 | client/v2/algod/models/types.ts:134
263 | 
264 | ___
265 | 
266 | ### lastHeartbeat
267 | 
268 | • `Optional` **lastHeartbeat**: `number` \| `bigint`
269 | 
270 | The round in which this account last went online, or explicitly renewed their
271 | online status.
272 | 
273 | #### Defined in
274 | 
275 | client/v2/algod/models/types.ts:140
276 | 
277 | ___
278 | 
279 | ### lastProposed
280 | 
281 | • `Optional` **lastProposed**: `number` \| `bigint`
282 | 
283 | The round in which this account last proposed the block.
284 | 
285 | #### Defined in
286 | 
287 | client/v2/algod/models/types.ts:145
288 | 
289 | ___
290 | 
291 | ### minBalance
292 | 
293 | • **minBalance**: `number` \| `bigint`
294 | 
295 | MicroAlgo balance required by the account.
296 | The requirement grows based on asset and application usage.
297 | 
298 | #### Defined in
299 | 
300 | client/v2/algod/models/types.ts:36
301 | 
302 | ___
303 | 
304 | ### participation
305 | 
306 | • `Optional` **participation**: [`AccountParticipation`](modelsv2.AccountParticipation.md)
307 | 
308 | AccountParticipation describes the parameters used by this account in consensus
309 | protocol.
310 | 
311 | #### Defined in
312 | 
313 | client/v2/algod/models/types.ts:151
314 | 
315 | ___
316 | 
317 | ### pendingRewards
318 | 
319 | • **pendingRewards**: `number` \| `bigint`
320 | 
321 | amount of MicroAlgos of pending rewards in this account.
322 | 
323 | #### Defined in
324 | 
325 | client/v2/algod/models/types.ts:41
326 | 
327 | ___
328 | 
329 | ### rewardBase
330 | 
331 | • `Optional` **rewardBase**: `number` \| `bigint`
332 | 
333 | (ebase) used as part of the rewards computation. Only applicable to accounts
334 | which are participating.
335 | 
336 | #### Defined in
337 | 
338 | client/v2/algod/models/types.ts:157
339 | 
340 | ___
341 | 
342 | ### rewards
343 | 
344 | • **rewards**: `number` \| `bigint`
345 | 
346 | (ern) total rewards of MicroAlgos the account has received, including pending
347 | rewards.
348 | 
349 | #### Defined in
350 | 
351 | client/v2/algod/models/types.ts:47
352 | 
353 | ___
354 | 
355 | ### round
356 | 
357 | • **round**: `number` \| `bigint`
358 | 
359 | The round for which this information is relevant.
360 | 
361 | #### Defined in
362 | 
363 | client/v2/algod/models/types.ts:52
364 | 
365 | ___
366 | 
367 | ### sigType
368 | 
369 | • `Optional` **sigType**: `string`
370 | 
371 | Indicates what type of signature is used by this account, must be one of:
372 | * sig
373 | * msig
374 | * lsig
375 | 
376 | #### Defined in
377 | 
378 | client/v2/algod/models/types.ts:165
379 | 
380 | ___
381 | 
382 | ### status
383 | 
384 | • **status**: `string`
385 | 
386 | (onl) delegation status of the account's MicroAlgos
387 | * Offline - indicates that the associated account is delegated.
388 | * Online - indicates that the associated account used as part of the delegation
389 | pool.
390 | * NotParticipating - indicates that the associated account is neither a
391 | delegator nor a delegate.
392 | 
393 | #### Defined in
394 | 
395 | client/v2/algod/models/types.ts:62
396 | 
397 | ___
398 | 
399 | ### totalAppsOptedIn
400 | 
401 | • **totalAppsOptedIn**: `number` \| `bigint`
402 | 
403 | The count of all applications that have been opted in, equivalent to the count
404 | of application local data (AppLocalState objects) stored in this account.
405 | 
406 | #### Defined in
407 | 
408 | client/v2/algod/models/types.ts:68
409 | 
410 | ___
411 | 
412 | ### totalAssetsOptedIn
413 | 
414 | • **totalAssetsOptedIn**: `number` \| `bigint`
415 | 
416 | The count of all assets that have been opted in, equivalent to the count of
417 | AssetHolding objects held by this account.
418 | 
419 | #### Defined in
420 | 
421 | client/v2/algod/models/types.ts:74
422 | 
423 | ___
424 | 
425 | ### totalBoxBytes
426 | 
427 | • `Optional` **totalBoxBytes**: `number` \| `bigint`
428 | 
429 | (tbxb) The total number of bytes used by this account's app's box keys and
430 | values.
431 | 
432 | #### Defined in
433 | 
434 | client/v2/algod/models/types.ts:171
435 | 
436 | ___
437 | 
438 | ### totalBoxes
439 | 
440 | • `Optional` **totalBoxes**: `number` \| `bigint`
441 | 
442 | (tbx) The number of existing boxes created by this account's app.
443 | 
444 | #### Defined in
445 | 
446 | client/v2/algod/models/types.ts:176
447 | 
448 | ___
449 | 
450 | ### totalCreatedApps
451 | 
452 | • **totalCreatedApps**: `number` \| `bigint`
453 | 
454 | The count of all apps (AppParams objects) created by this account.
455 | 
456 | #### Defined in
457 | 
458 | client/v2/algod/models/types.ts:79
459 | 
460 | ___
461 | 
462 | ### totalCreatedAssets
463 | 
464 | • **totalCreatedAssets**: `number` \| `bigint`
465 | 
466 | The count of all assets (AssetParams objects) created by this account.
467 | 
468 | #### Defined in
469 | 
470 | client/v2/algod/models/types.ts:84
471 | 
472 | ## Methods
473 | 
474 | ### get\_obj\_for\_encoding
475 | 
476 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
477 | 
478 | Get an object ready for encoding to either JSON or msgpack.
479 | 
480 | #### Parameters
481 | 
482 | | Name | Type | Default value | Description |
483 | | :------ | :------ | :------ | :------ |
484 | | `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. |
485 | 
486 | #### Returns
487 | 
488 | `Record`\<`string`, `any`\>
489 | 
490 | #### Inherited from
491 | 
492 | BaseModel.get\_obj\_for\_encoding
493 | 
494 | #### Defined in
495 | 
496 | client/v2/basemodel.ts:65
497 | 
498 | ___
499 | 
500 | ### from\_obj\_for\_encoding
501 | 
502 | ▸ `Static` **from_obj_for_encoding**(`data`): [`Account`](modelsv2.Account.md)
503 | 
504 | #### Parameters
505 | 
506 | | Name | Type |
507 | | :------ | :------ |
508 | | `data` | `Record`\<`string`, `any`\> |
509 | 
510 | #### Returns
511 | 
512 | [`Account`](modelsv2.Account.md)
513 | 
514 | #### Defined in
515 | 
516 | client/v2/algod/models/types.ts:352
517 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:python:testing:docs:coverage.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Coverage
  2 | 
  3 | See which `algorand-python` stubs are implemented by the `algorand-python-testing` library. See the [Concepts](testing-guide/concepts.md#types-of-algopy-stub-implementations) section for more details on the implementation categories. Refer to the [`algorand-python` stubs API](api.md) for the full list of the stubs for which the `algorand-python-testing` library provides implementations referenced in the table below.
  4 | 
  5 | | Name                                        | Implementation type |
  6 | | ------------------------------------------- | ------------------- |
  7 | | algopy.Account                              | Emulated            |
  8 | | algopy.Application                          | Emulated            |
  9 | | algopy.Asset                                | Emulated            |
 10 | | algopy.BigUInt                              | Native              |
 11 | | algopy.Box                                  | Emulated            |
 12 | | algopy.BoxMap                               | Emulated            |
 13 | | algopy.BoxRef                               | Emulated            |
 14 | | algopy.Bytes                                | Native              |
 15 | | algopy.BytesBacked                          | Native              |
 16 | | algopy.CompiledContract                     | Mockable            |
 17 | | algopy.CompiledLogicSig                     | Mockable            |
 18 | | algopy.Contract                             | Emulated            |
 19 | | algopy.Global                               | Emulated            |
 20 | | algopy.GlobalState                          | Emulated            |
 21 | | algopy.LocalState                           | Emulated            |
 22 | | algopy.LogicSig                             | Emulated            |
 23 | | algopy.OnCompleteAction                     | Native              |
 24 | | algopy.OpUpFeeSource                        | Native              |
 25 | | algopy.StateTotals                          | Emulated            |
 26 | | algopy.String                               | Native              |
 27 | | algopy.TemplateVar                          | Emulated            |
 28 | | algopy.TransactionType                      | Native              |
 29 | | algopy.Txn                                  | Emulated            |
 30 | | algopy.UInt64                               | Native              |
 31 | | algopy.compile_contract                     | Mockable            |
 32 | | algopy.compile_logicsig                     | Mockable            |
 33 | | algopy.ensure_budget                        | Emulated            |
 34 | | algopy.log                                  | Emulated            |
 35 | | algopy.logicsig                             | Emulated            |
 36 | | algopy.subroutine                           | Native              |
 37 | | algopy.uenumerate                           | Native              |
 38 | | algopy.urange                               | Native              |
 39 | | algopy.arc4.ARC4Client                      | Emulated            |
 40 | | algopy.arc4.ARC4Contract                    | Emulated            |
 41 | | algopy.arc4.Address                         | Native              |
 42 | | algopy.arc4.BigUFixedNxM                    | Native              |
 43 | | algopy.arc4.BigUIntN                        | Native              |
 44 | | algopy.arc4.Bool                            | Native              |
 45 | | algopy.arc4.Byte                            | Native              |
 46 | | algopy.arc4.DynamicArray                    | Native              |
 47 | | algopy.arc4.DynamicBytes                    | Native              |
 48 | | algopy.arc4.StaticArray                     | Native              |
 49 | | algopy.arc4.String                          | Native              |
 50 | | algopy.arc4.Struct                          | Native              |
 51 | | algopy.arc4.Tuple                           | Native              |
 52 | | algopy.arc4.UFixedNxM                       | Native              |
 53 | | algopy.arc4.UInt128                         | Native              |
 54 | | algopy.arc4.UInt16                          | Native              |
 55 | | algopy.arc4.UInt256                         | Native              |
 56 | | algopy.arc4.UInt32                          | Native              |
 57 | | algopy.arc4.UInt512                         | Native              |
 58 | | algopy.arc4.UInt64                          | Native              |
 59 | | algopy.arc4.UInt8                           | Native              |
 60 | | algopy.arc4.UIntN                           | Native              |
 61 | | algopy.arc4.abimethod                       | Emulated            |
 62 | | algopy.arc4.arc4_signature                  | Native              |
 63 | | algopy.arc4.baremethod                      | Emulated            |
 64 | | algopy.arc4.emit                            | Emulated            |
 65 | | algopy.arc4.abi_call                        | Mockable            |
 66 | | algopy.arc4.arc4_create                     | Mockable            |
 67 | | algopy.arc4.arc4_update                     | Mockable            |
 68 | | algopy.gtxn.ApplicationCallTransaction      | Emulated            |
 69 | | algopy.gtxn.AssetConfigTransaction          | Emulated            |
 70 | | algopy.gtxn.AssetFreezeTransaction          | Emulated            |
 71 | | algopy.gtxn.AssetTransferTransaction        | Emulated            |
 72 | | algopy.gtxn.KeyRegistrationTransaction      | Emulated            |
 73 | | algopy.gtxn.PaymentTransaction              | Emulated            |
 74 | | algopy.gtxn.Transaction                     | Emulated            |
 75 | | algopy.gtxn.TransactionBase                 | Emulated            |
 76 | | algopy.itxn.ApplicationCall                 | Emulated            |
 77 | | algopy.itxn.ApplicationCallInnerTransaction | Emulated            |
 78 | | algopy.itxn.AssetConfig                     | Emulated            |
 79 | | algopy.itxn.AssetConfigInnerTransaction     | Emulated            |
 80 | | algopy.itxn.AssetFreeze                     | Emulated            |
 81 | | algopy.itxn.AssetFreezeInnerTransaction     | Emulated            |
 82 | | algopy.itxn.AssetTransfer                   | Emulated            |
 83 | | algopy.itxn.AssetTransferInnerTransaction   | Emulated            |
 84 | | algopy.itxn.InnerTransaction                | Emulated            |
 85 | | algopy.itxn.InnerTransactionResult          | Emulated            |
 86 | | algopy.itxn.KeyRegistration                 | Emulated            |
 87 | | algopy.itxn.KeyRegistrationInnerTransaction | Emulated            |
 88 | | algopy.itxn.Payment                         | Emulated            |
 89 | | algopy.itxn.PaymentInnerTransaction         | Emulated            |
 90 | | algopy.itxn.submit_txns                     | Emulated            |
 91 | | algopy.op.Base64                            | Native              |
 92 | | algopy.op.EC                                | Native              |
 93 | | algopy.op.ECDSA                             | Native              |
 94 | | algopy.op.JsonRef                           | Native              |
 95 | | algopy.op.addw                              | Native              |
 96 | | algopy.op.arg                               | Emulated            |
 97 | | algopy.op.base64_decode                     | Native              |
 98 | | algopy.op.bitlen                            | Native              |
 99 | | algopy.op.bsqrt                             | Native              |
100 | | algopy.op.btoi                              | Native              |
101 | | algopy.op.bzero                             | Native              |
102 | | algopy.op.concat                            | Native              |
103 | | algopy.op.divmodw                           | Native              |
104 | | algopy.op.divw                              | Native              |
105 | | algopy.op.ecdsa_pk_decompress               | Native              |
106 | | algopy.op.ecdsa_pk_recover                  | Native              |
107 | | algopy.op.ecdsa_verify                      | Native              |
108 | | algopy.op.ed25519verify                     | Native              |
109 | | algopy.op.ed25519verify_bare                | Native              |
110 | | algopy.op.err                               | Native              |
111 | | algopy.op.exit                              | Native              |
112 | | algopy.op.exp                               | Native              |
113 | | algopy.op.expw                              | Native              |
114 | | algopy.op.extract                           | Native              |
115 | | algopy.op.extract_uint16                    | Native              |
116 | | algopy.op.extract_uint32                    | Native              |
117 | | algopy.op.extract_uint64                    | Native              |
118 | | algopy.op.getbit                            | Native              |
119 | | algopy.op.getbyte                           | Native              |
120 | | algopy.op.itob                              | Native              |
121 | | algopy.op.keccak256                         | Native              |
122 | | algopy.op.mulw                              | Native              |
123 | | algopy.op.replace                           | Native              |
124 | | algopy.op.select_bytes                      | Native              |
125 | | algopy.op.select_uint64                     | Native              |
126 | | algopy.op.setbit_bytes                      | Native              |
127 | | algopy.op.setbit_uint64                     | Native              |
128 | | algopy.op.setbyte                           | Native              |
129 | | algopy.op.sha256                            | Native              |
130 | | algopy.op.sha3_256                          | Native              |
131 | | algopy.op.sha512_256                        | Native              |
132 | | algopy.op.shl                               | Native              |
133 | | algopy.op.shr                               | Native              |
134 | | algopy.op.sqrt                              | Native              |
135 | | algopy.op.substring                         | Native              |
136 | | algopy.op.AppGlobal                         | Emulated            |
137 | | algopy.op.AppLocal                          | Emulated            |
138 | | algopy.op.AppParamsGet                      | Emulated            |
139 | | algopy.op.AssetHoldingGet                   | Emulated            |
140 | | algopy.op.AssetParamsGet                    | Emulated            |
141 | | algopy.op.Block                             | Emulated            |
142 | | algopy.op.Box                               | Emulated            |
143 | | algopy.op.GITxn                             | Emulated            |
144 | | algopy.op.GTxn                              | Emulated            |
145 | | algopy.op.Global                            | Emulated            |
146 | | algopy.op.ITxn                              | Emulated            |
147 | | algopy.op.ITxnCreate                        | Emulated            |
148 | | algopy.op.Scratch                           | Emulated            |
149 | | algopy.op.Txn                               | Emulated            |
150 | | algopy.op.app_opted_in                      | Emulated            |
151 | | algopy.op.balance                           | Emulated            |
152 | | algopy.op.gaid                              | Emulated            |
153 | | algopy.op.gload_bytes                       | Emulated            |
154 | | algopy.op.gload_uint64                      | Emulated            |
155 | | algopy.op.min_balance                       | Emulated            |
156 | | algopy.op.AcctParamsGet                     | Emulated            |
157 | | algopy.op.EllipticCurve                     | Mockable            |
158 | | algopy.op.VrfVerify                         | Mockable            |
159 | | algopy.op.vrf_verify                        | Mockable            |
160 | 
```

--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:capabilities:algorand-client.md:
--------------------------------------------------------------------------------

```markdown
  1 | # Algorand client
  2 | 
  3 | `AlgorandClient` is a client class that brokers easy access to Algorand functionality. It's the [default entrypoint](../README.md#usage) into AlgoKit Utils functionality.
  4 | 
  5 | The main entrypoint to the bulk of the functionality in AlgoKit Utils is the `AlgorandClient` class, most of the time you can get started by typing `AlgorandClient.` and choosing one of the static initialisation methods to create an [Algorand client](./capabilities/algorand-client.md), e.g.:
  6 | 
  7 | ```typescript
  8 | // Point to the network configured through environment variables or
  9 | //  if no environment variables it will point to the default LocalNet
 10 | //  configuration
 11 | const algorand = AlgorandClient.fromEnvironment()
 12 | // Point to default LocalNet configuration
 13 | const algorand = AlgorandClient.defaultLocalNet()
 14 | // Point to TestNet using AlgoNode free tier
 15 | const algorand = AlgorandClient.testNet()
 16 | // Point to MainNet using AlgoNode free tier
 17 | const algorand = AlgorandClient.mainNet()
 18 | // Point to a pre-created algod client
 19 | const algorand = AlgorandClient.fromClients({ algod })
 20 | // Point to pre-created algod, indexer and kmd clients
 21 | const algorand = AlgorandClient.fromClients({ algod, indexer, kmd })
 22 | // Point to custom configuration for algod
 23 | const algorand = AlgorandClient.fromConfig({ algodConfig })
 24 | // Point to custom configuration for algod, indexer and kmd
 25 | const algorand = AlgorandClient.fromConfig({ algodConfig, indexerConfig, kmdConfig })
 26 | ```
 27 | 
 28 | ## Accessing SDK clients
 29 | 
 30 | Once you have an `AlgorandClient` instance, you can access the SDK clients for the various Algorand APIs via the `algorand.client` property.
 31 | 
 32 | ```ts
 33 | const algorand = AlgorandClient.defaultLocalNet()
 34 | 
 35 | const algodClient = algorand.client.algod
 36 | const indexerClient = algorand.client.indexer
 37 | const kmdClient = algorand.client.kmd
 38 | ```
 39 | 
 40 | ## Accessing manager class instances
 41 | 
 42 | The `AlgorandClient` has a number of manager class instances that help you quickly use intellisense to get access to advanced functionality.
 43 | 
 44 | - [`AccountManager`](./account.md) via `algorand.account`, there are also some chainable convenience methods which wrap specific methods in `AccountManager`:
 45 |   - `algorand.setDefaultSigner(signer)` -
 46 |   - `algorand.setSignerFromAccount(account)` -
 47 |   - `algorand.setSigner(sender, signer)`
 48 | - [`AssetManager`](./asset.md) via `algorand.asset`
 49 | - [`ClientManager`](./client.md) via `algorand.client`
 50 | 
 51 | ## Creating and issuing transactions
 52 | 
 53 | `AlgorandClient` exposes a series of methods that allow you to create, execute, and compose groups of transactions (all via the [`TransactionComposer`](./transaction-composer.md)).
 54 | 
 55 | ### Creating transactions
 56 | 
 57 | You can compose a transaction via `algorand.createTransaction...`, which gives you an instance of the [`AlgorandClientTransactionCreator`](../code/classes/types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md) class. Intellisense will guide you on the different options.
 58 | 
 59 | The signature for the calls to send a single transaction usually look like:
 60 | 
 61 | ```
 62 | algorand.createTransaction.{method}(params: {ComposerTransactionTypeParams} & CommonTransactionParams): Promise<Transaction>
 63 | ```
 64 | 
 65 | - To get intellisense on the params, open an object parenthesis (`{`) and use your IDE's intellisense keyboard shortcut (e.g. ctrl+space).
 66 | - `{ComposerTransactionTypeParams}` will be the parameters that are specific to that transaction type e.g. `PaymentParams`, [see the full list](../code/modules/types_composer.md#type-aliases)
 67 | - [`CommonTransactionParams`](../code/modules/types_composer.md#commontransactionparams) are the [common transaction parameters](#transaction-parameters) that can be specified for every single transaction
 68 | - `Transaction` is an unsigned `algosdk.Transaction` object, ready to be signed and sent
 69 | 
 70 | The return type for the ABI method call methods are slightly different:
 71 | 
 72 | ```
 73 | algorand.createTransaction.app{callType}MethodCall(params: {ComposerTransactionTypeParams} & CommonTransactionParams): Promise<BuiltTransactions>
 74 | ```
 75 | 
 76 | Where `BuiltTransactions` looks like this:
 77 | 
 78 | ```typescript
 79 | export interface BuiltTransactions {
 80 |   /** The built transactions */
 81 |   transactions: algosdk.Transaction[]
 82 |   /** Any `ABIMethod` objects associated with any of the transactions in a map keyed by transaction index. */
 83 |   methodCalls: Map<number, algosdk.ABIMethod>
 84 |   /** Any `TransactionSigner` objects associated with any of the transactions in a map keyed by transaction index. */
 85 |   signers: Map<number, algosdk.TransactionSigner>
 86 | }
 87 | ```
 88 | 
 89 | This signifies the fact that an ABI method call can actually result in multiple transactions (which in turn may have different signers), that you need ABI metadata to be able to extract the return value from the transaction result.
 90 | 
 91 | ### Sending a single transaction
 92 | 
 93 | You can compose a single transaction via `algorand.send...`, which gives you an instance of the [`AlgorandClientTransactionSender`](../code/classes/types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md) class. Intellisense will guide you on the different options.
 94 | 
 95 | Further documentation is present in the related capabilities:
 96 | 
 97 | - [App management](./app.md)
 98 | - [Asset management](./asset.md)
 99 | - [Algo transfers](./transfer.md)
100 | 
101 | The signature for the calls to send a single transaction usually look like:
102 | 
103 | `algorand.send.{method}(params: {ComposerTransactionTypeParams} & CommonAppCallParams & SendParams): SingleSendTransactionResult`
104 | 
105 | - To get intellisense on the params, open an object parenthesis (`{`) and use your IDE's intellisense keyboard shortcut (e.g. ctrl+space).
106 | - `{ComposerTransactionTypeParams}` will be the parameters that are specific to that transaction type e.g. `PaymentParams`, [see the full list](../code/modules/types_composer.md#type-aliases)
107 | - [`CommonAppCallParams`](../code/modules/types_composer.md#commonappcallparams) are the [common app call transaction parameters](./app.md#common-app-parameters) that can be specified for every single app transaction
108 | - [`SendParams`](../code/interfaces/types_transaction.SendParams.md) are the [parameters](#transaction-parameters) that control execution semantics when sending transactions to the network
109 | - [`SendSingleTransactionResult`](../code/modules/types_algorand_client.md#sendsingletransactionresult) is all of the information that is relevant when [sending a single transaction to the network](./transaction.md#sending-a-transaction)
110 | 
111 | Generally, the functions to immediately send a single transaction will emit log messages before and/or after sending the transaction. You can opt-out of this by sending `suppressLog: true`.
112 | 
113 | ### Composing a group of transactions
114 | 
115 | You can compose a group of transactions for execution by using the `newGroup()` method on `AlgorandClient` and then use the various `.add{Type}()` methods on [`TransactionComposer`](./transaction-composer.md) to add a series of transactions.
116 | 
117 | ```typescript
118 | const result = algorand
119 |   .newGroup()
120 |   .addPayment({ sender: 'SENDERADDRESS', receiver: 'RECEIVERADDRESS', amount: (1).microAlgo() })
121 |   .addAssetOptIn({ sender: 'SENDERADDRESS', assetId: 12345n })
122 |   .send()
123 | ```
124 | 
125 | `newGroup()` returns a new [`TransactionComposer`](./transaction-composer.md) instance, which can also return the group of transactions, simulate them and other things.
126 | 
127 | ### Transaction parameters
128 | 
129 | To create a transaction you define a set of parameters as a plain TypeScript object.
130 | 
131 | There are two common base interfaces that get reused:
132 | 
133 | - [`CommonTransactionParams`](../code/modules/types_composer.md#commontransactionparams)
134 |   - `sender: string` - The address of the account sending the transaction.
135 |   - `signer?: algosdk.TransactionSigner | TransactionSignerAccount` - The function used to sign transaction(s); if not specified then an attempt will be made to find a registered signer for the given `sender` or use a default signer (if configured).
136 |   - `rekeyTo?: string` - Change the signing key of the sender to the given address. **Warning:** Please be careful with this parameter and be sure to read the [official rekey guidance](https://developer.algorand.org/docs/get-details/accounts/rekey/).
137 |   - `note?: Uint8Array | string` - Note to attach to the transaction. Max of 1000 bytes.
138 |   - `lease?: Uint8Array | string` - Prevent multiple transactions with the same lease being included within the validity window. A [lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) enforces a mutually exclusive transaction (useful to prevent double-posting and other scenarios).
139 |   - Fee management
140 |     - `staticFee?: AlgoAmount` - The static transaction fee. In most cases you want to use `extraFee` unless setting the fee to 0 to be covered by another transaction.
141 |     - `extraFee?: AlgoAmount` - The fee to pay IN ADDITION to the suggested fee. Useful for covering inner transaction fees.
142 |     - `maxFee?: AlgoAmount` - Throw an error if the fee for the transaction is more than this amount; prevents overspending on fees during high congestion periods.
143 |   - Round validity management
144 |     - `validityWindow?: number` - How many rounds the transaction should be valid for, if not specified then the registered default validity window will be used.
145 |     - `firstValidRound?: bigint` - Set the first round this transaction is valid. If left undefined, the value from algod will be used. We recommend you only set this when you intentionally want this to be some time in the future.
146 |     - `lastValidRound?: bigint` - The last round this transaction is valid. It is recommended to use `validityWindow` instead.
147 | - [`SendParams`](../code/interfaces/types_transaction.SendParams.md)
148 |   - `maxRoundsToWaitForConfirmation?: number` - The number of rounds to wait for confirmation. By default until the latest lastValid has past.
149 |   - `suppressLog?: boolean` - Whether to suppress log messages from transaction send, default: do not suppress.
150 | 
151 | Then on top of that the base type gets extended for the specific type of transaction you are issuing. These are all defined as part of [`TransactionComposer`](./transaction-composer.md).
152 | 
153 | ### Transaction configuration
154 | 
155 | AlgorandClient caches network provided transaction values for you automatically to reduce network traffic. It has a set of default configurations that control this behaviour, but you have the ability to override and change the configuration of this behaviour:
156 | 
157 | - `algorand.setDefaultValidityWindow(validityWindow)` - Set the default validity window (number of rounds from the current known round that the transaction will be valid to be accepted for), having a smallish value for this is usually ideal to avoid transactions that are valid for a long future period and may be submitted even after you think it failed to submit if waiting for a particular number of rounds for the transaction to be successfully submitted. The validity window defaults to 10, except in [automated testing](./testing.md) where it's set to 1000 when targeting LocalNet.
158 | - `algorand.setSuggestedParams(suggestedParams, until?)` - Set the suggested network parameters to use (optionally until the given time)
159 | - `algorand.setSuggestedParamsTimeout(timeout)` - Set the timeout that is used to cache the suggested network parameters (by default 3 seconds)
160 | - `algorand.getSuggestedParams()` - Get the current suggested network parameters object, either the cached value, or if the cache has expired a fresh value
161 | 
```

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

```markdown
  1 | ---
  2 | arc: 25
  3 | title: Algorand WalletConnect v1 API
  4 | description: API for communication between Dapps and wallets using WalletConnect
  5 | author: JasonPaulos (@jasonpaulos)
  6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/104
  7 | status: Final
  8 | type: Standards Track
  9 | category: Interface
 10 | sub-category: Wallet
 11 | created: 2022-05-12
 12 | ---
 13 | 
 14 | # Algorand WalletConnect v1 API
 15 | 
 16 | This document specifies a standard API for communication between Algorand decentralized applications and wallets using the WalletConnect v1 protocol.
 17 | 
 18 | ## Abstract
 19 | 
 20 | WalletConnect https://walletconnect.com/ is an open protocol to communicate securely between mobile wallets and decentralized applications (dApps) using QR code scanning (desktop) or deep linking (mobile). It’s main use case allows users to sign transactions on web apps using a mobile wallet.
 21 | 
 22 | This document aims to establish a standard API for using the WalletConnect v1 protocol on Algorand, leveraging the existing transaction signing APIs defined in [ARC-1](./arc-0001.md).
 23 | 
 24 | ## Specification
 25 | 
 26 | 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>.
 27 | 
 28 | > Comments like this are non-normative.
 29 | 
 30 | It is strongly recommended to read and understand the entirety of [ARC-1](./arc-0001.md) before reading this ARC.
 31 | 
 32 | ### Overview
 33 | 
 34 | This overview section is non-normative. It offers a brief overview of the WalletConnect v1 lifecycle. A more in-depth description can be found in the WalletConnect v1 documentation https://docs.walletconnect.com/tech-spec .
 35 | 
 36 | In order for a dApp and wallet to communicate using WalletConnect, a WalletConnect session must be established between them. The dApp is responsible for initiating this session and producing a session URI, which it will communicate to the wallet, typically in the form of a QR code or a deep link. This processed is described in the [Session Creation](#session-creation) section.
 37 | 
 38 | Once a session is established between a dApp and a wallet, the dApp is able to send requests to the wallet. The wallet is responsible for listening for requests, performing the appropriate actions to fulfill requests, and sending responses back to the dApp with the results of requests. This process is described in the [Message Schema](#message-schema) section.
 39 | 
 40 | ### Session Creation
 41 | 
 42 | The dApp is responsible for initializing a WalletConnect session and producing a WalletConnect URI that communicates the necessary session information to the wallet. This process is as described in the WalletConnect documentation https://docs.walletconnect.com/tech-spec#requesting-connection, with one addition. In order for wallets to be able to easily and immediately recognize an Algorand WalletConnect session, dApps **SHOULD** add an additional URI query parameter to the WalletConnect URI. If present, the name of this parameter **MUST** be `algorand` and its value **MUST** be `true`. This query parameter can appear in any order relative to the other query parameters in the URI.
 43 | 
 44 | > For example, here is a standard WalletConnect URI:
 45 | > ```
 46 | > wc:4015f93f-b88d-48fc-8bfe-8b063cc325b6@1?bridge=https%3A%2F%2F9.bridge.walletconnect.org&key=b0576e0880e17f8400bfff92d4caaf2158cccc0f493dcf455ba76d448c9b5655
 47 | > ```
 48 | > And here is that same URI with the Algorand-specific query parameter:
 49 | > ```
 50 | > wc:4015f93f-b88d-48fc-8bfe-8b063cc325b6@1?bridge=https%3A%2F%2F9.bridge.walletconnect.org&key=b0576e0880e17f8400bfff92d4caaf2158cccc0f493dcf455ba76d448c9b5655&algorand=true
 51 | > ```
 52 | 
 53 | It is **RECOMMENDED** that dApps include this query parameter, but it is not **REQUIRED**. Wallets **MAY** reject sessions if the session URI does not contain this query parameter.
 54 | 
 55 | #### Chain IDs
 56 | 
 57 | WalletConnect v1 sessions are associated with a numeric chain ID. Since Algorand chains do not have numeric identifiers (instead, the genesis hash or ID is used for this purpose), this document defines the following chain IDs for the Algorand ecosystem:
 58 | 
 59 | * MainNet (genesis hash `wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=`): 416001
 60 | * TestNet (genesis hash `SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=`): 416002
 61 | * BetaNet (genesis hash `mFgazF+2uRS1tMiL9dsj01hJGySEmPN28B/TjjvpVW0=`): 416003
 62 | 
 63 | At the time of writing, these chain IDs do not conflict with any known chain that also uses WalletConnect. In the unfortunate event that this were to happen, the `algorand` query parameter discussed above would be used to differentiate Algorand chains from others.
 64 | 
 65 | Future Algorand chains, if introduced, **MUST** be assigned new chain IDs.
 66 | 
 67 | Wallets and dApps **MAY** support all of the above chain IDs or only a subset of them. If a chain ID is presented to a wallet or dApp that does not support that chain ID, they **MUST** terminate the session.
 68 | 
 69 | For compatibility with WalletConnect usage prior to this ARC, the following catch-all chain ID is also defined:
 70 | 
 71 | * All Algorand Chains (legacy value): 4160
 72 | 
 73 | Wallets and dApps **SHOULD** support this chain ID as well for backwards compatibility. Unfortunately this ID alone is not enough to identify which Algorand chain is being used, so extra fields in message requests (i.e. the genesis hash field in a transaction to sign) **SHOULD** be consulted as well to determine this.
 74 | 
 75 | ### Message Schema
 76 | 
 77 | Note: interfaces are defined in TypeScript. These interfaces are designed to be serializable to and from valid JSON objects.
 78 | 
 79 | The WalletConnect message schema is a set of JSON-RPC 2.0 https://www.jsonrpc.org/specification requests and responses. Decentralized applications will send requests to the wallets and will receive responses as JSON-RPC messages. All requests **MUST** adhere to the following structure:
 80 | 
 81 | ```typescript
 82 | interface JsonRpcRequest {
 83 |   /**
 84 |    * An identifier established by the Client. Numbers SHOULD NOT contain fractional parts.
 85 |    */
 86 |   id: number;
 87 |   /**
 88 |    * A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0".
 89 |    */
 90 |   jsonrpc: "2.0";
 91 |   /**
 92 |    * A String containing the name of the RPC method to be invoked.
 93 |    */
 94 |   method: string;
 95 |   /**
 96 |    * A Structured value that holds the parameter values to be used during the invocation of the method.
 97 |    */
 98 |   params: any[];
 99 | }
100 | ```
101 | 
102 | The Algorand WalletConnect schema consists of a single RPC method, `algo_signTxn`, as described in the following section.
103 | 
104 | All responses, whether successful or unsuccessful, **MUST** adhere to the following structure:
105 | 
106 | ```typescript
107 | interface JsonRpcResponse {
108 |   /**
109 |    * This member is REQUIRED.
110 |    * It MUST be the same as the value of the id member in the Request Object.
111 |    * If there was an error in detecting the id in the Request object (e.g. Parse error/Invalid Request), it MUST be Null.
112 |    */
113 |   id: number;
114 |   /**
115 |    * A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0".
116 |    */
117 |   jsonrpc: "2.0";
118 |   /**
119 |    * This member is REQUIRED on success.
120 |    * This member MUST NOT exist if there was an error invoking the method.
121 |    * The value of this member is determined by the method invoked on the Server.
122 |    */
123 |   result?: any;
124 |   /**
125 |    * This member is REQUIRED on error.
126 |    * This member MUST NOT exist if the requested method was invoked successfully.
127 |    */
128 |   error?: JsonRpcError;
129 | }
130 | 
131 | interface JsonRpcError {
132 |   /**
133 |    * A Number that indicates the error type that occurred.
134 |    * This MUST be an integer.
135 |    */
136 |   code: number;
137 |   /**
138 |    * A String providing a short description of the error.
139 |    * The message SHOULD be limited to a concise single sentence.
140 |    */
141 |   message: string;
142 |   /**
143 |    * A Primitive or Structured value that contains additional information about the error.
144 |    * This may be omitted.
145 |    * The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.).
146 |    */
147 |   data?: any;
148 | }
149 | ```
150 | 
151 | #### `algo_signTxn`
152 | 
153 | This request is used to ask a wallet to sign one or more transactions in one or more atomic groups.
154 | 
155 | ##### Request
156 | 
157 | This request **MUST** adhere to the following structure:
158 | 
159 | ```typescript
160 | interface AlgoSignTxnRequest {
161 |   /**
162 |    * As described in JsonRpcRequest.
163 |    */
164 |   id: number;
165 |   /**
166 |    * As described in JsonRpcRequest.
167 |    */
168 |   jsonrpc: "2.0";
169 |   /**
170 |    * The method to invoke, MUST be "algo_signTxn".
171 |    */
172 |   method: "algo_signTxn";
173 |   /**
174 |    * Parameters for the transaction signing request.
175 |    */
176 |   params: SignTxnParams;
177 | }
178 | 
179 | /**
180 |  * The first element is an array of `WalletTransaction` objects which contain the transaction(s) to be signed.
181 |  * If transactions from an atomic transaction group are being signed, then all transactions in the group (even the ones not being signed by the wallet) MUST appear in this array.
182 |  *
183 |  * The second element, if present, contains addition options specified with the `SignTxnOpts` structure.
184 |  */
185 | type SignTxnParams = [WalletTransaction[], SignTxnOpts?];
186 | ```
187 | 
188 | > `SignTxnParams` is a tuple with an optional element https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-0.html#optional-elements-in-tuple-types, meaning its length can be 1 or 2.
189 | 
190 | The [`WalletTransaction`](./arc-0001.md#interface-wallettransaction) and [`SignTxnOpts`](./arc-0001.md#interface-signtxnsopts) types are defined in [ARC-1](./arc-0001.md).
191 | 
192 | All specifications, restrictions, and guidelines declared in ARC-1 for these types apply to their usage here as well. Additionally, all security requirements and restrictions for processing transaction signing requests from ARC-1 apply to this request as well.
193 | 
194 | > For more information, see [ARC-1 - Syntax and Interfaces](./arc-0001.md#syntax-and-interfaces) and [ARC-1 - Semantic and Security Requirements](./arc-0001.md#semantic-and-security-requirements).
195 | 
196 | ##### Response
197 | 
198 | To respond to a request, the wallet **MUST** send back the following response object:
199 | 
200 | ```typescript
201 | interface AlgoSignTxnResponse {
202 |   /**
203 |    * As described in JsonRpcResponse.
204 |    */
205 |   id: number;
206 |   /**
207 |    * As described in JsonRpcResponse.
208 |    */
209 |   jsonrpc: "2.0";
210 |   /**
211 |    * An array containing signed transactions at specific indexes.
212 |    */
213 |   result?: Array<SignedTxnStr | null>;
214 |   /**
215 |    * As described in JsonRpcResponse.
216 |    */
217 |   error?: JsonRpcError;
218 | }
219 | ```
220 | 
221 | [`SignedTxnStr`](./arc-0001.md#interface-signedtxnstr) type is defined in [ARC-1](./arc-0001.md).
222 | 
223 | 
224 | In this response, `result` **MUST** be an array with the same length as the number of `WalletTransaction`s in the request (i.e. `<AlgoSignTxnRequest instance>.params[0].length`). For every integer `i` such that `0 <= i < result.length`:
225 | 
226 | * If the transaction at index `i` in the group should be signed by the wallet (i.e. `<AlgoSignTxnRequest instance>.params[0][i].signers` is not an empty array): `result[i]` **MUST** be a base64-encoded string containing the msgpack-encoded signed transaction `params[0][i].txn`.
227 | * Otherwise: `result[i]` **MUST** be `null`, since the wallet was not requested to sign this transaction.
228 | 
229 | If the wallet does not approve signing every transaction whose signature is being requested, the request **MUST** fail.
230 | 
231 | All request failures **MUST** use the error codes defined in [ARC-1 - Error Standards](./arc-0001.md#error-standards).
232 | 
233 | ## Rationale
234 | 
235 | ## Security Considerations
236 | 
237 | None.
238 | 
239 | ## Copyright
240 | 
241 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
242 | 
```
Page 36/93FirstPrevNextLast