This is page 10 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/SDKs:javascript:classes:modelsv2.ApplicationStateSchema.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / ApplicationStateSchema
2 |
3 | # Class: ApplicationStateSchema
4 |
5 | [modelsv2](../modules/modelsv2.md).ApplicationStateSchema
6 |
7 | Specifies maximums on the number of each type that may be stored.
8 |
9 | ## Hierarchy
10 |
11 | - `default`
12 |
13 | ↳ **`ApplicationStateSchema`**
14 |
15 | ## Table of contents
16 |
17 | ### Constructors
18 |
19 | - [constructor](modelsv2.ApplicationStateSchema.md#constructor)
20 |
21 | ### Properties
22 |
23 | - [attribute\_map](modelsv2.ApplicationStateSchema.md#attribute_map)
24 | - [numByteSlice](modelsv2.ApplicationStateSchema.md#numbyteslice)
25 | - [numUint](modelsv2.ApplicationStateSchema.md#numuint)
26 |
27 | ### Methods
28 |
29 | - [get\_obj\_for\_encoding](modelsv2.ApplicationStateSchema.md#get_obj_for_encoding)
30 | - [from\_obj\_for\_encoding](modelsv2.ApplicationStateSchema.md#from_obj_for_encoding)
31 |
32 | ## Constructors
33 |
34 | ### constructor
35 |
36 | • **new ApplicationStateSchema**(`«destructured»`)
37 |
38 | Creates a new `ApplicationStateSchema` object.
39 |
40 | #### Parameters
41 |
42 | | Name | Type |
43 | | :------ | :------ |
44 | | `«destructured»` | `Object` |
45 | | › `numByteSlice` | `number` \| `bigint` |
46 | | › `numUint` | `number` \| `bigint` |
47 |
48 | #### Overrides
49 |
50 | BaseModel.constructor
51 |
52 | #### Defined in
53 |
54 | client/v2/algod/models/types.ts:1516
55 |
56 | ## Properties
57 |
58 | ### attribute\_map
59 |
60 | • **attribute\_map**: `Record`\<`string`, `string`\>
61 |
62 | #### Inherited from
63 |
64 | BaseModel.attribute\_map
65 |
66 | #### Defined in
67 |
68 | client/v2/basemodel.ts:56
69 |
70 | ___
71 |
72 | ### numByteSlice
73 |
74 | • **numByteSlice**: `number` \| `bigint`
75 |
76 | (nbs) num of byte slices.
77 |
78 | #### Defined in
79 |
80 | client/v2/algod/models/types.ts:1509
81 |
82 | ___
83 |
84 | ### numUint
85 |
86 | • **numUint**: `number` \| `bigint`
87 |
88 | (nui) num of uints.
89 |
90 | #### Defined in
91 |
92 | client/v2/algod/models/types.ts:1504
93 |
94 | ## Methods
95 |
96 | ### get\_obj\_for\_encoding
97 |
98 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
99 |
100 | Get an object ready for encoding to either JSON or msgpack.
101 |
102 | #### Parameters
103 |
104 | | Name | Type | Default value | Description |
105 | | :------ | :------ | :------ | :------ |
106 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
107 |
108 | #### Returns
109 |
110 | `Record`\<`string`, `any`\>
111 |
112 | #### Inherited from
113 |
114 | BaseModel.get\_obj\_for\_encoding
115 |
116 | #### Defined in
117 |
118 | client/v2/basemodel.ts:65
119 |
120 | ___
121 |
122 | ### from\_obj\_for\_encoding
123 |
124 | ▸ `Static` **from_obj_for_encoding**(`data`): [`ApplicationStateSchema`](modelsv2.ApplicationStateSchema.md)
125 |
126 | #### Parameters
127 |
128 | | Name | Type |
129 | | :------ | :------ |
130 | | `data` | `Record`\<`string`, `any`\> |
131 |
132 | #### Returns
133 |
134 | [`ApplicationStateSchema`](modelsv2.ApplicationStateSchema.md)
135 |
136 | #### Defined in
137 |
138 | client/v2/algod/models/types.ts:1534
139 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/liquid-auth:docs:clients:browser:authentication.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: 'Browser: Authentication'
3 | sidebar:
4 | badge:
5 | text: "TODO"
6 | variant: danger
7 | ---
8 |
9 | Authenticate an existing [Passkey](/guides/concepts/#passkeys) with the [Service](/guides/server/introduction).
10 |
11 | ### Who is this for?
12 |
13 | - **dApps** logging back into the service without connecting to another client
14 | - **Browser Wallets** that want to communicate with other clients
15 |
16 | ## Client
17 |
18 | Sign in with an existing account using an instance of the `SignalClient`
19 | ```typescript
20 | //app.ts
21 | await client.assertion(
22 | credentialId, // Some known credential ID
23 | {requestId: 12345} // Optional requestId to link
24 | )
25 | ```
26 |
27 | ## Stateless
28 |
29 | Using the stateless method without a `SignalClient`
30 |
31 | ```typescript
32 | //app.ts
33 | import {assertion} from '@algorandfoundation/liquid-auth/assertion'
34 | await assertion(
35 | "https://my-liquid-service.com",
36 | credentialId, // Some known credential ID
37 | {requestId: 12345} // Optional requestId to link
38 | )
39 | ```
40 |
41 | ## Manual
42 |
43 | If you want to manually handle the process of creating a passkey, you can use the following methods and preforming
44 | the three steps of the process.
45 |
46 | ### 🧮 Options
47 |
48 | Manually fetching the `Options` from the service.
49 |
50 | ```typescript
51 | import {fetchAssertionRequestOptions} from '@algorandfoundation/liquid-client/assertion'
52 |
53 | const encodedOptions = await fetchAssertionRequestOptions("https://my-liquid-service.com", "<KNOWN_CREDENTIAL_ID>")
54 | ```
55 |
56 | ### 🎉 Retrieving
57 |
58 | Decode the options and fetch the Passkey.
59 |
60 | ```typescript
61 | import {fromBase64Url} from "@algorandfoundation/liquid-client/encoding";
62 | const options = { ...encodedOptions };
63 | // Challenge from the service
64 | options.challenge = fromBase64Url(options.challenge);
65 | // Decode any known credentials
66 | if (options.allowCredentials) {
67 | for (const cred of options.allowCredentials) {
68 | cred.id = fromBase64Url(cred.id);
69 | }
70 | }
71 | const credential = navigator.credentials.get({
72 | publicKey: options
73 | })
74 | ```
75 |
76 | ### 🔐 Liquid Extension
77 |
78 | Optionally, Authenticate a remote user with the Liquid Extension.
79 |
80 | ```typescript
81 | credential.clientExtensionResults = {
82 | // Optionally authenticate a remote peer
83 | requestId: "<UUID_FROM_QR_CODE>"
84 | }
85 | ```
86 |
87 | ### 🚚 Response
88 |
89 | Encode and submit the passkey to the service.
90 |
91 | ```typescript
92 | import {fetchAssertionResponse} from '@algorandfoundation/liquid-client/assertion'
93 | import {toBase64URL} from '@algorandfoundation/liquid-client/encoding'
94 |
95 | const result = await fetchAssertionResponse("https://my-liquid-service.com", {
96 | id: credential.id,
97 | type: credential.type,
98 | rawId: toBase64URL(credential.rawId),
99 | clientExtensionResults: credential.clientExtensionResults,
100 | response: Object.keys(AuthenticatorAssertionResponse.prototype).reduce((prev, curr) => {
101 | prev[curr] = toBase64URL(credential.response[curr]);
102 | return prev;
103 | }, {
104 | clientDataJSON: toBase64URL(credential.response.clientDataJSON),
105 | }),
106 | })
107 | ```
108 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:indexerModels.AccountResponse.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / AccountResponse
2 |
3 | # Class: AccountResponse
4 |
5 | [indexerModels](../modules/indexerModels.md).AccountResponse
6 |
7 | ## Hierarchy
8 |
9 | - `default`
10 |
11 | ↳ **`AccountResponse`**
12 |
13 | ## Table of contents
14 |
15 | ### Constructors
16 |
17 | - [constructor](indexerModels.AccountResponse.md#constructor)
18 |
19 | ### Properties
20 |
21 | - [account](indexerModels.AccountResponse.md#account)
22 | - [attribute\_map](indexerModels.AccountResponse.md#attribute_map)
23 | - [currentRound](indexerModels.AccountResponse.md#currentround)
24 |
25 | ### Methods
26 |
27 | - [get\_obj\_for\_encoding](indexerModels.AccountResponse.md#get_obj_for_encoding)
28 | - [from\_obj\_for\_encoding](indexerModels.AccountResponse.md#from_obj_for_encoding)
29 |
30 | ## Constructors
31 |
32 | ### constructor
33 |
34 | • **new AccountResponse**(`«destructured»`)
35 |
36 | Creates a new `AccountResponse` object.
37 |
38 | #### Parameters
39 |
40 | | Name | Type |
41 | | :------ | :------ |
42 | | `«destructured»` | `Object` |
43 | | › `account` | [`Account`](indexerModels.Account.md) |
44 | | › `currentRound` | `number` \| `bigint` |
45 |
46 | #### Overrides
47 |
48 | BaseModel.constructor
49 |
50 | #### Defined in
51 |
52 | client/v2/indexer/models/types.ts:630
53 |
54 | ## Properties
55 |
56 | ### account
57 |
58 | • **account**: [`Account`](indexerModels.Account.md)
59 |
60 | Account information at a given round.
61 | Definition:
62 | data/basics/userBalance.go : AccountData
63 |
64 | #### Defined in
65 |
66 | client/v2/indexer/models/types.ts:616
67 |
68 | ___
69 |
70 | ### attribute\_map
71 |
72 | • **attribute\_map**: `Record`\<`string`, `string`\>
73 |
74 | #### Inherited from
75 |
76 | BaseModel.attribute\_map
77 |
78 | #### Defined in
79 |
80 | client/v2/basemodel.ts:56
81 |
82 | ___
83 |
84 | ### currentRound
85 |
86 | • **currentRound**: `number` \| `bigint`
87 |
88 | Round at which the results were computed.
89 |
90 | #### Defined in
91 |
92 | client/v2/indexer/models/types.ts:621
93 |
94 | ## Methods
95 |
96 | ### get\_obj\_for\_encoding
97 |
98 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
99 |
100 | Get an object ready for encoding to either JSON or msgpack.
101 |
102 | #### Parameters
103 |
104 | | Name | Type | Default value | Description |
105 | | :------ | :------ | :------ | :------ |
106 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
107 |
108 | #### Returns
109 |
110 | `Record`\<`string`, `any`\>
111 |
112 | #### Inherited from
113 |
114 | BaseModel.get\_obj\_for\_encoding
115 |
116 | #### Defined in
117 |
118 | client/v2/basemodel.ts:65
119 |
120 | ___
121 |
122 | ### from\_obj\_for\_encoding
123 |
124 | ▸ `Static` **from_obj_for_encoding**(`data`): [`AccountResponse`](indexerModels.AccountResponse.md)
125 |
126 | #### Parameters
127 |
128 | | Name | Type |
129 | | :------ | :------ |
130 | | `data` | `Record`\<`string`, `any`\> |
131 |
132 | #### Returns
133 |
134 | [`AccountResponse`](indexerModels.AccountResponse.md)
135 |
136 | #### Defined in
137 |
138 | client/v2/indexer/models/types.ts:648
139 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0008.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 8
3 | title: Algorand Wallet Sign and Post API
4 | description: A function used to simultaneously sign and post transactions to the network.
5 | author: DanBurton (@DanBurton)
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/52
7 | status: Deprecated
8 | type: Standards Track
9 | category: Interface
10 | created: 2021-08-09
11 | ---
12 |
13 | # Algorand Wallet Sign and Post API
14 |
15 | ## Abstract
16 |
17 | A function `signAndPostTxns`, which accepts an array of `WalletTransaction`s, and posts them to the network.
18 |
19 | Accepts the inputs to [ARC-0001](./arc-0001.md#interface-signtxnsfunction)'s / [ARC-0005](./arc-0005.md#interface-signtxnsfunction)'s `signTxns`, and produces the output of [ARC-0007](./arc-0007.md#interface-posttxnsfunction)'s `postTxns`.
20 |
21 | ## Specification
22 |
23 | ### Interface `SignAndPostTxnsFunction`
24 |
25 | ```ts
26 | export type SignAndPostTxnsFunction = (
27 | txns: WalletTransaction[],
28 | opts?: any,
29 | ) => Promise<PostTxnsResult>;
30 | ```
31 |
32 | * `WalletTransaction` is as specified by [ARC-0005](./arc-0005.md#interface-wallettransaction).
33 | * `PostTxnsResult` is as specified by [ARC-0007](./arc-0007.md#interface-posttxnsfunction).
34 |
35 | Errors are handled exactly as specified by [ARC-0001](./arc-0001.md#error-standards) and [ARC-0007](./arc-0007.md#error-standard)
36 |
37 | ## Rationale
38 |
39 | Allows the user to be sure that what they are signing is in fact all that is being sent. Doesn't necessarily grant the DApp direct access to the signed txns, though they are posted to the network, so they should not be considered private.
40 |
41 | Exposing only this API instead of exposing `postTxns` directly is potentially safer for the wallet user, since it only allows the posting of transactions which the user has explicitly approved.
42 |
43 | ## Security Considerations
44 |
45 | In case the wallet uses an API service that is secret or provided by the user, the wallet **MUST** ensure that the URL of the service and the potential tokens/headers are not leaked to the dApp.
46 |
47 | > Leakage may happen by accidentally including too much information in responses or errors returned by the various methods. For example, if the nodeJS superagent library is used without filtering errors and responses, errors and responses may include the request object, which includes the potentially secret API service URL / secret token headers.
48 |
49 | For dApps using the `signAndPostTxns` function, it is **RECOMMENDED** to display a Waiting/Loading Screen to wait until the transaction is confirmed to prevent potential issues.
50 |
51 | > The reasoning is the following: the pop-up/window in which the wallet is showing the waiting/loading screen may disappear in some cases (e.g., if the user clicks away from it). If it disappears, the user may be tempted to perform again the action, causing significant damages.
52 |
53 | ## Copyright
54 |
55 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
56 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.ApplicationLocalReference.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / ApplicationLocalReference
2 |
3 | # Class: ApplicationLocalReference
4 |
5 | [modelsv2](../modules/modelsv2.md).ApplicationLocalReference
6 |
7 | References an account's local state for an application.
8 |
9 | ## Hierarchy
10 |
11 | - `default`
12 |
13 | ↳ **`ApplicationLocalReference`**
14 |
15 | ## Table of contents
16 |
17 | ### Constructors
18 |
19 | - [constructor](modelsv2.ApplicationLocalReference.md#constructor)
20 |
21 | ### Properties
22 |
23 | - [account](modelsv2.ApplicationLocalReference.md#account)
24 | - [app](modelsv2.ApplicationLocalReference.md#app)
25 | - [attribute\_map](modelsv2.ApplicationLocalReference.md#attribute_map)
26 |
27 | ### Methods
28 |
29 | - [get\_obj\_for\_encoding](modelsv2.ApplicationLocalReference.md#get_obj_for_encoding)
30 | - [from\_obj\_for\_encoding](modelsv2.ApplicationLocalReference.md#from_obj_for_encoding)
31 |
32 | ## Constructors
33 |
34 | ### constructor
35 |
36 | • **new ApplicationLocalReference**(`«destructured»`)
37 |
38 | Creates a new `ApplicationLocalReference` object.
39 |
40 | #### Parameters
41 |
42 | | Name | Type |
43 | | :------ | :------ |
44 | | `«destructured»` | `Object` |
45 | | › `account` | `string` |
46 | | › `app` | `number` \| `bigint` |
47 |
48 | #### Overrides
49 |
50 | BaseModel.constructor
51 |
52 | #### Defined in
53 |
54 | client/v2/algod/models/types.ts:1167
55 |
56 | ## Properties
57 |
58 | ### account
59 |
60 | • **account**: `string`
61 |
62 | Address of the account with the local state.
63 |
64 | #### Defined in
65 |
66 | client/v2/algod/models/types.ts:1155
67 |
68 | ___
69 |
70 | ### app
71 |
72 | • **app**: `number` \| `bigint`
73 |
74 | Application ID of the local state application.
75 |
76 | #### Defined in
77 |
78 | client/v2/algod/models/types.ts:1160
79 |
80 | ___
81 |
82 | ### attribute\_map
83 |
84 | • **attribute\_map**: `Record`\<`string`, `string`\>
85 |
86 | #### Inherited from
87 |
88 | BaseModel.attribute\_map
89 |
90 | #### Defined in
91 |
92 | client/v2/basemodel.ts:56
93 |
94 | ## Methods
95 |
96 | ### get\_obj\_for\_encoding
97 |
98 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
99 |
100 | Get an object ready for encoding to either JSON or msgpack.
101 |
102 | #### Parameters
103 |
104 | | Name | Type | Default value | Description |
105 | | :------ | :------ | :------ | :------ |
106 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
107 |
108 | #### Returns
109 |
110 | `Record`\<`string`, `any`\>
111 |
112 | #### Inherited from
113 |
114 | BaseModel.get\_obj\_for\_encoding
115 |
116 | #### Defined in
117 |
118 | client/v2/basemodel.ts:65
119 |
120 | ___
121 |
122 | ### from\_obj\_for\_encoding
123 |
124 | ▸ `Static` **from_obj_for_encoding**(`data`): [`ApplicationLocalReference`](modelsv2.ApplicationLocalReference.md)
125 |
126 | #### Parameters
127 |
128 | | Name | Type |
129 | | :------ | :------ |
130 | | `data` | `Record`\<`string`, `any`\> |
131 |
132 | #### Returns
133 |
134 | [`ApplicationLocalReference`](modelsv2.ApplicationLocalReference.md)
135 |
136 | #### Defined in
137 |
138 | client/v2/algod/models/types.ts:1179
139 |
```
--------------------------------------------------------------------------------
/rename_files.sh:
--------------------------------------------------------------------------------
```bash
1 | #!/bin/bash
2 |
3 | # Script to rename files in the taxonomy directory
4 | # Changes:
5 | # - ARCs: to arcs:
6 | # - SDKs: to sdks:
7 | # - TEALScript: to tealscript:
8 |
9 | # Directory to process
10 | DIRECTORY="/Users/mg/Documents/GitHub/GoPlausible/algorand-mcp/packages/server/src/resources/knowledge/taxonomy"
11 |
12 | # Check if directory exists
13 | if [ ! -d "$DIRECTORY" ]; then
14 | echo "Error: Directory $DIRECTORY does not exist."
15 | exit 1
16 | fi
17 |
18 | # Counter for renamed files
19 | renamed_count=0
20 |
21 | # Function to process a file
22 | process_file() {
23 | local file="$1"
24 | local basename=$(basename "$file")
25 | local dirname=$(dirname "$file")
26 | local new_name=""
27 |
28 | # Check if file name starts with ARCs:
29 | if [[ "$basename" == ARCs:* ]]; then
30 | new_name="${dirname}/arcs:${basename#ARCs:}"
31 | echo "Renaming: $file -> $new_name"
32 | mv "$file" "$new_name"
33 | ((renamed_count++))
34 | # Check if file name starts with SDKs:
35 | elif [[ "$basename" == SDKs:* ]]; then
36 | new_name="${dirname}/sdks:${basename#SDKs:}"
37 | echo "Renaming: $file -> $new_name"
38 | mv "$file" "$new_name"
39 | ((renamed_count++))
40 | # Check if file name starts with TEALScript:
41 | elif [[ "$basename" == TEALScript_* ]]; then
42 | new_name="${dirname}/tealscript:${basename#TEALScript_}"
43 | echo "Renaming: $file -> $new_name"
44 | mv "$file" "$new_name"
45 | ((renamed_count++))
46 | fi
47 | }
48 |
49 | # Find all files in the directory and process them
50 | echo "Starting to process files in $DIRECTORY..."
51 | find "$DIRECTORY" -type f | while read -r file; do
52 | process_file "$file"
53 | done
54 |
55 | # Find all directories in the directory and process them
56 | # This is needed because directory names might also need to be renamed
57 | find "$DIRECTORY" -type d | sort -r | while read -r dir; do
58 | # Skip the root directory
59 | if [ "$dir" != "$DIRECTORY" ]; then
60 | basename=$(basename "$dir")
61 | dirname=$(dirname "$dir")
62 |
63 | # Check if directory name starts with ARCs:
64 | if [[ "$basename" == ARCs:* ]]; then
65 | new_name="${dirname}/arcs:${basename#ARCs:}"
66 | echo "Renaming directory: $dir -> $new_name"
67 | mv "$dir" "$new_name"
68 | ((renamed_count++))
69 | # Check if directory name starts with SDKs:
70 | elif [[ "$basename" == SDKs:* ]]; then
71 | new_name="${dirname}/sdks:${basename#SDKs:}"
72 | echo "Renaming directory: $dir -> $new_name"
73 | mv "$dir" "$new_name"
74 | ((renamed_count++))
75 | # Check if directory name starts with TEALScript:
76 | elif [[ "$basename" == TEALScript:* ]]; then
77 | new_name="${dirname}/tealscript:${basename#TEALScript:}"
78 | echo "Renaming directory: $dir -> $new_name"
79 | mv "$dir" "$new_name"
80 | ((renamed_count++))
81 | fi
82 | fi
83 | done
84 |
85 | echo "Renaming complete. Total items renamed: $renamed_count"
86 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:indexerModels.StateProofParticipant.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / StateProofParticipant
2 |
3 | # Class: StateProofParticipant
4 |
5 | [indexerModels](../modules/indexerModels.md).StateProofParticipant
6 |
7 | ## Hierarchy
8 |
9 | - `default`
10 |
11 | ↳ **`StateProofParticipant`**
12 |
13 | ## Table of contents
14 |
15 | ### Constructors
16 |
17 | - [constructor](indexerModels.StateProofParticipant.md#constructor)
18 |
19 | ### Properties
20 |
21 | - [attribute\_map](indexerModels.StateProofParticipant.md#attribute_map)
22 | - [verifier](indexerModels.StateProofParticipant.md#verifier)
23 | - [weight](indexerModels.StateProofParticipant.md#weight)
24 |
25 | ### Methods
26 |
27 | - [get\_obj\_for\_encoding](indexerModels.StateProofParticipant.md#get_obj_for_encoding)
28 | - [from\_obj\_for\_encoding](indexerModels.StateProofParticipant.md#from_obj_for_encoding)
29 |
30 | ## Constructors
31 |
32 | ### constructor
33 |
34 | • **new StateProofParticipant**(`«destructured»`)
35 |
36 | Creates a new `StateProofParticipant` object.
37 |
38 | #### Parameters
39 |
40 | | Name | Type |
41 | | :------ | :------ |
42 | | `«destructured»` | `Object` |
43 | | › `verifier?` | [`StateProofVerifier`](indexerModels.StateProofVerifier.md) |
44 | | › `weight?` | `number` \| `bigint` |
45 |
46 | #### Overrides
47 |
48 | BaseModel.constructor
49 |
50 | #### Defined in
51 |
52 | client/v2/indexer/models/types.ts:3596
53 |
54 | ## Properties
55 |
56 | ### attribute\_map
57 |
58 | • **attribute\_map**: `Record`\<`string`, `string`\>
59 |
60 | #### Inherited from
61 |
62 | BaseModel.attribute\_map
63 |
64 | #### Defined in
65 |
66 | client/v2/basemodel.ts:56
67 |
68 | ___
69 |
70 | ### verifier
71 |
72 | • `Optional` **verifier**: [`StateProofVerifier`](indexerModels.StateProofVerifier.md)
73 |
74 | (p)
75 |
76 | #### Defined in
77 |
78 | client/v2/indexer/models/types.ts:3584
79 |
80 | ___
81 |
82 | ### weight
83 |
84 | • `Optional` **weight**: `number` \| `bigint`
85 |
86 | (w)
87 |
88 | #### Defined in
89 |
90 | client/v2/indexer/models/types.ts:3589
91 |
92 | ## Methods
93 |
94 | ### get\_obj\_for\_encoding
95 |
96 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
97 |
98 | Get an object ready for encoding to either JSON or msgpack.
99 |
100 | #### Parameters
101 |
102 | | Name | Type | Default value | Description |
103 | | :------ | :------ | :------ | :------ |
104 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
105 |
106 | #### Returns
107 |
108 | `Record`\<`string`, `any`\>
109 |
110 | #### Inherited from
111 |
112 | BaseModel.get\_obj\_for\_encoding
113 |
114 | #### Defined in
115 |
116 | client/v2/basemodel.ts:65
117 |
118 | ___
119 |
120 | ### from\_obj\_for\_encoding
121 |
122 | ▸ `Static` **from_obj_for_encoding**(`data`): [`StateProofParticipant`](indexerModels.StateProofParticipant.md)
123 |
124 | #### Parameters
125 |
126 | | Name | Type |
127 | | :------ | :------ |
128 | | `data` | `Record`\<`string`, `any`\> |
129 |
130 | #### Returns
131 |
132 | [`StateProofParticipant`](indexerModels.StateProofParticipant.md)
133 |
134 | #### Defined in
135 |
136 | client/v2/indexer/models/types.ts:3614
137 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:cli:features:tasks:send.md:
--------------------------------------------------------------------------------
```markdown
1 | # AlgoKit Task Send
2 |
3 | The AlgoKit Send feature allows you to send signed Algorand transaction(s) to a specified network using the AlgoKit CLI. This feature supports sending single or multiple transactions, either provided directly as a base64 encoded string or from a binary file.
4 |
5 | ## Usage
6 |
7 | Available commands and possible usage as follows:
8 |
9 | ```bash
10 | $ ~ algokit task send
11 | Usage: algokit task send [OPTIONS]
12 |
13 | Send a signed transaction to the given network.
14 |
15 | Options:
16 | -f, --file FILE Single or multiple message pack encoded signed transactions from binary file to
17 | send. Option is mutually exclusive with transaction.
18 | -t, --transaction TEXT Base64 encoded signed transaction to send. Option is mutually exclusive with file.
19 | -n, --network [localnet|testnet|mainnet]
20 | Network to use. Refers to `localnet` by default.
21 | -h, --help Show this message and exit.
22 | ```
23 |
24 | ## Options
25 |
26 | - `--file, -f PATH`: Specifies the path to a binary file containing single or multiple message pack encoded signed transactions to send. Mutually exclusive with `--transaction` option.
27 | - `--transaction, -t TEXT`: Specifies a single base64 encoded signed transaction to send. Mutually exclusive with `--file` option.
28 | - `--network, -n [localnet|testnet|mainnet]`: Specifies the network to which the transactions will be sent. Refers to `localnet` by default.
29 |
30 | > Please note, `--transaction` flag only supports sending a single transaction. If you want to send multiple transactions, you can use the `--file` flag to specify a binary file containing multiple transactions.
31 |
32 | ## Example
33 |
34 | To send a transaction, you can use the `send` command as follows:
35 |
36 | ```bash
37 | $ algokit task send --file {PATH_TO_BINARY_FILE_CONTAINING_SIGNED_TRANSACTIONS}
38 | ```
39 |
40 | This will send the transactions to the default `localnet` network. If you want to send the transactions to a different network, you can use the `--network` flag:
41 |
42 | ```bash
43 | $ algokit task send --transaction {YOUR_BASE64_ENCODED_SIGNED_TRANSACTION} --network testnet
44 | ```
45 |
46 | You can also pipe in the `stdout` of `algokit sign` command:
47 |
48 | ```bash
49 | $ algokit task sign --account {YOUR_ACCOUNT_ALIAS OR YOUR_ADDRESS} --file {PATH_TO_BINARY_FILE_CONTAINING_TRANSACTIONS} --force | algokit task send --network {network_name}
50 | ```
51 |
52 | If the transaction is successfully sent, the transaction ID (txid) will be output to the console. You can check the transaction status at the provided transaction explorer URL.
53 |
54 | ## Goal Compatibility
55 |
56 | Please note, at the moment this feature only supports [`goal clerk`](https://developer.algorand.org/docs/clis/goal/clerk/clerk/) compatible transaction objects.
57 |
58 | ## Further Reading
59 |
60 | For in-depth details, visit the [send section](../../cli/index.md#send) in the AlgoKit CLI reference documentation.
61 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:python:testing:docs:testing-guide:index.md:
--------------------------------------------------------------------------------
```markdown
1 | # Testing Guide
2 |
3 | The Algorand Python Testing framework provides powerful tools for testing Algorand Python smart contracts within a Python interpreter. This guide covers the main features and concepts of the framework, helping you write effective tests for your Algorand applications.
4 |
5 | ```{note}
6 | For all code examples in the _Testing Guide_ section, assume `context` is an instance of `AlgopyTestContext` obtained using the `algopy_testing_context()` context manager. All subsequent code is executed within this context.
7 | ```
8 |
9 | ```{mermaid}
10 | graph TD
11 | subgraph GA["Your Development Environment"]
12 | A["algopy (type stubs)"]
13 | B["algopy_testing (testing framework)<br>(You are here 📍)"]
14 | C["puya (compiler)"]
15 | end
16 |
17 | subgraph GB["Your Algorand Project"]
18 | D[Your Algorand Python contract]
19 | end
20 |
21 | D -->|type hints inferred from| A
22 | D -->|compiled using| C
23 | D -->|tested via| B
24 | ```
25 |
26 | > _High-level overview of the relationship between your smart contracts project, Algorand Python Testing framework, Algorand Python type stubs, and the compiler_
27 |
28 | The Algorand Python Testing framework streamlines unit testing of your Algorand Python smart contracts by offering functionality to:
29 |
30 | 1. Simulate the Algorand Virtual Machine (AVM) environment
31 | 2. Create and manipulate test accounts, assets, applications, transactions, and ARC4 types
32 | 3. Test smart contract classes, including their states, variables, and methods
33 | 4. Verify logic signatures and subroutines
34 | 5. Manage global state, local state, scratch slots, and boxes in test contexts
35 | 6. Simulate transactions and transaction groups, including inner transactions
36 | 7. Verify opcode behavior
37 |
38 | By using this framework, you can ensure your Algorand Python smart contracts function correctly before deploying them to a live network.
39 |
40 | Key features of the framework include:
41 |
42 | - `AlgopyTestContext`: The main entry point for testing, providing access to various testing utilities and simulated blockchain state
43 | - AVM Type Simulation: Accurate representations of AVM types like `UInt64` and `Bytes`
44 | - ARC4 Support: Tools for testing ARC4 contracts and methods, including struct definitions and ABI encoding/decoding
45 | - Transaction Simulation: Ability to create and execute various transaction types
46 | - State Management: Tools for managing and verifying global and local state changes
47 | - Opcode Simulation: Implementations of AVM opcodes for accurate smart contract behavior testing
48 |
49 | The framework is designed to work seamlessly with Algorand Python smart contracts, allowing developers to write comprehensive unit tests that closely mimic the behavior of contracts on the Algorand blockchain.
50 |
51 | ## Table of Contents
52 |
53 | ```{toctree}
54 | ---
55 | maxdepth: 3
56 | ---
57 |
58 | concepts
59 | avm-types
60 | arc4-types
61 | transactions
62 | contract-testing
63 | signature-testing
64 | state-management
65 | subroutines
66 | opcodes
67 | ```
68 |
```
--------------------------------------------------------------------------------
/packages/server/src/tools/apiManager/vestige/pools.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { Tool, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
2 | import { ResponseProcessor } from '../../../utils/responseProcessor.js';
3 | import { env } from '../../../env.js';
4 |
5 | export const poolTools: Tool[] = [
6 | {
7 | name: 'api_vestige_view_pools',
8 | description: 'Get pools',
9 | inputSchema: {
10 | type: 'object',
11 | properties: {
12 | network_id: {
13 | type: 'integer',
14 | description: 'Network ID'
15 | },
16 | protocol_id: {
17 | type: 'integer',
18 | description: 'Optional protocol ID filter'
19 | },
20 | other_protocol_id: {
21 | type: 'integer',
22 | description: 'Optional other protocol ID filter'
23 | },
24 | asset_1_id: {
25 | type: 'integer',
26 | description: 'Optional asset 1 ID filter'
27 | },
28 | asset_2_id: {
29 | type: 'integer',
30 | description: 'Optional asset 2 ID filter'
31 | },
32 | limit: {
33 | type: 'integer',
34 | description: 'Maximum number of results',
35 | default: 50,
36 | maximum: 250,
37 | minimum: 1
38 | },
39 | offset: {
40 | type: 'integer',
41 | description: 'Number of results to skip',
42 | default: 0,
43 | minimum: 0
44 | },
45 | order_by: {
46 | type: 'string',
47 | description: 'Field to order by'
48 | },
49 | order_dir: {
50 | type: 'string',
51 | description: 'Order direction (asc/desc)',
52 | default: 'desc',
53 | pattern: '^(asc|desc)$'
54 | }
55 | },
56 | required: ['network_id']
57 | }
58 | }
59 | ];
60 |
61 |
62 |
63 | export const handlePoolTools = ResponseProcessor.wrapResourceHandler(async function handlePoolTools(args: any): Promise<any> {
64 | const name = args.name;
65 | const baseUrl = env.vestige_api_url;
66 | let endpoint = '';
67 |
68 | switch (name) {
69 | case 'api_vestige_view_pools':
70 | endpoint = '/pools';
71 | break;
72 | default:
73 | throw new McpError(
74 | ErrorCode.MethodNotFound,
75 | `Unknown tool: ${name}`
76 | );
77 | }
78 |
79 | try {
80 | // Add query parameters if they exist
81 | const queryParams = new URLSearchParams();
82 | for (const [key, value] of Object.entries(args)) {
83 | if (value !== undefined) {
84 | queryParams.append(key, String(value));
85 | }
86 | }
87 | const url = `${baseUrl}${endpoint}${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
88 |
89 | const response = await fetch(url);
90 | if (!response.ok) {
91 | throw new McpError(
92 | ErrorCode.InternalError,
93 | `Vestige API error: ${response.status} ${response.statusText}`
94 | );
95 | }
96 | const data = await response.json();
97 | return data;
98 |
99 | } catch (error) {
100 | if (error instanceof McpError) {
101 | throw error;
102 | }
103 | throw new McpError(
104 | ErrorCode.InternalError,
105 | `Failed to fetch pool data: ${error instanceof Error ? error.message : String(error)}`
106 | );
107 | }
108 | });
109 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.CompileResponse.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / CompileResponse
2 |
3 | # Class: CompileResponse
4 |
5 | [modelsv2](../modules/modelsv2.md).CompileResponse
6 |
7 | Teal compile Result
8 |
9 | ## Hierarchy
10 |
11 | - `default`
12 |
13 | ↳ **`CompileResponse`**
14 |
15 | ## Table of contents
16 |
17 | ### Constructors
18 |
19 | - [constructor](modelsv2.CompileResponse.md#constructor)
20 |
21 | ### Properties
22 |
23 | - [attribute\_map](modelsv2.CompileResponse.md#attribute_map)
24 | - [hash](modelsv2.CompileResponse.md#hash)
25 | - [result](modelsv2.CompileResponse.md#result)
26 | - [sourcemap](modelsv2.CompileResponse.md#sourcemap)
27 |
28 | ### Methods
29 |
30 | - [get\_obj\_for\_encoding](modelsv2.CompileResponse.md#get_obj_for_encoding)
31 | - [from\_obj\_for\_encoding](modelsv2.CompileResponse.md#from_obj_for_encoding)
32 |
33 | ## Constructors
34 |
35 | ### constructor
36 |
37 | • **new CompileResponse**(`«destructured»`)
38 |
39 | Creates a new `CompileResponse` object.
40 |
41 | #### Parameters
42 |
43 | | Name | Type |
44 | | :------ | :------ |
45 | | `«destructured»` | `Object` |
46 | | › `hash` | `string` |
47 | | › `result` | `string` |
48 | | › `sourcemap?` | `Record`\<`string`, `any`\> |
49 |
50 | #### Overrides
51 |
52 | BaseModel.constructor
53 |
54 | #### Defined in
55 |
56 | client/v2/algod/models/types.ts:2532
57 |
58 | ## Properties
59 |
60 | ### attribute\_map
61 |
62 | • **attribute\_map**: `Record`\<`string`, `string`\>
63 |
64 | #### Inherited from
65 |
66 | BaseModel.attribute\_map
67 |
68 | #### Defined in
69 |
70 | client/v2/basemodel.ts:56
71 |
72 | ___
73 |
74 | ### hash
75 |
76 | • **hash**: `string`
77 |
78 | base32 SHA512_256 of program bytes (Address style)
79 |
80 | #### Defined in
81 |
82 | client/v2/algod/models/types.ts:2514
83 |
84 | ___
85 |
86 | ### result
87 |
88 | • **result**: `string`
89 |
90 | base64 encoded program bytes
91 |
92 | #### Defined in
93 |
94 | client/v2/algod/models/types.ts:2519
95 |
96 | ___
97 |
98 | ### sourcemap
99 |
100 | • `Optional` **sourcemap**: `Record`\<`string`, `any`\>
101 |
102 | JSON of the source map
103 |
104 | #### Defined in
105 |
106 | client/v2/algod/models/types.ts:2524
107 |
108 | ## Methods
109 |
110 | ### get\_obj\_for\_encoding
111 |
112 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
113 |
114 | Get an object ready for encoding to either JSON or msgpack.
115 |
116 | #### Parameters
117 |
118 | | Name | Type | Default value | Description |
119 | | :------ | :------ | :------ | :------ |
120 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
121 |
122 | #### Returns
123 |
124 | `Record`\<`string`, `any`\>
125 |
126 | #### Inherited from
127 |
128 | BaseModel.get\_obj\_for\_encoding
129 |
130 | #### Defined in
131 |
132 | client/v2/basemodel.ts:65
133 |
134 | ___
135 |
136 | ### from\_obj\_for\_encoding
137 |
138 | ▸ `Static` **from_obj_for_encoding**(`data`): [`CompileResponse`](modelsv2.CompileResponse.md)
139 |
140 | #### Parameters
141 |
142 | | Name | Type |
143 | | :------ | :------ |
144 | | `data` | `Record`\<`string`, `any`\> |
145 |
146 | #### Returns
147 |
148 | [`CompileResponse`](modelsv2.CompileResponse.md)
149 |
150 | #### Defined in
151 |
152 | client/v2/algod/models/types.ts:2554
153 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/puya:python:testing:examples:README.md:
--------------------------------------------------------------------------------
```markdown
1 | # Algorand Python Testing examples
2 |
3 | This directory contains examples demonstrating how to use algorand-python-testing to test smart contracts written in Algorand Python.
4 |
5 | ## Overview
6 |
7 | `algorand-python-testing` provides a powerful framework for unit testing Algorand smart contracts written in Algorand Python. It allows developers to emulate AVM behavior in a Python interpreter, making it easier to write and run tests for your Algorand applications.
8 |
9 | ## Key Features
10 |
11 | 1. **Test Environment Setup**: Use the `context` fixture to set up a test environment that emulates AVM behavior.
12 | 2. **Arrange, Act, Assert Pattern**: Examples follow the 'arrange, act, assert' pattern for clear and structured tests.
13 | 3. **Asset and Account Creation**: Easily create test assets and accounts using `context.any.asset` and `context.any.account`.
14 | 4. **State Manipulation**: Test global and local state changes in your smart contracts.
15 | 5. **ABI Method Testing**: Examples of how to test ABI methods in your smart contracts.
16 |
17 | ## Quickstart
18 |
19 | To run the examples in a self-contained manner:
20 |
21 | 1. Install [hatch](https://hatch.pypa.io/latest/)
22 | 2. From the root of the repo, run:
23 |
24 | ```bash
25 | hatch run examples:test examples/<example_directory>
26 | ```
27 |
28 | Replace `<example_directory>` with the specific example you want to run (e.g., `auction`, `abi`, etc.).
29 |
30 | ## Writing Tests
31 |
32 | When writing tests for your Algorand smart contracts:
33 |
34 | 1. Use the `context` fixture to set up your test environment.
35 | 2. Create test assets and accounts as needed using `context.any.asset` and `context.any.account`.
36 | 3. Interact with your smart contract methods.
37 | 4. Assert the expected outcomes, including state changes and transaction results.
38 |
39 | For detailed examples, refer to the individual test files in each example directory.
40 |
41 | ## Contributing
42 |
43 | If you have additional examples or improvements, feel free to contribute by submitting a pull request.
44 |
45 | 1. Follow the [contribution guidelines](https://github.com/algorandfoundation/algorand-python-testing/blob/main/CONTRIBUTING.md).
46 | 2. Create a new folder under `examples/` with your contract/signature and test files.
47 | 3. If you are contributing a smart contract example make sure to name the file `contract.py`. For logic signatures, name it `signature.py`.
48 | 4. For test files use `test_contract.py` or `test_signature.py` respectively.
49 | 5. Use the default PR template when opening a PR, and describe what sort of example are you adding as well as which feature of `algorand-python-testing` it demonstrates.
50 |
51 | ## Resources
52 |
53 | - [Algorand Developer Documentation](https://developer.algorand.org/)
54 | - [algorand-python](https://algorandfoundation.github.io/puya/)
55 | - [algorand-python-testing](https://algorandfoundation.github.io/algorand-python-testing/)
56 | - ['arrange, act, assert' patern](https://automationpanda.com/2020/07/07/arrange-act-assert-a-pattern-for-writing-good-tests/)
57 |
```
--------------------------------------------------------------------------------
/packages/server/src/tools/knowledgeManager.ts:
--------------------------------------------------------------------------------
```typescript
1 | import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
2 | import fs from 'fs/promises';
3 | import path from 'path';
4 | import { fileURLToPath } from 'url';
5 |
6 | // Tool schemas
7 | export const knowledgeToolSchemas = {
8 | getKnowledgeDoc: {
9 | type: 'object',
10 | properties: {
11 | documents: {
12 | type: 'array',
13 | items: { type: 'string' },
14 | description: 'Array of document keys (e.g. ["ARCs:specs:arc-0020.md"])'
15 | }
16 | },
17 | required: ['documents']
18 | }
19 | };
20 |
21 | export class KnowledgeManager {
22 | static readonly knowledgeTools = [
23 | {
24 | name: 'get_knowledge_doc',
25 | description: 'Get markdown content for specified knowledge documents',
26 | inputSchema: knowledgeToolSchemas.getKnowledgeDoc,
27 | }
28 | ];
29 |
30 | // Tool handlers
31 | static async handleTool(name: string, args: Record<string, unknown>) {
32 | try {
33 | switch (name) {
34 | case 'get_knowledge_doc':
35 | if (!Array.isArray(args.documents)) {
36 | throw new McpError(ErrorCode.InvalidParams, 'Documents array is required');
37 | }
38 |
39 | const results = await Promise.all(args.documents.map(async (docKey) => {
40 | if (typeof docKey !== 'string') {
41 | throw new McpError(ErrorCode.InvalidParams, 'Document key must be a string');
42 | }
43 | const __dirname = path.dirname(fileURLToPath(import.meta.url));
44 | const twoLevelsUp = path.resolve(__dirname, '../');
45 | console.log('Current directory:', __dirname);
46 | try {
47 | const filePath = path.resolve(
48 | twoLevelsUp,
49 | 'resources/knowledge/taxonomy',
50 | docKey
51 | );
52 | const content = await fs.readFile(filePath, 'utf-8');
53 | return content;
54 | } catch (error) {
55 | console.error(`[MCP Error] Failed to read document ${docKey}:`, error);
56 | throw new McpError(
57 | ErrorCode.InternalError,
58 | `Failed to read document ${docKey}: ${error instanceof Error ? error.message : 'Unknown error'}`
59 | );
60 | }
61 | }));
62 |
63 | return {
64 | content: [{
65 | type: 'text',
66 | text: JSON.stringify({ documents: results }, null, 2)
67 | }]
68 | };
69 |
70 | default:
71 | console.error(`[MCP Error] Unknown tool requested: ${name}`);
72 | throw new McpError(
73 | ErrorCode.MethodNotFound,
74 | `Unknown tool: ${name}`
75 | );
76 | }
77 | } catch (error) {
78 | if (error instanceof McpError) {
79 | console.error(`[MCP Error] ${error.code}: ${error.message}`);
80 | throw error;
81 | }
82 | console.error('[MCP Error] Unexpected error:', error);
83 | throw new McpError(
84 | ErrorCode.InternalError,
85 | `Operation failed: ${error instanceof Error ? error.message : 'Unknown error'}`
86 | );
87 | }
88 | }
89 | }
90 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:indexerModels.ApplicationStateSchema.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / ApplicationStateSchema
2 |
3 | # Class: ApplicationStateSchema
4 |
5 | [indexerModels](../modules/indexerModels.md).ApplicationStateSchema
6 |
7 | Specifies maximums on the number of each type that may be stored.
8 |
9 | ## Hierarchy
10 |
11 | - `default`
12 |
13 | ↳ **`ApplicationStateSchema`**
14 |
15 | ## Table of contents
16 |
17 | ### Constructors
18 |
19 | - [constructor](indexerModels.ApplicationStateSchema.md#constructor)
20 |
21 | ### Properties
22 |
23 | - [attribute\_map](indexerModels.ApplicationStateSchema.md#attribute_map)
24 | - [numByteSlice](indexerModels.ApplicationStateSchema.md#numbyteslice)
25 | - [numUint](indexerModels.ApplicationStateSchema.md#numuint)
26 |
27 | ### Methods
28 |
29 | - [get\_obj\_for\_encoding](indexerModels.ApplicationStateSchema.md#get_obj_for_encoding)
30 | - [from\_obj\_for\_encoding](indexerModels.ApplicationStateSchema.md#from_obj_for_encoding)
31 |
32 | ## Constructors
33 |
34 | ### constructor
35 |
36 | • **new ApplicationStateSchema**(`«destructured»`)
37 |
38 | Creates a new `ApplicationStateSchema` object.
39 |
40 | #### Parameters
41 |
42 | | Name | Type |
43 | | :------ | :------ |
44 | | `«destructured»` | `Object` |
45 | | › `numByteSlice` | `number` \| `bigint` |
46 | | › `numUint` | `number` \| `bigint` |
47 |
48 | #### Overrides
49 |
50 | BaseModel.constructor
51 |
52 | #### Defined in
53 |
54 | client/v2/indexer/models/types.ts:1366
55 |
56 | ## Properties
57 |
58 | ### attribute\_map
59 |
60 | • **attribute\_map**: `Record`\<`string`, `string`\>
61 |
62 | #### Inherited from
63 |
64 | BaseModel.attribute\_map
65 |
66 | #### Defined in
67 |
68 | client/v2/basemodel.ts:56
69 |
70 | ___
71 |
72 | ### numByteSlice
73 |
74 | • **numByteSlice**: `number` \| `bigint`
75 |
76 | number of byte slices.
77 |
78 | #### Defined in
79 |
80 | client/v2/indexer/models/types.ts:1354
81 |
82 | ___
83 |
84 | ### numUint
85 |
86 | • **numUint**: `number` \| `bigint`
87 |
88 | number of uints.
89 |
90 | #### Defined in
91 |
92 | client/v2/indexer/models/types.ts:1359
93 |
94 | ## Methods
95 |
96 | ### get\_obj\_for\_encoding
97 |
98 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
99 |
100 | Get an object ready for encoding to either JSON or msgpack.
101 |
102 | #### Parameters
103 |
104 | | Name | Type | Default value | Description |
105 | | :------ | :------ | :------ | :------ |
106 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
107 |
108 | #### Returns
109 |
110 | `Record`\<`string`, `any`\>
111 |
112 | #### Inherited from
113 |
114 | BaseModel.get\_obj\_for\_encoding
115 |
116 | #### Defined in
117 |
118 | client/v2/basemodel.ts:65
119 |
120 | ___
121 |
122 | ### from\_obj\_for\_encoding
123 |
124 | ▸ `Static` **from_obj_for_encoding**(`data`): [`ApplicationStateSchema`](indexerModels.ApplicationStateSchema.md)
125 |
126 | #### Parameters
127 |
128 | | Name | Type |
129 | | :------ | :------ |
130 | | `data` | `Record`\<`string`, `any`\> |
131 |
132 | #### Returns
133 |
134 | [`ApplicationStateSchema`](indexerModels.ApplicationStateSchema.md)
135 |
136 | #### Defined in
137 |
138 | client/v2/indexer/models/types.ts:1384
139 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.AssetHolding.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / AssetHolding
2 |
3 | # Class: AssetHolding
4 |
5 | [modelsv2](../modules/modelsv2.md).AssetHolding
6 |
7 | Describes an asset held by an account.
8 | Definition:
9 | data/basics/userBalance.go : AssetHolding
10 |
11 | ## Hierarchy
12 |
13 | - `default`
14 |
15 | ↳ **`AssetHolding`**
16 |
17 | ## Table of contents
18 |
19 | ### Constructors
20 |
21 | - [constructor](modelsv2.AssetHolding.md#constructor)
22 |
23 | ### Properties
24 |
25 | - [amount](modelsv2.AssetHolding.md#amount)
26 | - [assetId](modelsv2.AssetHolding.md#assetid)
27 | - [attribute\_map](modelsv2.AssetHolding.md#attribute_map)
28 | - [isFrozen](modelsv2.AssetHolding.md#isfrozen)
29 |
30 | ### Methods
31 |
32 | - [get\_obj\_for\_encoding](modelsv2.AssetHolding.md#get_obj_for_encoding)
33 | - [from\_obj\_for\_encoding](modelsv2.AssetHolding.md#from_obj_for_encoding)
34 |
35 | ## Constructors
36 |
37 | ### constructor
38 |
39 | • **new AssetHolding**(`«destructured»`)
40 |
41 | Creates a new `AssetHolding` object.
42 |
43 | #### Parameters
44 |
45 | | Name | Type |
46 | | :------ | :------ |
47 | | `«destructured»` | `Object` |
48 | | › `amount` | `number` \| `bigint` |
49 | | › `assetId` | `number` \| `bigint` |
50 | | › `isFrozen` | `boolean` |
51 |
52 | #### Overrides
53 |
54 | BaseModel.constructor
55 |
56 | #### Defined in
57 |
58 | client/v2/algod/models/types.ts:1636
59 |
60 | ## Properties
61 |
62 | ### amount
63 |
64 | • **amount**: `number` \| `bigint`
65 |
66 | (a) number of units held.
67 |
68 | #### Defined in
69 |
70 | client/v2/algod/models/types.ts:1618
71 |
72 | ___
73 |
74 | ### assetId
75 |
76 | • **assetId**: `number` \| `bigint`
77 |
78 | Asset ID of the holding.
79 |
80 | #### Defined in
81 |
82 | client/v2/algod/models/types.ts:1623
83 |
84 | ___
85 |
86 | ### attribute\_map
87 |
88 | • **attribute\_map**: `Record`\<`string`, `string`\>
89 |
90 | #### Inherited from
91 |
92 | BaseModel.attribute\_map
93 |
94 | #### Defined in
95 |
96 | client/v2/basemodel.ts:56
97 |
98 | ___
99 |
100 | ### isFrozen
101 |
102 | • **isFrozen**: `boolean`
103 |
104 | (f) whether or not the holding is frozen.
105 |
106 | #### Defined in
107 |
108 | client/v2/algod/models/types.ts:1628
109 |
110 | ## Methods
111 |
112 | ### get\_obj\_for\_encoding
113 |
114 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
115 |
116 | Get an object ready for encoding to either JSON or msgpack.
117 |
118 | #### Parameters
119 |
120 | | Name | Type | Default value | Description |
121 | | :------ | :------ | :------ | :------ |
122 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
123 |
124 | #### Returns
125 |
126 | `Record`\<`string`, `any`\>
127 |
128 | #### Inherited from
129 |
130 | BaseModel.get\_obj\_for\_encoding
131 |
132 | #### Defined in
133 |
134 | client/v2/basemodel.ts:65
135 |
136 | ___
137 |
138 | ### from\_obj\_for\_encoding
139 |
140 | ▸ `Static` **from_obj_for_encoding**(`data`): [`AssetHolding`](modelsv2.AssetHolding.md)
141 |
142 | #### Parameters
143 |
144 | | Name | Type |
145 | | :------ | :------ |
146 | | `data` | `Record`\<`string`, `any`\> |
147 |
148 | #### Returns
149 |
150 | [`AssetHolding`](modelsv2.AssetHolding.md)
151 |
152 | #### Defined in
153 |
154 | client/v2/algod/models/types.ts:1658
155 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:indexerModels.StateProofSigSlot.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / StateProofSigSlot
2 |
3 | # Class: StateProofSigSlot
4 |
5 | [indexerModels](../modules/indexerModels.md).StateProofSigSlot
6 |
7 | ## Hierarchy
8 |
9 | - `default`
10 |
11 | ↳ **`StateProofSigSlot`**
12 |
13 | ## Table of contents
14 |
15 | ### Constructors
16 |
17 | - [constructor](indexerModels.StateProofSigSlot.md#constructor)
18 |
19 | ### Properties
20 |
21 | - [attribute\_map](indexerModels.StateProofSigSlot.md#attribute_map)
22 | - [lowerSigWeight](indexerModels.StateProofSigSlot.md#lowersigweight)
23 | - [signature](indexerModels.StateProofSigSlot.md#signature)
24 |
25 | ### Methods
26 |
27 | - [get\_obj\_for\_encoding](indexerModels.StateProofSigSlot.md#get_obj_for_encoding)
28 | - [from\_obj\_for\_encoding](indexerModels.StateProofSigSlot.md#from_obj_for_encoding)
29 |
30 | ## Constructors
31 |
32 | ### constructor
33 |
34 | • **new StateProofSigSlot**(`«destructured»`)
35 |
36 | Creates a new `StateProofSigSlot` object.
37 |
38 | #### Parameters
39 |
40 | | Name | Type |
41 | | :------ | :------ |
42 | | `«destructured»` | `Object` |
43 | | › `lowerSigWeight?` | `number` \| `bigint` |
44 | | › `signature?` | [`StateProofSignature`](indexerModels.StateProofSignature.md) |
45 |
46 | #### Overrides
47 |
48 | BaseModel.constructor
49 |
50 | #### Defined in
51 |
52 | client/v2/indexer/models/types.ts:3705
53 |
54 | ## Properties
55 |
56 | ### attribute\_map
57 |
58 | • **attribute\_map**: `Record`\<`string`, `string`\>
59 |
60 | #### Inherited from
61 |
62 | BaseModel.attribute\_map
63 |
64 | #### Defined in
65 |
66 | client/v2/basemodel.ts:56
67 |
68 | ___
69 |
70 | ### lowerSigWeight
71 |
72 | • `Optional` **lowerSigWeight**: `number` \| `bigint`
73 |
74 | (l) The total weight of signatures in the lower-numbered slots.
75 |
76 | #### Defined in
77 |
78 | client/v2/indexer/models/types.ts:3696
79 |
80 | ___
81 |
82 | ### signature
83 |
84 | • `Optional` **signature**: [`StateProofSignature`](indexerModels.StateProofSignature.md)
85 |
86 | #### Defined in
87 |
88 | client/v2/indexer/models/types.ts:3698
89 |
90 | ## Methods
91 |
92 | ### get\_obj\_for\_encoding
93 |
94 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
95 |
96 | Get an object ready for encoding to either JSON or msgpack.
97 |
98 | #### Parameters
99 |
100 | | Name | Type | Default value | Description |
101 | | :------ | :------ | :------ | :------ |
102 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
103 |
104 | #### Returns
105 |
106 | `Record`\<`string`, `any`\>
107 |
108 | #### Inherited from
109 |
110 | BaseModel.get\_obj\_for\_encoding
111 |
112 | #### Defined in
113 |
114 | client/v2/basemodel.ts:65
115 |
116 | ___
117 |
118 | ### from\_obj\_for\_encoding
119 |
120 | ▸ `Static` **from_obj_for_encoding**(`data`): [`StateProofSigSlot`](indexerModels.StateProofSigSlot.md)
121 |
122 | #### Parameters
123 |
124 | | Name | Type |
125 | | :------ | :------ |
126 | | `data` | `Record`\<`string`, `any`\> |
127 |
128 | #### Returns
129 |
130 | [`StateProofSigSlot`](indexerModels.StateProofSigSlot.md)
131 |
132 | #### Defined in
133 |
134 | client/v2/indexer/models/types.ts:3723
135 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.Version.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / Version
2 |
3 | # Class: Version
4 |
5 | [modelsv2](../modules/modelsv2.md).Version
6 |
7 | algod version information.
8 |
9 | ## Hierarchy
10 |
11 | - `default`
12 |
13 | ↳ **`Version`**
14 |
15 | ## Table of contents
16 |
17 | ### Constructors
18 |
19 | - [constructor](modelsv2.Version.md#constructor)
20 |
21 | ### Properties
22 |
23 | - [attribute\_map](modelsv2.Version.md#attribute_map)
24 | - [build](modelsv2.Version.md#build)
25 | - [genesisHashB64](modelsv2.Version.md#genesishashb64)
26 | - [genesisId](modelsv2.Version.md#genesisid)
27 | - [versions](modelsv2.Version.md#versions)
28 |
29 | ### Methods
30 |
31 | - [get\_obj\_for\_encoding](modelsv2.Version.md#get_obj_for_encoding)
32 | - [from\_obj\_for\_encoding](modelsv2.Version.md#from_obj_for_encoding)
33 |
34 | ## Constructors
35 |
36 | ### constructor
37 |
38 | • **new Version**(`«destructured»`)
39 |
40 | Creates a new `Version` object.
41 |
42 | #### Parameters
43 |
44 | | Name | Type |
45 | | :------ | :------ |
46 | | `«destructured»` | `Object` |
47 | | › `build` | [`BuildVersion`](modelsv2.BuildVersion.md) |
48 | | › `genesisHashB64` | `string` \| `Uint8Array` |
49 | | › `genesisId` | `string` |
50 | | › `versions` | `string`[] |
51 |
52 | #### Overrides
53 |
54 | BaseModel.constructor
55 |
56 | #### Defined in
57 |
58 | client/v2/algod/models/types.ts:6012
59 |
60 | ## Properties
61 |
62 | ### attribute\_map
63 |
64 | • **attribute\_map**: `Record`\<`string`, `string`\>
65 |
66 | #### Inherited from
67 |
68 | BaseModel.attribute\_map
69 |
70 | #### Defined in
71 |
72 | client/v2/basemodel.ts:56
73 |
74 | ___
75 |
76 | ### build
77 |
78 | • **build**: [`BuildVersion`](modelsv2.BuildVersion.md)
79 |
80 | #### Defined in
81 |
82 | client/v2/algod/models/types.ts:5997
83 |
84 | ___
85 |
86 | ### genesisHashB64
87 |
88 | • **genesisHashB64**: `Uint8Array`
89 |
90 | #### Defined in
91 |
92 | client/v2/algod/models/types.ts:5999
93 |
94 | ___
95 |
96 | ### genesisId
97 |
98 | • **genesisId**: `string`
99 |
100 | #### Defined in
101 |
102 | client/v2/algod/models/types.ts:6001
103 |
104 | ___
105 |
106 | ### versions
107 |
108 | • **versions**: `string`[]
109 |
110 | #### Defined in
111 |
112 | client/v2/algod/models/types.ts:6003
113 |
114 | ## Methods
115 |
116 | ### get\_obj\_for\_encoding
117 |
118 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
119 |
120 | Get an object ready for encoding to either JSON or msgpack.
121 |
122 | #### Parameters
123 |
124 | | Name | Type | Default value | Description |
125 | | :------ | :------ | :------ | :------ |
126 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
127 |
128 | #### Returns
129 |
130 | `Record`\<`string`, `any`\>
131 |
132 | #### Inherited from
133 |
134 | BaseModel.get\_obj\_for\_encoding
135 |
136 | #### Defined in
137 |
138 | client/v2/basemodel.ts:65
139 |
140 | ___
141 |
142 | ### from\_obj\_for\_encoding
143 |
144 | ▸ `Static` **from_obj_for_encoding**(`data`): [`Version`](modelsv2.Version.md)
145 |
146 | #### Parameters
147 |
148 | | Name | Type |
149 | | :------ | :------ |
150 | | `data` | `Record`\<`string`, `any`\> |
151 |
152 | #### Returns
153 |
154 | [`Version`](modelsv2.Version.md)
155 |
156 | #### Defined in
157 |
158 | client/v2/algod/models/types.ts:6041
159 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:indexerModels.ApplicationResponse.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [indexerModels](../modules/indexerModels.md) / ApplicationResponse
2 |
3 | # Class: ApplicationResponse
4 |
5 | [indexerModels](../modules/indexerModels.md).ApplicationResponse
6 |
7 | ## Hierarchy
8 |
9 | - `default`
10 |
11 | ↳ **`ApplicationResponse`**
12 |
13 | ## Table of contents
14 |
15 | ### Constructors
16 |
17 | - [constructor](indexerModels.ApplicationResponse.md#constructor)
18 |
19 | ### Properties
20 |
21 | - [application](indexerModels.ApplicationResponse.md#application)
22 | - [attribute\_map](indexerModels.ApplicationResponse.md#attribute_map)
23 | - [currentRound](indexerModels.ApplicationResponse.md#currentround)
24 |
25 | ### Methods
26 |
27 | - [get\_obj\_for\_encoding](indexerModels.ApplicationResponse.md#get_obj_for_encoding)
28 | - [from\_obj\_for\_encoding](indexerModels.ApplicationResponse.md#from_obj_for_encoding)
29 |
30 | ## Constructors
31 |
32 | ### constructor
33 |
34 | • **new ApplicationResponse**(`«destructured»`)
35 |
36 | Creates a new `ApplicationResponse` object.
37 |
38 | #### Parameters
39 |
40 | | Name | Type |
41 | | :------ | :------ |
42 | | `«destructured»` | `Object` |
43 | | › `application?` | [`Application`](indexerModels.Application.md) |
44 | | › `currentRound` | `number` \| `bigint` |
45 |
46 | #### Overrides
47 |
48 | BaseModel.constructor
49 |
50 | #### Defined in
51 |
52 | client/v2/indexer/models/types.ts:1312
53 |
54 | ## Properties
55 |
56 | ### application
57 |
58 | • `Optional` **application**: [`Application`](indexerModels.Application.md)
59 |
60 | Application index and its parameters
61 |
62 | #### Defined in
63 |
64 | client/v2/indexer/models/types.ts:1305
65 |
66 | ___
67 |
68 | ### attribute\_map
69 |
70 | • **attribute\_map**: `Record`\<`string`, `string`\>
71 |
72 | #### Inherited from
73 |
74 | BaseModel.attribute\_map
75 |
76 | #### Defined in
77 |
78 | client/v2/basemodel.ts:56
79 |
80 | ___
81 |
82 | ### currentRound
83 |
84 | • **currentRound**: `number` \| `bigint`
85 |
86 | Round at which the results were computed.
87 |
88 | #### Defined in
89 |
90 | client/v2/indexer/models/types.ts:1300
91 |
92 | ## Methods
93 |
94 | ### get\_obj\_for\_encoding
95 |
96 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
97 |
98 | Get an object ready for encoding to either JSON or msgpack.
99 |
100 | #### Parameters
101 |
102 | | Name | Type | Default value | Description |
103 | | :------ | :------ | :------ | :------ |
104 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
105 |
106 | #### Returns
107 |
108 | `Record`\<`string`, `any`\>
109 |
110 | #### Inherited from
111 |
112 | BaseModel.get\_obj\_for\_encoding
113 |
114 | #### Defined in
115 |
116 | client/v2/basemodel.ts:65
117 |
118 | ___
119 |
120 | ### from\_obj\_for\_encoding
121 |
122 | ▸ `Static` **from_obj_for_encoding**(`data`): [`ApplicationResponse`](indexerModels.ApplicationResponse.md)
123 |
124 | #### Parameters
125 |
126 | | Name | Type |
127 | | :------ | :------ |
128 | | `data` | `Record`\<`string`, `any`\> |
129 |
130 | #### Returns
131 |
132 | [`ApplicationResponse`](indexerModels.ApplicationResponse.md)
133 |
134 | #### Defined in
135 |
136 | client/v2/indexer/models/types.ts:1330
137 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/tealscript:guides_lifecycle.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: Lifecycle Methods
3 | ---
4 |
5 | ## Create, Update, and Delete
6 |
7 | By default, Algorand applications can be created, updated, and deleted. In TEALScript, applications can be created by default, but cannot be updated to deleted. The default `createApplication` method won't run any logic, but rather simply create the application on the chain.
8 |
9 | ### Modifying create logic
10 |
11 | To modify the logic executed upon applicaiton creation (for example, to set default storage values) your contract class must implement a method to override `createApplication`.
12 |
13 | #### Example
14 |
15 | ```typescript
16 | class Counter extends Contract {
17 | counter = GlobalStateKey<uint64>();
18 |
19 | createApplication(startingNumber: uint64): void {
20 | this.counter.value = startingNumber
21 | }
22 | }
23 | ```
24 |
25 | ### Implementing a updateApplication Method
26 |
27 | By default, TEALScript contracts cannot be updated. To allow a contract to be updated, a method that overrides `Contract.updateApplication` must be implemented.
28 |
29 | #### Example
30 |
31 | ```typescript
32 | class Counter extends Contract {
33 | counter = GlobalStateKey<uint64>();
34 |
35 | createApplication(startingNumber: uint64): void {
36 | this.counter.value = startingNumber
37 | }
38 |
39 | updateApplication(): void {
40 | assert(this.txn.sender === this.app.creator)
41 | }
42 | }
43 | ```
44 |
45 | ### Implementing a deleteApplication Method
46 |
47 | By defualt, TEALScript contracts cannot be deleted. To allow a contract to be deleted, a method that overrides `deleteApplication` must be implemented.
48 |
49 | #### Example
50 |
51 | ```typescript
52 | class Counter extends Contract {
53 | counter = GlobalStateKey<uint64>();
54 |
55 | createApplication(startingNumber: uint64): void {
56 | this.counter.value = startingNumber
57 | }
58 |
59 | deleteApplication(): void {
60 | assert(this.txn.sender === this.app.creator)
61 | }
62 | }
63 | ```
64 |
65 | ## OptIn, CloseOut, and ClearState
66 |
67 | If your contract uses local state, you will need to override the `optInToApplication` method and override `closeOutOfApplication` and/or `clearState` as desired. To learn more about contract state, see [this page](./storage.md)
68 |
69 | ## Advanced OnComplete Control
70 |
71 | To have more granular control on what OnComplete a specific method allows, use the `allow.call` or `allow.create` decorator to control allowed OnCompletes when calling or creating the application.
72 |
73 | ### Example
74 |
75 | ```typescript
76 | class Counter extends Contract {
77 | counter = LocalStateKey<uint64>();
78 |
79 | // This method will increment a counter in local state
80 | @allow.create('OptIn') // Allow an OptIn create so the creators counter can be set when creating the app
81 | @allow.call('OptIn') // Allow anyone to OptIn to the contract so they can use local state
82 | @allow.call('NoOp') // Allow anyone to call the app again with a NoOp call (can only OptIn once)
83 | useLocalState(): void {
84 | if (!this.counter(this.txn.sender).exists) this.counter(this.txn.sender).value = 1
85 | else this.counter(this.txn.sender).value = this.counter(this.txn.sender).value + 1
86 | }
87 | }
88 | ```
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/algokit:utils:typescript:README.md:
--------------------------------------------------------------------------------
```markdown
1 | # AlgoKit TypeScript Utilities
2 |
3 | A set of core Algorand utilities written in TypeScript and released via npm that make it easier to build solutions on Algorand. This project is part of [AlgoKit](https://github.com/algorandfoundation/algokit-cli).
4 |
5 | The goal of this library is to provide intuitive, productive utility functions that make it easier, quicker and safer to build applications on Algorand. Largely these functions wrap the underlying Algorand SDK, but provide a higher level interface with sensible defaults and capabilities for common tasks.
6 |
7 | Note: If you prefer Python there's an equivalent [Python utility library](https://github.com/algorandfoundation/algokit-utils-py).
8 |
9 | [Install](#install) | [Documentation](./docs/README.md)
10 |
11 | ## Install
12 |
13 | Before installing, you'll need to decide on the version you want to target. Version 7 and 8 have the same feature set, however v7 leverages algosdk@>=2.9.0<3.0, whereas v8 leverages algosdk@>=3.0.0. Your project and it's dependencies will help you decide which version to target.
14 |
15 | Once you've decided on the target version, this library can be installed from NPM using your favourite npm client, e.g.:
16 |
17 | To target algosdk@2 and use version 7 of AlgoKit Utils, run the below:
18 |
19 | ```
20 | npm install algosdk@^2.9.0 @algorandfoundation/algokit-utils@^7.0.0
21 | ```
22 |
23 | To target algosdk@3 and use the latest version of AlgoKit Utils, run the below:
24 |
25 | ```
26 | npm install algosdk@^3.0.0 @algorandfoundation/algokit-utils
27 | ```
28 |
29 | Now you can import the library:
30 |
31 | ```typescript
32 | import { AlgorandClient, Config } from '@algorandfoundation/algokit-utils'
33 | ```
34 |
35 | See [usage](./docs/README.md#usage) for more details.
36 |
37 | ## Migration
38 |
39 | Whilst we aim to minimise breaking changes, there are situations where they are required.
40 | JSDoc deprecations should guide you through most migration paths inside your IDE, however the migration guides will provide more detailed information should you need it.
41 |
42 | If you're targetting v7, please refer to the [v7 migration guide](./docs/v7-migration.md).
43 | If you're targetting v8, please refer to the [v8 migration guide](./docs/v8-migration.md).
44 |
45 | ## Guiding principles
46 |
47 | This library follows the [Guiding Principles of AlgoKit](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/algokit.md#guiding-principles).
48 |
49 | ## Contributing
50 |
51 | This is an open source project managed by the Algorand Foundation. See the [AlgoKit contributing page](https://github.com/algorandfoundation/algokit-cli/blob/main/CONTRIBUTING.md) to learn about making improvements.
52 |
53 | To successfully run the tests in this repository you need to be running LocalNet via [AlgoKit](https://github.com/algorandfoundation/algokit-cli) and also have package dependencies and `.env.template` copied to `.env` (both of which `algokit bootstrap all` can do for you):
54 |
55 | ```
56 | algokit bootstrap all
57 | algokit localnet start
58 | ```
59 |
60 | To run tests you can use VS Code, or:
61 |
62 | ```
63 | npm run test
64 | ```
65 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.BlockLogsResponse.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / BlockLogsResponse
2 |
3 | # Class: BlockLogsResponse
4 |
5 | [modelsv2](../modules/modelsv2.md).BlockLogsResponse
6 |
7 | All logs emitted in the given round. Each app call, whether top-level or inner,
8 | that contains logs results in a separate AppCallLogs object. Therefore there may
9 | be multiple AppCallLogs with the same application ID and outer transaction ID in
10 | the event of multiple inner app calls to the same app. App calls with no logs
11 | are not included in the response. AppCallLogs are returned in the same order
12 | that their corresponding app call appeared in the block (pre-order traversal of
13 | inner app calls)
14 |
15 | ## Hierarchy
16 |
17 | - `default`
18 |
19 | ↳ **`BlockLogsResponse`**
20 |
21 | ## Table of contents
22 |
23 | ### Constructors
24 |
25 | - [constructor](modelsv2.BlockLogsResponse.md#constructor)
26 |
27 | ### Properties
28 |
29 | - [attribute\_map](modelsv2.BlockLogsResponse.md#attribute_map)
30 | - [logs](modelsv2.BlockLogsResponse.md#logs)
31 |
32 | ### Methods
33 |
34 | - [get\_obj\_for\_encoding](modelsv2.BlockLogsResponse.md#get_obj_for_encoding)
35 | - [from\_obj\_for\_encoding](modelsv2.BlockLogsResponse.md#from_obj_for_encoding)
36 |
37 | ## Constructors
38 |
39 | ### constructor
40 |
41 | • **new BlockLogsResponse**(`logs`)
42 |
43 | Creates a new `BlockLogsResponse` object.
44 |
45 | #### Parameters
46 |
47 | | Name | Type |
48 | | :------ | :------ |
49 | | `logs` | `Object` |
50 | | `logs.logs` | [`AppCallLogs`](modelsv2.AppCallLogs.md)[] |
51 |
52 | #### Overrides
53 |
54 | BaseModel.constructor
55 |
56 | #### Defined in
57 |
58 | client/v2/algod/models/types.ts:2117
59 |
60 | ## Properties
61 |
62 | ### attribute\_map
63 |
64 | • **attribute\_map**: `Record`\<`string`, `string`\>
65 |
66 | #### Inherited from
67 |
68 | BaseModel.attribute\_map
69 |
70 | #### Defined in
71 |
72 | client/v2/basemodel.ts:56
73 |
74 | ___
75 |
76 | ### logs
77 |
78 | • **logs**: [`AppCallLogs`](modelsv2.AppCallLogs.md)[]
79 |
80 | #### Defined in
81 |
82 | client/v2/algod/models/types.ts:2111
83 |
84 | ## Methods
85 |
86 | ### get\_obj\_for\_encoding
87 |
88 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
89 |
90 | Get an object ready for encoding to either JSON or msgpack.
91 |
92 | #### Parameters
93 |
94 | | Name | Type | Default value | Description |
95 | | :------ | :------ | :------ | :------ |
96 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
97 |
98 | #### Returns
99 |
100 | `Record`\<`string`, `any`\>
101 |
102 | #### Inherited from
103 |
104 | BaseModel.get\_obj\_for\_encoding
105 |
106 | #### Defined in
107 |
108 | client/v2/basemodel.ts:65
109 |
110 | ___
111 |
112 | ### from\_obj\_for\_encoding
113 |
114 | ▸ `Static` **from_obj_for_encoding**(`data`): [`BlockLogsResponse`](modelsv2.BlockLogsResponse.md)
115 |
116 | #### Parameters
117 |
118 | | Name | Type |
119 | | :------ | :------ |
120 | | `data` | `Record`\<`string`, `any`\> |
121 |
122 | #### Returns
123 |
124 | [`BlockLogsResponse`](modelsv2.BlockLogsResponse.md)
125 |
126 | #### Defined in
127 |
128 | client/v2/algod/models/types.ts:2127
129 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.SupplyResponse.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / SupplyResponse
2 |
3 | # Class: SupplyResponse
4 |
5 | [modelsv2](../modules/modelsv2.md).SupplyResponse
6 |
7 | Supply represents the current supply of MicroAlgos in the system.
8 |
9 | ## Hierarchy
10 |
11 | - `default`
12 |
13 | ↳ **`SupplyResponse`**
14 |
15 | ## Table of contents
16 |
17 | ### Constructors
18 |
19 | - [constructor](modelsv2.SupplyResponse.md#constructor)
20 |
21 | ### Properties
22 |
23 | - [attribute\_map](modelsv2.SupplyResponse.md#attribute_map)
24 | - [currentRound](modelsv2.SupplyResponse.md#currentround)
25 | - [onlineMoney](modelsv2.SupplyResponse.md#onlinemoney)
26 | - [totalMoney](modelsv2.SupplyResponse.md#totalmoney)
27 |
28 | ### Methods
29 |
30 | - [get\_obj\_for\_encoding](modelsv2.SupplyResponse.md#get_obj_for_encoding)
31 | - [from\_obj\_for\_encoding](modelsv2.SupplyResponse.md#from_obj_for_encoding)
32 |
33 | ## Constructors
34 |
35 | ### constructor
36 |
37 | • **new SupplyResponse**(`«destructured»`)
38 |
39 | Creates a new `SupplyResponse` object.
40 |
41 | #### Parameters
42 |
43 | | Name | Type |
44 | | :------ | :------ |
45 | | `«destructured»` | `Object` |
46 | | › `currentRound` | `number` \| `bigint` |
47 | | › `onlineMoney` | `number` \| `bigint` |
48 | | › `totalMoney` | `number` \| `bigint` |
49 |
50 | #### Overrides
51 |
52 | BaseModel.constructor
53 |
54 | #### Defined in
55 |
56 | client/v2/algod/models/types.ts:5573
57 |
58 | ## Properties
59 |
60 | ### attribute\_map
61 |
62 | • **attribute\_map**: `Record`\<`string`, `string`\>
63 |
64 | #### Inherited from
65 |
66 | BaseModel.attribute\_map
67 |
68 | #### Defined in
69 |
70 | client/v2/basemodel.ts:56
71 |
72 | ___
73 |
74 | ### currentRound
75 |
76 | • **currentRound**: `number` \| `bigint`
77 |
78 | Round
79 |
80 | #### Defined in
81 |
82 | client/v2/algod/models/types.ts:5555
83 |
84 | ___
85 |
86 | ### onlineMoney
87 |
88 | • **onlineMoney**: `number` \| `bigint`
89 |
90 | OnlineMoney
91 |
92 | #### Defined in
93 |
94 | client/v2/algod/models/types.ts:5560
95 |
96 | ___
97 |
98 | ### totalMoney
99 |
100 | • **totalMoney**: `number` \| `bigint`
101 |
102 | TotalMoney
103 |
104 | #### Defined in
105 |
106 | client/v2/algod/models/types.ts:5565
107 |
108 | ## Methods
109 |
110 | ### get\_obj\_for\_encoding
111 |
112 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
113 |
114 | Get an object ready for encoding to either JSON or msgpack.
115 |
116 | #### Parameters
117 |
118 | | Name | Type | Default value | Description |
119 | | :------ | :------ | :------ | :------ |
120 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
121 |
122 | #### Returns
123 |
124 | `Record`\<`string`, `any`\>
125 |
126 | #### Inherited from
127 |
128 | BaseModel.get\_obj\_for\_encoding
129 |
130 | #### Defined in
131 |
132 | client/v2/basemodel.ts:65
133 |
134 | ___
135 |
136 | ### from\_obj\_for\_encoding
137 |
138 | ▸ `Static` **from_obj_for_encoding**(`data`): [`SupplyResponse`](modelsv2.SupplyResponse.md)
139 |
140 | #### Parameters
141 |
142 | | Name | Type |
143 | | :------ | :------ |
144 | | `data` | `Record`\<`string`, `any`\> |
145 |
146 | #### Returns
147 |
148 | [`SupplyResponse`](modelsv2.SupplyResponse.md)
149 |
150 | #### Defined in
151 |
152 | client/v2/algod/models/types.ts:5595
153 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/SDKs:javascript:classes:modelsv2.DryrunResponse.md:
--------------------------------------------------------------------------------
```markdown
1 | [algosdk](../README.md) / [Exports](../modules.md) / [modelsv2](../modules/modelsv2.md) / DryrunResponse
2 |
3 | # Class: DryrunResponse
4 |
5 | [modelsv2](../modules/modelsv2.md).DryrunResponse
6 |
7 | DryrunResponse contains per-txn debug information from a dryrun.
8 |
9 | ## Hierarchy
10 |
11 | - `default`
12 |
13 | ↳ **`DryrunResponse`**
14 |
15 | ## Table of contents
16 |
17 | ### Constructors
18 |
19 | - [constructor](modelsv2.DryrunResponse.md#constructor)
20 |
21 | ### Properties
22 |
23 | - [attribute\_map](modelsv2.DryrunResponse.md#attribute_map)
24 | - [error](modelsv2.DryrunResponse.md#error)
25 | - [protocolVersion](modelsv2.DryrunResponse.md#protocolversion)
26 | - [txns](modelsv2.DryrunResponse.md#txns)
27 |
28 | ### Methods
29 |
30 | - [get\_obj\_for\_encoding](modelsv2.DryrunResponse.md#get_obj_for_encoding)
31 | - [from\_obj\_for\_encoding](modelsv2.DryrunResponse.md#from_obj_for_encoding)
32 |
33 | ## Constructors
34 |
35 | ### constructor
36 |
37 | • **new DryrunResponse**(`«destructured»`)
38 |
39 | Creates a new `DryrunResponse` object.
40 |
41 | #### Parameters
42 |
43 | | Name | Type |
44 | | :------ | :------ |
45 | | `«destructured»` | `Object` |
46 | | › `error` | `string` |
47 | | › `protocolVersion` | `string` |
48 | | › `txns` | [`DryrunTxnResult`](modelsv2.DryrunTxnResult.md)[] |
49 |
50 | #### Overrides
51 |
52 | BaseModel.constructor
53 |
54 | #### Defined in
55 |
56 | client/v2/algod/models/types.ts:2745
57 |
58 | ## Properties
59 |
60 | ### attribute\_map
61 |
62 | • **attribute\_map**: `Record`\<`string`, `string`\>
63 |
64 | #### Inherited from
65 |
66 | BaseModel.attribute\_map
67 |
68 | #### Defined in
69 |
70 | client/v2/basemodel.ts:56
71 |
72 | ___
73 |
74 | ### error
75 |
76 | • **error**: `string`
77 |
78 | #### Defined in
79 |
80 | client/v2/algod/models/types.ts:2730
81 |
82 | ___
83 |
84 | ### protocolVersion
85 |
86 | • **protocolVersion**: `string`
87 |
88 | Protocol version is the protocol version Dryrun was operated under.
89 |
90 | #### Defined in
91 |
92 | client/v2/algod/models/types.ts:2735
93 |
94 | ___
95 |
96 | ### txns
97 |
98 | • **txns**: [`DryrunTxnResult`](modelsv2.DryrunTxnResult.md)[]
99 |
100 | #### Defined in
101 |
102 | client/v2/algod/models/types.ts:2737
103 |
104 | ## Methods
105 |
106 | ### get\_obj\_for\_encoding
107 |
108 | ▸ **get_obj_for_encoding**(`binary?`): `Record`\<`string`, `any`\>
109 |
110 | Get an object ready for encoding to either JSON or msgpack.
111 |
112 | #### Parameters
113 |
114 | | Name | Type | Default value | Description |
115 | | :------ | :------ | :------ | :------ |
116 | | `binary` | `boolean` | `false` | Use true to indicate that the encoding can handle raw binary objects (Uint8Arrays). Use false to indicate that raw binary objects should be converted to base64 strings. True should be used for objects that will be encoded with msgpack, and false should be used for objects that will be encoded with JSON. |
117 |
118 | #### Returns
119 |
120 | `Record`\<`string`, `any`\>
121 |
122 | #### Inherited from
123 |
124 | BaseModel.get\_obj\_for\_encoding
125 |
126 | #### Defined in
127 |
128 | client/v2/basemodel.ts:65
129 |
130 | ___
131 |
132 | ### from\_obj\_for\_encoding
133 |
134 | ▸ `Static` **from_obj_for_encoding**(`data`): [`DryrunResponse`](modelsv2.DryrunResponse.md)
135 |
136 | #### Parameters
137 |
138 | | Name | Type |
139 | | :------ | :------ |
140 | | `data` | `Record`\<`string`, `any`\> |
141 |
142 | #### Returns
143 |
144 | [`DryrunResponse`](modelsv2.DryrunResponse.md)
145 |
146 | #### Defined in
147 |
148 | client/v2/algod/models/types.ts:2767
149 |
```
--------------------------------------------------------------------------------
/packages/server/src/resources/knowledge/taxonomy/ARCs:specs:arc-0016.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | arc: 16
3 | title: Convention for declaring traits of an NFT's
4 | description: This is a convention for declaring traits in an NFT's metadata.
5 | author: Keegan Thompson (@keeganthomp)
6 | discussions-to: https://github.com/algorandfoundation/ARCs/issues/62
7 | status: Final
8 | type: Standards Track
9 | category: ARC
10 | sub-category: Asa
11 | created: 2022-01-04
12 | ---
13 |
14 | # Standard for declaring traits inside non-fungible NFT's metadata
15 |
16 | ## Abstract
17 |
18 | The goal is to establish a standard for how traits are declared inside a non-fungible NFT's metadata, for example as specified in ([ARC-3](./arc-0003.md)), ([ARC-69](./arc-0069.md)) or ([ARC-72](./arc-0072.md)).
19 |
20 | ## Specification
21 |
22 | The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in <a href="https://www.ietf.org/rfc/rfc2119.txt">RFC-2119</a>.
23 |
24 | > Comments like this are non-normative.
25 |
26 | If the property `traits` is provided anywhere in the metadata, it **MUST** adhere to the schema below.
27 | If the NFT is a part of a larger collection and that collection has traits, all the available traits for the collection **MUST** be listed as a property of the `traits` object.
28 | If the NFT does not have a particular trait, it's value **MUST** be "none".
29 |
30 | The JSON schema for `traits` is as follows:
31 |
32 | ```json
33 | {
34 | "title": "Traits for Non-Fungible Token",
35 | "type": "object",
36 | "properties": {
37 | "traits": {
38 | "type": "object",
39 | "description": "Traits (attributes) that can be used to calculate things like rarity. Values may be strings or numbers"
40 | }
41 | }
42 | }
43 | ```
44 |
45 | #### Examples
46 |
47 | ##### Example of an NFT that has traits
48 |
49 | ```json
50 | {
51 | "name": "NFT With Traits",
52 | "description": "NFT with traits",
53 | "image": "https://s3.amazonaws.com/your-bucket/images/two.png",
54 | "image_integrity": "sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
55 | "properties": {
56 | "creator": "Tim Smith",
57 | "created_at": "January 2, 2022",
58 | "traits": {
59 | "background": "red",
60 | "shirt_color": "blue",
61 | "glasses": "none",
62 | "tattoos": 4,
63 | }
64 | }
65 | }
66 | ```
67 |
68 | ##### Example of an NFT that has no traits
69 |
70 | ```json
71 | {
72 | "name": "NFT Without Traits",
73 | "description": "NFT without traits",
74 | "image": "https://s3.amazonaws.com/your-bucket/images/one.png",
75 | "image_integrity": "sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
76 | "properties": {
77 | "creator": "John Smith",
78 | "created_at": "January 1, 2022",
79 | }
80 | }
81 | ```
82 |
83 | ## Rationale
84 |
85 | A standard for traits is needed so programs know what to expect in order to calculate things like rarity.
86 |
87 | ## Backwards Compatibility
88 |
89 | If the metadata does not have the field `traits`, each value of `properties` should be considered a trait.
90 |
91 | ## Security Considerations
92 |
93 | None.
94 |
95 | ## Copyright
96 |
97 | Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.
98 |
```