Skip to content

Commit 2821d38

Browse files
MonolithicMonkYuki I
authored and
Yuki I
committed
fix: resolve the error related to profile context switching
1 parent 90e6ca7 commit 2821d38

File tree

3 files changed

+107
-42
lines changed

3 files changed

+107
-42
lines changed

acapy_agent/anoncreds/default/legacy_indy/registry.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1134,7 +1134,6 @@ def _wallet_accumalator_matches_ledger_list(
11341134
rev_list.issuer_id,
11351135
write_ledger,
11361136
endorser_did,
1137-
profile=profile,
11381137
)
11391138

11401139
return (rev_reg_delta, recovery_txn, applied_txn)

acapy_agent/anoncreds/revocation.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
from ..core.error import BaseError
3131
from ..core.event_bus import Event, EventBus
3232
from ..core.profile import Profile, ProfileSession
33+
from ..multitenant.base import BaseMultitenantManager
3334
from ..tails.anoncreds_tails_server import AnonCredsTailsServer
35+
from ..tails.base import BaseTailsServer
3436
from .error_messages import ANONCREDS_PROFILE_REQUIRED_MSG
3537
from .events import RevListFinishedEvent, RevRegDefFinishedEvent
3638
from .issuer import (
@@ -692,8 +694,14 @@ def get_local_tails_path(self, rev_reg_def: RevRegDef) -> str:
692694

693695
async def upload_tails_file(self, rev_reg_def: RevRegDef):
694696
"""Upload the local tails file to the tails server."""
695-
tails_server = AnonCredsTailsServer()
697+
multitenant_mgr = self.profile.inject_or(BaseMultitenantManager)
698+
if multitenant_mgr:
699+
tails_server = AnonCredsTailsServer()
700+
else:
701+
tails_server = self.profile.inject_or(BaseTailsServer)
696702

703+
if not tails_server:
704+
raise AnonCredsRevocationError("Tails server not configured")
697705
if not Path(self.get_local_tails_path(rev_reg_def)).is_file():
698706
raise AnonCredsRevocationError("Local tails file not found")
699707

acapy_agent/ledger/indy_vdr.py

Lines changed: 98 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -373,9 +373,7 @@ async def _submit(
373373
f"WalletNotFoundError in _submit: Missing key for verkey "
374374
f"{sign_did.verkey}"
375375
f"in wallet associated with profile ID "
376-
f"{current_profile.context.settings.get('wallet.id')}."
377-
f"Ledger profile ID was "
378-
f"{self.profile.context.settings.get('wallet.id')}.",
376+
f"{current_profile.context.settings.get('wallet.id')}.",
379377
exc_info=True,
380378
)
381379
raise WalletNotFoundError(
@@ -1181,22 +1179,10 @@ async def send_revoc_reg_def(
11811179
# NOTE - issuer DID could be extracted from the revoc_reg_def ID
11821180
async with self.profile.session() as session:
11831181
wallet = session.inject(BaseWallet)
1184-
LOGGER.debug("send_revoc_reg_def.Wallet instance: %s", wallet)
1185-
LOGGER.debug(
1186-
"send_revoc_reg_def.Profile context: %s", self.profile.context.settings
1187-
)
11881182
if issuer_did:
11891183
did_info = await wallet.get_local_did(issuer_did)
1190-
LOGGER.debug(
1191-
"send_revoc_reg_def.Local DID retrieved for issuer_did '%s': %s",
1192-
issuer_did,
1193-
did_info,
1194-
)
11951184
else:
11961185
did_info = await wallet.get_public_did()
1197-
LOGGER.debug(
1198-
"send_revoc_reg_def.Public DID retrieved from wallet: %s", did_info
1199-
)
12001186
del wallet
12011187
if not did_info:
12021188
raise LedgerTransactionError(
@@ -1226,7 +1212,6 @@ async def send_revoc_reg_def(
12261212
sign=True,
12271213
sign_did=did_info,
12281214
write_ledger=write_ledger,
1229-
profile=self.profile,
12301215
)
12311216
except LedgerError as err:
12321217
raise LedgerError(
@@ -1272,21 +1257,56 @@ async def send_revoc_reg_entry(
12721257
profile: Optional[Profile] = None,
12731258
) -> dict:
12741259
"""Publish a revocation registry entry to the ledger."""
1260+
LOGGER.debug(">>> Entered send_revoc_reg_entry")
1261+
LOGGER.debug(
1262+
f"Initial parameters - issuer_did: {issuer_did}, write_ledger: {write_ledger}, endorser_did: {endorser_did}" # noqa: E501
1263+
)
1264+
12751265
current_profile = profile or self.profile
1266+
LOGGER.debug(
1267+
f"Using profile: {'provided profile' if profile else 'self.profile'}"
1268+
)
1269+
12761270
async with current_profile.session() as session:
12771271
wallet = session.inject(BaseWallet)
1278-
did_info = await wallet.get_public_did()
1279-
del wallet
1272+
LOGGER.debug("Retrieved wallet instance: %s", type(wallet).__name__)
1273+
1274+
try:
1275+
did_info = await wallet.get_public_did()
1276+
LOGGER.debug(f"Public DID info: {did_info}")
1277+
except Exception as e:
1278+
LOGGER.error("Error during DID resolution: %s", str(e))
1279+
raise
1280+
finally:
1281+
del wallet
1282+
12801283
if not did_info:
1284+
LOGGER.error("No DID info found for revocation registry entry")
12811285
raise LedgerTransactionError(
12821286
"No issuer DID found for revocation registry entry"
12831287
)
12841288

1285-
if current_profile.context.settings.get("wallet.type") == "askar-anoncreds":
1286-
from acapy_agent.anoncreds.default.legacy_indy.registry import (
1287-
LegacyIndyRegistry,
1288-
)
1289+
LOGGER.debug(f"Final DID used: {did_info.did} (verkey: {did_info.verkey})")
12891290

1291+
# Wallet type check
1292+
wallet_type = current_profile.context.settings.get("wallet.type")
1293+
LOGGER.debug(
1294+
f"Wallet type evaluation: {wallet_type} (comparison to 'askar-anoncreds')"
1295+
)
1296+
1297+
if wallet_type == "askar-anoncreds":
1298+
LOGGER.debug(">>> Entering askar-anoncreds path")
1299+
try:
1300+
from acapy_agent.anoncreds.default.legacy_indy.registry import ( # noqa: F401
1301+
LegacyIndyRegistry,
1302+
)
1303+
1304+
LOGGER.debug("Successfully imported LegacyIndyRegistry")
1305+
except ImportError as e:
1306+
LOGGER.error("Import error: %s", str(e))
1307+
raise
1308+
1309+
LOGGER.debug("Building revoc_reg_entry request")
12901310
revoc_reg_entry_req = await self._create_revoc_reg_entry_request(
12911311
did_info,
12921312
revoc_reg_id,
@@ -1295,47 +1315,80 @@ async def send_revoc_reg_entry(
12951315
write_ledger=write_ledger,
12961316
endorser_did=endorser_did,
12971317
)
1318+
LOGGER.debug(f"Request type created: {type(revoc_reg_entry_req).__name__}")
1319+
12981320
if endorser_did and not write_ledger:
1321+
LOGGER.debug("Adding endorser to request")
12991322
revoc_reg_entry_req.set_endorser(endorser_did)
13001323

1324+
# Transaction submission
1325+
LOGGER.debug("Initializing LegacyIndyRegistry")
13011326
legacy_indy_registry = LegacyIndyRegistry()
1302-
resp = await legacy_indy_registry.txn_submit(
1303-
self,
1304-
revoc_reg_entry_req,
1305-
sign=True,
1306-
sign_did=did_info,
1307-
write_ledger=write_ledger,
1308-
)
1327+
try:
1328+
LOGGER.debug("Submitting transaction via LegacyIndyRegistry")
1329+
resp = await legacy_indy_registry.txn_submit(
1330+
self,
1331+
revoc_reg_entry_req,
1332+
sign=True,
1333+
sign_did=did_info,
1334+
write_ledger=write_ledger,
1335+
profile=current_profile,
1336+
)
1337+
LOGGER.debug("Received response from LegacyIndyRegistry")
1338+
except Exception as e:
1339+
LOGGER.error("Error in LegacyIndyRegistry submission: %s", str(e))
1340+
raise
13091341

13101342
if not write_ledger:
1343+
LOGGER.debug("Write ledger disabled, returning unsigned response")
13111344
return revoc_reg_id, {"signed_txn": resp}
13121345

13131346
try:
13141347
# parse sequence number out of response
1348+
LOGGER.debug("Attempting to parse sequence number")
13151349
seq_no = json.loads(resp)["result"]["txnMetadata"]["seqNo"]
1350+
LOGGER.debug(f"Parsed sequence number: {seq_no}")
13161351
return seq_no
13171352
except KeyError as err:
1353+
LOGGER.error("Key error parsing response: %s", str(err))
1354+
LOGGER.debug("Full response content: %s", resp)
13181355
raise LedgerError(
13191356
"Failed to parse sequence number from ledger response"
13201357
) from err
13211358
else:
1359+
LOGGER.debug(">>> Entering default Indy-VDR path")
13221360
try:
1361+
LOGGER.debug("Building standard revoc_reg_entry request")
13231362
request = ledger.build_revoc_reg_entry_request(
13241363
did_info.did,
13251364
revoc_reg_id,
13261365
revoc_def_type,
13271366
json.dumps(revoc_reg_entry),
13281367
)
1368+
LOGGER.debug(f"Request type created: {type(request).__name__}")
1369+
13291370
if endorser_did and not write_ledger:
1371+
LOGGER.debug("Adding endorser to request")
13301372
request.set_endorser(endorser_did)
1373+
13311374
except VdrError as err:
1375+
LOGGER.error("VdrError in request building: %s", str(err))
1376+
raise LedgerError(
1377+
"Exception when sending revocation registry entry"
1378+
) from err
1379+
1380+
try:
1381+
LOGGER.debug("Submitting to ledger")
1382+
resp = await self._submit(
1383+
request, True, sign_did=did_info, write_ledger=write_ledger
1384+
)
1385+
LOGGER.debug("Received ledger response")
1386+
return {"result": resp}
1387+
except Exception as err:
1388+
LOGGER.error("Error during ledger submission: %s", str(err))
13321389
raise LedgerError(
13331390
"Exception when sending revocation registry entry"
13341391
) from err
1335-
resp = await self._submit(
1336-
request, True, sign_did=did_info, write_ledger=write_ledger
1337-
)
1338-
return {"result": resp}
13391392

13401393
async def get_wallet_public_did(self, profile: Optional[Profile] = None) -> DIDInfo:
13411394
"""Fetch the public DID from the wallet."""
@@ -1381,13 +1434,18 @@ async def txn_submit(
13811434
profile: Optional[Profile] = None,
13821435
) -> str:
13831436
"""Write the provided (signed and possibly endorsed) transaction to the ledger."""
1384-
resp = await self._submit(
1385-
request_json,
1386-
sign=sign,
1387-
taa_accept=taa_accept,
1388-
sign_did=sign_did,
1389-
write_ledger=write_ledger,
1390-
)
1437+
kwargs = {
1438+
"sign": sign,
1439+
"taa_accept": taa_accept,
1440+
"sign_did": sign_did,
1441+
"write_ledger": write_ledger,
1442+
}
1443+
1444+
if profile:
1445+
kwargs["profile"] = profile
1446+
1447+
resp = await self._submit(request_json, **kwargs)
1448+
13911449
if write_ledger:
13921450
# match the format returned by indy sdk
13931451
resp = {"op": "REPLY", "result": resp}

0 commit comments

Comments
 (0)