2626 TransactionManagerError ,
2727)
2828from ..protocols .endorse_transaction .v1_0 .models .transaction_record import (
29+ TransactionRecord ,
2930 TransactionRecordSchema ,
3031)
3132from ..protocols .endorse_transaction .v1_0 .util import (
@@ -295,18 +296,29 @@ async def register_ledger_nym(request: web.BaseRequest):
295296 )
296297 endorser_did = endorser_info ["endorser_did" ]
297298
299+ meta_data = {"did" : did , "verkey" : verkey , "alias" : alias , "role" : role }
298300 success = False
299301 txn = None
300302 async with ledger :
301303 try :
302- (success , txn ) = await ledger .register_nym (
303- did ,
304- verkey ,
305- alias ,
306- role ,
307- write_ledger = write_ledger ,
308- endorser_did = endorser_did ,
309- )
304+ # if we are an author check if we have a public DID or not
305+ write_ledger_nym_transaction = True
306+ # special case - if we are an author with no public DID
307+ if create_transaction_for_endorser :
308+ public_info = await ledger .get_wallet_public_did ()
309+ if not public_info :
310+ write_ledger_nym_transaction = False
311+ success = False
312+ txn = {"signed_txn" : json .dumps (meta_data )}
313+ if write_ledger_nym_transaction :
314+ (success , txn ) = await ledger .register_nym (
315+ did ,
316+ verkey ,
317+ alias ,
318+ role ,
319+ write_ledger = write_ledger ,
320+ endorser_did = endorser_did ,
321+ )
310322 except LedgerTransactionError as err :
311323 raise web .HTTPForbidden (reason = err .roll_up )
312324 except LedgerError as err :
@@ -321,7 +333,6 @@ async def register_ledger_nym(request: web.BaseRequest):
321333 )
322334 )
323335
324- meta_data = {"did" : did , "verkey" : verkey , "alias" : alias , "role" : role }
325336 if not create_transaction_for_endorser :
326337 # Notify event
327338 await notify_register_did_event (context .profile , did , meta_data )
@@ -340,12 +351,21 @@ async def register_ledger_nym(request: web.BaseRequest):
340351 # if auto-request, send the request to the endorser
341352 if context .settings .get_value ("endorser.auto_request" ):
342353 try :
354+ endorser_write_txn = not write_ledger_nym_transaction
343355 transaction , transaction_request = await transaction_mgr .create_request (
344356 transaction = transaction ,
357+ author_goal_code = TransactionRecord .REGISTER_PUBLIC_DID
358+ if endorser_write_txn
359+ else None ,
360+ signer_goal_code = TransactionRecord .WRITE_DID_TRANSACTION
361+ if endorser_write_txn
362+ else None ,
363+ endorser_write_txn = endorser_write_txn ,
345364 # TODO see if we need to parameterize these params
346365 # expires_time=expires_time,
347366 # endorser_write_txn=endorser_write_txn,
348367 )
368+ txn = transaction .serialize ()
349369 except (StorageError , TransactionManagerError ) as err :
350370 raise web .HTTPBadRequest (reason = err .roll_up ) from err
351371
0 commit comments