/// <inheritdoc/> public async Task <(DidExchangeRequestMessage, ConnectionRecord)> CreateRequestAsync(IAgentContext agentContext, string did) { var key = await Did.KeyForDidAsync(await agentContext.Pool, agentContext.Wallet, did); var endpointResult = await _ledgerService.LookupServiceEndpointAsync(agentContext, did); var myDid = await Did.CreateAndStoreMyDidAsync(agentContext.Wallet, "{}"); var connection = new ConnectionRecord { Endpoint = new AgentEndpoint { Uri = endpointResult.Result.Endpoint }, MyDid = DidUtils.ConvertVerkeyToDidKey(myDid.VerKey), MyVk = myDid.VerKey, TheirDid = did, TheirVk = key, State = ConnectionState.Negotiating, }; await _recordService.AddAsync(agentContext.Wallet, connection); var provisioningRecord = await _provisioningService.GetProvisioningAsync(agentContext.Wallet); var didDoc = new AttachmentContent { Base64 = connection.MyDidDoc(provisioningRecord).ToJson().ToBase64Url() }; await didDoc.SignWithJsonWebSignature(agentContext.Wallet, myDid.VerKey); var attachment = new Attachment { Id = Guid.NewGuid().ToString(), MimeType = "application/json", Data = didDoc }; var request = new DidExchangeRequestMessage { Did = connection.MyDid, Label = provisioningRecord.Owner.Name, DidDoc = attachment }; return(request, connection); }