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 | ```