This is page 69 of 93. Use http://codebase.md/goplausible/algorand-mcp?lines=true&page={x} to view the full context. # Directory Structure ``` ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── llms-install.md ├── llms.txt ├── package.json ├── packages │ ├── client │ │ ├── .env.example │ │ ├── package.json │ │ ├── README.md │ │ ├── src │ │ │ ├── env.ts │ │ │ ├── index.ts │ │ │ └── LocalWallet.ts │ │ └── tsconfig.json │ └── server │ ├── .env.example │ ├── API specs │ │ ├── algod_api.json │ │ ├── indexer_api.json │ │ ├── mcp.json │ │ ├── nfd_api.json │ │ ├── ultrade_api.json │ │ ├── vestige_api.json │ │ └── vestige_free_api.json │ ├── Dockerfile │ ├── jest.config.js │ ├── package.json │ ├── README.md │ ├── smithery.yaml │ ├── src │ │ ├── algorand-client.ts │ │ ├── env.ts │ │ ├── index.ts │ │ ├── resources │ │ │ ├── index.ts │ │ │ ├── knowledge │ │ │ │ ├── ARCs.txt │ │ │ │ ├── developers-algokit-architecture-decisions.txt │ │ │ │ ├── developers-algokit-cli.txt │ │ │ │ ├── developers-algokit-utils-python.txt │ │ │ │ ├── developers-algokit-utils-typescript.txt │ │ │ │ ├── developers-clis.txt │ │ │ │ ├── developers-details.txt │ │ │ │ ├── developers-liquid-auth.txt │ │ │ │ ├── developers-nodes.txt │ │ │ │ ├── developers-puya.txt │ │ │ │ ├── developers-python.txt │ │ │ │ ├── developers-sdks-js.txt │ │ │ │ ├── developers-sdks-python.txt │ │ │ │ ├── developers-tealscript.txt │ │ │ │ ├── developers.txt │ │ │ │ ├── index.ts │ │ │ │ ├── taxonomy │ │ │ │ │ ├── algokit-cli:README.md │ │ │ │ │ ├── algokit:cli:algokit.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-14_sandbox-approach.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2022-11-22_beaker-testing-strategy.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_beaker_productionisation_review.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-11_brew_install.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-01-12_smart-contract-deployment.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-06-06_frontend-templates.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2023-07-19_advanced_generate_command.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-13_native_binaries.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-23_init-wizard-v2.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-01-31_binary_distribution.md │ │ │ │ │ ├── algokit:cli:architecture-decisions:2024-03-06_local_dev_ui_packaging.md │ │ │ │ │ ├── algokit:cli:articles:output_stability.md │ │ │ │ │ ├── algokit:cli:cli:index.md │ │ │ │ │ ├── algokit:cli:features:compile.md │ │ │ │ │ ├── algokit:cli:features:completions.md │ │ │ │ │ ├── algokit:cli:features:config.md │ │ │ │ │ ├── algokit:cli:features:dispenser.md │ │ │ │ │ ├── algokit:cli:features:doctor.md │ │ │ │ │ ├── algokit:cli:features:explore.md │ │ │ │ │ ├── algokit:cli:features:generate.md │ │ │ │ │ ├── algokit:cli:features:goal.md │ │ │ │ │ ├── algokit:cli:features:init.md │ │ │ │ │ ├── algokit:cli:features:localnet.md │ │ │ │ │ ├── algokit:cli:features:project:bootstrap.md │ │ │ │ │ ├── algokit:cli:features:project:deploy.md │ │ │ │ │ ├── algokit:cli:features:project:link.md │ │ │ │ │ ├── algokit:cli:features:project:list.md │ │ │ │ │ ├── algokit:cli:features:project:run.md │ │ │ │ │ ├── algokit:cli:features:project.md │ │ │ │ │ ├── algokit:cli:features:tasks:analyze.md │ │ │ │ │ ├── algokit:cli:features:tasks:ipfs.md │ │ │ │ │ ├── algokit:cli:features:tasks:mint.md │ │ │ │ │ ├── algokit:cli:features:tasks:nfd.md │ │ │ │ │ ├── algokit:cli:features:tasks:opt.md │ │ │ │ │ ├── algokit:cli:features:tasks:send.md │ │ │ │ │ ├── algokit:cli:features:tasks:sign.md │ │ │ │ │ ├── algokit:cli:features:tasks:transfer.md │ │ │ │ │ ├── algokit:cli:features:tasks:vanity_address.md │ │ │ │ │ ├── algokit:cli:features:tasks:wallet.md │ │ │ │ │ ├── algokit:cli:features:tasks.md │ │ │ │ │ ├── algokit:cli:tutorials:algokit-template.md │ │ │ │ │ ├── algokit:cli:tutorials:intro.md │ │ │ │ │ ├── algokit:cli:tutorials:smart-contracts.md │ │ │ │ │ ├── algokit:docs:testnet_api.md │ │ │ │ │ ├── algokit:lora:README.md │ │ │ │ │ ├── algokit:README.md │ │ │ │ │ ├── algokit:utils:python:markdown:apidocs:algokit_utils:algokit_utils.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:account.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-client.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:app-deploy.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:client.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:debugger.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:dispenser-client.md │ │ │ │ │ ├── algokit:utils:python:markdown:capabilities:transfer.md │ │ │ │ │ ├── algokit:utils:python:markdown:index.md │ │ │ │ │ ├── algokit:utils:python:README.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:account.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-client.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:app-deploy.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:client.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:debugger.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:dispenser-client.md │ │ │ │ │ ├── algokit:utils:python:source:capabilities:transfer.md │ │ │ │ │ ├── algokit:utils:python:source:index.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:account.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:algorand-client.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:amount.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-client.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:app-deploy.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:app.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:asset.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:client.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:debugging.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:dispenser-client.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:event-emitter.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:indexer.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:testing.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction-composer.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:transaction.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:transfer.md │ │ │ │ │ ├── algokit:utils:typescript:capabilities:typed-app-clients.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TestLogger.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:testing.TransactionLogger.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account_manager.AccountManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.MultisigAccount.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_account.SigningAccount.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algo_http_client_with_retry.AlgoHttpClientWithRetry.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_creator.AlgorandClientTransactionCreator.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client_transaction_sender.AlgorandClientTransactionSender.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_algorand_client.AlgorandClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_amount.AlgoAmount.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_arc56.Arc56Method.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.AppClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_client.ApplicationClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_deployer.AppDeployer.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_factory.AppFactory.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_app_manager.AppManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_asset_manager.AssetManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_async_event_emitter.AsyncEventEmitter.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_client_manager.ClientManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_composer.TransactionComposer.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_config.UpdatableConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_dispenser_client.TestNetDispenserApiClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_kmd_account_manager.KmdAccountManager.md │ │ │ │ │ ├── algokit:utils:typescript:code:classes:types_logic_error.LogicError.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnSchemaBreak.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_app.OnUpdate.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.AccountStatus.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.ApplicationOnComplete.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_indexer.SignatureType.md │ │ │ │ │ ├── algokit:utils:typescript:code:enums:types_lifecycle_events.EventType.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account_manager.EnsureFundedResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.AccountConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_account.TransactionSignerAccount.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_algorand_client_interface.AlgorandClientInterface.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Arc56Contract.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Event.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.Method.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.ProgramSourceInfo.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageKey.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StorageMap.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_arc56.StructField.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallABIArgs.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCallCoreParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientCompilationResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCallInterfaceParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployCoreParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientDeployParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppClientParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.AppSourceMaps.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.FundAppAccountParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppById.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.ResolveAppByIdBase.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_client.SourceMapExport.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppLookup.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_deployer.AppMetadata.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_factory.AppFactoryParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.AppInformation.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxReference.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValueRequestParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_manager.BoxValuesRequestParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSources.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.AppSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.CallConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.DeclaredSchemaValueSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Hint.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.ReservedSchemaValueSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Schema.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.SchemaSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.StateSchemaSpec.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app_spec.Struct.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCallTransactionResultOfType.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppCompilationResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeploymentParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppDeployMetadata.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppLookup.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppMetadata.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppReference.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppState.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.AppStorageSchema.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxName.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxReference.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValueRequestParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.BoxValuesRequestParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CompiledTeal.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CoreAppCallArgs.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.CreateAppParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.RawAppCallArgs.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.TealTemplateParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_app.UpdateAppParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.AssetInformation.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset_manager.BulkAssetOptInOutResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetBulkOptInOutParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptInParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.AssetOptOutParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_asset.CreateAssetParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.AlgoSdkClients.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppClient.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_client_manager.TypedAppFactory.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_composer.BuiltTransactions.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_config.Config.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.AVMTracesEventData.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourceDebugEventData.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_debugging.TealSourcesDebugEventData.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserFundResponse.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.DispenserLimitResponse.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_dispenser_client.TestNetDispenserApiClientParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_indexer.LookupAssetHoldingsOptions.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_logic_error.LogicErrorDetails.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoClientConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.AlgoConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_network_client.NetworkDetails.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgoKitLogCaptureFixture.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixture.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandFixtureConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.AlgorandTestAutomationContext.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.GetTestAccountParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_testing.LogSnapshotConfig.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.AtomicTransactionComposerToSend.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.ConfirmedTransactionResults.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendAtomicTransactionComposerResults.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResult.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.SendTransactionResults.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionGroupToSend.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transaction.TransactionToSign.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoRekeyParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.AlgoTransferParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.EnsureFundedReturnType.md │ │ │ │ │ ├── algokit:utils:typescript:code:interfaces:types_transfer.TransferAssetParams.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.indexer.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:index.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:testing.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_account.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algo_http_client_with_retry.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_asset_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_interface.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_creator.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transaction_sender.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client_transfer_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_algorand_client.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_amount.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_arc56.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_client.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_deployer.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory_and_client_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_factory.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_app.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_asset.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_async_event_emitter.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_client_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_composer.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_config.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_debugging.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client_spec.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_dispenser_client.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_expand.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_indexer.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_kmd_account_manager.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_lifecycle_events.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logging.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_logic_error.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_network_client.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_testing.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transaction.md │ │ │ │ │ ├── algokit:utils:typescript:code:modules:types_transfer.md │ │ │ │ │ ├── algokit:utils:typescript:code:README.md │ │ │ │ │ ├── algokit:utils:typescript:README.md │ │ │ │ │ ├── algokit:utils:typescript:v7-migration.md │ │ │ │ │ ├── algokit:utils:typescript:v8-migration.md │ │ │ │ │ ├── ARCs:ARC-template.md │ │ │ │ │ ├── ARCs:assets:arc-0012:README.md │ │ │ │ │ ├── ARCs:assets:arc-0034:TemplateForm.md │ │ │ │ │ ├── ARCs:assets:arc-0062:README.md │ │ │ │ │ ├── ARCs:pages:nfts.md │ │ │ │ │ ├── ARCs:pages:wallets.md │ │ │ │ │ ├── ARCs:README.md │ │ │ │ │ ├── ARCs:specs:arc-0000.md │ │ │ │ │ ├── ARCs:specs:arc-0001.md │ │ │ │ │ ├── ARCs:specs:arc-0002.md │ │ │ │ │ ├── ARCs:specs:arc-0003.md │ │ │ │ │ ├── ARCs:specs:arc-0004.md │ │ │ │ │ ├── ARCs:specs:arc-0005.md │ │ │ │ │ ├── ARCs:specs:arc-0006.md │ │ │ │ │ ├── ARCs:specs:arc-0007.md │ │ │ │ │ ├── ARCs:specs:arc-0008.md │ │ │ │ │ ├── ARCs:specs:arc-0009.md │ │ │ │ │ ├── ARCs:specs:arc-0010.md │ │ │ │ │ ├── ARCs:specs:arc-0011.md │ │ │ │ │ ├── ARCs:specs:arc-0012.md │ │ │ │ │ ├── ARCs:specs:arc-0015.md │ │ │ │ │ ├── ARCs:specs:arc-0016.md │ │ │ │ │ ├── ARCs:specs:arc-0018.md │ │ │ │ │ ├── ARCs:specs:arc-0019.md │ │ │ │ │ ├── ARCs:specs:arc-0020.md │ │ │ │ │ ├── ARCs:specs:arc-0021.md │ │ │ │ │ ├── ARCs:specs:arc-0022.md │ │ │ │ │ ├── ARCs:specs:arc-0023.md │ │ │ │ │ ├── ARCs:specs:arc-0025.md │ │ │ │ │ ├── ARCs:specs:arc-0026.md │ │ │ │ │ ├── ARCs:specs:arc-0028.md │ │ │ │ │ ├── ARCs:specs:arc-0032.md │ │ │ │ │ ├── ARCs:specs:arc-0033.md │ │ │ │ │ ├── ARCs:specs:arc-0034.md │ │ │ │ │ ├── ARCs:specs:arc-0035.md │ │ │ │ │ ├── ARCs:specs:arc-0036.md │ │ │ │ │ ├── ARCs:specs:arc-0042.md │ │ │ │ │ ├── ARCs:specs:arc-0047.md │ │ │ │ │ ├── ARCs:specs:arc-0048.md │ │ │ │ │ ├── ARCs:specs:arc-0049.md │ │ │ │ │ ├── ARCs:specs:arc-0054.md │ │ │ │ │ ├── ARCs:specs:arc-0055.md │ │ │ │ │ ├── ARCs:specs:arc-0056.md │ │ │ │ │ ├── ARCs:specs:arc-0059.md │ │ │ │ │ ├── ARCs:specs:arc-0062.md │ │ │ │ │ ├── ARCs:specs:arc-0065.md │ │ │ │ │ ├── ARCs:specs:arc-0069.md │ │ │ │ │ ├── ARCs:specs:arc-0072.md │ │ │ │ │ ├── ARCs:specs:arc-0073.md │ │ │ │ │ ├── ARCs:specs:arc-0074.md │ │ │ │ │ ├── ARCs:specs:arc-0076.md │ │ │ │ │ ├── ARCs:specs:arc-0078.md │ │ │ │ │ ├── ARCs:specs:arc-0079.md │ │ │ │ │ ├── ARCs:specs:arc-0200.md │ │ │ │ │ ├── clis_index.md │ │ │ │ │ ├── developer:docs:about.md │ │ │ │ │ ├── developer:docs:clis:algokey:algokey.md │ │ │ │ │ ├── developer:docs:clis:algokey:generate.md │ │ │ │ │ ├── developer:docs:clis:algokey:import.md │ │ │ │ │ ├── developer:docs:clis:algokey:multisig:append-auth-addr.md │ │ │ │ │ ├── developer:docs:clis:algokey:multisig:multisig.md │ │ │ │ │ ├── developer:docs:clis:algokey:part:info.md │ │ │ │ │ ├── developer:docs:clis:algokey:part:part.md │ │ │ │ │ ├── developer:docs:clis:algokey:part:reparent.md │ │ │ │ │ ├── developer:docs:clis:algokey:sign.md │ │ │ │ │ ├── developer:docs:clis:conduit:conduit.md │ │ │ │ │ ├── developer:docs:clis:conduit:init.md │ │ │ │ │ ├── developer:docs:clis:conduit:list:exporters.md │ │ │ │ │ ├── developer:docs:clis:conduit:list:importers.md │ │ │ │ │ ├── developer:docs:clis:conduit:list:list.md │ │ │ │ │ ├── developer:docs:clis:conduit:list:processors.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:diagcfg.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:disable.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:enable.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:metric.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:metric:status.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:disable.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:enable.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:endpoint.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:name.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:status.md │ │ │ │ │ ├── developer:docs:clis:diagcfg:telemetry:telemetry.md │ │ │ │ │ ├── developer:docs:clis:goal:node:restart.md │ │ │ │ │ ├── developer:docs:clis:goal:node:start.md │ │ │ │ │ ├── developer:docs:clis:goal:node:status.md │ │ │ │ │ ├── developer:docs:clis:goal:node:stop.md │ │ │ │ │ ├── developer:docs:clis:goal:node:wait.md │ │ │ │ │ ├── developer:docs:clis:goal:protocols.md │ │ │ │ │ ├── developer:docs:clis:goal:report.md │ │ │ │ │ ├── developer:docs:clis:goal:version.md │ │ │ │ │ ├── developer:docs:clis:goal:wallet:list.md │ │ │ │ │ ├── developer:docs:clis:goal:wallet:new.md │ │ │ │ │ ├── developer:docs:clis:goal:wallet:wallet.md │ │ │ │ │ ├── developer:docs:clis:indexer:api-config.md │ │ │ │ │ ├── developer:docs:clis:indexer:daemon.md │ │ │ │ │ ├── developer:docs:clis:indexer:indexer.md │ │ │ │ │ ├── developer:docs:clis:indexer:util:util.md │ │ │ │ │ ├── developer:docs:clis:indexer:util:validator.md │ │ │ │ │ ├── developer:docs:clis:kmd.md │ │ │ │ │ ├── developer:docs:clis:tealdbg:debug.md │ │ │ │ │ ├── developer:docs:clis:tealdbg:remote.md │ │ │ │ │ ├── developer:docs:clis:tealdbg:tealdbg.md │ │ │ │ │ ├── developer:docs:details:accounts:create.md │ │ │ │ │ ├── developer:docs:details:accounts:index.md │ │ │ │ │ ├── developer:docs:details:accounts:rekey.md │ │ │ │ │ ├── developer:docs:details:algorand_consensus.md │ │ │ │ │ ├── developer:docs:details:algorand-networks:betanet.md │ │ │ │ │ ├── developer:docs:details:algorand-networks:index.md │ │ │ │ │ ├── developer:docs:details:algorand-networks:mainnet.md │ │ │ │ │ ├── developer:docs:details:algorand-networks:testnet.md │ │ │ │ │ ├── developer:docs:details:asa.md │ │ │ │ │ ├── developer:docs:details:atc.md │ │ │ │ │ ├── developer:docs:details:atomic_transfers.md │ │ │ │ │ ├── developer:docs:details:conduit.md │ │ │ │ │ ├── developer:docs:details:crust.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:index.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:guidelines.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:index.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:jsonspec.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:index.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v1.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v10.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v2.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v3.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v4.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v5.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v6.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v7.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v8.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:opcodes:v9.md │ │ │ │ │ ├── developer:docs:details:dapps:avm:teal:specification.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:ABI:index.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:create.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:index.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:innertx.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:state.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:apps:txs.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:debugging.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:apps.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:frontend:smartsigs.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:guidelines.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:index.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:index.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:modes.md │ │ │ │ │ ├── developer:docs:details:dapps:smart-contracts:smartsigs:walkthrough.md │ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:beaker.md │ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:pyteal.md │ │ │ │ │ ├── developer:docs:details:dapps:writing-contracts:python.md │ │ │ │ │ ├── developer:docs:details:encoding.md │ │ │ │ │ ├── developer:docs:details:ethereum_to_algorand.md │ │ │ │ │ ├── developer:docs:details:index.md │ │ │ │ │ ├── developer:docs:details:indexer.md │ │ │ │ │ ├── developer:docs:details:parameter_tables.md │ │ │ │ │ ├── developer:docs:details:stateproofs:index.md │ │ │ │ │ ├── developer:docs:details:stateproofs:light_client.md │ │ │ │ │ ├── developer:docs:details:technical_faq.md │ │ │ │ │ ├── developer:docs:details:transactions:index.md │ │ │ │ │ ├── developer:docs:details:transactions:offline_transactions.md │ │ │ │ │ ├── developer:docs:details:transactions:payment_prompts.md │ │ │ │ │ ├── developer:docs:details:transactions:signatures.md │ │ │ │ │ ├── developer:docs:details:transactions:transactions.md │ │ │ │ │ ├── developer:docs:details:useful_resources.md │ │ │ │ │ ├── developer:docs:get-started:algokit.md │ │ │ │ │ ├── developer:docs:get-started:basics:what_is_blockchain.md │ │ │ │ │ ├── developer:docs:get-started:basics:whats_a_dapp.md │ │ │ │ │ ├── developer:docs:get-started:basics:where_to_start.md │ │ │ │ │ ├── developer:docs:get-started:basics:why_algorand.md │ │ │ │ │ ├── developer:docs:get-started:tokenization:ft.md │ │ │ │ │ ├── developer:docs:get-started:tokenization:nft.md │ │ │ │ │ ├── developer:docs:index.md │ │ │ │ │ ├── developer:docs:rest-apis:algod.md │ │ │ │ │ ├── developer:docs:rest-apis:indexer.md │ │ │ │ │ ├── developer:docs:rest-apis:kmd.md │ │ │ │ │ ├── developer:docs:rest-apis:restendpoints.md │ │ │ │ │ ├── developer:docs:run-a-node:operations:catchup.md │ │ │ │ │ ├── developer:docs:run-a-node:operations:switch_networks.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:generate_keys.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:index.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:offline.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:online.md │ │ │ │ │ ├── developer:docs:run-a-node:participate:renew.md │ │ │ │ │ ├── developer:docs:run-a-node:reference:artifacts.md │ │ │ │ │ ├── developer:docs:run-a-node:reference:config.md │ │ │ │ │ ├── developer:docs:run-a-node:reference:relay.md │ │ │ │ │ ├── developer:docs:run-a-node:reference:telemetry-config.md │ │ │ │ │ ├── developer:docs:run-a-node:setup:indexer.md │ │ │ │ │ ├── developer:docs:run-a-node:setup:install.md │ │ │ │ │ ├── developer:docs:run-a-node:setup:node-troubleshooting.md │ │ │ │ │ ├── developer:docs:run-a-node:setup:types.md │ │ │ │ │ ├── developer:docs:sdks:go:index.md │ │ │ │ │ ├── developer:docs:sdks:index.md │ │ │ │ │ ├── developer:docs:sdks:java:index.md │ │ │ │ │ ├── developer:docs:sdks:javascript:index.md │ │ │ │ │ ├── developer:docs:sdks:python:index.md │ │ │ │ │ ├── developer:python:code:example:accounts.md │ │ │ │ │ ├── developer:python:code:example:arc4_types.md │ │ │ │ │ ├── developer:python:code:example:assets.md │ │ │ │ │ ├── developer:python:code:example:box_storage.md │ │ │ │ │ ├── developer:python:code:example:control_flow.md │ │ │ │ │ ├── developer:python:code:example:crypto:merkle_tree.md │ │ │ │ │ ├── developer:python:code:example:defi:amm.md │ │ │ │ │ ├── developer:python:code:example:defi:auction.md │ │ │ │ │ ├── developer:python:code:example:defi:htlc_logicsig.md │ │ │ │ │ ├── developer:python:code:example:defi:marketplace.md │ │ │ │ │ ├── developer:python:code:example:events:arc28_events.md │ │ │ │ │ ├── developer:python:code:example:global_storage.md │ │ │ │ │ ├── developer:python:code:example:governance:simple_voting.md │ │ │ │ │ ├── developer:python:code:example:hello_world.md │ │ │ │ │ ├── developer:python:code:example:inner_transactions.md │ │ │ │ │ ├── developer:python:code:example:local_storage.md │ │ │ │ │ ├── developer:python:code:example:nft:proof_of_attendance.md │ │ │ │ │ ├── developer:python:code:example:privacy:zk_whitelist.md │ │ │ │ │ ├── developer:python:code:example:scratch_storage.md │ │ │ │ │ ├── developer:python:code:example:self_payment.md │ │ │ │ │ ├── developer:python:code:example:struct_in_box.md │ │ │ │ │ ├── developer:python:code:example:subsidize_app_call.md │ │ │ │ │ ├── developer:python:code:example:transactions.md │ │ │ │ │ ├── developer:python:code:example:utility:calculator.md │ │ │ │ │ ├── devportal-code-examples:projects:python-contract-examples:README.md │ │ │ │ │ ├── devportal-code-examples:README.md │ │ │ │ │ ├── docs:.walletconnect:index.md │ │ │ │ │ ├── docs:.walletconnect:walletconnect-schema.md │ │ │ │ │ ├── docs:README.md │ │ │ │ │ ├── docs:scripts:example_tracker:example_list.md │ │ │ │ │ ├── docs:scripts:README.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── liquid_auth_index.md │ │ │ │ │ ├── liquid-auth:ARCHITECTURE.md │ │ │ │ │ ├── liquid-auth:decisions:1-Service-Authentication.md │ │ │ │ │ ├── liquid-auth:decisions:2-Bidirectional-Communication.md │ │ │ │ │ ├── liquid-auth:decisions:3-Peer-to-Peer-Signaling.md │ │ │ │ │ ├── liquid-auth:decisions:4-Fido-Extension.md │ │ │ │ │ ├── liquid-auth:decisions:README.md │ │ │ │ │ ├── liquid-auth:docs:architecture.md │ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:authenticate.md │ │ │ │ │ ├── liquid-auth:docs:clients:android:provider-service:register.md │ │ │ │ │ ├── liquid-auth:docs:clients:browser:authentication.md │ │ │ │ │ ├── liquid-auth:docs:clients:browser:example.md │ │ │ │ │ ├── liquid-auth:docs:introduction.md │ │ │ │ │ ├── liquid-auth:docs:README.md │ │ │ │ │ ├── liquid-auth:docs:server:environment-variables.md │ │ │ │ │ ├── liquid-auth:docs:server:integrations.md │ │ │ │ │ ├── liquid-auth:docs:server:introduction.md │ │ │ │ │ ├── liquid-auth:docs:server:running-locally.md │ │ │ │ │ ├── liquid-auth:README.md │ │ │ │ │ ├── liquid-auth:SEQUENCE.md │ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.request.md │ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:assertion:assertion.controller.post.response.md │ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:attestation:attestation.controller.post.request.md │ │ │ │ │ ├── liquid-auth:services:liquid-auth-api-js:src:auth:auth.controller.get.user.md │ │ │ │ │ ├── liquid-auth:sites:express-dapp:README.md │ │ │ │ │ ├── liquid-auth:VISION.md │ │ │ │ │ ├── puya_index.md │ │ │ │ │ ├── puya:docs:algopy_testing:index.md │ │ │ │ │ ├── puya:docs:api-algopy.arc4.md │ │ │ │ │ ├── puya:docs:api-algopy.gtxn.md │ │ │ │ │ ├── puya:docs:api-algopy.itxn.md │ │ │ │ │ ├── puya:docs:api-algopy.md │ │ │ │ │ ├── puya:docs:api-algopy.op.md │ │ │ │ │ ├── puya:docs:api.md │ │ │ │ │ ├── puya:docs:compiler.md │ │ │ │ │ ├── puya:docs:index.md │ │ │ │ │ ├── puya:docs:language-guide.md │ │ │ │ │ ├── puya:docs:lg-arc28.md │ │ │ │ │ ├── puya:docs:lg-arc4.md │ │ │ │ │ ├── puya:docs:lg-builtins.md │ │ │ │ │ ├── puya:docs:lg-calling-apps.md │ │ │ │ │ ├── puya:docs:lg-compile.md │ │ │ │ │ ├── puya:docs:lg-control.md │ │ │ │ │ ├── puya:docs:lg-errors.md │ │ │ │ │ ├── puya:docs:lg-logs.md │ │ │ │ │ ├── puya:docs:lg-modules.md │ │ │ │ │ ├── puya:docs:lg-opcode-budget.md │ │ │ │ │ ├── puya:docs:lg-ops.md │ │ │ │ │ ├── puya:docs:lg-storage.md │ │ │ │ │ ├── puya:docs:lg-structure.md │ │ │ │ │ ├── puya:docs:lg-transactions.md │ │ │ │ │ ├── puya:docs:lg-types.md │ │ │ │ │ ├── puya:docs:lg-unsupported-python-features.md │ │ │ │ │ ├── puya:docs:principles.md │ │ │ │ │ ├── puya:examples:auction:README.md │ │ │ │ │ ├── puya:python:testing:docs:algopy.md │ │ │ │ │ ├── puya:python:testing:docs:api.md │ │ │ │ │ ├── puya:python:testing:docs:coverage.md │ │ │ │ │ ├── puya:python:testing:docs:examples.md │ │ │ │ │ ├── puya:python:testing:docs:faq.md │ │ │ │ │ ├── puya:python:testing:docs:index.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:arc4-types.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:avm-types.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:concepts.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:contract-testing.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:index.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:opcodes.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:signature-testing.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:state-management.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:subroutines.md │ │ │ │ │ ├── puya:python:testing:docs:testing-guide:transactions.md │ │ │ │ │ ├── puya:python:testing:examples:README.md │ │ │ │ │ ├── puya:python:testing:README.md │ │ │ │ │ ├── puya:README.md │ │ │ │ │ ├── puya:src:puya:ARCHITECTURE.md │ │ │ │ │ ├── puya:src:puyapy:_typeshed:README.md │ │ │ │ │ ├── puya:src:puyapy:_vendor:mypy:typeshed:stdlib:_typeshed:README.md │ │ │ │ │ ├── puya:src:puyapy:awst_build:README.md │ │ │ │ │ ├── puya:stubs:README.md │ │ │ │ │ ├── puya:tests:test_expected_output:README.md │ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-bytes-and-strings.md │ │ │ │ │ ├── puya:typescript:docs:architecture-decisions:2024-05-21_primitive-integer-types.md │ │ │ │ │ ├── puya:typescript:docs:README.md │ │ │ │ │ ├── puya:typescript:packages:algo-ts:readme.md │ │ │ │ │ ├── puya:typescript:README.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIAddressType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayDynamicType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIArrayStaticType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIBoolType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIByteType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIContract.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIInterface.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIMethod.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIStringType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABITupleType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIUfixedType.md │ │ │ │ │ ├── SDKs:javascript:classes:ABIUintType.md │ │ │ │ │ ├── SDKs:javascript:classes:Algodv2.md │ │ │ │ │ ├── SDKs:javascript:classes:AtomicTransactionComposer.md │ │ │ │ │ ├── SDKs:javascript:classes:DryrunResult.md │ │ │ │ │ ├── SDKs:javascript:classes:Indexer.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Account.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountParticipation.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AccountStateDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Application.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalState.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLocalStatesResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogData.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationLogsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationParams.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Asset.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetBalancesResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHolding.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetHoldingsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetParams.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.AssetsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Block.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockRewards.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeState.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BlockUpgradeVote.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Box.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxDescriptor.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.BoxesResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ErrorResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.EvalDeltaKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HashFactory.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.HealthCheck.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.IndexerStateProofMessage.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MerkleArrayProof.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.MiniAssetHolding.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.ParticipationUpdates.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofFields.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofParticipant.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofReveal.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSignature.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofSigSlot.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofTracking.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateProofVerifier.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.StateSchema.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TealValue.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.Transaction.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionApplication.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetConfig.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetFreeze.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionAssetTransfer.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionKeyreg.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionPayment.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignature.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureLogicsig.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisig.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionSignatureMultisigSubsignature.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:indexerModels.TransactionStateProof.md │ │ │ │ │ ├── SDKs:javascript:classes:Kmd.md │ │ │ │ │ ├── SDKs:javascript:classes:LogicSig.md │ │ │ │ │ ├── SDKs:javascript:classes:LogicSigAccount.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Account.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountApplicationResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetHolding.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountAssetsInformationResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountParticipation.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AccountStateDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AppCallLogs.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Application.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationInitialStates.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationKVStorage.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationLocalState.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationParams.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateOperation.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Asset.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHolding.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetHoldingReference.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AssetParams.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.AvmValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockHashResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockLogsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BlockTxidsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Box.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxDescriptor.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxesResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BoxReference.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.BuildVersion.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.CompileResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DisassembleResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunRequest.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunSource.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunState.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.DryrunTxnResult.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ErrorResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.EvalDeltaKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetBlockTimeStampOffsetResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.GetSyncRoundResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.KvDelta.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LedgerStateDeltaForTransactionGroup.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.LightBlockHeaderProof.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.NodeStatusResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PendingTransactionsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.PostTransactionsResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.ScratchChange.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateInitialStates.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequest.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateRequestTransactionGroup.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTraceConfig.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionGroupResult.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateTransactionResult.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulateUnnamedResourcesAccessed.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationEvalOverrides.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationOpcodeTraceUnit.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SimulationTransactionExecTrace.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProof.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.StateProofMessage.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.SupplyResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealKeyValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TealValue.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionGroupLedgerStateDeltasForRoundResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionParametersResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.TransactionProofResponse.md │ │ │ │ │ ├── SDKs:javascript:classes:modelsv2.Version.md │ │ │ │ │ ├── SDKs:javascript:classes:SourceMap.md │ │ │ │ │ ├── SDKs:javascript:classes:Transaction.md │ │ │ │ │ ├── SDKs:javascript:enums:ABIReferenceType.md │ │ │ │ │ ├── SDKs:javascript:enums:ABITransactionType.md │ │ │ │ │ ├── SDKs:javascript:enums:AtomicTransactionComposerStatus.md │ │ │ │ │ ├── SDKs:javascript:enums:IntDecoding.md │ │ │ │ │ ├── SDKs:javascript:enums:OnApplicationComplete.md │ │ │ │ │ ├── SDKs:javascript:enums:TransactionType.md │ │ │ │ │ ├── SDKs:javascript:examples:README.md │ │ │ │ │ ├── SDKs:javascript:FAQ.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworkInfo.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractNetworks.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIContractParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIInterfaceParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodArgParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIMethodReturnParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:ABIResult.md │ │ │ │ │ ├── SDKs:javascript:interfaces:Account.md │ │ │ │ │ ├── SDKs:javascript:interfaces:Address.md │ │ │ │ │ ├── SDKs:javascript:interfaces:AlgodTokenHeader.md │ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClient.md │ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientError.md │ │ │ │ │ ├── SDKs:javascript:interfaces:BaseHTTPClientResponse.md │ │ │ │ │ ├── SDKs:javascript:interfaces:BoxReference.md │ │ │ │ │ ├── SDKs:javascript:interfaces:CustomTokenHeader.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedAssetParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedBoxReference.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedGlobalStateSchema.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLocalStateSchema.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSig.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedLogicSigAccount.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedMultisig.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSignedTransaction.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedSubsig.md │ │ │ │ │ ├── SDKs:javascript:interfaces:EncodedTransaction.md │ │ │ │ │ ├── SDKs:javascript:interfaces:IndexerTokenHeader.md │ │ │ │ │ ├── SDKs:javascript:interfaces:KMDTokenHeader.md │ │ │ │ │ ├── SDKs:javascript:interfaces:MultisigMetadata.md │ │ │ │ │ ├── SDKs:javascript:interfaces:SignedTransaction.md │ │ │ │ │ ├── SDKs:javascript:interfaces:SuggestedParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionParams.md │ │ │ │ │ ├── SDKs:javascript:interfaces:TransactionWithSigner.md │ │ │ │ │ ├── SDKs:javascript:modules:indexerModels.md │ │ │ │ │ ├── SDKs:javascript:modules:modelsv2.md │ │ │ │ │ ├── SDKs:javascript:modules.md │ │ │ │ │ ├── SDKs:javascript:README.md │ │ │ │ │ ├── SDKs:python:algosdk:v2client:harness:README.md │ │ │ │ │ ├── SDKs:python:examples:README.md │ │ │ │ │ ├── SDKs:python:README.md │ │ │ │ │ ├── tealscript:examples_amm_README.md │ │ │ │ │ ├── tealscript:examples_auction_README.md │ │ │ │ │ ├── tealscript:examples_big_box_README.md │ │ │ │ │ ├── tealscript:examples_itxns_README.md │ │ │ │ │ ├── tealscript:examples_lsig_with_app_README.md │ │ │ │ │ ├── tealscript:examples_reti_README.md │ │ │ │ │ ├── tealscript:FEATURES.md │ │ │ │ │ ├── tealscript:guides_atomic_txn.md │ │ │ │ │ ├── tealscript:guides_features.md │ │ │ │ │ ├── tealscript:guides_getting_started.md │ │ │ │ │ ├── tealscript:guides_inner_transactions.md │ │ │ │ │ ├── tealscript:guides_lifecycle.md │ │ │ │ │ ├── tealscript:guides_math.md │ │ │ │ │ ├── tealscript:guides_methods.md │ │ │ │ │ ├── tealscript:guides_multiple_contracts.md │ │ │ │ │ ├── tealscript:guides_pyteal.md │ │ │ │ │ ├── tealscript:guides_storage.md │ │ │ │ │ ├── tealscript:guides_Supported Types_arrays.md │ │ │ │ │ ├── tealscript:guides_Supported Types_numbers.md │ │ │ │ │ ├── TEALScript:README.md │ │ │ │ │ ├── tealscript:tests_test_package_README.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0001-intro.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0002-init.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0003-contract.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0004-artifacts.md │ │ │ │ │ ├── tealscript:tutorials_Hello World_0005-hello.md │ │ │ │ │ └── tealscript:tutorials_Hello World_0006-test.md │ │ │ │ └── taxonomy-categories │ │ │ │ ├── algokit-utils.json │ │ │ │ ├── algokit.json │ │ │ │ ├── arcs.json │ │ │ │ ├── clis.json │ │ │ │ ├── details.json │ │ │ │ ├── developers.json │ │ │ │ ├── liquid-auth.json │ │ │ │ ├── nodes.json │ │ │ │ ├── puya.json │ │ │ │ ├── python.json │ │ │ │ ├── sdks.json │ │ │ │ └── tealscript.json │ │ │ └── wallet │ │ │ └── index.ts │ │ ├── tools │ │ │ ├── accountManager.ts │ │ │ ├── algodManager.ts │ │ │ ├── apiManager │ │ │ │ ├── algod │ │ │ │ │ ├── account.ts │ │ │ │ │ ├── application.ts │ │ │ │ │ ├── asset.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── transaction.ts │ │ │ │ ├── example │ │ │ │ │ ├── get-balance.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── indexer │ │ │ │ │ ├── account.ts │ │ │ │ │ ├── application.ts │ │ │ │ │ ├── asset.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── transaction.ts │ │ │ │ ├── nfd │ │ │ │ │ └── index.ts │ │ │ │ ├── tinyman │ │ │ │ │ ├── analytics.ts │ │ │ │ │ ├── bootstrap.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── liquidity.ts │ │ │ │ │ ├── opt_in.ts │ │ │ │ │ ├── pool.ts │ │ │ │ │ ├── remove_liquidity.ts │ │ │ │ │ └── swap.ts │ │ │ │ ├── ultrade │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── market.ts │ │ │ │ │ ├── system.ts │ │ │ │ │ └── wallet.ts │ │ │ │ └── vestige │ │ │ │ ├── assets.ts │ │ │ │ ├── balances.ts │ │ │ │ ├── index.ts │ │ │ │ ├── networks.ts │ │ │ │ ├── notes.ts │ │ │ │ ├── pools.ts │ │ │ │ ├── protocols.ts │ │ │ │ ├── swaps.ts │ │ │ │ └── vaults.ts │ │ │ ├── arc26Manager.ts │ │ │ ├── index.ts │ │ │ ├── knowledgeManager.ts │ │ │ ├── transactionManager │ │ │ │ ├── accountTransactions.ts │ │ │ │ ├── appTransactions │ │ │ │ │ ├── callTxn.ts │ │ │ │ │ ├── clearTxn.ts │ │ │ │ │ ├── closeOutTxn.ts │ │ │ │ │ ├── createTxn.ts │ │ │ │ │ ├── deleteTxn.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── optInTxn.ts │ │ │ │ │ ├── test │ │ │ │ │ │ ├── counter_approval.teal │ │ │ │ │ │ ├── counter_clear.teal │ │ │ │ │ │ ├── storage_test_approval_v2.teal │ │ │ │ │ │ ├── storage_test_approval.teal │ │ │ │ │ │ └── storage_test_clear.teal │ │ │ │ │ ├── types.ts │ │ │ │ │ └── updateTxn.ts │ │ │ │ ├── assetTransactions.ts │ │ │ │ ├── generalTransaction.ts │ │ │ │ └── index.ts │ │ │ └── utilityManager.ts │ │ ├── types.ts │ │ └── utils │ │ └── responseProcessor.ts │ ├── tests │ │ ├── resources │ │ │ ├── algod │ │ │ │ ├── account.test.ts │ │ │ │ ├── application.test.ts │ │ │ │ ├── asset.test.ts │ │ │ │ └── transaction.test.ts │ │ │ └── indexer │ │ │ ├── account.test.ts │ │ │ ├── application.test.ts │ │ │ ├── asset.test.ts │ │ │ └── transaction.test.ts │ │ └── tools │ │ ├── accountManager.test.ts │ │ ├── algodManager.test.ts │ │ ├── apiManager │ │ │ └── example │ │ │ └── get-balance.test.ts │ │ ├── transactionManager │ │ │ ├── accountTransactionManager.test.ts │ │ │ ├── appTransactionManager.test.ts │ │ │ ├── assetTransactionManager.test.ts │ │ │ ├── generalTransactionManager.test.ts │ │ │ └── transactionManager.test.ts │ │ └── utilityManager.test.ts │ └── tsconfig.json ├── README.md ├── rename_files.sh └── tsconfig.json ``` # Files -------------------------------------------------------------------------------- /packages/server/src/resources/knowledge/taxonomy/developer:docs:details:dapps:avm:teal:opcodes:v7.md: -------------------------------------------------------------------------------- ```markdown 1 | title: v7 Opcodes 2 | 3 | Ops have a 'cost' of 1 unless otherwise specified. 4 | 5 | 6 | ## err 7 | 8 | - Bytecode: 0x00 9 | - Stack: ... → _exits_ 10 | - Fail immediately. 11 | 12 | ## sha256 13 | 14 | - Bytecode: 0x01 15 | - Stack: ..., A: []byte → ..., [32]byte 16 | - SHA256 hash of value A, yields [32]byte 17 | - **Cost**: 35 18 | 19 | ## keccak256 20 | 21 | - Bytecode: 0x02 22 | - Stack: ..., A: []byte → ..., [32]byte 23 | - Keccak256 hash of value A, yields [32]byte 24 | - **Cost**: 130 25 | 26 | ## sha512_256 27 | 28 | - Bytecode: 0x03 29 | - Stack: ..., A: []byte → ..., [32]byte 30 | - SHA512_256 hash of value A, yields [32]byte 31 | - **Cost**: 45 32 | 33 | ## ed25519verify 34 | 35 | - Bytecode: 0x04 36 | - Stack: ..., A: []byte, B: [64]byte, C: [32]byte → ..., bool 37 | - for (data A, signature B, pubkey C) verify the signature of ("ProgData" || program_hash || data) against the pubkey => {0 or 1} 38 | - **Cost**: 1900 39 | 40 | The 32 byte public key is the last element on the stack, preceded by the 64 byte signature at the second-to-last element on the stack, preceded by the data which was signed at the third-to-last element on the stack. 41 | 42 | ## ecdsa_verify 43 | 44 | - Syntax: `ecdsa_verify V` where V: [ECDSA](#field-group-ecdsa) 45 | - Bytecode: 0x05 {uint8} 46 | - Stack: ..., A: [32]byte, B: [32]byte, C: [32]byte, D: [32]byte, E: [32]byte → ..., bool 47 | - for (data A, signature B, C and pubkey D, E) verify the signature of the data against the pubkey => {0 or 1} 48 | - **Cost**: Secp256k1=1700; Secp256r1=2500 49 | - Availability: v5 50 | 51 | ### ECDSA 52 | 53 | Curves 54 | 55 | | Index | Name | In | Notes | 56 | | - | ------ | - | --------- | 57 | | 0 | Secp256k1 | | secp256k1 curve, used in Bitcoin | 58 | | 1 | Secp256r1 | v7 | secp256r1 curve, NIST standard | 59 | 60 | 61 | The 32 byte Y-component of a public key is the last element on the stack, preceded by X-component of a pubkey, preceded by S and R components of a signature, preceded by the data that is fifth element on the stack. All values are big-endian encoded. The signed data must be 32 bytes long, and signatures in lower-S form are only accepted. 62 | 63 | ## ecdsa_pk_decompress 64 | 65 | - Syntax: `ecdsa_pk_decompress V` where V: [ECDSA](#field-group-ecdsa) 66 | - Bytecode: 0x06 {uint8} 67 | - Stack: ..., A: [33]byte → ..., X: [32]byte, Y: [32]byte 68 | - decompress pubkey A into components X, Y 69 | - **Cost**: Secp256k1=650; Secp256r1=2400 70 | - Availability: v5 71 | 72 | The 33 byte public key in a compressed form to be decompressed into X and Y (top) components. All values are big-endian encoded. 73 | 74 | ## ecdsa_pk_recover 75 | 76 | - Syntax: `ecdsa_pk_recover V` where V: [ECDSA](#field-group-ecdsa) 77 | - Bytecode: 0x07 {uint8} 78 | - Stack: ..., A: [32]byte, B: uint64, C: [32]byte, D: [32]byte → ..., X: [32]byte, Y: [32]byte 79 | - for (data A, recovery id B, signature C, D) recover a public key 80 | - **Cost**: 2000 81 | - Availability: v5 82 | 83 | S (top) and R elements of a signature, recovery id and data (bottom) are expected on the stack and used to deriver a public key. All values are big-endian encoded. The signed data must be 32 bytes long. 84 | 85 | ## + 86 | 87 | - Bytecode: 0x08 88 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 89 | - A plus B. Fail on overflow. 90 | 91 | Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `addw`. 92 | 93 | ## - 94 | 95 | - Bytecode: 0x09 96 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 97 | - A minus B. Fail if B > A. 98 | 99 | ## / 100 | 101 | - Bytecode: 0x0a 102 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 103 | - A divided by B (truncated division). Fail if B == 0. 104 | 105 | `divmodw` is available to divide the two-element values produced by `mulw` and `addw`. 106 | 107 | ## * 108 | 109 | - Bytecode: 0x0b 110 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 111 | - A times B. Fail on overflow. 112 | 113 | Overflow is an error condition which halts execution and fails the transaction. Full precision is available from `mulw`. 114 | 115 | ## < 116 | 117 | - Bytecode: 0x0c 118 | - Stack: ..., A: uint64, B: uint64 → ..., bool 119 | - A less than B => {0 or 1} 120 | 121 | ## > 122 | 123 | - Bytecode: 0x0d 124 | - Stack: ..., A: uint64, B: uint64 → ..., bool 125 | - A greater than B => {0 or 1} 126 | 127 | ## <= 128 | 129 | - Bytecode: 0x0e 130 | - Stack: ..., A: uint64, B: uint64 → ..., bool 131 | - A less than or equal to B => {0 or 1} 132 | 133 | ## >= 134 | 135 | - Bytecode: 0x0f 136 | - Stack: ..., A: uint64, B: uint64 → ..., bool 137 | - A greater than or equal to B => {0 or 1} 138 | 139 | ## && 140 | 141 | - Bytecode: 0x10 142 | - Stack: ..., A: uint64, B: uint64 → ..., bool 143 | - A is not zero and B is not zero => {0 or 1} 144 | 145 | ## || 146 | 147 | - Bytecode: 0x11 148 | - Stack: ..., A: uint64, B: uint64 → ..., bool 149 | - A is not zero or B is not zero => {0 or 1} 150 | 151 | ## == 152 | 153 | - Bytecode: 0x12 154 | - Stack: ..., A, B → ..., bool 155 | - A is equal to B => {0 or 1} 156 | 157 | ## != 158 | 159 | - Bytecode: 0x13 160 | - Stack: ..., A, B → ..., bool 161 | - A is not equal to B => {0 or 1} 162 | 163 | ## ! 164 | 165 | - Bytecode: 0x14 166 | - Stack: ..., A: uint64 → ..., uint64 167 | - A == 0 yields 1; else 0 168 | 169 | ## len 170 | 171 | - Bytecode: 0x15 172 | - Stack: ..., A: []byte → ..., uint64 173 | - yields length of byte value A 174 | 175 | ## itob 176 | 177 | - Bytecode: 0x16 178 | - Stack: ..., A: uint64 → ..., [8]byte 179 | - converts uint64 A to big-endian byte array, always of length 8 180 | 181 | ## btoi 182 | 183 | - Bytecode: 0x17 184 | - Stack: ..., A: []byte → ..., uint64 185 | - converts big-endian byte array A to uint64. Fails if len(A) > 8. Padded by leading 0s if len(A) < 8. 186 | 187 | `btoi` fails if the input is longer than 8 bytes. 188 | 189 | ## % 190 | 191 | - Bytecode: 0x18 192 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 193 | - A modulo B. Fail if B == 0. 194 | 195 | ## | 196 | 197 | - Bytecode: 0x19 198 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 199 | - A bitwise-or B 200 | 201 | ## & 202 | 203 | - Bytecode: 0x1a 204 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 205 | - A bitwise-and B 206 | 207 | ## ^ 208 | 209 | - Bytecode: 0x1b 210 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 211 | - A bitwise-xor B 212 | 213 | ## ~ 214 | 215 | - Bytecode: 0x1c 216 | - Stack: ..., A: uint64 → ..., uint64 217 | - bitwise invert value A 218 | 219 | ## mulw 220 | 221 | - Bytecode: 0x1d 222 | - Stack: ..., A: uint64, B: uint64 → ..., X: uint64, Y: uint64 223 | - A times B as a 128-bit result in two uint64s. X is the high 64 bits, Y is the low 224 | 225 | ## addw 226 | 227 | - Bytecode: 0x1e 228 | - Stack: ..., A: uint64, B: uint64 → ..., X: uint64, Y: uint64 229 | - A plus B as a 128-bit result. X is the carry-bit, Y is the low-order 64 bits. 230 | - Availability: v2 231 | 232 | ## divmodw 233 | 234 | - Bytecode: 0x1f 235 | - Stack: ..., A: uint64, B: uint64, C: uint64, D: uint64 → ..., W: uint64, X: uint64, Y: uint64, Z: uint64 236 | - W,X = (A,B / C,D); Y,Z = (A,B modulo C,D) 237 | - **Cost**: 20 238 | - Availability: v4 239 | 240 | The notation J,K indicates that two uint64 values J and K are interpreted as a uint128 value, with J as the high uint64 and K the low. 241 | 242 | ## intcblock 243 | 244 | - Syntax: `intcblock UINT ...` where UINT ...: a block of int constant values 245 | - Bytecode: 0x20 {varuint count, [varuint ...]} 246 | - Stack: ... → ... 247 | - prepare block of uint64 constants for use by intc 248 | 249 | `intcblock` loads following program bytes into an array of integer constants in the evaluator. These integer constants can be referred to by `intc` and `intc_*` which will push the value onto the stack. Subsequent calls to `intcblock` reset and replace the integer constants available to the script. 250 | 251 | ## intc 252 | 253 | - Syntax: `intc I` where I: an index in the intcblock 254 | - Bytecode: 0x21 {uint8} 255 | - Stack: ... → ..., uint64 256 | - Ith constant from intcblock 257 | 258 | ## intc_0 259 | 260 | - Bytecode: 0x22 261 | - Stack: ... → ..., uint64 262 | - constant 0 from intcblock 263 | 264 | ## intc_1 265 | 266 | - Bytecode: 0x23 267 | - Stack: ... → ..., uint64 268 | - constant 1 from intcblock 269 | 270 | ## intc_2 271 | 272 | - Bytecode: 0x24 273 | - Stack: ... → ..., uint64 274 | - constant 2 from intcblock 275 | 276 | ## intc_3 277 | 278 | - Bytecode: 0x25 279 | - Stack: ... → ..., uint64 280 | - constant 3 from intcblock 281 | 282 | ## bytecblock 283 | 284 | - Syntax: `bytecblock BYTES ...` where BYTES ...: a block of byte constant values 285 | - Bytecode: 0x26 {varuint count, [varuint length, bytes ...]} 286 | - Stack: ... → ... 287 | - prepare block of byte-array constants for use by bytec 288 | 289 | `bytecblock` loads the following program bytes into an array of byte-array constants in the evaluator. These constants can be referred to by `bytec` and `bytec_*` which will push the value onto the stack. Subsequent calls to `bytecblock` reset and replace the bytes constants available to the script. 290 | 291 | ## bytec 292 | 293 | - Syntax: `bytec I` where I: an index in the bytecblock 294 | - Bytecode: 0x27 {uint8} 295 | - Stack: ... → ..., []byte 296 | - Ith constant from bytecblock 297 | 298 | ## bytec_0 299 | 300 | - Bytecode: 0x28 301 | - Stack: ... → ..., []byte 302 | - constant 0 from bytecblock 303 | 304 | ## bytec_1 305 | 306 | - Bytecode: 0x29 307 | - Stack: ... → ..., []byte 308 | - constant 1 from bytecblock 309 | 310 | ## bytec_2 311 | 312 | - Bytecode: 0x2a 313 | - Stack: ... → ..., []byte 314 | - constant 2 from bytecblock 315 | 316 | ## bytec_3 317 | 318 | - Bytecode: 0x2b 319 | - Stack: ... → ..., []byte 320 | - constant 3 from bytecblock 321 | 322 | ## arg 323 | 324 | - Syntax: `arg N` where N: an arg index 325 | - Bytecode: 0x2c {uint8} 326 | - Stack: ... → ..., []byte 327 | - Nth LogicSig argument 328 | - Mode: Signature 329 | 330 | ## arg_0 331 | 332 | - Bytecode: 0x2d 333 | - Stack: ... → ..., []byte 334 | - LogicSig argument 0 335 | - Mode: Signature 336 | 337 | ## arg_1 338 | 339 | - Bytecode: 0x2e 340 | - Stack: ... → ..., []byte 341 | - LogicSig argument 1 342 | - Mode: Signature 343 | 344 | ## arg_2 345 | 346 | - Bytecode: 0x2f 347 | - Stack: ... → ..., []byte 348 | - LogicSig argument 2 349 | - Mode: Signature 350 | 351 | ## arg_3 352 | 353 | - Bytecode: 0x30 354 | - Stack: ... → ..., []byte 355 | - LogicSig argument 3 356 | - Mode: Signature 357 | 358 | ## txn 359 | 360 | - Syntax: `txn F` where F: [txn](#field-group-txn) 361 | - Bytecode: 0x31 {uint8} 362 | - Stack: ... → ..., any 363 | - field F of current transaction 364 | 365 | ### txn 366 | 367 | Fields (see [transaction reference](https://developer.algorand.org/docs/reference/transactions/)) 368 | 369 | | Index | Name | Type | In | Notes | 370 | | - | ------ | -- | - | --------- | 371 | | 0 | Sender | address | | 32 byte address | 372 | | 1 | Fee | uint64 | | microalgos | 373 | | 2 | FirstValid | uint64 | | round number | 374 | | 3 | FirstValidTime | uint64 | v7 | UNIX timestamp of block before txn.FirstValid. Fails if negative | 375 | | 4 | LastValid | uint64 | | round number | 376 | | 5 | Note | []byte | | Any data up to 1024 bytes | 377 | | 6 | Lease | [32]byte | | 32 byte lease value | 378 | | 7 | Receiver | address | | 32 byte address | 379 | | 8 | Amount | uint64 | | microalgos | 380 | | 9 | CloseRemainderTo | address | | 32 byte address | 381 | | 10 | VotePK | [32]byte | | 32 byte address | 382 | | 11 | SelectionPK | [32]byte | | 32 byte address | 383 | | 12 | VoteFirst | uint64 | | The first round that the participation key is valid. | 384 | | 13 | VoteLast | uint64 | | The last round that the participation key is valid. | 385 | | 14 | VoteKeyDilution | uint64 | | Dilution for the 2-level participation key | 386 | | 15 | Type | []byte | | Transaction type as bytes | 387 | | 16 | TypeEnum | uint64 | | Transaction type as integer | 388 | | 17 | XferAsset | uint64 | | Asset ID | 389 | | 18 | AssetAmount | uint64 | | value in Asset's units | 390 | | 19 | AssetSender | address | | 32 byte address. Source of assets if Sender is the Asset's Clawback address. | 391 | | 20 | AssetReceiver | address | | 32 byte address | 392 | | 21 | AssetCloseTo | address | | 32 byte address | 393 | | 22 | GroupIndex | uint64 | | Position of this transaction within an atomic transaction group. A stand-alone transaction is implicitly element 0 in a group of 1 | 394 | | 23 | TxID | [32]byte | | The computed ID for this transaction. 32 bytes. | 395 | | 24 | ApplicationID | uint64 | v2 | ApplicationID from ApplicationCall transaction | 396 | | 25 | OnCompletion | uint64 | v2 | ApplicationCall transaction on completion action | 397 | | 27 | NumAppArgs | uint64 | v2 | Number of ApplicationArgs | 398 | | 29 | NumAccounts | uint64 | v2 | Number of Accounts | 399 | | 30 | ApprovalProgram | []byte | v2 | Approval program | 400 | | 31 | ClearStateProgram | []byte | v2 | Clear state program | 401 | | 32 | RekeyTo | address | v2 | 32 byte Sender's new AuthAddr | 402 | | 33 | ConfigAsset | uint64 | v2 | Asset ID in asset config transaction | 403 | | 34 | ConfigAssetTotal | uint64 | v2 | Total number of units of this asset created | 404 | | 35 | ConfigAssetDecimals | uint64 | v2 | Number of digits to display after the decimal place when displaying the asset | 405 | | 36 | ConfigAssetDefaultFrozen | bool | v2 | Whether the asset's slots are frozen by default or not, 0 or 1 | 406 | | 37 | ConfigAssetUnitName | []byte | v2 | Unit name of the asset | 407 | | 38 | ConfigAssetName | []byte | v2 | The asset name | 408 | | 39 | ConfigAssetURL | []byte | v2 | URL | 409 | | 40 | ConfigAssetMetadataHash | [32]byte | v2 | 32 byte commitment to unspecified asset metadata | 410 | | 41 | ConfigAssetManager | address | v2 | 32 byte address | 411 | | 42 | ConfigAssetReserve | address | v2 | 32 byte address | 412 | | 43 | ConfigAssetFreeze | address | v2 | 32 byte address | 413 | | 44 | ConfigAssetClawback | address | v2 | 32 byte address | 414 | | 45 | FreezeAsset | uint64 | v2 | Asset ID being frozen or un-frozen | 415 | | 46 | FreezeAssetAccount | address | v2 | 32 byte address of the account whose asset slot is being frozen or un-frozen | 416 | | 47 | FreezeAssetFrozen | bool | v2 | The new frozen value, 0 or 1 | 417 | | 49 | NumAssets | uint64 | v3 | Number of Assets | 418 | | 51 | NumApplications | uint64 | v3 | Number of Applications | 419 | | 52 | GlobalNumUint | uint64 | v3 | Number of global state integers in ApplicationCall | 420 | | 53 | GlobalNumByteSlice | uint64 | v3 | Number of global state byteslices in ApplicationCall | 421 | | 54 | LocalNumUint | uint64 | v3 | Number of local state integers in ApplicationCall | 422 | | 55 | LocalNumByteSlice | uint64 | v3 | Number of local state byteslices in ApplicationCall | 423 | | 56 | ExtraProgramPages | uint64 | v4 | Number of additional pages for each of the application's approval and clear state programs. An ExtraProgramPages of 1 means 2048 more total bytes, or 1024 for each program. | 424 | | 57 | Nonparticipation | bool | v5 | Marks an account nonparticipating for rewards | 425 | | 59 | NumLogs | uint64 | v5 | Number of Logs (only with `itxn` in v5). Application mode only | 426 | | 60 | CreatedAssetID | uint64 | v5 | Asset ID allocated by the creation of an ASA (only with `itxn` in v5). Application mode only | 427 | | 61 | CreatedApplicationID | uint64 | v5 | ApplicationID allocated by the creation of an application (only with `itxn` in v5). Application mode only | 428 | | 62 | LastLog | []byte | v6 | The last message emitted. Empty bytes if none were emitted. Application mode only | 429 | | 63 | StateProofPK | []byte | v6 | 64 byte state proof public key | 430 | | 65 | NumApprovalProgramPages | uint64 | v7 | Number of Approval Program pages | 431 | | 67 | NumClearStateProgramPages | uint64 | v7 | Number of ClearState Program pages | 432 | 433 | 434 | ## global 435 | 436 | - Syntax: `global F` where F: [global](#field-group-global) 437 | - Bytecode: 0x32 {uint8} 438 | - Stack: ... → ..., any 439 | - global field F 440 | 441 | ### global 442 | 443 | Fields 444 | 445 | | Index | Name | Type | In | Notes | 446 | | - | ------ | -- | - | --------- | 447 | | 0 | MinTxnFee | uint64 | | microalgos | 448 | | 1 | MinBalance | uint64 | | microalgos | 449 | | 2 | MaxTxnLife | uint64 | | rounds | 450 | | 3 | ZeroAddress | address | | 32 byte address of all zero bytes | 451 | | 4 | GroupSize | uint64 | | Number of transactions in this atomic transaction group. At least 1 | 452 | | 5 | LogicSigVersion | uint64 | v2 | Maximum supported version | 453 | | 6 | Round | uint64 | v2 | Current round number. Application mode only. | 454 | | 7 | LatestTimestamp | uint64 | v2 | Last confirmed block UNIX timestamp. Fails if negative. Application mode only. | 455 | | 8 | CurrentApplicationID | uint64 | v2 | ID of current application executing. Application mode only. | 456 | | 9 | CreatorAddress | address | v3 | Address of the creator of the current application. Application mode only. | 457 | | 10 | CurrentApplicationAddress | address | v5 | Address that the current application controls. Application mode only. | 458 | | 11 | GroupID | [32]byte | v5 | ID of the transaction group. 32 zero bytes if the transaction is not part of a group. | 459 | | 12 | OpcodeBudget | uint64 | v6 | The remaining cost that can be spent by opcodes in this program. | 460 | | 13 | CallerApplicationID | uint64 | v6 | The application ID of the application that called this application. 0 if this application is at the top-level. Application mode only. | 461 | | 14 | CallerApplicationAddress | address | v6 | The application address of the application that called this application. ZeroAddress if this application is at the top-level. Application mode only. | 462 | 463 | 464 | ## gtxn 465 | 466 | - Syntax: `gtxn T F` where T: transaction group index, F: [txn](#field-group-txn) 467 | - Bytecode: 0x33 {uint8}, {uint8} 468 | - Stack: ... → ..., any 469 | - field F of the Tth transaction in the current group 470 | 471 | for notes on transaction fields available, see `txn`. If this transaction is _i_ in the group, `gtxn i field` is equivalent to `txn field`. 472 | 473 | ## load 474 | 475 | - Syntax: `load I` where I: position in scratch space to load from 476 | - Bytecode: 0x34 {uint8} 477 | - Stack: ... → ..., any 478 | - Ith scratch space value. All scratch spaces are 0 at program start. 479 | 480 | ## store 481 | 482 | - Syntax: `store I` where I: position in scratch space to store to 483 | - Bytecode: 0x35 {uint8} 484 | - Stack: ..., A → ... 485 | - store A to the Ith scratch space 486 | 487 | ## txna 488 | 489 | - Syntax: `txna F I` where F: [txna](#field-group-txna), I: transaction field array index 490 | - Bytecode: 0x36 {uint8}, {uint8} 491 | - Stack: ... → ..., any 492 | - Ith value of the array field F of the current transaction<br />`txna` can be called using `txn` with 2 immediates. 493 | - Availability: v2 494 | 495 | ### txna 496 | 497 | Fields (see [transaction reference](https://developer.algorand.org/docs/reference/transactions/)) 498 | 499 | | Index | Name | Type | In | Notes | 500 | | - | ------ | -- | - | --------- | 501 | | 26 | ApplicationArgs | []byte | v2 | Arguments passed to the application in the ApplicationCall transaction | 502 | | 28 | Accounts | address | v2 | Accounts listed in the ApplicationCall transaction | 503 | | 48 | Assets | uint64 | v3 | Foreign Assets listed in the ApplicationCall transaction | 504 | | 50 | Applications | uint64 | v3 | Foreign Apps listed in the ApplicationCall transaction | 505 | | 58 | Logs | []byte | v5 | Log messages emitted by an application call (only with `itxn` in v5). Application mode only | 506 | | 64 | ApprovalProgramPages | []byte | v7 | Approval Program as an array of pages | 507 | | 66 | ClearStateProgramPages | []byte | v7 | ClearState Program as an array of pages | 508 | 509 | 510 | ## gtxna 511 | 512 | - Syntax: `gtxna T F I` where T: transaction group index, F: [txna](#field-group-txna), I: transaction field array index 513 | - Bytecode: 0x37 {uint8}, {uint8}, {uint8} 514 | - Stack: ... → ..., any 515 | - Ith value of the array field F from the Tth transaction in the current group<br />`gtxna` can be called using `gtxn` with 3 immediates. 516 | - Availability: v2 517 | 518 | ## gtxns 519 | 520 | - Syntax: `gtxns F` where F: [txn](#field-group-txn) 521 | - Bytecode: 0x38 {uint8} 522 | - Stack: ..., A: uint64 → ..., any 523 | - field F of the Ath transaction in the current group 524 | - Availability: v3 525 | 526 | for notes on transaction fields available, see `txn`. If top of stack is _i_, `gtxns field` is equivalent to `gtxn _i_ field`. gtxns exists so that _i_ can be calculated, often based on the index of the current transaction. 527 | 528 | ## gtxnsa 529 | 530 | - Syntax: `gtxnsa F I` where F: [txna](#field-group-txna), I: transaction field array index 531 | - Bytecode: 0x39 {uint8}, {uint8} 532 | - Stack: ..., A: uint64 → ..., any 533 | - Ith value of the array field F from the Ath transaction in the current group<br />`gtxnsa` can be called using `gtxns` with 2 immediates. 534 | - Availability: v3 535 | 536 | ## gload 537 | 538 | - Syntax: `gload T I` where T: transaction group index, I: position in scratch space to load from 539 | - Bytecode: 0x3a {uint8}, {uint8} 540 | - Stack: ... → ..., any 541 | - Ith scratch space value of the Tth transaction in the current group 542 | - Availability: v4 543 | - Mode: Application 544 | 545 | `gload` fails unless the requested transaction is an ApplicationCall and T < GroupIndex. 546 | 547 | ## gloads 548 | 549 | - Syntax: `gloads I` where I: position in scratch space to load from 550 | - Bytecode: 0x3b {uint8} 551 | - Stack: ..., A: uint64 → ..., any 552 | - Ith scratch space value of the Ath transaction in the current group 553 | - Availability: v4 554 | - Mode: Application 555 | 556 | `gloads` fails unless the requested transaction is an ApplicationCall and A < GroupIndex. 557 | 558 | ## gaid 559 | 560 | - Syntax: `gaid T` where T: transaction group index 561 | - Bytecode: 0x3c {uint8} 562 | - Stack: ... → ..., uint64 563 | - ID of the asset or application created in the Tth transaction of the current group 564 | - Availability: v4 565 | - Mode: Application 566 | 567 | `gaid` fails unless the requested transaction created an asset or application and T < GroupIndex. 568 | 569 | ## gaids 570 | 571 | - Bytecode: 0x3d 572 | - Stack: ..., A: uint64 → ..., uint64 573 | - ID of the asset or application created in the Ath transaction of the current group 574 | - Availability: v4 575 | - Mode: Application 576 | 577 | `gaids` fails unless the requested transaction created an asset or application and A < GroupIndex. 578 | 579 | ## loads 580 | 581 | - Bytecode: 0x3e 582 | - Stack: ..., A: uint64 → ..., any 583 | - Ath scratch space value. All scratch spaces are 0 at program start. 584 | - Availability: v5 585 | 586 | ## stores 587 | 588 | - Bytecode: 0x3f 589 | - Stack: ..., A: uint64, B → ... 590 | - store B to the Ath scratch space 591 | - Availability: v5 592 | 593 | ## bnz 594 | 595 | - Syntax: `bnz TARGET` where TARGET: branch offset 596 | - Bytecode: 0x40 {int16 (big-endian)} 597 | - Stack: ..., A: uint64 → ... 598 | - branch to TARGET if value A is not zero 599 | 600 | The `bnz` instruction opcode 0x40 is followed by two immediate data bytes which are a high byte first and low byte second which together form a 16 bit offset which the instruction may branch to. For a bnz instruction at `pc`, if the last element of the stack is not zero then branch to instruction at `pc + 3 + N`, else proceed to next instruction at `pc + 3`. Branch targets must be aligned instructions. (e.g. Branching to the second byte of a 2 byte op will be rejected.) Starting at v4, the offset is treated as a signed 16 bit integer allowing for backward branches and looping. In prior version (v1 to v3), branch offsets are limited to forward branches only, 0-0x7fff. 601 | 602 | At v2 it became allowed to branch to the end of the program exactly after the last instruction: bnz to byte N (with 0-indexing) was illegal for a TEAL program with N bytes before v2, and is legal after it. This change eliminates the need for a last instruction of no-op as a branch target at the end. (Branching beyond the end--in other words, to a byte larger than N--is still illegal and will cause the program to fail.) 603 | 604 | ## bz 605 | 606 | - Syntax: `bz TARGET` where TARGET: branch offset 607 | - Bytecode: 0x41 {int16 (big-endian)} 608 | - Stack: ..., A: uint64 → ... 609 | - branch to TARGET if value A is zero 610 | - Availability: v2 611 | 612 | See `bnz` for details on how branches work. `bz` inverts the behavior of `bnz`. 613 | 614 | ## b 615 | 616 | - Syntax: `b TARGET` where TARGET: branch offset 617 | - Bytecode: 0x42 {int16 (big-endian)} 618 | - Stack: ... → ... 619 | - branch unconditionally to TARGET 620 | - Availability: v2 621 | 622 | See `bnz` for details on how branches work. `b` always jumps to the offset. 623 | 624 | ## return 625 | 626 | - Bytecode: 0x43 627 | - Stack: ..., A: uint64 → _exits_ 628 | - use A as success value; end 629 | - Availability: v2 630 | 631 | ## assert 632 | 633 | - Bytecode: 0x44 634 | - Stack: ..., A: uint64 → ... 635 | - immediately fail unless A is a non-zero number 636 | - Availability: v3 637 | 638 | ## pop 639 | 640 | - Bytecode: 0x48 641 | - Stack: ..., A → ... 642 | - discard A 643 | 644 | ## dup 645 | 646 | - Bytecode: 0x49 647 | - Stack: ..., A → ..., A, A 648 | - duplicate A 649 | 650 | ## dup2 651 | 652 | - Bytecode: 0x4a 653 | - Stack: ..., A, B → ..., A, B, A, B 654 | - duplicate A and B 655 | - Availability: v2 656 | 657 | ## dig 658 | 659 | - Syntax: `dig N` where N: depth 660 | - Bytecode: 0x4b {uint8} 661 | - Stack: ..., A, [N items] → ..., A, [N items], A 662 | - Nth value from the top of the stack. dig 0 is equivalent to dup 663 | - Availability: v3 664 | 665 | ## swap 666 | 667 | - Bytecode: 0x4c 668 | - Stack: ..., A, B → ..., B, A 669 | - swaps A and B on stack 670 | - Availability: v3 671 | 672 | ## select 673 | 674 | - Bytecode: 0x4d 675 | - Stack: ..., A, B, C: uint64 → ..., A or B 676 | - selects one of two values based on top-of-stack: B if C != 0, else A 677 | - Availability: v3 678 | 679 | ## cover 680 | 681 | - Syntax: `cover N` where N: depth 682 | - Bytecode: 0x4e {uint8} 683 | - Stack: ..., [N items], A → ..., A, [N items] 684 | - remove top of stack, and place it deeper in the stack such that N elements are above it. Fails if stack depth <= N. 685 | - Availability: v5 686 | 687 | ## uncover 688 | 689 | - Syntax: `uncover N` where N: depth 690 | - Bytecode: 0x4f {uint8} 691 | - Stack: ..., A, [N items] → ..., [N items], A 692 | - remove the value at depth N in the stack and shift above items down so the Nth deep value is on top of the stack. Fails if stack depth <= N. 693 | - Availability: v5 694 | 695 | ## concat 696 | 697 | - Bytecode: 0x50 698 | - Stack: ..., A: []byte, B: []byte → ..., []byte 699 | - join A and B 700 | - Availability: v2 701 | 702 | `concat` fails if the result would be greater than 4096 bytes. 703 | 704 | ## substring 705 | 706 | - Syntax: `substring S E` where S: start position, E: end position 707 | - Bytecode: 0x51 {uint8}, {uint8} 708 | - Stack: ..., A: []byte → ..., []byte 709 | - A range of bytes from A starting at S up to but not including E. If E < S, or either is larger than the array length, the program fails 710 | - Availability: v2 711 | 712 | ## substring3 713 | 714 | - Bytecode: 0x52 715 | - Stack: ..., A: []byte, B: uint64, C: uint64 → ..., []byte 716 | - A range of bytes from A starting at B up to but not including C. If C < B, or either is larger than the array length, the program fails 717 | - Availability: v2 718 | 719 | ## getbit 720 | 721 | - Bytecode: 0x53 722 | - Stack: ..., A, B: uint64 → ..., uint64 723 | - Bth bit of (byte-array or integer) A. If B is greater than or equal to the bit length of the value (8*byte length), the program fails 724 | - Availability: v3 725 | 726 | see explanation of bit ordering in setbit 727 | 728 | ## setbit 729 | 730 | - Bytecode: 0x54 731 | - Stack: ..., A, B: uint64, C: uint64 → ..., any 732 | - Copy of (byte-array or integer) A, with the Bth bit set to (0 or 1) C. If B is greater than or equal to the bit length of the value (8*byte length), the program fails 733 | - Availability: v3 734 | 735 | When A is a uint64, index 0 is the least significant bit. Setting bit 3 to 1 on the integer 0 yields 8, or 2^3. When A is a byte array, index 0 is the leftmost bit of the leftmost byte. Setting bits 0 through 11 to 1 in a 4-byte-array of 0s yields the byte array 0xfff00000. Setting bit 3 to 1 on the 1-byte-array 0x00 yields the byte array 0x10. 736 | 737 | ## getbyte 738 | 739 | - Bytecode: 0x55 740 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 741 | - Bth byte of A, as an integer. If B is greater than or equal to the array length, the program fails 742 | - Availability: v3 743 | 744 | ## setbyte 745 | 746 | - Bytecode: 0x56 747 | - Stack: ..., A: []byte, B: uint64, C: uint64 → ..., []byte 748 | - Copy of A with the Bth byte set to small integer (between 0..255) C. If B is greater than or equal to the array length, the program fails 749 | - Availability: v3 750 | 751 | ## extract 752 | 753 | - Syntax: `extract S L` where S: start position, L: length 754 | - Bytecode: 0x57 {uint8}, {uint8} 755 | - Stack: ..., A: []byte → ..., []byte 756 | - A range of bytes from A starting at S up to but not including S+L. If L is 0, then extract to the end of the string. If S or S+L is larger than the array length, the program fails 757 | - Availability: v5 758 | 759 | ## extract3 760 | 761 | - Bytecode: 0x58 762 | - Stack: ..., A: []byte, B: uint64, C: uint64 → ..., []byte 763 | - A range of bytes from A starting at B up to but not including B+C. If B+C is larger than the array length, the program fails<br />`extract3` can be called using `extract` with no immediates. 764 | - Availability: v5 765 | 766 | ## extract_uint16 767 | 768 | - Bytecode: 0x59 769 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 770 | - A uint16 formed from a range of big-endian bytes from A starting at B up to but not including B+2. If B+2 is larger than the array length, the program fails 771 | - Availability: v5 772 | 773 | ## extract_uint32 774 | 775 | - Bytecode: 0x5a 776 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 777 | - A uint32 formed from a range of big-endian bytes from A starting at B up to but not including B+4. If B+4 is larger than the array length, the program fails 778 | - Availability: v5 779 | 780 | ## extract_uint64 781 | 782 | - Bytecode: 0x5b 783 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 784 | - A uint64 formed from a range of big-endian bytes from A starting at B up to but not including B+8. If B+8 is larger than the array length, the program fails 785 | - Availability: v5 786 | 787 | ## replace2 788 | 789 | - Syntax: `replace2 S` where S: start position 790 | - Bytecode: 0x5c {uint8} 791 | - Stack: ..., A: []byte, B: []byte → ..., []byte 792 | - Copy of A with the bytes starting at S replaced by the bytes of B. Fails if S+len(B) exceeds len(A)<br />`replace2` can be called using `replace` with 1 immediate. 793 | - Availability: v7 794 | 795 | ## replace3 796 | 797 | - Bytecode: 0x5d 798 | - Stack: ..., A: []byte, B: uint64, C: []byte → ..., []byte 799 | - Copy of A with the bytes starting at B replaced by the bytes of C. Fails if B+len(C) exceeds len(A)<br />`replace3` can be called using `replace` with no immediates. 800 | - Availability: v7 801 | 802 | ## base64_decode 803 | 804 | - Syntax: `base64_decode E` where E: [base64](#field-group-base64) 805 | - Bytecode: 0x5e {uint8} 806 | - Stack: ..., A: []byte → ..., []byte 807 | - decode A which was base64-encoded using _encoding_ E. Fail if A is not base64 encoded with encoding E 808 | - **Cost**: 1 + 1 per 16 bytes of A 809 | - Availability: v7 810 | 811 | ### base64 812 | 813 | Encodings 814 | 815 | | Index | Name | Notes | 816 | | - | ------ | --------- | 817 | | 0 | URLEncoding | | 818 | | 1 | StdEncoding | | 819 | 820 | 821 | *Warning*: Usage should be restricted to very rare use cases. In almost all cases, smart contracts should directly handle non-encoded byte-strings. This opcode should only be used in cases where base64 is the only available option, e.g. interoperability with a third-party that only signs base64 strings. 822 | 823 | Decodes A using the base64 encoding E. Specify the encoding with an immediate arg either as URL and Filename Safe (`URLEncoding`) or Standard (`StdEncoding`). See [RFC 4648 sections 4 and 5](https://rfc-editor.org/rfc/rfc4648.html#section-4). It is assumed that the encoding ends with the exact number of `=` padding characters as required by the RFC. When padding occurs, any unused pad bits in the encoding must be set to zero or the decoding will fail. The special cases of `\n` and `\r` are allowed but completely ignored. An error will result when attempting to decode a string with a character that is not in the encoding alphabet or not one of `=`, `\r`, or `\n`. 824 | 825 | ## json_ref 826 | 827 | - Syntax: `json_ref R` where R: [json_ref](#field-group-json_ref) 828 | - Bytecode: 0x5f {uint8} 829 | - Stack: ..., A: []byte, B: []byte → ..., any 830 | - key B's value, of type R, from a [valid](../jsonspec.md) utf-8 encoded json object A 831 | - **Cost**: 25 + 2 per 7 bytes of A 832 | - Availability: v7 833 | 834 | ### json_ref 835 | 836 | Types 837 | 838 | | Index | Name | Type | Notes | 839 | | - | ------ | -- | --------- | 840 | | 0 | JSONString | []byte | | 841 | | 1 | JSONUint64 | uint64 | | 842 | | 2 | JSONObject | []byte | | 843 | 844 | 845 | *Warning*: Usage should be restricted to very rare use cases, as JSON decoding is expensive and quite limited. In addition, JSON objects are large and not optimized for size. 846 | 847 | Almost all smart contracts should use simpler and smaller methods (such as the [ABI](https://arc.algorand.foundation/ARCs/arc-0004). This opcode should only be used in cases where JSON is only available option, e.g. when a third-party only signs JSON. 848 | 849 | ## balance 850 | 851 | - Bytecode: 0x60 852 | - Stack: ..., A → ..., uint64 853 | - balance for account A, in microalgos. The balance is observed after the effects of previous transactions in the group, and after the fee for the current transaction is deducted. Changes caused by inner transactions are observable immediately following `itxn_submit` 854 | - Availability: v2 855 | - Mode: Application 856 | 857 | params: Txn.Accounts offset (or, since v4, an _available_ account address), _available_ application id (or, since v4, a Txn.ForeignApps offset). Return: value. 858 | 859 | ## app_opted_in 860 | 861 | - Bytecode: 0x61 862 | - Stack: ..., A, B: uint64 → ..., bool 863 | - 1 if account A is opted in to application B, else 0 864 | - Availability: v2 865 | - Mode: Application 866 | 867 | params: Txn.Accounts offset (or, since v4, an _available_ account address), _available_ application id (or, since v4, a Txn.ForeignApps offset). Return: 1 if opted in and 0 otherwise. 868 | 869 | ## app_local_get 870 | 871 | - Bytecode: 0x62 872 | - Stack: ..., A, B: stateKey → ..., any 873 | - local state of the key B in the current application in account A 874 | - Availability: v2 875 | - Mode: Application 876 | 877 | params: Txn.Accounts offset (or, since v4, an _available_ account address), state key. Return: value. The value is zero (of type uint64) if the key does not exist. 878 | 879 | ## app_local_get_ex 880 | 881 | - Bytecode: 0x63 882 | - Stack: ..., A, B: uint64, C: stateKey → ..., X: any, Y: bool 883 | - X is the local state of application B, key C in account A. Y is 1 if key existed, else 0 884 | - Availability: v2 885 | - Mode: Application 886 | 887 | params: Txn.Accounts offset (or, since v4, an _available_ account address), _available_ application id (or, since v4, a Txn.ForeignApps offset), state key. Return: did_exist flag (top of the stack, 1 if the application and key existed and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist. 888 | 889 | ## app_global_get 890 | 891 | - Bytecode: 0x64 892 | - Stack: ..., A: stateKey → ..., any 893 | - global state of the key A in the current application 894 | - Availability: v2 895 | - Mode: Application 896 | 897 | params: state key. Return: value. The value is zero (of type uint64) if the key does not exist. 898 | 899 | ## app_global_get_ex 900 | 901 | - Bytecode: 0x65 902 | - Stack: ..., A: uint64, B: stateKey → ..., X: any, Y: bool 903 | - X is the global state of application A, key B. Y is 1 if key existed, else 0 904 | - Availability: v2 905 | - Mode: Application 906 | 907 | params: Txn.ForeignApps offset (or, since v4, an _available_ application id), state key. Return: did_exist flag (top of the stack, 1 if the application and key existed and 0 otherwise), value. The value is zero (of type uint64) if the key does not exist. 908 | 909 | ## app_local_put 910 | 911 | - Bytecode: 0x66 912 | - Stack: ..., A, B: stateKey, C → ... 913 | - write C to key B in account A's local state of the current application 914 | - Availability: v2 915 | - Mode: Application 916 | 917 | params: Txn.Accounts offset (or, since v4, an _available_ account address), state key, value. 918 | 919 | ## app_global_put 920 | 921 | - Bytecode: 0x67 922 | - Stack: ..., A: stateKey, B → ... 923 | - write B to key A in the global state of the current application 924 | - Availability: v2 925 | - Mode: Application 926 | 927 | ## app_local_del 928 | 929 | - Bytecode: 0x68 930 | - Stack: ..., A, B: stateKey → ... 931 | - delete key B from account A's local state of the current application 932 | - Availability: v2 933 | - Mode: Application 934 | 935 | params: Txn.Accounts offset (or, since v4, an _available_ account address), state key. 936 | 937 | Deleting a key which is already absent has no effect on the application local state. (In particular, it does _not_ cause the program to fail.) 938 | 939 | ## app_global_del 940 | 941 | - Bytecode: 0x69 942 | - Stack: ..., A: stateKey → ... 943 | - delete key A from the global state of the current application 944 | - Availability: v2 945 | - Mode: Application 946 | 947 | params: state key. 948 | 949 | Deleting a key which is already absent has no effect on the application global state. (In particular, it does _not_ cause the program to fail.) 950 | 951 | ## asset_holding_get 952 | 953 | - Syntax: `asset_holding_get F` where F: [asset_holding](#field-group-asset_holding) 954 | - Bytecode: 0x70 {uint8} 955 | - Stack: ..., A, B: uint64 → ..., X: any, Y: bool 956 | - X is field F from account A's holding of asset B. Y is 1 if A is opted into B, else 0 957 | - Availability: v2 958 | - Mode: Application 959 | 960 | ### asset_holding 961 | 962 | Fields 963 | 964 | | Index | Name | Type | Notes | 965 | | - | ------ | -- | --------- | 966 | | 0 | AssetBalance | uint64 | Amount of the asset unit held by this account | 967 | | 1 | AssetFrozen | bool | Is the asset frozen or not | 968 | 969 | 970 | params: Txn.Accounts offset (or, since v4, an _available_ address), asset id (or, since v4, a Txn.ForeignAssets offset). Return: did_exist flag (1 if the asset existed and 0 otherwise), value. 971 | 972 | ## asset_params_get 973 | 974 | - Syntax: `asset_params_get F` where F: [asset_params](#field-group-asset_params) 975 | - Bytecode: 0x71 {uint8} 976 | - Stack: ..., A: uint64 → ..., X: any, Y: bool 977 | - X is field F from asset A. Y is 1 if A exists, else 0 978 | - Availability: v2 979 | - Mode: Application 980 | 981 | ### asset_params 982 | 983 | Fields 984 | 985 | | Index | Name | Type | In | Notes | 986 | | - | ------ | -- | - | --------- | 987 | | 0 | AssetTotal | uint64 | | Total number of units of this asset | 988 | | 1 | AssetDecimals | uint64 | | See AssetParams.Decimals | 989 | | 2 | AssetDefaultFrozen | bool | | Frozen by default or not | 990 | | 3 | AssetUnitName | []byte | | Asset unit name | 991 | | 4 | AssetName | []byte | | Asset name | 992 | | 5 | AssetURL | []byte | | URL with additional info about the asset | 993 | | 6 | AssetMetadataHash | [32]byte | | Arbitrary commitment | 994 | | 7 | AssetManager | address | | Manager address | 995 | | 8 | AssetReserve | address | | Reserve address | 996 | | 9 | AssetFreeze | address | | Freeze address | 997 | | 10 | AssetClawback | address | | Clawback address | 998 | | 11 | AssetCreator | address | v5 | Creator address | 999 | 1000 | 1001 | params: Txn.ForeignAssets offset (or, since v4, an _available_ asset id. Return: did_exist flag (1 if the asset existed and 0 otherwise), value. 1002 | 1003 | ## app_params_get 1004 | 1005 | - Syntax: `app_params_get F` where F: [app_params](#field-group-app_params) 1006 | - Bytecode: 0x72 {uint8} 1007 | - Stack: ..., A: uint64 → ..., X: any, Y: bool 1008 | - X is field F from app A. Y is 1 if A exists, else 0 1009 | - Availability: v5 1010 | - Mode: Application 1011 | 1012 | ### app_params 1013 | 1014 | Fields 1015 | 1016 | | Index | Name | Type | Notes | 1017 | | - | ------ | -- | --------- | 1018 | | 0 | AppApprovalProgram | []byte | Bytecode of Approval Program | 1019 | | 1 | AppClearStateProgram | []byte | Bytecode of Clear State Program | 1020 | | 2 | AppGlobalNumUint | uint64 | Number of uint64 values allowed in Global State | 1021 | | 3 | AppGlobalNumByteSlice | uint64 | Number of byte array values allowed in Global State | 1022 | | 4 | AppLocalNumUint | uint64 | Number of uint64 values allowed in Local State | 1023 | | 5 | AppLocalNumByteSlice | uint64 | Number of byte array values allowed in Local State | 1024 | | 6 | AppExtraProgramPages | uint64 | Number of Extra Program Pages of code space | 1025 | | 7 | AppCreator | address | Creator address | 1026 | | 8 | AppAddress | address | Address for which this application has authority | 1027 | 1028 | 1029 | params: Txn.ForeignApps offset or an _available_ app id. Return: did_exist flag (1 if the application existed and 0 otherwise), value. 1030 | 1031 | ## acct_params_get 1032 | 1033 | - Syntax: `acct_params_get F` where F: [acct_params](#field-group-acct_params) 1034 | - Bytecode: 0x73 {uint8} 1035 | - Stack: ..., A → ..., X: any, Y: bool 1036 | - X is field F from account A. Y is 1 if A owns positive algos, else 0 1037 | - Availability: v6 1038 | - Mode: Application 1039 | 1040 | ### acct_params 1041 | 1042 | Fields 1043 | 1044 | | Index | Name | Type | Notes | 1045 | | - | ------ | -- | --------- | 1046 | | 0 | AcctBalance | uint64 | Account balance in microalgos | 1047 | | 1 | AcctMinBalance | uint64 | Minimum required balance for account, in microalgos | 1048 | | 2 | AcctAuthAddr | address | Address the account is rekeyed to. | 1049 | 1050 | 1051 | ## min_balance 1052 | 1053 | - Bytecode: 0x78 1054 | - Stack: ..., A → ..., uint64 1055 | - minimum required balance for account A, in microalgos. Required balance is affected by ASA, App, and Box usage. When creating or opting into an app, the minimum balance grows before the app code runs, therefore the increase is visible there. When deleting or closing out, the minimum balance decreases after the app executes. Changes caused by inner transactions or box usage are observable immediately following the opcode effecting the change. 1056 | - Availability: v3 1057 | - Mode: Application 1058 | 1059 | params: Txn.Accounts offset (or, since v4, an _available_ account address), _available_ application id (or, since v4, a Txn.ForeignApps offset). Return: value. 1060 | 1061 | ## pushbytes 1062 | 1063 | - Syntax: `pushbytes BYTES` where BYTES: a byte constant 1064 | - Bytecode: 0x80 {varuint length, bytes} 1065 | - Stack: ... → ..., []byte 1066 | - immediate BYTES 1067 | - Availability: v3 1068 | 1069 | pushbytes args are not added to the bytecblock during assembly processes 1070 | 1071 | ## pushint 1072 | 1073 | - Syntax: `pushint UINT` where UINT: an int constant 1074 | - Bytecode: 0x81 {varuint} 1075 | - Stack: ... → ..., uint64 1076 | - immediate UINT 1077 | - Availability: v3 1078 | 1079 | pushint args are not added to the intcblock during assembly processes 1080 | 1081 | ## ed25519verify_bare 1082 | 1083 | - Bytecode: 0x84 1084 | - Stack: ..., A: []byte, B: [64]byte, C: [32]byte → ..., bool 1085 | - for (data A, signature B, pubkey C) verify the signature of the data against the pubkey => {0 or 1} 1086 | - **Cost**: 1900 1087 | - Availability: v7 1088 | 1089 | ## callsub 1090 | 1091 | - Syntax: `callsub TARGET` where TARGET: branch offset 1092 | - Bytecode: 0x88 {int16 (big-endian)} 1093 | - Stack: ... → ... 1094 | - branch unconditionally to TARGET, saving the next instruction on the call stack 1095 | - Availability: v4 1096 | 1097 | The call stack is separate from the data stack. Only `callsub`, `retsub`, and `proto` manipulate it. 1098 | 1099 | ## retsub 1100 | 1101 | - Bytecode: 0x89 1102 | - Stack: ... → ... 1103 | - pop the top instruction from the call stack and branch to it 1104 | - Availability: v4 1105 | 1106 | If the current frame was prepared by `proto A R`, `retsub` will remove the 'A' arguments from the stack, move the `R` return values down, and pop any stack locations above the relocated return values. 1107 | 1108 | ## shl 1109 | 1110 | - Bytecode: 0x90 1111 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 1112 | - A times 2^B, modulo 2^64 1113 | - Availability: v4 1114 | 1115 | ## shr 1116 | 1117 | - Bytecode: 0x91 1118 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 1119 | - A divided by 2^B 1120 | - Availability: v4 1121 | 1122 | ## sqrt 1123 | 1124 | - Bytecode: 0x92 1125 | - Stack: ..., A: uint64 → ..., uint64 1126 | - The largest integer I such that I^2 <= A 1127 | - **Cost**: 4 1128 | - Availability: v4 1129 | 1130 | ## bitlen 1131 | 1132 | - Bytecode: 0x93 1133 | - Stack: ..., A → ..., uint64 1134 | - The highest set bit in A. If A is a byte-array, it is interpreted as a big-endian unsigned integer. bitlen of 0 is 0, bitlen of 8 is 4 1135 | - Availability: v4 1136 | 1137 | bitlen interprets arrays as big-endian integers, unlike setbit/getbit 1138 | 1139 | ## exp 1140 | 1141 | - Bytecode: 0x94 1142 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 1143 | - A raised to the Bth power. Fail if A == B == 0 and on overflow 1144 | - Availability: v4 1145 | 1146 | ## expw 1147 | 1148 | - Bytecode: 0x95 1149 | - Stack: ..., A: uint64, B: uint64 → ..., X: uint64, Y: uint64 1150 | - A raised to the Bth power as a 128-bit result in two uint64s. X is the high 64 bits, Y is the low. Fail if A == B == 0 or if the results exceeds 2^128-1 1151 | - **Cost**: 10 1152 | - Availability: v4 1153 | 1154 | ## bsqrt 1155 | 1156 | - Bytecode: 0x96 1157 | - Stack: ..., A: bigint → ..., bigint 1158 | - The largest integer I such that I^2 <= A. A and I are interpreted as big-endian unsigned integers 1159 | - **Cost**: 40 1160 | - Availability: v6 1161 | 1162 | ## divw 1163 | 1164 | - Bytecode: 0x97 1165 | - Stack: ..., A: uint64, B: uint64, C: uint64 → ..., uint64 1166 | - A,B / C. Fail if C == 0 or if result overflows. 1167 | - Availability: v6 1168 | 1169 | The notation A,B indicates that A and B are interpreted as a uint128 value, with A as the high uint64 and B the low. 1170 | 1171 | ## sha3_256 1172 | 1173 | - Bytecode: 0x98 1174 | - Stack: ..., A: []byte → ..., [32]byte 1175 | - SHA3_256 hash of value A, yields [32]byte 1176 | - **Cost**: 130 1177 | - Availability: v7 1178 | 1179 | ## b+ 1180 | 1181 | - Bytecode: 0xa0 1182 | - Stack: ..., A: bigint, B: bigint → ..., []byte 1183 | - A plus B. A and B are interpreted as big-endian unsigned integers 1184 | - **Cost**: 10 1185 | - Availability: v4 1186 | 1187 | ## b- 1188 | 1189 | - Bytecode: 0xa1 1190 | - Stack: ..., A: bigint, B: bigint → ..., bigint 1191 | - A minus B. A and B are interpreted as big-endian unsigned integers. Fail on underflow. 1192 | - **Cost**: 10 1193 | - Availability: v4 1194 | 1195 | ## b/ 1196 | 1197 | - Bytecode: 0xa2 1198 | - Stack: ..., A: bigint, B: bigint → ..., bigint 1199 | - A divided by B (truncated division). A and B are interpreted as big-endian unsigned integers. Fail if B is zero. 1200 | - **Cost**: 20 1201 | - Availability: v4 1202 | 1203 | ## b* 1204 | 1205 | - Bytecode: 0xa3 1206 | - Stack: ..., A: bigint, B: bigint → ..., []byte 1207 | - A times B. A and B are interpreted as big-endian unsigned integers. 1208 | - **Cost**: 20 1209 | - Availability: v4 1210 | 1211 | ## b< 1212 | 1213 | - Bytecode: 0xa4 1214 | - Stack: ..., A: bigint, B: bigint → ..., bool 1215 | - 1 if A is less than B, else 0. A and B are interpreted as big-endian unsigned integers 1216 | - Availability: v4 1217 | 1218 | ## b> 1219 | 1220 | - Bytecode: 0xa5 1221 | - Stack: ..., A: bigint, B: bigint → ..., bool 1222 | - 1 if A is greater than B, else 0. A and B are interpreted as big-endian unsigned integers 1223 | - Availability: v4 1224 | 1225 | ## b<= 1226 | 1227 | - Bytecode: 0xa6 1228 | - Stack: ..., A: bigint, B: bigint → ..., bool 1229 | - 1 if A is less than or equal to B, else 0. A and B are interpreted as big-endian unsigned integers 1230 | - Availability: v4 1231 | 1232 | ## b>= 1233 | 1234 | - Bytecode: 0xa7 1235 | - Stack: ..., A: bigint, B: bigint → ..., bool 1236 | - 1 if A is greater than or equal to B, else 0. A and B are interpreted as big-endian unsigned integers 1237 | - Availability: v4 1238 | 1239 | ## b== 1240 | 1241 | - Bytecode: 0xa8 1242 | - Stack: ..., A: bigint, B: bigint → ..., bool 1243 | - 1 if A is equal to B, else 0. A and B are interpreted as big-endian unsigned integers 1244 | - Availability: v4 1245 | 1246 | ## b!= 1247 | 1248 | - Bytecode: 0xa9 1249 | - Stack: ..., A: bigint, B: bigint → ..., bool 1250 | - 0 if A is equal to B, else 1. A and B are interpreted as big-endian unsigned integers 1251 | - Availability: v4 1252 | 1253 | ## b% 1254 | 1255 | - Bytecode: 0xaa 1256 | - Stack: ..., A: bigint, B: bigint → ..., bigint 1257 | - A modulo B. A and B are interpreted as big-endian unsigned integers. Fail if B is zero. 1258 | - **Cost**: 20 1259 | - Availability: v4 1260 | 1261 | ## b| 1262 | 1263 | - Bytecode: 0xab 1264 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1265 | - A bitwise-or B. A and B are zero-left extended to the greater of their lengths 1266 | - **Cost**: 6 1267 | - Availability: v4 1268 | 1269 | ## b& 1270 | 1271 | - Bytecode: 0xac 1272 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1273 | - A bitwise-and B. A and B are zero-left extended to the greater of their lengths 1274 | - **Cost**: 6 1275 | - Availability: v4 1276 | 1277 | ## b^ 1278 | 1279 | - Bytecode: 0xad 1280 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1281 | - A bitwise-xor B. A and B are zero-left extended to the greater of their lengths 1282 | - **Cost**: 6 1283 | - Availability: v4 1284 | 1285 | ## b~ 1286 | 1287 | - Bytecode: 0xae 1288 | - Stack: ..., A: []byte → ..., []byte 1289 | - A with all bits inverted 1290 | - **Cost**: 4 1291 | - Availability: v4 1292 | 1293 | ## bzero 1294 | 1295 | - Bytecode: 0xaf 1296 | - Stack: ..., A: uint64 → ..., []byte 1297 | - zero filled byte-array of length A 1298 | - Availability: v4 1299 | 1300 | ## log 1301 | 1302 | - Bytecode: 0xb0 1303 | - Stack: ..., A: []byte → ... 1304 | - write A to log state of the current application 1305 | - Availability: v5 1306 | - Mode: Application 1307 | 1308 | `log` fails if called more than MaxLogCalls times in a program, or if the sum of logged bytes exceeds 1024 bytes. 1309 | 1310 | ## itxn_begin 1311 | 1312 | - Bytecode: 0xb1 1313 | - Stack: ... → ... 1314 | - begin preparation of a new inner transaction in a new transaction group 1315 | - Availability: v5 1316 | - Mode: Application 1317 | 1318 | `itxn_begin` initializes Sender to the application address; Fee to the minimum allowable, taking into account MinTxnFee and credit from overpaying in earlier transactions; FirstValid/LastValid to the values in the invoking transaction, and all other fields to zero or empty values. 1319 | 1320 | ## itxn_field 1321 | 1322 | - Syntax: `itxn_field F` where F: [txn](#field-group-txn) 1323 | - Bytecode: 0xb2 {uint8} 1324 | - Stack: ..., A → ... 1325 | - set field F of the current inner transaction to A 1326 | - Availability: v5 1327 | - Mode: Application 1328 | 1329 | `itxn_field` fails if A is of the wrong type for F, including a byte array of the wrong size for use as an address when F is an address field. `itxn_field` also fails if A is an account, asset, or app that is not _available_, or an attempt is made extend an array field beyond the limit imposed by consensus parameters. (Addresses set into asset params of acfg transactions need not be _available_.) 1330 | 1331 | ## itxn_submit 1332 | 1333 | - Bytecode: 0xb3 1334 | - Stack: ... → ... 1335 | - execute the current inner transaction group. Fail if executing this group would exceed the inner transaction limit, or if any transaction in the group fails. 1336 | - Availability: v5 1337 | - Mode: Application 1338 | 1339 | `itxn_submit` resets the current transaction so that it can not be resubmitted. A new `itxn_begin` is required to prepare another inner transaction. 1340 | 1341 | ## itxn 1342 | 1343 | - Syntax: `itxn F` where F: [txn](#field-group-txn) 1344 | - Bytecode: 0xb4 {uint8} 1345 | - Stack: ... → ..., any 1346 | - field F of the last inner transaction 1347 | - Availability: v5 1348 | - Mode: Application 1349 | 1350 | ## itxna 1351 | 1352 | - Syntax: `itxna F I` where F: [txna](#field-group-txna), I: a transaction field array index 1353 | - Bytecode: 0xb5 {uint8}, {uint8} 1354 | - Stack: ... → ..., any 1355 | - Ith value of the array field F of the last inner transaction 1356 | - Availability: v5 1357 | - Mode: Application 1358 | 1359 | ## itxn_next 1360 | 1361 | - Bytecode: 0xb6 1362 | - Stack: ... → ... 1363 | - begin preparation of a new inner transaction in the same transaction group 1364 | - Availability: v6 1365 | - Mode: Application 1366 | 1367 | `itxn_next` initializes the transaction exactly as `itxn_begin` does 1368 | 1369 | ## gitxn 1370 | 1371 | - Syntax: `gitxn T F` where T: transaction group index, F: [txn](#field-group-txn) 1372 | - Bytecode: 0xb7 {uint8}, {uint8} 1373 | - Stack: ... → ..., any 1374 | - field F of the Tth transaction in the last inner group submitted 1375 | - Availability: v6 1376 | - Mode: Application 1377 | 1378 | ## gitxna 1379 | 1380 | - Syntax: `gitxna T F I` where T: transaction group index, F: [txna](#field-group-txna), I: transaction field array index 1381 | - Bytecode: 0xb8 {uint8}, {uint8}, {uint8} 1382 | - Stack: ... → ..., any 1383 | - Ith value of the array field F from the Tth transaction in the last inner group submitted 1384 | - Availability: v6 1385 | - Mode: Application 1386 | 1387 | ## txnas 1388 | 1389 | - Syntax: `txnas F` where F: [txna](#field-group-txna) 1390 | - Bytecode: 0xc0 {uint8} 1391 | - Stack: ..., A: uint64 → ..., any 1392 | - Ath value of the array field F of the current transaction 1393 | - Availability: v5 1394 | 1395 | ## gtxnas 1396 | 1397 | - Syntax: `gtxnas T F` where T: transaction group index, F: [txna](#field-group-txna) 1398 | - Bytecode: 0xc1 {uint8}, {uint8} 1399 | - Stack: ..., A: uint64 → ..., any 1400 | - Ath value of the array field F from the Tth transaction in the current group 1401 | - Availability: v5 1402 | 1403 | ## gtxnsas 1404 | 1405 | - Syntax: `gtxnsas F` where F: [txna](#field-group-txna) 1406 | - Bytecode: 0xc2 {uint8} 1407 | - Stack: ..., A: uint64, B: uint64 → ..., any 1408 | - Bth value of the array field F from the Ath transaction in the current group 1409 | - Availability: v5 1410 | 1411 | ## args 1412 | 1413 | - Bytecode: 0xc3 1414 | - Stack: ..., A: uint64 → ..., []byte 1415 | - Ath LogicSig argument 1416 | - Availability: v5 1417 | - Mode: Signature 1418 | 1419 | ## gloadss 1420 | 1421 | - Bytecode: 0xc4 1422 | - Stack: ..., A: uint64, B: uint64 → ..., any 1423 | - Bth scratch space value of the Ath transaction in the current group 1424 | - Availability: v6 1425 | - Mode: Application 1426 | 1427 | ## itxnas 1428 | 1429 | - Syntax: `itxnas F` where F: [txna](#field-group-txna) 1430 | - Bytecode: 0xc5 {uint8} 1431 | - Stack: ..., A: uint64 → ..., any 1432 | - Ath value of the array field F of the last inner transaction 1433 | - Availability: v6 1434 | - Mode: Application 1435 | 1436 | ## gitxnas 1437 | 1438 | - Syntax: `gitxnas T F` where T: transaction group index, F: [txna](#field-group-txna) 1439 | - Bytecode: 0xc6 {uint8}, {uint8} 1440 | - Stack: ..., A: uint64 → ..., any 1441 | - Ath value of the array field F from the Tth transaction in the last inner group submitted 1442 | - Availability: v6 1443 | - Mode: Application 1444 | 1445 | ## vrf_verify 1446 | 1447 | - Syntax: `vrf_verify S` where S: [vrf_verify](#field-group-vrf_verify) 1448 | - Bytecode: 0xd0 {uint8} 1449 | - Stack: ..., A: []byte, B: [80]byte, C: [32]byte → ..., X: [64]byte, Y: bool 1450 | - Verify the proof B of message A against pubkey C. Returns vrf output and verification flag. 1451 | - **Cost**: 5700 1452 | - Availability: v7 1453 | 1454 | ### vrf_verify 1455 | 1456 | Standards 1457 | 1458 | | Index | Name | Notes | 1459 | | - | ------ | --------- | 1460 | | 0 | VrfAlgorand | | 1461 | 1462 | 1463 | `VrfAlgorand` is the VRF used in Algorand. It is ECVRF-ED25519-SHA512-Elligator2, specified in the IETF internet draft [draft-irtf-cfrg-vrf-03](https://datatracker.ietf.org/doc/draft-irtf-cfrg-vrf/03/). 1464 | 1465 | ## block 1466 | 1467 | - Syntax: `block F` where F: [block](#field-group-block) 1468 | - Bytecode: 0xd1 {uint8} 1469 | - Stack: ..., A: uint64 → ..., any 1470 | - field F of block A. Fail unless A falls between txn.LastValid-1002 and txn.FirstValid (exclusive) 1471 | - Availability: v7 1472 | 1473 | ### block 1474 | 1475 | Fields 1476 | 1477 | | Index | Name | Type | Notes | 1478 | | - | ------ | -- | --------- | 1479 | | 0 | BlkSeed | [32]byte | | 1480 | | 1 | BlkTimestamp | uint64 | | 1481 | 1482 | ```