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 | ```