This is page 29 of 93. Use http://codebase.md/goplausible/algorand-mcp?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── llms-install.md
├── llms.txt
├── package.json
├── packages
│ ├── client
│ │ ├── .env.example
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── src
│ │ │ ├── env.ts
│ │ │ ├── index.ts
│ │ │ └── LocalWallet.ts
│ │ └── tsconfig.json
│ └── server
│ ├── .env.example
│ ├── API specs
│ │ ├── algod_api.json
│ │ ├── indexer_api.json
│ │ ├── mcp.json
│ │ ├── nfd_api.json
│ │ ├── ultrade_api.json
│ │ ├── vestige_api.json
│ │ └── vestige_free_api.json
│ ├── Dockerfile
│ ├── jest.config.js
│ ├── package.json
│ ├── README.md
│ ├── smithery.yaml
│ ├── src
│ │ ├── algorand-client.ts
│ │ ├── env.ts
│ │ ├── index.ts
│ │ ├── resources
│ │ │ ├── index.ts
│ │ │ ├── knowledge
│ │ │ │ ├── ARCs.txt
│ │ │ │ ├── developers-algokit-architecture-decisions.txt
│ │ │ │ ├── developers-algokit-cli.txt
│ │ │ │ ├── developers-algokit-utils-python.txt
│ │ │ │ ├── developers-algokit-utils-typescript.txt
│ │ │ │ ├── developers-clis.txt
│ │ │ │ ├── developers-details.txt
│ │ │ │ ├── developers-liquid-auth.txt
│ │ │ │ ├── developers-nodes.txt
│ │ │ │ ├── developers-puya.txt
│ │ │ │ ├── developers-python.txt
│ │ │ │ ├── developers-sdks-js.txt
│ │ │ │ ├── developers-sdks-python.txt
│ │ │ │ ├── developers-tealscript.txt
│ │ │ │ ├── developers.txt
│ │ │ │ ├── index.ts
│ │ │ │ ├── taxonomy
│ │ │ │ │ ├── algokit-cli:README.md
│ │ │ │ │ ├── algokit:cli:algokit.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-14_sandbox-approach.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-22_beaker-testing-strategy.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_beaker_productionisation_review.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_brew_install.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-12_smart-contract-deployment.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-06-06_frontend-templates.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-07-19_advanced_generate_command.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-13_native_binaries.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-23_init-wizard-v2.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-31_binary_distribution.md
│ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-03-06_local_dev_ui_packaging.md
│ │ │ │ │ ├── algokit:cli:articles:output_stability.md
│ │ │ │ │ ├── algokit:cli:cli:index.md
│ │ │ │ │ ├── algokit:cli:features:compile.md
│ │ │ │ │ ├── algokit:cli:features:completions.md
│ │ │ │ │ ├── algokit:cli:features:config.md
│ │ │ │ │ ├── algokit:cli:features:dispenser.md
│ │ │ │ │ ├── algokit:cli:features:doctor.md
│ │ │ │ │ ├── algokit:cli:features:explore.md
│ │ │ │ │ ├── algokit:cli:features:generate.md
│ │ │ │ │ ├── algokit:cli:features:goal.md
│ │ │ │ │ ├── algokit:cli:features:init.md
│ │ │ │ │ ├── algokit:cli:features:localnet.md
│ │ │ │ │ ├── algokit:cli:features:project:bootstrap.md
│ │ │ │ │ ├── algokit:cli:features:project:deploy.md
│ │ │ │ │ ├── algokit:cli:features:project:link.md
│ │ │ │ │ ├── algokit:cli:features:project:list.md
│ │ │ │ │ ├── algokit:cli:features:project:run.md
│ │ │ │ │ ├── algokit:cli:features:project.md
│ │ │ │ │ ├── algokit:cli:features:tasks:analyze.md
│ │ │ │ │ ├── algokit:cli:features:tasks:ipfs.md
│ │ │ │ │ ├── algokit:cli:features:tasks:mint.md
│ │ │ │ │ ├── algokit:cli:features:tasks:nfd.md
│ │ │ │ │ ├── algokit:cli:features:tasks:opt.md
│ │ │ │ │ ├── algokit:cli:features:tasks:send.md
│ │ │ │ │ ├── algokit:cli:features:tasks:sign.md
│ │ │ │ │ ├── algokit:cli:features:tasks:transfer.md
│ │ │ │ │ ├── algokit:cli:features:tasks:vanity_address.md
│ │ │ │ │ ├── algokit:cli:features:tasks:wallet.md
│ │ │ │ │ ├── algokit:cli:features:tasks.md
│ │ │ │ │ ├── algokit:cli:tutorials:algokit-template.md
│ │ │ │ │ ├── algokit:cli:tutorials:intro.md
│ │ │ │ │ ├── algokit:cli:tutorials:smart-contracts.md
│ │ │ │ │ ├── algokit:docs:testnet_api.md
│ │ │ │ │ ├── algokit:lora:README.md
│ │ │ │ │ ├── algokit:README.md
│ │ │ │ │ ├── algokit:utils:python:markdown:apidocs:algokit_utils:algokit_utils.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:debugger.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:python:markdown:index.md
│ │ │ │ │ ├── algokit:utils:python:README.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:debugger.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:python:source:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:python:source:index.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:account.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:algorand-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:amount.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-deploy.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:app.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:asset.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:debugging.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:dispenser-client.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:event-emitter.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:testing.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction-composer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:transfer.md
│ │ │ │ │ ├── algokit:utils:typescript:capabilities:typed-app-clients.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TestLogger.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TransactionLogger.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account_manager.AccountManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.MultisigAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.SigningAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client.AlgorandClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_amount.AlgoAmount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_arc56.Arc56Method.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.AppClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.ApplicationClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_deployer.AppDeployer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_factory.AppFactory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_manager.AppManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_asset_manager.AssetManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_async_event_emitter.AsyncEventEmitter.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_client_manager.ClientManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_composer.TransactionComposer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_config.UpdatableConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_dispenser_client.TestNetDispenserApiClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_kmd_account_manager.KmdAccountManager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_logic_error.LogicError.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnSchemaBreak.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnUpdate.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.AccountStatus.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.ApplicationOnComplete.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.SignatureType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_lifecycle_events.EventType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account_manager.EnsureFundedResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.AccountConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.TransactionSignerAccount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_algorand_client_interface.AlgorandClientInterface.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Arc56Contract.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Event.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Method.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.ProgramSourceInfo.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageKey.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageMap.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StructField.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallABIArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallCoreParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCallInterfaceParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCoreParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppSourceMaps.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.FundAppAccountParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppById.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppByIdBase.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.SourceMapExport.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppLookup.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_factory.AppFactoryParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.AppInformation.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValueRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValuesRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSources.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.CallConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.DeclaredSchemaValueSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Hint.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.ReservedSchemaValueSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Schema.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.SchemaSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.StateSchemaSpec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Struct.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallTransactionResultOfType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCompilationResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeployMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppLookup.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppMetadata.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppState.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppStorageSchema.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxName.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxReference.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValueRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValuesRequestParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CompiledTeal.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CoreAppCallArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CreateAppParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.RawAppCallArgs.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.TealTemplateParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.UpdateAppParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.BulkAssetOptInOutResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetBulkOptInOutParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptInParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.CreateAssetParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.AlgoSdkClients.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppClient.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppFactory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_composer.BuiltTransactions.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_config.Config.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.AVMTracesEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourceDebugEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourcesDebugEventData.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserFundResponse.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserLimitResponse.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.TestNetDispenserApiClientParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_indexer.LookupAssetHoldingsOptions.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_logic_error.LogicErrorDetails.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoClientConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.NetworkDetails.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgoKitLogCaptureFixture.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixture.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixtureConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandTestAutomationContext.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.GetTestAccountParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.LogSnapshotConfig.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.AtomicTransactionComposerToSend.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendAtomicTransactionComposerResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResult.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResults.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionGroupToSend.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionToSign.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoRekeyParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedReturnType.md
│ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:testing.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algo_http_client_with_retry.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_interface.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_creator.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_sender.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transfer_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_arc56.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_deployer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory_and_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_composer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_config.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_debugging.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client_spec.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_expand.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_indexer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_kmd_account_manager.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_lifecycle_events.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logging.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logic_error.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_network_client.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_testing.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transaction.md
│ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transfer.md
│ │ │ │ │ ├── algokit:utils:typescript:code:README.md
│ │ │ │ │ ├── algokit:utils:typescript:README.md
│ │ │ │ │ ├── algokit:utils:typescript:v7-migration.md
│ │ │ │ │ ├── algokit:utils:typescript:v8-migration.md
│ │ │ │ │ ├── ARCs:ARC-template.md
│ │ │ │ │ ├── ARCs:assets:arc-0012:README.md
│ │ │ │ │ ├── ARCs:assets:arc-0034:TemplateForm.md
│ │ │ │ │ ├── ARCs:assets:arc-0062:README.md
│ │ │ │ │ ├── ARCs:pages:nfts.md
│ │ │ │ │ ├── ARCs:pages:wallets.md
│ │ │ │ │ ├── ARCs:README.md
│ │ │ │ │ ├── ARCs:specs:arc-0000.md
│ │ │ │ │ ├── ARCs:specs:arc-0001.md
│ │ │ │ │ ├── ARCs:specs:arc-0002.md
│ │ │ │ │ ├── ARCs:specs:arc-0003.md
│ │ │ │ │ ├── ARCs:specs:arc-0004.md
│ │ │ │ │ ├── ARCs:specs:arc-0005.md
│ │ │ │ │ ├── ARCs:specs:arc-0006.md
│ │ │ │ │ ├── ARCs:specs:arc-0007.md
│ │ │ │ │ ├── ARCs:specs:arc-0008.md
│ │ │ │ │ ├── ARCs:specs:arc-0009.md
│ │ │ │ │ ├── ARCs:specs:arc-0010.md
│ │ │ │ │ ├── ARCs:specs:arc-0011.md
│ │ │ │ │ ├── ARCs:specs:arc-0012.md
│ │ │ │ │ ├── ARCs:specs:arc-0015.md
│ │ │ │ │ ├── ARCs:specs:arc-0016.md
│ │ │ │ │ ├── ARCs:specs:arc-0018.md
│ │ │ │ │ ├── ARCs:specs:arc-0019.md
│ │ │ │ │ ├── ARCs:specs:arc-0020.md
│ │ │ │ │ ├── ARCs:specs:arc-0021.md
│ │ │ │ │ ├── ARCs:specs:arc-0022.md
│ │ │ │ │ ├── ARCs:specs:arc-0023.md
│ │ │ │ │ ├── ARCs:specs:arc-0025.md
│ │ │ │ │ ├── ARCs:specs:arc-0026.md
│ │ │ │ │ ├── ARCs:specs:arc-0028.md
│ │ │ │ │ ├── ARCs:specs:arc-0032.md
│ │ │ │ │ ├── ARCs:specs:arc-0033.md
│ │ │ │ │ ├── ARCs:specs:arc-0034.md
│ │ │ │ │ ├── ARCs:specs:arc-0035.md
│ │ │ │ │ ├── ARCs:specs:arc-0036.md
│ │ │ │ │ ├── ARCs:specs:arc-0042.md
│ │ │ │ │ ├── ARCs:specs:arc-0047.md
│ │ │ │ │ ├── ARCs:specs:arc-0048.md
│ │ │ │ │ ├── ARCs:specs:arc-0049.md
│ │ │ │ │ ├── ARCs:specs:arc-0054.md
│ │ │ │ │ ├── ARCs:specs:arc-0055.md
│ │ │ │ │ ├── ARCs:specs:arc-0056.md
│ │ │ │ │ ├── ARCs:specs:arc-0059.md
│ │ │ │ │ ├── ARCs:specs:arc-0062.md
│ │ │ │ │ ├── ARCs:specs:arc-0065.md
│ │ │ │ │ ├── ARCs:specs:arc-0069.md
│ │ │ │ │ ├── ARCs:specs:arc-0072.md
│ │ │ │ │ ├── ARCs:specs:arc-0073.md
│ │ │ │ │ ├── ARCs:specs:arc-0074.md
│ │ │ │ │ ├── ARCs:specs:arc-0076.md
│ │ │ │ │ ├── ARCs:specs:arc-0078.md
│ │ │ │ │ ├── ARCs:specs:arc-0079.md
│ │ │ │ │ ├── ARCs:specs:arc-0200.md
│ │ │ │ │ ├── clis_index.md
│ │ │ │ │ ├── developer:docs:about.md
│ │ │ │ │ ├── developer:docs:clis:algokey:algokey.md
│ │ │ │ │ ├── developer:docs:clis:algokey:generate.md
│ │ │ │ │ ├── developer:docs:clis:algokey:import.md
│ │ │ │ │ ├── developer:docs:clis:algokey:multisig:append-auth-addr.md
│ │ │ │ │ ├── developer:docs:clis:algokey:multisig:multisig.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:info.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:part.md
│ │ │ │ │ ├── developer:docs:clis:algokey:part:reparent.md
│ │ │ │ │ ├── developer:docs:clis:algokey:sign.md
│ │ │ │ │ ├── developer:docs:clis:conduit:conduit.md
│ │ │ │ │ ├── developer:docs:clis:conduit:init.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:exporters.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:importers.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:list.md
│ │ │ │ │ ├── developer:docs:clis:conduit:list:processors.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:diagcfg.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:disable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:enable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:metric.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:status.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:disable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:enable.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:endpoint.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:name.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:status.md
│ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:telemetry.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:restart.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:start.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:status.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:stop.md
│ │ │ │ │ ├── developer:docs:clis:goal:node:wait.md
│ │ │ │ │ ├── developer:docs:clis:goal:protocols.md
│ │ │ │ │ ├── developer:docs:clis:goal:report.md
│ │ │ │ │ ├── developer:docs:clis:goal:version.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:list.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:new.md
│ │ │ │ │ ├── developer:docs:clis:goal:wallet:wallet.md
│ │ │ │ │ ├── developer:docs:clis:indexer:api-config.md
│ │ │ │ │ ├── developer:docs:clis:indexer:daemon.md
│ │ │ │ │ ├── developer:docs:clis:indexer:indexer.md
│ │ │ │ │ ├── developer:docs:clis:indexer:util:util.md
│ │ │ │ │ ├── developer:docs:clis:indexer:util:validator.md
│ │ │ │ │ ├── developer:docs:clis:kmd.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:debug.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:remote.md
│ │ │ │ │ ├── developer:docs:clis:tealdbg:tealdbg.md
│ │ │ │ │ ├── developer:docs:details:accounts:create.md
│ │ │ │ │ ├── developer:docs:details:accounts:index.md
│ │ │ │ │ ├── developer:docs:details:accounts:rekey.md
│ │ │ │ │ ├── developer:docs:details:algorand_consensus.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:betanet.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:index.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:mainnet.md
│ │ │ │ │ ├── developer:docs:details:algorand-networks:testnet.md
│ │ │ │ │ ├── developer:docs:details:asa.md
│ │ │ │ │ ├── developer:docs:details:atc.md
│ │ │ │ │ ├── developer:docs:details:atomic_transfers.md
│ │ │ │ │ ├── developer:docs:details:conduit.md
│ │ │ │ │ ├── developer:docs:details:crust.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:guidelines.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:jsonspec.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v1.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v10.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v2.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v3.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v4.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v5.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v6.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v7.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v8.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v9.md
│ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:specification.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:ABI:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:create.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:innertx.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:state.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:txs.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:debugging.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:apps.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:smartsigs.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:guidelines.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:index.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:modes.md
│ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:walkthrough.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:beaker.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:pyteal.md
│ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:python.md
│ │ │ │ │ ├── developer:docs:details:encoding.md
│ │ │ │ │ ├── developer:docs:details:ethereum_to_algorand.md
│ │ │ │ │ ├── developer:docs:details:index.md
│ │ │ │ │ ├── developer:docs:details:indexer.md
│ │ │ │ │ ├── developer:docs:details:parameter_tables.md
│ │ │ │ │ ├── developer:docs:details:stateproofs:index.md
│ │ │ │ │ ├── developer:docs:details:stateproofs:light_client.md
│ │ │ │ │ ├── developer:docs:details:technical_faq.md
│ │ │ │ │ ├── developer:docs:details:transactions:index.md
│ │ │ │ │ ├── developer:docs:details:transactions:offline_transactions.md
│ │ │ │ │ ├── developer:docs:details:transactions:payment_prompts.md
│ │ │ │ │ ├── developer:docs:details:transactions:signatures.md
│ │ │ │ │ ├── developer:docs:details:transactions:transactions.md
│ │ │ │ │ ├── developer:docs:details:useful_resources.md
│ │ │ │ │ ├── developer:docs:get-started:algokit.md
│ │ │ │ │ ├── developer:docs:get-started:basics:what_is_blockchain.md
│ │ │ │ │ ├── developer:docs:get-started:basics:whats_a_dapp.md
│ │ │ │ │ ├── developer:docs:get-started:basics:where_to_start.md
│ │ │ │ │ ├── developer:docs:get-started:basics:why_algorand.md
│ │ │ │ │ ├── developer:docs:get-started:tokenization:ft.md
│ │ │ │ │ ├── developer:docs:get-started:tokenization:nft.md
│ │ │ │ │ ├── developer:docs:index.md
│ │ │ │ │ ├── developer:docs:rest-apis:algod.md
│ │ │ │ │ ├── developer:docs:rest-apis:indexer.md
│ │ │ │ │ ├── developer:docs:rest-apis:kmd.md
│ │ │ │ │ ├── developer:docs:rest-apis:restendpoints.md
│ │ │ │ │ ├── developer:docs:run-a-node:operations:catchup.md
│ │ │ │ │ ├── developer:docs:run-a-node:operations:switch_networks.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:generate_keys.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:index.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:offline.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:online.md
│ │ │ │ │ ├── developer:docs:run-a-node:participate:renew.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:artifacts.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:config.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:relay.md
│ │ │ │ │ ├── developer:docs:run-a-node:reference:telemetry-config.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:indexer.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:install.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:node-troubleshooting.md
│ │ │ │ │ ├── developer:docs:run-a-node:setup:types.md
│ │ │ │ │ ├── developer:docs:sdks:go:index.md
│ │ │ │ │ ├── developer:docs:sdks:index.md
│ │ │ │ │ ├── developer:docs:sdks:java:index.md
│ │ │ │ │ ├── developer:docs:sdks:javascript:index.md
│ │ │ │ │ ├── developer:docs:sdks:python:index.md
│ │ │ │ │ ├── developer:python:code:example:accounts.md
│ │ │ │ │ ├── developer:python:code:example:arc4_types.md
│ │ │ │ │ ├── developer:python:code:example:assets.md
│ │ │ │ │ ├── developer:python:code:example:box_storage.md
│ │ │ │ │ ├── developer:python:code:example:control_flow.md
│ │ │ │ │ ├── developer:python:code:example:crypto:merkle_tree.md
│ │ │ │ │ ├── developer:python:code:example:defi:amm.md
│ │ │ │ │ ├── developer:python:code:example:defi:auction.md
│ │ │ │ │ ├── developer:python:code:example:defi:htlc_logicsig.md
│ │ │ │ │ ├── developer:python:code:example:defi:marketplace.md
│ │ │ │ │ ├── developer:python:code:example:events:arc28_events.md
│ │ │ │ │ ├── developer:python:code:example:global_storage.md
│ │ │ │ │ ├── developer:python:code:example:governance:simple_voting.md
│ │ │ │ │ ├── developer:python:code:example:hello_world.md
│ │ │ │ │ ├── developer:python:code:example:inner_transactions.md
│ │ │ │ │ ├── developer:python:code:example:local_storage.md
│ │ │ │ │ ├── developer:python:code:example:nft:proof_of_attendance.md
│ │ │ │ │ ├── developer:python:code:example:privacy:zk_whitelist.md
│ │ │ │ │ ├── developer:python:code:example:scratch_storage.md
│ │ │ │ │ ├── developer:python:code:example:self_payment.md
│ │ │ │ │ ├── developer:python:code:example:struct_in_box.md
│ │ │ │ │ ├── developer:python:code:example:subsidize_app_call.md
│ │ │ │ │ ├── developer:python:code:example:transactions.md
│ │ │ │ │ ├── developer:python:code:example:utility:calculator.md
│ │ │ │ │ ├── devportal-code-examples:projects:python-contract-examples:README.md
│ │ │ │ │ ├── devportal-code-examples:README.md
│ │ │ │ │ ├── docs:.walletconnect:index.md
│ │ │ │ │ ├── docs:.walletconnect:walletconnect-schema.md
│ │ │ │ │ ├── docs:README.md
│ │ │ │ │ ├── docs:scripts:example_tracker:example_list.md
│ │ │ │ │ ├── docs:scripts:README.md
│ │ │ │ │ ├── index.md
│ │ │ │ │ ├── liquid_auth_index.md
│ │ │ │ │ ├── liquid-auth:ARCHITECTURE.md
│ │ │ │ │ ├── liquid-auth:decisions:1-Service-Authentication.md
│ │ │ │ │ ├── liquid-auth:decisions:2-Bidirectional-Communication.md
│ │ │ │ │ ├── liquid-auth:decisions:3-Peer-to-Peer-Signaling.md
│ │ │ │ │ ├── liquid-auth:decisions:4-Fido-Extension.md
│ │ │ │ │ ├── liquid-auth:decisions:README.md
│ │ │ │ │ ├── liquid-auth:docs:architecture.md
│ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:authenticate.md
│ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:register.md
│ │ │ │ │ ├── liquid-auth:docs:clients:browser:authentication.md
│ │ │ │ │ ├── liquid-auth:docs:clients:browser:example.md
│ │ │ │ │ ├── liquid-auth:docs:introduction.md
│ │ │ │ │ ├── liquid-auth:docs:README.md
│ │ │ │ │ ├── liquid-auth:docs:server:environment-variables.md
│ │ │ │ │ ├── liquid-auth:docs:server:integrations.md
│ │ │ │ │ ├── liquid-auth:docs:server:introduction.md
│ │ │ │ │ ├── liquid-auth:docs:server:running-locally.md
│ │ │ │ │ ├── liquid-auth:README.md
│ │ │ │ │ ├── liquid-auth:SEQUENCE.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md
│ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md
│ │ │ │ │ ├── liquid-auth:sites:express-dapp:README.md
│ │ │ │ │ ├── liquid-auth:VISION.md
│ │ │ │ │ ├── puya_index.md
│ │ │ │ │ ├── puya:docs:algopy_testing:index.md
│ │ │ │ │ ├── puya:docs:api-algopy.arc4.md
│ │ │ │ │ ├── puya:docs:api-algopy.gtxn.md
│ │ │ │ │ ├── puya:docs:api-algopy.itxn.md
│ │ │ │ │ ├── puya:docs:api-algopy.md
│ │ │ │ │ ├── puya:docs:api-algopy.op.md
│ │ │ │ │ ├── puya:docs:api.md
│ │ │ │ │ ├── puya:docs:compiler.md
│ │ │ │ │ ├── puya:docs:index.md
│ │ │ │ │ ├── puya:docs:language-guide.md
│ │ │ │ │ ├── puya:docs:lg-arc28.md
│ │ │ │ │ ├── puya:docs:lg-arc4.md
│ │ │ │ │ ├── puya:docs:lg-builtins.md
│ │ │ │ │ ├── puya:docs:lg-calling-apps.md
│ │ │ │ │ ├── puya:docs:lg-compile.md
│ │ │ │ │ ├── puya:docs:lg-control.md
│ │ │ │ │ ├── puya:docs:lg-errors.md
│ │ │ │ │ ├── puya:docs:lg-logs.md
│ │ │ │ │ ├── puya:docs:lg-modules.md
│ │ │ │ │ ├── puya:docs:lg-opcode-budget.md
│ │ │ │ │ ├── puya:docs:lg-ops.md
│ │ │ │ │ ├── puya:docs:lg-storage.md
│ │ │ │ │ ├── puya:docs:lg-structure.md
│ │ │ │ │ ├── puya:docs:lg-transactions.md
│ │ │ │ │ ├── puya:docs:lg-types.md
│ │ │ │ │ ├── puya:docs:lg-unsupported-python-features.md
│ │ │ │ │ ├── puya:docs:principles.md
│ │ │ │ │ ├── puya:examples:auction:README.md
│ │ │ │ │ ├── puya:python:testing:docs:algopy.md
│ │ │ │ │ ├── puya:python:testing:docs:api.md
│ │ │ │ │ ├── puya:python:testing:docs:coverage.md
│ │ │ │ │ ├── puya:python:testing:docs:examples.md
│ │ │ │ │ ├── puya:python:testing:docs:faq.md
│ │ │ │ │ ├── puya:python:testing:docs:index.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:arc4-types.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:avm-types.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:concepts.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:contract-testing.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:index.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:opcodes.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:signature-testing.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:state-management.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:subroutines.md
│ │ │ │ │ ├── puya:python:testing:docs:testing-guide:transactions.md
│ │ │ │ │ ├── puya:python:testing:examples:README.md
│ │ │ │ │ ├── puya:python:testing:README.md
│ │ │ │ │ ├── puya:README.md
│ │ │ │ │ ├── puya:src:puya:ARCHITECTURE.md
│ │ │ │ │ ├── puya:src:puyapy:_typeshed:README.md
│ │ │ │ │ ├── puya:src:puyapy:_vendor:mypy:typeshed:stdlib:_typeshed:README.md
│ │ │ │ │ ├── puya:src:puyapy:awst_build:README.md
│ │ │ │ │ ├── puya:stubs:README.md
│ │ │ │ │ ├── puya:tests:test_expected_output:README.md
│ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-bytes-and-strings.md
│ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-integer-types.md
│ │ │ │ │ ├── puya:typescript:docs:README.md
│ │ │ │ │ ├── puya:typescript:packages:algo-ts:readme.md
│ │ │ │ │ ├── puya:typescript:README.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIAddressType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayDynamicType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayStaticType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIBoolType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIByteType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIContract.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIInterface.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIMethod.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIStringType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABITupleType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIUfixedType.md
│ │ │ │ │ ├── SDKs:javascript:classes:ABIUintType.md
│ │ │ │ │ ├── SDKs:javascript:classes:Algodv2.md
│ │ │ │ │ ├── SDKs:javascript:classes:AtomicTransactionComposer.md
│ │ │ │ │ ├── SDKs:javascript:classes:DryrunResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:Indexer.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Account.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountParticipation.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountStateDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Application.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalState.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalStatesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogData.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Asset.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetBalancesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHoldingsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Block.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockRewards.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeState.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeVote.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Box.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxDescriptor.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ErrorResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDeltaKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HashFactory.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HealthCheck.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.IndexerStateProofMessage.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MerkleArrayProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MiniAssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ParticipationUpdates.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofFields.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofParticipant.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofReveal.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSigSlot.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofTracking.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofVerifier.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Transaction.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionApplication.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetConfig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetFreeze.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetTransfer.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionKeyreg.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionPayment.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureLogicsig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisig.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisigSubsignature.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionStateProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:Kmd.md
│ │ │ │ │ ├── SDKs:javascript:classes:LogicSig.md
│ │ │ │ │ ├── SDKs:javascript:classes:LogicSigAccount.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Account.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountApplicationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetsInformationResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountParticipation.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountStateDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AppCallLogs.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Application.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationInitialStates.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationKVStorage.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalState.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateOperation.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Asset.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHolding.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHoldingReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetParams.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockHashResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockLogsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockTxidsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Box.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxDescriptor.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxesResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxReference.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BuildVersion.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.CompileResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DisassembleResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunRequest.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunSource.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunState.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunTxnResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ErrorResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDeltaKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetBlockTimeStampOffsetResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetSyncRoundResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.KvDelta.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LedgerStateDeltaForTransactionGroup.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LightBlockHeaderProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.NodeStatusResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PostTransactionsResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ScratchChange.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateInitialStates.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequest.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequestTransactionGroup.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTraceConfig.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionGroupResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationEvalOverrides.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationOpcodeTraceUnit.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationTransactionExecTrace.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProof.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProofMessage.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SupplyResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealKeyValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealValue.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionParametersResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionProofResponse.md
│ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Version.md
│ │ │ │ │ ├── SDKs:javascript:classes:SourceMap.md
│ │ │ │ │ ├── SDKs:javascript:classes:Transaction.md
│ │ │ │ │ ├── SDKs:javascript:enums:ABIReferenceType.md
│ │ │ │ │ ├── SDKs:javascript:enums:ABITransactionType.md
│ │ │ │ │ ├── SDKs:javascript:enums:AtomicTransactionComposerStatus.md
│ │ │ │ │ ├── SDKs:javascript:enums:IntDecoding.md
│ │ │ │ │ ├── SDKs:javascript:enums:OnApplicationComplete.md
│ │ │ │ │ ├── SDKs:javascript:enums:TransactionType.md
│ │ │ │ │ ├── SDKs:javascript:examples:README.md
│ │ │ │ │ ├── SDKs:javascript:FAQ.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworkInfo.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworks.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIInterfaceParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodArgParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodReturnParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:ABIResult.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:Account.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:Address.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:AlgodTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClient.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientError.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientResponse.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:BoxReference.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:CustomTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedAssetParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedBoxReference.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedGlobalStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLocalStateSchema.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSigAccount.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedMultisig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSignedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSubsig.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:IndexerTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:KMDTokenHeader.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:MultisigMetadata.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:SignedTransaction.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:SuggestedParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionParams.md
│ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionWithSigner.md
│ │ │ │ │ ├── SDKs:javascript:modules:indexerModels.md
│ │ │ │ │ ├── SDKs:javascript:modules:modelsv2.md
│ │ │ │ │ ├── SDKs:javascript:modules.md
│ │ │ │ │ ├── SDKs:javascript:README.md
│ │ │ │ │ ├── SDKs:python:algosdk:v2client:harness:README.md
│ │ │ │ │ ├── SDKs:python:examples:README.md
│ │ │ │ │ ├── SDKs:python:README.md
│ │ │ │ │ ├── tealscript:examples_amm_README.md
│ │ │ │ │ ├── tealscript:examples_auction_README.md
│ │ │ │ │ ├── tealscript:examples_big_box_README.md
│ │ │ │ │ ├── tealscript:examples_itxns_README.md
│ │ │ │ │ ├── tealscript:examples_lsig_with_app_README.md
│ │ │ │ │ ├── tealscript:examples_reti_README.md
│ │ │ │ │ ├── tealscript:FEATURES.md
│ │ │ │ │ ├── tealscript:guides_atomic_txn.md
│ │ │ │ │ ├── tealscript:guides_features.md
│ │ │ │ │ ├── tealscript:guides_getting_started.md
│ │ │ │ │ ├── tealscript:guides_inner_transactions.md
│ │ │ │ │ ├── tealscript:guides_lifecycle.md
│ │ │ │ │ ├── tealscript:guides_math.md
│ │ │ │ │ ├── tealscript:guides_methods.md
│ │ │ │ │ ├── tealscript:guides_multiple_contracts.md
│ │ │ │ │ ├── tealscript:guides_pyteal.md
│ │ │ │ │ ├── tealscript:guides_storage.md
│ │ │ │ │ ├── tealscript:guides_Supported Types_arrays.md
│ │ │ │ │ ├── tealscript:guides_Supported Types_numbers.md
│ │ │ │ │ ├── TEALScript:README.md
│ │ │ │ │ ├── tealscript:tests_test_package_README.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0001-intro.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0002-init.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0003-contract.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0004-artifacts.md
│ │ │ │ │ ├── tealscript:tutorials_Hello World_0005-hello.md
│ │ │ │ │ └── tealscript:tutorials_Hello World_0006-test.md
│ │ │ │ └── taxonomy-categories
│ │ │ │ ├── algokit-utils.json
│ │ │ │ ├── algokit.json
│ │ │ │ ├── arcs.json
│ │ │ │ ├── clis.json
│ │ │ │ ├── details.json
│ │ │ │ ├── developers.json
│ │ │ │ ├── liquid-auth.json
│ │ │ │ ├── nodes.json
│ │ │ │ ├── puya.json
│ │ │ │ ├── python.json
│ │ │ │ ├── sdks.json
│ │ │ │ └── tealscript.json
│ │ │ └── wallet
│ │ │ └── index.ts
│ │ ├── tools
│ │ │ ├── accountManager.ts
│ │ │ ├── algodManager.ts
│ │ │ ├── apiManager
│ │ │ │ ├── algod
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── asset.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── transaction.ts
│ │ │ │ ├── example
│ │ │ │ │ ├── get-balance.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── indexer
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── application.ts
│ │ │ │ │ ├── asset.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── transaction.ts
│ │ │ │ ├── nfd
│ │ │ │ │ └── index.ts
│ │ │ │ ├── tinyman
│ │ │ │ │ ├── analytics.ts
│ │ │ │ │ ├── bootstrap.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── liquidity.ts
│ │ │ │ │ ├── opt_in.ts
│ │ │ │ │ ├── pool.ts
│ │ │ │ │ ├── remove_liquidity.ts
│ │ │ │ │ └── swap.ts
│ │ │ │ ├── ultrade
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── market.ts
│ │ │ │ │ ├── system.ts
│ │ │ │ │ └── wallet.ts
│ │ │ │ └── vestige
│ │ │ │ ├── assets.ts
│ │ │ │ ├── balances.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── networks.ts
│ │ │ │ ├── notes.ts
│ │ │ │ ├── pools.ts
│ │ │ │ ├── protocols.ts
│ │ │ │ ├── swaps.ts
│ │ │ │ └── vaults.ts
│ │ │ ├── arc26Manager.ts
│ │ │ ├── index.ts
│ │ │ ├── knowledgeManager.ts
│ │ │ ├── transactionManager
│ │ │ │ ├── accountTransactions.ts
│ │ │ │ ├── appTransactions
│ │ │ │ │ ├── callTxn.ts
│ │ │ │ │ ├── clearTxn.ts
│ │ │ │ │ ├── closeOutTxn.ts
│ │ │ │ │ ├── createTxn.ts
│ │ │ │ │ ├── deleteTxn.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── optInTxn.ts
│ │ │ │ │ ├── test
│ │ │ │ │ │ ├── counter_approval.teal
│ │ │ │ │ │ ├── counter_clear.teal
│ │ │ │ │ │ ├── storage_test_approval_v2.teal
│ │ │ │ │ │ ├── storage_test_approval.teal
│ │ │ │ │ │ └── storage_test_clear.teal
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── updateTxn.ts
│ │ │ │ ├── assetTransactions.ts
│ │ │ │ ├── generalTransaction.ts
│ │ │ │ └── index.ts
│ │ │ └── utilityManager.ts
│ │ ├── types.ts
│ │ └── utils
│ │ └── responseProcessor.ts
│ ├── tests
│ │ ├── resources
│ │ │ ├── algod
│ │ │ │ ├── account.test.ts
│ │ │ │ ├── application.test.ts
│ │ │ │ ├── asset.test.ts
│ │ │ │ └── transaction.test.ts
│ │ │ └── indexer
│ │ │ ├── account.test.ts
│ │ │ ├── application.test.ts
│ │ │ ├── asset.test.ts
│ │ │ └── transaction.test.ts
│ │ └── tools
│ │ ├── accountManager.test.ts
│ │ ├── algodManager.test.ts
│ │ ├── apiManager
│ │ │ └── example
│ │ │ └── get-balance.test.ts
│ │ ├── transactionManager
│ │ │ ├── accountTransactionManager.test.ts
│ │ │ ├── appTransactionManager.test.ts
│ │ │ ├── assetTransactionManager.test.ts
│ │ │ ├── generalTransactionManager.test.ts
│ │ │ └── transactionManager.test.ts
│ │ └── utilityManager.test.ts
│ └── tsconfig.json
├── README.md
├── rename_files.sh
└── tsconfig.json
```
# Files
--------------------------------------------------------------------------------
/packages/server/tests/resources/algod/application.test.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
2 | import {
3 | applicationResources,
4 | applicationResourceSchemas,
5 | getApplicationByID,
6 | getApplicationBoxByName,
7 | getApplicationBoxes,
8 | handleApplicationResources
9 | } from '../../../src/resources/algod/application.js';
10 | import { algodClient } from '../../../src/algorand-client.js';
11 |
12 | // Mock algosdk client
13 | jest.mock('../../../src/algorand-client.js', () => ({
14 | algodClient: {
15 | getApplicationByID: jest.fn(),
16 | getApplicationBoxByName: jest.fn(),
17 | getApplicationBoxes: jest.fn()
18 | },
19 | API_URIS: {
20 | APPLICATION_INFO: 'algorand://app/{app-id}',
21 | APPLICATION_BOX: 'algorand://app/{app-id}/box/{name}',
22 | APPLICATION_BOXES: 'algorand://app/{app-id}/boxes'
23 | }
24 | }));
25 |
26 | describe('Algod Application Resources', () => {
27 | beforeEach(() => {
28 | jest.clearAllMocks();
29 | });
30 |
31 | describe('Resource Definitions', () => {
32 | it('should define application resources', () => {
33 | expect(applicationResources).toHaveLength(3);
34 | expect(applicationResources.map(r => r.name)).toEqual([
35 | 'Application Info',
36 | 'Application Box',
37 | 'Application Boxes'
38 | ]);
39 | });
40 |
41 | it('should define resource schemas', () => {
42 | expect(Object.keys(applicationResourceSchemas)).toHaveLength(3);
43 | expect(applicationResourceSchemas).toHaveProperty('algorand://app/{app-id}');
44 | expect(applicationResourceSchemas).toHaveProperty('algorand://app/{app-id}/box/{name}');
45 | expect(applicationResourceSchemas).toHaveProperty('algorand://app/{app-id}/boxes');
46 | });
47 | });
48 |
49 | describe('Application Information', () => {
50 | const mockAppId = 123;
51 | const mockResponse = {
52 | id: mockAppId,
53 | params: {
54 | creator: 'MOCK_ADDRESS',
55 | approvalProgram: 'base64...',
56 | clearStateProgram: 'base64...'
57 | },
58 | createdAtRound: 1234
59 | };
60 |
61 | beforeEach(() => {
62 | (algodClient.getApplicationByID as jest.Mock).mockReturnValue({
63 | do: jest.fn().mockResolvedValue(mockResponse)
64 | });
65 | });
66 |
67 | it('should fetch application information', async () => {
68 | const result = await getApplicationByID(mockAppId);
69 | expect(result).toEqual(mockResponse);
70 | expect(algodClient.getApplicationByID).toHaveBeenCalledWith(mockAppId);
71 | });
72 |
73 | it('should handle errors', async () => {
74 | const error = new Error('Network error');
75 | (algodClient.getApplicationByID as jest.Mock).mockReturnValue({
76 | do: jest.fn().mockRejectedValue(error)
77 | });
78 |
79 | await expect(getApplicationByID(mockAppId))
80 | .rejects
81 | .toThrow('Failed to get application info: Network error');
82 | });
83 | });
84 |
85 | describe('Application Box', () => {
86 | const mockAppId = 123;
87 | const mockBoxName = new TextEncoder().encode('test-box');
88 | const mockResponse = {
89 | name: mockBoxName,
90 | value: new Uint8Array([1, 2, 3])
91 | };
92 |
93 | beforeEach(() => {
94 | (algodClient.getApplicationBoxByName as jest.Mock).mockReturnValue({
95 | do: jest.fn().mockResolvedValue(mockResponse)
96 | });
97 | });
98 |
99 | it('should fetch box by name', async () => {
100 | const result = await getApplicationBoxByName(mockAppId, mockBoxName);
101 | expect(result).toEqual(mockResponse);
102 | expect(algodClient.getApplicationBoxByName).toHaveBeenCalledWith(mockAppId, mockBoxName);
103 | });
104 |
105 | it('should handle errors', async () => {
106 | const error = new Error('Network error');
107 | (algodClient.getApplicationBoxByName as jest.Mock).mockReturnValue({
108 | do: jest.fn().mockRejectedValue(error)
109 | });
110 |
111 | await expect(getApplicationBoxByName(mockAppId, mockBoxName))
112 | .rejects
113 | .toThrow('Failed to get application box: Network error');
114 | });
115 | });
116 |
117 | describe('Application Boxes', () => {
118 | const mockAppId = 123;
119 | const mockResponse = {
120 | boxes: [
121 | { name: new Uint8Array([1]), value: new Uint8Array([1]) },
122 | { name: new Uint8Array([2]), value: new Uint8Array([2]) }
123 | ]
124 | };
125 |
126 | beforeEach(() => {
127 | (algodClient.getApplicationBoxes as jest.Mock).mockReturnValue({
128 | max: jest.fn().mockReturnThis(),
129 | do: jest.fn().mockResolvedValue(mockResponse)
130 | });
131 | });
132 |
133 | it('should fetch all boxes', async () => {
134 | const result = await getApplicationBoxes(mockAppId);
135 | expect(result).toEqual(mockResponse);
136 | expect(algodClient.getApplicationBoxes).toHaveBeenCalledWith(mockAppId);
137 | });
138 |
139 | it('should handle max boxes parameter', async () => {
140 | const maxBoxes = 10;
141 | await getApplicationBoxes(mockAppId, maxBoxes);
142 | const mockMax = (algodClient.getApplicationBoxes as jest.Mock).mock.results[0].value.max;
143 | expect(mockMax).toHaveBeenCalledWith(maxBoxes);
144 | });
145 |
146 | it('should handle errors', async () => {
147 | const error = new Error('Network error');
148 | (algodClient.getApplicationBoxes as jest.Mock).mockReturnValue({
149 | max: jest.fn().mockReturnThis(),
150 | do: jest.fn().mockRejectedValue(error)
151 | });
152 |
153 | await expect(getApplicationBoxes(mockAppId))
154 | .rejects
155 | .toThrow('Failed to get application boxes: Network error');
156 | });
157 | });
158 |
159 | describe('Resource Handler', () => {
160 | const mockAppId = 123;
161 | const mockResponse = {
162 | id: mockAppId,
163 | params: {
164 | creator: 'MOCK_ADDRESS'
165 | },
166 | createdAtRound: 1234
167 | };
168 |
169 | beforeEach(() => {
170 | (algodClient.getApplicationByID as jest.Mock).mockReturnValue({
171 | do: jest.fn().mockResolvedValue(mockResponse)
172 | });
173 | });
174 |
175 | it('should handle application info URI', async () => {
176 | const uri = `algorand://app/${mockAppId}`;
177 | const result = await handleApplicationResources(uri);
178 | expect(result).toHaveLength(1);
179 | expect(JSON.parse(result[0].text)).toEqual(mockResponse);
180 | });
181 |
182 | it('should return empty array for unknown URI', async () => {
183 | const uri = 'algorand://unknown';
184 | const result = await handleApplicationResources(uri);
185 | expect(result).toHaveLength(0);
186 | });
187 |
188 | it('should handle errors with McpError', async () => {
189 | const error = new Error('Network error');
190 | (algodClient.getApplicationByID as jest.Mock).mockReturnValue({
191 | do: jest.fn().mockRejectedValue(error)
192 | });
193 |
194 | const uri = `algorand://app/${mockAppId}`;
195 | await expect(handleApplicationResources(uri))
196 | .rejects
197 | .toThrow(new McpError(ErrorCode.InternalError, 'Network error'));
198 | });
199 |
200 | it('should handle box URI', async () => {
201 | const uri = `algorand://app/${mockAppId}/box/test-box`;
202 | const mockBoxResponse = {
203 | name: new TextEncoder().encode('test-box'),
204 | value: new Uint8Array([1, 2, 3])
205 | };
206 |
207 | (algodClient.getApplicationBoxByName as jest.Mock).mockReturnValue({
208 | do: jest.fn().mockResolvedValue(mockBoxResponse)
209 | });
210 |
211 | const result = await handleApplicationResources(uri);
212 | expect(result).toHaveLength(1);
213 | expect(JSON.parse(result[0].text)).toEqual({
214 | box: {
215 | name: Array.from(mockBoxResponse.name),
216 | value: Array.from(mockBoxResponse.value)
217 | },
218 | currentRound: 0
219 | });
220 | });
221 |
222 | it('should handle boxes URI', async () => {
223 | const uri = `algorand://app/${mockAppId}/boxes`;
224 | const mockBoxesResponse = {
225 | boxes: [
226 | { name: new Uint8Array([1]), value: new Uint8Array([1]) }
227 | ]
228 | };
229 |
230 | (algodClient.getApplicationBoxes as jest.Mock).mockReturnValue({
231 | max: jest.fn().mockReturnThis(),
232 | do: jest.fn().mockResolvedValue(mockBoxesResponse)
233 | });
234 |
235 | const result = await handleApplicationResources(uri);
236 | expect(result).toHaveLength(1);
237 | expect(JSON.parse(result[0].text)).toEqual({
238 | boxes: mockBoxesResponse.boxes.map(box => ({
239 | name: Array.from(box.name)
240 | })),
241 | currentRound: 0
242 | });
243 | });
244 | });
245 | });
246 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/asset](../modules/types_asset.md) / AssetOptOutParams
2 |
3 | # Interface: AssetOptOutParams
4 |
5 | [types/asset](../modules/types_asset.md).AssetOptOutParams
6 |
7 | **`Deprecated`**
8 |
9 | Parameters for `assetOptOut` call.
10 |
11 | ## Hierarchy
12 |
13 | - [`AssetOptInParams`](types_asset.AssetOptInParams.md)
14 |
15 | ↳ **`AssetOptOutParams`**
16 |
17 | ## Table of contents
18 |
19 | ### Properties
20 |
21 | - [account](types_asset.AssetOptOutParams.md#account)
22 | - [assetCreatorAddress](types_asset.AssetOptOutParams.md#assetcreatoraddress)
23 | - [assetId](types_asset.AssetOptOutParams.md#assetid)
24 | - [atc](types_asset.AssetOptOutParams.md#atc)
25 | - [ensureZeroBalance](types_asset.AssetOptOutParams.md#ensurezerobalance)
26 | - [fee](types_asset.AssetOptOutParams.md#fee)
27 | - [lease](types_asset.AssetOptOutParams.md#lease)
28 | - [maxFee](types_asset.AssetOptOutParams.md#maxfee)
29 | - [maxRoundsToWaitForConfirmation](types_asset.AssetOptOutParams.md#maxroundstowaitforconfirmation)
30 | - [note](types_asset.AssetOptOutParams.md#note)
31 | - [populateAppCallResources](types_asset.AssetOptOutParams.md#populateappcallresources)
32 | - [skipSending](types_asset.AssetOptOutParams.md#skipsending)
33 | - [skipWaiting](types_asset.AssetOptOutParams.md#skipwaiting)
34 | - [suppressLog](types_asset.AssetOptOutParams.md#suppresslog)
35 | - [transactionParams](types_asset.AssetOptOutParams.md#transactionparams)
36 |
37 | ## Properties
38 |
39 | ### account
40 |
41 | • **account**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
42 |
43 | The account to opt in/out for
44 |
45 | #### Inherited from
46 |
47 | [AssetOptInParams](types_asset.AssetOptInParams.md).[account](types_asset.AssetOptInParams.md#account)
48 |
49 | #### Defined in
50 |
51 | [src/types/asset.ts:72](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L72)
52 |
53 | ___
54 |
55 | ### assetCreatorAddress
56 |
57 | • `Optional` **assetCreatorAddress**: `string`
58 |
59 | The address of the creator account for the asset; if unspecified then it looks it up using algod
60 |
61 | #### Defined in
62 |
63 | [src/types/asset.ts:86](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L86)
64 |
65 | ___
66 |
67 | ### assetId
68 |
69 | • **assetId**: `number`
70 |
71 | The ID of the assets to opt in for / out of
72 |
73 | #### Inherited from
74 |
75 | [AssetOptInParams](types_asset.AssetOptInParams.md).[assetId](types_asset.AssetOptInParams.md#assetid)
76 |
77 | #### Defined in
78 |
79 | [src/types/asset.ts:74](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L74)
80 |
81 | ___
82 |
83 | ### atc
84 |
85 | • `Optional` **atc**: `AtomicTransactionComposer`
86 |
87 | An optional `AtomicTransactionComposer` to add the transaction to, if specified then `skipSending: undefined` has the same effect as `skipSending: true`
88 |
89 | #### Inherited from
90 |
91 | [AssetOptInParams](types_asset.AssetOptInParams.md).[atc](types_asset.AssetOptInParams.md#atc)
92 |
93 | #### Defined in
94 |
95 | [src/types/transaction.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L36)
96 |
97 | ___
98 |
99 | ### ensureZeroBalance
100 |
101 | • `Optional` **ensureZeroBalance**: `boolean`
102 |
103 | Whether or not to validate the account has a zero-balance before issuing the opt-out; default = true
104 |
105 | #### Defined in
106 |
107 | [src/types/asset.ts:88](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L88)
108 |
109 | ___
110 |
111 | ### fee
112 |
113 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
114 |
115 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
116 |
117 | #### Inherited from
118 |
119 | [AssetOptInParams](types_asset.AssetOptInParams.md).[fee](types_asset.AssetOptInParams.md#fee)
120 |
121 | #### Defined in
122 |
123 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
124 |
125 | ___
126 |
127 | ### lease
128 |
129 | • `Optional` **lease**: `string` \| `Uint8Array`
130 |
131 | An (optional) [transaction lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) to apply
132 |
133 | #### Inherited from
134 |
135 | [AssetOptInParams](types_asset.AssetOptInParams.md).[lease](types_asset.AssetOptInParams.md#lease)
136 |
137 | #### Defined in
138 |
139 | [src/types/asset.ts:80](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L80)
140 |
141 | ___
142 |
143 | ### maxFee
144 |
145 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
146 |
147 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
148 |
149 | #### Inherited from
150 |
151 | [AssetOptInParams](types_asset.AssetOptInParams.md).[maxFee](types_asset.AssetOptInParams.md#maxfee)
152 |
153 | #### Defined in
154 |
155 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
156 |
157 | ___
158 |
159 | ### maxRoundsToWaitForConfirmation
160 |
161 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
162 |
163 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
164 |
165 | #### Inherited from
166 |
167 | [AssetOptInParams](types_asset.AssetOptInParams.md).[maxRoundsToWaitForConfirmation](types_asset.AssetOptInParams.md#maxroundstowaitforconfirmation)
168 |
169 | #### Defined in
170 |
171 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
172 |
173 | ___
174 |
175 | ### note
176 |
177 | • `Optional` **note**: [`TransactionNote`](../modules/types_transaction.md#transactionnote)
178 |
179 | The (optional) transaction note
180 |
181 | #### Inherited from
182 |
183 | [AssetOptInParams](types_asset.AssetOptInParams.md).[note](types_asset.AssetOptInParams.md#note)
184 |
185 | #### Defined in
186 |
187 | [src/types/asset.ts:78](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L78)
188 |
189 | ___
190 |
191 | ### populateAppCallResources
192 |
193 | • `Optional` **populateAppCallResources**: `boolean`
194 |
195 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
196 |
197 | #### Inherited from
198 |
199 | [AssetOptInParams](types_asset.AssetOptInParams.md).[populateAppCallResources](types_asset.AssetOptInParams.md#populateappcallresources)
200 |
201 | #### Defined in
202 |
203 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
204 |
205 | ___
206 |
207 | ### skipSending
208 |
209 | • `Optional` **skipSending**: `boolean`
210 |
211 | Whether to skip signing and sending the transaction to the chain (default: transaction signed and sent to chain, unless `atc` specified)
212 | and instead just return the raw transaction, e.g. so you can add it to a group of transactions
213 |
214 | #### Inherited from
215 |
216 | [AssetOptInParams](types_asset.AssetOptInParams.md).[skipSending](types_asset.AssetOptInParams.md#skipsending)
217 |
218 | #### Defined in
219 |
220 | [src/types/transaction.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L32)
221 |
222 | ___
223 |
224 | ### skipWaiting
225 |
226 | • `Optional` **skipWaiting**: `boolean`
227 |
228 | Whether to skip waiting for the submitted transaction (only relevant if `skipSending` is `false` or unset)
229 |
230 | #### Inherited from
231 |
232 | [AssetOptInParams](types_asset.AssetOptInParams.md).[skipWaiting](types_asset.AssetOptInParams.md#skipwaiting)
233 |
234 | #### Defined in
235 |
236 | [src/types/transaction.ts:34](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L34)
237 |
238 | ___
239 |
240 | ### suppressLog
241 |
242 | • `Optional` **suppressLog**: `boolean`
243 |
244 | Whether to suppress log messages from transaction send, default: do not suppress
245 |
246 | #### Inherited from
247 |
248 | [AssetOptInParams](types_asset.AssetOptInParams.md).[suppressLog](types_asset.AssetOptInParams.md#suppresslog)
249 |
250 | #### Defined in
251 |
252 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
253 |
254 | ___
255 |
256 | ### transactionParams
257 |
258 | • `Optional` **transactionParams**: `SuggestedParams`
259 |
260 | Optional transaction parameters
261 |
262 | #### Inherited from
263 |
264 | [AssetOptInParams](types_asset.AssetOptInParams.md).[transactionParams](types_asset.AssetOptInParams.md#transactionparams)
265 |
266 | #### Defined in
267 |
268 | [src/types/asset.ts:76](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/asset.ts#L76)
269 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0012.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 12
3 | title: Claimable ASA from vault application
4 | description: A smart signature contract account that can receive & disburse claimable Algorand Smart Assets (ASA) to an intended recipient account.
5 | author: Brian Whippo (@silentrhetoric), Joe Polny (@joe-p)
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/131
7 | status: Withdrawn
8 | type: Standards Track
9 | category: ARC
10 | created: 2022-09-05
11 | withdrawal-reason: Not used, will be replaced by ARC-59
12 | ---
13 |
14 | # Claimable Algorand Standard Assets (ASAs) from vault application
15 |
16 | ## Abstract
17 |
18 | The goal of this standard is to establish a standard in the Algorand ecosytem by which ASAs can be sent to an intended receiver even if their account is not opted in to the ASA.
19 |
20 | A on-chain application, called a vault, will be used to custody assets on behalf of a given user, with only that user being able to withdraw assets. A master application will use box storage to keep track of the vault for any given Algorand account.
21 |
22 | If integrated into ecosystem technologies including wallets, epxlorers, and dApps, this standard can provide enhanced capabilities around ASAs which are otherwise strictly bound at the protocol level to require opting in to be received. This also enables the ability to "burn" ASAs by sending them to the vault associated with the global Zero Address.
23 |
24 | ## Motivation
25 |
26 | Algorand requires accounts to opt in to receive any ASA, a fact which simultaneously:
27 |
28 | 1. Grants account holders fine-grained control over their holdings by allowing them to select which assets to allow and preventing receipt of unwanted tokens.
29 | 2. Frustrates users and developers when accounting for this requirement especially since other blockchains do not have this requirement.
30 |
31 | This ARC lays out a new way to navigate the ASA opt in requirement.
32 |
33 | ### Contemplated Use Cases
34 |
35 | The following use cases help explain how this capability can enhance the possibilities within the Algorand ecosystem.
36 |
37 | #### Airdrops
38 |
39 | An ASA creator who wants to send their asset to a set of accounts faces the challenge of needing their intended receivers to opt in to the ASA ahead of time, which requires non-trivial communication efforts and precludes the possibility of completing the airdrop as a surprise. This claimable ASA standard creates the ability to send an airdrop out to individual addresses so that the receivers can opt in and claim the asset at their convenience--or not, if they so choose.
40 |
41 | #### Reducing New User On-boarding Friction
42 |
43 | An application operator who wants to on-board users to their game or business may want to reduce the friction of getting people started by decoupling their application on-boarding process from the process of funding a non-custodial Algorand wallet, if users are wholly new to the Algorand ecosystem. As long as the receiver's address is known, an ASA can be sent to them ahead of them having ALGOs in their wallet to cover the minimum balance requirement and opt in to the asset.
44 |
45 | #### Token Burning
46 |
47 | Similarly to any regular account, the global Zero Address also has a corresponding vault to which one can send a quantity of any ASA to effectively "burn" it, rendering it lost forever. No one controls the Zero Address, so while it cannot opt into any ASA to receive it directly, it also cannot make any claims from its corresponding vault, which thus functions as an UN-claimable ASAs purgatory account. By utilizing this approach, anyone can verifiably and irreversibly take a quantity of any ASA out of circulation forever.
48 |
49 | ## Specification
50 |
51 | 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>.
52 |
53 |
54 | > Comments like this are non-normative.
55 |
56 | ### Definitions
57 |
58 | - **Claimable ASA**: An Algorand Standard Asset (ASA) which has been transferred to a vault following the standard set forth in this proposal such that only the intended receiver account can claim it at their convenience.
59 | - **Vaultt**: An Algorand application used to hold claimable ASAs for a given account.
60 | - **Master**: An Algorand application used to keep track of all of the vaults created for Algorand accounts.
61 | - **dApp**: A decentralized application frontend, interpreted here to mean an off-chain frontend (a webapp, native app, etc.) that interacts with applications on the blockchain.
62 | - **Explorer**: An off-chain application that allows browsing the blockchain, showing details of transactions.
63 | - **Wallet**: An off-chain application that stores secret keys for on-chain accounts and can display and sign transactions for these accounts.
64 | - **Mainnet ID**: The ID for the application that should be called upon claiming an asset on mainnet
65 | - **Testnet ID**: The ID for the application that should be called upoin claiming an asset on testnet
66 | - **Minimum Balance Requirement (MBR)**: The minimum amount of Algos which must be held by an account on the ledger, which is currently 0.1A + 0.1A per ASA opted into.
67 |
68 | ### TEAL Smart Contracts
69 |
70 | There are two smart contracts being utilized: The [vault](../assets/arc-0012/vault.teal) and the [master](../assets/arc-0012/master.teal).
71 |
72 | #### Vault
73 |
74 | ##### Storage
75 |
76 | | Type | Key | Value | Description |
77 | | ------ | ---------- | -------------- | ----------------------------------------------------- |
78 | | Global | “creator” | Account | The account that funded the creation of the vault |
79 | | Global | “master” | Application ID | The application ID that created the vault |
80 | | Global | “receiver” | Account | The account that can claim/reject ASAs from the vault |
81 | | Box | Asset ID | Account | The account that funded the MBR for the given ASA |
82 |
83 | ##### Methods
84 |
85 | ###### Opt-In
86 | * Opts vault into ASA
87 | * Creates box: ASA -> “funder”
88 | * “funder” being the account that initiates the opt-in
89 | * “funder” is the one covering the ASA MBR
90 |
91 | ###### Claim
92 | * Transfers ASA from vault to “receiver”
93 | * Deletes box: ASA -> “funder”
94 | * Returns ASA and box MBR to “funder”
95 |
96 | ###### Reject
97 | * Sends ASA to ASA creator
98 | * Refunds rejector all fees incurred (thus rejecting is free)
99 | * Deletes box: ASA -> “funder”
100 | * Remaining balance sent to fee sink
101 |
102 | #### Master
103 |
104 | ##### Storage
105 |
106 | | Type | Key | Value | Description |
107 | | ---- | ------- | -------------- | ------------------------------- |
108 | | Box | Account | Application ID | The vault for the given account |
109 |
110 | ##### Methods
111 |
112 | ###### Create Vault
113 | * Creates a vault for a given account (“receiver”)
114 | * Creates box: “receiver” -> vault ID
115 | * App/box MBR funded by vault creator
116 |
117 | ###### Delete Vault
118 | * Deletes vault app
119 | * Deletes box: “receiver” -> vault ID
120 | * App.box MBR returned to vault creator
121 |
122 | ###### Verify Axfer
123 | * Verifies asset is going to correct vault for “receiver”
124 |
125 | ###### getVaultID
126 | * Returns vault ID for “receiver”
127 | * Fails if “receiver” does not have vault
128 |
129 | ###### getVaultAddr
130 | * Returns vault address for “receiver”
131 | * Fails if “receiver” does not have vault
132 |
133 | ###### hasVault
134 | * Determines if “receiver” has a vault
135 |
136 | ## Rationale
137 |
138 | This design was created to offer a standard mechanism by which wallets, explorers, and dapps could enable users to send, receive, and find claimable ASAs without requiring any changes to the core protocol.
139 |
140 | ## Backwards Compatibility
141 |
142 | This ARC makes no changes to the consensus protocol and creates no backwards compatibility issues.
143 |
144 | ## Reference Implementation
145 |
146 | ### Source code
147 |
148 | * <a href="https://github.com/algorandfoundation/ARCs/tree/main/assets/arc-0012/contracts">Contracts</a>
149 | * <a href="https://github.com/algorandfoundation/ARCs/tree/main/assets/arc-0012/arc12-sdk">TypeScript SDK</a>
150 |
151 |
152 | ## Security Considerations
153 |
154 | Both applications (The vault and the master have not been audited)
155 |
156 | ## Copyright
157 |
158 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
159 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/transfer](../modules/types_transfer.md) / TransferAssetParams
2 |
3 | # Interface: TransferAssetParams
4 |
5 | [types/transfer](../modules/types_transfer.md).TransferAssetParams
6 |
7 | **`Deprecated`**
8 |
9 | Parameters for `transferAsset` call.
10 |
11 | ## Hierarchy
12 |
13 | - [`SendTransactionParams`](types_transaction.SendTransactionParams.md)
14 |
15 | ↳ **`TransferAssetParams`**
16 |
17 | ## Table of contents
18 |
19 | ### Properties
20 |
21 | - [amount](types_transfer.TransferAssetParams.md#amount)
22 | - [assetId](types_transfer.TransferAssetParams.md#assetid)
23 | - [atc](types_transfer.TransferAssetParams.md#atc)
24 | - [clawbackFrom](types_transfer.TransferAssetParams.md#clawbackfrom)
25 | - [fee](types_transfer.TransferAssetParams.md#fee)
26 | - [from](types_transfer.TransferAssetParams.md#from)
27 | - [lease](types_transfer.TransferAssetParams.md#lease)
28 | - [maxFee](types_transfer.TransferAssetParams.md#maxfee)
29 | - [maxRoundsToWaitForConfirmation](types_transfer.TransferAssetParams.md#maxroundstowaitforconfirmation)
30 | - [note](types_transfer.TransferAssetParams.md#note)
31 | - [populateAppCallResources](types_transfer.TransferAssetParams.md#populateappcallresources)
32 | - [skipSending](types_transfer.TransferAssetParams.md#skipsending)
33 | - [skipWaiting](types_transfer.TransferAssetParams.md#skipwaiting)
34 | - [suppressLog](types_transfer.TransferAssetParams.md#suppresslog)
35 | - [to](types_transfer.TransferAssetParams.md#to)
36 | - [transactionParams](types_transfer.TransferAssetParams.md#transactionparams)
37 |
38 | ## Properties
39 |
40 | ### amount
41 |
42 | • **amount**: `number` \| `bigint`
43 |
44 | The amount to send as the smallest divisible unit value
45 |
46 | #### Defined in
47 |
48 | [src/types/transfer.ts:64](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L64)
49 |
50 | ___
51 |
52 | ### assetId
53 |
54 | • **assetId**: `number`
55 |
56 | The asset id that will be transfered
57 |
58 | #### Defined in
59 |
60 | [src/types/transfer.ts:62](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L62)
61 |
62 | ___
63 |
64 | ### atc
65 |
66 | • `Optional` **atc**: `AtomicTransactionComposer`
67 |
68 | An optional `AtomicTransactionComposer` to add the transaction to, if specified then `skipSending: undefined` has the same effect as `skipSending: true`
69 |
70 | #### Inherited from
71 |
72 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[atc](types_transaction.SendTransactionParams.md#atc)
73 |
74 | #### Defined in
75 |
76 | [src/types/transaction.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L36)
77 |
78 | ___
79 |
80 | ### clawbackFrom
81 |
82 | • `Optional` **clawbackFrom**: `string` \| [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
83 |
84 | An address of a target account from which to perform a clawback operation. Please note, in such cases senderAccount must be equal to clawback field on ASA metadata.
85 |
86 | #### Defined in
87 |
88 | [src/types/transfer.ts:68](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L68)
89 |
90 | ___
91 |
92 | ### fee
93 |
94 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
95 |
96 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
97 |
98 | #### Inherited from
99 |
100 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[fee](types_transaction.SendTransactionParams.md#fee)
101 |
102 | #### Defined in
103 |
104 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
105 |
106 | ___
107 |
108 | ### from
109 |
110 | • **from**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
111 |
112 | The account that will send the asset
113 |
114 | #### Defined in
115 |
116 | [src/types/transfer.ts:58](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L58)
117 |
118 | ___
119 |
120 | ### lease
121 |
122 | • `Optional` **lease**: `string` \| `Uint8Array`
123 |
124 | An (optional) [transaction lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) to apply
125 |
126 | #### Defined in
127 |
128 | [src/types/transfer.ts:72](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L72)
129 |
130 | ___
131 |
132 | ### maxFee
133 |
134 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
135 |
136 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
137 |
138 | #### Inherited from
139 |
140 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxFee](types_transaction.SendTransactionParams.md#maxfee)
141 |
142 | #### Defined in
143 |
144 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
145 |
146 | ___
147 |
148 | ### maxRoundsToWaitForConfirmation
149 |
150 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
151 |
152 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
153 |
154 | #### Inherited from
155 |
156 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxRoundsToWaitForConfirmation](types_transaction.SendTransactionParams.md#maxroundstowaitforconfirmation)
157 |
158 | #### Defined in
159 |
160 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
161 |
162 | ___
163 |
164 | ### note
165 |
166 | • `Optional` **note**: [`TransactionNote`](../modules/types_transaction.md#transactionnote)
167 |
168 | The (optional) transaction note
169 |
170 | #### Defined in
171 |
172 | [src/types/transfer.ts:70](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L70)
173 |
174 | ___
175 |
176 | ### populateAppCallResources
177 |
178 | • `Optional` **populateAppCallResources**: `boolean`
179 |
180 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
181 |
182 | #### Inherited from
183 |
184 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[populateAppCallResources](types_transaction.SendTransactionParams.md#populateappcallresources)
185 |
186 | #### Defined in
187 |
188 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
189 |
190 | ___
191 |
192 | ### skipSending
193 |
194 | • `Optional` **skipSending**: `boolean`
195 |
196 | Whether to skip signing and sending the transaction to the chain (default: transaction signed and sent to chain, unless `atc` specified)
197 | and instead just return the raw transaction, e.g. so you can add it to a group of transactions
198 |
199 | #### Inherited from
200 |
201 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipSending](types_transaction.SendTransactionParams.md#skipsending)
202 |
203 | #### Defined in
204 |
205 | [src/types/transaction.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L32)
206 |
207 | ___
208 |
209 | ### skipWaiting
210 |
211 | • `Optional` **skipWaiting**: `boolean`
212 |
213 | Whether to skip waiting for the submitted transaction (only relevant if `skipSending` is `false` or unset)
214 |
215 | #### Inherited from
216 |
217 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipWaiting](types_transaction.SendTransactionParams.md#skipwaiting)
218 |
219 | #### Defined in
220 |
221 | [src/types/transaction.ts:34](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L34)
222 |
223 | ___
224 |
225 | ### suppressLog
226 |
227 | • `Optional` **suppressLog**: `boolean`
228 |
229 | Whether to suppress log messages from transaction send, default: do not suppress
230 |
231 | #### Inherited from
232 |
233 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[suppressLog](types_transaction.SendTransactionParams.md#suppresslog)
234 |
235 | #### Defined in
236 |
237 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
238 |
239 | ___
240 |
241 | ### to
242 |
243 | • **to**: `string` \| [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
244 |
245 | The account / account address that will receive the asset
246 |
247 | #### Defined in
248 |
249 | [src/types/transfer.ts:60](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L60)
250 |
251 | ___
252 |
253 | ### transactionParams
254 |
255 | • `Optional` **transactionParams**: `SuggestedParams`
256 |
257 | Optional transaction parameters
258 |
259 | #### Defined in
260 |
261 | [src/types/transfer.ts:66](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L66)
262 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:capabilities:client.md:
--------------------------------------------------------------------------------
```markdown
1 | # Client management
2 |
3 | Client management is one of the core capabilities provided by AlgoKit Utils. It allows you to create (auto-retry) [algod](https://developer.algorand.org/docs/rest-apis/algod), [indexer](https://developer.algorand.org/docs/rest-apis/indexer) and [kmd](https://developer.algorand.org/docs/rest-apis/kmd) clients against various networks resolved from environment or specified configuration.
4 |
5 | Any AlgoKit Utils function that needs one of these clients will take the underlying algosdk classes (`algosdk.Algodv2`, `algosdk.Indexer`, `algosdk.Kmd`) so inline with the [Modularity](../README.md#core-principles) principle you can use existing logic to get instances of these clients without needing to use the Client management capability if you prefer, including use of libraries like [useWallet](https://github.com/TxnLab/use-wallet) that have their own configuration mechanism.
6 |
7 | To see some usage examples check out the [automated tests](../../src/types/client-manager.spec.ts).
8 |
9 | ## `ClientManager`
10 |
11 | The [`ClientManager`](../code/classes/types_client_manager.ClientManager.md) is a class that is used to manage client instances.
12 |
13 | To get an instance of `ClientManager` you can get it from either [`AlgorandClient`](./algorand-client.md) via `algorand.client` or instantiate it directly:
14 |
15 | ```typescript
16 | import { ClientManager } from '@algorandfoundation/algokit-utils/types/client-manager'
17 |
18 | // Algod client only
19 | const clientManager = new ClientManager({ algod: algodClient })
20 | // All clients
21 | const clientManager = new ClientManager({ algod: algodClient, indexer: indexerClient, kmd: kmdClient })
22 | // Algod config only
23 | const clientManager = new ClientManager({ algodConfig })
24 | // All client configs
25 | const clientManager = new ClientManager({ algodConfig, indexerConfig, kmdConfig })
26 | ```
27 |
28 | ## Network configuration
29 |
30 | The network configuration is specified using the [`AlgoClientConfig`](../code/interfaces/types_network_client.AlgoClientConfig.md) interface. This same interface is used to specify the config for [algod](https://algorand.github.io/js-algorand-sdk/classes/Algodv2.html), [indexer](https://algorand.github.io/js-algorand-sdk/classes/Indexer.html) and [kmd](https://algorand.github.io/js-algorand-sdk/classes/Kmd.html) SDK clients.
31 |
32 | There are a number of ways to produce one of these configuration objects:
33 |
34 | - Manually specifying an object that conforms with the interface, e.g.
35 | ```typescript
36 | {
37 | server: 'https://myalgodnode.com'
38 | }
39 | // Or with the optional values:
40 | {
41 | server: 'https://myalgodnode.com',
42 | port: 443,
43 | token: 'SECRET_TOKEN'
44 | }
45 | ```
46 | - [`ClientManager.getConfigFromEnvironmentOrLocalNet()`](../code/classes/types_client_manager.ClientManager.md#getconfigfromenvironmentorlocalnet) - Loads the Algod client config, the Indexer client config and the Kmd config from well-known environment variables or if not found then default LocalNet; this is useful to have code that can work across multiple blockchain environments (including LocalNet), without having to change
47 | - [`ClientManager.getAlgodConfigFromEnvironment()`](../code/classes/types_client_manager.ClientManager.md#getalgodconfigfromenvironment) - Loads an Algod client config from well-known environment variables
48 | - [`ClientManager.getIndexerConfigFromEnvironment()`](../code/classes/types_client_manager.ClientManager.md#getindexerconfigfromenvironment) - Loads an Indexer client config from well-known environment variables; useful to have code that can work across multiple blockchain environments (including LocalNet), without having to change
49 | - [`ClientManager.getAlgoNodeConfig(network, config)`](../code/classes/types_client_manager.ClientManager.md#getalgonodeconfig) - Loads an Algod or indexer config against [AlgoNode free tier](https://nodely.io/docs/free/start) to either MainNet or TestNet
50 | - [`ClientManager.getDefaultLocalNetConfig(configOrPort)`](../code/classes/types_client_manager.ClientManager.md#getdefaultlocalnetconfig) - Loads an Algod, Indexer or Kmd config against [LocalNet](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/localnet.md) using the default configuration
51 |
52 | ## Clients
53 |
54 | ### Creating an SDK client instance
55 |
56 | Once you have the configuration for a client, to get a new client you can use the following functions:
57 |
58 | - [`ClientManager.getAlgoClient(config)`](../code/classes/types_client_manager.ClientManager.md#getalgoclient) - Returns an Algod client for the given configuration; the client automatically retries on transient HTTP errors
59 | - [`ClientManager.getIndexerClient(config, overrideIntDecoding)`](../code/classes/types_client_manager.ClientManager.md#getindexerclient) - Returns an Indexer client for given configuration
60 | - [`ClientManager.getKmdClient(config)`](../code/classes/types_client_manager.ClientManager.md#getkmdclient) - Returns a Kmd client for the given configuration
61 |
62 | You can also shortcut needing to write the likes of `ClientManager.getAlgoClient(ClientManager.getAlgodConfigFromEnvironment())` with environment shortcut methods:
63 |
64 | - [`ClientManager.getAlgodClientFromEnvironment(config)`](../code/classes/types_client_manager.ClientManager.md#getalgodclientfromenvironment) - Returns an Algod client by loading the config from environment variables
65 | - [`ClientManager.getIndexerClientFromEnvironment(config)`](../code/classes/types_client_manager.ClientManager.md#getindexerclientfromenvironment) - Returns an indexer client by loading the config from environment variables
66 | - [`ClientManager.getKmdClientFromEnvironment(config)`](../code/classes/types_client_manager.ClientManager.md#getkmdclientfromenvironment) - Returns a kmd client by loading the config from environment variables
67 |
68 | ### Accessing SDK clients via ClientManager instance
69 |
70 | Once you have a `ClientManager` instance, you can access the SDK clients for the various Algorand APIs from it (expressed here as `algorand.client` to denote the syntax via an [`AlgorandClient`](./algorand-client.md)):
71 |
72 | ```typescript
73 | const algorand = AlgorandClient.defaultLocalNet()
74 |
75 | const algodClient = algorand.client.algod
76 | const indexerClient = algorand.client.indexer
77 | const kmdClient = algorand.client.kmd
78 | ```
79 |
80 | If the method to create the `ClientManager` doesn't configure indexer or kmd ([both of which are optional](#client-management)), then accessing those clients will trigger an error to be thrown:
81 |
82 | ```typescript
83 | const algorand = AlgorandClient.fromClients({ algod })
84 |
85 | const algodClient = algorand.client.algod // OK
86 | algorand.client.indexer // Throws error
87 | algorand.client.kmd // Throws error
88 | ```
89 |
90 | ### Creating an app client instance
91 |
92 | See [how to create app clients via ClientManager via AlgorandClient](./app-client.md#via-algorandclient).
93 |
94 | ### Creating a TestNet dispenser API client instance
95 |
96 | You can also create a [TestNet dispenser API client instance](./dispenser-client.md#creating-a-dispenser-client) from `ClientManager` too.
97 |
98 | ## Automatic retry
99 |
100 | When receiving an Algod or Indexer client from AlgoKit Utils, it will be a special wrapper client that handles retrying transient failures. This is done via the [`AlgoHttpClientWithRetry`](../code/classes/types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md) class.
101 |
102 | ## Network information
103 |
104 | To get information about the current network you are connected to, you can use the [`network()`](../code/classes/types_client_manager.ClientManager.md#network) method on `ClientManager` or the `is{Network}()` methods (which in turn call `network()`) as shown below (expressed here as `algorand.client` to denote the syntax via an [`AlgorandClient`](./algorand-client.md)):
105 |
106 | ```typescript
107 | const algorand = AlgorandClient.defaultLocalNet()
108 |
109 | const { isTestNet, isMainNet, isLocalNet, genesisId, genesisHash } = await algorand.client.network()
110 | const testNet = await algorand.client.isTestNet()
111 | const mainNet = await algorand.client.isMainNet()
112 | const localNet = await algorand.client.isLocalNet()
113 | ```
114 |
115 | The first time `network()` is called it will make a HTTP call to algod to get the network parameters, but from then on it will be cached within that `ClientManager` instance for subsequent calls.
116 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:run-a-node:participate:online.md:
--------------------------------------------------------------------------------
```markdown
1 | title: Register online
2 |
3 | This section assumes that you have already [generated a participation key](generate_keys.md) for the account you plan to mark online.
4 |
5 | Registering an account online requires authorizing a [key registration transaction](../../get-details/transactions/index.md#key-registration-transaction) with details of the participation key that will vote on the account's behalf. Once the transaction is processed by the blockchain, the Verifiable Random Function public key (referred to as the VRF public key) is written into the account’s data and the account will start participating in consensus with that key. This VRF public key is how the account is associated with the specific participation keys.
6 |
7 | !!! info "Important"
8 | The moment a key registration transaction is confirmed by the network it takes 320 rounds for the change to take effect. In other words, if a key registration is confirmed in round 1000, the account will not start participating until round 1320.
9 |
10 | # Create an online key registration transaction
11 |
12 | Create a key registration transaction for the address: `EW64GC6F24M7NDSC5R3ES4YUVE3ZXXNMARJHDCCCLIHZU6TBEOC7XRSBG4` by inserting the following code snippet into the construction portion of the example shown in [Authorizing Transactions Offline](../../get-details/transactions/offline_transactions.md#unsigned-transaction-file-operations). The file produced and displayed with `goal clerk inspect` should look almost exactly the same as the output shown in the [constructing a register online transaction example](../../get-details/transactions/index.md#register-account-online).
13 |
14 |
15 | === "JavaScript"
16 | <!-- ===JSSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
17 | ```javascript
18 | // get suggested parameters
19 | const params = await algodClient.getTransactionParams().do();
20 |
21 | // Parent addr
22 | const addr = 'MWAPNXBDFFD2V5KWXAHWKBO7FO4JN36VR4CIBDKDDE7WAUAGZIXM3QPJW4';
23 | // VRF public key
24 | const selectionKey = 'LrpLhvzr+QpN/bivh6IPpOaKGbGzTTB5lJtVfixmmgk=';
25 | // Voting pub key
26 | const voteKey = 'G/lqTV6MKspW6J8wH2d8ZliZ5XZVZsruqSBJMwLwlmo=';
27 | // State proof key
28 | const stateProofKey =
29 | 'RpUpNWfZMjZ1zOOjv3MF2tjO714jsBt0GKnNsw0ihJ4HSZwci+d9zvUi3i67LwFUJgjQ5Dz4zZgHgGduElnmSA==';
30 |
31 | // sets up keys for 100000 rounds
32 | const numRounds = 1e5;
33 |
34 | // dilution default is sqrt num rounds
35 | const keyDilution = numRounds ** 0.5;
36 |
37 | // create transaction
38 | const onlineKeyreg = algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject(
39 | {
40 | from: addr,
41 | voteKey,
42 | selectionKey,
43 | stateProofKey,
44 | voteFirst: params.firstRound,
45 | voteLast: params.firstRound + numRounds,
46 | voteKeyDilution: keyDilution,
47 | suggestedParams: params,
48 | }
49 | );
50 |
51 | console.log(onlineKeyreg.get_obj_for_encoding());
52 | ```
53 | [Snippet Source](https://github.com/algorand/js-algorand-sdk/blob/examples/examples/participation.ts#L7-L41)
54 | <!-- ===JSSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
55 |
56 | === "Python"
57 | <!-- ===PYSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
58 | ```python
59 | # get suggested parameters
60 | params = algod_client.suggested_params()
61 |
62 | votekey = "eXq34wzh2UIxCZaI1leALKyAvSz/+XOe0wqdHagM+bw="
63 | selkey = "X84ReKTmp+yfgmMCbbokVqeFFFrKQeFZKEXG89SXwm4="
64 |
65 | num_rounds = int(1e5) # sets up keys for 100000 rounds
66 | key_dilution = int(num_rounds**0.5) # dilution default is sqrt num rounds
67 |
68 | # create transaction
69 | online_keyreg = transaction.KeyregTxn(
70 | sender="EW64GC6F24M7NDSC5R3ES4YUVE3ZXXNMARJHDCCCLIHZU6TBEOC7XRSBG4",
71 | votekey=votekey,
72 | selkey=selkey,
73 | votefst=params.first,
74 | votelst=params.first + num_rounds,
75 | votekd=key_dilution,
76 | sp=params,
77 | )
78 | print(online_keyreg.dictify())
79 | ```
80 | [Snippet Source](https://github.com/algorand/py-algorand-sdk/blob/examples/examples/participation.py#L6-L26)
81 | <!-- ===PYSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
82 |
83 | === "Java"
84 | <!-- ===JAVASDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
85 | ```java
86 | // get suggested parameters
87 | Response<TransactionParametersResponse> rsp = algodClient.TransactionParams().execute();
88 | TransactionParametersResponse sp = rsp.body();
89 |
90 | String address = "EW64GC6F24M7NDSC5R3ES4YUVE3ZXXNMARJHDCCCLIHZU6TBEOC7XRSBG4";
91 |
92 | String votekey = "eXq34wzh2UIxCZaI1leALKyAvSz/+XOe0wqdHagM+bw=";
93 | String skey = "X84ReKTmp+yfgmMCbbokVqeFFFrKQeFZKEXG89SXwm4=";
94 |
95 | Long numRounds = 100000l; // sets up keys for 100000 rounds
96 | Long keyDilution = (long) Math.sqrt(numRounds); // dilution default is sqrt num rounds
97 |
98 | Transaction keyRegTxn = Transaction.KeyRegistrationTransactionBuilder().suggestedParams(sp)
99 | .sender(address)
100 | .selectionPublicKeyBase64(skey)
101 | .participationPublicKeyBase64(votekey)
102 | .voteFirst(sp.lastRound)
103 | .voteLast(sp.lastRound + numRounds)
104 | .voteKeyDilution(keyDilution)
105 | .build();
106 | // ... sign and send to network
107 | ```
108 | [Snippet Source](https://github.com/algorand/java-algorand-sdk/blob/examples/examples/src/main/java/com/algorand/examples/Participation.java#L13-L34)
109 | <!-- ===JAVASDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
110 |
111 | === "Go"
112 | <!-- ===GOSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
113 | ```go
114 | fromAddr := "MWAPNXBDFFD2V5KWXAHWKBO7FO4JN36VR4CIBDKDDE7WAUAGZIXM3QPJW4"
115 | voteKey := "87iBW46PP4BpTDz6+IEGvxY6JqEaOtV0g+VWcJqoqtc="
116 | selKey := "1V2BE2lbFvS937H7pJebN0zxkqe1Nrv+aVHDTPbYRlw="
117 | sProofKey := "f0CYOA4yXovNBFMFX+1I/tYVBaAl7VN6e0Ki5yZA3H6jGqsU/LYHNaBkMQ/rN4M4F3UmNcpaTmbVbq+GgDsrhQ=="
118 | voteFirst := uint64(16532750)
119 | voteLast := uint64(19532750)
120 | keyDilution := uint64(1732)
121 | nonpart := false
122 | tx, err := transaction.MakeKeyRegTxnWithStateProofKey(
123 | fromAddr,
124 | []byte{},
125 | sp,
126 | voteKey,
127 | selKey,
128 | sProofKey,
129 | voteFirst,
130 | voteLast,
131 | keyDilution,
132 | nonpart,
133 | )
134 | ```
135 | [Snippet Source](https://github.com/algorand/go-algorand-sdk/blob/examples/examples/participation/main.go#L27-L47)
136 | <!-- ===GOSDK_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
137 |
138 | === "goal"
139 | <!-- ===GOAL_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
140 | ```zsh
141 | # WARNING: This command must be run on the node where the partkey lives and the node
142 | # must only have a single partkey for the account. Otherwise the command will
143 | # choose one at random.
144 | $ goal account changeonlinestatus --address=EW64GC6F24M7NDSC5R3ES4YUVE3ZXXNMARJHDCCCLIHZU6TBEOC7XRSBG4 --fee=2000 --firstvalid=6002000 --lastvalid=6003000 --online=true --txfile=online.txn
145 | ```
146 | <!-- ===GOAL_TRANSACTION_KEYREG_ONLINE_CREATE=== -->
147 |
148 | # Authorize and Send the Transaction
149 | Use the appropriate [authorization method](../../../get-details/transactions/signatures) to sign the transaction.
150 |
151 | !!! tip
152 | It is recommended that you authorize the transaction offline to protect the security of your private keys, especially for high-value participating accounts.
153 |
154 | [Verify that the participation key is on the node](../generate_keys#check-that-the-key-exists) prior to submitting the signed transaction. Once verified, wait for the network to reach the transaction's first valid round, then [submit](../../../archive/build-apps/hello_world#submit-the-transaction) the transaction and the SDK method "wait for confirmation".
155 |
156 | # Check that the node is participating
157 |
158 | At any time, you can validate whether your node is participating by `grep`-ing the `node.log` file in your data directory, looking for a `"VoteBroadcast"` messages where the `"Sender"` is your public key participation address.
159 |
160 | ```
161 | $ grep 'VoteBroadcast' node.log
162 | ...
163 | {"Context":"Agreement","Hash":"QJADVNJZDXYEQUPHITB6REFDGBY4AHBPPBIPVXLOPOASZA4T3PIA","ObjectPeriod":0,"ObjectRound":896659,"ObjectStep":2,"Period":0,"Round":0,"Sender":"3IE2GDYYSI56U53AQ6UUWRGAIGG5D4RHWLMCXJOPWQJA2ABF2X2A","Step":0,"Type":"VoteBroadcast","Weight":1,"WeightTotal":1,"file":"pseudonode.go","function":"github.com/algorand/go-algorand/agreement.pseudonodeVotesTask.execute","level":"info","line":344,"msg":"vote created for broadcast (weight 1, total weight 1)","time":"2019-05-10T18:38:54.137592-04:00"}
164 | ...
165 | ```
166 |
167 | **See also**
168 |
169 | - [Key Registration Transactions](../../../get-details/transactions/#key-registration-transaction)
170 | - [Register account online](../../../get-details/transactions/#register-account-online)
171 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/developer:docs:details:conduit.md:
--------------------------------------------------------------------------------
```markdown
1 | title: Conduit
2 |
3 | Conduit is a plugin based framework that functions like a data pipeline. Conduit is primarily intended to allow dApp developers to customize the data the dApp wants to monitor/aggregate/act on from the Algorand Blockchain.
4 |
5 | Conduit can be used to:
6 |
7 | - Build a notification system for on chain events.
8 | - Power a next generation block explorer.
9 | - Select dApp specific data and act on specific dApp transactions.
10 | - Identify and act on dApp specific Token actions/movements.
11 | - Identify and act on specific Algorand transactions based on Address or other transaction properties.
12 | - Build a custom Indexer for a new [ARC](https://github.com/algorandfoundation/ARCs).
13 | - Send blockchain data to another streaming data platform for additional processing (e.g. RabbitMQ, Kafka, ZeroMQ).
14 | - Build an NFT catalog based on different standards.
15 | - Have Searchability on a massively reduced set of transactions, requiring much less disk space.
16 |
17 | !!!note
18 | Full documentation for the Conduit framework is available in the [Conduit Github repository](https://github.com/algorand/conduit/blob/master/README.md).
19 |
20 |
21 | # Installing Conduit
22 |
23 | Conduit can be installed by downloading the [built binaries](https://github.com/algorand/conduit/releases), using a [docker image](https://hub.docker.com/r/algorand/conduit) on docker hub, or [built from source](https://github.com/algorand/conduit/tree/master#install-from-source). Full instructions for Installation of Conduit are described in the [Conduit Github Repository](https://github.com/algorand/conduit/blob/master/README.md).
24 |
25 |
26 | # Conduit Architecture
27 |
28 | The framework consists of three primary plugin components, _Importers_, _Processors_, and _Exporters_. _Importer_ plugins are designed to source data into the pipeline, _Processors_ manipulate or filter the data, and _Exporter_ plugins act on the processed data. Within a given instance of Conduit, the pipeline supports one _importer_ and one _exporter_, while zero or more _processor_ plugins can be used.
29 |
30 | <center>
31 | {: style="width:700px" align=center }
32 | </center>
33 |
34 | Default installations of the conduit binaries include two types of _importers_ ([`algod`](https://github.com/algorand/conduit/tree/master/conduit/plugins/importers/algod) and [`file_reader`](https://github.com/algorand/conduit/tree/master/conduit/plugins/importers/filereader)). The `algod` plugin is used to source data from an [Algorand Follower node](https://github.com/algorand/conduit/blob/master/docs/tutorials/IndexerWriter.md#node-algod-with-follow-mode) or an [Archival node](https://developer.algorand.org/docs/run-a-node/setup/types/#archival-mode). Using a Follower node is the recommended approach as you have access to more data for use in the _processor_ and also have access to the `postgresql` _exporter_. The `file_reader` plugin can be used to source block data from the filesystem. Most dApps will most likely use the `algod` importer.
35 |
36 | The default installation provides one _processor_ that filters the data based on transaction properties. This plugin ([`filter_processor`](https://github.com/algorand/conduit/tree/master/conduit/plugins/processors/filterprocessor)) will be described in more detail in a subsequent section.
37 |
38 | The default installation provides two _exporters_ ([`postgresql`](https://github.com/algorand/conduit/tree/master/conduit/plugins/exporters/postgresql) and [`file_writer`](https://github.com/algorand/conduit/tree/master/conduit/plugins/exporters/filewriter)). The `file_writer` _exporter_, writes block data to the filesystem. The `postgresql` _exporter_ writes block data to a postgreSQL database.
39 |
40 | # Configuring Conduit
41 |
42 | Conduit is configured by defining all the plugins the pipeline will support in a YAML file called `conduit.yml`. These plugins must be built and part of the binaries that the specific instance of Conduit is using. This file is used to define which _importer_, _processors_, and _exporter_ plugin a particular instance is using. In addition, individual plugin properties are also configured in the YAML file as well. For more information on creating and configuring the YAML file see the [Conduit documentation](https://github.com/algorand/conduit/blob/master/README.md#create-conduityml-configuration-file).
43 |
44 | !!!note
45 | Multiple instances of Conduit can be running simultaneously, with different configurations. No two instances can use the same follower node though.
46 |
47 | # Running Conduit
48 |
49 | Once Installed and configured, start Conduit with your data directory as an argument:
50 |
51 | `./conduit -d data`
52 |
53 | !!!warning
54 | This data directory should be unique to conduit. This is not the data directory that algod uses.
55 |
56 |
57 | # Customizing Conduit
58 |
59 | In addition to the default plugins described above, the Conduit framework allows custom plugins to be developed allowing dApp developers total customization of how the data is sourced, processed and stored or acted on. This process is described in detail with several tutorials available in the [Conduit Github repository](https://github.com/algorand/conduit/blob/master/docs/PluginDevelopment.md). The Conduit team also hosts a known list of [externally developed plugins](https://github.com/algorand/conduit/blob/master/docs/ExternalPlugins.md).
60 |
61 | !!!note
62 | The Conduit team is actively looking for sample plugins that illustrate interesting use cases. If you build a plugin and want to share your work, please file a PR on the Conduit repository to add it to that page.
63 |
64 | # Using the Indexer API with an Instance of Conduit
65 |
66 | When using Conduit, some dApps may wish to continue to use the Indexer API that Algorand provides. If your application will require this API, you will need to setup the Conduit pipeline as described in the [Conduit documentation](https://github.com/algorand/conduit/blob/master/docs/tutorials/IndexerWriter.md).
67 |
68 | !!!note
69 | The 2.X versions of Indexer used all the blockchain data since its inception. With Conduit, you can decide how much data you really want to store and search with the Indexer API.
70 |
71 | # Filtering Block Data
72 |
73 | One of the primary use cases of Conduit is to filter data that a specific dApp is interested in examining or acting on. To accommodate this, the default installation of Conduit provides the `filter_processor`. This filter is configured similarly to the following in `config.yml`.
74 |
75 | ```sh
76 | name: filter_processor
77 | config:
78 | # Whether the expression searches inner transactions for matches.
79 | search-inner: true
80 |
81 | # Whether to include the entire transaction group when the filter
82 | # conditions are met.
83 | omit-group-transactions: true
84 |
85 | # The list of filter expressions to use when matching transactions.
86 | filters:
87 | - any:
88 | - tag: "txn.rcv"
89 | expression-type: "equal"
90 | expression: "ADDRESS"
91 | ```
92 |
93 | After specifying the proper name and two basic parameters, one or more filters can be added to the YAML file to specify particular transactions your dApp is interested in. In the above example, Conduit will only store/act on transactions where a specific address is the receiver of a transaction. Developers can set any number of filters, specifying different tags, expression-types and expressions. The `tag` property has access to all transaction properties defined in the [Developer documentation](https://developer.algorand.org/docs/get-details/transactions/transactions/). In addition, if your instance of Conduit is attached to a Follower node, the filter can also tag specific data in the `ApplyData` set. `ApplyData` contains data that needs to be applied to the ledger, based on the results of a transaction(s). This includes properties like changes to Closing Amount , Application State, etc. The full list of available properties in the `ApplyData` set is available in the [Conduit Documentation](https://github.com/algorand/conduit/blob/master/conduit/plugins/processors/filterprocessor/Filter_tags.md). For more information and examples of other filters see the [Conduit filter examples](https://github.com/algorand/conduit/tree/master/conduit/plugins/processors/filterprocessor#examples).
94 |
95 |
96 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/transfer](../modules/types_transfer.md) / EnsureFundedParams
2 |
3 | # Interface: EnsureFundedParams
4 |
5 | [types/transfer](../modules/types_transfer.md).EnsureFundedParams
6 |
7 | **`Deprecated`**
8 |
9 | Parameters for `ensureFunded` call.
10 |
11 | ## Hierarchy
12 |
13 | - [`SendTransactionParams`](types_transaction.SendTransactionParams.md)
14 |
15 | ↳ **`EnsureFundedParams`**
16 |
17 | ## Table of contents
18 |
19 | ### Properties
20 |
21 | - [accountToFund](types_transfer.EnsureFundedParams.md#accounttofund)
22 | - [atc](types_transfer.EnsureFundedParams.md#atc)
23 | - [fee](types_transfer.EnsureFundedParams.md#fee)
24 | - [fundingSource](types_transfer.EnsureFundedParams.md#fundingsource)
25 | - [lease](types_transfer.EnsureFundedParams.md#lease)
26 | - [maxFee](types_transfer.EnsureFundedParams.md#maxfee)
27 | - [maxRoundsToWaitForConfirmation](types_transfer.EnsureFundedParams.md#maxroundstowaitforconfirmation)
28 | - [minFundingIncrement](types_transfer.EnsureFundedParams.md#minfundingincrement)
29 | - [minSpendingBalance](types_transfer.EnsureFundedParams.md#minspendingbalance)
30 | - [note](types_transfer.EnsureFundedParams.md#note)
31 | - [populateAppCallResources](types_transfer.EnsureFundedParams.md#populateappcallresources)
32 | - [skipSending](types_transfer.EnsureFundedParams.md#skipsending)
33 | - [skipWaiting](types_transfer.EnsureFundedParams.md#skipwaiting)
34 | - [suppressLog](types_transfer.EnsureFundedParams.md#suppresslog)
35 | - [transactionParams](types_transfer.EnsureFundedParams.md#transactionparams)
36 |
37 | ## Properties
38 |
39 | ### accountToFund
40 |
41 | • **accountToFund**: `string` \| [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
42 |
43 | The account to fund
44 |
45 | #### Defined in
46 |
47 | [src/types/transfer.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L40)
48 |
49 | ___
50 |
51 | ### atc
52 |
53 | • `Optional` **atc**: `AtomicTransactionComposer`
54 |
55 | An optional `AtomicTransactionComposer` to add the transaction to, if specified then `skipSending: undefined` has the same effect as `skipSending: true`
56 |
57 | #### Inherited from
58 |
59 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[atc](types_transaction.SendTransactionParams.md#atc)
60 |
61 | #### Defined in
62 |
63 | [src/types/transaction.ts:36](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L36)
64 |
65 | ___
66 |
67 | ### fee
68 |
69 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
70 |
71 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
72 |
73 | #### Inherited from
74 |
75 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[fee](types_transaction.SendTransactionParams.md#fee)
76 |
77 | #### Defined in
78 |
79 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
80 |
81 | ___
82 |
83 | ### fundingSource
84 |
85 | • `Optional` **fundingSource**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom) \| [`TestNetDispenserApiClient`](../classes/types_dispenser_client.TestNetDispenserApiClient.md)
86 |
87 | The account to use as a funding source, will default to using the dispenser account returned by `algokit.getDispenserAccount`
88 |
89 | #### Defined in
90 |
91 | [src/types/transfer.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L42)
92 |
93 | ___
94 |
95 | ### lease
96 |
97 | • `Optional` **lease**: `string` \| `Uint8Array`
98 |
99 | An (optional) [transaction lease](https://developer.algorand.org/articles/leased-transactions-securing-advanced-smart-contract-design/) to apply
100 |
101 | #### Defined in
102 |
103 | [src/types/transfer.ts:52](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L52)
104 |
105 | ___
106 |
107 | ### maxFee
108 |
109 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
110 |
111 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
112 |
113 | #### Inherited from
114 |
115 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxFee](types_transaction.SendTransactionParams.md#maxfee)
116 |
117 | #### Defined in
118 |
119 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
120 |
121 | ___
122 |
123 | ### maxRoundsToWaitForConfirmation
124 |
125 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
126 |
127 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
128 |
129 | #### Inherited from
130 |
131 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[maxRoundsToWaitForConfirmation](types_transaction.SendTransactionParams.md#maxroundstowaitforconfirmation)
132 |
133 | #### Defined in
134 |
135 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
136 |
137 | ___
138 |
139 | ### minFundingIncrement
140 |
141 | • `Optional` **minFundingIncrement**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
142 |
143 | When issuing a funding amount, the minimum amount to transfer (avoids many small transfers if this gets called often on an active account)
144 |
145 | #### Defined in
146 |
147 | [src/types/transfer.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L46)
148 |
149 | ___
150 |
151 | ### minSpendingBalance
152 |
153 | • **minSpendingBalance**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
154 |
155 | The minimum balance of Algo that the account should have available to spend (i.e. on top of minimum balance requirement)
156 |
157 | #### Defined in
158 |
159 | [src/types/transfer.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L44)
160 |
161 | ___
162 |
163 | ### note
164 |
165 | • `Optional` **note**: [`TransactionNote`](../modules/types_transaction.md#transactionnote)
166 |
167 | The (optional) transaction note, default: "Funding account to meet minimum requirement"
168 |
169 | #### Defined in
170 |
171 | [src/types/transfer.ts:50](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L50)
172 |
173 | ___
174 |
175 | ### populateAppCallResources
176 |
177 | • `Optional` **populateAppCallResources**: `boolean`
178 |
179 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
180 |
181 | #### Inherited from
182 |
183 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[populateAppCallResources](types_transaction.SendTransactionParams.md#populateappcallresources)
184 |
185 | #### Defined in
186 |
187 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
188 |
189 | ___
190 |
191 | ### skipSending
192 |
193 | • `Optional` **skipSending**: `boolean`
194 |
195 | Whether to skip signing and sending the transaction to the chain (default: transaction signed and sent to chain, unless `atc` specified)
196 | and instead just return the raw transaction, e.g. so you can add it to a group of transactions
197 |
198 | #### Inherited from
199 |
200 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipSending](types_transaction.SendTransactionParams.md#skipsending)
201 |
202 | #### Defined in
203 |
204 | [src/types/transaction.ts:32](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L32)
205 |
206 | ___
207 |
208 | ### skipWaiting
209 |
210 | • `Optional` **skipWaiting**: `boolean`
211 |
212 | Whether to skip waiting for the submitted transaction (only relevant if `skipSending` is `false` or unset)
213 |
214 | #### Inherited from
215 |
216 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[skipWaiting](types_transaction.SendTransactionParams.md#skipwaiting)
217 |
218 | #### Defined in
219 |
220 | [src/types/transaction.ts:34](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L34)
221 |
222 | ___
223 |
224 | ### suppressLog
225 |
226 | • `Optional` **suppressLog**: `boolean`
227 |
228 | Whether to suppress log messages from transaction send, default: do not suppress
229 |
230 | #### Inherited from
231 |
232 | [SendTransactionParams](types_transaction.SendTransactionParams.md).[suppressLog](types_transaction.SendTransactionParams.md#suppresslog)
233 |
234 | #### Defined in
235 |
236 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
237 |
238 | ___
239 |
240 | ### transactionParams
241 |
242 | • `Optional` **transactionParams**: `SuggestedParams`
243 |
244 | Optional transaction parameters
245 |
246 | #### Defined in
247 |
248 | [src/types/transfer.ts:48](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transfer.ts#L48)
249 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md:
--------------------------------------------------------------------------------
```markdown
1 | [@algorandfoundation/algokit-utils](../README.md) / [types/app](../modules/types_app.md) / AppDeploymentParams
2 |
3 | # Interface: AppDeploymentParams
4 |
5 | [types/app](../modules/types_app.md).AppDeploymentParams
6 |
7 | The parameters to deploy an app
8 |
9 | ## Hierarchy
10 |
11 | - `Omit`\<[`CreateAppParams`](types_app.CreateAppParams.md), ``"onCompleteAction"`` \| ``"args"`` \| ``"note"`` \| ``"skipSending"`` \| ``"skipWaiting"`` \| ``"atc"``\>
12 |
13 | ↳ **`AppDeploymentParams`**
14 |
15 | ## Table of contents
16 |
17 | ### Properties
18 |
19 | - [approvalProgram](types_app.AppDeploymentParams.md#approvalprogram)
20 | - [clearStateProgram](types_app.AppDeploymentParams.md#clearstateprogram)
21 | - [createArgs](types_app.AppDeploymentParams.md#createargs)
22 | - [createOnCompleteAction](types_app.AppDeploymentParams.md#createoncompleteaction)
23 | - [deleteArgs](types_app.AppDeploymentParams.md#deleteargs)
24 | - [deployTimeParams](types_app.AppDeploymentParams.md#deploytimeparams)
25 | - [existingDeployments](types_app.AppDeploymentParams.md#existingdeployments)
26 | - [fee](types_app.AppDeploymentParams.md#fee)
27 | - [from](types_app.AppDeploymentParams.md#from)
28 | - [maxFee](types_app.AppDeploymentParams.md#maxfee)
29 | - [maxRoundsToWaitForConfirmation](types_app.AppDeploymentParams.md#maxroundstowaitforconfirmation)
30 | - [metadata](types_app.AppDeploymentParams.md#metadata)
31 | - [onSchemaBreak](types_app.AppDeploymentParams.md#onschemabreak)
32 | - [onUpdate](types_app.AppDeploymentParams.md#onupdate)
33 | - [populateAppCallResources](types_app.AppDeploymentParams.md#populateappcallresources)
34 | - [schema](types_app.AppDeploymentParams.md#schema)
35 | - [suppressLog](types_app.AppDeploymentParams.md#suppresslog)
36 | - [transactionParams](types_app.AppDeploymentParams.md#transactionparams)
37 | - [updateArgs](types_app.AppDeploymentParams.md#updateargs)
38 |
39 | ## Properties
40 |
41 | ### approvalProgram
42 |
43 | • **approvalProgram**: `string` \| `Uint8Array`
44 |
45 | The approval program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array)
46 |
47 | #### Inherited from
48 |
49 | Omit.approvalProgram
50 |
51 | #### Defined in
52 |
53 | [src/types/app.ts:135](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L135)
54 |
55 | ___
56 |
57 | ### clearStateProgram
58 |
59 | • **clearStateProgram**: `string` \| `Uint8Array`
60 |
61 | The clear state program as raw teal (string) or compiled teal, base 64 encoded as a byte array (Uint8Array)
62 |
63 | #### Inherited from
64 |
65 | Omit.clearStateProgram
66 |
67 | #### Defined in
68 |
69 | [src/types/app.ts:137](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L137)
70 |
71 | ___
72 |
73 | ### createArgs
74 |
75 | • `Optional` **createArgs**: [`AppCallArgs`](../modules/types_app.md#appcallargs)
76 |
77 | Any args to pass to any create transaction that is issued as part of deployment
78 |
79 | #### Defined in
80 |
81 | [src/types/app.ts:323](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L323)
82 |
83 | ___
84 |
85 | ### createOnCompleteAction
86 |
87 | • `Optional` **createOnCompleteAction**: ``"no_op"`` \| ``"opt_in"`` \| ``"close_out"`` \| ``"update_application"`` \| ``"delete_application"`` \| `NoOpOC` \| `OptInOC` \| `CloseOutOC` \| `UpdateApplicationOC` \| `DeleteApplicationOC`
88 |
89 | Override the on-completion action for the create call; defaults to NoOp
90 |
91 | #### Defined in
92 |
93 | [src/types/app.ts:325](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L325)
94 |
95 | ___
96 |
97 | ### deleteArgs
98 |
99 | • `Optional` **deleteArgs**: [`AppCallArgs`](../modules/types_app.md#appcallargs)
100 |
101 | Any args to pass to any delete transaction that is issued as part of deployment
102 |
103 | #### Defined in
104 |
105 | [src/types/app.ts:329](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L329)
106 |
107 | ___
108 |
109 | ### deployTimeParams
110 |
111 | • `Optional` **deployTimeParams**: [`TealTemplateParams`](types_app.TealTemplateParams.md)
112 |
113 | Any deploy-time parameters to replace in the TEAL code
114 |
115 | #### Defined in
116 |
117 | [src/types/app.ts:315](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L315)
118 |
119 | ___
120 |
121 | ### existingDeployments
122 |
123 | • `Optional` **existingDeployments**: [`AppLookup`](types_app.AppLookup.md)
124 |
125 | Optional cached value of the existing apps for the given creator
126 |
127 | #### Defined in
128 |
129 | [src/types/app.ts:321](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L321)
130 |
131 | ___
132 |
133 | ### fee
134 |
135 | • `Optional` **fee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
136 |
137 | The flat fee you want to pay, useful for covering extra fees in a transaction group or app call
138 |
139 | #### Inherited from
140 |
141 | Omit.fee
142 |
143 | #### Defined in
144 |
145 | [src/types/transaction.ts:40](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L40)
146 |
147 | ___
148 |
149 | ### from
150 |
151 | • **from**: [`SendTransactionFrom`](../modules/types_transaction.md#sendtransactionfrom)
152 |
153 | The account (with private key loaded) that will send the transaction
154 |
155 | #### Inherited from
156 |
157 | Omit.from
158 |
159 | #### Defined in
160 |
161 | [src/types/app.ts:133](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L133)
162 |
163 | ___
164 |
165 | ### maxFee
166 |
167 | • `Optional` **maxFee**: [`AlgoAmount`](../classes/types_amount.AlgoAmount.md)
168 |
169 | The maximum fee that you are happy to pay (default: unbounded) - if this is set it's possible the transaction could get rejected during network congestion
170 |
171 | #### Inherited from
172 |
173 | Omit.maxFee
174 |
175 | #### Defined in
176 |
177 | [src/types/transaction.ts:42](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L42)
178 |
179 | ___
180 |
181 | ### maxRoundsToWaitForConfirmation
182 |
183 | • `Optional` **maxRoundsToWaitForConfirmation**: `number`
184 |
185 | The maximum number of rounds to wait for confirmation, only applies if `skipWaiting` is `undefined` or `false`, default: wait up to 5 rounds
186 |
187 | #### Inherited from
188 |
189 | Omit.maxRoundsToWaitForConfirmation
190 |
191 | #### Defined in
192 |
193 | [src/types/transaction.ts:44](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L44)
194 |
195 | ___
196 |
197 | ### metadata
198 |
199 | • **metadata**: [`AppDeployMetadata`](types_app.AppDeployMetadata.md)
200 |
201 | The deployment metadata
202 |
203 | #### Defined in
204 |
205 | [src/types/app.ts:313](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L313)
206 |
207 | ___
208 |
209 | ### onSchemaBreak
210 |
211 | • `Optional` **onSchemaBreak**: [`OnSchemaBreak`](../enums/types_app.OnSchemaBreak.md) \| ``"replace"`` \| ``"fail"`` \| ``"append"``
212 |
213 | What action to perform if a schema break is detected
214 |
215 | #### Defined in
216 |
217 | [src/types/app.ts:317](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L317)
218 |
219 | ___
220 |
221 | ### onUpdate
222 |
223 | • `Optional` **onUpdate**: ``"replace"`` \| ``"fail"`` \| ``"append"`` \| [`OnUpdate`](../enums/types_app.OnUpdate.md) \| ``"update"``
224 |
225 | What action to perform if a TEAL update is detected
226 |
227 | #### Defined in
228 |
229 | [src/types/app.ts:319](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L319)
230 |
231 | ___
232 |
233 | ### populateAppCallResources
234 |
235 | • `Optional` **populateAppCallResources**: `boolean`
236 |
237 | Whether to use simulate to automatically populate app call resources in the txn objects. Defaults to true when there are app calls in the group.
238 |
239 | #### Inherited from
240 |
241 | Omit.populateAppCallResources
242 |
243 | #### Defined in
244 |
245 | [src/types/transaction.ts:46](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L46)
246 |
247 | ___
248 |
249 | ### schema
250 |
251 | • **schema**: [`AppStorageSchema`](types_app.AppStorageSchema.md)
252 |
253 | The storage schema to request for the created app
254 |
255 | #### Inherited from
256 |
257 | Omit.schema
258 |
259 | #### Defined in
260 |
261 | [src/types/app.ts:152](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L152)
262 |
263 | ___
264 |
265 | ### suppressLog
266 |
267 | • `Optional` **suppressLog**: `boolean`
268 |
269 | Whether to suppress log messages from transaction send, default: do not suppress
270 |
271 | #### Inherited from
272 |
273 | Omit.suppressLog
274 |
275 | #### Defined in
276 |
277 | [src/types/transaction.ts:38](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/transaction.ts#L38)
278 |
279 | ___
280 |
281 | ### transactionParams
282 |
283 | • `Optional` **transactionParams**: `SuggestedParams`
284 |
285 | Optional transaction parameters
286 |
287 | #### Inherited from
288 |
289 | Omit.transactionParams
290 |
291 | #### Defined in
292 |
293 | [src/types/app.ts:139](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L139)
294 |
295 | ___
296 |
297 | ### updateArgs
298 |
299 | • `Optional` **updateArgs**: [`AppCallArgs`](../modules/types_app.md#appcallargs)
300 |
301 | Any args to pass to any update transaction that is issued as part of deployment
302 |
303 | #### Defined in
304 |
305 | [src/types/app.ts:327](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/app.ts#L327)
306 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0200.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 200
3 | title: Algorand Smart Contract Token Specification
4 | description: Base specification for tokens implemented as smart contracts
5 | author: Nicholas Shellabarger (@temptemp3)
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/223
7 | status: Living
8 | type: Standards Track
9 | category: Interface
10 | sub-category: Application
11 | created: 2023-07-03
12 | requires: 3, 4, 22, 28
13 | ---
14 |
15 | # Algorand Smart Contract Token Specification
16 |
17 | ## Abstract
18 |
19 | This ARC (Algorand Request for Comments) specifies an interface for tokens to be implemented on Algorand as smart contracts. The interface defines a minimal interface required for tokens to be held and transferred, with the potential for further augmentation through additional standard interfaces and custom methods.
20 |
21 | ## Motivation
22 |
23 | Currently, most tokens in the Algorand ecosystem are represented by ASAs (Algorand Standard Assets). However, to provide rich extra functionality, it can be desirable to implement tokens as smart contracts instead. To foster an interoperable token ecosystem, it is necessary that the core interfaces for tokens be standardized.
24 |
25 | ## Specification
26 |
27 | 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>.
28 |
29 | ### Core Token specification
30 |
31 | A smart contract token that is compliant with this standard MUST implement the following interface:
32 |
33 | ```json
34 | {
35 | "name": "ARC-200",
36 | "desc": "Smart Contract Token Base Interface",
37 | "methods": [
38 | {
39 | "name": "arc200_name",
40 | "desc": "Returns the name of the token",
41 | "readonly": true,
42 | "args": [],
43 | "returns": { "type": "byte[32]", "desc": "The name of the token" }
44 | },
45 | {
46 | "name": "arc200_symbol",
47 | "desc": "Returns the symbol of the token",
48 | "readonly": true,
49 | "args": [],
50 | "returns": { "type": "byte[8]", "desc": "The symbol of the token" }
51 | },
52 | {
53 | "name": "arc200_decimals",
54 | "desc": "Returns the decimals of the token",
55 | "readonly": true,
56 | "args": [],
57 | "returns": { "type": "uint8", "desc": "The decimals of the token" }
58 | },
59 | {
60 | "name": "arc200_totalSupply",
61 | "desc": "Returns the total supply of the token",
62 | "readonly": true,
63 | "args": [],
64 | "returns": { "type": "uint256", "desc": "The total supply of the token" }
65 | },
66 | {
67 | "name": "arc200_balanceOf",
68 | "desc": "Returns the current balance of the owner of the token",
69 | "readonly": true,
70 | "args": [
71 | {
72 | "type": "address",
73 | "name": "owner",
74 | "desc": "The address of the owner of the token"
75 | }
76 | ],
77 | "returns": {
78 | "type": "uint256",
79 | "desc": "The current balance of the holder of the token"
80 | }
81 | },
82 | {
83 | "name": "arc200_transfer",
84 | "desc": "Transfers tokens",
85 | "readonly": false,
86 | "args": [
87 | {
88 | "type": "address",
89 | "name": "to",
90 | "desc": "The destination of the transfer"
91 | },
92 | {
93 | "type": "uint256",
94 | "name": "value",
95 | "desc": "Amount of tokens to transfer"
96 | }
97 | ],
98 | "returns": { "type": "bool", "desc": "Success" }
99 | },
100 | {
101 | "name": "arc200_transferFrom",
102 | "desc": "Transfers tokens from source to destination as approved spender",
103 | "readonly": false,
104 | "args": [
105 | {
106 | "type": "address",
107 | "name": "from",
108 | "desc": "The source of the transfer"
109 | },
110 | {
111 | "type": "address",
112 | "name": "to",
113 | "desc": "The destination of the transfer"
114 | },
115 | {
116 | "type": "uint256",
117 | "name": "value",
118 | "desc": "Amount of tokens to transfer"
119 | }
120 | ],
121 | "returns": { "type": "bool", "desc": "Success" }
122 | },
123 | {
124 | "name": "arc200_approve",
125 | "desc": "Approve spender for a token",
126 | "readonly": false,
127 | "args": [
128 | { "type": "address", "name": "spender" },
129 | { "type": "uint256", "name": "value" }
130 | ],
131 | "returns": { "type": "bool", "desc": "Success" }
132 | },
133 | {
134 | "name": "arc200_allowance",
135 | "desc": "Returns the current allowance of the spender of the tokens of the owner",
136 | "readonly": true,
137 | "args": [
138 | { "type": "address", "name": "owner" },
139 | { "type": "address", "name": "spender" }
140 | ],
141 | "returns": { "type": "uint256", "desc": "The remaining allowance" }
142 | }
143 | ],
144 | "events": [
145 | {
146 | "name": "arc200_Transfer",
147 | "desc": "Transfer of tokens",
148 | "args": [
149 | {
150 | "type": "address",
151 | "name": "from",
152 | "desc": "The source of transfer of tokens"
153 | },
154 | {
155 | "type": "address",
156 | "name": "to",
157 | "desc": "The destination of transfer of tokens"
158 | },
159 | {
160 | "type": "uint256",
161 | "name": "value",
162 | "desc": "The amount of tokens transferred"
163 | }
164 | ]
165 | },
166 | {
167 | "name": "arc200_Approval",
168 | "desc": "Approval of tokens",
169 | "args": [
170 | {
171 | "type": "address",
172 | "name": "owner",
173 | "desc": "The owner of the tokens"
174 | },
175 | {
176 | "type": "address",
177 | "name": "spender",
178 | "desc": "The approved spender of tokens"
179 | },
180 | {
181 | "type": "uint256",
182 | "name": "value",
183 | "desc": "The amount of tokens approve"
184 | }
185 | ]
186 | }
187 | ]
188 | }
189 | ```
190 |
191 | Ownership of a token by a zero address indicates that a token is out of circulation indefinitely, or otherwise burned or destroyed.
192 |
193 | The methods `arc200_transfer` and `arc200_transferFrom` method MUST error when the balance of `from` is insufficient. In the case of the `arc200_transfer` method, from is implied as the `owner` of the token.
194 | The `arc200_transferFrom` method MUST error unless called by an `spender` approved by an `owner`.
195 | The methods `arc200_transfer` and `arc200_transferFrom` MUST emit a `Transfer` event.
196 | A `arc200_Transfer` event SHOULD be emitted, with `from` being the zero address, when a token is minted.
197 | A `arc200_Transfer` event SHOULD be emitted, with `to` being the zero address, when a token is destroyed.
198 |
199 | The `arc200_Approval` event MUST be emitted when an `arc200_approve` or `arc200_transferFrom` method is called successfully.
200 |
201 | A value of zero for the `arc200_approve` method and the `arc200_Approval` event indicates no approval.
202 | The `arc200_transferFrom` method and the `arc200_Approval` event indicates the approval value after it is decremented.
203 |
204 | The contract MUST allow multiple operators per owner.
205 |
206 | All methods in this standard that are marked as `readonly` MUST be read-only as defined by [ARC-22](./arc-0022.md).
207 |
208 | ## Rationale
209 |
210 | This specification is based on <a href="https://eips.ethereum.org/EIPS/eip-20">ERC-20</a>.
211 |
212 | ### Core Specification
213 |
214 | The core specification identical to ERC-20.
215 |
216 | ## Backwards Compatibility
217 |
218 | This standard introduces a new kind of token that is incompatible with tokens defined as ASAs.
219 | Applications that want to index, manage, or view tokens on Algorand will need to handle these new smart tokens as well as the already popular ASA implementation of tokens will need to add code to handle both, and existing smart contracts that handle ASA-based tokens will not work with these new smart contract tokens.
220 |
221 | While this is a severe backward incompatibility, smart contract tokens are necessary to provide richer and more diverse functionality for tokens.
222 |
223 | ## Security Considerations
224 |
225 | The fact that anybody can create a new implementation of a smart contract tokens standard opens the door for many of those implementations to contain security bugs.
226 | Additionally, malicious token implementations could contain hidden anti-features unexpected by users.
227 | As with other smart contract domains, it is difficult for users to verify or understand the security properties of smart contract tokens.
228 | This is a tradeoff compared with ASA tokens, which share a smaller set of security properties that are easier to validate to gain the possibility of adding novel features.
229 |
230 | ## Copyright
231 |
232 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
233 |
```