Source code for aries_cloudagent.ledger.provider

"""Default ledger provider classes."""

import logging

from ..cache.base import BaseCache
from ..config.base import BaseProvider, BaseInjector, BaseSettings
from ..utils.classloader import ClassLoader
from ..wallet.base import BaseWallet

LOGGER = logging.getLogger(__name__)


[docs]class LedgerProvider(BaseProvider): """Provider for the default ledger implementation.""" LEDGER_CLASSES = {"indy": "aries_cloudagent.ledger.indy.IndyLedger"}
[docs] async def provide(self, settings: BaseSettings, injector: BaseInjector): """Create and open the ledger instance.""" pool_name = settings.get("ledger.pool_name", "default") keepalive = int(settings.get("ledger.keepalive", 5)) read_only = bool(settings.get("ledger.read_only", False)) if read_only: LOGGER.error("Note: setting ledger to read-only mode") wallet = await injector.inject(BaseWallet) ledger = None if wallet.WALLET_TYPE == "indy": IndyLedger = ClassLoader.load_class(self.LEDGER_CLASSES["indy"]) cache = await injector.inject(BaseCache, required=False) ledger = IndyLedger( pool_name, wallet, keepalive=keepalive, cache=cache, read_only=read_only ) genesis_transactions = settings.get("ledger.genesis_transactions") if genesis_transactions: await ledger.create_pool_config(genesis_transactions, True) elif not await ledger.check_pool_config(): LOGGER.info("Ledger pool configuration has not been created") ledger = None return ledger