private IObservable <UploadResult> DoUpload(UploadParameter uploadParam)
 {
     try
     {
         var uploadResult = CreateProximaxDataService.CreateData(uploadParam).SelectMany(uploadedData =>
                                                                                         CreateProximaxMessagePayloadService.CreateMessagePayload(uploadParam, uploadedData)
                                                                                         .SelectMany(messagePayload =>
                                                                                                     CreateAndAnnounceTransaction(uploadParam, messagePayload)
                                                                                                     .Select(transactionHash =>
                                                                                                             CreateUploadResult(messagePayload, transactionHash)))).Wait();
         return(Observable.Return(uploadResult));
     }
     catch (Exception ex)
     {
         return(Observable.Throw <UploadResult>(new UploadFailureException("Upload failed.", ex)));
     }
 }