This is page 74 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:v10.md: -------------------------------------------------------------------------------- ```markdown 1 | title: v10 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 | | 15 | AssetCreateMinBalance | uint64 | v10 | The additional minimum balance required to create (and opt-in to) an asset. | 463 | | 16 | AssetOptInMinBalance | uint64 | v10 | The additional minimum balance required to opt-in to an asset. | 464 | | 17 | GenesisHash | [32]byte | v10 | The Genesis Hash for the network. | 465 | 466 | 467 | ## gtxn 468 | 469 | - Syntax: `gtxn T F` where T: transaction group index, F: [txn](#field-group-txn) 470 | - Bytecode: 0x33 {uint8}, {uint8} 471 | - Stack: ... → ..., any 472 | - field F of the Tth transaction in the current group 473 | 474 | for notes on transaction fields available, see `txn`. If this transaction is _i_ in the group, `gtxn i field` is equivalent to `txn field`. 475 | 476 | ## load 477 | 478 | - Syntax: `load I` where I: position in scratch space to load from 479 | - Bytecode: 0x34 {uint8} 480 | - Stack: ... → ..., any 481 | - Ith scratch space value. All scratch spaces are 0 at program start. 482 | 483 | ## store 484 | 485 | - Syntax: `store I` where I: position in scratch space to store to 486 | - Bytecode: 0x35 {uint8} 487 | - Stack: ..., A → ... 488 | - store A to the Ith scratch space 489 | 490 | ## txna 491 | 492 | - Syntax: `txna F I` where F: [txna](#field-group-txna), I: transaction field array index 493 | - Bytecode: 0x36 {uint8}, {uint8} 494 | - Stack: ... → ..., any 495 | - Ith value of the array field F of the current transaction<br />`txna` can be called using `txn` with 2 immediates. 496 | - Availability: v2 497 | 498 | ### txna 499 | 500 | Fields (see [transaction reference](https://developer.algorand.org/docs/reference/transactions/)) 501 | 502 | | Index | Name | Type | In | Notes | 503 | | - | ------ | -- | - | --------- | 504 | | 26 | ApplicationArgs | []byte | v2 | Arguments passed to the application in the ApplicationCall transaction | 505 | | 28 | Accounts | address | v2 | Accounts listed in the ApplicationCall transaction | 506 | | 48 | Assets | uint64 | v3 | Foreign Assets listed in the ApplicationCall transaction | 507 | | 50 | Applications | uint64 | v3 | Foreign Apps listed in the ApplicationCall transaction | 508 | | 58 | Logs | []byte | v5 | Log messages emitted by an application call (only with `itxn` in v5). Application mode only | 509 | | 64 | ApprovalProgramPages | []byte | v7 | Approval Program as an array of pages | 510 | | 66 | ClearStateProgramPages | []byte | v7 | ClearState Program as an array of pages | 511 | 512 | 513 | ## gtxna 514 | 515 | - Syntax: `gtxna T F I` where T: transaction group index, F: [txna](#field-group-txna), I: transaction field array index 516 | - Bytecode: 0x37 {uint8}, {uint8}, {uint8} 517 | - Stack: ... → ..., any 518 | - 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. 519 | - Availability: v2 520 | 521 | ## gtxns 522 | 523 | - Syntax: `gtxns F` where F: [txn](#field-group-txn) 524 | - Bytecode: 0x38 {uint8} 525 | - Stack: ..., A: uint64 → ..., any 526 | - field F of the Ath transaction in the current group 527 | - Availability: v3 528 | 529 | 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. 530 | 531 | ## gtxnsa 532 | 533 | - Syntax: `gtxnsa F I` where F: [txna](#field-group-txna), I: transaction field array index 534 | - Bytecode: 0x39 {uint8}, {uint8} 535 | - Stack: ..., A: uint64 → ..., any 536 | - 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. 537 | - Availability: v3 538 | 539 | ## gload 540 | 541 | - Syntax: `gload T I` where T: transaction group index, I: position in scratch space to load from 542 | - Bytecode: 0x3a {uint8}, {uint8} 543 | - Stack: ... → ..., any 544 | - Ith scratch space value of the Tth transaction in the current group 545 | - Availability: v4 546 | - Mode: Application 547 | 548 | `gload` fails unless the requested transaction is an ApplicationCall and T < GroupIndex. 549 | 550 | ## gloads 551 | 552 | - Syntax: `gloads I` where I: position in scratch space to load from 553 | - Bytecode: 0x3b {uint8} 554 | - Stack: ..., A: uint64 → ..., any 555 | - Ith scratch space value of the Ath transaction in the current group 556 | - Availability: v4 557 | - Mode: Application 558 | 559 | `gloads` fails unless the requested transaction is an ApplicationCall and A < GroupIndex. 560 | 561 | ## gaid 562 | 563 | - Syntax: `gaid T` where T: transaction group index 564 | - Bytecode: 0x3c {uint8} 565 | - Stack: ... → ..., uint64 566 | - ID of the asset or application created in the Tth transaction of the current group 567 | - Availability: v4 568 | - Mode: Application 569 | 570 | `gaid` fails unless the requested transaction created an asset or application and T < GroupIndex. 571 | 572 | ## gaids 573 | 574 | - Bytecode: 0x3d 575 | - Stack: ..., A: uint64 → ..., uint64 576 | - ID of the asset or application created in the Ath transaction of the current group 577 | - Availability: v4 578 | - Mode: Application 579 | 580 | `gaids` fails unless the requested transaction created an asset or application and A < GroupIndex. 581 | 582 | ## loads 583 | 584 | - Bytecode: 0x3e 585 | - Stack: ..., A: uint64 → ..., any 586 | - Ath scratch space value. All scratch spaces are 0 at program start. 587 | - Availability: v5 588 | 589 | ## stores 590 | 591 | - Bytecode: 0x3f 592 | - Stack: ..., A: uint64, B → ... 593 | - store B to the Ath scratch space 594 | - Availability: v5 595 | 596 | ## bnz 597 | 598 | - Syntax: `bnz TARGET` where TARGET: branch offset 599 | - Bytecode: 0x40 {int16 (big-endian)} 600 | - Stack: ..., A: uint64 → ... 601 | - branch to TARGET if value A is not zero 602 | 603 | 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. 604 | 605 | 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.) 606 | 607 | ## bz 608 | 609 | - Syntax: `bz TARGET` where TARGET: branch offset 610 | - Bytecode: 0x41 {int16 (big-endian)} 611 | - Stack: ..., A: uint64 → ... 612 | - branch to TARGET if value A is zero 613 | - Availability: v2 614 | 615 | See `bnz` for details on how branches work. `bz` inverts the behavior of `bnz`. 616 | 617 | ## b 618 | 619 | - Syntax: `b TARGET` where TARGET: branch offset 620 | - Bytecode: 0x42 {int16 (big-endian)} 621 | - Stack: ... → ... 622 | - branch unconditionally to TARGET 623 | - Availability: v2 624 | 625 | See `bnz` for details on how branches work. `b` always jumps to the offset. 626 | 627 | ## return 628 | 629 | - Bytecode: 0x43 630 | - Stack: ..., A: uint64 → _exits_ 631 | - use A as success value; end 632 | - Availability: v2 633 | 634 | ## assert 635 | 636 | - Bytecode: 0x44 637 | - Stack: ..., A: uint64 → ... 638 | - immediately fail unless A is a non-zero number 639 | - Availability: v3 640 | 641 | ## bury 642 | 643 | - Syntax: `bury N` where N: depth 644 | - Bytecode: 0x45 {uint8} 645 | - Stack: ..., A → ... 646 | - replace the Nth value from the top of the stack with A. bury 0 fails. 647 | - Availability: v8 648 | 649 | ## popn 650 | 651 | - Syntax: `popn N` where N: stack depth 652 | - Bytecode: 0x46 {uint8} 653 | - Stack: ..., [N items] → ... 654 | - remove N values from the top of the stack 655 | - Availability: v8 656 | 657 | ## dupn 658 | 659 | - Syntax: `dupn N` where N: copy count 660 | - Bytecode: 0x47 {uint8} 661 | - Stack: ..., A → ..., A, [N copies of A] 662 | - duplicate A, N times 663 | - Availability: v8 664 | 665 | ## pop 666 | 667 | - Bytecode: 0x48 668 | - Stack: ..., A → ... 669 | - discard A 670 | 671 | ## dup 672 | 673 | - Bytecode: 0x49 674 | - Stack: ..., A → ..., A, A 675 | - duplicate A 676 | 677 | ## dup2 678 | 679 | - Bytecode: 0x4a 680 | - Stack: ..., A, B → ..., A, B, A, B 681 | - duplicate A and B 682 | - Availability: v2 683 | 684 | ## dig 685 | 686 | - Syntax: `dig N` where N: depth 687 | - Bytecode: 0x4b {uint8} 688 | - Stack: ..., A, [N items] → ..., A, [N items], A 689 | - Nth value from the top of the stack. dig 0 is equivalent to dup 690 | - Availability: v3 691 | 692 | ## swap 693 | 694 | - Bytecode: 0x4c 695 | - Stack: ..., A, B → ..., B, A 696 | - swaps A and B on stack 697 | - Availability: v3 698 | 699 | ## select 700 | 701 | - Bytecode: 0x4d 702 | - Stack: ..., A, B, C: uint64 → ..., A or B 703 | - selects one of two values based on top-of-stack: B if C != 0, else A 704 | - Availability: v3 705 | 706 | ## cover 707 | 708 | - Syntax: `cover N` where N: depth 709 | - Bytecode: 0x4e {uint8} 710 | - Stack: ..., [N items], A → ..., A, [N items] 711 | - remove top of stack, and place it deeper in the stack such that N elements are above it. Fails if stack depth <= N. 712 | - Availability: v5 713 | 714 | ## uncover 715 | 716 | - Syntax: `uncover N` where N: depth 717 | - Bytecode: 0x4f {uint8} 718 | - Stack: ..., A, [N items] → ..., [N items], A 719 | - 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. 720 | - Availability: v5 721 | 722 | ## concat 723 | 724 | - Bytecode: 0x50 725 | - Stack: ..., A: []byte, B: []byte → ..., []byte 726 | - join A and B 727 | - Availability: v2 728 | 729 | `concat` fails if the result would be greater than 4096 bytes. 730 | 731 | ## substring 732 | 733 | - Syntax: `substring S E` where S: start position, E: end position 734 | - Bytecode: 0x51 {uint8}, {uint8} 735 | - Stack: ..., A: []byte → ..., []byte 736 | - 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 737 | - Availability: v2 738 | 739 | ## substring3 740 | 741 | - Bytecode: 0x52 742 | - Stack: ..., A: []byte, B: uint64, C: uint64 → ..., []byte 743 | - 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 744 | - Availability: v2 745 | 746 | ## getbit 747 | 748 | - Bytecode: 0x53 749 | - Stack: ..., A, B: uint64 → ..., uint64 750 | - 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 751 | - Availability: v3 752 | 753 | see explanation of bit ordering in setbit 754 | 755 | ## setbit 756 | 757 | - Bytecode: 0x54 758 | - Stack: ..., A, B: uint64, C: uint64 → ..., any 759 | - 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 760 | - Availability: v3 761 | 762 | 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. 763 | 764 | ## getbyte 765 | 766 | - Bytecode: 0x55 767 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 768 | - Bth byte of A, as an integer. If B is greater than or equal to the array length, the program fails 769 | - Availability: v3 770 | 771 | ## setbyte 772 | 773 | - Bytecode: 0x56 774 | - Stack: ..., A: []byte, B: uint64, C: uint64 → ..., []byte 775 | - 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 776 | - Availability: v3 777 | 778 | ## extract 779 | 780 | - Syntax: `extract S L` where S: start position, L: length 781 | - Bytecode: 0x57 {uint8}, {uint8} 782 | - Stack: ..., A: []byte → ..., []byte 783 | - 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 784 | - Availability: v5 785 | 786 | ## extract3 787 | 788 | - Bytecode: 0x58 789 | - Stack: ..., A: []byte, B: uint64, C: uint64 → ..., []byte 790 | - 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. 791 | - Availability: v5 792 | 793 | ## extract_uint16 794 | 795 | - Bytecode: 0x59 796 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 797 | - 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 798 | - Availability: v5 799 | 800 | ## extract_uint32 801 | 802 | - Bytecode: 0x5a 803 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 804 | - 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 805 | - Availability: v5 806 | 807 | ## extract_uint64 808 | 809 | - Bytecode: 0x5b 810 | - Stack: ..., A: []byte, B: uint64 → ..., uint64 811 | - 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 812 | - Availability: v5 813 | 814 | ## replace2 815 | 816 | - Syntax: `replace2 S` where S: start position 817 | - Bytecode: 0x5c {uint8} 818 | - Stack: ..., A: []byte, B: []byte → ..., []byte 819 | - 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. 820 | - Availability: v7 821 | 822 | ## replace3 823 | 824 | - Bytecode: 0x5d 825 | - Stack: ..., A: []byte, B: uint64, C: []byte → ..., []byte 826 | - 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. 827 | - Availability: v7 828 | 829 | ## base64_decode 830 | 831 | - Syntax: `base64_decode E` where E: [base64](#field-group-base64) 832 | - Bytecode: 0x5e {uint8} 833 | - Stack: ..., A: []byte → ..., []byte 834 | - decode A which was base64-encoded using _encoding_ E. Fail if A is not base64 encoded with encoding E 835 | - **Cost**: 1 + 1 per 16 bytes of A 836 | - Availability: v7 837 | 838 | ### base64 839 | 840 | Encodings 841 | 842 | | Index | Name | Notes | 843 | | - | ------ | --------- | 844 | | 0 | URLEncoding | | 845 | | 1 | StdEncoding | | 846 | 847 | 848 | *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. 849 | 850 | 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`. 851 | 852 | ## json_ref 853 | 854 | - Syntax: `json_ref R` where R: [json_ref](#field-group-json_ref) 855 | - Bytecode: 0x5f {uint8} 856 | - Stack: ..., A: []byte, B: []byte → ..., any 857 | - key B's value, of type R, from a [valid](../jsonspec.md) utf-8 encoded json object A 858 | - **Cost**: 25 + 2 per 7 bytes of A 859 | - Availability: v7 860 | 861 | ### json_ref 862 | 863 | Types 864 | 865 | | Index | Name | Type | Notes | 866 | | - | ------ | -- | --------- | 867 | | 0 | JSONString | []byte | | 868 | | 1 | JSONUint64 | uint64 | | 869 | | 2 | JSONObject | []byte | | 870 | 871 | 872 | *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. 873 | 874 | 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. 875 | 876 | ## balance 877 | 878 | - Bytecode: 0x60 879 | - Stack: ..., A → ..., uint64 880 | - 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` 881 | - Availability: v2 882 | - Mode: Application 883 | 884 | params: Txn.Accounts offset (or, since v4, an _available_ account address), _available_ application id (or, since v4, a Txn.ForeignApps offset). Return: value. 885 | 886 | ## app_opted_in 887 | 888 | - Bytecode: 0x61 889 | - Stack: ..., A, B: uint64 → ..., bool 890 | - 1 if account A is opted in to application B, else 0 891 | - Availability: v2 892 | - Mode: Application 893 | 894 | 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. 895 | 896 | ## app_local_get 897 | 898 | - Bytecode: 0x62 899 | - Stack: ..., A, B: stateKey → ..., any 900 | - local state of the key B in the current application in account A 901 | - Availability: v2 902 | - Mode: Application 903 | 904 | 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. 905 | 906 | ## app_local_get_ex 907 | 908 | - Bytecode: 0x63 909 | - Stack: ..., A, B: uint64, C: stateKey → ..., X: any, Y: bool 910 | - X is the local state of application B, key C in account A. Y is 1 if key existed, else 0 911 | - Availability: v2 912 | - Mode: Application 913 | 914 | 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. 915 | 916 | ## app_global_get 917 | 918 | - Bytecode: 0x64 919 | - Stack: ..., A: stateKey → ..., any 920 | - global state of the key A in the current application 921 | - Availability: v2 922 | - Mode: Application 923 | 924 | params: state key. Return: value. The value is zero (of type uint64) if the key does not exist. 925 | 926 | ## app_global_get_ex 927 | 928 | - Bytecode: 0x65 929 | - Stack: ..., A: uint64, B: stateKey → ..., X: any, Y: bool 930 | - X is the global state of application A, key B. Y is 1 if key existed, else 0 931 | - Availability: v2 932 | - Mode: Application 933 | 934 | 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. 935 | 936 | ## app_local_put 937 | 938 | - Bytecode: 0x66 939 | - Stack: ..., A, B: stateKey, C → ... 940 | - write C to key B in account A's local state of the current application 941 | - Availability: v2 942 | - Mode: Application 943 | 944 | params: Txn.Accounts offset (or, since v4, an _available_ account address), state key, value. 945 | 946 | ## app_global_put 947 | 948 | - Bytecode: 0x67 949 | - Stack: ..., A: stateKey, B → ... 950 | - write B to key A in the global state of the current application 951 | - Availability: v2 952 | - Mode: Application 953 | 954 | ## app_local_del 955 | 956 | - Bytecode: 0x68 957 | - Stack: ..., A, B: stateKey → ... 958 | - delete key B from account A's local state of the current application 959 | - Availability: v2 960 | - Mode: Application 961 | 962 | params: Txn.Accounts offset (or, since v4, an _available_ account address), state key. 963 | 964 | 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.) 965 | 966 | ## app_global_del 967 | 968 | - Bytecode: 0x69 969 | - Stack: ..., A: stateKey → ... 970 | - delete key A from the global state of the current application 971 | - Availability: v2 972 | - Mode: Application 973 | 974 | params: state key. 975 | 976 | 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.) 977 | 978 | ## asset_holding_get 979 | 980 | - Syntax: `asset_holding_get F` where F: [asset_holding](#field-group-asset_holding) 981 | - Bytecode: 0x70 {uint8} 982 | - Stack: ..., A, B: uint64 → ..., X: any, Y: bool 983 | - X is field F from account A's holding of asset B. Y is 1 if A is opted into B, else 0 984 | - Availability: v2 985 | - Mode: Application 986 | 987 | ### asset_holding 988 | 989 | Fields 990 | 991 | | Index | Name | Type | Notes | 992 | | - | ------ | -- | --------- | 993 | | 0 | AssetBalance | uint64 | Amount of the asset unit held by this account | 994 | | 1 | AssetFrozen | bool | Is the asset frozen or not | 995 | 996 | 997 | 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. 998 | 999 | ## asset_params_get 1000 | 1001 | - Syntax: `asset_params_get F` where F: [asset_params](#field-group-asset_params) 1002 | - Bytecode: 0x71 {uint8} 1003 | - Stack: ..., A: uint64 → ..., X: any, Y: bool 1004 | - X is field F from asset A. Y is 1 if A exists, else 0 1005 | - Availability: v2 1006 | - Mode: Application 1007 | 1008 | ### asset_params 1009 | 1010 | Fields 1011 | 1012 | | Index | Name | Type | In | Notes | 1013 | | - | ------ | -- | - | --------- | 1014 | | 0 | AssetTotal | uint64 | | Total number of units of this asset | 1015 | | 1 | AssetDecimals | uint64 | | See AssetParams.Decimals | 1016 | | 2 | AssetDefaultFrozen | bool | | Frozen by default or not | 1017 | | 3 | AssetUnitName | []byte | | Asset unit name | 1018 | | 4 | AssetName | []byte | | Asset name | 1019 | | 5 | AssetURL | []byte | | URL with additional info about the asset | 1020 | | 6 | AssetMetadataHash | [32]byte | | Arbitrary commitment | 1021 | | 7 | AssetManager | address | | Manager address | 1022 | | 8 | AssetReserve | address | | Reserve address | 1023 | | 9 | AssetFreeze | address | | Freeze address | 1024 | | 10 | AssetClawback | address | | Clawback address | 1025 | | 11 | AssetCreator | address | v5 | Creator address | 1026 | 1027 | 1028 | params: Txn.ForeignAssets offset (or, since v4, an _available_ asset id. Return: did_exist flag (1 if the asset existed and 0 otherwise), value. 1029 | 1030 | ## app_params_get 1031 | 1032 | - Syntax: `app_params_get F` where F: [app_params](#field-group-app_params) 1033 | - Bytecode: 0x72 {uint8} 1034 | - Stack: ..., A: uint64 → ..., X: any, Y: bool 1035 | - X is field F from app A. Y is 1 if A exists, else 0 1036 | - Availability: v5 1037 | - Mode: Application 1038 | 1039 | ### app_params 1040 | 1041 | Fields 1042 | 1043 | | Index | Name | Type | Notes | 1044 | | - | ------ | -- | --------- | 1045 | | 0 | AppApprovalProgram | []byte | Bytecode of Approval Program | 1046 | | 1 | AppClearStateProgram | []byte | Bytecode of Clear State Program | 1047 | | 2 | AppGlobalNumUint | uint64 | Number of uint64 values allowed in Global State | 1048 | | 3 | AppGlobalNumByteSlice | uint64 | Number of byte array values allowed in Global State | 1049 | | 4 | AppLocalNumUint | uint64 | Number of uint64 values allowed in Local State | 1050 | | 5 | AppLocalNumByteSlice | uint64 | Number of byte array values allowed in Local State | 1051 | | 6 | AppExtraProgramPages | uint64 | Number of Extra Program Pages of code space | 1052 | | 7 | AppCreator | address | Creator address | 1053 | | 8 | AppAddress | address | Address for which this application has authority | 1054 | 1055 | 1056 | params: Txn.ForeignApps offset or an _available_ app id. Return: did_exist flag (1 if the application existed and 0 otherwise), value. 1057 | 1058 | ## acct_params_get 1059 | 1060 | - Syntax: `acct_params_get F` where F: [acct_params](#field-group-acct_params) 1061 | - Bytecode: 0x73 {uint8} 1062 | - Stack: ..., A → ..., X: any, Y: bool 1063 | - X is field F from account A. Y is 1 if A owns positive algos, else 0 1064 | - Availability: v6 1065 | - Mode: Application 1066 | 1067 | ### acct_params 1068 | 1069 | Fields 1070 | 1071 | | Index | Name | Type | In | Notes | 1072 | | - | ------ | -- | - | --------- | 1073 | | 0 | AcctBalance | uint64 | | Account balance in microalgos | 1074 | | 1 | AcctMinBalance | uint64 | | Minimum required balance for account, in microalgos | 1075 | | 2 | AcctAuthAddr | address | | Address the account is rekeyed to. | 1076 | | 3 | AcctTotalNumUint | uint64 | v8 | The total number of uint64 values allocated by this account in Global and Local States. | 1077 | | 4 | AcctTotalNumByteSlice | uint64 | v8 | The total number of byte array values allocated by this account in Global and Local States. | 1078 | | 5 | AcctTotalExtraAppPages | uint64 | v8 | The number of extra app code pages used by this account. | 1079 | | 6 | AcctTotalAppsCreated | uint64 | v8 | The number of existing apps created by this account. | 1080 | | 7 | AcctTotalAppsOptedIn | uint64 | v8 | The number of apps this account is opted into. | 1081 | | 8 | AcctTotalAssetsCreated | uint64 | v8 | The number of existing ASAs created by this account. | 1082 | | 9 | AcctTotalAssets | uint64 | v8 | The numbers of ASAs held by this account (including ASAs this account created). | 1083 | | 10 | AcctTotalBoxes | uint64 | v8 | The number of existing boxes created by this account's app. | 1084 | | 11 | AcctTotalBoxBytes | uint64 | v8 | The total number of bytes used by this account's app's box keys and values. | 1085 | 1086 | 1087 | ## min_balance 1088 | 1089 | - Bytecode: 0x78 1090 | - Stack: ..., A → ..., uint64 1091 | - 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. 1092 | - Availability: v3 1093 | - Mode: Application 1094 | 1095 | params: Txn.Accounts offset (or, since v4, an _available_ account address), _available_ application id (or, since v4, a Txn.ForeignApps offset). Return: value. 1096 | 1097 | ## pushbytes 1098 | 1099 | - Syntax: `pushbytes BYTES` where BYTES: a byte constant 1100 | - Bytecode: 0x80 {varuint length, bytes} 1101 | - Stack: ... → ..., []byte 1102 | - immediate BYTES 1103 | - Availability: v3 1104 | 1105 | pushbytes args are not added to the bytecblock during assembly processes 1106 | 1107 | ## pushint 1108 | 1109 | - Syntax: `pushint UINT` where UINT: an int constant 1110 | - Bytecode: 0x81 {varuint} 1111 | - Stack: ... → ..., uint64 1112 | - immediate UINT 1113 | - Availability: v3 1114 | 1115 | pushint args are not added to the intcblock during assembly processes 1116 | 1117 | ## pushbytess 1118 | 1119 | - Syntax: `pushbytess BYTES ...` where BYTES ...: a list of byte constants 1120 | - Bytecode: 0x82 {varuint count, [varuint length, bytes ...]} 1121 | - Stack: ... → ..., [N items] 1122 | - push sequences of immediate byte arrays to stack (first byte array being deepest) 1123 | - Availability: v8 1124 | 1125 | pushbytess args are not added to the bytecblock during assembly processes 1126 | 1127 | ## pushints 1128 | 1129 | - Syntax: `pushints UINT ...` where UINT ...: a list of int constants 1130 | - Bytecode: 0x83 {varuint count, [varuint ...]} 1131 | - Stack: ... → ..., [N items] 1132 | - push sequence of immediate uints to stack in the order they appear (first uint being deepest) 1133 | - Availability: v8 1134 | 1135 | pushints args are not added to the intcblock during assembly processes 1136 | 1137 | ## ed25519verify_bare 1138 | 1139 | - Bytecode: 0x84 1140 | - Stack: ..., A: []byte, B: [64]byte, C: [32]byte → ..., bool 1141 | - for (data A, signature B, pubkey C) verify the signature of the data against the pubkey => {0 or 1} 1142 | - **Cost**: 1900 1143 | - Availability: v7 1144 | 1145 | ## callsub 1146 | 1147 | - Syntax: `callsub TARGET` where TARGET: branch offset 1148 | - Bytecode: 0x88 {int16 (big-endian)} 1149 | - Stack: ... → ... 1150 | - branch unconditionally to TARGET, saving the next instruction on the call stack 1151 | - Availability: v4 1152 | 1153 | The call stack is separate from the data stack. Only `callsub`, `retsub`, and `proto` manipulate it. 1154 | 1155 | ## retsub 1156 | 1157 | - Bytecode: 0x89 1158 | - Stack: ... → ... 1159 | - pop the top instruction from the call stack and branch to it 1160 | - Availability: v4 1161 | 1162 | 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. 1163 | 1164 | ## proto 1165 | 1166 | - Syntax: `proto A R` where A: number of arguments, R: number of return values 1167 | - Bytecode: 0x8a {uint8}, {uint8} 1168 | - Stack: ... → ... 1169 | - Prepare top call frame for a retsub that will assume A args and R return values. 1170 | - Availability: v8 1171 | 1172 | Fails unless the last instruction executed was a `callsub`. 1173 | 1174 | ## frame_dig 1175 | 1176 | - Syntax: `frame_dig I` where I: frame slot 1177 | - Bytecode: 0x8b {int8} 1178 | - Stack: ... → ..., any 1179 | - Nth (signed) value from the frame pointer. 1180 | - Availability: v8 1181 | 1182 | ## frame_bury 1183 | 1184 | - Syntax: `frame_bury I` where I: frame slot 1185 | - Bytecode: 0x8c {int8} 1186 | - Stack: ..., A → ... 1187 | - replace the Nth (signed) value from the frame pointer in the stack with A 1188 | - Availability: v8 1189 | 1190 | ## switch 1191 | 1192 | - Syntax: `switch TARGET ...` where TARGET ...: list of labels 1193 | - Bytecode: 0x8d {varuint count, [int16 (big-endian) ...]} 1194 | - Stack: ..., A: uint64 → ... 1195 | - branch to the Ath label. Continue at following instruction if index A exceeds the number of labels. 1196 | - Availability: v8 1197 | 1198 | ## match 1199 | 1200 | - Syntax: `match TARGET ...` where TARGET ...: list of labels 1201 | - Bytecode: 0x8e {varuint count, [int16 (big-endian) ...]} 1202 | - Stack: ..., [A1, A2, ..., AN], B → ... 1203 | - 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. 1204 | - Availability: v8 1205 | 1206 | `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. 1207 | 1208 | ## shl 1209 | 1210 | - Bytecode: 0x90 1211 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 1212 | - A times 2^B, modulo 2^64 1213 | - Availability: v4 1214 | 1215 | ## shr 1216 | 1217 | - Bytecode: 0x91 1218 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 1219 | - A divided by 2^B 1220 | - Availability: v4 1221 | 1222 | ## sqrt 1223 | 1224 | - Bytecode: 0x92 1225 | - Stack: ..., A: uint64 → ..., uint64 1226 | - The largest integer I such that I^2 <= A 1227 | - **Cost**: 4 1228 | - Availability: v4 1229 | 1230 | ## bitlen 1231 | 1232 | - Bytecode: 0x93 1233 | - Stack: ..., A → ..., uint64 1234 | - 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 1235 | - Availability: v4 1236 | 1237 | bitlen interprets arrays as big-endian integers, unlike setbit/getbit 1238 | 1239 | ## exp 1240 | 1241 | - Bytecode: 0x94 1242 | - Stack: ..., A: uint64, B: uint64 → ..., uint64 1243 | - A raised to the Bth power. Fail if A == B == 0 and on overflow 1244 | - Availability: v4 1245 | 1246 | ## expw 1247 | 1248 | - Bytecode: 0x95 1249 | - Stack: ..., A: uint64, B: uint64 → ..., X: uint64, Y: uint64 1250 | - 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 1251 | - **Cost**: 10 1252 | - Availability: v4 1253 | 1254 | ## bsqrt 1255 | 1256 | - Bytecode: 0x96 1257 | - Stack: ..., A: bigint → ..., bigint 1258 | - The largest integer I such that I^2 <= A. A and I are interpreted as big-endian unsigned integers 1259 | - **Cost**: 40 1260 | - Availability: v6 1261 | 1262 | ## divw 1263 | 1264 | - Bytecode: 0x97 1265 | - Stack: ..., A: uint64, B: uint64, C: uint64 → ..., uint64 1266 | - A,B / C. Fail if C == 0 or if result overflows. 1267 | - Availability: v6 1268 | 1269 | 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. 1270 | 1271 | ## sha3_256 1272 | 1273 | - Bytecode: 0x98 1274 | - Stack: ..., A: []byte → ..., [32]byte 1275 | - SHA3_256 hash of value A, yields [32]byte 1276 | - **Cost**: 130 1277 | - Availability: v7 1278 | 1279 | ## b+ 1280 | 1281 | - Bytecode: 0xa0 1282 | - Stack: ..., A: bigint, B: bigint → ..., []byte 1283 | - A plus B. A and B are interpreted as big-endian unsigned integers 1284 | - **Cost**: 10 1285 | - Availability: v4 1286 | 1287 | ## b- 1288 | 1289 | - Bytecode: 0xa1 1290 | - Stack: ..., A: bigint, B: bigint → ..., bigint 1291 | - A minus B. A and B are interpreted as big-endian unsigned integers. Fail on underflow. 1292 | - **Cost**: 10 1293 | - Availability: v4 1294 | 1295 | ## b/ 1296 | 1297 | - Bytecode: 0xa2 1298 | - Stack: ..., A: bigint, B: bigint → ..., bigint 1299 | - A divided by B (truncated division). A and B are interpreted as big-endian unsigned integers. Fail if B is zero. 1300 | - **Cost**: 20 1301 | - Availability: v4 1302 | 1303 | ## b* 1304 | 1305 | - Bytecode: 0xa3 1306 | - Stack: ..., A: bigint, B: bigint → ..., []byte 1307 | - A times B. A and B are interpreted as big-endian unsigned integers. 1308 | - **Cost**: 20 1309 | - Availability: v4 1310 | 1311 | ## b< 1312 | 1313 | - Bytecode: 0xa4 1314 | - Stack: ..., A: bigint, B: bigint → ..., bool 1315 | - 1 if A is less than B, else 0. A and B are interpreted as big-endian unsigned integers 1316 | - Availability: v4 1317 | 1318 | ## b> 1319 | 1320 | - Bytecode: 0xa5 1321 | - Stack: ..., A: bigint, B: bigint → ..., bool 1322 | - 1 if A is greater than B, else 0. A and B are interpreted as big-endian unsigned integers 1323 | - Availability: v4 1324 | 1325 | ## b<= 1326 | 1327 | - Bytecode: 0xa6 1328 | - Stack: ..., A: bigint, B: bigint → ..., bool 1329 | - 1 if A is less than or equal to B, else 0. A and B are interpreted as big-endian unsigned integers 1330 | - Availability: v4 1331 | 1332 | ## b>= 1333 | 1334 | - Bytecode: 0xa7 1335 | - Stack: ..., A: bigint, B: bigint → ..., bool 1336 | - 1 if A is greater than or equal to B, else 0. A and B are interpreted as big-endian unsigned integers 1337 | - Availability: v4 1338 | 1339 | ## b== 1340 | 1341 | - Bytecode: 0xa8 1342 | - Stack: ..., A: bigint, B: bigint → ..., bool 1343 | - 1 if A is equal to B, else 0. A and B are interpreted as big-endian unsigned integers 1344 | - Availability: v4 1345 | 1346 | ## b!= 1347 | 1348 | - Bytecode: 0xa9 1349 | - Stack: ..., A: bigint, B: bigint → ..., bool 1350 | - 0 if A is equal to B, else 1. A and B are interpreted as big-endian unsigned integers 1351 | - Availability: v4 1352 | 1353 | ## b% 1354 | 1355 | - Bytecode: 0xaa 1356 | - Stack: ..., A: bigint, B: bigint → ..., bigint 1357 | - A modulo B. A and B are interpreted as big-endian unsigned integers. Fail if B is zero. 1358 | - **Cost**: 20 1359 | - Availability: v4 1360 | 1361 | ## b| 1362 | 1363 | - Bytecode: 0xab 1364 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1365 | - A bitwise-or B. A and B are zero-left extended to the greater of their lengths 1366 | - **Cost**: 6 1367 | - Availability: v4 1368 | 1369 | ## b& 1370 | 1371 | - Bytecode: 0xac 1372 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1373 | - A bitwise-and B. A and B are zero-left extended to the greater of their lengths 1374 | - **Cost**: 6 1375 | - Availability: v4 1376 | 1377 | ## b^ 1378 | 1379 | - Bytecode: 0xad 1380 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1381 | - A bitwise-xor B. A and B are zero-left extended to the greater of their lengths 1382 | - **Cost**: 6 1383 | - Availability: v4 1384 | 1385 | ## b~ 1386 | 1387 | - Bytecode: 0xae 1388 | - Stack: ..., A: []byte → ..., []byte 1389 | - A with all bits inverted 1390 | - **Cost**: 4 1391 | - Availability: v4 1392 | 1393 | ## bzero 1394 | 1395 | - Bytecode: 0xaf 1396 | - Stack: ..., A: uint64 → ..., []byte 1397 | - zero filled byte-array of length A 1398 | - Availability: v4 1399 | 1400 | ## log 1401 | 1402 | - Bytecode: 0xb0 1403 | - Stack: ..., A: []byte → ... 1404 | - write A to log state of the current application 1405 | - Availability: v5 1406 | - Mode: Application 1407 | 1408 | `log` fails if called more than MaxLogCalls times in a program, or if the sum of logged bytes exceeds 1024 bytes. 1409 | 1410 | ## itxn_begin 1411 | 1412 | - Bytecode: 0xb1 1413 | - Stack: ... → ... 1414 | - begin preparation of a new inner transaction in a new transaction group 1415 | - Availability: v5 1416 | - Mode: Application 1417 | 1418 | `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. 1419 | 1420 | ## itxn_field 1421 | 1422 | - Syntax: `itxn_field F` where F: [txn](#field-group-txn) 1423 | - Bytecode: 0xb2 {uint8} 1424 | - Stack: ..., A → ... 1425 | - set field F of the current inner transaction to A 1426 | - Availability: v5 1427 | - Mode: Application 1428 | 1429 | `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_.) 1430 | 1431 | ## itxn_submit 1432 | 1433 | - Bytecode: 0xb3 1434 | - Stack: ... → ... 1435 | - 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. 1436 | - Availability: v5 1437 | - Mode: Application 1438 | 1439 | `itxn_submit` resets the current transaction so that it can not be resubmitted. A new `itxn_begin` is required to prepare another inner transaction. 1440 | 1441 | ## itxn 1442 | 1443 | - Syntax: `itxn F` where F: [txn](#field-group-txn) 1444 | - Bytecode: 0xb4 {uint8} 1445 | - Stack: ... → ..., any 1446 | - field F of the last inner transaction 1447 | - Availability: v5 1448 | - Mode: Application 1449 | 1450 | ## itxna 1451 | 1452 | - Syntax: `itxna F I` where F: [txna](#field-group-txna), I: a transaction field array index 1453 | - Bytecode: 0xb5 {uint8}, {uint8} 1454 | - Stack: ... → ..., any 1455 | - Ith value of the array field F of the last inner transaction 1456 | - Availability: v5 1457 | - Mode: Application 1458 | 1459 | ## itxn_next 1460 | 1461 | - Bytecode: 0xb6 1462 | - Stack: ... → ... 1463 | - begin preparation of a new inner transaction in the same transaction group 1464 | - Availability: v6 1465 | - Mode: Application 1466 | 1467 | `itxn_next` initializes the transaction exactly as `itxn_begin` does 1468 | 1469 | ## gitxn 1470 | 1471 | - Syntax: `gitxn T F` where T: transaction group index, F: [txn](#field-group-txn) 1472 | - Bytecode: 0xb7 {uint8}, {uint8} 1473 | - Stack: ... → ..., any 1474 | - field F of the Tth transaction in the last inner group submitted 1475 | - Availability: v6 1476 | - Mode: Application 1477 | 1478 | ## gitxna 1479 | 1480 | - Syntax: `gitxna T F I` where T: transaction group index, F: [txna](#field-group-txna), I: transaction field array index 1481 | - Bytecode: 0xb8 {uint8}, {uint8}, {uint8} 1482 | - Stack: ... → ..., any 1483 | - Ith value of the array field F from the Tth transaction in the last inner group submitted 1484 | - Availability: v6 1485 | - Mode: Application 1486 | 1487 | ## box_create 1488 | 1489 | - Bytecode: 0xb9 1490 | - Stack: ..., A: boxName, B: uint64 → ..., bool 1491 | - 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 1492 | - Availability: v8 1493 | - Mode: Application 1494 | 1495 | 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`. 1496 | 1497 | ## box_extract 1498 | 1499 | - Bytecode: 0xba 1500 | - Stack: ..., A: boxName, B: uint64, C: uint64 → ..., []byte 1501 | - 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. 1502 | - Availability: v8 1503 | - Mode: Application 1504 | 1505 | ## box_replace 1506 | 1507 | - Bytecode: 0xbb 1508 | - Stack: ..., A: boxName, B: uint64, C: []byte → ... 1509 | - 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. 1510 | - Availability: v8 1511 | - Mode: Application 1512 | 1513 | ## box_del 1514 | 1515 | - Bytecode: 0xbc 1516 | - Stack: ..., A: boxName → ..., bool 1517 | - delete box named A if it exists. Return 1 if A existed, 0 otherwise 1518 | - Availability: v8 1519 | - Mode: Application 1520 | 1521 | ## box_len 1522 | 1523 | - Bytecode: 0xbd 1524 | - Stack: ..., A: boxName → ..., X: uint64, Y: bool 1525 | - X is the length of box A if A exists, else 0. Y is 1 if A exists, else 0. 1526 | - Availability: v8 1527 | - Mode: Application 1528 | 1529 | ## box_get 1530 | 1531 | - Bytecode: 0xbe 1532 | - Stack: ..., A: boxName → ..., X: []byte, Y: bool 1533 | - X is the contents of box A if A exists, else ''. Y is 1 if A exists, else 0. 1534 | - Availability: v8 1535 | - Mode: Application 1536 | 1537 | For boxes that exceed 4,096 bytes, consider `box_create`, `box_extract`, and `box_replace` 1538 | 1539 | ## box_put 1540 | 1541 | - Bytecode: 0xbf 1542 | - Stack: ..., A: boxName, B: []byte → ... 1543 | - 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 1544 | - Availability: v8 1545 | - Mode: Application 1546 | 1547 | For boxes that exceed 4,096 bytes, consider `box_create`, `box_extract`, and `box_replace` 1548 | 1549 | ## txnas 1550 | 1551 | - Syntax: `txnas F` where F: [txna](#field-group-txna) 1552 | - Bytecode: 0xc0 {uint8} 1553 | - Stack: ..., A: uint64 → ..., any 1554 | - Ath value of the array field F of the current transaction 1555 | - Availability: v5 1556 | 1557 | ## gtxnas 1558 | 1559 | - Syntax: `gtxnas T F` where T: transaction group index, F: [txna](#field-group-txna) 1560 | - Bytecode: 0xc1 {uint8}, {uint8} 1561 | - Stack: ..., A: uint64 → ..., any 1562 | - Ath value of the array field F from the Tth transaction in the current group 1563 | - Availability: v5 1564 | 1565 | ## gtxnsas 1566 | 1567 | - Syntax: `gtxnsas F` where F: [txna](#field-group-txna) 1568 | - Bytecode: 0xc2 {uint8} 1569 | - Stack: ..., A: uint64, B: uint64 → ..., any 1570 | - Bth value of the array field F from the Ath transaction in the current group 1571 | - Availability: v5 1572 | 1573 | ## args 1574 | 1575 | - Bytecode: 0xc3 1576 | - Stack: ..., A: uint64 → ..., []byte 1577 | - Ath LogicSig argument 1578 | - Availability: v5 1579 | - Mode: Signature 1580 | 1581 | ## gloadss 1582 | 1583 | - Bytecode: 0xc4 1584 | - Stack: ..., A: uint64, B: uint64 → ..., any 1585 | - Bth scratch space value of the Ath transaction in the current group 1586 | - Availability: v6 1587 | - Mode: Application 1588 | 1589 | ## itxnas 1590 | 1591 | - Syntax: `itxnas F` where F: [txna](#field-group-txna) 1592 | - Bytecode: 0xc5 {uint8} 1593 | - Stack: ..., A: uint64 → ..., any 1594 | - Ath value of the array field F of the last inner transaction 1595 | - Availability: v6 1596 | - Mode: Application 1597 | 1598 | ## gitxnas 1599 | 1600 | - Syntax: `gitxnas T F` where T: transaction group index, F: [txna](#field-group-txna) 1601 | - Bytecode: 0xc6 {uint8}, {uint8} 1602 | - Stack: ..., A: uint64 → ..., any 1603 | - Ath value of the array field F from the Tth transaction in the last inner group submitted 1604 | - Availability: v6 1605 | - Mode: Application 1606 | 1607 | ## vrf_verify 1608 | 1609 | - Syntax: `vrf_verify S` where S: [vrf_verify](#field-group-vrf_verify) 1610 | - Bytecode: 0xd0 {uint8} 1611 | - Stack: ..., A: []byte, B: [80]byte, C: [32]byte → ..., X: [64]byte, Y: bool 1612 | - Verify the proof B of message A against pubkey C. Returns vrf output and verification flag. 1613 | - **Cost**: 5700 1614 | - Availability: v7 1615 | 1616 | ### vrf_verify 1617 | 1618 | Standards 1619 | 1620 | | Index | Name | Notes | 1621 | | - | ------ | --------- | 1622 | | 0 | VrfAlgorand | | 1623 | 1624 | 1625 | `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/). 1626 | 1627 | ## block 1628 | 1629 | - Syntax: `block F` where F: [block](#field-group-block) 1630 | - Bytecode: 0xd1 {uint8} 1631 | - Stack: ..., A: uint64 → ..., any 1632 | - field F of block A. Fail unless A falls between txn.LastValid-1002 and txn.FirstValid (exclusive) 1633 | - Availability: v7 1634 | 1635 | ### block 1636 | 1637 | Fields 1638 | 1639 | | Index | Name | Type | Notes | 1640 | | - | ------ | -- | --------- | 1641 | | 0 | BlkSeed | [32]byte | | 1642 | | 1 | BlkTimestamp | uint64 | | 1643 | 1644 | 1645 | ## box_splice 1646 | 1647 | - Bytecode: 0xd2 1648 | - Stack: ..., A: boxName, B: uint64, C: uint64, D: []byte → ... 1649 | - set box A to contain its previous bytes up to index B, followed by D, followed by the original bytes of A that began at index B+C. 1650 | - Availability: v10 1651 | - Mode: Application 1652 | 1653 | Boxes are of constant length. If C < len(D), then len(D)-C bytes will be removed from the end. If C > len(D), zero bytes will be appended to the end to reach the box length. 1654 | 1655 | ## box_resize 1656 | 1657 | - Bytecode: 0xd3 1658 | - Stack: ..., A: boxName, B: uint64 → ... 1659 | - change the size of box named A to be of length B, adding zero bytes to end or removing bytes from the end, as needed. Fail if the name A is empty, A is not an existing box, or B exceeds 32,768. 1660 | - Availability: v10 1661 | - Mode: Application 1662 | 1663 | ## ec_add 1664 | 1665 | - Syntax: `ec_add G` where G: [EC](#field-group-ec) 1666 | - Bytecode: 0xe0 {uint8} 1667 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1668 | - for curve points A and B, return the curve point A + B 1669 | - **Cost**: BN254g1=125; BN254g2=170; BLS12_381g1=205; BLS12_381g2=290 1670 | - Availability: v10 1671 | 1672 | ### EC 1673 | 1674 | Groups 1675 | 1676 | | Index | Name | Notes | 1677 | | - | ------ | --------- | 1678 | | 0 | BN254g1 | G1 of the BN254 curve. Points encoded as 32 byte X following by 32 byte Y | 1679 | | 1 | BN254g2 | G2 of the BN254 curve. Points encoded as 64 byte X following by 64 byte Y | 1680 | | 2 | BLS12_381g1 | G1 of the BLS 12-381 curve. Points encoded as 48 byte X following by 48 byte Y | 1681 | | 3 | BLS12_381g2 | G2 of the BLS 12-381 curve. Points encoded as 96 byte X following by 96 byte Y | 1682 | 1683 | 1684 | A and B are curve points in affine representation: field element X concatenated with field element Y. Field element `Z` is encoded as follows. 1685 | For the base field elements (Fp), `Z` is encoded as a big-endian number and must be lower than the field modulus. 1686 | For the quadratic field extension (Fp2), `Z` is encoded as the concatenation of the individual encoding of the coefficients. For an Fp2 element of the form `Z = Z0 + Z1 i`, where `i` is a formal quadratic non-residue, the encoding of Z is the concatenation of the encoding of `Z0` and `Z1` in this order. (`Z0` and `Z1` must be less than the field modulus). 1687 | 1688 | The point at infinity is encoded as `(X,Y) = (0,0)`. 1689 | Groups G1 and G2 are denoted additively. 1690 | 1691 | Fails if A or B is not in G. 1692 | A and/or B are allowed to be the point at infinity. 1693 | Does _not_ check if A and B are in the main prime-order subgroup. 1694 | 1695 | ## ec_scalar_mul 1696 | 1697 | - Syntax: `ec_scalar_mul G` where G: [EC](#field-group-ec) 1698 | - Bytecode: 0xe1 {uint8} 1699 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1700 | - for curve point A and scalar B, return the curve point BA, the point A multiplied by the scalar B. 1701 | - **Cost**: BN254g1=1810; BN254g2=3430; BLS12_381g1=2950; BLS12_381g2=6530 1702 | - Availability: v10 1703 | 1704 | A is a curve point encoded and checked as described in `ec_add`. Scalar B is interpreted as a big-endian unsigned integer. Fails if B exceeds 32 bytes. 1705 | 1706 | ## ec_pairing_check 1707 | 1708 | - Syntax: `ec_pairing_check G` where G: [EC](#field-group-ec) 1709 | - Bytecode: 0xe2 {uint8} 1710 | - Stack: ..., A: []byte, B: []byte → ..., bool 1711 | - 1 if the product of the pairing of each point in A with its respective point in B is equal to the identity element of the target group Gt, else 0 1712 | - **Cost**: BN254g1=8000 + 7400 per 64 bytes of B; BN254g2=8000 + 7400 per 128 bytes of B; BLS12_381g1=13000 + 10000 per 96 bytes of B; BLS12_381g2=13000 + 10000 per 192 bytes of B 1713 | - Availability: v10 1714 | 1715 | A and B are concatenated points, encoded and checked as described in `ec_add`. A contains points of the group G, B contains points of the associated group (G2 if G is G1, and vice versa). Fails if A and B have a different number of points, or if any point is not in its described group or outside the main prime-order subgroup - a stronger condition than other opcodes. AVM values are limited to 4096 bytes, so `ec_pairing_check` is limited by the size of the points in the groups being operated upon. 1716 | 1717 | ## ec_multi_scalar_mul 1718 | 1719 | - Syntax: `ec_multi_scalar_mul G` where G: [EC](#field-group-ec) 1720 | - Bytecode: 0xe3 {uint8} 1721 | - Stack: ..., A: []byte, B: []byte → ..., []byte 1722 | - for curve points A and scalars B, return curve point B0A0 + B1A1 + B2A2 + ... + BnAn 1723 | - **Cost**: BN254g1=3600 + 90 per 32 bytes of B; BN254g2=7200 + 270 per 32 bytes of B; BLS12_381g1=6500 + 95 per 32 bytes of B; BLS12_381g2=14850 + 485 per 32 bytes of B 1724 | - Availability: v10 1725 | 1726 | A is a list of concatenated points, encoded and checked as described in `ec_add`. B is a list of concatenated scalars which, unlike ec_scalar_mul, must all be exactly 32 bytes long. 1727 | The name `ec_multi_scalar_mul` was chosen to reflect common usage, but a more consistent name would be `ec_multi_scalar_mul`. AVM values are limited to 4096 bytes, so `ec_multi_scalar_mul` is limited by the size of the points in the group being operated upon. 1728 | 1729 | ## ec_subgroup_check 1730 | 1731 | - Syntax: `ec_subgroup_check G` where G: [EC](#field-group-ec) 1732 | - Bytecode: 0xe4 {uint8} 1733 | - Stack: ..., A: []byte → ..., bool 1734 | - 1 if A is in the main prime-order subgroup of G (including the point at infinity) else 0. Program fails if A is not in G at all. 1735 | - **Cost**: BN254g1=20; BN254g2=3100; BLS12_381g1=1850; BLS12_381g2=2340 1736 | - Availability: v10 1737 | 1738 | ## ec_map_to 1739 | 1740 | - Syntax: `ec_map_to G` where G: [EC](#field-group-ec) 1741 | - Bytecode: 0xe5 {uint8} 1742 | - Stack: ..., A: []byte → ..., []byte 1743 | - maps field element A to group G 1744 | - **Cost**: BN254g1=630; BN254g2=3300; BLS12_381g1=1950; BLS12_381g2=8150 1745 | - Availability: v10 1746 | 1747 | BN254 points are mapped by the SVDW map. BLS12-381 points are mapped by the SSWU map. 1748 | G1 element inputs are base field elements and G2 element inputs are quadratic field elements, with nearly the same encoding rules (for field elements) as defined in `ec_add`. There is one difference of encoding rule: G1 element inputs do not need to be 0-padded if they fit in less than 32 bytes for BN254 and less than 48 bytes for BLS12-381. (As usual, the empty byte array represents 0.) G2 elements inputs need to be always have the required size. 1749 | ```