Skip to content

accounts.account_manager

EnsureFundedResultResult from performing an ensure funded call.
EnsureFundedFromTestnetDispenserApiResultResult from performing an ensure funded call using TestNet dispenser API.
AccountInformationInformation about an Algorand account’s current status, balance and other properties.
AccountManagerCreates and keeps track of signing accounts that can sign transactions for a sending address.

class algokit_utils.accounts.account_manager.EnsureFundedResult

Section titled “class algokit_utils.accounts.account_manager.EnsureFundedResult”

Bases: algokit_utils.transactions.transaction_sender.SendSingleTransactionResult, _CommonEnsureFundedParams

Result from performing an ensure funded call.

class algokit_utils.accounts.account_manager.EnsureFundedFromTestnetDispenserApiResult

Section titled “class algokit_utils.accounts.account_manager.EnsureFundedFromTestnetDispenserApiResult”

Bases: _CommonEnsureFundedParams

Result from performing an ensure funded call using TestNet dispenser API.

class algokit_utils.accounts.account_manager.AccountInformation

Section titled “class algokit_utils.accounts.account_manager.AccountInformation”

Information about an Algorand account’s current status, balance and other properties.

See https://dev.algorand.co/reference/rest-apis/algod/#account for detailed field descriptions.

The account’s address

The account’s current balance

The account’s balance without the pending rewards

The account’s minimum required balance

The amount of pending rewards

The amount of rewards earned

The round for which this information is relevant

The account’s status (e.g., ‘Offline’, ‘Online’)

Number of applications this account has opted into

total*assets_opted_in *: int | None_ = None

Section titled “total*assets_opted_in *: int | None_ = None”

Number of assets this account has opted into

Total number of box bytes used by this account

Total number of boxes used by this account

Number of applications created by this account

total*created_assets *: int | None_ = None

Section titled “total*created_assets *: int | None_ = None”

Number of assets created by this account

apps*local_state *: list[dict] | None_ = None

Section titled “apps*local_state *: list[dict] | None_ = None”

Local state of applications this account has opted into

apps*total_extra_pages *: int | None_ = None

Section titled “apps*total_extra_pages *: int | None_ = None”

Number of extra pages allocated to applications

Total schema for all applications

Assets held by this account

If rekeyed, the authorized address

Round when this account was closed

Applications created by this account

created*assets *: list[dict] | None_ = None

Section titled “created*assets *: list[dict] | None_ = None”

Assets created by this account

Round when this account was created

Whether this account is deleted

Whether this account is eligible for incentives

Last heartbeat round for this account

Last round this account proposed a block

Participation information for this account

Base reward for this account

Signature type for this account

Creates and keeps track of signing accounts that can sign transactions for a sending address.

This class provides functionality to create, track, and manage various types of accounts including mnemonic-based, rekeyed, multisig, and logic signature accounts.

  • Parameters: client_manager – The ClientManager client to use for algod and kmd clients
  • Example:
    account_manager = AccountManager(client_manager)

KMD account manager that allows you to easily get and create accounts using KMD.

  • Return KmdAccountManager: The ‘KmdAccountManager’ instance
  • Example:
    kmd_manager = account_manager.kmd

Sets the default signer to use if no other signer is specified.

If this isn’t set and a transaction needs signing for a given sender then an error will be thrown from get_signer / get_account.

  • Parameters: signer – A TransactionSigner signer to use.
  • Returns: The AccountManager so method calls can be chained
  • Example:
    signer_account = account_manager.random()
    account_manager.set_default_signer(signer_account)

set_signer(sender: str, signer: algosdk.atomic_transaction_composer.TransactionSigner) → typing_extensions.Self

Section titled “set_signer(sender: str, signer: algosdk.atomic_transaction_composer.TransactionSigner) → typing_extensions.Self”

Tracks the given TransactionSigner against the given sender address for later signing.

  • Parameters:
    • sender – The sender address to use this signer for
    • signer – The TransactionSigner to sign transactions with for the given sender
  • Returns: The AccountManager instance for method chaining
  • Example:
    account_manager.set_signer("SENDERADDRESS", transaction_signer)

set_signers(*, another_account_manager: AccountManager, overwrite_existing: bool = True) → typing_extensions.Self

Section titled “set_signers(*, another_account_manager: AccountManager, overwrite_existing: bool = True) → typing_extensions.Self”

Merges the given AccountManager into this one.

  • Parameters:
    • another_account_manager – The AccountManager to merge into this one
    • overwrite_existing – Whether to overwrite existing signers in this manager
  • Returns: The AccountManager instance for method chaining
  • Example:
    accountManager2.set_signers(accountManager1)

Tracks the given account for later signing.

Note: If you are generating accounts via the various methods on AccountManager (like random, from_mnemonic, logic_sig, etc.) then they automatically get tracked.

The method accepts either a positional argument or a keyword argument named ‘account’ or ‘signer’. The ‘signer’ parameter is deprecated and will show a warning when used.

  • Parameters:

    • *args

      Variable positional arguments. The first argument should be a TransactionSignerAccountProtocol.

    • **kwargs

      Variable keyword arguments. Can include ‘account’ or ‘signer’ (deprecated) as TransactionSignerAccountProtocol.

  • Returns: The AccountManager instance for method chaining

  • Raises: ValueError – If no account or signer argument is provided

  • Example:

    account_manager = AccountManager(client_manager)
    # Using positional argument
    account_manager.set_signer_from_account(
    SigningAccount(private_key=algosdk.account.generate_account()[0])
    )
    # Using keyword argument 'account'
    account_manager.set_signer_from_account(
    account=LogicSigAccount(AlgosdkLogicSigAccount(program, args))
    )
    # Using deprecated keyword argument 'signer'
    account_manager.set_signer_from_account(
    signer=MultiSigAccount(multisig_params, [account1, account2])
    )

Returns the TransactionSigner for the given sender address.

If no signer has been registered for that address then the default signer is used if registered.

  • Parameters: sender – The sender address or account
  • Returns: The TransactionSigner
  • Raises: ValueError – If no signer is found and no default signer is set
  • Example:
    signer = account_manager.get_signer("SENDERADDRESS")

Returns the TransactionSignerAccountProtocol for the given sender address.

  • Parameters: sender – The sender address
  • Returns: The TransactionSignerAccountProtocol
  • Raises: ValueError – If no account is found or if the account is not a regular account
  • Example:
    sender = account_manager.random().address
    # ...
    # Returns the `TransactionSignerAccountProtocol` for `sender` that has previously been registered
    account = account_manager.get_account(sender)

Returns the given sender account’s current status, balance and spendable amounts.

See https://dev.algorand.co/reference/rest-apis/algod/#account for response data schema details.

  • Parameters: sender – The address or account compliant with TransactionSignerAccountProtocol protocol to look up
  • Returns: The account information
  • Example:
    address = "XBYLS2E6YI6XXL5BWCAMOA4GTWHXWENZMX5UHXMRNWWUQ7BXCY5WC5TEPA"
    account_info = account_manager.get_information(address)

Tracks and returns an Algorand account with secret key loaded by taking the mnemonic secret.

  • Parameters:
    • mnemonic – The mnemonic secret representing the private key of an account
    • sender – Optional address to use as the sender
  • Returns: The account

Be careful how the mnemonic is handled. Never commit it into source control and ideally load it from the environment (ideally via a secret storage service) rather than the file system.

  • Example:
    account = account_manager.from_mnemonic("mnemonic secret ...")

Tracks and returns an Algorand account with private key loaded by convention from environment variables.

This allows you to write code that will work seamlessly in production and local development (LocalNet) without manual config locally (including when you reset the LocalNet).

  • Parameters:
    • name – The name identifier of the account
    • fund_with – Optional amount to fund the account with when it gets created (when targeting LocalNet)
  • Returns: The account
  • Raises: ValueError – If environment variable {NAME}_MNEMONIC is missing when looking for account {NAME}

Convention: : * Non-LocalNet: will load {NAME}_MNEMONIC as a mnemonic secret. If {NAME}_SENDER is defined then it will use that for the sender address (i.e. to support rekeyed accounts)

  • LocalNet: will load the account from a KMD wallet called {NAME} and if that wallet doesn’t exist it will create it and fund the account for you

  • Example:

    # If you have a mnemonic secret loaded into `MY_ACCOUNT_MNEMONIC` then you can call:
    account = account_manager.from_environment('MY_ACCOUNT')
    # If that code runs against LocalNet then a wallet called `MY_ACCOUNT` will automatically be created
    # with an account that is automatically funded with the specified amount from the LocalNet dispenser

Tracks and returns an Algorand account with private key loaded from the given KMD wallet.

  • Parameters:
    • name – The name of the wallet to retrieve an account from
    • predicate – Optional filter to use to find the account
    • sender – Optional sender address to use this signer for (aka a rekeyed account)
  • Returns: The account
  • Raises: ValueError – If unable to find KMD account with given name and predicate
  • Example:
    # Get default funded account in a LocalNet:
    defaultDispenserAccount = account.from_kmd('unencrypted-default-wallet',
    lambda a: a.status != 'Offline' and a.amount > 1_000_000_000
    )

Tracks and returns an account that represents a logic signature.

  • Parameters:
    • program – The bytes that make up the compiled logic signature
    • args – Optional (binary) arguments to pass into the logic signature
  • Returns: A logic signature account wrapper
  • Example:
    account = account.logicsig(program, [new Uint8Array(3, ...)])

Tracks and returns an account that supports partial or full multisig signing.

  • Parameters:
    • metadata – The metadata for the multisig account
    • signing_accounts – The signers that are currently present
  • Returns: A multisig account wrapper
  • Example:
    account = account_manager.multi_sig(
    version=1,
    threshold=1,
    addrs=["ADDRESS1...", "ADDRESS2..."],
    signing_accounts=[account1, account2]
    )

Tracks and returns a new, random Algorand account.

  • Returns: The account
  • Example:
    account = account_manager.random()

Returns an Algorand account with private key loaded for the default LocalNet dispenser account.

This account can be used to fund other accounts.

  • Returns: The account
  • Example:
    account = account_manager.localnet_dispenser()

Returns an account (with private key loaded) that can act as a dispenser from environment variables.

If environment variables are not present, returns the default LocalNet dispenser account.

  • Returns: The account
  • Example:
    account = account_manager.dispenser_from_environment()

Tracks and returns an Algorand account that is a rekeyed version of the given account to a new sender.

  • Parameters:
    • sender – The account or address to use as the sender
    • account – The account to use as the signer for this new rekeyed account
  • Returns: The rekeyed account
  • Example:
    account = account.from_mnemonic("mnemonic secret ...")
    rekeyed_account = account_manager.rekeyed(account, "SENDERADDRESS...")

Rekey an account to a new address.

  • Parameters:
    • account – The account to rekey
    • rekey_to – The address or account to rekey to
    • signer – Optional transaction signer
    • note – Optional transaction note
    • lease – Optional transaction lease
    • static_fee – Optional static fee
    • extra_fee – Optional extra fee
    • max_fee – Optional max fee
    • validity_window – Optional validity window
    • first_valid_round – Optional first valid round
    • last_valid_round – Optional last valid round
    • suppress_log – Optional flag to suppress logging
  • Returns: The result of the transaction and the transaction that was sent

Please be careful with this function and be sure to read the official rekey guidance.

  • Example:
    # Basic example (with string addresses):
    algorand.account.rekey_account("ACCOUNTADDRESS", "NEWADDRESS")
    # Basic example (with signer accounts):
    algorand.account.rekey_account(account1, newSignerAccount)
    # Advanced example:
    algorand.account.rekey_account(
    account="ACCOUNTADDRESS",
    rekey_to="NEWADDRESS",
    lease='lease',
    note='note',
    first_valid_round=1000,
    validity_window=10,
    extra_fee=AlgoAmount.from_micro_algo(1000),
    static_fee=AlgoAmount.from_micro_algo(1000),
    max_fee=AlgoAmount.from_micro_algo(3000),
    suppress_log=True,
    )

ensure_funded(account_to_fund: str | algokit_utils.models.account.SigningAccount, dispenser_account: str | algokit_utils.models.account.SigningAccount, min_spending_balance: algokit_utils.models.amount.AlgoAmount, min_funding_increment: algokit_utils.models.amount.AlgoAmount | None = None, send_params: algokit_utils.models.transaction.SendParams | None = None, signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, rekey_to: str | None = None, note: bytes | None = None, lease: bytes | None = None, static_fee: algokit_utils.models.amount.AlgoAmount | None = None, extra_fee: algokit_utils.models.amount.AlgoAmount | None = None, max_fee: algokit_utils.models.amount.AlgoAmount | None = None, validity_window: int | None = None, first_valid_round: int | None = None, last_valid_round: int | None = None) → EnsureFundedResult | None

Section titled “ensure_funded(account_to_fund: str | algokit_utils.models.account.SigningAccount, dispenser_account: str | algokit_utils.models.account.SigningAccount, min_spending_balance: algokit_utils.models.amount.AlgoAmount, min_funding_increment: algokit_utils.models.amount.AlgoAmount | None = None, send_params: algokit_utils.models.transaction.SendParams | None = None, signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, rekey_to: str | None = None, note: bytes | None = None, lease: bytes | None = None, static_fee: algokit_utils.models.amount.AlgoAmount | None = None, extra_fee: algokit_utils.models.amount.AlgoAmount | None = None, max_fee: algokit_utils.models.amount.AlgoAmount | None = None, validity_window: int | None = None, first_valid_round: int | None = None, last_valid_round: int | None = None) → EnsureFundedResult | None”

Funds a given account using a dispenser account as a funding source.

Ensures the given account has a certain amount of Algo free to spend (accounting for Algo locked in minimum balance requirement).

See https://dev.algorand.co/concepts/smart-contracts/costs-constraints#mbr for details.

  • Parameters:
    • account_to_fund – The account to fund
    • dispenser_account – The account to use as a dispenser funding source
    • min_spending_balance – The minimum balance of Algo that the account should have available to spend
    • min_funding_increment – Optional minimum funding increment
    • send_params – Parameters for the send operation, defaults to None
    • signer – Optional transaction signer
    • rekey_to – Optional rekey address
    • note – Optional transaction note
    • lease – Optional transaction lease
    • static_fee – Optional static fee
    • extra_fee – Optional extra fee
    • max_fee – Optional maximum fee
    • validity_window – Optional validity window
    • first_valid_round – Optional first valid round
    • last_valid_round – Optional last valid round
  • Returns: The result of executing the dispensing transaction and the amountFunded if funds were needed, or None if no funds were needed
  • Example:
    # Basic example:
    algorand.account.ensure_funded("ACCOUNTADDRESS", "DISPENSERADDRESS", AlgoAmount.from_algo(1))
    # With configuration:
    algorand.account.ensure_funded(
    "ACCOUNTADDRESS",
    "DISPENSERADDRESS",
    AlgoAmount.from_algo(1),
    min_funding_increment=AlgoAmount.from_algo(2),
    fee=AlgoAmount.from_micro_algo(1000),
    suppress_log=True
    )

ensure_funded_from_environment(account_to_fund: str | algokit_utils.models.account.SigningAccount, min_spending_balance: algokit_utils.models.amount.AlgoAmount, *, min_funding_increment: algokit_utils.models.amount.AlgoAmount | None = None, send_params: algokit_utils.models.transaction.SendParams | None = None, signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, rekey_to: str | None = None, note: bytes | None = None, lease: bytes | None = None, static_fee: algokit_utils.models.amount.AlgoAmount | None = None, extra_fee: algokit_utils.models.amount.AlgoAmount | None = None, max_fee: algokit_utils.models.amount.AlgoAmount | None = None, validity_window: int | None = None, first_valid_round: int | None = None, last_valid_round: int | None = None) → EnsureFundedResult | None

Section titled “ensure_funded_from_environment(account_to_fund: str | algokit_utils.models.account.SigningAccount, min_spending_balance: algokit_utils.models.amount.AlgoAmount, *, min_funding_increment: algokit_utils.models.amount.AlgoAmount | None = None, send_params: algokit_utils.models.transaction.SendParams | None = None, signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, rekey_to: str | None = None, note: bytes | None = None, lease: bytes | None = None, static_fee: algokit_utils.models.amount.AlgoAmount | None = None, extra_fee: algokit_utils.models.amount.AlgoAmount | None = None, max_fee: algokit_utils.models.amount.AlgoAmount | None = None, validity_window: int | None = None, first_valid_round: int | None = None, last_valid_round: int | None = None) → EnsureFundedResult | None”

Ensure an account is funded from a dispenser account configured in environment.

Uses a dispenser account retrieved from the environment, per the dispenser_from_environment method, as a funding source such that the given account has a certain amount of Algo free to spend (accounting for Algo locked in minimum balance requirement).

See https://dev.algorand.co/concepts/smart-contracts/costs-constraints#mbr for details.

  • Parameters:
    • account_to_fund – The account to fund
    • min_spending_balance – The minimum balance of Algo that the account should have available to spend
    • min_funding_increment – Optional minimum funding increment
    • send_params – Parameters for the send operation, defaults to None
    • signer – Optional transaction signer
    • rekey_to – Optional rekey address
    • note – Optional transaction note
    • lease – Optional transaction lease
    • static_fee – Optional static fee
    • extra_fee – Optional extra fee
    • max_fee – Optional maximum fee
    • validity_window – Optional validity window
    • first_valid_round – Optional first valid round
    • last_valid_round – Optional last valid round
  • Returns: The result of executing the dispensing transaction and the amountFunded if funds were needed, or None if no funds were needed

The dispenser account is retrieved from the account mnemonic stored in process.env.DISPENSER_MNEMONIC and optionally process.env.DISPENSER_SENDER if it’s a rekeyed account, or against default LocalNet if no environment variables present.

  • Example:
    # Basic example:
    algorand.account.ensure_funded_from_environment("ACCOUNTADDRESS", AlgoAmount.from_algo(1))
    # With configuration:
    algorand.account.ensure_funded_from_environment(
    "ACCOUNTADDRESS",
    AlgoAmount.from_algo(1),
    min_funding_increment=AlgoAmount.from_algo(2),
    fee=AlgoAmount.from_micro_algo(1000),
    suppress_log=True
    )

Ensure an account is funded using the TestNet Dispenser API.

Uses the TestNet Dispenser API as a funding source such that the account has a certain amount of Algo free to spend (accounting for Algo locked in minimum balance requirement).

See https://dev.algorand.co/concepts/smart-contracts/costs-constraints#mbr for details.

  • Parameters:
    • account_to_fund – The account to fund
    • dispenser_client – The TestNet dispenser funding client
    • min_spending_balance – The minimum balance of Algo that the account should have available to spend
    • min_funding_increment – Optional minimum funding increment
  • Returns: The result of executing the dispensing transaction and the amountFunded if funds were needed, or None if no funds were needed
  • Raises: ValueError – If attempting to fund on non-TestNet network
  • Example:
    # Basic example:
    account_manager.ensure_funded_from_testnet_dispenser_api(
    "ACCOUNTADDRESS",
    algorand.client.get_testnet_dispenser_from_environment(),
    AlgoAmount.from_algo(1)
    )
    # With configuration:
    account_manager.ensure_funded_from_testnet_dispenser_api(
    "ACCOUNTADDRESS",
    algorand.client.get_testnet_dispenser_from_environment(),
    AlgoAmount.from_algo(1),
    min_funding_increment=AlgoAmount.from_algo(2)
    )