Skip to content

Commit 41d1376

Browse files
Use DID Update event for Service and Verification Method creation (#34)
Signed-off-by: Alexander Shenshin <[email protected]>
1 parent 7d04dd0 commit 41d1376

File tree

10 files changed

+80
-212
lines changed

10 files changed

+80
-212
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ did = HederaDid(client=client, private_key_der="private_key_der")
130130

131131
await did.register()
132132

133-
await did.add_service(
133+
await did.add_or_update_service(
134134
id_=f"{did.identifier}#service-1", service_type="LinkedDomains", service_endpoint="https://example.com/vcs"
135135
)
136136
```

docs/dev/getting-started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ did = HederaDid(client=client, private_key_der="private_key_der")
4444

4545
await did.register()
4646

47-
await did.add_service(
47+
await did.add_or_update_service(
4848
id_=f"{did.identifier}#service-1", service_type="LinkedDomains", service_endpoint="https://example.com/vcs"
4949
)
5050
```

hiero_did_sdk_python/did/did_document.py

Lines changed: 3 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def get_json_payload(self):
154154

155155
return root_object
156156

157-
async def _process_create_message(self, message: HcsDidMessage): # noqa: C901
157+
async def _process_create_message(self, message: HcsDidMessage):
158158
event = message.event
159159

160160
match event.event_target:
@@ -208,50 +208,6 @@ async def _process_create_message(self, message: HcsDidMessage): # noqa: C901
208208
self.controller = did_owner_event.get_controller_verification_method()
209209
self._public_key = did_owner_event.public_key
210210
self._on_activated(message.timestamp)
211-
case HcsDidEventTarget.SERVICE:
212-
update_service_event = cast(HcsDidUpdateServiceEvent, event)
213-
event_id = update_service_event.id_
214-
215-
if event_id in self.services:
216-
LOGGER.warning(f"Duplicate create Service event ID: {event_id}, skipping event...")
217-
return
218-
219-
self.services[event_id] = update_service_event.get_service_def()
220-
self._on_updated(message.timestamp)
221-
case HcsDidEventTarget.VERIFICATION_METHOD:
222-
update_verification_method_event = cast(HcsDidUpdateVerificationMethodEvent, event)
223-
event_id = update_verification_method_event.id_
224-
225-
if event_id in self.verification_methods:
226-
LOGGER.warning(f"Duplicate create Verification Method event ID: {event_id}, skipping event...")
227-
return
228-
229-
self.verification_methods[event_id] = update_verification_method_event.get_verification_method_def()
230-
self._on_updated(message.timestamp)
231-
case HcsDidEventTarget.VERIFICATION_RELATIONSHIP:
232-
update_verification_relationship_event = cast(HcsDidUpdateVerificationRelationshipEvent, event)
233-
relationship_type = update_verification_relationship_event.relationship_type
234-
event_id = update_verification_relationship_event.id_
235-
236-
if relationship_type not in self.verification_relationships:
237-
LOGGER.warning(
238-
f"Create verification Relationship event with type {relationship_type} is not supported, skipping event..."
239-
)
240-
return
241-
242-
if event_id in self.verification_relationships[relationship_type]:
243-
LOGGER.warning(
244-
f"Duplicate create Verification Relationship event ID: {event_id}, skipping event..."
245-
)
246-
return
247-
248-
self.verification_relationships[relationship_type].append(event_id)
249-
250-
if event_id not in self.verification_methods:
251-
self.verification_methods[event_id] = (
252-
update_verification_relationship_event.get_verification_method_def()
253-
)
254-
self._on_updated(message.timestamp)
255211
case _:
256212
LOGGER.warning(f"Create {event.event_target} operation is not supported, skipping event...")
257213

@@ -269,22 +225,12 @@ def _process_update_message(self, message: HcsDidMessage):
269225
update_service_event = cast(HcsDidUpdateServiceEvent, event)
270226
event_id = update_service_event.id_
271227

272-
if event_id not in self.services:
273-
LOGGER.warning(f"Service with ID: {event_id} is not found on the document, skipping event...")
274-
return
275-
276228
self.services[event_id] = update_service_event.get_service_def()
277229
self._on_updated(message.timestamp)
278230
case HcsDidEventTarget.VERIFICATION_METHOD:
279231
update_verification_method_event = cast(HcsDidUpdateVerificationMethodEvent, event)
280232
event_id = update_verification_method_event.id_
281233

282-
if event_id not in self.verification_methods:
283-
LOGGER.warning(
284-
f"Verification Method with ID: {event_id} is not found on the document, skipping event..."
285-
)
286-
return
287-
288234
self.verification_methods[event_id] = update_verification_method_event.get_verification_method_def()
289235
self._on_updated(message.timestamp)
290236
case HcsDidEventTarget.VERIFICATION_RELATIONSHIP:
@@ -294,15 +240,12 @@ def _process_update_message(self, message: HcsDidMessage):
294240

295241
if relationship_type not in self.verification_relationships:
296242
LOGGER.warning(
297-
f"Update verification Relationship event with type {relationship_type} is not supported, skipping event..."
243+
f"Update Verification Relationship event with type {relationship_type} is not supported, skipping event..."
298244
)
299245
return
300246

301247
if event_id not in self.verification_relationships[relationship_type]:
302-
LOGGER.warning(
303-
f"Verification Relationship with ID: {event_id} is not found on the document, skipping event..."
304-
)
305-
return
248+
self.verification_relationships[relationship_type].append(event_id)
306249

307250
self.verification_methods[event_id] = (
308251
update_verification_relationship_event.get_verification_method_def()

hiero_did_sdk_python/did/did_document_operation.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
class DidDocumentOperation(StrEnum):
55
CREATE = "create"
6-
CREATE_DID_DOCUMENT = "create-did-document"
76
UPDATE = "update"
8-
DELETE = "delete"
97
REVOKE = "revoke"
8+
DELETE = "delete"

hiero_did_sdk_python/did/hedera_did.py

Lines changed: 20 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from typing import Literal, cast
2+
from typing import cast
33

44
from hiero_sdk_python import Client, PrivateKey, PublicKey, TopicMessageSubmitTransaction
55
from hiero_sdk_python.transaction.transaction import Transaction
@@ -153,29 +153,19 @@ async def delete(self):
153153

154154
await self._submit_transaction(DidDocumentOperation.DELETE, HcsDidDeleteEvent())
155155

156-
async def add_service(self, id_: str, service_type: DidServiceType, service_endpoint: str):
157-
"""Add Service to DID document
156+
async def add_or_update_service(self, id_: str, service_type: DidServiceType, service_endpoint: str):
157+
"""Add or update DID document service
158158
159159
Args:
160160
id_: Service ID to create
161161
service_type: DID service type
162162
service_endpoint: Service endpoint
163163
"""
164-
await self._add_or_update_service(
165-
DidDocumentOperation.CREATE, id_=id_, type_=service_type, service_endpoint=service_endpoint
166-
)
164+
self._assert_can_submit_transaction()
167165

168-
async def update_service(self, id_: str, service_type: DidServiceType, service_endpoint: str):
169-
"""Update existing DID document service
166+
hcs_event = HcsDidUpdateServiceEvent(id_=id_, type_=service_type, service_endpoint=service_endpoint)
170167

171-
Args:
172-
id_: Service ID to update
173-
service_type: DID service type
174-
service_endpoint: Service endpoint
175-
"""
176-
await self._add_or_update_service(
177-
DidDocumentOperation.UPDATE, id_=id_, type_=service_type, service_endpoint=service_endpoint
178-
)
168+
await self._submit_transaction(DidDocumentOperation.UPDATE, hcs_event)
179169

180170
async def revoke_service(self, id_: str):
181171
"""Revoke existing DID document service
@@ -188,52 +178,30 @@ async def revoke_service(self, id_: str):
188178
hcs_event = HcsDidRevokeServiceEvent(id_)
189179
await self._submit_transaction(DidDocumentOperation.REVOKE, hcs_event)
190180

191-
async def add_verification_method(
181+
async def add_or_update_verification_method(
192182
self,
193183
id_: str,
194184
controller: str,
195185
public_key_der: str,
196186
type_: SupportedKeyType,
197187
):
198-
"""Add verification method to DID document
188+
"""Add or update DID document verification method
199189
200190
Args:
201191
id_: Verification method ID to create
202192
controller: Verification method controller ID
203193
public_key_der: Verification method public key encoded in DER format
204194
type_: Verification method key type
205195
"""
206-
await self._add_or_update_verification_method(
207-
DidDocumentOperation.CREATE,
208-
id_=id_,
209-
controller=controller,
210-
public_key=PublicKey.from_string(public_key_der),
211-
type_=type_,
212-
)
213196

214-
async def update_verification_method(
215-
self,
216-
id_: str,
217-
controller: str,
218-
public_key_der: str,
219-
type_: SupportedKeyType,
220-
):
221-
"""Update existing DID document verification method
197+
self._assert_can_submit_transaction()
222198

223-
Args:
224-
id_: Verification method ID to update
225-
controller: Verification method controller ID
226-
public_key_der: Verification method public key encoded in DER format
227-
type_: Verification method key type
228-
"""
229-
await self._add_or_update_verification_method(
230-
DidDocumentOperation.UPDATE,
231-
id_=id_,
232-
controller=controller,
233-
public_key=PublicKey.from_string(public_key_der),
234-
type_=type_,
199+
hcs_event = HcsDidUpdateVerificationMethodEvent(
200+
id_=id_, controller=controller, public_key=PublicKey.from_string(public_key_der), type_=type_
235201
)
236202

203+
await self._submit_transaction(DidDocumentOperation.UPDATE, hcs_event)
204+
237205
async def revoke_verification_method(self, id_: str):
238206
"""Revoke existing DID document verification method
239207
@@ -245,15 +213,15 @@ async def revoke_verification_method(self, id_: str):
245213
hcs_event = HcsDidRevokeVerificationMethodEvent(id_)
246214
await self._submit_transaction(DidDocumentOperation.REVOKE, hcs_event)
247215

248-
async def add_verification_relationship(
216+
async def add_or_update_verification_relationship(
249217
self,
250218
id_: str,
251219
controller: str,
252220
public_key_der: str,
253221
relationship_type: VerificationRelationshipType,
254222
type_: SupportedKeyType,
255223
):
256-
"""Add verification relationship to DID document
224+
"""Add or update DID document verification relationship
257225
258226
Args:
259227
id_: Verification relationship ID to create
@@ -262,41 +230,19 @@ async def add_verification_relationship(
262230
relationship_type: Verification relationship type
263231
type_: Verification relationship key type
264232
"""
265-
await self._add_or_update_verification_relationship(
266-
DidDocumentOperation.CREATE,
267-
id_=id_,
268-
controller=controller,
269-
public_key=PublicKey.from_string(public_key_der),
270-
relationship_type=relationship_type,
271-
type_=type_,
272-
)
273233

274-
async def update_verification_relationship(
275-
self,
276-
id_: str,
277-
controller: str,
278-
public_key_der: str,
279-
relationship_type: VerificationRelationshipType,
280-
type_: SupportedKeyType,
281-
):
282-
"""Update existing DID document verification relationship
234+
self._assert_can_submit_transaction()
283235

284-
Args:
285-
id_: Verification relationship ID to update
286-
controller: Verification relationship controller ID
287-
public_key_der: Verification relationship public key encoded in DER format
288-
relationship_type: Verification relationship type
289-
type_: Verification relationship key type
290-
"""
291-
await self._add_or_update_verification_relationship(
292-
DidDocumentOperation.UPDATE,
236+
hcs_event = HcsDidUpdateVerificationRelationshipEvent(
293237
id_=id_,
294-
public_key=PublicKey.from_string(public_key_der),
295238
controller=controller,
239+
public_key=PublicKey.from_string(public_key_der),
296240
relationship_type=relationship_type,
297241
type_=type_,
298242
)
299243

244+
await self._submit_transaction(DidDocumentOperation.UPDATE, hcs_event)
245+
300246
async def revoke_verification_relationship(self, id_: str, relationship_type: VerificationRelationshipType):
301247
"""Revoke existing DID document verification relationship
302248
@@ -323,27 +269,6 @@ def build_did_transaction(message_submit_transaction: TopicMessageSubmitTransact
323269

324270
await HcsMessageTransaction(self.topic_id, envelope, build_did_transaction).execute(self._client)
325271

326-
async def _add_or_update_service(
327-
self, operation: Literal[DidDocumentOperation.CREATE, DidDocumentOperation.UPDATE], **kwargs
328-
):
329-
self._assert_can_submit_transaction()
330-
331-
await self._submit_transaction(operation, HcsDidUpdateServiceEvent(**kwargs))
332-
333-
async def _add_or_update_verification_method(
334-
self, operation: Literal[DidDocumentOperation.CREATE, DidDocumentOperation.UPDATE], **kwargs
335-
):
336-
self._assert_can_submit_transaction()
337-
338-
await self._submit_transaction(operation, HcsDidUpdateVerificationMethodEvent(**kwargs))
339-
340-
async def _add_or_update_verification_relationship(
341-
self, operation: Literal[DidDocumentOperation.CREATE, DidDocumentOperation.UPDATE], **kwargs
342-
):
343-
self._assert_can_submit_transaction()
344-
345-
await self._submit_transaction(operation, HcsDidUpdateVerificationRelationshipEvent(**kwargs))
346-
347272
async def _handle_resolution_result(self, result: list[HcsDidMessageEnvelope]):
348273
if not self.identifier:
349274
raise Exception("Cannot handle DID resolution result: DID identifier is not defined")

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "hiero-did-sdk-python"
3-
version = "0.1.2"
3+
version = "0.1.3"
44
description = "The repository contains the Python SDK for managing DID Documents and Anoncreds Verifiable Credentials registry using Hedera Consensus Service."
55
authors = ["Alexander Shenshin <[email protected]>", "Paulo Caldas <[email protected]>"]
66
repository = "https://github.com/hiero-ledger/hiero-did-sdk-python"

tests/integration/demo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ async def test_demo(self, client: Client):
7272
)
7373

7474
# Add DID Document service
75-
await issuer_did.add_service(
75+
await issuer_did.add_or_update_service(
7676
id_=f"{issuer_did.identifier}#service-1",
7777
service_type="LinkedDomains",
7878
service_endpoint="https://example.com/vcs",
@@ -81,7 +81,7 @@ async def test_demo(self, client: Client):
8181
verification_key = PrivateKey.generate_ed25519()
8282

8383
# Add DID Document Verification Method
84-
await issuer_did.add_verification_method(
84+
await issuer_did.add_or_update_verification_method(
8585
id_=f"{issuer_did.identifier}#key-1",
8686
controller=issuer_did.identifier,
8787
public_key_der=verification_key.public_key().to_string(),

0 commit comments

Comments
 (0)