[Python] Request for Hyperledger Aries framework persistent askar wallet

Discussão em 'Python' iniciado por Stack, Junho 30, 2025.

  1. Stack

    Stack Membro Participativo

    The default configuration for the Askar wallet in ACA-Py creates an in-memory (non-persistent) wallet unless explicit parameters are provided to make it persistent. My intention is to create a persistent wallet, so I have specified the required wallet parameters (such as --wallet-type askar, --wallet-name, and --wallet-key).

    However, I suspect that my custom parameters are not actually being used by the Aries agent—possibly due to internal defaults or code logic that overrides user-supplied values. The primary evidence for this is that, after running the agent, there is no .sqlite wallet database in the ~/.aries_askar/ directory (as verified with ls -la ~/.aries_askar/). This strongly suggests that the agent is still creating an in-memory wallet, rather than a persistent one.

    Additionally, as noted in the documentation, in-memory wallets are usually assigned a random name such as 'faber_wallet_check30a06fc5. If the agent output shows such a name, or a name different from the one I specified, it further confirms that my parameters are being ignored or overridden.

    Despite specifying persistent wallet parameters, the agent continues to create a non-persistent in-memory wallet—most likely because internal defaults take precedence over my custom arguments. Please help me to make the wallet persistent.

    # faber_wallet_check.py
    import asyncio
    import sys
    from runners.agent_container import AriesAgent, create_agent_with_args, arg_parser

    async def main():
    # Step 1: Parse CLI args (arg_parser already includes --wallet-type)
    parser = arg_parser(ident="faber_wallet_check", port=8020)

    # Add only what is NOT present in arg_parser
    parser.add_argument(
    "--wallet-name",
    help="Name of the wallet (for persistence, e.g., 'faber_wallet')",
    default=None,
    )
    parser.add_argument(
    "--wallet-key",
    help="Key/passphrase for the wallet",
    default=None,
    )
    parser.add_argument(
    "--seed",
    help="Deterministic seed for agent DID (32 characters, optional)",
    default=None,
    )

    args = parser.parse_args()

    # Debug: print parsed configuration
    print("Initializing demo agent faber_wallet_check with AIP 20 and credential type indy")
    print("Parsed configuration:")
    for key in ("wallet_type", "wallet_name", "wallet_key", "seed"):
    print(f" {key}: {getattr(args, key, None)}")

    # Validate seed length if provided
    if args.seed and len(args.seed) != 32:
    print(f"ERROR: --seed must be exactly 32 characters (got {len(args.seed)})", file=sys.stderr)
    sys.exit(1)

    # Step 2: Prepare extra args for the agent launcher
    extra = {}
    if args.wallet_name:
    extra["wallet-name"] = args.wallet_name
    if args.wallet_key:
    extra["wallet-key"] = args.wallet_key
    if args.seed:
    extra["seed"] = args.seed
    if args.wallet_type:
    extra["wallet-type"] = args.wallet_type

    # Step 3: Launch the agent
    faber_agent = await create_agent_with_args(
    args,
    ident="faber_wallet_check",
    extra_args=extra,
    )

    # Step 4: Create AriesAgent wrapper for admin API calls
    agent = AriesAgent(
    ident="faber_wallet_check",
    http_port=faber_agent.start_port,
    admin_port=faber_agent.start_port + 1,
    genesis_data=faber_agent.genesis_txns,
    genesis_txn_list=faber_agent.genesis_txn_list,
    wallet_type=args.wallet_type,
    seed=args.seed,
    public_did=False,
    )

    # Step 5: Initialize ACA-Py (create wallet, register public DID if enabled)
    await faber_agent.initialize(the_agent=agent)

    # Step 6: Wait for admin API readiness
    max_retries = 30
    for i in range(1, max_retries + 1):
    try:
    await agent.admin_GET("/status")
    break
    except Exception:
    print(f"Waiting for admin API (attempt {i}/{max_retries})...")
    await asyncio.sleep(1)
    else:
    print("ERROR: Admin API did not become available, exiting.")
    await faber_agent.terminate()
    sys.exit(1)

    # Step 7: List all DIDs in the wallet to confirm persistence
    try:
    resp = await agent.admin_GET("/wallet/did")
    print("DIDs currently in wallet:")
    for did_entry in resp.get("results", []):
    did = did_entry.get("did")
    verkey = did_entry.get("verkey")
    public = did_entry.get("public", False)
    print(f" DID: {did}, Verkey: {verkey}, Public: {public}")
    except Exception as e:
    print(f"ERROR fetching DIDs from wallet: {e}", file=sys.stderr)

    # Cleanup: terminate the ACA-Py agent process
    await faber_agent.terminate()

    if __name__ == '__main__':
    asyncio.get_event_loop().run_until_complete(main())


    Input

    python3 -m runners.faber_wallet_check \
    --wallet-type askar \
    --wallet-name faber_wallet \
    --wallet-key supersecretfaberkek \
    --seed faber000000000000000000000000001

    Output
    (venv) nmuslim162022@instance-20250614-033016:~/aries-cloudagent-python/demo$ python3 -m runners.faber_wallet_check \
    --wallet-type askar \
    --wallet-name faber_wallet \
    --wallet-key supersecretfaberkek \
    --seed faber000000000000000000000000001
    Initializing demo agent faber_wallet_check with AIP 20 and credential type indy
    Parsed configuration:
    **wallet_type**: askar
    **wallet_name**: faber_wallet
    **wallet_key**: supersecretfaberkek
    seed: faber000000000000000000000000001
    Initializing demo agent faber_wallet_check with AIP 20 and credential type indy
    Started webhook listener on port: 8022
    Aries | Registering faber_wallet_check ...
    using ledger: http://localhost:9000/register
    Aries | nym_info: {'did': 'QWTxizRo9A1tWdEPYkFPHe', 'seed': 'faber000000000000000000000000001', 'verkey': 'Dp8p4z8fC3MadWn4q5BxtfJMwyXNhaCJRfhB4sAepkU7'}
    Aries | Registered DID: QWTxizRo9A1tWdEPYkFPHe
    Created public DID
    Aries | ['/home/nmuslim162022/aries-cloudagent-python/venv/bin/python3', '-m', 'aries_cloudagent', 'start', '--endpoint', 'http://localhost:8020', '--label', 'faber_wallet_check', '--auto-ping-connection', '--auto-respond-messages', '--inbound-transport', 'http', '0.0.0.0', '8020', '--outbound-transport', 'http', '--admin', '0.0.0.0', '8021', '--admin-insecure-mode', '**--wallet-type**', 'askar', '-**-wallet-name**', 'faber_wallet_check30a06fc5', '**--wallet-key**', 'faber_wallet_check30a06fc5', '--preserve-exchange-records', '--auto-provision', '--public-invites', '--emit-new-didcomm-prefix', '--genesis-transactions',
    ….
    (venv) nmuslim162022@instance-20250614-033016:~/aries-cloudagent-python/demo$ ls -la ~/.aries_askar/
    total 8
    drwxrwxr-x 2 nmuslim162022 nmuslim162022 4096 Jun 30 08:35 .
    drwxr-x--- 37 nmuslim162022 nmuslim162022 4096 Jul 1 00:51 ..

    Continue reading...

Compartilhe esta Página