This is page 72 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:v9.md: -------------------------------------------------------------------------------- ```markdown 1 | title: v9 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 | ## bury 639 | 640 | - Syntax: `bury N` where N: depth 641 | - Bytecode: 0x45 {uint8} 642 | - Stack: ..., A → ... 643 | - replace the Nth value from the top of the stack with A. bury 0 fails. 644 | - Availability: v8 645 | 646 | ## popn 647 | 648 | - Syntax: `popn N` where N: stack depth 649 | - Bytecode: 0x46 {uint8} 650 | - Stack: ..., [N items] → ... 651 | - remove N values from the top of the stack 652 | - Availability: v8 653 | 654 | ## dupn 655 | 656 | - Syntax: `dupn N` where N: copy count 657 | - Bytecode: 0x47 {uint8} 658 | - Stack: ..., A → ..., A, [N copies of A] 659 | - duplicate A, N times 660 | - Availability: v8 661 | 662 | ## pop 663 | 664 | - Bytecode: 0x48 665 | - Stack: ..., A → ... 666 | - discard A 667 | 668 | ## dup 669 | 670 | - Bytecode: 0x49 671 | - Stack: ..., A → ..., A, A 672 | - duplicate A 673 | 674 | ## dup2 675 | 676 | - Bytecode: 0x4a 677 | - Stack: ..., A, B → ..., A, B, A, B 678 | - duplicate A and B 679 | - Availability: v2 680 | 681 | ## dig 682 | 683 | - Syntax: `dig N` where N: depth 684 | - Bytecode: 0x4b {uint8} 685 | - Stack: ..., A, [N items] → ..., A, [N items], A 686 | - Nth value from the top of the stack. dig 0 is equivalent to dup 687 | - Availability: v3 688 | 689 | ## swap 690 | 691 | - Bytecode: 0x4c 692 | - Stack: ..., A, B → ..., B, A 693 | - swaps A and B on stack 694 | - Availability: v3 695 | 696 | ## select 697 | 698 | - Bytecode: 0x4d 699 | - Stack: ..., A, B, C: uint64 → ..., A or B 700 | - selects one of two values based on top-of-stack: B if C != 0, else A 701 | - Availability: v3 702 | 703 | ## cover 704 | 705 | - Syntax: `cover N` where N: depth 706 | - Bytecode: 0x4e {uint8} 707 | - Stack: ..., [N items], A → ..., A, [N items] 708 | - remove top of stack, and place it deeper in the stack such that N elements are above it. Fails if stack depth <= N. 709 | - Availability: v5 710 | 711 | ## uncover 712 | 713 | - Syntax: `uncover N` where N: depth 714 | - Bytecode: 0x4f {uint8} 715 | - Stack: ..., A, [N items] → ..., [N items], A 716 | - 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. 717 | - Availability: v5 718 | 719 | ## concat 720 | 721 | - Bytecode: 0x50 722 | - Stack: ..., A: []byte, B: []byte → ..., []byte 723 | - join A and B 724 | - Availability: v2 725 | 726 | `concat` fails if the result would be greater than 4096 bytes. 727 | 728 | ## substring 729 | 730 | - Syntax: `substring S E` where S: start position, E: end position 731 | - Bytecode: 0x51 {uint8}, {uint8} 732 | - Stack: ..., A: []byte → ..., []byte 733 | - 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 734 | - Availability: v2 735 | 736 | ## substring3 737 | 738 | - Bytecode: 0x52 739 | - Stack: ..., A: []byte, B: uint64, C: uint64 → ..., []byte 740 | - 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 741 | - Availability: v2 742 | 743 | ## getbit 744 | 745 | - Bytecode: 0x53 746 | - Stack: ..., A, B: uint64 → ..., uint64 747 | - 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 748 | - Availability: v3 749 | 750 | see explanation of bit ordering in setbit 751 | 752 | ## setbit 753 | 754 | - Bytecode: 0x54 755 | - Stack: ..., A, B: uint64, C: uint64 → ..., any 756 | - 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 757 | - Availability: v3 758 | 759 | 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. 760 | 761 | ## getbyte 762 | 763 | - Bytecode: 0x55 764 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 765 | - Bth byte of A, as an integer. If B is greater than or equal to the array length, the program fails 766 | - Availability: v3 767 | 768 | ## setbyte 769 | 770 | - Bytecode: 0x56 771 | - Stack: ..., A: []byte, B: uint64, C: uint64 → ..., []byte 772 | - 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 773 | - Availability: v3 774 | 775 | ## extract 776 | 777 | - Syntax: `extract S L` where S: start position, L: length 778 | - Bytecode: 0x57 {uint8}, {uint8} 779 | - Stack: ..., A: []byte → ..., []byte 780 | - 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 781 | - Availability: v5 782 | 783 | ## extract3 784 | 785 | - Bytecode: 0x58 786 | - Stack: ..., A: []byte, B: uint64, C: uint64 → ..., []byte 787 | - 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. 788 | - Availability: v5 789 | 790 | ## extract_uint16 791 | 792 | - Bytecode: 0x59 793 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 794 | - 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 795 | - Availability: v5 796 | 797 | ## extract_uint32 798 | 799 | - Bytecode: 0x5a 800 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 801 | - 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 802 | - Availability: v5 803 | 804 | ## extract_uint64 805 | 806 | - Bytecode: 0x5b 807 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 808 | - 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 809 | - Availability: v5 810 | 811 | ## replace2 812 | 813 | - Syntax: `replace2 S` where S: start position 814 | - Bytecode: 0x5c {uint8} 815 | - Stack: ..., A: []byte, B: []byte → ..., []byte 816 | - 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. 817 | - Availability: v7 818 | 819 | ## replace3 820 | 821 | - Bytecode: 0x5d 822 | - Stack: ..., A: []byte, B: uint64, C: []byte → ..., []byte 823 | - 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. 824 | - Availability: v7 825 | 826 | ## base64_decode 827 | 828 | - Syntax: `base64_decode E` where E: [base64](#field-group-base64) 829 | - Bytecode: 0x5e {uint8} 830 | - Stack: ..., A: []byte → ..., []byte 831 | - decode A which was base64-encoded using _encoding_ E. Fail if A is not base64 encoded with encoding E 832 | - **Cost**: 1 + 1 per 16 bytes of A 833 | - Availability: v7 834 | 835 | ### base64 836 | 837 | Encodings 838 | 839 | | Index | Name | Notes | 840 | | - | ------ | --------- | 841 | | 0 | URLEncoding | | 842 | | 1 | StdEncoding | | 843 | 844 | 845 | *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. 846 | 847 | 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`. 848 | 849 | ## json_ref 850 | 851 | - Syntax: `json_ref R` where R: [json_ref](#field-group-json_ref) 852 | - Bytecode: 0x5f {uint8} 853 | - Stack: ..., A: []byte, B: []byte → ..., any 854 | - key B's value, of type R, from a [valid](../jsonspec.md) utf-8 encoded json object A 855 | - **Cost**: 25 + 2 per 7 bytes of A 856 | - Availability: v7 857 | 858 | ### json_ref 859 | 860 | Types 861 | 862 | | Index | Name | Type | Notes | 863 | | - | ------ | -- | --------- | 864 | | 0 | JSONString | []byte | | 865 | | 1 | JSONUint64 | uint64 | | 866 | | 2 | JSONObject | []byte | | 867 | 868 | 869 | *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. 870 | 871 | 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. 872 | 873 | ## balance 874 | 875 | - Bytecode: 0x60 876 | - Stack: ..., A → ..., uint64 877 | - 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` 878 | - Availability: v2 879 | - Mode: Application 880 | 881 | params: Txn.Accounts offset (or, since v4, an _available_ account address), _available_ application id (or, since v4, a Txn.ForeignApps offset). Return: value. 882 | 883 | ## app_opted_in 884 | 885 | - Bytecode: 0x61 886 | - Stack: ..., A, B: uint64 → ..., bool 887 | - 1 if account A is opted in to application B, else 0 888 | - Availability: v2 889 | - Mode: Application 890 | 891 | 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. 892 | 893 | ## app_local_get 894 | 895 | - Bytecode: 0x62 896 | - Stack: ..., A, B: stateKey → ..., any 897 | - local state of the key B in the current application in account A 898 | - Availability: v2 899 | - Mode: Application 900 | 901 | 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. 902 | 903 | ## app_local_get_ex 904 | 905 | - Bytecode: 0x63 906 | - Stack: ..., A, B: uint64, C: stateKey → ..., X: any, Y: bool 907 | - X is the local state of application B, key C in account A. Y is 1 if key existed, else 0 908 | - Availability: v2 909 | - Mode: Application 910 | 911 | 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. 912 | 913 | ## app_global_get 914 | 915 | - Bytecode: 0x64 916 | - Stack: ..., A: stateKey → ..., any 917 | - global state of the key A in the current application 918 | - Availability: v2 919 | - Mode: Application 920 | 921 | params: state key. Return: value. The value is zero (of type uint64) if the key does not exist. 922 | 923 | ## app_global_get_ex 924 | 925 | - Bytecode: 0x65 926 | - Stack: ..., A: uint64, B: stateKey → ..., X: any, Y: bool 927 | - X is the global state of application A, key B. Y is 1 if key existed, else 0 928 | - Availability: v2 929 | - Mode: Application 930 | 931 | 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. 932 | 933 | ## app_local_put 934 | 935 | - Bytecode: 0x66 936 | - Stack: ..., A, B: stateKey, C → ... 937 | - write C to key B in account A's local state of the current application 938 | - Availability: v2 939 | - Mode: Application 940 | 941 | params: Txn.Accounts offset (or, since v4, an _available_ account address), state key, value. 942 | 943 | ## app_global_put 944 | 945 | - Bytecode: 0x67 946 | - Stack: ..., A: stateKey, B → ... 947 | - write B to key A in the global state of the current application 948 | - Availability: v2 949 | - Mode: Application 950 | 951 | ## app_local_del 952 | 953 | - Bytecode: 0x68 954 | - Stack: ..., A, B: stateKey → ... 955 | - delete key B from account A's local state of the current application 956 | - Availability: v2 957 | - Mode: Application 958 | 959 | params: Txn.Accounts offset (or, since v4, an _available_ account address), state key. 960 | 961 | 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.) 962 | 963 | ## app_global_del 964 | 965 | - Bytecode: 0x69 966 | - Stack: ..., A: stateKey → ... 967 | - delete key A from the global state of the current application 968 | - Availability: v2 969 | - Mode: Application 970 | 971 | params: state key. 972 | 973 | 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.) 974 | 975 | ## asset_holding_get 976 | 977 | - Syntax: `asset_holding_get F` where F: [asset_holding](#field-group-asset_holding) 978 | - Bytecode: 0x70 {uint8} 979 | - Stack: ..., A, B: uint64 → ..., X: any, Y: bool 980 | - X is field F from account A's holding of asset B. Y is 1 if A is opted into B, else 0 981 | - Availability: v2 982 | - Mode: Application 983 | 984 | ### asset_holding 985 | 986 | Fields 987 | 988 | | Index | Name | Type | Notes | 989 | | - | ------ | -- | --------- | 990 | | 0 | AssetBalance | uint64 | Amount of the asset unit held by this account | 991 | | 1 | AssetFrozen | bool | Is the asset frozen or not | 992 | 993 | 994 | 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. 995 | 996 | ## asset_params_get 997 | 998 | - Syntax: `asset_params_get F` where F: [asset_params](#field-group-asset_params) 999 | - Bytecode: 0x71 {uint8} 1000 | - Stack: ..., A: uint64 → ..., X: any, Y: bool 1001 | - X is field F from asset A. Y is 1 if A exists, else 0 1002 | - Availability: v2 1003 | - Mode: Application 1004 | 1005 | ### asset_params 1006 | 1007 | Fields 1008 | 1009 | | Index | Name | Type | In | Notes | 1010 | | - | ------ | -- | - | --------- | 1011 | | 0 | AssetTotal | uint64 | | Total number of units of this asset | 1012 | | 1 | AssetDecimals | uint64 | | See AssetParams.Decimals | 1013 | | 2 | AssetDefaultFrozen | bool | | Frozen by default or not | 1014 | | 3 | AssetUnitName | []byte | | Asset unit name | 1015 | | 4 | AssetName | []byte | | Asset name | 1016 | | 5 | AssetURL | []byte | | URL with additional info about the asset | 1017 | | 6 | AssetMetadataHash | [32]byte | | Arbitrary commitment | 1018 | | 7 | AssetManager | address | | Manager address | 1019 | | 8 | AssetReserve | address | | Reserve address | 1020 | | 9 | AssetFreeze | address | | Freeze address | 1021 | | 10 | AssetClawback | address | | Clawback address | 1022 | | 11 | AssetCreator | address | v5 | Creator address | 1023 | 1024 | 1025 | params: Txn.ForeignAssets offset (or, since v4, an _available_ asset id. Return: did_exist flag (1 if the asset existed and 0 otherwise), value. 1026 | 1027 | ## app_params_get 1028 | 1029 | - Syntax: `app_params_get F` where F: [app_params](#field-group-app_params) 1030 | - Bytecode: 0x72 {uint8} 1031 | - Stack: ..., A: uint64 → ..., X: any, Y: bool 1032 | - X is field F from app A. Y is 1 if A exists, else 0 1033 | - Availability: v5 1034 | - Mode: Application 1035 | 1036 | ### app_params 1037 | 1038 | Fields 1039 | 1040 | | Index | Name | Type | Notes | 1041 | | - | ------ | -- | --------- | 1042 | | 0 | AppApprovalProgram | []byte | Bytecode of Approval Program | 1043 | | 1 | AppClearStateProgram | []byte | Bytecode of Clear State Program | 1044 | | 2 | AppGlobalNumUint | uint64 | Number of uint64 values allowed in Global State | 1045 | | 3 | AppGlobalNumByteSlice | uint64 | Number of byte array values allowed in Global State | 1046 | | 4 | AppLocalNumUint | uint64 | Number of uint64 values allowed in Local State | 1047 | | 5 | AppLocalNumByteSlice | uint64 | Number of byte array values allowed in Local State | 1048 | | 6 | AppExtraProgramPages | uint64 | Number of Extra Program Pages of code space | 1049 | | 7 | AppCreator | address | Creator address | 1050 | | 8 | AppAddress | address | Address for which this application has authority | 1051 | 1052 | 1053 | params: Txn.ForeignApps offset or an _available_ app id. Return: did_exist flag (1 if the application existed and 0 otherwise), value. 1054 | 1055 | ## acct_params_get 1056 | 1057 | - Syntax: `acct_params_get F` where F: [acct_params](#field-group-acct_params) 1058 | - Bytecode: 0x73 {uint8} 1059 | - Stack: ..., A → ..., X: any, Y: bool 1060 | - X is field F from account A. Y is 1 if A owns positive algos, else 0 1061 | - Availability: v6 1062 | - Mode: Application 1063 | 1064 | ### acct_params 1065 | 1066 | Fields 1067 | 1068 | | Index | Name | Type | In | Notes | 1069 | | - | ------ | -- | - | --------- | 1070 | | 0 | AcctBalance | uint64 | | Account balance in microalgos | 1071 | | 1 | AcctMinBalance | uint64 | | Minimum required balance for account, in microalgos | 1072 | | 2 | AcctAuthAddr | address | | Address the account is rekeyed to. | 1073 | | 3 | AcctTotalNumUint | uint64 | v8 | The total number of uint64 values allocated by this account in Global and Local States. | 1074 | | 4 | AcctTotalNumByteSlice | uint64 | v8 | The total number of byte array values allocated by this account in Global and Local States. | 1075 | | 5 | AcctTotalExtraAppPages | uint64 | v8 | The number of extra app code pages used by this account. | 1076 | | 6 | AcctTotalAppsCreated | uint64 | v8 | The number of existing apps created by this account. | 1077 | | 7 | AcctTotalAppsOptedIn | uint64 | v8 | The number of apps this account is opted into. | 1078 | | 8 | AcctTotalAssetsCreated | uint64 | v8 | The number of existing ASAs created by this account. | 1079 | | 9 | AcctTotalAssets | uint64 | v8 | The numbers of ASAs held by this account (including ASAs this account created). | 1080 | | 10 | AcctTotalBoxes | uint64 | v8 | The number of existing boxes created by this account's app. | 1081 | | 11 | AcctTotalBoxBytes | uint64 | v8 | The total number of bytes used by this account's app's box keys and values. | 1082 | 1083 | 1084 | ## min_balance 1085 | 1086 | - Bytecode: 0x78 1087 | - Stack: ..., A → ..., uint64 1088 | - 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. 1089 | - Availability: v3 1090 | - Mode: Application 1091 | 1092 | params: Txn.Accounts offset (or, since v4, an _available_ account address), _available_ application id (or, since v4, a Txn.ForeignApps offset). Return: value. 1093 | 1094 | ## pushbytes 1095 | 1096 | - Syntax: `pushbytes BYTES` where BYTES: a byte constant 1097 | - Bytecode: 0x80 {varuint length, bytes} 1098 | - Stack: ... → ..., []byte 1099 | - immediate BYTES 1100 | - Availability: v3 1101 | 1102 | pushbytes args are not added to the bytecblock during assembly processes 1103 | 1104 | ## pushint 1105 | 1106 | - Syntax: `pushint UINT` where UINT: an int constant 1107 | - Bytecode: 0x81 {varuint} 1108 | - Stack: ... → ..., uint64 1109 | - immediate UINT 1110 | - Availability: v3 1111 | 1112 | pushint args are not added to the intcblock during assembly processes 1113 | 1114 | ## pushbytess 1115 | 1116 | - Syntax: `pushbytess BYTES ...` where BYTES ...: a list of byte constants 1117 | - Bytecode: 0x82 {varuint count, [varuint length, bytes ...]} 1118 | - Stack: ... → ..., [N items] 1119 | - push sequences of immediate byte arrays to stack (first byte array being deepest) 1120 | - Availability: v8 1121 | 1122 | pushbytess args are not added to the bytecblock during assembly processes 1123 | 1124 | ## pushints 1125 | 1126 | - Syntax: `pushints UINT ...` where UINT ...: a list of int constants 1127 | - Bytecode: 0x83 {varuint count, [varuint ...]} 1128 | - Stack: ... → ..., [N items] 1129 | - push sequence of immediate uints to stack in the order they appear (first uint being deepest) 1130 | - Availability: v8 1131 | 1132 | pushints args are not added to the intcblock during assembly processes 1133 | 1134 | ## ed25519verify_bare 1135 | 1136 | - Bytecode: 0x84 1137 | - Stack: ..., A: []byte, B: [64]byte, C: [32]byte → ..., bool 1138 | - for (data A, signature B, pubkey C) verify the signature of the data against the pubkey => {0 or 1} 1139 | - **Cost**: 1900 1140 | - Availability: v7 1141 | 1142 | ## callsub 1143 | 1144 | - Syntax: `callsub TARGET` where TARGET: branch offset 1145 | - Bytecode: 0x88 {int16 (big-endian)} 1146 | - Stack: ... → ... 1147 | - branch unconditionally to TARGET, saving the next instruction on the call stack 1148 | - Availability: v4 1149 | 1150 | The call stack is separate from the data stack. Only `callsub`, `retsub`, and `proto` manipulate it. 1151 | 1152 | ## retsub 1153 | 1154 | - Bytecode: 0x89 1155 | - Stack: ... → ... 1156 | - pop the top instruction from the call stack and branch to it 1157 | - Availability: v4 1158 | 1159 | 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. 1160 | 1161 | ## proto 1162 | 1163 | - Syntax: `proto A R` where A: number of arguments, R: number of return values 1164 | - Bytecode: 0x8a {uint8}, {uint8} 1165 | - Stack: ... → ... 1166 | - Prepare top call frame for a retsub that will assume A args and R return values. 1167 | - Availability: v8 1168 | 1169 | Fails unless the last instruction executed was a `callsub`. 1170 | 1171 | ## frame_dig 1172 | 1173 | - Syntax: `frame_dig I` where I: frame slot 1174 | - Bytecode: 0x8b {int8} 1175 | - Stack: ... → ..., any 1176 | - Nth (signed) value from the frame pointer. 1177 | - Availability: v8 1178 | 1179 | ## frame_bury 1180 | 1181 | - Syntax: `frame_bury I` where I: frame slot 1182 | - Bytecode: 0x8c {int8} 1183 | - Stack: ..., A → ... 1184 | - replace the Nth (signed) value from the frame pointer in the stack with A 1185 | - Availability: v8 1186 | 1187 | ## switch 1188 | 1189 | - Syntax: `switch TARGET ...` where TARGET ...: list of labels 1190 | - Bytecode: 0x8d {varuint count, [int16 (big-endian) ...]} 1191 | - Stack: ..., A: uint64 → ... 1192 | - branch to the Ath label. Continue at following instruction if index A exceeds the number of labels. 1193 | - Availability: v8 1194 | 1195 | ## match 1196 | 1197 | - Syntax: `match TARGET ...` where TARGET ...: list of labels 1198 | - Bytecode: 0x8e {varuint count, [int16 (big-endian) ...]} 1199 | - Stack: ..., [A1, A2, ..., AN], B → ... 1200 | - given match cases from A[1] to A[N], branch to the Ith label where A[I] = B. Continue to the following instruction if no matches are found. 1201 | - Availability: v8 1202 | 1203 | `match` consumes N+1 values from the stack. Let the top stack value be B. The following N values represent an ordered list of match cases/constants (A), where the first value (A[0]) is the deepest in the stack. The immediate arguments are an ordered list of N labels (T). `match` will branch to target T[I], where A[I] = B. If there are no matches then execution continues on to the next instruction. 1204 | 1205 | ## shl 1206 | 1207 | - Bytecode: 0x90 1208 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 1209 | - A times 2^B, modulo 2^64 1210 | - Availability: v4 1211 | 1212 | ## shr 1213 | 1214 | - Bytecode: 0x91 1215 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 1216 | - A divided by 2^B 1217 | - Availability: v4 1218 | 1219 | ## sqrt 1220 | 1221 | - Bytecode: 0x92 1222 | - Stack: ..., A: uint64 → ..., uint64 1223 | - The largest integer I such that I^2 <= A 1224 | - **Cost**: 4 1225 | - Availability: v4 1226 | 1227 | ## bitlen 1228 | 1229 | - Bytecode: 0x93 1230 | - Stack: ..., A → ..., uint64 1231 | - 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 1232 | - Availability: v4 1233 | 1234 | bitlen interprets arrays as big-endian integers, unlike setbit/getbit 1235 | 1236 | ## exp 1237 | 1238 | - Bytecode: 0x94 1239 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 1240 | - A raised to the Bth power. Fail if A == B == 0 and on overflow 1241 | - Availability: v4 1242 | 1243 | ## expw 1244 | 1245 | - Bytecode: 0x95 1246 | - Stack: ..., A: uint64, B: uint64 → ..., X: uint64, Y: uint64 1247 | - 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 1248 | - **Cost**: 10 1249 | - Availability: v4 1250 | 1251 | ## bsqrt 1252 | 1253 | - Bytecode: 0x96 1254 | - Stack: ..., A: bigint → ..., bigint 1255 | - The largest integer I such that I^2 <= A. A and I are interpreted as big-endian unsigned integers 1256 | - **Cost**: 40 1257 | - Availability: v6 1258 | 1259 | ## divw 1260 | 1261 | - Bytecode: 0x97 1262 | - Stack: ..., A: uint64, B: uint64, C: uint64 → ..., uint64 1263 | - A,B / C. Fail if C == 0 or if result overflows. 1264 | - Availability: v6 1265 | 1266 | 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. 1267 | 1268 | ## sha3_256 1269 | 1270 | - Bytecode: 0x98 1271 | - Stack: ..., A: []byte → ..., [32]byte 1272 | - SHA3_256 hash of value A, yields [32]byte 1273 | - **Cost**: 130 1274 | - Availability: v7 1275 | 1276 | ## b+ 1277 | 1278 | - Bytecode: 0xa0 1279 | - Stack: ..., A: bigint, B: bigint → ..., []byte 1280 | - A plus B. A and B are interpreted as big-endian unsigned integers 1281 | - **Cost**: 10 1282 | - Availability: v4 1283 | 1284 | ## b- 1285 | 1286 | - Bytecode: 0xa1 1287 | - Stack: ..., A: bigint, B: bigint → ..., bigint 1288 | - A minus B. A and B are interpreted as big-endian unsigned integers. Fail on underflow. 1289 | - **Cost**: 10 1290 | - Availability: v4 1291 | 1292 | ## b/ 1293 | 1294 | - Bytecode: 0xa2 1295 | - Stack: ..., A: bigint, B: bigint → ..., bigint 1296 | - A divided by B (truncated division). A and B are interpreted as big-endian unsigned integers. Fail if B is zero. 1297 | - **Cost**: 20 1298 | - Availability: v4 1299 | 1300 | ## b* 1301 | 1302 | - Bytecode: 0xa3 1303 | - Stack: ..., A: bigint, B: bigint → ..., []byte 1304 | - A times B. A and B are interpreted as big-endian unsigned integers. 1305 | - **Cost**: 20 1306 | - Availability: v4 1307 | 1308 | ## b< 1309 | 1310 | - Bytecode: 0xa4 1311 | - Stack: ..., A: bigint, B: bigint → ..., bool 1312 | - 1 if A is less than B, else 0. A and B are interpreted as big-endian unsigned integers 1313 | - Availability: v4 1314 | 1315 | ## b> 1316 | 1317 | - Bytecode: 0xa5 1318 | - Stack: ..., A: bigint, B: bigint → ..., bool 1319 | - 1 if A is greater than B, else 0. A and B are interpreted as big-endian unsigned integers 1320 | - Availability: v4 1321 | 1322 | ## b<= 1323 | 1324 | - Bytecode: 0xa6 1325 | - Stack: ..., A: bigint, B: bigint → ..., bool 1326 | - 1 if A is less than or equal to B, else 0. A and B are interpreted as big-endian unsigned integers 1327 | - Availability: v4 1328 | 1329 | ## b>= 1330 | 1331 | - Bytecode: 0xa7 1332 | - Stack: ..., A: bigint, B: bigint → ..., bool 1333 | - 1 if A is greater than or equal to B, else 0. A and B are interpreted as big-endian unsigned integers 1334 | - Availability: v4 1335 | 1336 | ## b== 1337 | 1338 | - Bytecode: 0xa8 1339 | - Stack: ..., A: bigint, B: bigint → ..., bool 1340 | - 1 if A is equal to B, else 0. A and B are interpreted as big-endian unsigned integers 1341 | - Availability: v4 1342 | 1343 | ## b!= 1344 | 1345 | - Bytecode: 0xa9 1346 | - Stack: ..., A: bigint, B: bigint → ..., bool 1347 | - 0 if A is equal to B, else 1. A and B are interpreted as big-endian unsigned integers 1348 | - Availability: v4 1349 | 1350 | ## b% 1351 | 1352 | - Bytecode: 0xaa 1353 | - Stack: ..., A: bigint, B: bigint → ..., bigint 1354 | - A modulo B. A and B are interpreted as big-endian unsigned integers. Fail if B is zero. 1355 | - **Cost**: 20 1356 | - Availability: v4 1357 | 1358 | ## b| 1359 | 1360 | - Bytecode: 0xab 1361 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1362 | - A bitwise-or B. A and B are zero-left extended to the greater of their lengths 1363 | - **Cost**: 6 1364 | - Availability: v4 1365 | 1366 | ## b& 1367 | 1368 | - Bytecode: 0xac 1369 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1370 | - A bitwise-and B. A and B are zero-left extended to the greater of their lengths 1371 | - **Cost**: 6 1372 | - Availability: v4 1373 | 1374 | ## b^ 1375 | 1376 | - Bytecode: 0xad 1377 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1378 | - A bitwise-xor B. A and B are zero-left extended to the greater of their lengths 1379 | - **Cost**: 6 1380 | - Availability: v4 1381 | 1382 | ## b~ 1383 | 1384 | - Bytecode: 0xae 1385 | - Stack: ..., A: []byte → ..., []byte 1386 | - A with all bits inverted 1387 | - **Cost**: 4 1388 | - Availability: v4 1389 | 1390 | ## bzero 1391 | 1392 | - Bytecode: 0xaf 1393 | - Stack: ..., A: uint64 → ..., []byte 1394 | - zero filled byte-array of length A 1395 | - Availability: v4 1396 | 1397 | ## log 1398 | 1399 | - Bytecode: 0xb0 1400 | - Stack: ..., A: []byte → ... 1401 | - write A to log state of the current application 1402 | - Availability: v5 1403 | - Mode: Application 1404 | 1405 | `log` fails if called more than MaxLogCalls times in a program, or if the sum of logged bytes exceeds 1024 bytes. 1406 | 1407 | ## itxn_begin 1408 | 1409 | - Bytecode: 0xb1 1410 | - Stack: ... → ... 1411 | - begin preparation of a new inner transaction in a new transaction group 1412 | - Availability: v5 1413 | - Mode: Application 1414 | 1415 | `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. 1416 | 1417 | ## itxn_field 1418 | 1419 | - Syntax: `itxn_field F` where F: [txn](#field-group-txn) 1420 | - Bytecode: 0xb2 {uint8} 1421 | - Stack: ..., A → ... 1422 | - set field F of the current inner transaction to A 1423 | - Availability: v5 1424 | - Mode: Application 1425 | 1426 | `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_.) 1427 | 1428 | ## itxn_submit 1429 | 1430 | - Bytecode: 0xb3 1431 | - Stack: ... → ... 1432 | - 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. 1433 | - Availability: v5 1434 | - Mode: Application 1435 | 1436 | `itxn_submit` resets the current transaction so that it can not be resubmitted. A new `itxn_begin` is required to prepare another inner transaction. 1437 | 1438 | ## itxn 1439 | 1440 | - Syntax: `itxn F` where F: [txn](#field-group-txn) 1441 | - Bytecode: 0xb4 {uint8} 1442 | - Stack: ... → ..., any 1443 | - field F of the last inner transaction 1444 | - Availability: v5 1445 | - Mode: Application 1446 | 1447 | ## itxna 1448 | 1449 | - Syntax: `itxna F I` where F: [txna](#field-group-txna), I: a transaction field array index 1450 | - Bytecode: 0xb5 {uint8}, {uint8} 1451 | - Stack: ... → ..., any 1452 | - Ith value of the array field F of the last inner transaction 1453 | - Availability: v5 1454 | - Mode: Application 1455 | 1456 | ## itxn_next 1457 | 1458 | - Bytecode: 0xb6 1459 | - Stack: ... → ... 1460 | - begin preparation of a new inner transaction in the same transaction group 1461 | - Availability: v6 1462 | - Mode: Application 1463 | 1464 | `itxn_next` initializes the transaction exactly as `itxn_begin` does 1465 | 1466 | ## gitxn 1467 | 1468 | - Syntax: `gitxn T F` where T: transaction group index, F: [txn](#field-group-txn) 1469 | - Bytecode: 0xb7 {uint8}, {uint8} 1470 | - Stack: ... → ..., any 1471 | - field F of the Tth transaction in the last inner group submitted 1472 | - Availability: v6 1473 | - Mode: Application 1474 | 1475 | ## gitxna 1476 | 1477 | - Syntax: `gitxna T F I` where T: transaction group index, F: [txna](#field-group-txna), I: transaction field array index 1478 | - Bytecode: 0xb8 {uint8}, {uint8}, {uint8} 1479 | - Stack: ... → ..., any 1480 | - Ith value of the array field F from the Tth transaction in the last inner group submitted 1481 | - Availability: v6 1482 | - Mode: Application 1483 | 1484 | ## box_create 1485 | 1486 | - Bytecode: 0xb9 1487 | - Stack: ..., A: boxName, B: uint64 → ..., bool 1488 | - create a box named A, of length B. Fail if the name A is empty or B exceeds 32,768. Returns 0 if A already existed, else 1 1489 | - Availability: v8 1490 | - Mode: Application 1491 | 1492 | Newly created boxes are filled with 0 bytes. `box_create` will fail if the referenced box already exists with a different size. Otherwise, existing boxes are unchanged by `box_create`. 1493 | 1494 | ## box_extract 1495 | 1496 | - Bytecode: 0xba 1497 | - Stack: ..., A: boxName, B: uint64, C: uint64 → ..., []byte 1498 | - read C bytes from box A, starting at offset B. Fail if A does not exist, or the byte range is outside A's size. 1499 | - Availability: v8 1500 | - Mode: Application 1501 | 1502 | ## box_replace 1503 | 1504 | - Bytecode: 0xbb 1505 | - Stack: ..., A: boxName, B: uint64, C: []byte → ... 1506 | - write byte-array C into box A, starting at offset B. Fail if A does not exist, or the byte range is outside A's size. 1507 | - Availability: v8 1508 | - Mode: Application 1509 | 1510 | ## box_del 1511 | 1512 | - Bytecode: 0xbc 1513 | - Stack: ..., A: boxName → ..., bool 1514 | - delete box named A if it exists. Return 1 if A existed, 0 otherwise 1515 | - Availability: v8 1516 | - Mode: Application 1517 | 1518 | ## box_len 1519 | 1520 | - Bytecode: 0xbd 1521 | - Stack: ..., A: boxName → ..., X: uint64, Y: bool 1522 | - X is the length of box A if A exists, else 0. Y is 1 if A exists, else 0. 1523 | - Availability: v8 1524 | - Mode: Application 1525 | 1526 | ## box_get 1527 | 1528 | - Bytecode: 0xbe 1529 | - Stack: ..., A: boxName → ..., X: []byte, Y: bool 1530 | - X is the contents of box A if A exists, else ''. Y is 1 if A exists, else 0. 1531 | - Availability: v8 1532 | - Mode: Application 1533 | 1534 | For boxes that exceed 4,096 bytes, consider `box_create`, `box_extract`, and `box_replace` 1535 | 1536 | ## box_put 1537 | 1538 | - Bytecode: 0xbf 1539 | - Stack: ..., A: boxName, B: []byte → ... 1540 | - replaces the contents of box A with byte-array B. Fails if A exists and len(B) != len(box A). Creates A if it does not exist 1541 | - Availability: v8 1542 | - Mode: Application 1543 | 1544 | For boxes that exceed 4,096 bytes, consider `box_create`, `box_extract`, and `box_replace` 1545 | 1546 | ## txnas 1547 | 1548 | - Syntax: `txnas F` where F: [txna](#field-group-txna) 1549 | - Bytecode: 0xc0 {uint8} 1550 | - Stack: ..., A: uint64 → ..., any 1551 | - Ath value of the array field F of the current transaction 1552 | - Availability: v5 1553 | 1554 | ## gtxnas 1555 | 1556 | - Syntax: `gtxnas T F` where T: transaction group index, F: [txna](#field-group-txna) 1557 | - Bytecode: 0xc1 {uint8}, {uint8} 1558 | - Stack: ..., A: uint64 → ..., any 1559 | - Ath value of the array field F from the Tth transaction in the current group 1560 | - Availability: v5 1561 | 1562 | ## gtxnsas 1563 | 1564 | - Syntax: `gtxnsas F` where F: [txna](#field-group-txna) 1565 | - Bytecode: 0xc2 {uint8} 1566 | - Stack: ..., A: uint64, B: uint64 → ..., any 1567 | - Bth value of the array field F from the Ath transaction in the current group 1568 | - Availability: v5 1569 | 1570 | ## args 1571 | 1572 | - Bytecode: 0xc3 1573 | - Stack: ..., A: uint64 → ..., []byte 1574 | - Ath LogicSig argument 1575 | - Availability: v5 1576 | - Mode: Signature 1577 | 1578 | ## gloadss 1579 | 1580 | - Bytecode: 0xc4 1581 | - Stack: ..., A: uint64, B: uint64 → ..., any 1582 | - Bth scratch space value of the Ath transaction in the current group 1583 | - Availability: v6 1584 | - Mode: Application 1585 | 1586 | ## itxnas 1587 | 1588 | - Syntax: `itxnas F` where F: [txna](#field-group-txna) 1589 | - Bytecode: 0xc5 {uint8} 1590 | - Stack: ..., A: uint64 → ..., any 1591 | - Ath value of the array field F of the last inner transaction 1592 | - Availability: v6 1593 | - Mode: Application 1594 | 1595 | ## gitxnas 1596 | 1597 | - Syntax: `gitxnas T F` where T: transaction group index, F: [txna](#field-group-txna) 1598 | - Bytecode: 0xc6 {uint8}, {uint8} 1599 | - Stack: ..., A: uint64 → ..., any 1600 | - Ath value of the array field F from the Tth transaction in the last inner group submitted 1601 | - Availability: v6 1602 | - Mode: Application 1603 | 1604 | ## vrf_verify 1605 | 1606 | - Syntax: `vrf_verify S` where S: [vrf_verify](#field-group-vrf_verify) 1607 | - Bytecode: 0xd0 {uint8} 1608 | - Stack: ..., A: []byte, B: [80]byte, C: [32]byte → ..., X: [64]byte, Y: bool 1609 | - Verify the proof B of message A against pubkey C. Returns vrf output and verification flag. 1610 | - **Cost**: 5700 1611 | - Availability: v7 1612 | 1613 | ### vrf_verify 1614 | 1615 | Standards 1616 | 1617 | | Index | Name | Notes | 1618 | | - | ------ | --------- | 1619 | | 0 | VrfAlgorand | | 1620 | 1621 | 1622 | `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/). 1623 | 1624 | ## block 1625 | 1626 | - Syntax: `block F` where F: [block](#field-group-block) 1627 | - Bytecode: 0xd1 {uint8} 1628 | - Stack: ..., A: uint64 → ..., any 1629 | - field F of block A. Fail unless A falls between txn.LastValid-1002 and txn.FirstValid (exclusive) 1630 | - Availability: v7 1631 | 1632 | ### block 1633 | 1634 | Fields 1635 | 1636 | | Index | Name | Type | Notes | 1637 | | - | ------ | -- | --------- | 1638 | | 0 | BlkSeed | [32]byte | | 1639 | | 1 | BlkTimestamp | uint64 | | 1640 | 1641 | ```