Skip to content

AppFactory

class algokit_utils.applications.app_factory.AppFactory(params: AppFactoryParams)

ARC-56/ARC-32 app factory that, for a given app spec, allows you to create and deploy one or more app instances and to create one or more app clients to interact with those (or other) app instances.

  • Parameters: params – The parameters for the factory
  • Example:
    >>> factory = AppFactory(AppFactoryParams(
    >>> algorand=AlgorandClient.mainnet(),
    >>> app_spec=app_spec,
    >>> )
    >>> )

property app*name *: str_

The name of the app

property app*spec *: algokit_utils.applications.app_spec.arc56.Arc56Contract_

The app spec

property algorand : algokit_utils.algorand.AlgorandClient

The algorand client

property params : _MethodParamsBuilder

Get parameters to create transactions (create and deploy related calls) for the current app.

A good mental model for this is that these parameters represent a deferred transaction creation.

  • Example: Create a transaction in the future using Algorand Client

    create_app_params = app_factory.params.create( … AppFactoryCreateMethodCallParams( … method=’create_method’, … args=[123, ‘hello’] … ) … )

    algorand.send.app_create_method_call(create_app_params)

  • Example: Define a nested transaction as an ABI argument

    create_app_params = appFactory.params.create( … AppFactoryCreateMethodCallParams( … method=’create_method’, … args=[123, ‘hello’] … ) … ) app_client.send.call( … AppClientMethodCallParams( … method=’my_method’, … args=[create_app_params] … ) … )

property send : _TransactionSender

Get the transaction sender.

  • Returns: The _TransactionSender instance.

property create*transaction *: _TransactionCreator_

Get the transaction creator.

  • Returns: The _TransactionCreator instance.

deploy(*, on_update: algokit_utils.applications.app_deployer.OnUpdate | None = None, on_schema_break: algokit_utils.applications.app_deployer.OnSchemaBreak | None = None, create_params: algokit_utils.applications.app_client.AppClientMethodCallCreateParams | algokit_utils.applications.app_client.AppClientBareCallCreateParams | None = None, update_params: algokit_utils.applications.app_client.AppClientMethodCallParams | algokit_utils.applications.app_client.AppClientBareCallParams | None = None, delete_params: algokit_utils.applications.app_client.AppClientMethodCallParams | algokit_utils.applications.app_client.AppClientBareCallParams | None = None, existing_deployments: algokit_utils.applications.app_deployer.ApplicationLookup | None = None, ignore_cache: bool = False, app_name: str | None = None, send_params: algokit_utils.models.transaction.SendParams | None = None, compilation_params: algokit_utils.applications.app_client.AppClientCompilationParams | None = None) → tuple[algokit_utils.applications.app_client.AppClient, AppFactoryDeployResult]

Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).

Note: When using the return from this function be sure to check operationPerformed to get access to various return properties like transaction, confirmation and deleteResult.

Note: if there is a breaking state schema change to an existing app (and onSchemaBreak is set to ‘replace’) the existing app will be deleted and re-created.

Note: if there is an update (different TEAL code) to an existing app (and onUpdate is set to ‘replace’) the existing app will be deleted and re-created.

  • Parameters:
    • on_update – The action to take if there is an update to the app
    • on_schema_break – The action to take if there is a breaking state schema change to the app
    • create_params – The arguments to create the app
    • update_params – The arguments to update the app
    • delete_params – The arguments to delete the app
    • existing_deployments – The existing deployments to use
    • ignore_cache – Whether to ignore the cache
    • app_name – The name of the app
    • send_params – The parameters for the send call
    • compilation_params – The parameters for the compilation
  • Returns: The app client and the result of the deployment
  • Example:
    >>> app_client, result = factory.deploy({
    >>> create_params=AppClientMethodCallCreateParams(
    >>> sender='SENDER_ADDRESS',
    >>> approval_program='APPROVAL PROGRAM',
    >>> clear_state_program='CLEAR PROGRAM',
    >>> schema={
    >>> "global_byte_slices": 0,
    >>> "global_ints": 0,
    >>> "local_byte_slices": 0,
    >>> "local_ints": 0
    >>> }
    >>> ),
    >>> update_params=AppClientMethodCallParams(
    >>> sender='SENDER_ADDRESS'
    >>> ),
    >>> delete_params=AppClientMethodCallParams(
    >>> sender='SENDER_ADDRESS'
    >>> ),
    >>> compilation_params=AppClientCompilationParams(
    >>> updatable=False,
    >>> deletable=False
    >>> ),
    >>> app_name='my_app',
    >>> on_schema_break=OnSchemaBreak.AppendApp,
    >>> on_update=OnUpdate.AppendApp
    >>> })

get_app_client_by_id(app_id: int, app_name: str | None = None, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, approval_source_map: algosdk.source_map.SourceMap | None = None, clear_source_map: algosdk.source_map.SourceMap | None = None) → algokit_utils.applications.app_client.AppClient

Returns a new AppClient client for an app instance of the given ID.

  • Parameters:
    • app_id – The id of the app
    • app_name – The name of the app
    • default_sender – The default sender address
    • default_signer – The default signer
    • approval_source_map – The approval source map
    • clear_source_map – The clear source map
  • Return AppClient: The app client
  • Example:
    >>> app_client = factory.get_app_client_by_id(app_id=123)

get_app_client_by_creator_and_name(creator_address: str, app_name: str, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, ignore_cache: bool | None = None, app_lookup_cache: algokit_utils.applications.app_deployer.ApplicationLookup | None = None, approval_source_map: algosdk.source_map.SourceMap | None = None, clear_source_map: algosdk.source_map.SourceMap | None = None) → algokit_utils.applications.app_client.AppClient

Returns a new AppClient client, resolving the app by creator address and name using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).

  • Parameters:
    • creator_address – The creator address
    • app_name – The name of the app
    • default_sender – The default sender address
    • default_signer – The default signer
    • ignore_cache – Whether to ignore the cache and force a lookup
    • app_lookup_cache – Optional cache of existing app deployments to use instead of querying the indexer
    • approval_source_map – Optional source map for the approval program
    • clear_source_map – Optional source map for the clear state program
  • Returns: An AppClient instance configured for the resolved application
  • Example:
    >>> app_client = factory.get_app_client_by_creator_and_name(
    ... creator_address='SENDER_ADDRESS',
    ... app_name='my_app'
    ... )

export_source_maps() → algokit_utils.models.application.AppSourceMaps

import_source_maps(source_maps: algokit_utils.models.application.AppSourceMaps) → None

Import the provided source maps into the factory.

  • Parameters: source_maps – An AppSourceMaps instance containing the approval and clear source maps.

compile(compilation_params: algokit_utils.applications.app_client.AppClientCompilationParams | None = None) → algokit_utils.applications.app_client.AppClientCompilationResult

Compile the app’s TEAL code.

  • Parameters: compilation_params – The compilation parameters
  • Return AppClientCompilationResult: The compilation result
  • Example:
    >>> compilation_result = factory.compile()