This is page 22 of 93. Use http://codebase.md/goplausible/algorand-mcp?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── llms-install.md
├── llms.txt
├── package.json
├── packages
│ ├── client
│ │ ├── .env.example
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── src
│ │ │ ├── env.ts
│ │ │ ├── index.ts
│ │ │ └── LocalWallet.ts
│ │ └── tsconfig.json
│ └── server
│ ├── .env.example
│ ├── API specs
│ │ ├── algod_api.json
│ │ ├── indexer_api.json
│ │ ├── mcp.json
│ │ ├── nfd_api.json
│ │ ├── ultrade_api.json
│ │ ├── vestige_api.json
│ │ └── vestige_free_api.json
│ ├── Dockerfile
│ ├── jest.config.js
│ ├── package.json
│ ├── README.md
│ ├── smithery.yaml
│ ├── src
│ │ ├── algorand-client.ts
│ │ ├── env.ts
│ │ ├── index.ts
│ │ ├── resources
│ │ │ ├── index.ts
│ │ │ ├── knowledge
│ │ │ │ ├── ARCs.txt
│ │ │ │ ├── developers-algokit-architecture-decisions.txt
│ │ │ │ ├── developers-algokit-cli.txt
│ │ │ │ ├── developers-algokit-utils-python.txt
│ │ │ │ ├── developers-algokit-utils-typescript.txt
│ │ │ │ ├── developers-clis.txt
│ │ │ │ ├── developers-details.txt
│ │ │ │ ├── developers-liquid-auth.txt
│ │ │ │ ├── developers-nodes.txt
│ │ │ │ ├── developers-puya.txt
│ │ │ │ ├── developers-python.txt
│ │ │ │ ├── developers-sdks-js.txt
│ │ │ │ ├── developers-sdks-python.txt
│ │ │ │ ├── developers-tealscript.txt
│ │ │ │ ├── developers.txt
│ │ │ │ ├── index.ts
│ │ │ │ ├── taxonomy
│ │ │ │ │ ├── algokit-cli:README.md
│ │ │ │ │ ├── algokit:cli:algokit.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-14_sandbox-approach.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-22_beaker-testing-strategy.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_beaker_productionisation_review.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_brew_install.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-12_smart-contract-deployment.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-06-06_frontend-templates.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-07-19_advanced_generate_command.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-13_native_binaries.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-23_init-wizard-v2.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-31_binary_distribution.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-03-06_local_dev_ui_packaging.md
│ │ │ │ │ ├── algokit:cli:articles:output_stability.md
│ │ │ │ │ ├── algokit:cli:cli:index.md
│ │ │ │ │ ├── algokit:cli:features:compile.md
│ │ │ │ │ ├── algokit:cli:features:completions.md
│ │ │ │ │ ├── algokit:cli:features:config.md
│ │ │ │ │ ├── algokit:cli:features:dispenser.md
│ │ │ │ │ ├── algokit:cli:features:doctor.md
│ │ │ │ │ ├── algokit:cli:features:explore.md
│ │ │ │ │ ├── algokit:cli:features:generate.md
│ │ │ │ │ ├── algokit:cli:features:goal.md
│ │ │ │ │ ├── algokit:cli:features:init.md
│ │ │ │ │ ├── algokit:cli:features:localnet.md
│ │ │ │ │ ├── algokit:cli:features:project:bootstrap.md
│ │ │ │ │ ├── algokit:cli:features:project:deploy.md
│ │ │ │ │ ├── algokit:cli:features:project:link.md
│ │ │ │ │ ├── algokit:cli:features:project:list.md
│ │ │ │ │ ├── algokit:cli:features:project:run.md
│ │ │ │ │ ├── algokit:cli:features:project.md
│ │ │ │ │ ├── algokit:cli:features:tasks:analyze.md
│ │ │ │ │ ├── algokit:cli:features:tasks:ipfs.md
│ │ │ │ │ ├── algokit:cli:features:tasks:mint.md
│ │ │ │ │ ├── algokit:cli:features:tasks:nfd.md
│ │ │ │ │ ├── algokit:cli:features:tasks:opt.md
│ │ │ │ │ ├── algokit:cli:features:tasks:send.md
│ │ │ │ │ ├── algokit:cli:features:tasks:sign.md
│ │ │ │ │ ├── algokit:cli:features:tasks:transfer.md
│ │ │ │ │ ├── algokit:cli:features:tasks:vanity_address.md
│ │ │ │ │ ├── algokit:cli:features:tasks:wallet.md
│ │ │ │ │ ├── algokit:cli:features:tasks.md
│ │ │ │ │ ├── algokit:cli:tutorials:algokit-template.md
│ │ │ │ │ ├── algokit:cli:tutorials:intro.md
│ │ │ │ │ ├── algokit:cli:tutorials:smart-contracts.md
│ │ │ │ │ ├── algokit:docs:testnet_api.md
│ │ │ │ │ ├── algokit:lora:README.md
│ │ │ │ │ ├── algokit:README.md
│ │ │ │ │ ├── algokit:utils:python:markdown:apidocs:algokit_utils:algokit_utils.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:debugger.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:python:markdown:index.md
│ │ │ │ │ ├── algokit:utils:python:README.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:debugger.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:python:source:index.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:algorand-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:amount.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:asset.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:debugging.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:event-emitter.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:testing.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction-composer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:typed-app-clients.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TestLogger.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TransactionLogger.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account_manager.AccountManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.MultisigAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.SigningAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client.AlgorandClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_amount.AlgoAmount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_arc56.Arc56Method.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.AppClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.ApplicationClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_deployer.AppDeployer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_factory.AppFactory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_manager.AppManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_asset_manager.AssetManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_async_event_emitter.AsyncEventEmitter.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_client_manager.ClientManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_composer.TransactionComposer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_config.UpdatableConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_dispenser_client.TestNetDispenserApiClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_kmd_account_manager.KmdAccountManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_logic_error.LogicError.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnSchemaBreak.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnUpdate.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.AccountStatus.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.ApplicationOnComplete.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.SignatureType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_lifecycle_events.EventType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account_manager.EnsureFundedResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.AccountConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.TransactionSignerAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_algorand_client_interface.AlgorandClientInterface.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Arc56Contract.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Event.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Method.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.ProgramSourceInfo.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageKey.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageMap.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StructField.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallABIArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallCoreParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCallInterfaceParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCoreParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppSourceMaps.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.FundAppAccountParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppById.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppByIdBase.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.SourceMapExport.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppLookup.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_factory.AppFactoryParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.AppInformation.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValueRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValuesRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSources.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.CallConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.DeclaredSchemaValueSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Hint.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.ReservedSchemaValueSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Schema.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.SchemaSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.StateSchemaSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Struct.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallTransactionResultOfType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCompilationResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeployMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppLookup.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppState.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppStorageSchema.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxName.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValueRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValuesRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CompiledTeal.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CoreAppCallArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CreateAppParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.RawAppCallArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.TealTemplateParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.UpdateAppParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.BulkAssetOptInOutResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetBulkOptInOutParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptInParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.CreateAssetParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.AlgoSdkClients.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppFactory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_composer.BuiltTransactions.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_config.Config.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.AVMTracesEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourceDebugEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourcesDebugEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserFundResponse.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserLimitResponse.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.TestNetDispenserApiClientParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_indexer.LookupAssetHoldingsOptions.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_logic_error.LogicErrorDetails.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoClientConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.NetworkDetails.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgoKitLogCaptureFixture.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixture.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixtureConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandTestAutomationContext.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.GetTestAccountParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.LogSnapshotConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.AtomicTransactionComposerToSend.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendAtomicTransactionComposerResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionGroupToSend.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionToSign.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoRekeyParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedReturnType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:testing.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algo_http_client_with_retry.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_interface.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_creator.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_sender.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transfer_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_arc56.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_deployer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory_and_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_composer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_config.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_debugging.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_expand.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_kmd_account_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_lifecycle_events.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logging.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logic_error.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_network_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_testing.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transaction.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transfer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:README.md
│ │ │ │ │ ├── algokit:utils:typescript:README.md
│ │ │ │ │ ├── algokit:utils:typescript:v7-migration.md
│ │ │ │ │ ├── algokit:utils:typescript:v8-migration.md
│ │ │ │ │ ├── ARCs:ARC-template.md
│ │ │ │ │ ├── ARCs:assets:arc-0012:README.md
│ │ │ │ │ ├── ARCs:assets:arc-0034:TemplateForm.md
│ │ │ │ │ ├── ARCs:assets:arc-0062:README.md
│ │ │ │ │ ├── ARCs:pages:nfts.md
│ │ │ │ │ ├── ARCs:pages:wallets.md
│ │ │ │ │ ├── ARCs:README.md
│ │ │ │ │ ├── ARCs:specs:arc-0000.md
│ │ │ │ │ ├── ARCs:specs:arc-0001.md
│ │ │ │ │ ├── ARCs:specs:arc-0002.md
│ │ │ │ │ ├── ARCs:specs:arc-0003.md
│ │ │ │ │ ├── ARCs:specs:arc-0004.md
│ │ │ │ │ ├── ARCs:specs:arc-0005.md
│ │ │ │ │ ├── ARCs:specs:arc-0006.md
│ │ │ │ │ ├── ARCs:specs:arc-0007.md
│ │ │ │ │ ├── ARCs:specs:arc-0008.md
│ │ │ │ │ ├── ARCs:specs:arc-0009.md
│ │ │ │ │ ├── ARCs:specs:arc-0010.md
│ │ │ │ │ ├── ARCs:specs:arc-0011.md
│ │ │ │ │ ├── ARCs:specs:arc-0012.md
│ │ │ │ │ ├── ARCs:specs:arc-0015.md
│ │ │ │ │ ├── ARCs:specs:arc-0016.md
│ │ │ │ │ ├── ARCs:specs:arc-0018.md
│ │ │ │ │ ├── ARCs:specs:arc-0019.md
│ │ │ │ │ ├── ARCs:specs:arc-0020.md
│ │ │ │ │ ├── ARCs:specs:arc-0021.md
│ │ │ │ │ ├── ARCs:specs:arc-0022.md
│ │ │ │ │ ├── ARCs:specs:arc-0023.md
│ │ │ │ │ ├── ARCs:specs:arc-0025.md
│ │ │ │ │ ├── ARCs:specs:arc-0026.md
│ │ │ │ │ ├── ARCs:specs:arc-0028.md
│ │ │ │ │ ├── ARCs:specs:arc-0032.md
│ │ │ │ │ ├── ARCs:specs:arc-0033.md
│ │ │ │ │ ├── ARCs:specs:arc-0034.md
│ │ │ │ │ ├── ARCs:specs:arc-0035.md
│ │ │ │ │ ├── ARCs:specs:arc-0036.md
│ │ │ │ │ ├── ARCs:specs:arc-0042.md
│ │ │ │ │ ├── ARCs:specs:arc-0047.md
│ │ │ │ │ ├── ARCs:specs:arc-0048.md
│ │ │ │ │ ├── ARCs:specs:arc-0049.md
│ │ │ │ │ ├── ARCs:specs:arc-0054.md
│ │ │ │ │ ├── ARCs:specs:arc-0055.md
│ │ │ │ │ ├── ARCs:specs:arc-0056.md
│ │ │ │ │ ├── ARCs:specs:arc-0059.md
│ │ │ │ │ ├── ARCs:specs:arc-0062.md
│ │ │ │ │ ├── ARCs:specs:arc-0065.md
│ │ │ │ │ ├── ARCs:specs:arc-0069.md
│ │ │ │ │ ├── ARCs:specs:arc-0072.md
│ │ │ │ │ ├── ARCs:specs:arc-0073.md
│ │ │ │ │ ├── ARCs:specs:arc-0074.md
│ │ │ │ │ ├── ARCs:specs:arc-0076.md
│ │ │ │ │ ├── ARCs:specs:arc-0078.md
│ │ │ │ │ ├── ARCs:specs:arc-0079.md
│ │ │ │ │ ├── ARCs:specs:arc-0200.md
│ │ │ │ │ ├── clis_index.md
│ │ │ │ │ ├── developer:docs:about.md
│ │ │ │ │ ├── developer:docs:clis:algokey:algokey.md
│ │ │ │ │ ├── developer:docs:clis:algokey:generate.md
│ │ │ │ │ ├── developer:docs:clis:algokey:import.md
│ │ │ │ │ ├── developer:docs:clis:algokey:multisig:append-auth-addr.md
│ │ │ │ │ ├── developer:docs:clis:algokey:multisig:multisig.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:info.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:part.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:reparent.md
│ │ │ │ │ ├── developer:docs:clis:algokey:sign.md
│ │ │ │ │ ├── developer:docs:clis:conduit:conduit.md
│ │ │ │ │ ├── developer:docs:clis:conduit:init.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:exporters.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:importers.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:list.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:processors.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:diagcfg.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:disable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:enable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:metric.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:status.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:disable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:enable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:endpoint.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:name.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:status.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:telemetry.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:restart.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:start.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:status.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:stop.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:wait.md
│ │ │ │ │ ├── developer:docs:clis:goal:protocols.md
│ │ │ │ │ ├── developer:docs:clis:goal:report.md
│ │ │ │ │ ├── developer:docs:clis:goal:version.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:list.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:new.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:wallet.md
│ │ │ │ │ ├── developer:docs:clis:indexer:api-config.md
│ │ │ │ │ ├── developer:docs:clis:indexer:daemon.md
│ │ │ │ │ ├── developer:docs:clis:indexer:indexer.md
│ │ │ │ │ ├── developer:docs:clis:indexer:util:util.md
│ │ │ │ │ ├── developer:docs:clis:indexer:util:validator.md
│ │ │ │ │ ├── developer:docs:clis:kmd.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:debug.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:remote.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:tealdbg.md
│ │ │ │ │ ├── developer:docs:details:accounts:create.md
│ │ │ │ │ ├── developer:docs:details:accounts:index.md
│ │ │ │ │ ├── developer:docs:details:accounts:rekey.md
│ │ │ │ │ ├── developer:docs:details:algorand_consensus.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:betanet.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:index.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:mainnet.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:testnet.md
│ │ │ │ │ ├── developer:docs:details:asa.md
│ │ │ │ │ ├── developer:docs:details:atc.md
│ │ │ │ │ ├── developer:docs:details:atomic_transfers.md
│ │ │ │ │ ├── developer:docs:details:conduit.md
│ │ │ │ │ ├── developer:docs:details:crust.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:guidelines.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:jsonspec.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v1.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v10.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v2.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v3.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v4.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v5.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v6.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v7.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v8.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v9.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:specification.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:ABI:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:create.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:innertx.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:state.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:txs.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:debugging.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:apps.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:smartsigs.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:guidelines.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:modes.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:walkthrough.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:beaker.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:pyteal.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:python.md
│ │ │ │ │ ├── developer:docs:details:encoding.md
│ │ │ │ │ ├── developer:docs:details:ethereum_to_algorand.md
│ │ │ │ │ ├── developer:docs:details:index.md
│ │ │ │ │ ├── developer:docs:details:indexer.md
│ │ │ │ │ ├── developer:docs:details:parameter_tables.md
│ │ │ │ │ ├── developer:docs:details:stateproofs:index.md
│ │ │ │ │ ├── developer:docs:details:stateproofs:light_client.md
│ │ │ │ │ ├── developer:docs:details:technical_faq.md
│ │ │ │ │ ├── developer:docs:details:transactions:index.md
│ │ │ │ │ ├── developer:docs:details:transactions:offline_transactions.md
│ │ │ │ │ ├── developer:docs:details:transactions:payment_prompts.md
│ │ │ │ │ ├── developer:docs:details:transactions:signatures.md
│ │ │ │ │ ├── developer:docs:details:transactions:transactions.md
│ │ │ │ │ ├── developer:docs:details:useful_resources.md
│ │ │ │ │ ├── developer:docs:get-started:algokit.md
│ │ │ │ │ ├── developer:docs:get-started:basics:what_is_blockchain.md
│ │ │ │ │ ├── developer:docs:get-started:basics:whats_a_dapp.md
│ │ │ │ │ ├── developer:docs:get-started:basics:where_to_start.md
│ │ │ │ │ ├── developer:docs:get-started:basics:why_algorand.md
│ │ │ │ │ ├── developer:docs:get-started:tokenization:ft.md
│ │ │ │ │ ├── developer:docs:get-started:tokenization:nft.md
│ │ │ │ │ ├── developer:docs:index.md
│ │ │ │ │ ├── developer:docs:rest-apis:algod.md
│ │ │ │ │ ├── developer:docs:rest-apis:indexer.md
│ │ │ │ │ ├── developer:docs:rest-apis:kmd.md
│ │ │ │ │ ├── developer:docs:rest-apis:restendpoints.md
│ │ │ │ │ ├── developer:docs:run-a-node:operations:catchup.md
│ │ │ │ │ ├── developer:docs:run-a-node:operations:switch_networks.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:generate_keys.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:index.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:offline.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:online.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:renew.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:artifacts.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:config.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:relay.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:telemetry-config.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:indexer.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:install.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:node-troubleshooting.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:types.md
│ │ │ │ │ ├── developer:docs:sdks:go:index.md
│ │ │ │ │ ├── developer:docs:sdks:index.md
│ │ │ │ │ ├── developer:docs:sdks:java:index.md
│ │ │ │ │ ├── developer:docs:sdks:javascript:index.md
│ │ │ │ │ ├── developer:docs:sdks:python:index.md
│ │ │ │ │ ├── developer:python:code:example:accounts.md
│ │ │ │ │ ├── developer:python:code:example:arc4_types.md
│ │ │ │ │ ├── developer:python:code:example:assets.md
│ │ │ │ │ ├── developer:python:code:example:box_storage.md
│ │ │ │ │ ├── developer:python:code:example:control_flow.md
│ │ │ │ │ ├── developer:python:code:example:crypto:merkle_tree.md
│ │ │ │ │ ├── developer:python:code:example:defi:amm.md
│ │ │ │ │ ├── developer:python:code:example:defi:auction.md
│ │ │ │ │ ├── developer:python:code:example:defi:htlc_logicsig.md
│ │ │ │ │ ├── developer:python:code:example:defi:marketplace.md
│ │ │ │ │ ├── developer:python:code:example:events:arc28_events.md
│ │ │ │ │ ├── developer:python:code:example:global_storage.md
│ │ │ │ │ ├── developer:python:code:example:governance:simple_voting.md
│ │ │ │ │ ├── developer:python:code:example:hello_world.md
│ │ │ │ │ ├── developer:python:code:example:inner_transactions.md
│ │ │ │ │ ├── developer:python:code:example:local_storage.md
│ │ │ │ │ ├── developer:python:code:example:nft:proof_of_attendance.md
│ │ │ │ │ ├── developer:python:code:example:privacy:zk_whitelist.md
│ │ │ │ │ ├── developer:python:code:example:scratch_storage.md
│ │ │ │ │ ├── developer:python:code:example:self_payment.md
│ │ │ │ │ ├── developer:python:code:example:struct_in_box.md
│ │ │ │ │ ├── developer:python:code:example:subsidize_app_call.md
│ │ │ │ │ ├── developer:python:code:example:transactions.md
│ │ │ │ │ ├── developer:python:code:example:utility:calculator.md
│ │ │ │ │ ├── devportal-code-examples:projects:python-contract-examples:README.md
│ │ │ │ │ ├── devportal-code-examples:README.md
│ │ │ │ │ ├── docs:.walletconnect:index.md
│ │ │ │ │ ├── docs:.walletconnect:walletconnect-schema.md
│ │ │ │ │ ├── docs:README.md
│ │ │ │ │ ├── docs:scripts:example_tracker:example_list.md
│ │ │ │ │ ├── docs:scripts:README.md
│ │ │ │ │ ├── index.md
│ │ │ │ │ ├── liquid_auth_index.md
│ │ │ │ │ ├── liquid-auth:ARCHITECTURE.md
│ │ │ │ │ ├── liquid-auth:decisions:1-Service-Authentication.md
│ │ │ │ │ ├── liquid-auth:decisions:2-Bidirectional-Communication.md
│ │ │ │ │ ├── liquid-auth:decisions:3-Peer-to-Peer-Signaling.md
│ │ │ │ │ ├── liquid-auth:decisions:4-Fido-Extension.md
│ │ │ │ │ ├── liquid-auth:decisions:README.md
│ │ │ │ │ ├── liquid-auth:docs:architecture.md
│ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:authenticate.md
│ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:register.md
│ │ │ │ │ ├── liquid-auth:docs:clients:browser:authentication.md
│ │ │ │ │ ├── liquid-auth:docs:clients:browser:example.md
│ │ │ │ │ ├── liquid-auth:docs:introduction.md
│ │ │ │ │ ├── liquid-auth:docs:README.md
│ │ │ │ │ ├── liquid-auth:docs:server:environment-variables.md
│ │ │ │ │ ├── liquid-auth:docs:server:integrations.md
│ │ │ │ │ ├── liquid-auth:docs:server:introduction.md
│ │ │ │ │ ├── liquid-auth:docs:server:running-locally.md
│ │ │ │ │ ├── liquid-auth:README.md
│ │ │ │ │ ├── liquid-auth:SEQUENCE.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md
│ │ │ │ │ ├── liquid-auth:sites:express-dapp:README.md
│ │ │ │ │ ├── liquid-auth:VISION.md
│ │ │ │ │ ├── puya_index.md
│ │ │ │ │ ├── puya:docs:algopy_testing:index.md
│ │ │ │ │ ├── puya:docs:api-algopy.arc4.md
│ │ │ │ │ ├── puya:docs:api-algopy.gtxn.md
│ │ │ │ │ ├── puya:docs:api-algopy.itxn.md
│ │ │ │ │ ├── puya:docs:api-algopy.md
│ │ │ │ │ ├── puya:docs:api-algopy.op.md
│ │ │ │ │ ├── puya:docs:api.md
│ │ │ │ │ ├── puya:docs:compiler.md
│ │ │ │ │ ├── puya:docs:index.md
│ │ │ │ │ ├── puya:docs:language-guide.md
│ │ │ │ │ ├── puya:docs:lg-arc28.md
│ │ │ │ │ ├── puya:docs:lg-arc4.md
│ │ │ │ │ ├── puya:docs:lg-builtins.md
│ │ │ │ │ ├── puya:docs:lg-calling-apps.md
│ │ │ │ │ ├── puya:docs:lg-compile.md
│ │ │ │ │ ├── puya:docs:lg-control.md
│ │ │ │ │ ├── puya:docs:lg-errors.md
│ │ │ │ │ ├── puya:docs:lg-logs.md
│ │ │ │ │ ├── puya:docs:lg-modules.md
│ │ │ │ │ ├── puya:docs:lg-opcode-budget.md
│ │ │ │ │ ├── puya:docs:lg-ops.md
│ │ │ │ │ ├── puya:docs:lg-storage.md
│ │ │ │ │ ├── puya:docs:lg-structure.md
│ │ │ │ │ ├── puya:docs:lg-transactions.md
│ │ │ │ │ ├── puya:docs:lg-types.md
│ │ │ │ │ ├── puya:docs:lg-unsupported-python-features.md
│ │ │ │ │ ├── puya:docs:principles.md
│ │ │ │ │ ├── puya:examples:auction:README.md
│ │ │ │ │ ├── puya:python:testing:docs:algopy.md
│ │ │ │ │ ├── puya:python:testing:docs:api.md
│ │ │ │ │ ├── puya:python:testing:docs:coverage.md
│ │ │ │ │ ├── puya:python:testing:docs:examples.md
│ │ │ │ │ ├── puya:python:testing:docs:faq.md
│ │ │ │ │ ├── puya:python:testing:docs:index.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:arc4-types.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:avm-types.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:concepts.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:contract-testing.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:index.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:opcodes.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:signature-testing.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:state-management.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:subroutines.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:transactions.md
│ │ │ │ │ ├── puya:python:testing:examples:README.md
│ │ │ │ │ ├── puya:python:testing:README.md
│ │ │ │ │ ├── puya:README.md
│ │ │ │ │ ├── puya:src:puya:ARCHITECTURE.md
│ │ │ │ │ ├── puya:src:puyapy:_typeshed:README.md
│ │ │ │ │ ├── puya:src:puyapy:_vendor:mypy:typeshed:stdlib:_typeshed:README.md
│ │ │ │ │ ├── puya:src:puyapy:awst_build:README.md
│ │ │ │ │ ├── puya:stubs:README.md
│ │ │ │ │ ├── puya:tests:test_expected_output:README.md
│ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-bytes-and-strings.md
│ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-integer-types.md
│ │ │ │ │ ├── puya:typescript:docs:README.md
│ │ │ │ │ ├── puya:typescript:packages:algo-ts:readme.md
│ │ │ │ │ ├── puya:typescript:README.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIAddressType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayDynamicType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayStaticType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIBoolType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIByteType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIContract.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIInterface.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIMethod.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIStringType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABITupleType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIUfixedType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIUintType.md
│ │ │ │ │ ├── SDKs:javascript:classes:Algodv2.md
│ │ │ │ │ ├── SDKs:javascript:classes:AtomicTransactionComposer.md
│ │ │ │ │ ├── SDKs:javascript:classes:DryrunResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:Indexer.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Account.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountParticipation.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountStateDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Application.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalState.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalStatesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogData.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Asset.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetBalancesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHoldingsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Block.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockRewards.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeState.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeVote.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Box.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxDescriptor.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ErrorResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDeltaKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HashFactory.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HealthCheck.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.IndexerStateProofMessage.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MerkleArrayProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MiniAssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ParticipationUpdates.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofFields.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofParticipant.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofReveal.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSigSlot.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofTracking.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofVerifier.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Transaction.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionApplication.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetConfig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetFreeze.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetTransfer.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionKeyreg.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionPayment.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureLogicsig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisigSubsignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionStateProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:Kmd.md
│ │ │ │ │ ├── SDKs:javascript:classes:LogicSig.md
│ │ │ │ │ ├── SDKs:javascript:classes:LogicSigAccount.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Account.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountApplicationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetsInformationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountParticipation.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountStateDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AppCallLogs.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Application.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationInitialStates.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationKVStorage.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalState.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateOperation.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Asset.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHoldingReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockHashResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockLogsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockTxidsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Box.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxDescriptor.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BuildVersion.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.CompileResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DisassembleResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunRequest.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunSource.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunState.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunTxnResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ErrorResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDeltaKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetBlockTimeStampOffsetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetSyncRoundResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.KvDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LedgerStateDeltaForTransactionGroup.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LightBlockHeaderProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.NodeStatusResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PostTransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ScratchChange.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateInitialStates.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequest.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequestTransactionGroup.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTraceConfig.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionGroupResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationEvalOverrides.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationOpcodeTraceUnit.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationTransactionExecTrace.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProofMessage.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SupplyResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionParametersResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionProofResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Version.md
│ │ │ │ │ ├── SDKs:javascript:classes:SourceMap.md
│ │ │ │ │ ├── SDKs:javascript:classes:Transaction.md
│ │ │ │ │ ├── SDKs:javascript:enums:ABIReferenceType.md
│ │ │ │ │ ├── SDKs:javascript:enums:ABITransactionType.md
│ │ │ │ │ ├── SDKs:javascript:enums:AtomicTransactionComposerStatus.md
│ │ │ │ │ ├── SDKs:javascript:enums:IntDecoding.md
│ │ │ │ │ ├── SDKs:javascript:enums:OnApplicationComplete.md
│ │ │ │ │ ├── SDKs:javascript:enums:TransactionType.md
│ │ │ │ │ ├── SDKs:javascript:examples:README.md
│ │ │ │ │ ├── SDKs:javascript:FAQ.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworkInfo.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworks.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIInterfaceParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodArgParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodReturnParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIResult.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:Account.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:Address.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:AlgodTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClient.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientError.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientResponse.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BoxReference.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:CustomTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedAssetParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedBoxReference.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedGlobalStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLocalStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSigAccount.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedMultisig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSignedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSubsig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:IndexerTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:KMDTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:MultisigMetadata.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:SignedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:SuggestedParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionWithSigner.md
│ │ │ │ │ ├── SDKs:javascript:modules:indexerModels.md
│ │ │ │ │ ├── SDKs:javascript:modules:modelsv2.md
│ │ │ │ │ ├── SDKs:javascript:modules.md
│ │ │ │ │ ├── SDKs:javascript:README.md
│ │ │ │ │ ├── SDKs:python:algosdk:v2client:harness:README.md
│ │ │ │ │ ├── SDKs:python:examples:README.md
│ │ │ │ │ ├── SDKs:python:README.md
│ │ │ │ │ ├── tealscript:examples_amm_README.md
│ │ │ │ │ ├── tealscript:examples_auction_README.md
│ │ │ │ │ ├── tealscript:examples_big_box_README.md
│ │ │ │ │ ├── tealscript:examples_itxns_README.md
│ │ │ │ │ ├── tealscript:examples_lsig_with_app_README.md
│ │ │ │ │ ├── tealscript:examples_reti_README.md
│ │ │ │ │ ├── tealscript:FEATURES.md
│ │ │ │ │ ├── tealscript:guides_atomic_txn.md
│ │ │ │ │ ├── tealscript:guides_features.md
│ │ │ │ │ ├── tealscript:guides_getting_started.md
│ │ │ │ │ ├── tealscript:guides_inner_transactions.md
│ │ │ │ │ ├── tealscript:guides_lifecycle.md
│ │ │ │ │ ├── tealscript:guides_math.md
│ │ │ │ │ ├── tealscript:guides_methods.md
│ │ │ │ │ ├── tealscript:guides_multiple_contracts.md
│ │ │ │ │ ├── tealscript:guides_pyteal.md
│ │ │ │ │ ├── tealscript:guides_storage.md
│ │ │ │ │ ├── tealscript:guides_Supported Types_arrays.md
│ │ │ │ │ ├── tealscript:guides_Supported Types_numbers.md
│ │ │ │ │ ├── TEALScript:README.md
│ │ │ │ │ ├── tealscript:tests_test_package_README.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0001-intro.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0002-init.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0003-contract.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0004-artifacts.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0005-hello.md
│ │ │ │ │ └── tealscript:tutorials_Hello World_0006-test.md
│ │ │ │ └── taxonomy-categories
│ │ │ │ ├── algokit-utils.json
│ │ │ │ ├── algokit.json
│ │ │ │ ├── arcs.json
│ │ │ │ ├── clis.json
│ │ │ │ ├── details.json
│ │ │ │ ├── developers.json
│ │ │ │ ├── liquid-auth.json
│ │ │ │ ├── nodes.json
│ │ │ │ ├── puya.json
│ │ │ │ ├── python.json
│ │ │ │ ├── sdks.json
│ │ │ │ └── tealscript.json
│ │ │ └── wallet
│ │ │ └── index.ts
│ │ ├── tools
│ │ │ ├── accountManager.ts
│ │ │ ├── algodManager.ts
│ │ │ ├── apiManager
│ │ │ │ ├── algod
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── asset.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── transaction.ts
│ │ │ │ ├── example
│ │ │ │ │ ├── get-balance.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── indexer
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── asset.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── transaction.ts
│ │ │ │ ├── nfd
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tinyman
│ │ │ │ │ ├── analytics.ts
│ │ │ │ │ ├── bootstrap.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── liquidity.ts
│ │ │ │ │ ├── opt_in.ts
│ │ │ │ │ ├── pool.ts
│ │ │ │ │ ├── remove_liquidity.ts
│ │ │ │ │ └── swap.ts
│ │ │ │ ├── ultrade
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── market.ts
│ │ │ │ │ ├── system.ts
│ │ │ │ │ └── wallet.ts
│ │ │ │ └── vestige
│ │ │ │ ├── assets.ts
│ │ │ │ ├── balances.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── networks.ts
│ │ │ │ ├── notes.ts
│ │ │ │ ├── pools.ts
│ │ │ │ ├── protocols.ts
│ │ │ │ ├── swaps.ts
│ │ │ │ └── vaults.ts
│ │ │ ├── arc26Manager.ts
│ │ │ ├── index.ts
│ │ │ ├── knowledgeManager.ts
│ │ │ ├── transactionManager
│ │ │ │ ├── accountTransactions.ts
│ │ │ │ ├── appTransactions
│ │ │ │ │ ├── callTxn.ts
│ │ │ │ │ ├── clearTxn.ts
│ │ │ │ │ ├── closeOutTxn.ts
│ │ │ │ │ ├── createTxn.ts
│ │ │ │ │ ├── deleteTxn.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── optInTxn.ts
│ │ │ │ │ ├── test
│ │ │ │ │ │ ├── counter_approval.teal
│ │ │ │ │ │ ├── counter_clear.teal
│ │ │ │ │ │ ├── storage_test_approval_v2.teal
│ │ │ │ │ │ ├── storage_test_approval.teal
│ │ │ │ │ │ └── storage_test_clear.teal
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── updateTxn.ts
│ │ │ │ ├── assetTransactions.ts
│ │ │ │ ├── generalTransaction.ts
│ │ │ │ └── index.ts
│ │ │ └── utilityManager.ts
│ │ ├── types.ts
│ │ └── utils
│ │ └── responseProcessor.ts
│ ├── tests
│ │ ├── resources
│ │ │ ├── algod
│ │ │ │ ├── account.test.ts
│ │ │ │ ├── application.test.ts
│ │ │ │ ├── asset.test.ts
│ │ │ │ └── transaction.test.ts
│ │ │ └── indexer
│ │ │ ├── account.test.ts
│ │ │ ├── application.test.ts
│ │ │ ├── asset.test.ts
│ │ │ └── transaction.test.ts
│ │ └── tools
│ │ ├── accountManager.test.ts
│ │ ├── algodManager.test.ts
│ │ ├── apiManager
│ │ │ └── example
│ │ │ └── get-balance.test.ts
│ │ ├── transactionManager
│ │ │ ├── accountTransactionManager.test.ts
│ │ │ ├── appTransactionManager.test.ts
│ │ │ ├── assetTransactionManager.test.ts
│ │ │ ├── generalTransactionManager.test.ts
│ │ │ └── transactionManager.test.ts
│ │ └── utilityManager.test.ts
│ └── tsconfig.json
├── README.md
├── rename_files.sh
└── tsconfig.json
```
# Files
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:assets.md:
--------------------------------------------------------------------------------
```markdown
1 | # Algorand Standard Assets (ASA) in Python
2 |
3 | This guide demonstrates how to work with Algorand Standard Assets (ASAs) using Python, including creation, management, transfer, and deletion operations.
4 |
5 | ## Creating Assets
6 |
7 | ### Creating a Fungible Token
8 |
9 | ```python
10 | from algokit_utils import AssetCreateParams
11 |
12 | # Create fungible token with 10 million units
13 | txn_result = algorand_client.send.asset_create(
14 | AssetCreateParams(
15 | sender=account_a.address,
16 | total=10_000_000,
17 | decimals=6,
18 | default_frozen=False, # optional
19 | manager=account_a.address, # optional
20 | reserve=account_a.address, # optional
21 | freeze=account_a.address, # optional
22 | clawback=account_a.address, # optional
23 | unit_name="MYA",
24 | asset_name="My Asset",
25 | )
26 | )
27 | ```
28 |
29 | ### Creating an NFT
30 |
31 | ```python
32 | # Create a 1/1 NFT
33 | txn_result = algorand_client.send.asset_create(
34 | AssetCreateParams(
35 | sender=account_a.address,
36 | total=1,
37 | asset_name="My NFT",
38 | unit_name="MNFT",
39 | decimals=0,
40 | url="metadata URL",
41 | metadata_hash=b"Hash of the metadata URL",
42 | )
43 | )
44 | ```
45 |
46 | ## Asset Transfers
47 |
48 | ### Basic Transfer
49 |
50 | ```python
51 | from algokit_utils import AssetTransferParams
52 |
53 | # Transfer 1 unit of asset
54 | txn_result = algorand_client.send.asset_transfer(
55 | AssetTransferParams(
56 | sender=account_a.address,
57 | asset_id=1234,
58 | receiver=account_b.address,
59 | amount=1,
60 | )
61 | )
62 | ```
63 |
64 | ## Asset Participation
65 |
66 | ### Opt-In
67 |
68 | ```python
69 | from algokit_utils import AssetOptInParams
70 |
71 | # Opt-in to an asset
72 | txn_result = algorand_client.send.asset_opt_in(
73 | AssetOptInParams(
74 | sender=account_a.address,
75 | asset_id=1234,
76 | )
77 | )
78 | ```
79 |
80 | ### Opt-Out
81 |
82 | ```python
83 | from algokit_utils import AssetOptOutParams
84 |
85 | # Opt-out of an asset
86 | txn_result = algorand_client.send.asset_opt_out(
87 | params=AssetOptOutParams(
88 | sender=account_a.address,
89 | asset_id=1234,
90 | creator=account_b.address,
91 | ),
92 | ensure_zero_balance=True, # Verify zero balance before opt-out
93 | )
94 | ```
95 |
96 | ## Asset Management
97 |
98 | ### Freezing Assets
99 |
100 | ```python
101 | from algokit_utils import AssetFreezeParams
102 |
103 | # Freeze assets
104 | txn_result = algorand_client.send.asset_freeze(
105 | AssetFreezeParams(
106 | sender=account_a.address,
107 | asset_id=1234,
108 | account=account_b.address, # Account to freeze
109 | frozen=True,
110 | )
111 | )
112 |
113 | # Unfreeze assets
114 | txn_result = algorand_client.send.asset_freeze(
115 | AssetFreezeParams(
116 | sender=account_a.address,
117 | asset_id=1234,
118 | account=account_b.address,
119 | frozen=False,
120 | )
121 | )
122 | ```
123 |
124 | ### Clawback
125 |
126 | ```python
127 | # Clawback assets from an account
128 | txn_result = algorand_client.send.asset_transfer(
129 | AssetTransferParams(
130 | sender=manager.address,
131 | asset_id=1234,
132 | amount=1,
133 | receiver=manager.address,
134 | clawback_target=account_to_be_clawbacked.address,
135 | )
136 | )
137 | ```
138 |
139 | ### Updating Asset Configuration
140 |
141 | ```python
142 | from algokit_utils import AssetConfigParams
143 |
144 | # Update asset configuration
145 | txn_result = algorand_client.send.asset_config(
146 | AssetConfigParams(
147 | sender=account_a.address,
148 | asset_id=1234,
149 | manager=account_b.address,
150 | reserve=account_b.address,
151 | freeze=account_b.address,
152 | clawback=account_b.address,
153 | )
154 | )
155 | ```
156 |
157 | ### Destroying Assets
158 |
159 | ```python
160 | from algokit_utils import AssetDestroyParams
161 |
162 | # Destroy an asset
163 | txn_result = algorand_client.send.asset_destroy(
164 | AssetDestroyParams(
165 | sender=account_a.address,
166 | asset_id=1234,
167 | )
168 | )
169 | ```
170 |
171 | ## Best Practices
172 |
173 | 1. **Asset Creation**:
174 | - Choose appropriate decimals for fungible tokens
175 | - Set meaningful unit names and asset names
176 | - Consider immutability requirements
177 | - Document metadata URLs and hashes
178 |
179 | 2. **Asset Transfer**:
180 | - Verify opt-in status before transfers
181 | - Handle transfer failures gracefully
182 | - Consider minimum balance requirements
183 | - Track transfer status
184 |
185 | 3. **Asset Management**:
186 | - Carefully assign management roles
187 | - Document role assignments
188 | - Implement proper access controls
189 | - Monitor asset operations
190 |
191 | 4. **Freezing and Clawback**:
192 | - Use freeze capability judiciously
193 | - Document freeze/clawback policies
194 | - Implement proper authorization
195 | - Monitor frozen accounts
196 |
197 | 5. **Configuration Updates**:
198 | - Plan configuration changes carefully
199 | - Document configuration history
200 | - Verify manager authorization
201 | - Test configuration changes
202 |
203 | 6. **Asset Deletion**:
204 | - Verify creator ownership
205 | - Ensure zero circulation
206 | - Document deletion reasons
207 | - Handle deletion failures
208 |
209 | ## Security Considerations
210 |
211 | 1. **Access Control**:
212 | - Verify transaction sender authorization
213 | - Implement role-based controls
214 | - Protect management keys
215 | - Monitor suspicious activity
216 |
217 | 2. **Asset Parameters**:
218 | - Choose parameters carefully
219 | - Consider immutability implications
220 | - Document parameter decisions
221 | - Test parameter effects
222 |
223 | 3. **Operational Security**:
224 | - Implement proper error handling
225 | - Log important operations
226 | - Monitor asset activities
227 | - Regular security audits
228 |
229 | 4. **User Protection**:
230 | - Clear documentation
231 | - Proper error messages
232 | - User notifications
233 | - Recovery procedures
234 |
235 | This guide demonstrates the various operations available for Algorand Standard Assets using Python. Understanding these operations is crucial for developing applications that work with ASAs effectively and securely.
236 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / SimulateTransactionResult
2 |
3 | # Class: SimulateTransactionResult
4 |
5 | [modelsv2](../modules/modelsv2.md).SimulateTransactionResult
6 |
7 | Simulation result for an individual transaction
8 |
9 | ## Hierarchy
10 |
11 | - `default`
12 |
13 | ↳ **`SimulateTransactionResult`**
14 |
15 | ## Table of contents
16 |
17 | ### Constructors
18 |
19 | - [constructor](modelsv2.SimulateTransactionResult.md#constructor)
20 |
21 | ### Properties
22 |
23 | - [appBudgetConsumed](modelsv2.SimulateTransactionResult.md#appbudgetconsumed)
24 | - [attribute\_map](modelsv2.SimulateTransactionResult.md#attribute_map)
25 | - [execTrace](modelsv2.SimulateTransactionResult.md#exectrace)
26 | - [fixedSigner](modelsv2.SimulateTransactionResult.md#fixedsigner)
27 | - [logicSigBudgetConsumed](modelsv2.SimulateTransactionResult.md#logicsigbudgetconsumed)
28 | - [txnResult](modelsv2.SimulateTransactionResult.md#txnresult)
29 | - [unnamedResourcesAccessed](modelsv2.SimulateTransactionResult.md#unnamedresourcesaccessed)
30 |
31 | ### Methods
32 |
33 | - [get\_obj\_for\_encoding](modelsv2.SimulateTransactionResult.md#get_obj_for_encoding)
34 | - [from\_obj\_for\_encoding](modelsv2.SimulateTransactionResult.md#from_obj_for_encoding)
35 |
36 | ## Constructors
37 |
38 | ### constructor
39 |
40 | • **new SimulateTransactionResult**(`«destructured»`)
41 |
42 | Creates a new `SimulateTransactionResult` object.
43 |
44 | #### Parameters
45 |
46 | | Name | Type |
47 | | :------ | :------ |
48 | | `«destructured»` | `Object` |
49 | | › `appBudgetConsumed?` | `number` \| `bigint` |
50 | | › `execTrace?` | [`SimulationTransactionExecTrace`](modelsv2.SimulationTransactionExecTrace.md) |
51 | | › `fixedSigner?` | `string` |
52 | | › `logicSigBudgetConsumed?` | `number` \| `bigint` |
53 | | › `txnResult` | [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md) |
54 | | › `unnamedResourcesAccessed?` | [`SimulateUnnamedResourcesAccessed`](modelsv2.SimulateUnnamedResourcesAccessed.md) |
55 |
56 | #### Overrides
57 |
58 | BaseModel.constructor
59 |
60 | #### Defined in
61 |
62 | client/v2/algod/models/types.ts:4812
63 |
64 | ## Properties
65 |
66 | ### appBudgetConsumed
67 |
68 | • `Optional` **appBudgetConsumed**: `number` \| `bigint`
69 |
70 | Budget used during execution of an app call transaction. This value includes
71 | budged used by inner app calls spawned by this transaction.
72 |
73 | #### Defined in
74 |
75 | client/v2/algod/models/types.ts:4759
76 |
77 | ___
78 |
79 | ### attribute\_map
80 |
81 | • **attribute\_map**: `Record`\<`string`, `string`\>
82 |
83 | #### Inherited from
84 |
85 | BaseModel.attribute\_map
86 |
87 | #### Defined in
88 |
89 | client/v2/basemodel.ts:56
90 |
91 | ___
92 |
93 | ### execTrace
94 |
95 | • `Optional` **execTrace**: [`SimulationTransactionExecTrace`](modelsv2.SimulationTransactionExecTrace.md)
96 |
97 | The execution trace of calling an app or a logic sig, containing the inner app
98 | call trace in a recursive way.
99 |
100 | #### Defined in
101 |
102 | client/v2/algod/models/types.ts:4765
103 |
104 | ___
105 |
106 | ### fixedSigner
107 |
108 | • `Optional` **fixedSigner**: `string`
109 |
110 | The account that needed to sign this transaction when no signature was provided
111 | and the provided signer was incorrect.
112 |
113 | #### Defined in
114 |
115 | client/v2/algod/models/types.ts:4771
116 |
117 | ___
118 |
119 | ### logicSigBudgetConsumed
120 |
121 | • `Optional` **logicSigBudgetConsumed**: `number` \| `bigint`
122 |
123 | Budget used during execution of a logic sig transaction.
124 |
125 | #### Defined in
126 |
127 | client/v2/algod/models/types.ts:4776
128 |
129 | ___
130 |
131 | ### txnResult
132 |
133 | • **txnResult**: [`PendingTransactionResponse`](modelsv2.PendingTransactionResponse.md)
134 |
135 | Details about a pending transaction. If the transaction was recently confirmed,
136 | includes confirmation details like the round and reward details.
137 |
138 | #### Defined in
139 |
140 | client/v2/algod/models/types.ts:4753
141 |
142 | ___
143 |
144 | ### unnamedResourcesAccessed
145 |
146 | • `Optional` **unnamedResourcesAccessed**: [`SimulateUnnamedResourcesAccessed`](modelsv2.SimulateUnnamedResourcesAccessed.md)
147 |
148 | These are resources that were accessed by this group that would normally have
149 | caused failure, but were allowed in simulation. Depending on where this object
150 | is in the response, the unnamed resources it contains may or may not qualify for
151 | group resource sharing. If this is a field in SimulateTransactionGroupResult,
152 | the resources do qualify, but if this is a field in SimulateTransactionResult,
153 | they do not qualify. In order to make this group valid for actual submission,
154 | resources that qualify for group sharing can be made available by any
155 | transaction of the group; otherwise, resources must be placed in the same
156 | transaction which accessed them.
157 |
158 | #### Defined in
159 |
160 | client/v2/algod/models/types.ts:4789
161 |
162 | ## Methods
163 |
164 | ### get\_obj\_for\_encoding
165 |
166 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
167 |
168 | Get an object ready for encoding to either JSON or msgpack.
169 |
170 | #### Parameters
171 |
172 | | Name | Type | Default value | Description |
173 | | :------ | :------ | :------ | :------ |
174 | | `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. |
175 |
176 | #### Returns
177 |
178 | `Record`\<`string`, `any`\>
179 |
180 | #### Inherited from
181 |
182 | BaseModel.get\_obj\_for\_encoding
183 |
184 | #### Defined in
185 |
186 | client/v2/basemodel.ts:65
187 |
188 | ___
189 |
190 | ### from\_obj\_for\_encoding
191 |
192 | ▸ `Static` **from_obj_for_encoding**(`data`): [`SimulateTransactionResult`](modelsv2.SimulateTransactionResult.md)
193 |
194 | #### Parameters
195 |
196 | | Name | Type |
197 | | :------ | :------ |
198 | | `data` | `Record`\<`string`, `any`\> |
199 |
200 | #### Returns
201 |
202 | [`SimulateTransactionResult`](modelsv2.SimulateTransactionResult.md)
203 |
204 | #### Defined in
205 |
206 | client/v2/algod/models/types.ts:4846
207 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0049.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 49
3 | title: NFT Rewards
4 | description: NFT Rewards, Terms and Conditions
5 | author: Stéphane BARROSO (@SudoWeezy)
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/228
7 | status: Deprecated
8 | type: Informational
9 | created: 2023-07-19
10 | ---
11 |
12 | ## Abstract
13 | The NFT Rewards is a temporary incentive program that distributes ALGO to be deployed in targeted activities to attract new NFT users from within and outside the ecosystem.
14 |
15 | ## Specification
16 | 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>.
17 |
18 | ### Pilot program qualification for NFT marketplaces
19 |
20 | To be eligible to apply to this program, projects must abide by the <a href="https://www.algorand.foundation/disclaimers">Disclaimers</a> (in particular the “Excluded Jurisdictions” section) and be willing to enter into a binding contract in the form of the template provided by the Algorand Foundation.
21 |
22 | NFT marketplaces applying for this program:
23 | - Must be an NFT marketplace on Algorand that coordinates the selling of NFTs. An NFT marketplace is defined as an online platform that facilitates third-party non-fungible token listings and transactions in ALGO on the Algorand blockchain.
24 | - Must have transaction volume (over the previous 6 months leading up to the application for the program) that is equivalent to at least 10% of total rewards being distributed. For example, if the total rewards amount is 500K ALGO, then the minimum volume must be 50K ALGO.P
25 |
26 | #### Important Note
27 |
28 | *NFT Rewards Program for US entities:*
29 |
30 | >For 2024 | Q2 we will be allowing US-based entities that fit the Program Criteria to apply for the NFT Rewards program.
31 | Their allocated ALGO will be converted to USDCa post prior to the payment transfer. This change will be reviewed on a periodic basis.
32 |
33 | ### Allocation of rewards
34 | - Rewards will be allocated proportionally based on volume for each qualified NFT marketplace.
35 | - For qualifying marketplaces with more than 50% of total NFT marketplace volume, rewards will be capped at 35%.
36 |
37 | ### Requirements for initiatives
38 | 1. The rewards (ALGO) must ultimately go to NFT collectors/end users and creators.
39 | 2. NFT marketplaces must share their campaign plans publicly in advance in order to qualify for the rewards.
40 | 3. The rewards (ALGO) should be held in a separate wallet from operating funds to track on-chain transactions of how funds are being spent.
41 | 4. The NFT marketplace must make public data that shows its trading volume in the last quarter.
42 | 5. Proposals that incentivize wash trading* will not be approved to participate in the Program.
43 | 6. NFT marketplaces must reward creators whose NFTs are purchased with a 5% minimum royalty.
44 |
45 | >* By definition, the term “wash trading” means a form of market manipulation where the same user simultaneously buys and sells the same asset with the intention of giving false or misleading signals about its demand or price
46 |
47 |
48 | ### Process for launching initiative
49 |
50 | - To apply, a qualifying NFT marketplace must provide detailed information on the specifics of initiatives they are planning in that period, as well as any documentation proving the location of its headquarters.
51 | - If approved by the Algorand Foundation team, rewards will be distributed proportionally based on the allocation defined above.
52 | - The qualifying NFT marketplaces must provide a detailed 1-page report following the initiative to Algorand Foundation and on the Forum:
53 | 1. Summary of the initiatives implemented;
54 | 1. Amount of rewards paid out (including any unspent rewards, which must be returned), and wallet addresses;
55 | 1. Total volume of transactions directly as a result of the campaign;
56 | 1. New wallets interacting with the marketplace;
57 | 1. Total volume of transactions compared to the previous quarter;
58 | 1. Any other relevant information.
59 |
60 | ### Evaluation
61 | From GP10 (Q1/2024) proposals will be added to the governance portal and approved or rejected directly by the community. A proposal passes when it reaches a majority of "Yes" votes. The proposals and results are available at <a href="https://governance.algorand.foundation">governance.algorand.foundation</a>.
62 |
63 | NFT marketplaces that do not fulfill their campaign plan cannot apply for further incentives.
64 |
65 | NFT team will review overall results and discuss whether this program is having the desired impact and, together with the community, will help evaluate whether it should be extended and expanded to the next period.
66 |
67 | ### Important to note
68 | - Marketplaces that fit the above criteria will be required to sign a legal contract with the Algorand Foundation.
69 | - Rewards are only paid out in ALGO or USDCa for US-based entities..
70 | - Legal entities based in other jurisdictions where receiving ALGO is not allowed are not able to partake in this program.
71 | - Participants and the Algorand Foundation will all agree on the source of data and metrics to be used for calculating the allocation and measuring the results.
72 |
73 | ## Rationale
74 | This document was versioned using google doc, it made more sense to move it on github.
75 |
76 | ## Security Considerations
77 | Disclaimer: This document may be revised until the day before the voting session opens, as we are still collecting community feedback.
78 |
79 | ## Copyright
80 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
81 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy-categories/liquid-auth.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "name": "Liquid Auth",
3 | "description": "Authentication system for Algorand applications",
4 | "path": "liquid-auth",
5 | "documents": [
6 | {"name": "README", "path": "liquid-auth:README.md"},
7 | {"name": "Architecture", "path": "liquid-auth:ARCHITECTURE.md"},
8 | {"name": "Vision", "path": "liquid-auth:VISION.md"},
9 | {"name": "Sequence", "path": "liquid-auth:SEQUENCE.md"}
10 | ],
11 | "subcategories": {
12 | "decisions": {
13 | "name": "Architecture Decisions",
14 | "description": "Architecture decision records",
15 | "path": "liquid-auth:decisions",
16 | "documents": [
17 | {"name": "Overview", "path": "liquid-auth:decisions:README.md"},
18 | {"name": "Service Authentication", "path": "liquid-auth:decisions:1-Service-Authentication.md"},
19 | {"name": "Bidirectional Communication", "path": "liquid-auth:decisions:2-Bidirectional-Communication.md"},
20 | {"name": "Peer to Peer Signaling", "path": "liquid-auth:decisions:3-Peer-to-Peer-Signaling.md"},
21 | {"name": "FIDO Extension", "path": "liquid-auth:decisions:4-Fido-Extension.md"}
22 | ]
23 | },
24 | "docs": {
25 | "name": "Documentation",
26 | "description": "General documentation",
27 | "path": "liquid-auth:docs",
28 | "documents": [
29 | {"name": "Overview", "path": "liquid-auth:docs:README.md"},
30 | {"name": "Architecture", "path": "liquid-auth:docs:architecture.md"},
31 | {"name": "Introduction", "path": "liquid-auth:docs:introduction.md"}
32 | ],
33 | "subcategories": {
34 | "clients": {
35 | "name": "Client Documentation",
36 | "description": "Client implementation guides",
37 | "path": "liquid-auth:docs:clients",
38 | "subcategories": {
39 | "browser": {
40 | "name": "Browser Client",
41 | "description": "Browser client documentation",
42 | "path": "liquid-auth:docs:clients:browser",
43 | "documents": [
44 | {"name": "Authentication", "path": "liquid-auth:docs:clients:browser:authentication.md"},
45 | {"name": "Example", "path": "liquid-auth:docs:clients:browser:example.md"}
46 | ]
47 | },
48 | "android": {
49 | "name": "Android Client",
50 | "description": "Android client documentation",
51 | "path": "liquid-auth:docs:clients:android",
52 | "subcategories": {
53 | "provider-service": {
54 | "name": "Provider Service",
55 | "description": "Android provider service documentation",
56 | "path": "liquid-auth:docs:clients:android:provider-service",
57 | "documents": [
58 | {"name": "Authentication", "path": "liquid-auth:docs:clients:android:provider-service:authenticate.md"},
59 | {"name": "Registration", "path": "liquid-auth:docs:clients:android:provider-service:register.md"}
60 | ]
61 | }
62 | }
63 | }
64 | }
65 | },
66 | "server": {
67 | "name": "Server Documentation",
68 | "description": "Server implementation guides",
69 | "path": "liquid-auth:docs:server",
70 | "documents": [
71 | {"name": "Environment Variables", "path": "liquid-auth:docs:server:environment-variables.md"},
72 | {"name": "Integrations", "path": "liquid-auth:docs:server:integrations.md"},
73 | {"name": "Introduction", "path": "liquid-auth:docs:server:introduction.md"},
74 | {"name": "Running Locally", "path": "liquid-auth:docs:server:running-locally.md"}
75 | ]
76 | }
77 | }
78 | },
79 | "services": {
80 | "name": "Services",
81 | "description": "Service implementations",
82 | "path": "liquid-auth:services",
83 | "subcategories": {
84 | "api": {
85 | "name": "JavaScript API",
86 | "description": "JavaScript API implementation",
87 | "path": "liquid-auth:services:liquid-auth-api-js:src",
88 | "subcategories": {
89 | "auth": {
90 | "name": "Auth Controllers",
91 | "description": "Authentication controllers",
92 | "path": "liquid-auth:services:liquid-auth-api-js:src:auth",
93 | "documents": [
94 | {"name": "Get User", "path": "liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md"}
95 | ]
96 | },
97 | "assertion": {
98 | "name": "Assertion Controllers",
99 | "description": "Assertion controllers",
100 | "path": "liquid-auth:services:liquid-auth-api-js:src:assertion",
101 | "documents": [
102 | {"name": "Request", "path": "liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md"},
103 | {"name": "Response", "path": "liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md"}
104 | ]
105 | },
106 | "attestation": {
107 | "name": "Attestation Controllers",
108 | "description": "Attestation controllers",
109 | "path": "liquid-auth:services:liquid-auth-api-js:src:attestation",
110 | "documents": [
111 | {"name": "Request", "path": "liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md"}
112 | ]
113 | }
114 | }
115 | }
116 | }
117 | },
118 | "sites": {
119 | "name": "Example Sites",
120 | "description": "Example implementations",
121 | "path": "liquid-auth:sites",
122 | "documents": [
123 | {"name": "Express dApp", "path": "liquid-auth:sites:express-dapp:README.md"}
124 | ]
125 | }
126 | }
127 | }
128 |
```
--------------------------------------------------------------------------------
/packages/server/src/tools/transactionManager/appTransactions/createTxn.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { Transaction, makeApplicationCreateTxnFromObject, OnApplicationComplete } from 'algosdk';
2 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
3 | import { AppCreateTxnParams } from './types.js';
4 |
5 | /**
6 | * Creates an application creation transaction
7 | * @param params The parameters for creating the application
8 | * @returns The created transaction
9 | * @throws {McpError} If the transaction creation fails
10 | */
11 | export function makeApplicationCreateTxn(params: AppCreateTxnParams): Transaction {
12 | try {
13 | // Validate schema parameters
14 | if (typeof params.numGlobalInts !== 'number' || params.numGlobalInts < 0) {
15 | throw new Error('Invalid numGlobalInts');
16 | }
17 | if (typeof params.numGlobalByteSlices !== 'number' || params.numGlobalByteSlices < 0) {
18 | throw new Error('Invalid numGlobalByteSlices');
19 | }
20 | if (typeof params.numLocalInts !== 'number' || params.numLocalInts < 0) {
21 | throw new Error('Invalid numLocalInts');
22 | }
23 | if (typeof params.numLocalByteSlices !== 'number' || params.numLocalByteSlices < 0) {
24 | throw new Error('Invalid numLocalByteSlices');
25 | }
26 |
27 | // Create a new object with the required structure
28 | const txnParams = {
29 | from: params.from,
30 | approvalProgram: params.approvalProgram,
31 | clearProgram: params.clearProgram,
32 | suggestedParams: params.suggestedParams,
33 | note: params.note,
34 | lease: params.lease,
35 | rekeyTo: params.rekeyTo,
36 | appArgs: params.appArgs,
37 | accounts: params.accounts,
38 | foreignApps: params.foreignApps,
39 | foreignAssets: params.foreignAssets,
40 | boxes: params.boxes,
41 | extraPages: params.extraPages,
42 | onComplete: OnApplicationComplete.NoOpOC,
43 | // Schema parameters
44 | numGlobalInts: params.numGlobalInts,
45 | numGlobalByteSlices: params.numGlobalByteSlices,
46 | numLocalInts: params.numLocalInts,
47 | numLocalByteSlices: params.numLocalByteSlices
48 | };
49 |
50 | return makeApplicationCreateTxnFromObject(txnParams);
51 | } catch (error) {
52 | console.error('[MCP Error] Failed to create application transaction:', error);
53 | throw new McpError(
54 | ErrorCode.InternalError,
55 | `Failed to create application transaction: ${error instanceof Error ? error.message : 'Unknown error'}`
56 | );
57 | }
58 | }
59 |
60 | /**
61 | * Handles the application creation tool request
62 | * @param args The tool arguments
63 | * @param suggestedParams The suggested transaction parameters
64 | * @returns The transaction parameters
65 | * @throws {McpError} If the parameters are invalid
66 | */
67 | export function handleCreateTxn(args: Record<string, unknown>, suggestedParams: any): Record<string, any> {
68 | try {
69 | if (!args.from || !args.approvalProgram || !args.clearProgram ||
70 | typeof args.numGlobalInts !== 'number' || typeof args.numGlobalByteSlices !== 'number' ||
71 | typeof args.numLocalInts !== 'number' || typeof args.numLocalByteSlices !== 'number') {
72 | console.error('[MCP Error] Invalid application creation parameters');
73 | throw new McpError(ErrorCode.InvalidParams, 'Invalid application creation parameters');
74 | }
75 |
76 | // Create transaction with proper parameter handling
77 | const txnParams: Record<string, any> = {
78 | from: String(args.from),
79 | fee: suggestedParams.fee,
80 | firstRound: suggestedParams.firstRound,
81 | lastRound: suggestedParams.lastRound,
82 | genesisID: suggestedParams.genesisID,
83 | genesisHash: suggestedParams.genesisHash,
84 | type: 'appl',
85 | onComplete: OnApplicationComplete.NoOpOC,
86 | // Schema parameters
87 | numGlobalInts: Number(args.numGlobalInts),
88 | numGlobalByteSlices: Number(args.numGlobalByteSlices),
89 | numLocalInts: Number(args.numLocalInts),
90 | numLocalByteSlices: Number(args.numLocalByteSlices)
91 | };
92 |
93 | // Handle required program fields - keep as base64 strings
94 | txnParams.approvalProgram = args.approvalProgram as string;
95 | txnParams.clearProgram = args.clearProgram as string;
96 |
97 | // Handle optional fields
98 | if (typeof args.extraPages === 'number') {
99 | txnParams.extraPages = args.extraPages;
100 | }
101 |
102 | if (typeof args.note === 'string') {
103 | const noteBytes = new TextEncoder().encode(args.note);
104 | txnParams.note = Buffer.from(noteBytes).toString('base64');
105 | }
106 | if (typeof args.lease === 'string') {
107 | const leaseBytes = new TextEncoder().encode(args.lease);
108 | txnParams.lease = Buffer.from(leaseBytes).toString('base64');
109 | }
110 | if (typeof args.rekeyTo === 'string') {
111 | txnParams.rekeyTo = String(args.rekeyTo);
112 | }
113 | if (Array.isArray(args.appArgs)) {
114 | txnParams.appArgs = args.appArgs.map(arg => {
115 | const bytes = new TextEncoder().encode(String(arg));
116 | return Buffer.from(bytes).toString('base64');
117 | });
118 | }
119 | if (Array.isArray(args.accounts)) {
120 | txnParams.accounts = args.accounts.filter((acc): acc is string => typeof acc === 'string');
121 | }
122 | if (Array.isArray(args.foreignApps)) {
123 | txnParams.foreignApps = args.foreignApps.filter((app): app is number => typeof app === 'number');
124 | }
125 | if (Array.isArray(args.foreignAssets)) {
126 | txnParams.foreignAssets = args.foreignAssets.filter((asset): asset is number => typeof asset === 'number');
127 | }
128 |
129 | return txnParams;
130 | } catch (error) {
131 | if (error instanceof McpError) {
132 | throw error;
133 | }
134 | console.error('[MCP Error] Failed to handle application creation:', error);
135 | throw new McpError(
136 | ErrorCode.InternalError,
137 | `Failed to handle application creation: ${error instanceof Error ? error.message : 'Unknown error'}`
138 | );
139 | }
140 | }
141 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:classes:types_config.UpdatableConfig.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/config](../modules/types_config.md) / UpdatableConfig
2 |
3 | # Class: UpdatableConfig
4 |
5 | [types/config](../modules/types_config.md).UpdatableConfig
6 |
7 | Updatable AlgoKit config
8 |
9 | ## Implements
10 |
11 | - `Readonly`\<[`Config`](../interfaces/types_config.Config.md)\>
12 |
13 | ## Table of contents
14 |
15 | ### Constructors
16 |
17 | - [constructor](types_config.UpdatableConfig.md#constructor)
18 |
19 | ### Properties
20 |
21 | - [config](types_config.UpdatableConfig.md#config)
22 |
23 | ### Accessors
24 |
25 | - [debug](types_config.UpdatableConfig.md#debug)
26 | - [events](types_config.UpdatableConfig.md#events)
27 | - [logger](types_config.UpdatableConfig.md#logger)
28 | - [maxSearchDepth](types_config.UpdatableConfig.md#maxsearchdepth)
29 | - [populateAppCallResources](types_config.UpdatableConfig.md#populateappcallresources)
30 | - [projectRoot](types_config.UpdatableConfig.md#projectroot)
31 | - [traceAll](types_config.UpdatableConfig.md#traceall)
32 | - [traceBufferSizeMb](types_config.UpdatableConfig.md#tracebuffersizemb)
33 |
34 | ### Methods
35 |
36 | - [configure](types_config.UpdatableConfig.md#configure)
37 | - [getLogger](types_config.UpdatableConfig.md#getlogger)
38 | - [withDebug](types_config.UpdatableConfig.md#withdebug)
39 |
40 | ## Constructors
41 |
42 | ### constructor
43 |
44 | • **new UpdatableConfig**(): [`UpdatableConfig`](types_config.UpdatableConfig.md)
45 |
46 | #### Returns
47 |
48 | [`UpdatableConfig`](types_config.UpdatableConfig.md)
49 |
50 | #### Defined in
51 |
52 | [src/types/config.ts:90](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L90)
53 |
54 | ## Properties
55 |
56 | ### config
57 |
58 | • `Private` **config**: [`Config`](../interfaces/types_config.Config.md)
59 |
60 | #### Defined in
61 |
62 | [src/types/config.ts:29](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L29)
63 |
64 | ## Accessors
65 |
66 | ### debug
67 |
68 | • `get` **debug**(): `boolean`
69 |
70 | #### Returns
71 |
72 | `boolean`
73 |
74 | #### Implementation of
75 |
76 | Readonly.debug
77 |
78 | #### Defined in
79 |
80 | [src/types/config.ts:39](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L39)
81 |
82 | ___
83 |
84 | ### events
85 |
86 | • `get` **events**(): [`AsyncEventEmitter`](types_async_event_emitter.AsyncEventEmitter.md)
87 |
88 | #### Returns
89 |
90 | [`AsyncEventEmitter`](types_async_event_emitter.AsyncEventEmitter.md)
91 |
92 | #### Implementation of
93 |
94 | Readonly.events
95 |
96 | #### Defined in
97 |
98 | [src/types/config.ts:59](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L59)
99 |
100 | ___
101 |
102 | ### logger
103 |
104 | • `get` **logger**(): [`Logger`](../modules/types_logging.md#logger)
105 |
106 | #### Returns
107 |
108 | [`Logger`](../modules/types_logging.md#logger)
109 |
110 | #### Implementation of
111 |
112 | Readonly.logger
113 |
114 | #### Defined in
115 |
116 | [src/types/config.ts:35](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L35)
117 |
118 | ___
119 |
120 | ### maxSearchDepth
121 |
122 | • `get` **maxSearchDepth**(): `number`
123 |
124 | #### Returns
125 |
126 | `number`
127 |
128 | #### Implementation of
129 |
130 | Readonly.maxSearchDepth
131 |
132 | #### Defined in
133 |
134 | [src/types/config.ts:55](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L55)
135 |
136 | ___
137 |
138 | ### populateAppCallResources
139 |
140 | • `get` **populateAppCallResources**(): `boolean`
141 |
142 | #### Returns
143 |
144 | `boolean`
145 |
146 | #### Implementation of
147 |
148 | Readonly.populateAppCallResources
149 |
150 | #### Defined in
151 |
152 | [src/types/config.ts:31](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L31)
153 |
154 | ___
155 |
156 | ### projectRoot
157 |
158 | • `get` **projectRoot**(): ``null`` \| `string`
159 |
160 | #### Returns
161 |
162 | ``null`` \| `string`
163 |
164 | #### Implementation of
165 |
166 | Readonly.projectRoot
167 |
168 | #### Defined in
169 |
170 | [src/types/config.ts:43](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L43)
171 |
172 | ___
173 |
174 | ### traceAll
175 |
176 | • `get` **traceAll**(): `boolean`
177 |
178 | #### Returns
179 |
180 | `boolean`
181 |
182 | #### Implementation of
183 |
184 | Readonly.traceAll
185 |
186 | #### Defined in
187 |
188 | [src/types/config.ts:47](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L47)
189 |
190 | ___
191 |
192 | ### traceBufferSizeMb
193 |
194 | • `get` **traceBufferSizeMb**(): `number`
195 |
196 | #### Returns
197 |
198 | `number`
199 |
200 | #### Implementation of
201 |
202 | Readonly.traceBufferSizeMb
203 |
204 | #### Defined in
205 |
206 | [src/types/config.ts:51](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L51)
207 |
208 | ## Methods
209 |
210 | ### configure
211 |
212 | ▸ **configure**(`newConfig`): `void`
213 |
214 | Update the AlgoKit configuration with your own configuration settings
215 |
216 | #### Parameters
217 |
218 | | Name | Type | Description |
219 | | :------ | :------ | :------ |
220 | | `newConfig` | `Partial`\<[`Config`](../interfaces/types_config.Config.md)\> | Partial or complete config to replace |
221 |
222 | #### Returns
223 |
224 | `void`
225 |
226 | #### Defined in
227 |
228 | [src/types/config.ts:107](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L107)
229 |
230 | ___
231 |
232 | ### getLogger
233 |
234 | ▸ **getLogger**(`returnNullLogger?`): [`Logger`](../modules/types_logging.md#logger)
235 |
236 | Returns the current logger, or the null logger if true is passed in to `returnNullLogger`
237 |
238 | #### Parameters
239 |
240 | | Name | Type | Description |
241 | | :------ | :------ | :------ |
242 | | `returnNullLogger?` | `boolean` | Whether or not to return the null logger |
243 |
244 | #### Returns
245 |
246 | [`Logger`](../modules/types_logging.md#logger)
247 |
248 | The requested logger
249 |
250 | #### Defined in
251 |
252 | [src/types/config.ts:68](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L68)
253 |
254 | ___
255 |
256 | ### withDebug
257 |
258 | ▸ **withDebug**(`lambda`): `void`
259 |
260 | Temporarily run with debug set to true.
261 |
262 | #### Parameters
263 |
264 | | Name | Type | Description |
265 | | :------ | :------ | :------ |
266 | | `lambda` | () => `unknown` | A lambda expression with code to run with debug config set to true |
267 |
268 | #### Returns
269 |
270 | `void`
271 |
272 | #### Defined in
273 |
274 | [src/types/config.ts:80](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/config.ts#L80)
275 |
```
--------------------------------------------------------------------------------
/llms.txt:
--------------------------------------------------------------------------------
```
1 | # llms.txt - Optimized Documentation for AI Developer Tools
2 |
3 | project_name: algorand-mcp
4 | version: 2.7.6
5 | description: Model Context Protocol (MCP) server for Algorand blockchain interactions, providing tools and resources for account management, asset operations, application interactions, and transaction handling
6 | base_url: https://github.com/GoPlausible/algorand-mcp
7 | docs_url: https://github.com/GoPlausible/algorand-mcp/blob/main/packages/server/README.md
8 |
9 | # API Endpoints
10 |
11 | ## Tools
12 |
13 | ### Transaction Tools
14 | - /tools/transaction/account
15 | - make_payment_txn - Create payment transactions
16 | - make_keyreg_txn - Create key registration transactions
17 |
18 | - /tools/transaction/asset
19 | - make_asset_create_txn - Create new assets
20 | - make_asset_config_txn - Modify asset configuration
21 | - make_asset_destroy_txn - Remove assets
22 | - make_asset_freeze_txn - Freeze/unfreeze assets
23 | - make_asset_transfer_txn - Transfer assets between accounts
24 |
25 | - /tools/transaction/application
26 | - make_app_create_txn - Deploy new applications
27 | - make_app_update_txn - Update application code
28 | - make_app_delete_txn - Remove applications
29 | - make_app_optin_txn - Opt into applications
30 | - make_app_closeout_txn - Close out from applications
31 | - make_app_clear_txn - Clear application state
32 | - make_app_call_txn - Call application methods
33 |
34 | - /tools/transaction/general
35 | - assign_group_id - Assign group ID to transactions
36 | - sign_transaction - Sign transactions
37 | - sign_bytes - Sign arbitrary bytes
38 | - encode_obj - Encode objects to msgpack
39 | - decode_obj - Decode msgpack to objects
40 |
41 | ### API Tools
42 | - /tools/algod
43 | - api_algod_get_account_info - Get account information
44 | - api_algod_get_account_application_info - Get account's application info
45 | - api_algod_get_account_asset_info - Get account's asset info
46 | - api_algod_get_application_by_id - Get application information
47 | - api_algod_get_application_box - Get application box
48 | - api_algod_get_application_boxes - Get all application boxes
49 | - api_algod_get_asset_by_id - Get asset information
50 | - api_algod_get_pending_transaction - Get pending transaction
51 | - api_algod_get_pending_transactions - Get all pending transactions
52 | - api_algod_get_transaction_params - Get suggested parameters
53 | - api_algod_get_node_status - Get node status
54 |
55 | - /tools/indexer
56 | - api_indexer_lookup_account_by_id - Get account details
57 | - api_indexer_lookup_account_assets - Get account assets
58 | - api_indexer_lookup_account_created_applications - Get created apps
59 | - api_indexer_lookup_applications - Get application info
60 | - api_indexer_lookup_asset_by_id - Get asset details
61 | - api_indexer_lookup_asset_balances - Get asset holders
62 | - api_indexer_search_for_transactions - Search transactions
63 | - api_indexer_lookup_transaction_by_id - Get transaction details
64 |
65 | ### Utility Tools
66 | - /tools/utility
67 | - validate_address - Validate Algorand addresses
68 | - encode_address - Encode public key to address
69 | - decode_address - Decode address to public key
70 | - get_application_address - Get app address from ID
71 | - bytes_to_bigint - Convert bytes to BigInt
72 | - bigint_to_bytes - Convert BigInt to bytes
73 | - encode_uint64 - Encode uint64 to bytes
74 | - decode_uint64 - Decode bytes to uint64
75 |
76 | ### ARC-26 Tools
77 | - /tools/arc26
78 | - generate_algorand_uri - Generate Algorand URI
79 | - generate_qr_code - Generate QR code for URI
80 |
81 | ## Resources
82 |
83 | ### Wallet Resources
84 | - algorand://wallet/secretkey
85 | - Secret key of the wallet in hex format
86 | - algorand://wallet/publickey
87 | - Public key of the wallet in hex format
88 | - algorand://wallet/mnemonic
89 | - Mnemonic phrase of the wallet
90 | - algorand://wallet/address
91 | - Algorand address of the wallet
92 | - algorand://wallet/account
93 | - Algorand account balance and asset holdings
94 | - algorand://wallet/assets
95 | - Asset holdings for Wallet account
96 |
97 | ### Knowledge Resources
98 | - algorand://knowledge/taxonomy
99 | - Full knowledge taxonomy
100 | - algorand://knowledge/taxonomy/arcs
101 | - Algorand Request for Comments (ARCs)
102 | - algorand://knowledge/taxonomy/sdks
103 | - Software Development Kits documentation
104 | - algorand://knowledge/taxonomy/algokit
105 | - AlgoKit development tools and CLI
106 | - algorand://knowledge/taxonomy/algokit-utils
107 | - AlgoKit utility libraries
108 | - algorand://knowledge/taxonomy/tealscript
109 | - TEALScript smart contract language
110 | - algorand://knowledge/taxonomy/puya
111 | - Puya smart contract language
112 | - algorand://knowledge/taxonomy/liquid-auth
113 | - Liquid authentication system
114 | - algorand://knowledge/taxonomy/python
115 | - Python development resources
116 | - algorand://knowledge/taxonomy/developers
117 | - Comprehensive developer documentation
118 | - algorand://knowledge/taxonomy/clis
119 | - CLI tools documentation
120 | - algorand://knowledge/taxonomy/nodes
121 | - Node management documentation
122 | - algorand://knowledge/taxonomy/details
123 | - Detailed technical documentation
124 |
125 | # Authentication
126 | auth_method: Environment Variables
127 | auth_details: Requires Algorand node access credentials configured via environment variables
128 |
129 | # Rate Limits
130 | rate_limit: Determined by connected Algorand node
131 | rate_limit_upgrade_url: N/A - Self-hosted
132 |
133 | # SDKs
134 | sdks:
135 | - language: JavaScript/TypeScript
136 | sdk_url: https://www.npmjs.com/package/algosdk
137 | version: 2.9.0
138 | - language: TypeScript
139 | sdk_url: https://www.npmjs.com/package/@modelcontextprotocol/sdk
140 | version: 1.6.1
141 |
142 | # Support
143 | support_contact: GitHub Issues
144 | support_url: https://github.com/GoPlausible/algorand-mcp/issues
145 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / SimulateUnnamedResourcesAccessed
2 |
3 | # Class: SimulateUnnamedResourcesAccessed
4 |
5 | [modelsv2](../modules/modelsv2.md).SimulateUnnamedResourcesAccessed
6 |
7 | These are resources that were accessed by this group that would normally have
8 | caused failure, but were allowed in simulation. Depending on where this object
9 | is in the response, the unnamed resources it contains may or may not qualify for
10 | group resource sharing. If this is a field in SimulateTransactionGroupResult,
11 | the resources do qualify, but if this is a field in SimulateTransactionResult,
12 | they do not qualify. In order to make this group valid for actual submission,
13 | resources that qualify for group sharing can be made available by any
14 | transaction of the group; otherwise, resources must be placed in the same
15 | transaction which accessed them.
16 |
17 | ## Hierarchy
18 |
19 | - `default`
20 |
21 | ↳ **`SimulateUnnamedResourcesAccessed`**
22 |
23 | ## Table of contents
24 |
25 | ### Constructors
26 |
27 | - [constructor](modelsv2.SimulateUnnamedResourcesAccessed.md#constructor)
28 |
29 | ### Properties
30 |
31 | - [accounts](modelsv2.SimulateUnnamedResourcesAccessed.md#accounts)
32 | - [appLocals](modelsv2.SimulateUnnamedResourcesAccessed.md#applocals)
33 | - [apps](modelsv2.SimulateUnnamedResourcesAccessed.md#apps)
34 | - [assetHoldings](modelsv2.SimulateUnnamedResourcesAccessed.md#assetholdings)
35 | - [assets](modelsv2.SimulateUnnamedResourcesAccessed.md#assets)
36 | - [attribute\_map](modelsv2.SimulateUnnamedResourcesAccessed.md#attribute_map)
37 | - [boxes](modelsv2.SimulateUnnamedResourcesAccessed.md#boxes)
38 | - [extraBoxRefs](modelsv2.SimulateUnnamedResourcesAccessed.md#extraboxrefs)
39 |
40 | ### Methods
41 |
42 | - [get\_obj\_for\_encoding](modelsv2.SimulateUnnamedResourcesAccessed.md#get_obj_for_encoding)
43 | - [from\_obj\_for\_encoding](modelsv2.SimulateUnnamedResourcesAccessed.md#from_obj_for_encoding)
44 |
45 | ## Constructors
46 |
47 | ### constructor
48 |
49 | • **new SimulateUnnamedResourcesAccessed**(`«destructured»`)
50 |
51 | Creates a new `SimulateUnnamedResourcesAccessed` object.
52 |
53 | #### Parameters
54 |
55 | | Name | Type |
56 | | :------ | :------ |
57 | | `«destructured»` | `Object` |
58 | | › `accounts?` | `string`[] |
59 | | › `appLocals?` | [`ApplicationLocalReference`](modelsv2.ApplicationLocalReference.md)[] |
60 | | › `apps?` | (`number` \| `bigint`)[] |
61 | | › `assetHoldings?` | [`AssetHoldingReference`](modelsv2.AssetHoldingReference.md)[] |
62 | | › `assets?` | (`number` \| `bigint`)[] |
63 | | › `boxes?` | [`BoxReference`](modelsv2.BoxReference.md)[] |
64 | | › `extraBoxRefs?` | `number` \| `bigint` |
65 |
66 | #### Overrides
67 |
68 | BaseModel.constructor
69 |
70 | #### Defined in
71 |
72 | client/v2/algod/models/types.ts:4945
73 |
74 | ## Properties
75 |
76 | ### accounts
77 |
78 | • `Optional` **accounts**: `string`[]
79 |
80 | The unnamed accounts that were referenced. The order of this array is arbitrary.
81 |
82 | #### Defined in
83 |
84 | client/v2/algod/models/types.ts:4893
85 |
86 | ___
87 |
88 | ### appLocals
89 |
90 | • `Optional` **appLocals**: [`ApplicationLocalReference`](modelsv2.ApplicationLocalReference.md)[]
91 |
92 | The unnamed application local states that were referenced. The order of this
93 | array is arbitrary.
94 |
95 | #### Defined in
96 |
97 | client/v2/algod/models/types.ts:4899
98 |
99 | ___
100 |
101 | ### apps
102 |
103 | • `Optional` **apps**: (`number` \| `bigint`)[]
104 |
105 | The unnamed applications that were referenced. The order of this array is
106 | arbitrary.
107 |
108 | #### Defined in
109 |
110 | client/v2/algod/models/types.ts:4905
111 |
112 | ___
113 |
114 | ### assetHoldings
115 |
116 | • `Optional` **assetHoldings**: [`AssetHoldingReference`](modelsv2.AssetHoldingReference.md)[]
117 |
118 | The unnamed asset holdings that were referenced. The order of this array is
119 | arbitrary.
120 |
121 | #### Defined in
122 |
123 | client/v2/algod/models/types.ts:4911
124 |
125 | ___
126 |
127 | ### assets
128 |
129 | • `Optional` **assets**: (`number` \| `bigint`)[]
130 |
131 | The unnamed assets that were referenced. The order of this array is arbitrary.
132 |
133 | #### Defined in
134 |
135 | client/v2/algod/models/types.ts:4916
136 |
137 | ___
138 |
139 | ### attribute\_map
140 |
141 | • **attribute\_map**: `Record`\<`string`, `string`\>
142 |
143 | #### Inherited from
144 |
145 | BaseModel.attribute\_map
146 |
147 | #### Defined in
148 |
149 | client/v2/basemodel.ts:56
150 |
151 | ___
152 |
153 | ### boxes
154 |
155 | • `Optional` **boxes**: [`BoxReference`](modelsv2.BoxReference.md)[]
156 |
157 | The unnamed boxes that were referenced. The order of this array is arbitrary.
158 |
159 | #### Defined in
160 |
161 | client/v2/algod/models/types.ts:4921
162 |
163 | ___
164 |
165 | ### extraBoxRefs
166 |
167 | • `Optional` **extraBoxRefs**: `number` \| `bigint`
168 |
169 | The number of extra box references used to increase the IO budget. This is in
170 | addition to the references defined in the input transaction group and any
171 | referenced to unnamed boxes.
172 |
173 | #### Defined in
174 |
175 | client/v2/algod/models/types.ts:4928
176 |
177 | ## Methods
178 |
179 | ### get\_obj\_for\_encoding
180 |
181 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
182 |
183 | Get an object ready for encoding to either JSON or msgpack.
184 |
185 | #### Parameters
186 |
187 | | Name | Type | Default value | Description |
188 | | :------ | :------ | :------ | :------ |
189 | | `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. |
190 |
191 | #### Returns
192 |
193 | `Record`\<`string`, `any`\>
194 |
195 | #### Inherited from
196 |
197 | BaseModel.get\_obj\_for\_encoding
198 |
199 | #### Defined in
200 |
201 | client/v2/basemodel.ts:65
202 |
203 | ___
204 |
205 | ### from\_obj\_for\_encoding
206 |
207 | ▸ `Static` **from_obj_for_encoding**(`data`): [`SimulateUnnamedResourcesAccessed`](modelsv2.SimulateUnnamedResourcesAccessed.md)
208 |
209 | #### Parameters
210 |
211 | | Name | Type |
212 | | :------ | :------ |
213 | | `data` | `Record`\<`string`, `any`\> |
214 |
215 | #### Returns
216 |
217 | [`SimulateUnnamedResourcesAccessed`](modelsv2.SimulateUnnamedResourcesAccessed.md)
218 |
219 | #### Defined in
220 |
221 | client/v2/algod/models/types.ts:4983
222 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:capabilities:indexer.md:
--------------------------------------------------------------------------------
```markdown
1 | # Indexer lookups / searching
2 |
3 | Indexer lookups / searching is a higher-order use case capability provided by AlgoKit Utils that builds on top of the core capabilities. It provides type-safe indexer API wrappers (no more `Record<string, any>` pain), including automatic pagination control.
4 |
5 | To see some usage examples check out the [automated tests](../../src/indexer-lookup.spec.ts).
6 |
7 | To import the indexer functions you can:
8 |
9 | ```typescript
10 | import { indexer } from '@algorandfoundation/algokit-utils'
11 | ```
12 |
13 | All of the indexer functions require you to pass in an indexer SDK client, which you can get from [`AlgorandClient`](./algorand-client.md) via `algorand.client.indexer`. These calls are not made more easy to call by exposing via `AlgorandClient` and thus not requiring the indexer SDK client to be passed in. This is because we want to add a tiny bit of friction to using indexer, given it's an expensive API to run for node providers, the data from it can sometimes be slow and stale, and there are alternatives [that](https://github.com/algorandfoundation/algokit-subscriber-ts) [allow](https://github.com/algorand/conduit) individual projects to index subsets of chain data specific to them as a preferred option. In saying that, it's a very useful API for doing ad hoc data retrieval, writing automated tests, and many other uses.
14 |
15 | ## Indexer wrapper functions
16 |
17 | There is a subset of [indexer API calls](https://developer.algorand.org/docs/rest-apis/indexer) that are exposed as easy to use methods with correct typing exposed and automatic pagination for multi item returns.
18 |
19 | - [`indexer.lookupTransactionById(transactionId, algorand.client.indexer)`](../code/modules/index.md#lookuptransactionbyid) - Finds a transaction by ID
20 | - [`indexer.lookupAccountByAddress(accountAddress, algorand.client.indexer)`](../code/modules/index.md#lookupaccountbyaddress) - Finds an account by address
21 | - [`indexer.lookupAccountCreatedApplicationByAddress(algorand.client.indexer, address, getAll?, paginationLimit?)`](../code/modules/index.md#lookupaccountcreatedapplicationbyaddress) - Finds all applications created for an account
22 | - [`indexer.lookupAssetHoldings(algorand.client.indexer, assetId, options?, paginationLimit?)`](../code/modules/index.md#lookupassetholdings) - Finds all asset holdings for the given asset
23 | - [`indexer.searchTransactions(algorand.client.indexer, searchCriteria, paginationLimit?)`](../code/modules/index.md#searchtransactions) - Search for transactions with a given set of criteria
24 | - [`indexer.executePaginatedRequest(extractItems, buildRequest)`](../code/modules/index.md#executepaginatedrequest) - Execute the given indexer request with automatic pagination
25 |
26 | ### Search transactions example
27 |
28 | To use the `indexer.searchTransaction` method, you can follow this example as a starting point:
29 |
30 | ```typescript
31 | const transactions = await indexer.searchTransactions(algorand.client.indexer, (s) =>
32 | s.txType('pay').addressRole('sender').address(myAddress),
33 | )
34 | ```
35 |
36 | ### Automatic pagination example
37 |
38 | To use the `indexer.executePaginatedRequest` method, you can follow this example as a starting point:
39 |
40 | ```typescript
41 | const transactions = await executePaginatedRequest(
42 | (response: TransactionSearchResults) => {
43 | return response.transactions
44 | },
45 | (nextToken) => {
46 | let s = algorand.client.indexer.searchForTransactions().txType('pay').address(myAddress).limit(1000)
47 | if (nextToken) {
48 | s = s.nextToken(nextToken)
49 | }
50 | return s
51 | },
52 | )
53 | ```
54 |
55 | It takes the first lambda to translate the raw response into the array that should keep getting appended as the pagination is followed and the second lambda constructs the request (without the `.do()` call), including populating the pagination token.
56 |
57 | ## Indexer API response types
58 |
59 | The response model type definitions for the majority of [indexer API](https://developer.algorand.org/docs/rest-apis/indexer) are exposed from the `types/indexer` namespace in AlgoKit Utils. This is so that you can have a much better experience than the default response type of `Record<string, any>` from the indexer client in `algosdk`. If there is a type you want to use that is missing feel free to [submit a pull request](https://github.com/algorandfoundation/algokit-utils-ts/pulls) to [add the type(s)](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/indexer.ts).
60 |
61 | To access these types you can import them:
62 |
63 | ```typescript
64 | import { /* ... */ } '@algorandfoundation/algokit-utils/types/indexer'
65 | ```
66 |
67 | As a general convention, the response types are named `{TypeName}Result` for a single item result and `{TypeName}Results` for a multiple item result where `{TypeName}` is:
68 |
69 | - `{Entity}Lookup` for an API call response that returns a lookup for a single entity e.g. `AssetLookupResult`
70 | - `{Entity}Search` for an API call response that searches for a type of entity e.g. `TransactionSearchResults`
71 | - The `UpperCamelCase` name of a given model type as specified in the [official documentation](https://developer.algorand.org/docs/rest-apis/indexer) for any sub-types within a response e.g. `ApplicationResult`
72 |
73 | The reason `Result/Results` is suffixed to the type is to avoid type name clashes for commonly used types from `algosdk` like `Transaction`.
74 |
75 | To use these types with an indexer call you simply need to find the right result type and cast the response from `.do()` for the call in question, e.g.:
76 |
77 | ```typescript
78 | import { TransactionLookupResult } from '@algorandfoundation/algokit-utils/types/indexer'
79 |
80 | ...
81 |
82 | const transaction = (await algorand.client.indexer.lookupTransactionByID(transactionId).do()) as TransactionLookupResult
83 | ```
84 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0079.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 79
3 | title: URI scheme, App NoOp call extension
4 | description: A specification for encoding NoOp Application call Transactions in a URI format.
5 | author: MG (@emg110)
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/319
7 | status: Final
8 | type: Standards Track
9 | category: Interface
10 | sub-category: General
11 | created: 2024-09-11
12 | extends: 26
13 | ---
14 |
15 | ## Abstract
16 | NoOp calls are Generic application calls to execute the Algorand smart contract ApprovalPrograms.
17 |
18 | This URI specification proposes an extension to the base Algorand URI encoding standard ([ARC-26](./arc-0026.md)) that specifies encoding of application NoOp transactions into <a href="https://www.rfc-editor.org/rfc/rfc3986">RFC 3986</a> standard URIs.
19 |
20 | ## Specification
21 |
22 | ### General format
23 |
24 | As in [ARC-26](./arc-0026.md), URIs follow the general format for URIs as set forth in <a href="https://www.rfc-editor.org/rfc/rfc3986">RFC 3986</a>. The path component consists of an Algorand address, and the query component provides additional transaction parameters.
25 |
26 | Elements of the query component may contain characters outside the valid range. These are encoded differently depending on their expected character set. The text components (note, xnote) must first be encoded according to UTF-8, and then each octet of the corresponding UTF-8 sequence **MUST** be percent-encoded as described in RFC 3986. The binary components (args, refs, etc.) **MUST** be encoded with base64url as specified in <a href="https://www.rfc-editor.org/rfc/rfc4648.html#section-5">RFC 4648 section 5</a>.
27 |
28 | ### ABNF Grammar
29 |
30 | ```
31 | algorandurn = "algorand://" algorandaddress [ "?" noopparams ]
32 | algorandaddress = *base32
33 | noopparams = noopparam [ "&" noopparams ]
34 | noopparam = [ typeparam / appparam / methodparam / argparam / boxparam / assetarrayparam / accountarrayparam / apparrayparam / feeparam / otherparam ]
35 | typeparam = "type=appl"
36 | appparam = "app=" *digit
37 | methodparam = "method=" *qchar
38 | boxparam = "box=" *qbase64url
39 | argparam = "arg=" (*qchar | *digit)
40 | feeparam = "fee=" *digit
41 | accountparam = "account=" *base32
42 | assetparam = "asset=" *digit
43 | otherparam = qchar *qchar [ "=" *qchar ]
44 | ```
45 |
46 | - "qchar" corresponds to valid characters of an RFC 3986 URI query component, excluding the "=" and "&" characters, which this specification takes as separators.
47 | - "qbase64url" corresponds to valid characters of "base64url" encoding, as defined in <a href="https://www.rfc-editor.org/rfc/rfc4648.html#section-5">RFC 4648 section 5</a>
48 | - All params from the base [ARC-26](./arc-0026.md) standard, are supported and usable if fit the NoOp application call context (e.g. note)
49 | - As in the base [ARC-26](./arc-0026.md) standard, the scheme component ("algorand:") is case-insensitive, and implementations **MUST** accept any combination of uppercase and lowercase letters. The rest of the URI is case-sensitive, including the query parameter keys.
50 |
51 | ### Query Keys
52 |
53 | - address: Algorand address of transaction sender
54 |
55 | - type: fixed to "appl". Used to disambiguate the transaction type from the base [ARC-26](./arc-0026.md) standard and other possible extensions
56 |
57 | - app: The first reference is set to specify the called application (Algorand Smart Contract) ID and is mandatory. Additional references are optional and will be used in the Application NoOp call's foreign applications array.
58 |
59 | - method: Specify the full method expression (e.g "example_method(uint64,uint64)void").
60 |
61 | - arg: specify args used for calling NoOp method, to be encoded within URI.
62 |
63 | - box: Box references to be used in Application NoOp method call box array.
64 |
65 | - asset: Asset reference to be used in Application NoOp method call foreign assets array.
66 |
67 | - account: Account or nfd address to be used in Application NoOp method call foreign accounts array.
68 |
69 | - fee: Optional. An optional static fee to set for the transaction in microAlgos.
70 |
71 | - (others): optional, for future extensions
72 |
73 | Note 1: If the fee is omitted , it means that Minimum Fee is preferred to be used for transaction.
74 |
75 | ### Template URI vs actionable URI
76 |
77 | If the URI is constructed so that other dApps, wallets or protocols could use it with their runtime Algorand entities of interest, then :
78 |
79 | - The placeholder account/app address in URI **MUST** be ZeroAddress ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ"). Since ZeroAddress cannot initiate any action this approach is considered non-vulnerable and secure.
80 |
81 |
82 | ### Example
83 |
84 | Call claim(uint64,uint64)byte[] method on contract 11111111 paying a fee of 10000 micro ALGO from an specific address
85 |
86 | ```
87 | algorand://TMTAD6N22HCS2LKH7677L2KFLT3PAQWY6M4JFQFXQS32ECBFC23F57RYX4?type=appl&app=11111111&method=claim(uint64,uint64)byte[]&arg=20000&arg=474567&asset=45&fee=10000
88 | ```
89 |
90 | Call the same claim(uint64,uint64)byte[] method on contract 11111111 paying a default 1000 micro algo fee
91 |
92 | ```
93 | algorand://TMTAD6N22HCS2LKH7677L2KFLT3PAQWY6M4JFQFXQS32ECBFC23F57RYX4?type=appl&app=11111111&method=claim(uint64,uint64)byte[]&arg=20000&arg=474567&asset=45&app=22222222&app=33333333
94 | ```
95 |
96 |
97 |
98 | ## Rationale
99 |
100 | Algorand application NoOp method calls cover the majority of application transactions in Algorand and have a wide range of use-cases.
101 | For use-cases where the runtime knows exactly what the called application needs in terms of arguments and transaction arrays and there are no direct interactions, this extension will be required since ARC-26 standard does not currently support application calls.
102 |
103 | ## Security Considerations
104 |
105 | None.
106 |
107 | ## Copyright
108 |
109 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
110 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:modules:index.indexer.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [index](index.md) / indexer
2 |
3 | # Namespace: indexer
4 |
5 | [index](index.md).indexer
6 |
7 | ## Table of contents
8 |
9 | ### Type Aliases
10 |
11 | - [SearchForTransactions](index.indexer.md#searchfortransactions)
12 |
13 | ### Functions
14 |
15 | - [executePaginatedRequest](index.indexer.md#executepaginatedrequest)
16 | - [lookupAccountByAddress](index.indexer.md#lookupaccountbyaddress)
17 | - [lookupAccountCreatedApplicationByAddress](index.indexer.md#lookupaccountcreatedapplicationbyaddress)
18 | - [lookupAssetHoldings](index.indexer.md#lookupassetholdings)
19 | - [lookupTransactionById](index.indexer.md#lookuptransactionbyid)
20 | - [searchTransactions](index.indexer.md#searchtransactions)
21 |
22 | ## Type Aliases
23 |
24 | ### SearchForTransactions
25 |
26 | Ƭ **SearchForTransactions**: `ReturnType`\<`Indexer`[``"searchForTransactions"``]\>
27 |
28 | #### Defined in
29 |
30 | [src/indexer-lookup.ts:4](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/indexer-lookup.ts#L4)
31 |
32 | ## Functions
33 |
34 | ### executePaginatedRequest
35 |
36 | ▸ **executePaginatedRequest**\<`TResult`, `TRequest`\>(`extractItems`, `buildRequest`): `Promise`\<`TResult`[]\>
37 |
38 | #### Type parameters
39 |
40 | | Name | Type |
41 | | :------ | :------ |
42 | | `TResult` | `TResult` |
43 | | `TRequest` | extends `Object` |
44 |
45 | #### Parameters
46 |
47 | | Name | Type |
48 | | :------ | :------ |
49 | | `extractItems` | (`response`: `any`) => `TResult`[] |
50 | | `buildRequest` | (`nextToken?`: `string`) => `TRequest` |
51 |
52 | #### Returns
53 |
54 | `Promise`\<`TResult`[]\>
55 |
56 | #### Defined in
57 |
58 | [src/indexer-lookup.ts:145](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/indexer-lookup.ts#L145)
59 |
60 | ___
61 |
62 | ### lookupAccountByAddress
63 |
64 | ▸ **lookupAccountByAddress**(`accountAddress`, `indexer`): `Promise`\<`AccountResponse`\>
65 |
66 | #### Parameters
67 |
68 | | Name | Type | Description |
69 | | :------ | :------ | :------ |
70 | | `accountAddress` | `string` \| `Address` | The address of the account to look up |
71 | | `indexer` | `IndexerClient` | An indexer client |
72 |
73 | #### Returns
74 |
75 | `Promise`\<`AccountResponse`\>
76 |
77 | The result of the look-up
78 |
79 | **`Deprecated`**
80 |
81 | Use `indexer.lookupAccountByID(accountAddress).do()`.
82 | Looks up an account by address using Indexer.
83 |
84 | #### Defined in
85 |
86 | [src/indexer-lookup.ts:26](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/indexer-lookup.ts#L26)
87 |
88 | ___
89 |
90 | ### lookupAccountCreatedApplicationByAddress
91 |
92 | ▸ **lookupAccountCreatedApplicationByAddress**(`indexer`, `address`, `getAll?`, `paginationLimit?`): `Promise`\<`algosdk.indexerModels.Application`[]\>
93 |
94 | Looks up applications that were created by the given address; will automatically paginate through all data.
95 |
96 | #### Parameters
97 |
98 | | Name | Type | Default value | Description |
99 | | :------ | :------ | :------ | :------ |
100 | | `indexer` | `IndexerClient` | `undefined` | An indexer instance |
101 | | `address` | `string` \| `Address` | `undefined` | The address of the creator to look up |
102 | | `getAll` | `undefined` \| `boolean` | `undefined` | Whether or not to include deleted applications |
103 | | `paginationLimit?` | `number` | `undefined` | The number of records to return per paginated request, default 1000 |
104 |
105 | #### Returns
106 |
107 | `Promise`\<`algosdk.indexerModels.Application`[]\>
108 |
109 | The list of application results
110 |
111 | #### Defined in
112 |
113 | [src/indexer-lookup.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/indexer-lookup.ts#L38)
114 |
115 | ___
116 |
117 | ### lookupAssetHoldings
118 |
119 | ▸ **lookupAssetHoldings**(`indexer`, `assetId`, `options?`, `paginationLimit?`): `Promise`\<`algosdk.indexerModels.MiniAssetHolding`[]\>
120 |
121 | Looks up asset holdings for the given asset; will automatically paginate through all data.
122 |
123 | #### Parameters
124 |
125 | | Name | Type | Description |
126 | | :------ | :------ | :------ |
127 | | `indexer` | `IndexerClient` | An indexer instance |
128 | | `assetId` | `number` \| `bigint` | The ID of the asset to look up holdings for |
129 | | `options?` | [`LookupAssetHoldingsOptions`](../interfaces/types_indexer.LookupAssetHoldingsOptions.md) | Optional options to control the lookup |
130 | | `paginationLimit?` | `number` | The number of records to return per paginated request, default 1000 |
131 |
132 | #### Returns
133 |
134 | `Promise`\<`algosdk.indexerModels.MiniAssetHolding`[]\>
135 |
136 | The list of application results
137 |
138 | #### Defined in
139 |
140 | [src/indexer-lookup.ts:72](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/indexer-lookup.ts#L72)
141 |
142 | ___
143 |
144 | ### lookupTransactionById
145 |
146 | ▸ **lookupTransactionById**(`transactionId`, `indexer`): `Promise`\<`TransactionResponse`\>
147 |
148 | #### Parameters
149 |
150 | | Name | Type | Description |
151 | | :------ | :------ | :------ |
152 | | `transactionId` | `string` | The ID of the transaction to look up |
153 | | `indexer` | `IndexerClient` | An indexer client |
154 |
155 | #### Returns
156 |
157 | `Promise`\<`TransactionResponse`\>
158 |
159 | The result of the look-up
160 |
161 | **`Deprecated`**
162 |
163 | Use `indexer.lookupTransactionByID(transactionId).do()`.
164 | Looks up a transaction by ID using Indexer.
165 |
166 | #### Defined in
167 |
168 | [src/indexer-lookup.ts:15](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/indexer-lookup.ts#L15)
169 |
170 | ___
171 |
172 | ### searchTransactions
173 |
174 | ▸ **searchTransactions**(`indexer`, `searchCriteria`, `paginationLimit?`): `Promise`\<`algosdk.indexerModels.TransactionsResponse`\>
175 |
176 | Allows transactions to be searched for the given criteria.
177 |
178 | #### Parameters
179 |
180 | | Name | Type | Description |
181 | | :------ | :------ | :------ |
182 | | `indexer` | `IndexerClient` | An indexer client |
183 | | `searchCriteria` | (`s`: `default`) => `default` | The criteria to search for |
184 | | `paginationLimit?` | `number` | The number of records to return per paginated request, default 1000 |
185 |
186 | #### Returns
187 |
188 | `Promise`\<`algosdk.indexerModels.TransactionsResponse`\>
189 |
190 | The search results
191 |
192 | #### Defined in
193 |
194 | [src/indexer-lookup.ts:111](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/indexer-lookup.ts#L111)
195 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/docs:.walletconnect:walletconnect-schema.md:
--------------------------------------------------------------------------------
```markdown
1 | title: Schema
2 |
3 | # Background
4 |
5 | - [WalletConnect](https://docs.walletconnect.org/) 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.
6 | - v1 of WC (currently deployed) has first-party support for Ethereum chains, but it can be extended to other chains through custom message schema. [Binance Chain does this with their custom schema](https://docs.binance.org/guides/concepts/walletconnect.html#protocol-differences).
7 |
8 | # Purpose
9 |
10 | The purpose of this document is to define a custom WalletConnect schema for Algorand. The schema in this document is based on the [Algorand Foundation’s Wallet Transaction Signing API](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md), and it attempts to be as similar to that as possible. The main contribution of this document is to define how that schema can be used with WalletConnect.
11 |
12 | # Schema
13 |
14 | !!! Note
15 | All interfaces are defined in TypeScript. These interfaces are designed to be serializable to and from valid JSON objects.
16 |
17 | A WalletConnect schema is a set of JSON-RPC 2.0 requests and responses. WalletConnect will send requests to the Algorand Wallet and will receive either signed transactions or failures as responses. All requests adhere to the following structure:
18 |
19 | ```
20 | interface JsonRpcRequest {
21 | id: number;
22 | jsonrpc: "2.0";
23 | method: string;
24 | params: any[];
25 | }
26 | ```
27 |
28 | A successful request will return a response that adheres to the following structure:
29 |
30 | ```
31 | interface JsonRpcResponse {
32 | id: number; // will be the same as the request's id
33 | jsonrpc: "2.0";
34 | result: any;
35 | }
36 | ```
37 |
38 | The Algorand schema consists of the requests and responses below.
39 |
40 | ## algo_signTxn
41 |
42 | This request is used to ask a wallet to sign one or more transactions in an atomic transaction group.
43 |
44 | ### Request
45 |
46 | This request adheres to the following structure:
47 |
48 | ```
49 | interface AlgoSignTxnRequest {
50 | id: number;
51 | jsonrpc: "2.0";
52 | method: "algo_signTxn";
53 | params: SignTxnParams;
54 | }
55 | ```
56 |
57 | The parameters `SignTxnParams`, are defined as:
58 | `type SignTxnParams = [WalletTransaction[], SignTxnOpts?];`
59 |
60 | !!! Note
61 | `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.
62 |
63 | The first element in the tuple is an array of `WalletTransaction` objects. The length of this array must be between 1 and 16 (inclusive on both ends). Each transaction in the group (even ones not being signed by the wallet) must be an element in this array.
64 |
65 | The second element in the tuple is an `SignTxnOpts` object, which is optional.
66 |
67 | The `WalletTransaction` and `SignTxnOpts` types are defined as:
68 |
69 | ```
70 | interface WalletTransaction {
71 | /**
72 | * Base64 encoding of the canonical msgpack encoding of a
73 | * Transaction.
74 | */
75 | txn: string;
76 |
77 | /**
78 | * Optional authorized address used to sign the transaction when
79 | * the account is rekeyed. Also called the signor/sgnr.
80 | */
81 | authAddr?: AlgorandAddress;
82 |
83 | /**
84 | * Optional multisig metadata used to sign the transaction
85 | */
86 | msig?: MultisigMetadata;
87 |
88 | /**
89 | * Optional list of addresses that must sign the transactions
90 | */
91 | signers?: AlgorandAddress[];
92 |
93 | /**
94 | * Optional message explaining the reason of the transaction
95 | */
96 | message?: string;
97 | }
98 |
99 | interface SignTxnOpts {
100 | /**
101 | * Optional message explaining the reason of the group of
102 | * transactions.
103 | */
104 | message?: string;
105 |
106 | // other options may be present, but are not standard
107 | }
108 | ```
109 |
110 | The above interfaces reference AlgorandAddress and MultisigMetadata types. These are defined as:
111 |
112 | ```
113 | /**
114 | * AlgorandAddress is a 58-character base32 string that represents an
115 | * Algorand address with a checksum.
116 | */
117 | type AlgorandAddress = string;
118 |
119 | /**
120 | * Options for creating and using a multisignature account.
121 | */
122 | interface MultisigMetadata {
123 | /**
124 | * Multisig version.
125 | */
126 | version: number;
127 |
128 | /**
129 | * Multisig threshold value. Authorization requires a subset of
130 | * signatures, equal to or greater than the threshold value.
131 | */
132 | threshold: number;
133 |
134 | /**
135 | * List of Algorand addresses of possible signers for this
136 | * multisig. Order is important.
137 | */
138 | addrs: AlgorandAddress[];
139 | }
140 | ```
141 |
142 | A description for each parameter in `WalletTransaction` can be found here: https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#interface-wallettransaction
143 |
144 | ### Response
145 |
146 | If the wallet approves the request, it will send back the following response:
147 |
148 | ```
149 | interface AlgoSignTxnResponse {
150 | id: number;
151 | jsonrpc: "2.0";
152 | result: Array<string | null>;
153 | }
154 | ```
155 |
156 | In this response, result is an array with the same length as the request params. For every integer `i` such that `0 <= i < result.length`:
157 |
158 | - If the transaction at index `i` in the group should be signed by the wallet (i.e. `params[0][i].signers` is not an empty array) : `result[i]` will be a base64-encoded string containing the msgpack-encoded signed transaction `params[i].txn`.
159 | - Otherwise: `result[i]` will be null, since the wallet was not requested to sign this transaction.
160 |
161 | If the wallet does not approve signing every transaction whose signature is being requested, the request must fail. A failure like this should be indicated in the rejection message as described [here](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#error-standards).
162 |
163 | # Future Additions
164 |
165 | Possible future additions to the schema may include:
166 |
167 | - A request type for wallets to sign a LogicSig program, resulting in a delegated LogicSig spending program for an account.
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:python:code:example:global_storage.md:
--------------------------------------------------------------------------------
```markdown
1 | # Global Storage in Algorand Smart Contracts
2 |
3 | This guide demonstrates how to work with global state in Algorand smart contracts using Python. Global state allows contracts to store and manage data that is accessible across all interactions with the contract.
4 |
5 | ## Initializing Global State
6 |
7 | ```python
8 | from algopy import (
9 | Account,
10 | Application,
11 | ARC4Contract,
12 | Asset,
13 | Bytes,
14 | GlobalState,
15 | UInt64,
16 | arc4,
17 | )
18 |
19 | class GlobalStorage(ARC4Contract):
20 | def __init__(self) -> None:
21 | # Integer storage
22 | self.global_int_full = GlobalState(UInt64(50)) # With default value
23 | self.global_int_simplified = UInt64(10) # Simplified syntax
24 | self.global_int_no_default = GlobalState(UInt64) # No default value
25 |
26 | # Bytes storage
27 | self.global_bytes_full = GlobalState(Bytes(b"Hello")) # With default value
28 | self.global_bytes_simplified = Bytes(b"Hello") # Simplified syntax
29 | self.global_bytes_no_default = GlobalState(Bytes) # No default value
30 |
31 | # Boolean storage
32 | self.global_bool_simplified = True # Simplified boolean
33 | self.global_bool_no_default = GlobalState(bool) # No default value
34 |
35 | # Special types
36 | self.global_asset = GlobalState(Asset) # Asset reference
37 | self.global_application = GlobalState(Application) # Application reference
38 | self.global_account = GlobalState(Account) # Account reference
39 | ```
40 |
41 | ### Key Points about Initialization
42 | - Can use `GlobalState` with or without default values
43 | - Simplified syntax available for basic types
44 | - Supports various data types including integers, bytes, booleans
45 | - Special types for assets, applications, and accounts
46 |
47 | ## Reading Global State
48 |
49 | ### Basic Reading
50 |
51 | ```python
52 | @arc4.abimethod
53 | def get_global_state(self) -> UInt64:
54 | # Get value with default if not set
55 | return self.global_int_full.get(default=UInt64(0))
56 |
57 | @arc4.abimethod
58 | def maybe_global_state(self) -> tuple[UInt64, bool]:
59 | # Get value and existence flag
60 | int_value, int_exists = self.global_int_full.maybe()
61 | if not int_exists:
62 | int_value = UInt64(0)
63 | return int_value, int_exists
64 | ```
65 |
66 | ### Reading Different Types
67 |
68 | ```python
69 | @arc4.abimethod
70 | def get_global_state_example(self) -> bool:
71 | # Reading integers
72 | assert self.global_int_full.get(default=UInt64(0)) == 50
73 | assert self.global_int_simplified == UInt64(10)
74 |
75 | # Reading bytes
76 | assert self.global_bytes_full.get(Bytes(b"default")) == b"Hello"
77 |
78 | # Reading special types
79 | asset_value, exists = self.global_asset.maybe()
80 | assert asset_value == Asset(UInt64(10))
81 |
82 | app_value, exists = self.global_application.maybe()
83 | assert app_value == Application(UInt64(10))
84 |
85 | return True
86 | ```
87 |
88 | ## Writing Global State
89 |
90 | ### Basic Writing
91 |
92 | ```python
93 | @arc4.abimethod
94 | def set_global_state(self, value: Bytes) -> None:
95 | self.global_bytes_full.value = value
96 |
97 | @arc4.abimethod
98 | def set_global_state_example(
99 | self,
100 | value_bytes: Bytes,
101 | value_asset: Asset,
102 | *,
103 | value_bool: bool,
104 | ) -> None:
105 | # Setting different types
106 | self.global_bytes_no_default.value = value_bytes
107 | self.global_bool_no_default.value = value_bool
108 | self.global_asset.value = value_asset
109 | ```
110 |
111 | ## Deleting Global State
112 |
113 | ```python
114 | @arc4.abimethod
115 | def del_global_state(self) -> bool:
116 | # Delete a single value
117 | del self.global_int_full.value
118 | return True
119 |
120 | @arc4.abimethod
121 | def del_global_state_example(self) -> bool:
122 | # Delete multiple values
123 | del self.global_bytes_no_default.value
124 | del self.global_bool_no_default.value
125 | del self.global_asset.value
126 | return True
127 | ```
128 |
129 | ## Value Property Access
130 |
131 | ```python
132 | @arc4.abimethod
133 | def check_global_state_example(self) -> bool:
134 | # Direct value access
135 | assert self.global_int_full.value == 50
136 | assert self.global_bytes_full.value == Bytes(b"Hello")
137 |
138 | # Simplified syntax access
139 | assert self.global_int_simplified == 10
140 | assert self.global_bytes_simplified == b"Hello"
141 | assert bool(self.global_bool_simplified)
142 |
143 | # Check existence
144 | assert not self.global_int_no_default
145 | assert not self.global_bytes_no_default
146 |
147 | # Special types access
148 | assert self.global_asset.value == Asset(UInt64(10))
149 | assert self.global_application.value == Application(UInt64(10))
150 | assert self.global_account.value == Account(Bytes(b"Hello"))
151 | return True
152 | ```
153 |
154 | ## Best Practices
155 |
156 | 1. **Initialization**:
157 | - Use appropriate types for your data
158 | - Consider whether default values are needed
159 | - Use simplified syntax when appropriate
160 | - Document the purpose of each state variable
161 |
162 | 2. **Reading State**:
163 | - Use `get()` with default values for safe access
164 | - Use `maybe()` when you need to check existence
165 | - Handle non-existent values gracefully
166 | - Verify type consistency
167 |
168 | 3. **Writing State**:
169 | - Validate data before writing
170 | - Use appropriate type conversions
171 | - Consider storage costs
172 | - Update related state consistently
173 |
174 | 4. **Deleting State**:
175 | - Clean up unused state to save storage
176 | - Verify deletion success
177 | - Handle deletion errors gracefully
178 | - Consider impact on related state
179 |
180 | 5. **Type Safety**:
181 | - Use proper type annotations
182 | - Verify type compatibility
183 | - Handle type conversions explicitly
184 | - Test with various data types
185 |
186 | 6. **Performance**:
187 | - Minimize state operations
188 | - Use appropriate data structures
189 | - Consider storage costs
190 | - Optimize state access patterns
191 |
192 | This guide demonstrates the various aspects of working with global state in Algorand smart contracts using Python. Understanding these concepts is crucial for developing efficient and reliable smart contracts.
193 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/docs:.walletconnect:index.md:
--------------------------------------------------------------------------------
```markdown
1 | title: WalletConnect
2 |
3 | ## What is WalletConnect protocol?
4 |
5 | [WalletConnect](https://walletconnect.org/) 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 not an app, not a blockchain and has no token. The protocol is implemented directly within the official Algorand Wallet and allows any dApp developer to add it to their application workflows.
6 |
7 | ## Why should I care?
8 |
9 | From an end user standpoint, they really don’t need to understand _how_ it works, but they will need to accept the _connection request_ initiated by the dApp within their mobile wallet. As a dApp developer you’ll want to understand some basics about the protocol for a successful integration and provide a seamless user experience. Algorand provides a [custom WalletConnect schema](./walletconnect-schema.md) and a [quick start guide](#quick-start-for-dapp-devs) for accelerating integrations.
10 |
11 | <center></center>
12 |
13 | The official Algorand Wallet is among the leading crypto wallets supporting the WalletConnect protocol as the industry standard for secure payment prompts and application call transactions. Importantly, user's private keys never leave their mobile device and are never exposed to connected dApps. Adding a Ledger Nano device to the Algorand Wallet further extends the user's security profile while maintaining connection simplicity enabled by the WalletConnect integration.
14 |
15 | ## How it works
16 |
17 | Communication between the dApp and the mobile wallet (_peers_) happens over a _bridge server_ that relays messages without access to their content. Message contents are symmetrically encrypted through a shared key between the two peers using session data. The connection is initiated by the dApp displaying a QR Code or deep link with a standard WalletConnect URI and is established when the user approves this connection request within their Algorand Wallet. Public bridge servers are maintained by WalletConnect and dApp developers may also deploy their own.
18 |
19 | Information exchange between the peers typically consists of an unsigned atomic transaction group from the dApp to the mobile wallet, which is then inspected by the user, signed and returned back to the dApp. The dApp will submit the signed object for confirmation by the Algorand network which will effect balances and state accordingly.
20 |
21 | <center></center>
22 |
23 | ## Quick start for dApp devs
24 |
25 | The TypeScript sample code below should allow a dApp developer to establish a connection and request a simple payment transaction for signature.
26 |
27 | ### Install
28 |
29 | === "yarn"
30 | ```bash
31 | yarn add @walletconnect/client algorand-walletconnect-qrcode-modal algosdk @json-rpc-tools/utils
32 | ```
33 |
34 | === "npm"
35 | ```bash
36 | npm install --save @walletconnect/client algorand-walletconnect-qrcode-modal algosdk @json-rpc-tools/utils
37 | ```
38 |
39 | !!! Info
40 | Developers are encouraged to watch the [walletconnect-monorepo](https://github.com/WalletConnect/walletconnect-monorepo/releases) for new releases. Rebuild and deploy your dApp to utilize new features and performance enhancements.
41 |
42 | ### Initiate Connection
43 |
44 | ```typescript
45 | import WalletConnect from "@walletconnect/client";
46 | import QRCodeModal from "algorand-walletconnect-qrcode-modal";
47 | import algosdk from "algosdk";
48 | import { formatJsonRpcRequest } from "@json-rpc-tools/utils";
49 |
50 | // Create a connector
51 | const connector = new WalletConnect({
52 | bridge: "https://bridge.walletconnect.org", // Required
53 | qrcodeModal: QRCodeModal,
54 | });
55 |
56 | // Check if connection is already established
57 | if (!connector.connected) {
58 | // create new session
59 | connector.createSession();
60 | }
61 |
62 | // Subscribe to connection events
63 | connector.on("connect", (error, payload) => {
64 | if (error) {
65 | throw error;
66 | }
67 |
68 | // Get provided accounts
69 | const { accounts } = payload.params[0];
70 | });
71 |
72 | connector.on("session_update", (error, payload) => {
73 | if (error) {
74 | throw error;
75 | }
76 |
77 | // Get updated accounts
78 | const { accounts } = payload.params[0];
79 | });
80 |
81 | connector.on("disconnect", (error, payload) => {
82 | if (error) {
83 | throw error;
84 | }
85 | });
86 | ```
87 |
88 | ### Sign Transaction
89 |
90 | ```typescript
91 | // Draft transaction
92 | const txn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({
93 | from: "ALICEU3WMO5XYJVSODKJSYLFILIXXBEXHKIVSMX7GMGXJAYGFCJKVSQTUE",
94 | to: "HZ57J3K46JIJXILONBBZOHX6BKPXEM2VVXNRFSUED6DKFD5ZD24PMJ3MVA",
95 | amount: 100000,
96 | suggestedParams,
97 | });
98 |
99 | // Sign transaction
100 | // txns is an array of algosdk.Transaction like below
101 | // i.e txns = [txn, ...someotherTxns], but we've only built one transaction in our case
102 | const txns = [txn]
103 | const txnsToSign = txns.map(txn => {
104 | const encodedTxn = Buffer.from(algosdk.encodeUnsignedTransaction(txn)).toString("base64");
105 |
106 | return {
107 | txn: encodedTxn,
108 | message: 'Description of transaction being signed',
109 | // Note: if the transaction does not need to be signed (because it's part of an atomic group
110 | // that will be signed by another party), specify an empty singers array like so:
111 | // signers: [],
112 | };
113 | });
114 |
115 | const requestParams = [txnsToSign];
116 |
117 | const request = formatJsonRpcRequest("algo_signTxn", requestParams);
118 | const result: Array<string | null> = await this.connector.sendCustomRequest(request);
119 | const decodedResult = result.map(element => {
120 | return element ? new Uint8Array(Buffer.from(element, "base64")) : null;
121 | });
122 | ```
123 |
124 | ### Close Connection
125 |
126 | ```TypeScript
127 | // Delete connector
128 | connector.killSession();
129 | ```
130 |
131 | ## Next Steps
132 |
133 | A [detailed example](https://github.com/algorand/walletconnect-example-dapp) is offered in React and a [live demo](https://algorand.github.io/walletconnect-example-dapp/) is available on TestNet.
134 |
```