From 4788507cba7a3f296184f73de9596624a6339120 Mon Sep 17 00:00:00 2001 From: Adam Burdett Date: Tue, 9 Aug 2022 13:02:15 -0600 Subject: [PATCH 1/5] Signed-off-by: Adam Burdett Co-authored-by: Daniel Bluhm --- DIDResolution.md | 8 +++--- aries_cloudagent/config/default_context.py | 6 +--- aries_cloudagent/core/tests/test_conductor.py | 4 +-- .../connections/v1_0/tests/test_manager.py | 9 ++---- .../dif/tests/test_pres_exch_handler.py | 5 +--- aries_cloudagent/resolver/__init__.py | 14 +++++----- aries_cloudagent/resolver/did_resolver.py | 13 +++++---- .../resolver/did_resolver_registry.py | 28 ------------------- .../resolver/tests/test_did_resolver.py | 19 ++++--------- .../tests/test_did_resolver_registry.py | 12 -------- aries_cloudagent/wallet/did_method.py | 9 ++++-- 11 files changed, 36 insertions(+), 91 deletions(-) delete mode 100644 aries_cloudagent/resolver/did_resolver_registry.py delete mode 100644 aries_cloudagent/resolver/tests/test_did_resolver_registry.py diff --git a/DIDResolution.md b/DIDResolution.md index c1666adab2..dbf11965ce 100644 --- a/DIDResolution.md +++ b/DIDResolution.md @@ -29,7 +29,7 @@ In practice, DIDs and DID Documents are used for a variety of purposes but espec ## `DIDResolver` -In ACA-Py, the `DIDResolver` provides the interface to resolve DIDs using registered method resolvers. Method resolver registration happens on startup through the `DIDResolverRegistry`. This registry enables additional resolvers to be loaded via plugin. +In ACA-Py, the `DIDResolver` provides the interface to resolve DIDs using registered method resolvers. Method resolver registration happens on startup in a `did_resolers` list. This registry enables additional resolvers to be loaded via plugin. #### Example usage: ```python= @@ -73,17 +73,17 @@ The following is an example method resolver implementation. In this example, we ```python= from aries_cloudagent.config.injection_context import InjectionContext -from aries_cloudagent.resolver.did_resolver_registry import DIDResolverRegistry +from ..resolver.did_resolver import DIDResolver from .example_resolver import ExampleResolver async def setup(context: InjectionContext): """Setup the plugin.""" - registry = context.inject(DIDResolverRegistry) + registry = context.inject(DIDResolver) resolver = ExampleResolver() await resolver.setup(context) - registry.register(resolver) + registry.append(resolver) ``` #### `example_resolver.py` diff --git a/aries_cloudagent/config/default_context.py b/aries_cloudagent/config/default_context.py index fb0867cddc..e3d9b24770 100644 --- a/aries_cloudagent/config/default_context.py +++ b/aries_cloudagent/config/default_context.py @@ -12,7 +12,6 @@ from ..core.protocol_registry import ProtocolRegistry from ..core.goal_code_registry import GoalCodeRegistry from ..resolver.did_resolver import DIDResolver -from ..resolver.did_resolver_registry import DIDResolverRegistry from ..tails.base import BaseTailsServer from ..protocols.actionmenu.v1_0.base_service import BaseMenuService @@ -50,12 +49,9 @@ async def build_context(self) -> InjectionContext: # Global event bus context.injector.bind_instance(EventBus, EventBus()) - # Global did resolver registry - did_resolver_registry = DIDResolverRegistry() - context.injector.bind_instance(DIDResolverRegistry, did_resolver_registry) # Global did resolver - context.injector.bind_instance(DIDResolver, DIDResolver(did_resolver_registry)) + context.injector.bind_instance(DIDResolver, DIDResolver([])) await self.bind_providers(context) await self.load_plugins(context) diff --git a/aries_cloudagent/core/tests/test_conductor.py b/aries_cloudagent/core/tests/test_conductor.py index 02fbe4ff49..203ca1b3b4 100644 --- a/aries_cloudagent/core/tests/test_conductor.py +++ b/aries_cloudagent/core/tests/test_conductor.py @@ -24,7 +24,7 @@ from ...protocols.coordinate_mediation.v1_0.models.mediation_record import ( MediationRecord, ) -from ...resolver.did_resolver import DIDResolver, DIDResolverRegistry +from ...resolver.did_resolver import DIDResolver from ...multitenant.base import BaseMultitenantManager from ...multitenant.manager import MultitenantManager from ...storage.base import BaseStorage @@ -92,7 +92,7 @@ async def build_context(self) -> InjectionContext: context.injector.bind_instance(ProfileManager, InMemoryProfileManager()) context.injector.bind_instance(ProtocolRegistry, ProtocolRegistry()) context.injector.bind_instance(BaseWireFormat, self.wire_format) - context.injector.bind_instance(DIDResolver, DIDResolver(DIDResolverRegistry())) + context.injector.bind_instance(DIDResolver, DIDResolver([])) context.injector.bind_instance(EventBus, MockEventBus()) return context diff --git a/aries_cloudagent/protocols/connections/v1_0/tests/test_manager.py b/aries_cloudagent/protocols/connections/v1_0/tests/test_manager.py index d7c3836236..80efb456bf 100644 --- a/aries_cloudagent/protocols/connections/v1_0/tests/test_manager.py +++ b/aries_cloudagent/protocols/connections/v1_0/tests/test_manager.py @@ -20,7 +20,6 @@ from .....multitenant.manager import MultitenantManager from .....protocols.routing.v1_0.manager import RoutingManager from .....resolver.did_resolver import DIDResolver -from .....resolver.did_resolver_registry import DIDResolverRegistry from .....storage.error import StorageNotFoundError from .....transport.inbound.receipt import MessageReceipt from .....wallet.base import DIDInfo @@ -2024,9 +2023,7 @@ async def test_fetch_connection_targets_no_my_did(self): async def test_fetch_connection_targets_conn_invitation_did_no_resolver(self): async with self.profile.session() as session: - self.context.injector.bind_instance( - DIDResolver, DIDResolver(DIDResolverRegistry()) - ) + self.context.injector.bind_instance(DIDResolver, DIDResolver([])) await session.wallet.create_local_did( method=DIDMethod.SOV, key_type=KeyType.ED25519, @@ -2320,9 +2317,7 @@ async def test_fetch_connection_targets_conn_invitation_unsupported_key_type(sel async def test_fetch_connection_targets_oob_invitation_svc_did_no_resolver(self): async with self.profile.session() as session: - self.context.injector.bind_instance( - DIDResolver, DIDResolver(DIDResolverRegistry()) - ) + self.context.injector.bind_instance(DIDResolver, DIDResolver([])) await session.wallet.create_local_did( method=DIDMethod.SOV, key_type=KeyType.ED25519, diff --git a/aries_cloudagent/protocols/present_proof/dif/tests/test_pres_exch_handler.py b/aries_cloudagent/protocols/present_proof/dif/tests/test_pres_exch_handler.py index 509e87ba6f..87587eb674 100644 --- a/aries_cloudagent/protocols/present_proof/dif/tests/test_pres_exch_handler.py +++ b/aries_cloudagent/protocols/present_proof/dif/tests/test_pres_exch_handler.py @@ -8,7 +8,6 @@ from .....core.in_memory import InMemoryProfile from .....did.did_key import DIDKey -from .....resolver.did_resolver_registry import DIDResolverRegistry from .....resolver.did_resolver import DIDResolver from .....storage.vc_holder.vc_record import VCRecord from .....wallet.base import BaseWallet, DIDInfo @@ -69,9 +68,7 @@ def event_loop(request): def profile(): profile = InMemoryProfile.test_profile() context = profile.context - did_resolver_registry = DIDResolverRegistry() - context.injector.bind_instance(DIDResolverRegistry, did_resolver_registry) - context.injector.bind_instance(DIDResolver, DIDResolver(did_resolver_registry)) + context.injector.bind_instance(DIDResolver, DIDResolver([])) context.injector.bind_instance(DocumentLoader, custom_document_loader) context.settings["debug.auto_respond_presentation_request"] = True return profile diff --git a/aries_cloudagent/resolver/__init__.py b/aries_cloudagent/resolver/__init__.py index 51bef53657..e4b82549d7 100644 --- a/aries_cloudagent/resolver/__init__.py +++ b/aries_cloudagent/resolver/__init__.py @@ -5,30 +5,30 @@ from ..config.injection_context import InjectionContext from ..config.provider import ClassProvider -from .did_resolver_registry import DIDResolverRegistry +from ..resolver.did_resolver import DIDResolver LOGGER = logging.getLogger(__name__) async def setup(context: InjectionContext): """Set up default resolvers.""" - registry = context.inject_or(DIDResolverRegistry) + registry = context.inject_or(DIDResolver) if not registry: - LOGGER.warning("No DID Resolver Registry instance found in context") + LOGGER.warning("No DID Resolver instance found in context") return key_resolver = ClassProvider( "aries_cloudagent.resolver.default.key.KeyDIDResolver" ).provide(context.settings, context.injector) await key_resolver.setup(context) - registry.register(key_resolver) + registry.register_resolver(key_resolver) if not context.settings.get("ledger.disabled"): indy_resolver = ClassProvider( "aries_cloudagent.resolver.default.indy.IndyDIDResolver" ).provide(context.settings, context.injector) await indy_resolver.setup(context) - registry.register(indy_resolver) + registry.register_resolver(indy_resolver) else: LOGGER.warning("Ledger is not configured, not loading IndyDIDResolver") @@ -36,11 +36,11 @@ async def setup(context: InjectionContext): "aries_cloudagent.resolver.default.web.WebDIDResolver" ).provide(context.settings, context.injector) await web_resolver.setup(context) - registry.register(web_resolver) + registry.register_resolver(web_resolver) if context.settings.get("resolver.universal"): universal_resolver = ClassProvider( "aries_cloudagent.resolver.default.universal.UniversalResolver" ).provide(context.settings, context.injector) await universal_resolver.setup(context) - registry.register(universal_resolver) + registry.register_resolver(universal_resolver) diff --git a/aries_cloudagent/resolver/did_resolver.py b/aries_cloudagent/resolver/did_resolver.py index f57ec47fd9..bf52959043 100644 --- a/aries_cloudagent/resolver/did_resolver.py +++ b/aries_cloudagent/resolver/did_resolver.py @@ -8,7 +8,7 @@ from datetime import datetime from itertools import chain import logging -from typing import Sequence, Tuple, Type, TypeVar, Union +from typing import List, Sequence, Tuple, Type, TypeVar, Union from pydid import DID, DIDError, DIDUrl, Resource, NonconformantDocument from pydid.doc.doc import IDNotFoundError @@ -22,7 +22,6 @@ ResolutionResult, ResolverError, ) -from .did_resolver_registry import DIDResolverRegistry LOGGER = logging.getLogger(__name__) @@ -33,9 +32,13 @@ class DIDResolver: """did resolver singleton.""" - def __init__(self, registry: DIDResolverRegistry): + def __init__(self, resolvers: List[BaseDIDResolver] = None): """Create DID Resolver.""" - self.did_resolver_registry = registry + self.resolvers = resolvers or [] + + def register_resolver(self, resolver: BaseDIDResolver): + """Register a new resolver.""" + self.resolvers.append(resolver) async def _resolve( self, profile: Profile, did: Union[str, DID] @@ -90,7 +93,7 @@ async def _match_did_to_resolver( """ valid_resolvers = [ resolver - for resolver in self.did_resolver_registry.resolvers + for resolver in self.resolvers if await resolver.supports(profile, did) ] native_resolvers = filter(lambda resolver: resolver.native, valid_resolvers) diff --git a/aries_cloudagent/resolver/did_resolver_registry.py b/aries_cloudagent/resolver/did_resolver_registry.py deleted file mode 100644 index 4154454236..0000000000 --- a/aries_cloudagent/resolver/did_resolver_registry.py +++ /dev/null @@ -1,28 +0,0 @@ -"""In memmory storage for registering did resolvers.""" - -import logging -from typing import Sequence - -from .base import BaseDIDResolver - -LOGGER = logging.getLogger(__name__) - - -class DIDResolverRegistry: - """Registry for did resolvers.""" - - def __init__(self): - """Initialize list for did resolvers.""" - self._resolvers = [] - - @property - def resolvers( - self, - ) -> Sequence[BaseDIDResolver]: - """Accessor for a list of all did resolvers.""" - return self._resolvers - - def register(self, resolver) -> None: - """Register a resolver.""" - LOGGER.debug("Registering resolver %s", resolver) - self._resolvers.append(resolver) diff --git a/aries_cloudagent/resolver/tests/test_did_resolver.py b/aries_cloudagent/resolver/tests/test_did_resolver.py index b08480e805..38d7a1cf71 100644 --- a/aries_cloudagent/resolver/tests/test_did_resolver.py +++ b/aries_cloudagent/resolver/tests/test_did_resolver.py @@ -18,7 +18,6 @@ ResolverType, ) from ..did_resolver import DIDResolver -from ..did_resolver_registry import DIDResolverRegistry from . import DOC @@ -88,10 +87,10 @@ async def _resolve(self, profile, did): @pytest.fixture def resolver(): - did_resolver_registry = DIDResolverRegistry() + did_resolver_registry = [] for method in TEST_DID_METHODS: resolver = MockResolver([method], DIDDocument.deserialize(DOC)) - did_resolver_registry.register(resolver) + did_resolver_registry.append(resolver) return DIDResolver(did_resolver_registry) @@ -121,11 +120,9 @@ async def test_match_did_to_resolver_x_not_supported(resolver): @pytest.mark.asyncio async def test_match_did_to_resolver_native_priority(profile): - registry = DIDResolverRegistry() native = MockResolver(["sov"], native=True) non_native = MockResolver(["sov"], native=False) - registry.register(non_native) - registry.register(native) + registry = [non_native, native] resolver = DIDResolver(registry) assert [native, non_native] == await resolver._match_did_to_resolver( profile, TEST_DID0 @@ -134,15 +131,11 @@ async def test_match_did_to_resolver_native_priority(profile): @pytest.mark.asyncio async def test_match_did_to_resolver_registration_order(profile): - registry = DIDResolverRegistry() native1 = MockResolver(["sov"], native=True) - registry.register(native1) native2 = MockResolver(["sov"], native=True) - registry.register(native2) non_native3 = MockResolver(["sov"], native=False) - registry.register(non_native3) native4 = MockResolver(["sov"], native=True) - registry.register(native4) + registry = [native1, native2, non_native3, native4] resolver = DIDResolver(registry) assert [ native1, @@ -200,8 +193,6 @@ async def test_resolve_did_x_not_supported(resolver, profile): async def test_resolve_did_x_not_found(profile): py_did = DID("did:cowsay:EiDahaOGH-liLLdDtTxEAdc8i-cfCz-WUcQdRJheMVNn3A") cowsay_resolver_not_found = MockResolver(["cowsay"], resolved=DIDNotFound()) - registry = DIDResolverRegistry() - registry.register(cowsay_resolver_not_found) - resolver = DIDResolver(registry) + resolver = DIDResolver([cowsay_resolver_not_found]) with pytest.raises(DIDNotFound): await resolver.resolve(profile, py_did) diff --git a/aries_cloudagent/resolver/tests/test_did_resolver_registry.py b/aries_cloudagent/resolver/tests/test_did_resolver_registry.py deleted file mode 100644 index dba7afffbd..0000000000 --- a/aries_cloudagent/resolver/tests/test_did_resolver_registry.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Test did resolver registery.""" - -import pytest -import unittest -from ..did_resolver_registry import DIDResolverRegistry - - -def test_create_registry(): - did_resolver_registry = DIDResolverRegistry() - test_resolver = unittest.mock.MagicMock() - did_resolver_registry.register(test_resolver) - assert did_resolver_registry.resolvers == [test_resolver] diff --git a/aries_cloudagent/wallet/did_method.py b/aries_cloudagent/wallet/did_method.py index 82382ea39b..797c26fd20 100644 --- a/aries_cloudagent/wallet/did_method.py +++ b/aries_cloudagent/wallet/did_method.py @@ -47,7 +47,8 @@ def supports_key_type(self, key_type: KeyType) -> bool: """Check whether the current method supports the key type.""" return key_type in self.supported_key_types - def from_metadata(metadata: Mapping) -> "DIDMethod": + @classmethod + def from_metadata(cls, metadata: Mapping) -> "DIDMethod": """Get DID method instance from metadata object. Returns SOV if no metadata was found for backwards compatability. @@ -63,7 +64,8 @@ def from_metadata(metadata: Mapping) -> "DIDMethod": # return default SOV for backward compat return DIDMethod.SOV - def from_method(method: str) -> Optional["DIDMethod"]: + @classmethod + def from_method(cls, method: str) -> Optional["DIDMethod"]: """Get DID method instance from the method name.""" for did_method in DIDMethod: if method == did_method.method_name: @@ -71,7 +73,8 @@ def from_method(method: str) -> Optional["DIDMethod"]: return None - def from_did(did: str) -> "DIDMethod": + @classmethod + def from_did(cls, did: str) -> "DIDMethod": """Get DID method instance from the method name.""" if not did.startswith("did:"): # sov has no prefix From 2d15ca4e190dbcce53649c59734da2cd7d8a43f3 Mon Sep 17 00:00:00 2001 From: Adam Burdett Date: Tue, 9 Aug 2022 13:36:40 -0600 Subject: [PATCH 2/5] formatting Signed-off-by: Adam Burdett --- aries_cloudagent/config/default_context.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aries_cloudagent/config/default_context.py b/aries_cloudagent/config/default_context.py index e3d9b24770..0c5f90cac2 100644 --- a/aries_cloudagent/config/default_context.py +++ b/aries_cloudagent/config/default_context.py @@ -49,7 +49,6 @@ async def build_context(self) -> InjectionContext: # Global event bus context.injector.bind_instance(EventBus, EventBus()) - # Global did resolver context.injector.bind_instance(DIDResolver, DIDResolver([])) From 06a7a1855bb6310c609e7ef4cd949a08a539b393 Mon Sep 17 00:00:00 2001 From: Adam Burdett Date: Wed, 10 Aug 2022 10:36:42 -0600 Subject: [PATCH 3/5] test update Signed-off-by: Adam Burdett --- aries_cloudagent/resolver/tests/test_did_resolver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aries_cloudagent/resolver/tests/test_did_resolver.py b/aries_cloudagent/resolver/tests/test_did_resolver.py index 38d7a1cf71..f2c4ba9ab5 100644 --- a/aries_cloudagent/resolver/tests/test_did_resolver.py +++ b/aries_cloudagent/resolver/tests/test_did_resolver.py @@ -100,7 +100,7 @@ def profile(): def test_create_resolver(resolver): - assert len(resolver.did_resolver_registry.resolvers) == len(TEST_DID_METHODS) + assert len(resolver.resolvers) == len(TEST_DID_METHODS) @pytest.mark.asyncio From 7a006850b81a6c535d3af619d9f49ef836ecafe5 Mon Sep 17 00:00:00 2001 From: Adam Burdett Date: Mon, 29 Aug 2022 13:37:49 -0400 Subject: [PATCH 4/5] fix: typo in DIDResolution.md Co-authored-by: Andrew Whitehead Signed-off-by: Adam Burdett --- DIDResolution.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DIDResolution.md b/DIDResolution.md index dbf11965ce..cbe00edc1d 100644 --- a/DIDResolution.md +++ b/DIDResolution.md @@ -29,7 +29,7 @@ In practice, DIDs and DID Documents are used for a variety of purposes but espec ## `DIDResolver` -In ACA-Py, the `DIDResolver` provides the interface to resolve DIDs using registered method resolvers. Method resolver registration happens on startup in a `did_resolers` list. This registry enables additional resolvers to be loaded via plugin. +In ACA-Py, the `DIDResolver` provides the interface to resolve DIDs using registered method resolvers. Method resolver registration happens on startup in a `did_resolvers` list. This registry enables additional resolvers to be loaded via plugin. #### Example usage: ```python= From 2d508e02bf2de634e573c633d6616d4445e052d7 Mon Sep 17 00:00:00 2001 From: Ian Costanzo Date: Fri, 2 Sep 2022 12:21:26 -0700 Subject: [PATCH 5/5] Endorser doc updates and some bug fixes Signed-off-by: Ian Costanzo --- Endorser.md | 43 +++++++++- aries_cloudagent/ledger/indy.py | 16 +++- .../endorse_transaction/v1_0/manager.py | 10 ++- aries_cloudagent/wallet/indy.py | 7 ++ aries_cloudagent/wallet/routes.py | 78 ++++++++++++++++-- aries_cloudagent/wallet/util.py | 10 +++ demo/features/0453-issue-credential.feature | 1 + demo/features/0586-sign-transaction.feature | 1 + demo/features/steps/0586-sign-transaction.py | 9 +- demo/runners/support/agent.py | 2 + docs/assets/endorse-cred-def.png | Bin 0 -> 134605 bytes docs/assets/endorse-cred-def.puml | 75 +++++++++++++++++ docs/assets/endorse-public-did.png | Bin 0 -> 93680 bytes docs/assets/endorse-public-did.puml | 53 ++++++++++++ docs/assets/endorser-design.png | Bin 0 -> 25582 bytes docs/assets/endorser-design.puml | 31 +++++++ 16 files changed, 324 insertions(+), 12 deletions(-) create mode 100644 docs/assets/endorse-cred-def.png create mode 100644 docs/assets/endorse-cred-def.puml create mode 100644 docs/assets/endorse-public-did.png create mode 100644 docs/assets/endorse-public-did.puml create mode 100644 docs/assets/endorser-design.png create mode 100644 docs/assets/endorser-design.puml diff --git a/Endorser.md b/Endorser.md index 54f545fce3..81b611f04d 100644 --- a/Endorser.md +++ b/Endorser.md @@ -1,7 +1,5 @@ # Transaction Endorser Support -Note that the ACA-Py transaction support is in the process of code refactor and cleanup. The following documents the current state, but is subject to change. - ACA-Py supports an [Endorser Protocol](https://github.com/hyperledger/aries-rfcs/pull/586), that allows an un-privileged agent (an "Author") to request another agent (the "Endorser") to sign their transactions so they can write these transactions to the ledger. This is required on Indy ledgers, where new agents will typically be granted only "Author" privileges. Transaction Endorsement is built into the protocols for Schema, Credential Definition and Revocation, and endorsements can be explicitely requested, or ACA-Py can be configured to automate the endorsement workflow. @@ -61,3 +59,44 @@ Endorsement: For Authors, specify whether to automatically promote a DID to the wallet public DID after writing to the ledger. ``` +## How Aca-py Handles Endorsements + +Internally, the Endorsement functionality is implemented as a protocol, and is implemented consistently with other protocols: + +- a [routes.py](https://github.com/hyperledger/aries-cloudagent-python/blob/main/aries_cloudagent/protocols/endorse_transaction/v1_0/routes.py) file exposes the admin endpoints +- [handler files](https://github.com/hyperledger/aries-cloudagent-python/tree/main/aries_cloudagent/protocols/endorse_transaction/v1_0/handlers) implement responses to any received Endorse protocol messages +- a [manager.py](https://github.com/hyperledger/aries-cloudagent-python/blob/main/aries_cloudagent/protocols/endorse_transaction/v1_0/manager.py) file implements common functionality that is called from both the routes.py and handler classes (as well as from other classes that need to interact with Endorser functionality) + +The Endorser makes use of the [Event Bus](https://github.com/hyperledger/aries-cloudagent-python/blob/main/CHANGELOG.md#july-14-2021) (links to the PR which links to a hackmd doc) to notify other protocols of any Endorser events of interest. For example, after a Credential Definition endorsement is received, the TransactionManager writes the endorsed transaction to the ledger and uses teh Event Bus to notify the Credential Defintition manager that it can do any required post-processing (such as writing the cred def record to the wallet, initiating the revocation registry, etc.). + +The overall architecture can be illustrated as: + +![Class Diagram](./docs/assets/endorser-design.png) + +### Create Credential Definition and Revocation Registry + +An example of an Endorser flow is as follows, showing how a credential definition endorsement is received and processed, and optionally kicks off the revocation registry process: + +![Sequence Diagram](./docs/assets/endorse-cred-def.png) + +You can see that there is a standard endorser flow happening each time there is a ledger write (illustrated in the "Endorser" process). + +At the end of each endorse sequence, the TransactionManager sends a notification via the EventBus so that any dependant processing can continue. Each Router is responsibiel for listening and responding to these notifications if necessary. + +For example: + +- Once the credential definition is created, a revocation registry must be created (for revocable cred defs) +- Once the revocation registry is created, a revocation entry must be created +- Potentially, the cred def status could be updated once the revocation entry is completed + +Using the EventBus decouples the event sequence. Any functions triggered by an event notification are typically also available directly via Admin endpoints. + +### Create DID and Promote to Public + +... and an example of creating a DID and promoting it to public (and creating an ATTRIB for the endpoint: + +![Sequence Diagram](./docs/assets/endorse-public-did.png) + +You can see the same endorsement processes in this sequence. + +Once the DID is written, the DID can (optionally) be promoted to the public DID, which will also invoke an ATTRIB transaction to write the endpoint. diff --git a/aries_cloudagent/ledger/indy.py b/aries_cloudagent/ledger/indy.py index 6f1c06e42f..c1c530c9af 100644 --- a/aries_cloudagent/ledger/indy.py +++ b/aries_cloudagent/ledger/indy.py @@ -770,6 +770,8 @@ async def update_endpoint_for_did( else None ) + LOGGER.info(f">>> exist_endpoint_of_type = {exist_endpoint_of_type}") + LOGGER.info(f">>> endpoint = {endpoint}") if exist_endpoint_of_type != endpoint: if await self.is_ledger_read_only(): raise LedgerError( @@ -783,6 +785,9 @@ async def update_endpoint_for_did( ) with IndyErrorHandler("Exception building attribute request", LedgerError): + LOGGER.info( + f">>> calling build_attrib_request() with {nym} {attr_json}" + ) request_json = await indy.ledger.build_attrib_request( nym, nym, None, attr_json, None ) @@ -791,17 +796,26 @@ async def update_endpoint_for_did( request_json = await indy.ledger.append_request_endorser( request_json, endorser_did ) + LOGGER.info( + f">>> calling _submit() with {request_json}, True, etc ..." + ) resp = await self._submit( request_json, - True, + sign=True, sign_did=public_info, write_ledger=write_ledger, ) if not write_ledger: + LOGGER.info(f">>> Returning ... signed_txn {resp}") return {"signed_txn": resp} + LOGGER.info(f">>> calling _submit() with {request_json}") await self._submit(request_json, True, True) return True + + else: + LOGGER.info(">>> NOT updating ledger endpoint!") + return False async def register_nym( diff --git a/aries_cloudagent/protocols/endorse_transaction/v1_0/manager.py b/aries_cloudagent/protocols/endorse_transaction/v1_0/manager.py index 8ce93c45a8..3669a16eeb 100644 --- a/aries_cloudagent/protocols/endorse_transaction/v1_0/manager.py +++ b/aries_cloudagent/protocols/endorse_transaction/v1_0/manager.py @@ -21,7 +21,10 @@ from ....storage.error import StorageError, StorageNotFoundError from ....transport.inbound.receipt import MessageReceipt from ....wallet.base import BaseWallet -from ....wallet.util import notify_endorse_did_event +from ....wallet.util import ( + notify_endorse_did_event, + notify_endorse_did_attrib_event, +) from .messages.cancel_transaction import CancelTransaction from .messages.endorsed_transaction_response import EndorsedTransactionResponse @@ -794,6 +797,11 @@ async def endorsed_txn_post_processing( did = ledger_response["result"]["txn"]["data"]["dest"] await notify_endorse_did_event(self._profile, did, meta_data) + elif ledger_response["result"]["txn"]["type"] == "100": + # write DID ATTRIB to ledger + did = ledger_response["result"]["txn"]["data"]["dest"] + await notify_endorse_did_attrib_event(self._profile, did, meta_data) + else: # TODO unknown ledger transaction type, just ignore for now ... pass diff --git a/aries_cloudagent/wallet/indy.py b/aries_cloudagent/wallet/indy.py index bba9f6ed49..a0e1eddd94 100644 --- a/aries_cloudagent/wallet/indy.py +++ b/aries_cloudagent/wallet/indy.py @@ -1,6 +1,7 @@ """Indy implementation of BaseWallet interface.""" import json +import logging from typing import List, Sequence, Tuple, Union @@ -36,6 +37,8 @@ from .util import b58_to_bytes, bytes_to_b58, bytes_to_b64 +LOGGER = logging.getLogger(__name__) + RECORD_TYPE_CONFIG = "config" RECORD_NAME_PUBLIC_DID = "default_public_did" @@ -720,6 +723,7 @@ async def set_did_endpoint( endpoint_type: the type of the endpoint/service. Only endpoint_type 'endpoint' affects local wallet """ + LOGGER.info(f">>> in set_did_endpoint() with {did} and {endpoint}") did_info = await self.get_local_did(did) if did_info.method != DIDMethod.SOV: raise WalletError("Setting DID endpoint is only allowed for did:sov DIDs") @@ -731,6 +735,7 @@ async def set_did_endpoint( metadata[endpoint_type.indy] = endpoint wallet_public_didinfo = await self.get_public_did() + LOGGER.info(f">>> wallet_public_didinfo = {wallet_public_didinfo}") if ( wallet_public_didinfo and wallet_public_didinfo.did == did ) or did_info.metadata.get("posted"): @@ -741,6 +746,7 @@ async def set_did_endpoint( ) if not ledger.read_only: async with ledger: + LOGGER.info(">>> calling update_endpoint_for_did() ...") attrib_def = await ledger.update_endpoint_for_did( did, endpoint, @@ -750,6 +756,7 @@ async def set_did_endpoint( routing_keys=routing_keys, ) if not write_ledger: + LOGGER.info(f">>> returning attrib_def {attrib_def}") return attrib_def await self.replace_local_did_metadata(did, metadata) diff --git a/aries_cloudagent/wallet/routes.py b/aries_cloudagent/wallet/routes.py index 6e73f455ba..8056bbdfd2 100644 --- a/aries_cloudagent/wallet/routes.py +++ b/aries_cloudagent/wallet/routes.py @@ -17,6 +17,7 @@ from ..ledger.error import LedgerConfigError, LedgerError from ..messaging.models.base import BaseModelError from ..messaging.models.openapi import OpenAPISchema +from ..messaging.responder import BaseResponder from ..messaging.valid import ( DID_POSTURE, ENDPOINT, @@ -442,6 +443,17 @@ async def wallet_set_public_did(request: web.BaseRequest): connection_id = request.query.get("conn_id") attrib_def = None + # check if we need to endorse + if is_author_role(context.profile): + # authors cannot write to the ledger + write_ledger = False + create_transaction_for_endorser = True + if not connection_id: + # author has not provided a connection id, so determine which to use + connection_id = await get_endorser_connection_id(context.profile) + if not connection_id: + raise web.HTTPBadRequest(reason="No endorser connection found") + wallet = session.inject_or(BaseWallet) if not wallet: raise web.HTTPForbidden(reason="No wallet available") @@ -462,6 +474,7 @@ async def wallet_set_public_did(request: web.BaseRequest): routing_keys = mediation_record.routing_keys try: + LOGGER.info(">>> calling promote_wallet_public_did() from route ...") info, attrib_def = await promote_wallet_public_did( context.profile, context, @@ -534,6 +547,7 @@ async def promote_wallet_public_did( # check if we need to endorse if is_author_role(context.profile): + LOGGER.info(">>> IS author ...") # authors cannot write to the ledger write_ledger = False @@ -542,6 +556,8 @@ async def promote_wallet_public_did( connection_id = await get_endorser_connection_id(context.profile) if not connection_id: raise web.HTTPBadRequest(reason="No endorser connection found") + else: + LOGGER.info(">>> IS NOT author ...") if not write_ledger: try: @@ -577,14 +593,19 @@ async def promote_wallet_public_did( did_info = await wallet.get_local_did(did) info = await wallet.set_public_did(did_info) + LOGGER.info(f">>> did_info = {did_info}") + LOGGER.info(f">>> info = {info}") + if info: # Publish endpoint if necessary endpoint = did_info.metadata.get("endpoint") + LOGGER.info(f">>> endpoint = {endpoint}") if not endpoint: async with session_fn() as session: wallet = session.inject_or(BaseWallet) endpoint = context.settings.get("default_endpoint") + LOGGER.info(f">>> calling wallet.set_did_endpoint() with {endpoint}") attrib_def = await wallet.set_did_endpoint( info.did, endpoint, @@ -594,11 +615,6 @@ async def promote_wallet_public_did( routing_keys=routing_keys, ) - # Commented the below lines as the function set_did_endpoint - # was calling update_endpoint_for_did of ledger - # async with ledger: - # await ledger.update_endpoint_for_did(info.did, endpoint) - # Route the public DID route_manager = profile.inject(RouteManager) await route_manager.route_public_did(profile, info.verkey) @@ -808,20 +824,68 @@ async def on_register_nym_event(profile: Profile, event: Event): """Handle any events we need to support.""" # after the nym record is written, promote to wallet public DID + LOGGER.info(f">>> got a NYM event ... {event}") if is_author_role(profile) and profile.context.settings.get_value( "endorser.auto_promote_author_did" ): + LOGGER.info(">>> calling promote_wallet_public_did() ...") did = event.payload["did"] connection_id = event.payload.get("connection_id") try: - await promote_wallet_public_did( + info, attrib_def = await promote_wallet_public_did( profile, profile.context, profile.session, did, connection_id ) - except Exception: + except Exception as err: + # log the error, but continue + LOGGER.exception( + "Error promoting to public DID: %s", + err, + ) + return + + transaction_mgr = TransactionManager(profile) + try: + transaction = await transaction_mgr.create_record( + messages_attach=attrib_def["signed_txn"], connection_id=connection_id + ) + except StorageError as err: # log the error, but continue LOGGER.exception( "Error accepting endorser invitation/configuring endorser connection: %s", + err, ) + return + + # if auto-request, send the request to the endorser + if profile.settings.get_value("endorser.auto_request"): + try: + transaction, transaction_request = await transaction_mgr.create_request( + transaction=transaction, + # TODO see if we need to parameterize these params + # expires_time=expires_time, + # endorser_write_txn=endorser_write_txn, + ) + except (StorageError, TransactionManagerError) as err: + # log the error, but continue + LOGGER.exception( + "Error creating endorser transaction request: %s", + err, + ) + + # TODO not sure how to get outbound_handler in an event ... + # await outbound_handler(transaction_request, connection_id=connection_id) + responder = profile.inject_or(BaseResponder) + if responder: + await responder.send( + transaction_request, + connection_id=connection_id, + ) + else: + LOGGER.warning( + "Configuration has no BaseResponder: cannot update " + "ATTRIB record on DID: %s", + did, + ) async def register(app: web.Application): diff --git a/aries_cloudagent/wallet/util.py b/aries_cloudagent/wallet/util.py index f87e6a53da..942744bca8 100644 --- a/aries_cloudagent/wallet/util.py +++ b/aries_cloudagent/wallet/util.py @@ -102,7 +102,9 @@ def abbr_verkey(full_verkey: str, did: str = None) -> str: DID_EVENT_PREFIX = "acapy::ENDORSE_DID::" +DID_ATTRIB_EVENT_PREFIX = "acapy::ENDORSE_DID_ATTRIB::" EVENT_LISTENER_PATTERN = re.compile(f"^{DID_EVENT_PREFIX}(.*)?$") +ATTRIB_EVENT_LISTENER_PATTERN = re.compile(f"^{DID_ATTRIB_EVENT_PREFIX}(.*)?$") async def notify_endorse_did_event(profile: Profile, did: str, meta_data: dict): @@ -111,3 +113,11 @@ async def notify_endorse_did_event(profile: Profile, did: str, meta_data: dict): DID_EVENT_PREFIX + did, meta_data, ) + + +async def notify_endorse_did_attrib_event(profile: Profile, did: str, meta_data: dict): + """Send notification for a DID ATTRIB post-process event.""" + await profile.notify( + DID_ATTRIB_EVENT_PREFIX + did, + meta_data, + ) diff --git a/demo/features/0453-issue-credential.feature b/demo/features/0453-issue-credential.feature index 0c74f53645..d8b0188604 100644 --- a/demo/features/0453-issue-credential.feature +++ b/demo/features/0453-issue-credential.feature @@ -1,3 +1,4 @@ +@RFC0453 Feature: RFC 0453 Aries agent issue credential @T003-RFC0453 @GHA diff --git a/demo/features/0586-sign-transaction.feature b/demo/features/0586-sign-transaction.feature index e8c85d1e0b..1a66ef69ab 100644 --- a/demo/features/0586-sign-transaction.feature +++ b/demo/features/0586-sign-transaction.feature @@ -1,3 +1,4 @@ +@RFC0586 Feature: RFC 0586 Aries sign (endorse) transactions functions @T001-RFC0586 diff --git a/demo/features/steps/0586-sign-transaction.py b/demo/features/steps/0586-sign-transaction.py index 04b6249598..61702e84a8 100644 --- a/demo/features/steps/0586-sign-transaction.py +++ b/demo/features/steps/0586-sign-transaction.py @@ -34,11 +34,18 @@ def step_impl(context, agent_name, did_role): ) # make the new did the wallet's public did - created_did = agent_container_POST( + published_did = agent_container_POST( agent["agent"], "/wallet/did/public", params={"did": created_did["result"]["did"]}, ) + if "result" in published_did: + # published right away! + pass + elif "txn" in published_did: + # we are an author and need to go through the endorser process + # assume everything works! + async_sleep(3.0) if not "public_dids" in context: context.public_dids = {} diff --git a/demo/runners/support/agent.py b/demo/runners/support/agent.py index 07da797d0a..bd82314937 100644 --- a/demo/runners/support/agent.py +++ b/demo/runners/support/agent.py @@ -600,8 +600,10 @@ async def register_or_switch_wallet( if self.endorser_role and self.endorser_role == "author": if endorser_agent: await self.admin_POST("/wallet/did/public?did=" + self.did) + await asyncio.sleep(3.0) else: await self.admin_POST("/wallet/did/public?did=" + self.did) + await asyncio.sleep(3.0) elif cred_type == CRED_FORMAT_JSON_LD: # create did of appropriate type data = {"method": DID_METHOD_KEY, "options": {"key_type": KEY_TYPE_BLS}} diff --git a/docs/assets/endorse-cred-def.png b/docs/assets/endorse-cred-def.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb3d2fbb1ae920ddc0a0f8654514612222eb6f4 GIT binary patch literal 134605 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 z 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�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 *y? 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 CredDefRoutes: POST /credential-definitions +group Endorse transaction process +CredDefRoutes --> Ledger: create_and_send_credential_definition() +CredDefRoutes --> TransactionManager: create_record() +CredDefRoutes --> TransactionManager: create_request() +CredDefRoutes --> OutboundHandler: send_outbound_msg() +OutboundHandler --> OtherAgent: send_msg() +OtherAgent --> OtherAgent: endorse_msg() +EndorsedTxnHandler <-- OtherAgent: send_msg() +TransactionManager <-- EndorsedTxnHandler: receive_endorse_response() +TransactionManager <-- EndorsedTxnHandler: complete_transaction() +Ledger <-- TransactionManager: txn_submit() +TransactionManager --> TransactionManager: endorsed_txn_post_processing() +TransactionManager --> EventBus: notify_cred_def_event() +end + +' Create the revocation registry once the credential definition is written +CredDefRoutes <-- EventBus: on_cred_def_event() +CredDefRoutes --> IndyRevocation: init_issuer_registry() +IndyRevocation --> EventBus: notify_revocation_reg_init_event() +RevocationRoutes <-- EventBus: on_revocation_registry_init_event() +RevocationRoutes --> RevocationRoutes: generate_tails() +group Endorse transaction process +RevocationRoutes --> Ledger:send_revoc_reg_def() +RevocationRoutes --> TransactionManager: create_record() +RevocationRoutes --> TransactionManager: create_request() +RevocationRoutes --> OutboundHandler: send_outbound_msg() +OutboundHandler --> OtherAgent: send_msg() +OtherAgent --> OtherAgent: endorse_msg() +EndorsedTxnHandler <-- OtherAgent: send_msg() +TransactionManager <-- EndorsedTxnHandler: receive_endorse_response() +TransactionManager <-- EndorsedTxnHandler: complete_transaction() +Ledger <-- TransactionManager: txn_submit() +TransactionManager --> TransactionManager: endorsed_txn_post_processing() +TransactionManager --> EventBus: notify_revocation_reg_endorsed_event() +end + +' Now create the revocation entry (accumulator) +RevocationRoutes <-- EventBus: on_revocation_registry_endorsed_event() +RevocationRoutes --> RevocationRoutes: upload_tails() +RevocationRoutes --> EventBus: notify_revocation_entry_event() +RevocationRoutes <-- EventBus: on_revocation_entry_event() +group Endorse transaction process +RevocationRoutes --> IndyRevocation: send_entry() +IndyRevocation --> Ledger: send_entry() +RevocationRoutes --> TransactionManager: create_record() +RevocationRoutes --> TransactionManager: create_request() +RevocationRoutes --> OutboundHandler: send_outbound_msg() +OutboundHandler --> OtherAgent: send_msg() +OtherAgent --> OtherAgent: endorse_msg() +EndorsedTxnHandler <-- OtherAgent: send_msg() +TransactionManager <-- EndorsedTxnHandler: receive_endorse_response() +TransactionManager <-- EndorsedTxnHandler: complete_transaction() +Ledger <-- TransactionManager: txn_submit() +TransactionManager --> TransactionManager: endorsed_txn_post_processing() + +' Notify that the revocation entry is completed (no one listens to this notification yet) +TransactionManager --> EventBus: notify_revocation_entry_endorsed_event() +end + +@enduml diff --git a/docs/assets/endorse-public-did.png b/docs/assets/endorse-public-did.png new file mode 100644 index 0000000000000000000000000000000000000000..275b4ab6de4f715c3ab8bdeb7cd299b277f9cc08 GIT binary patch literal 93680 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

_%h8iDW>W$5 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 T^NE$LadkBHHA=4Befoa@d*{tf literal 0 HcmV?d00001 diff --git a/docs/assets/endorse-public-did.puml b/docs/assets/endorse-public-did.puml new file mode 100644 index 0000000000..63de78bb50 --- /dev/null +++ b/docs/assets/endorse-public-did.puml @@ -0,0 +1,53 @@ +@startuml +' List of actors for our use case +actor Admin +participant WalletRoutes +participant IndyWallet +participant LedgerRoutes +participant Ledger +participant TransactionManager +participant EventBus +participant OutboundHandler +participant EndorsedTxnHandler +boundary OtherAgent + +' Sequence for writing a new DID on the ledger (assumes the author already has a DID) +Admin --> WalletRoutes: POST /wallet/did/create +Admin --> LedgerRoutes: POST /ledger/register-nym +group Endorse transaction process +LedgerRoutes --> Ledger: register_nym() +LedgerRoutes --> TransactionManager: create_record() +LedgerRoutes --> TransactionManager: create_request() +LedgerRoutes --> OutboundHandler: send_outbound_msg() +OutboundHandler --> OtherAgent: send_msg() +OtherAgent --> OtherAgent: endorse_msg() +EndorsedTxnHandler <-- OtherAgent: send_msg() +TransactionManager <-- EndorsedTxnHandler: receive_endorse_response() +TransactionManager <-- EndorsedTxnHandler: complete_transaction() +Ledger <-- TransactionManager: txn_submit() +TransactionManager --> TransactionManager: endorsed_txn_post_processing() +TransactionManager --> EventBus: notify_endorse_did_event() +end + +WalletRoutes <-- EventBus: on_register_nym_event() +WalletRoutes --> WalletRoutes:promote_wallet_public_did() +WalletRoutes --> IndyWallet:set_public_did() +group Endorse transaction process +WalletRoutes --> IndyWallet:set_did_endpoint() +IndyWallet --> Ledger:update_endpoint_for_did() +WalletRoutes --> TransactionManager: create_record() +WalletRoutes --> TransactionManager: create_request() +WalletRoutes --> OutboundHandler: send_outbound_msg() +OutboundHandler --> OtherAgent: send_msg() +OtherAgent --> OtherAgent: endorse_msg() +EndorsedTxnHandler <-- OtherAgent: send_msg() +TransactionManager <-- EndorsedTxnHandler: receive_endorse_response() +TransactionManager <-- EndorsedTxnHandler: complete_transaction() +Ledger <-- TransactionManager: txn_submit() +TransactionManager --> TransactionManager: endorsed_txn_post_processing() + +' notification that no one is listening to yet +TransactionManager --> EventBus: notify_endorse_did_attrib_event() +end + +@enduml diff --git a/docs/assets/endorser-design.png b/docs/assets/endorser-design.png new file mode 100644 index 0000000000000000000000000000000000000000..1c4b9fc55575268493640eeebf664f3796359300 GIT binary patch literal 25582 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 literal 0 HcmV?d00001 diff --git a/docs/assets/endorser-design.puml b/docs/assets/endorser-design.puml new file mode 100644 index 0000000000..39883ea66b --- /dev/null +++ b/docs/assets/endorser-design.puml @@ -0,0 +1,31 @@ +@startuml +interface AdminUser + +interface OtherAgent + +object TransactionRoutes + +object TransactionHandlers + +AdminUser --> TransactionRoutes: invoke_endpoint() + +OtherAgent --> TransactionHandlers: send_message() + +object TransactionManager + +object Wallet + +TransactionManager --> Wallet: manage_records() + +TransactionRoutes --> TransactionManager: invoke_api() +TransactionHandlers --> TransactionManager: handle_msg() + +object EventBus + +TransactionManager --> EventBus: notify() + +interface OtherProtocolRoutes + +OtherProtocolRoutes --> EventBus: subscribe() +EventBus --> OtherProtocolRoutes: notify() +@enduml